From cfb3620d3ad8027bd73c3730650defded219fe47 Mon Sep 17 00:00:00 2001 From: jfh Date: Sun, 6 Sep 2020 08:32:10 +0200 Subject: [PATCH] group each plugin in its own folder --- .eslintignore | 2 +- .eslintrc.js | 4 +- badges/coverage-badge.svg | 2 +- badges/tests-badge.svg | 2 +- dist/editor/extensions/ext-arrows.js | 11 -- dist/editor/extensions/ext-arrows.js.map | 1 - .../extensions/ext-arrows/ext-arrows.js | 10 + .../extensions/ext-arrows/ext-arrows.js.map | 1 + dist/editor/extensions/ext-closepath.js | 2 - dist/editor/extensions/ext-closepath.js.map | 1 - .../extensions/ext-closepath/ext-closepath.js | 2 + .../ext-closepath/ext-closepath.js.map | 1 + dist/editor/extensions/ext-connector.js | 11 -- dist/editor/extensions/ext-connector.js.map | 1 - .../extensions/ext-connector/ext-connector.js | 11 ++ .../ext-connector/ext-connector.js.map | 1 + dist/editor/extensions/ext-eyedropper.js | 11 -- dist/editor/extensions/ext-eyedropper.js.map | 1 - .../ext-eyedropper/ext-eyedropper.js | 11 ++ .../ext-eyedropper/ext-eyedropper.js.map | 1 + dist/editor/extensions/ext-foreignobject.js | 11 -- .../extensions/ext-foreignobject.js.map | 1 - .../ext-foreignobject/ext-foreignobject.js | 10 + .../ext-foreignobject.js.map | 1 + dist/editor/extensions/ext-grid.js | 11 -- dist/editor/extensions/ext-grid.js.map | 1 - dist/editor/extensions/ext-grid/ext-grid.js | 11 ++ .../extensions/ext-grid/ext-grid.js.map | 1 + dist/editor/extensions/ext-helloworld.js | 11 -- dist/editor/extensions/ext-helloworld.js.map | 1 - .../ext-helloworld/ext-helloworld.js | 10 + .../ext-helloworld/ext-helloworld.js.map | 1 + dist/editor/extensions/ext-imagelib.js | 11 -- dist/editor/extensions/ext-imagelib.js.map | 1 - .../extensions/ext-imagelib/ext-imagelib.js | 10 + .../ext-imagelib/ext-imagelib.js.map | 1 + .../editor/extensions/ext-locale/arrows/en.js | 1 - .../editor/extensions/ext-locale/arrows/fr.js | 1 - .../extensions/ext-locale/arrows/zh_CN.js | 1 - .../extensions/ext-locale/closepath/en.js | 1 - .../extensions/ext-locale/closepath/zh_CN.js | 1 - .../extensions/ext-locale/connector/en.js | 1 - .../extensions/ext-locale/connector/fr.js | 1 - .../extensions/ext-locale/connector/zh_CN.js | 1 - .../extensions/ext-locale/eyedropper/en.js | 1 - .../extensions/ext-locale/eyedropper/zh_CN.js | 1 - .../extensions/ext-locale/foreignobject/en.js | 1 - .../ext-locale/foreignobject/zh_CN.js | 1 - dist/editor/extensions/ext-locale/grid/en.js | 1 - .../extensions/ext-locale/grid/zh_CN.js | 1 - .../extensions/ext-locale/helloworld/en.js | 1 - .../extensions/ext-locale/helloworld/zh_CN.js | 1 - .../extensions/ext-locale/imagelib/de.js | 1 - .../extensions/ext-locale/imagelib/en.js | 1 - .../extensions/ext-locale/imagelib/fr.js | 1 - .../extensions/ext-locale/imagelib/pl.js | 1 - .../extensions/ext-locale/imagelib/pt_BR.js | 1 - .../extensions/ext-locale/imagelib/ro.js | 1 - .../extensions/ext-locale/imagelib/sk.js | 1 - .../extensions/ext-locale/imagelib/sl.js | 1 - .../extensions/ext-locale/imagelib/zh_CN.js | 1 - .../extensions/ext-locale/markers/en.js | 1 - .../extensions/ext-locale/markers/zh_CN.js | 1 - .../extensions/ext-locale/mathjax/en.js | 1 - .../extensions/ext-locale/mathjax/zh_CN.js | 1 - .../extensions/ext-locale/panning/en.js | 1 - .../extensions/ext-locale/panning/zh_CN.js | 1 - .../extensions/ext-locale/placemark/en.js | 1 - .../extensions/ext-locale/polygon/en.js | 1 - .../extensions/ext-locale/polygon/zh_CN.js | 1 - .../ext-locale/server_moinsave/en.js | 1 - .../ext-locale/server_moinsave/zh_CN.js | 1 - .../ext-locale/server_opensave/en.js | 1 - .../ext-locale/server_opensave/zh_CN.js | 1 - .../editor/extensions/ext-locale/shapes/en.js | 1 - .../editor/extensions/ext-locale/shapes/fr.js | 1 - .../extensions/ext-locale/shapes/zh_CN.js | 1 - dist/editor/extensions/ext-locale/star/en.js | 1 - .../extensions/ext-locale/star/zh_CN.js | 1 - .../extensions/ext-locale/storage/de.js | 1 - .../extensions/ext-locale/storage/en.js | 1 - .../extensions/ext-locale/storage/fr.js | 1 - .../extensions/ext-locale/storage/zh_CN.js | 1 - .../extensions/ext-locale/webappfind/en.js | 1 - .../extensions/ext-locale/webappfind/zh_CN.js | 1 - dist/editor/extensions/ext-markers.js | 33 ---- dist/editor/extensions/ext-markers.js.map | 1 - .../extensions/ext-markers/ext-markers.js | 32 ++++ .../extensions/ext-markers/ext-markers.js.map | 1 + dist/editor/extensions/ext-mathjax.js | 11 -- dist/editor/extensions/ext-mathjax.js.map | 1 - .../extensions/ext-mathjax/ext-mathjax.js | 10 + .../extensions/ext-mathjax/ext-mathjax.js.map | 1 + .../extensions/ext-overview_window.js.map | 1 - .../ext-overview_window.js | 0 .../ext-overview_window.js.map | 1 + dist/editor/extensions/ext-panning.js | 11 -- dist/editor/extensions/ext-panning.js.map | 1 - .../extensions/ext-panning/ext-panning.js | 11 ++ .../extensions/ext-panning/ext-panning.js.map | 1 + dist/editor/extensions/ext-php_savefile.js | 2 - .../editor/extensions/ext-php_savefile.js.map | 1 - dist/editor/extensions/ext-placemark.js | 2 - dist/editor/extensions/ext-placemark.js.map | 1 - .../extensions/ext-placemark/ext-placemark.js | 2 + .../ext-placemark/ext-placemark.js.map | 1 + dist/editor/extensions/ext-polygon.js | 2 - dist/editor/extensions/ext-polygon.js.map | 1 - .../extensions/ext-polygon/ext-polygon.js | 2 + .../extensions/ext-polygon/ext-polygon.js.map | 1 + dist/editor/extensions/ext-server_moinsave.js | 10 - .../extensions/ext-server_moinsave.js.map | 1 - .../ext-server_moinsave.js | 9 + .../ext-server_moinsave.js.map | 1 + dist/editor/extensions/ext-server_opensave.js | 10 - .../extensions/ext-server_opensave.js.map | 1 - .../ext-server_opensave.js | 9 + .../ext-server_opensave.js.map | 1 + dist/editor/extensions/ext-shapes.js | 11 -- dist/editor/extensions/ext-shapes.js.map | 1 - .../extensions/ext-shapes/ext-shapes.js | 10 + .../extensions/ext-shapes/ext-shapes.js.map | 1 + dist/editor/extensions/ext-star.js | 2 - dist/editor/extensions/ext-star.js.map | 1 - dist/editor/extensions/ext-star/ext-star.js | 2 + .../extensions/ext-star/ext-star.js.map | 1 + dist/editor/extensions/ext-storage.js | 23 --- dist/editor/extensions/ext-storage.js.map | 1 - .../extensions/ext-storage/ext-storage.js | 22 +++ .../extensions/ext-storage/ext-storage.js.map | 1 + dist/editor/extensions/ext-webappfind.js | 10 - dist/editor/extensions/ext-webappfind.js.map | 1 - .../ext-webappfind/ext-webappfind.js | 10 + .../ext-webappfind/ext-webappfind.js.map | 1 + .../extensions/ext-xdomain-messaging.js | 2 - .../extensions/ext-xdomain-messaging.js.map | 1 - .../ext-xdomain-messaging.js | 2 + .../ext-xdomain-messaging.js.map | 1 + dist/editor/index.js | 36 ++-- dist/editor/index.js.map | 2 +- dist/editor/system/extensions/ext-arrows.js | 10 - .../extensions/ext-arrows/ext-arrows.js | 9 + .../editor/system/extensions/ext-closepath.js | 1 - .../extensions/ext-closepath/ext-closepath.js | 1 + .../editor/system/extensions/ext-connector.js | 10 - .../extensions/ext-connector/ext-connector.js | 10 + .../system/extensions/ext-eyedropper.js | 10 - .../ext-eyedropper/ext-eyedropper.js | 10 + .../system/extensions/ext-foreignobject.js | 10 - .../ext-foreignobject/ext-foreignobject.js | 9 + dist/editor/system/extensions/ext-grid.js | 10 - .../system/extensions/ext-grid/ext-grid.js | 10 + .../system/extensions/ext-helloworld.js | 10 - .../ext-helloworld/ext-helloworld.js | 9 + dist/editor/system/extensions/ext-imagelib.js | 10 - .../extensions/ext-imagelib/ext-imagelib.js | 9 + .../system/extensions/ext-locale/arrows/en.js | 1 - .../system/extensions/ext-locale/arrows/fr.js | 1 - .../extensions/ext-locale/arrows/zh_CN.js | 1 - .../extensions/ext-locale/closepath/en.js | 1 - .../extensions/ext-locale/closepath/zh_CN.js | 1 - .../extensions/ext-locale/connector/en.js | 1 - .../extensions/ext-locale/connector/fr.js | 1 - .../extensions/ext-locale/connector/zh_CN.js | 1 - .../extensions/ext-locale/eyedropper/en.js | 1 - .../extensions/ext-locale/eyedropper/zh_CN.js | 1 - .../extensions/ext-locale/foreignobject/en.js | 1 - .../ext-locale/foreignobject/zh_CN.js | 1 - .../system/extensions/ext-locale/grid/en.js | 1 - .../extensions/ext-locale/grid/zh_CN.js | 1 - .../extensions/ext-locale/helloworld/en.js | 1 - .../extensions/ext-locale/helloworld/zh_CN.js | 1 - .../extensions/ext-locale/imagelib/de.js | 1 - .../extensions/ext-locale/imagelib/en.js | 1 - .../extensions/ext-locale/imagelib/fr.js | 1 - .../extensions/ext-locale/imagelib/pl.js | 1 - .../extensions/ext-locale/imagelib/pt_BR.js | 1 - .../extensions/ext-locale/imagelib/ro.js | 1 - .../extensions/ext-locale/imagelib/sk.js | 1 - .../extensions/ext-locale/imagelib/sl.js | 1 - .../extensions/ext-locale/imagelib/zh_CN.js | 1 - .../extensions/ext-locale/markers/en.js | 1 - .../extensions/ext-locale/markers/zh_CN.js | 1 - .../extensions/ext-locale/mathjax/en.js | 1 - .../extensions/ext-locale/mathjax/zh_CN.js | 1 - .../extensions/ext-locale/panning/en.js | 1 - .../extensions/ext-locale/panning/zh_CN.js | 1 - .../extensions/ext-locale/placemark/en.js | 1 - .../extensions/ext-locale/polygon/en.js | 1 - .../extensions/ext-locale/polygon/zh_CN.js | 1 - .../ext-locale/server_moinsave/en.js | 1 - .../ext-locale/server_moinsave/zh_CN.js | 1 - .../ext-locale/server_opensave/en.js | 1 - .../ext-locale/server_opensave/zh_CN.js | 1 - .../system/extensions/ext-locale/shapes/en.js | 1 - .../system/extensions/ext-locale/shapes/fr.js | 1 - .../extensions/ext-locale/shapes/zh_CN.js | 1 - .../system/extensions/ext-locale/star/en.js | 1 - .../extensions/ext-locale/star/zh_CN.js | 1 - .../extensions/ext-locale/storage/de.js | 1 - .../extensions/ext-locale/storage/en.js | 1 - .../extensions/ext-locale/storage/fr.js | 1 - .../extensions/ext-locale/storage/zh_CN.js | 1 - .../extensions/ext-locale/webappfind/en.js | 1 - .../extensions/ext-locale/webappfind/zh_CN.js | 1 - dist/editor/system/extensions/ext-markers.js | 32 ---- .../extensions/ext-markers/ext-markers.js | 31 ++++ dist/editor/system/extensions/ext-mathjax.js | 10 - .../extensions/ext-mathjax/ext-mathjax.js | 9 + .../ext-overview_window.js | 0 dist/editor/system/extensions/ext-panning.js | 10 - .../extensions/ext-panning/ext-panning.js | 10 + .../system/extensions/ext-php_savefile.js | 1 - .../editor/system/extensions/ext-placemark.js | 1 - .../extensions/ext-placemark/ext-placemark.js | 1 + dist/editor/system/extensions/ext-polygon.js | 1 - .../extensions/ext-polygon/ext-polygon.js | 1 + .../system/extensions/ext-server_moinsave.js | 9 - .../ext-server_moinsave.js | 8 + .../system/extensions/ext-server_opensave.js | 9 - .../ext-server_opensave.js | 8 + dist/editor/system/extensions/ext-shapes.js | 10 - .../extensions/ext-shapes/ext-shapes.js | 9 + dist/editor/system/extensions/ext-star.js | 1 - .../system/extensions/ext-star/ext-star.js | 1 + dist/editor/system/extensions/ext-storage.js | 22 --- .../extensions/ext-storage/ext-storage.js | 21 +++ .../system/extensions/ext-webappfind.js | 9 - .../ext-webappfind/ext-webappfind.js | 9 + .../extensions/ext-xdomain-messaging.js | 1 - .../ext-xdomain-messaging.js | 1 + dist/editor/system/index.js | 12 +- jsconfig.json | 6 - rollup.config.js | 53 ++---- src/editor/.DS_Store | Bin 8196 -> 8196 bytes .../extensions/{ => ext-arrows}/ext-arrows.js | 6 +- .../arrows => ext-arrows/locale}/en.js | 0 .../arrows => ext-arrows/locale}/fr.js | 0 .../arrows => ext-arrows/locale}/zh-CN.js | 0 .../{ => ext-closepath}/ext-closepath.js | 2 +- .../closepath => ext-closepath/locale}/en.js | 0 .../locale}/zh-CN.js | 0 .../{ => ext-connector}/ext-connector.js | 18 +- .../connector => ext-connector/locale}/en.js | 0 .../connector => ext-connector/locale}/fr.js | 2 +- .../locale}/zh-CN.js | 0 .../{ => ext-eyedropper}/ext-eyedropper.js | 3 +- .../locale}/en.js | 0 .../locale}/zh-CN.js | 0 .../ext-foreignobject.js | 5 +- .../locale}/en.js | 0 .../locale}/zh-CN.js | 0 .../extensions/{ => ext-grid}/ext-grid.js | 5 +- .../grid => ext-grid/locale}/en.js | 0 .../grid => ext-grid/locale}/zh-CN.js | 0 .../{ => ext-helloworld}/ext-helloworld.js | 4 +- .../locale}/en.js | 0 .../locale}/zh-CN.js | 0 .../{ => ext-imagelib}/ext-imagelib.js | 24 +-- .../{imagelib => ext-imagelib}/index.js | 0 .../imagelib => ext-imagelib/locale}/de.js | 2 +- .../imagelib => ext-imagelib/locale}/en.js | 4 +- .../imagelib => ext-imagelib/locale}/fr.js | 2 +- .../imagelib => ext-imagelib/locale}/pl.js | 2 +- .../imagelib => ext-imagelib/locale}/pt-BR.js | 2 +- .../imagelib => ext-imagelib/locale}/ro.js | 2 +- .../imagelib => ext-imagelib/locale}/sk.js | 2 +- .../imagelib => ext-imagelib/locale}/sl.js | 2 +- .../imagelib => ext-imagelib/locale}/zh-CN.js | 2 +- .../openclipart.html} | 0 .../{imagelib => ext-imagelib}/openclipart.js | 0 .../{imagelib => ext-imagelib}/smiley.svg | 0 .../{ => ext-markers}/ext-markers.js | 3 +- .../markers => ext-markers/locale}/en.js | 0 .../markers => ext-markers/locale}/zh-CN.js | 0 .../{ => ext-mathjax}/ext-mathjax.js | 26 +-- .../mathjax => ext-mathjax/locale}/en.js | 0 .../mathjax => ext-mathjax/locale}/zh-CN.js | 0 .../{ => ext-mathjax}/mathjax/MathJax.min.js | 0 .../mathjax/TeX-AMS-MML_SVG.js | 0 .../ext-overview_window.js | 0 .../{ => ext-panning}/ext-panning.js | 3 +- .../panning => ext-panning/locale}/en.js | 0 .../panning => ext-panning/locale}/zh-CN.js | 0 .../{ => ext-placemark}/ext-placemark.js | 5 +- .../placemark => ext-placemark/locale}/en.js | 0 .../{ => ext-polygon}/ext-polygon.js | 5 +- .../polygon => ext-polygon/locale}/en.js | 0 .../polygon => ext-polygon/locale}/zh-CN.js | 0 .../ext-server_moinsave.js | 5 +- .../locale}/en.js | 0 .../locale}/zh-CN.js | 0 .../allowedMimeTypes.php | 0 .../ext-php_savefile.js | 0 .../ext-server_opensave.js | 7 +- .../{ => ext-server_opensave}/fileopen.php | 0 .../{ => ext-server_opensave}/filesave.php | 0 .../locale}/en.js | 0 .../locale}/zh-CN.js | 0 .../{ => ext-server_opensave}/savefile.php | 0 .../extensions/{ => ext-shapes}/ext-shapes.js | 5 +- .../shapes => ext-shapes/locale}/en.js | 0 .../shapes => ext-shapes/locale}/fr.js | 0 .../shapes => ext-shapes/locale}/zh-CN.js | 0 .../extensions/{ => ext-star}/ext-star.js | 5 +- .../star => ext-star/locale}/en.js | 0 .../star => ext-star/locale}/zh-CN.js | 0 .../{ => ext-storage}/ext-storage.js | 0 .../storage => ext-storage/locale}/de.js | 0 .../storage => ext-storage/locale}/en.js | 0 .../storage => ext-storage/locale}/fr.js | 0 .../storage => ext-storage/locale}/zh-CN.js | 0 .../{ => ext-webappfind}/ext-webappfind.js | 5 +- .../locale}/en.js | 0 .../locale}/zh-CN.js | 0 .../ext-xdomain-messaging.js | 0 src/editor/extensions/imagelib/index-es.html | 29 --- src/editor/extensions/imagelib/index.html | 30 --- .../extensions/imagelib/openclipart.html | 25 --- src/editor/index.js | 9 +- src/editor/locale.js | 25 +-- src/editor/svgedit.js | 172 +++--------------- 322 files changed, 519 insertions(+), 956 deletions(-) delete mode 100644 dist/editor/extensions/ext-arrows.js delete mode 100644 dist/editor/extensions/ext-arrows.js.map create mode 100644 dist/editor/extensions/ext-arrows/ext-arrows.js create mode 100644 dist/editor/extensions/ext-arrows/ext-arrows.js.map delete mode 100644 dist/editor/extensions/ext-closepath.js delete mode 100644 dist/editor/extensions/ext-closepath.js.map create mode 100644 dist/editor/extensions/ext-closepath/ext-closepath.js create mode 100644 dist/editor/extensions/ext-closepath/ext-closepath.js.map delete mode 100644 dist/editor/extensions/ext-connector.js delete mode 100644 dist/editor/extensions/ext-connector.js.map create mode 100644 dist/editor/extensions/ext-connector/ext-connector.js create mode 100644 dist/editor/extensions/ext-connector/ext-connector.js.map delete mode 100644 dist/editor/extensions/ext-eyedropper.js delete mode 100644 dist/editor/extensions/ext-eyedropper.js.map create mode 100644 dist/editor/extensions/ext-eyedropper/ext-eyedropper.js create mode 100644 dist/editor/extensions/ext-eyedropper/ext-eyedropper.js.map delete mode 100644 dist/editor/extensions/ext-foreignobject.js delete mode 100644 dist/editor/extensions/ext-foreignobject.js.map create mode 100644 dist/editor/extensions/ext-foreignobject/ext-foreignobject.js create mode 100644 dist/editor/extensions/ext-foreignobject/ext-foreignobject.js.map delete mode 100644 dist/editor/extensions/ext-grid.js delete mode 100644 dist/editor/extensions/ext-grid.js.map create mode 100644 dist/editor/extensions/ext-grid/ext-grid.js create mode 100644 dist/editor/extensions/ext-grid/ext-grid.js.map delete mode 100644 dist/editor/extensions/ext-helloworld.js delete mode 100644 dist/editor/extensions/ext-helloworld.js.map create mode 100644 dist/editor/extensions/ext-helloworld/ext-helloworld.js create mode 100644 dist/editor/extensions/ext-helloworld/ext-helloworld.js.map delete mode 100644 dist/editor/extensions/ext-imagelib.js delete mode 100644 dist/editor/extensions/ext-imagelib.js.map create mode 100644 dist/editor/extensions/ext-imagelib/ext-imagelib.js create mode 100644 dist/editor/extensions/ext-imagelib/ext-imagelib.js.map delete mode 100644 dist/editor/extensions/ext-locale/arrows/en.js delete mode 100644 dist/editor/extensions/ext-locale/arrows/fr.js delete mode 100644 dist/editor/extensions/ext-locale/arrows/zh_CN.js delete mode 100644 dist/editor/extensions/ext-locale/closepath/en.js delete mode 100644 dist/editor/extensions/ext-locale/closepath/zh_CN.js delete mode 100644 dist/editor/extensions/ext-locale/connector/en.js delete mode 100644 dist/editor/extensions/ext-locale/connector/fr.js delete mode 100644 dist/editor/extensions/ext-locale/connector/zh_CN.js delete mode 100644 dist/editor/extensions/ext-locale/eyedropper/en.js delete mode 100644 dist/editor/extensions/ext-locale/eyedropper/zh_CN.js delete mode 100644 dist/editor/extensions/ext-locale/foreignobject/en.js delete mode 100644 dist/editor/extensions/ext-locale/foreignobject/zh_CN.js delete mode 100644 dist/editor/extensions/ext-locale/grid/en.js delete mode 100644 dist/editor/extensions/ext-locale/grid/zh_CN.js delete mode 100644 dist/editor/extensions/ext-locale/helloworld/en.js delete mode 100644 dist/editor/extensions/ext-locale/helloworld/zh_CN.js delete mode 100644 dist/editor/extensions/ext-locale/imagelib/de.js delete mode 100644 dist/editor/extensions/ext-locale/imagelib/en.js delete mode 100644 dist/editor/extensions/ext-locale/imagelib/fr.js delete mode 100644 dist/editor/extensions/ext-locale/imagelib/pl.js delete mode 100644 dist/editor/extensions/ext-locale/imagelib/pt_BR.js delete mode 100644 dist/editor/extensions/ext-locale/imagelib/ro.js delete mode 100644 dist/editor/extensions/ext-locale/imagelib/sk.js delete mode 100644 dist/editor/extensions/ext-locale/imagelib/sl.js delete mode 100644 dist/editor/extensions/ext-locale/imagelib/zh_CN.js delete mode 100644 dist/editor/extensions/ext-locale/markers/en.js delete mode 100644 dist/editor/extensions/ext-locale/markers/zh_CN.js delete mode 100644 dist/editor/extensions/ext-locale/mathjax/en.js delete mode 100644 dist/editor/extensions/ext-locale/mathjax/zh_CN.js delete mode 100644 dist/editor/extensions/ext-locale/panning/en.js delete mode 100644 dist/editor/extensions/ext-locale/panning/zh_CN.js delete mode 100644 dist/editor/extensions/ext-locale/placemark/en.js delete mode 100644 dist/editor/extensions/ext-locale/polygon/en.js delete mode 100644 dist/editor/extensions/ext-locale/polygon/zh_CN.js delete mode 100644 dist/editor/extensions/ext-locale/server_moinsave/en.js delete mode 100644 dist/editor/extensions/ext-locale/server_moinsave/zh_CN.js delete mode 100644 dist/editor/extensions/ext-locale/server_opensave/en.js delete mode 100644 dist/editor/extensions/ext-locale/server_opensave/zh_CN.js delete mode 100644 dist/editor/extensions/ext-locale/shapes/en.js delete mode 100644 dist/editor/extensions/ext-locale/shapes/fr.js delete mode 100644 dist/editor/extensions/ext-locale/shapes/zh_CN.js delete mode 100644 dist/editor/extensions/ext-locale/star/en.js delete mode 100644 dist/editor/extensions/ext-locale/star/zh_CN.js delete mode 100644 dist/editor/extensions/ext-locale/storage/de.js delete mode 100644 dist/editor/extensions/ext-locale/storage/en.js delete mode 100644 dist/editor/extensions/ext-locale/storage/fr.js delete mode 100644 dist/editor/extensions/ext-locale/storage/zh_CN.js delete mode 100644 dist/editor/extensions/ext-locale/webappfind/en.js delete mode 100644 dist/editor/extensions/ext-locale/webappfind/zh_CN.js delete mode 100644 dist/editor/extensions/ext-markers.js delete mode 100644 dist/editor/extensions/ext-markers.js.map create mode 100644 dist/editor/extensions/ext-markers/ext-markers.js create mode 100644 dist/editor/extensions/ext-markers/ext-markers.js.map delete mode 100644 dist/editor/extensions/ext-mathjax.js delete mode 100644 dist/editor/extensions/ext-mathjax.js.map create mode 100644 dist/editor/extensions/ext-mathjax/ext-mathjax.js create mode 100644 dist/editor/extensions/ext-mathjax/ext-mathjax.js.map delete mode 100644 dist/editor/extensions/ext-overview_window.js.map rename dist/editor/extensions/{ => ext-overview_window}/ext-overview_window.js (100%) create mode 100644 dist/editor/extensions/ext-overview_window/ext-overview_window.js.map delete mode 100644 dist/editor/extensions/ext-panning.js delete mode 100644 dist/editor/extensions/ext-panning.js.map create mode 100644 dist/editor/extensions/ext-panning/ext-panning.js create mode 100644 dist/editor/extensions/ext-panning/ext-panning.js.map delete mode 100644 dist/editor/extensions/ext-php_savefile.js delete mode 100644 dist/editor/extensions/ext-php_savefile.js.map delete mode 100644 dist/editor/extensions/ext-placemark.js delete mode 100644 dist/editor/extensions/ext-placemark.js.map create mode 100644 dist/editor/extensions/ext-placemark/ext-placemark.js create mode 100644 dist/editor/extensions/ext-placemark/ext-placemark.js.map delete mode 100644 dist/editor/extensions/ext-polygon.js delete mode 100644 dist/editor/extensions/ext-polygon.js.map create mode 100644 dist/editor/extensions/ext-polygon/ext-polygon.js create mode 100644 dist/editor/extensions/ext-polygon/ext-polygon.js.map delete mode 100644 dist/editor/extensions/ext-server_moinsave.js delete mode 100644 dist/editor/extensions/ext-server_moinsave.js.map create mode 100644 dist/editor/extensions/ext-server_moinsave/ext-server_moinsave.js create mode 100644 dist/editor/extensions/ext-server_moinsave/ext-server_moinsave.js.map delete mode 100644 dist/editor/extensions/ext-server_opensave.js delete mode 100644 dist/editor/extensions/ext-server_opensave.js.map create mode 100644 dist/editor/extensions/ext-server_opensave/ext-server_opensave.js create mode 100644 dist/editor/extensions/ext-server_opensave/ext-server_opensave.js.map delete mode 100644 dist/editor/extensions/ext-shapes.js delete mode 100644 dist/editor/extensions/ext-shapes.js.map create mode 100644 dist/editor/extensions/ext-shapes/ext-shapes.js create mode 100644 dist/editor/extensions/ext-shapes/ext-shapes.js.map delete mode 100644 dist/editor/extensions/ext-star.js delete mode 100644 dist/editor/extensions/ext-star.js.map create mode 100644 dist/editor/extensions/ext-star/ext-star.js create mode 100644 dist/editor/extensions/ext-star/ext-star.js.map delete mode 100644 dist/editor/extensions/ext-storage.js delete mode 100644 dist/editor/extensions/ext-storage.js.map create mode 100644 dist/editor/extensions/ext-storage/ext-storage.js create mode 100644 dist/editor/extensions/ext-storage/ext-storage.js.map delete mode 100644 dist/editor/extensions/ext-webappfind.js delete mode 100644 dist/editor/extensions/ext-webappfind.js.map create mode 100644 dist/editor/extensions/ext-webappfind/ext-webappfind.js create mode 100644 dist/editor/extensions/ext-webappfind/ext-webappfind.js.map delete mode 100644 dist/editor/extensions/ext-xdomain-messaging.js delete mode 100644 dist/editor/extensions/ext-xdomain-messaging.js.map create mode 100644 dist/editor/extensions/ext-xdomain-messaging/ext-xdomain-messaging.js create mode 100644 dist/editor/extensions/ext-xdomain-messaging/ext-xdomain-messaging.js.map delete mode 100644 dist/editor/system/extensions/ext-arrows.js create mode 100644 dist/editor/system/extensions/ext-arrows/ext-arrows.js delete mode 100644 dist/editor/system/extensions/ext-closepath.js create mode 100644 dist/editor/system/extensions/ext-closepath/ext-closepath.js delete mode 100644 dist/editor/system/extensions/ext-connector.js create mode 100644 dist/editor/system/extensions/ext-connector/ext-connector.js delete mode 100644 dist/editor/system/extensions/ext-eyedropper.js create mode 100644 dist/editor/system/extensions/ext-eyedropper/ext-eyedropper.js delete mode 100644 dist/editor/system/extensions/ext-foreignobject.js create mode 100644 dist/editor/system/extensions/ext-foreignobject/ext-foreignobject.js delete mode 100644 dist/editor/system/extensions/ext-grid.js create mode 100644 dist/editor/system/extensions/ext-grid/ext-grid.js delete mode 100644 dist/editor/system/extensions/ext-helloworld.js create mode 100644 dist/editor/system/extensions/ext-helloworld/ext-helloworld.js delete mode 100644 dist/editor/system/extensions/ext-imagelib.js create mode 100644 dist/editor/system/extensions/ext-imagelib/ext-imagelib.js delete mode 100644 dist/editor/system/extensions/ext-locale/arrows/en.js delete mode 100644 dist/editor/system/extensions/ext-locale/arrows/fr.js delete mode 100644 dist/editor/system/extensions/ext-locale/arrows/zh_CN.js delete mode 100644 dist/editor/system/extensions/ext-locale/closepath/en.js delete mode 100644 dist/editor/system/extensions/ext-locale/closepath/zh_CN.js delete mode 100644 dist/editor/system/extensions/ext-locale/connector/en.js delete mode 100644 dist/editor/system/extensions/ext-locale/connector/fr.js delete mode 100644 dist/editor/system/extensions/ext-locale/connector/zh_CN.js delete mode 100644 dist/editor/system/extensions/ext-locale/eyedropper/en.js delete mode 100644 dist/editor/system/extensions/ext-locale/eyedropper/zh_CN.js delete mode 100644 dist/editor/system/extensions/ext-locale/foreignobject/en.js delete mode 100644 dist/editor/system/extensions/ext-locale/foreignobject/zh_CN.js delete mode 100644 dist/editor/system/extensions/ext-locale/grid/en.js delete mode 100644 dist/editor/system/extensions/ext-locale/grid/zh_CN.js delete mode 100644 dist/editor/system/extensions/ext-locale/helloworld/en.js delete mode 100644 dist/editor/system/extensions/ext-locale/helloworld/zh_CN.js delete mode 100644 dist/editor/system/extensions/ext-locale/imagelib/de.js delete mode 100644 dist/editor/system/extensions/ext-locale/imagelib/en.js delete mode 100644 dist/editor/system/extensions/ext-locale/imagelib/fr.js delete mode 100644 dist/editor/system/extensions/ext-locale/imagelib/pl.js delete mode 100644 dist/editor/system/extensions/ext-locale/imagelib/pt_BR.js delete mode 100644 dist/editor/system/extensions/ext-locale/imagelib/ro.js delete mode 100644 dist/editor/system/extensions/ext-locale/imagelib/sk.js delete mode 100644 dist/editor/system/extensions/ext-locale/imagelib/sl.js delete mode 100644 dist/editor/system/extensions/ext-locale/imagelib/zh_CN.js delete mode 100644 dist/editor/system/extensions/ext-locale/markers/en.js delete mode 100644 dist/editor/system/extensions/ext-locale/markers/zh_CN.js delete mode 100644 dist/editor/system/extensions/ext-locale/mathjax/en.js delete mode 100644 dist/editor/system/extensions/ext-locale/mathjax/zh_CN.js delete mode 100644 dist/editor/system/extensions/ext-locale/panning/en.js delete mode 100644 dist/editor/system/extensions/ext-locale/panning/zh_CN.js delete mode 100644 dist/editor/system/extensions/ext-locale/placemark/en.js delete mode 100644 dist/editor/system/extensions/ext-locale/polygon/en.js delete mode 100644 dist/editor/system/extensions/ext-locale/polygon/zh_CN.js delete mode 100644 dist/editor/system/extensions/ext-locale/server_moinsave/en.js delete mode 100644 dist/editor/system/extensions/ext-locale/server_moinsave/zh_CN.js delete mode 100644 dist/editor/system/extensions/ext-locale/server_opensave/en.js delete mode 100644 dist/editor/system/extensions/ext-locale/server_opensave/zh_CN.js delete mode 100644 dist/editor/system/extensions/ext-locale/shapes/en.js delete mode 100644 dist/editor/system/extensions/ext-locale/shapes/fr.js delete mode 100644 dist/editor/system/extensions/ext-locale/shapes/zh_CN.js delete mode 100644 dist/editor/system/extensions/ext-locale/star/en.js delete mode 100644 dist/editor/system/extensions/ext-locale/star/zh_CN.js delete mode 100644 dist/editor/system/extensions/ext-locale/storage/de.js delete mode 100644 dist/editor/system/extensions/ext-locale/storage/en.js delete mode 100644 dist/editor/system/extensions/ext-locale/storage/fr.js delete mode 100644 dist/editor/system/extensions/ext-locale/storage/zh_CN.js delete mode 100644 dist/editor/system/extensions/ext-locale/webappfind/en.js delete mode 100644 dist/editor/system/extensions/ext-locale/webappfind/zh_CN.js delete mode 100644 dist/editor/system/extensions/ext-markers.js create mode 100644 dist/editor/system/extensions/ext-markers/ext-markers.js delete mode 100644 dist/editor/system/extensions/ext-mathjax.js create mode 100644 dist/editor/system/extensions/ext-mathjax/ext-mathjax.js rename dist/editor/system/extensions/{ => ext-overview_window}/ext-overview_window.js (100%) delete mode 100644 dist/editor/system/extensions/ext-panning.js create mode 100644 dist/editor/system/extensions/ext-panning/ext-panning.js delete mode 100644 dist/editor/system/extensions/ext-php_savefile.js delete mode 100644 dist/editor/system/extensions/ext-placemark.js create mode 100644 dist/editor/system/extensions/ext-placemark/ext-placemark.js delete mode 100644 dist/editor/system/extensions/ext-polygon.js create mode 100644 dist/editor/system/extensions/ext-polygon/ext-polygon.js delete mode 100644 dist/editor/system/extensions/ext-server_moinsave.js create mode 100644 dist/editor/system/extensions/ext-server_moinsave/ext-server_moinsave.js delete mode 100644 dist/editor/system/extensions/ext-server_opensave.js create mode 100644 dist/editor/system/extensions/ext-server_opensave/ext-server_opensave.js delete mode 100644 dist/editor/system/extensions/ext-shapes.js create mode 100644 dist/editor/system/extensions/ext-shapes/ext-shapes.js delete mode 100644 dist/editor/system/extensions/ext-star.js create mode 100644 dist/editor/system/extensions/ext-star/ext-star.js delete mode 100644 dist/editor/system/extensions/ext-storage.js create mode 100644 dist/editor/system/extensions/ext-storage/ext-storage.js delete mode 100644 dist/editor/system/extensions/ext-webappfind.js create mode 100644 dist/editor/system/extensions/ext-webappfind/ext-webappfind.js delete mode 100644 dist/editor/system/extensions/ext-xdomain-messaging.js create mode 100644 dist/editor/system/extensions/ext-xdomain-messaging/ext-xdomain-messaging.js delete mode 100644 jsconfig.json rename src/editor/extensions/{ => ext-arrows}/ext-arrows.js (98%) rename src/editor/extensions/{ext-locale/arrows => ext-arrows/locale}/en.js (100%) rename src/editor/extensions/{ext-locale/arrows => ext-arrows/locale}/fr.js (100%) rename src/editor/extensions/{ext-locale/arrows => ext-arrows/locale}/zh-CN.js (100%) rename src/editor/extensions/{ => ext-closepath}/ext-closepath.js (98%) rename src/editor/extensions/{ext-locale/closepath => ext-closepath/locale}/en.js (100%) rename src/editor/extensions/{ext-locale/closepath => ext-closepath/locale}/zh-CN.js (100%) rename src/editor/extensions/{ => ext-connector}/ext-connector.js (97%) rename src/editor/extensions/{ext-locale/connector => ext-connector/locale}/en.js (100%) rename src/editor/extensions/{ext-locale/connector => ext-connector/locale}/fr.js (79%) rename src/editor/extensions/{ext-locale/connector => ext-connector/locale}/zh-CN.js (100%) rename src/editor/extensions/{ => ext-eyedropper}/ext-eyedropper.js (96%) rename src/editor/extensions/{ext-locale/eyedropper => ext-eyedropper/locale}/en.js (100%) rename src/editor/extensions/{ext-locale/eyedropper => ext-eyedropper/locale}/zh-CN.js (100%) rename src/editor/extensions/{ => ext-foreignobject}/ext-foreignobject.js (97%) rename src/editor/extensions/{ext-locale/foreignobject => ext-foreignobject/locale}/en.js (100%) rename src/editor/extensions/{ext-locale/foreignobject => ext-foreignobject/locale}/zh-CN.js (100%) rename src/editor/extensions/{ => ext-grid}/ext-grid.js (95%) rename src/editor/extensions/{ext-locale/grid => ext-grid/locale}/en.js (100%) rename src/editor/extensions/{ext-locale/grid => ext-grid/locale}/zh-CN.js (100%) rename src/editor/extensions/{ => ext-helloworld}/ext-helloworld.js (94%) rename src/editor/extensions/{ext-locale/helloworld => ext-helloworld/locale}/en.js (100%) rename src/editor/extensions/{ext-locale/helloworld => ext-helloworld/locale}/zh-CN.js (100%) rename src/editor/extensions/{ => ext-imagelib}/ext-imagelib.js (95%) rename src/editor/extensions/{imagelib => ext-imagelib}/index.js (100%) rename src/editor/extensions/{ext-locale/imagelib => ext-imagelib/locale}/de.js (93%) rename src/editor/extensions/{ext-locale/imagelib => ext-imagelib/locale}/en.js (90%) rename src/editor/extensions/{ext-locale/imagelib => ext-imagelib/locale}/fr.js (93%) rename src/editor/extensions/{ext-locale/imagelib => ext-imagelib/locale}/pl.js (93%) rename src/editor/extensions/{ext-locale/imagelib => ext-imagelib/locale}/pt-BR.js (93%) rename src/editor/extensions/{ext-locale/imagelib => ext-imagelib/locale}/ro.js (93%) rename src/editor/extensions/{ext-locale/imagelib => ext-imagelib/locale}/sk.js (93%) rename src/editor/extensions/{ext-locale/imagelib => ext-imagelib/locale}/sl.js (93%) rename src/editor/extensions/{ext-locale/imagelib => ext-imagelib/locale}/zh-CN.js (93%) rename src/editor/extensions/{imagelib/openclipart-es.html => ext-imagelib/openclipart.html} (100%) rename src/editor/extensions/{imagelib => ext-imagelib}/openclipart.js (100%) rename src/editor/extensions/{imagelib => ext-imagelib}/smiley.svg (100%) rename src/editor/extensions/{ => ext-markers}/ext-markers.js (99%) rename src/editor/extensions/{ext-locale/markers => ext-markers/locale}/en.js (100%) rename src/editor/extensions/{ext-locale/markers => ext-markers/locale}/zh-CN.js (100%) rename src/editor/extensions/{ => ext-mathjax}/ext-mathjax.js (90%) rename src/editor/extensions/{ext-locale/mathjax => ext-mathjax/locale}/en.js (100%) rename src/editor/extensions/{ext-locale/mathjax => ext-mathjax/locale}/zh-CN.js (100%) rename src/editor/extensions/{ => ext-mathjax}/mathjax/MathJax.min.js (100%) rename src/editor/extensions/{ => ext-mathjax}/mathjax/TeX-AMS-MML_SVG.js (100%) rename src/editor/extensions/{ => ext-overview_window}/ext-overview_window.js (100%) rename src/editor/extensions/{ => ext-panning}/ext-panning.js (87%) rename src/editor/extensions/{ext-locale/panning => ext-panning/locale}/en.js (100%) rename src/editor/extensions/{ext-locale/panning => ext-panning/locale}/zh-CN.js (100%) rename src/editor/extensions/{ => ext-placemark}/ext-placemark.js (98%) rename src/editor/extensions/{ext-locale/placemark => ext-placemark/locale}/en.js (100%) rename src/editor/extensions/{ => ext-polygon}/ext-polygon.js (97%) rename src/editor/extensions/{ext-locale/polygon => ext-polygon/locale}/en.js (100%) rename src/editor/extensions/{ext-locale/polygon => ext-polygon/locale}/zh-CN.js (100%) rename src/editor/extensions/{ => ext-server_moinsave}/ext-server_moinsave.js (91%) rename src/editor/extensions/{ext-locale/server_moinsave => ext-server_moinsave/locale}/en.js (100%) rename src/editor/extensions/{ext-locale/server_moinsave => ext-server_moinsave/locale}/zh-CN.js (100%) rename src/editor/extensions/{ => ext-server_opensave}/allowedMimeTypes.php (100%) rename src/editor/extensions/{ => ext-server_opensave}/ext-php_savefile.js (100%) rename src/editor/extensions/{ => ext-server_opensave}/ext-server_opensave.js (96%) rename src/editor/extensions/{ => ext-server_opensave}/fileopen.php (100%) rename src/editor/extensions/{ => ext-server_opensave}/filesave.php (100%) rename src/editor/extensions/{ext-locale/server_opensave => ext-server_opensave/locale}/en.js (100%) rename src/editor/extensions/{ext-locale/server_opensave => ext-server_opensave/locale}/zh-CN.js (100%) rename src/editor/extensions/{ => ext-server_opensave}/savefile.php (100%) rename src/editor/extensions/{ => ext-shapes}/ext-shapes.js (99%) rename src/editor/extensions/{ext-locale/shapes => ext-shapes/locale}/en.js (100%) rename src/editor/extensions/{ext-locale/shapes => ext-shapes/locale}/fr.js (100%) rename src/editor/extensions/{ext-locale/shapes => ext-shapes/locale}/zh-CN.js (100%) rename src/editor/extensions/{ => ext-star}/ext-star.js (97%) rename src/editor/extensions/{ext-locale/star => ext-star/locale}/en.js (100%) rename src/editor/extensions/{ext-locale/star => ext-star/locale}/zh-CN.js (100%) rename src/editor/extensions/{ => ext-storage}/ext-storage.js (100%) rename src/editor/extensions/{ext-locale/storage => ext-storage/locale}/de.js (100%) rename src/editor/extensions/{ext-locale/storage => ext-storage/locale}/en.js (100%) rename src/editor/extensions/{ext-locale/storage => ext-storage/locale}/fr.js (100%) rename src/editor/extensions/{ext-locale/storage => ext-storage/locale}/zh-CN.js (100%) rename src/editor/extensions/{ => ext-webappfind}/ext-webappfind.js (94%) rename src/editor/extensions/{ext-locale/webappfind => ext-webappfind/locale}/en.js (100%) rename src/editor/extensions/{ext-locale/webappfind => ext-webappfind/locale}/zh-CN.js (100%) rename src/editor/extensions/{ => ext-xdomain-messaging}/ext-xdomain-messaging.js (100%) delete mode 100644 src/editor/extensions/imagelib/index-es.html delete mode 100644 src/editor/extensions/imagelib/index.html delete mode 100644 src/editor/extensions/imagelib/openclipart.html diff --git a/.eslintignore b/.eslintignore index 61acd328..e3c42d9d 100644 --- a/.eslintignore +++ b/.eslintignore @@ -28,7 +28,7 @@ src/editor/js-hotkeys src/editor/jspdf/jspdf.min.js src/editor/jspdf/underscore-min.js -src/editor/extensions/mathjax +src/editor/extensions/ext-mathjax/mathjax # Todo: We should at least check `compat/compat` in our other files, however ## Two "external" items are modified locally, so we undo their ignoring diff --git a/.eslintrc.js b/.eslintrc.js index 832a1d27..dbb436df 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -129,7 +129,7 @@ module.exports = { // and translations may need a longer line length { files: [ - 'src/editor/locale/lang.*.js', 'src/editor/extensions/ext-locale/**', + 'src/editor/locale/lang.*.js', 'src/editor/extensions/*/locale/**', 'docs/tutorials/ExtensionDocs.md' ], rules: { @@ -144,7 +144,7 @@ module.exports = { 'src/editor/touch.js', 'src/editor/typedefs.js', 'src/editor/redirect-on-no-module-support.js', - 'src/editor/extensions/imagelib/index.js', + 'src/editor/extensions/ext-imagelib/index.js', 'src/external/dom-polyfill/dom-polyfill.js', 'screencasts/svgopen2010/script.js' ], diff --git a/badges/coverage-badge.svg b/badges/coverage-badge.svg index 45931732..e22bfba2 100644 --- a/badges/coverage-badge.svg +++ b/badges/coverage-badge.svg @@ -1 +1 @@ -Statements 50.54%Statements 50.54%Branches 42.39%Branches 42.39%Lines 49.32%Lines 49.32%Functions 52.98%Functions 52.98% +Statements 36.76%Statements 36.76%Branches 25.98%Branches 25.98%Lines 37.65%Lines 37.65%Functions 38.42%Functions 38.42% diff --git a/badges/tests-badge.svg b/badges/tests-badge.svg index e4763627..ba41c60f 100644 --- a/badges/tests-badge.svg +++ b/badges/tests-badge.svg @@ -1 +1 @@ -TestsTests124/125124/125 \ No newline at end of file +TestsTests121/131121/131 \ No newline at end of file diff --git a/dist/editor/extensions/ext-arrows.js b/dist/editor/extensions/ext-arrows.js deleted file mode 100644 index 1829d5fc..00000000 --- a/dist/editor/extensions/ext-arrows.js +++ /dev/null @@ -1,11 +0,0 @@ -function _AwaitValue(e){this.wrapped=e}function _AsyncGenerator(e){var t,r;function resume(t,r){try{var n=e[t](r),a=n.value,o=a instanceof _AwaitValue;Promise.resolve(o?a.wrapped:a).then((function(e){o?resume("return"===t?"return":"next",e):settle(n.done?"return":"normal",e)}),(function(e){resume("throw",e)}))}catch(e){settle("throw",e)}}function settle(e,n){switch(e){case"return":t.resolve({value:n,done:!0});break;case"throw":t.reject(n);break;default:t.resolve({value:n,done:!1})}(t=t.next)?resume(t.key,t.arg):r=null}this._invoke=function send(e,n){return new Promise((function(a,o){var i={key:e,arg:n,resolve:a,reject:o,next:null};r?r=r.next=i:(t=r=i,resume(e,n))}))},"function"!=typeof e.return&&(this.return=void 0)}function asyncGeneratorStep(e,t,r,n,a,o,i){try{var l=e[o](i),u=l.value}catch(e){return void r(e)}l.done?t(u):Promise.resolve(u).then(n,a)}function _asyncToGenerator(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var o=e.apply(t,r);function _next(e){asyncGeneratorStep(o,n,a,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep(o,n,a,_next,_throw,"throw",e)}_next(void 0)}))}}"function"==typeof Symbol&&Symbol.asyncIterator&&(_AsyncGenerator.prototype[Symbol.asyncIterator]=function(){return this}),_AsyncGenerator.prototype.next=function(e){return this._invoke("next",e)},_AsyncGenerator.prototype.throw=function(e){return this._invoke("throw",e)},_AsyncGenerator.prototype.return=function(e){return this._invoke("return",e)}; -/** - * @file ext-arrows.js - * - * @license MIT - * - * @copyright 2010 Alexis Deveria - * - */ -var e={name:"arrows",init:function init(e){var t=this;return _asyncToGenerator(regeneratorRuntime.mark((function _callee2(){var r,n,a,o,i,l,u,c,s,d,f,m,h,v,_,k,p,w,b;return regeneratorRuntime.wrap((function _callee2$(g){for(;;)switch(g.prev=g.next){case 0:return w=function _colorChanged(t){var r=t.getAttribute("stroke"),a=["start","mid","end"],o=n.findDefs();i.each(a,(function(n,l){var u=h(t,"marker-"+l);if(u){var s=i(u).children().attr("fill"),d=i(u).children().attr("d");if(s!==r){var f=i(o).find("marker"),m=null;if(f.each((function(){var e=i(this).children().attr(["fill","d"]);e.fill===r&&e.d===d&&(m=this)})),!m){var v=u.id.includes("_fw")?"fw":"bk";m=k(v,l,c+v+f.length),i(m).children().attr("fill",r)}i(t).attr("marker-"+l,"url(#"+m.id+")");var _=!0;i(e.svgcontent).find("line, polyline, path, polygon").each((function(){var e=this;if(i.each(a,(function(t,r){if(i(e).attr("marker-"+r)==="url(#"+u.id+")")return _=!1})),!_)return!1})),_&&i(u).remove()}}}))},p=function _setArrow(){_();var e=this.value;if("none"!==e){var t="fw";"mid_bk"===e?(e="mid",t="bk"):"both"===e?(k("bk",e),n.changeSelectedAttribute("marker-start","url(#"+m.bk.id+")"),e="end",t="fw"):"start"===e&&(t="bk"),k(t,e),n.changeSelectedAttribute("marker-"+e,"url(#"+m[t].id+")"),n.call("changed",u)}},k=function _addMarker(e,t,r){r=r||c+e;var o=m[e];"mid"===t&&(o.refx=5);var i=n.getElem(r);if(!i){i=a({element:"marker",attr:{viewBox:"0 0 10 10",id:r,refY:5,markerUnits:"strokeWidth",markerWidth:5,markerHeight:5,orient:"auto",style:"pointer-events:none"}});var l=a({element:"path",attr:{d:o.d,fill:"#000000"}});i.append(l),n.findDefs().append(i)}return i.setAttribute("refX",o.refx),i},_=function _resetMarker(){var e=u[0];e.removeAttribute("marker-start"),e.removeAttribute("marker-mid"),e.removeAttribute("marker-end")},v=function _showPanel(e){if(i("#arrow_panel").toggle(e),e){var t,r=u[0],n=r.getAttribute("marker-end"),a=r.getAttribute("marker-start"),o=r.getAttribute("marker-mid");n&&a?t="both":n?t="end":a?t="start":o&&(t="mid",o.includes("bk")&&(t="mid_bk")),a||o||n||(t="none"),i("#arrow_list").val(t)}},h=function _getLinked(e,t){var r=e.getAttribute(t);if(!r)return null;var a=r.match(/\(#(.*)\)/);return a&&2===a.length?n.getElem(a[1]):null},f=function _unsetArrowNonce(e){s=!1,c=l,m.fw.id=c+"fw",m.bk.id=c+"bk"},d=function _setArrowNonce(e,t){s=!0,c=l+t+"_",m.fw.id=c+"fw",m.bk.id=c+"bk"},g.next=10,e.importLocale();case 10:return r=g.sent,n=t.canvas,a=n.addSVGElementFromJson,o=e.nonce,i=e.$,l="se_arrow_",s=e.randomize_ids,n.bind("setnonce",d),n.bind("unsetnonce",f),m={fw:{d:"m0,0l10,5l-10,5l5,-5l-5,-5z",refx:8,id:(c=s?l+o+"_":l)+"fw"},bk:{d:"m10,0l-10,5l10,5l-5,-5l5,-5z",refx:2,id:c+"bk"}},b=[{type:"select",panel:"arrow_panel",id:"arrow_list",defval:"none",events:{change:p}}],g.abrupt("return",{name:r.name,context_tools:r.contextTools.map((function(e,t){return Object.assign(b[t],e)})),callback:function callback(){i("#arrow_panel").hide(),i("#arrow_list option")[0].id="connector_no_arrow"},addLangData:function addLangData(e){return _asyncToGenerator(regeneratorRuntime.mark((function _callee(){var t,r,n;return regeneratorRuntime.wrap((function _callee$(a){for(;;)switch(a.prev=a.next){case 0:return e.lang,t=e.importLocale,a.next=3,t();case 3:return r=a.sent,n=r.langList,a.abrupt("return",{data:n});case 6:case"end":return a.stop()}}),_callee)})))()},selectedChanged:function selectedChanged(e){for(var t=["line","path","polyline","polygon"],r=(u=e.elems).length;r--;){var n=u[r];n&&t.includes(n.tagName)&&e.selectedElement&&!e.multiselected?v(!0):v(!1)}},elementChanged:function elementChanged(e){var t=e.elems[0];t&&(t.getAttribute("marker-start")||t.getAttribute("marker-mid")||t.getAttribute("marker-end"))&&w(t)}});case 21:case"end":return g.stop()}}),_callee2)})))()}};export default e; -//# sourceMappingURL=ext-arrows.js.map diff --git a/dist/editor/extensions/ext-arrows.js.map b/dist/editor/extensions/ext-arrows.js.map deleted file mode 100644 index d7286242..00000000 --- a/dist/editor/extensions/ext-arrows.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ext-arrows.js","sources":["../../../src/editor/extensions/ext-arrows.js"],"sourcesContent":["/**\n * @file ext-arrows.js\n *\n * @license MIT\n *\n * @copyright 2010 Alexis Deveria\n *\n */\n\nexport default {\n name: 'arrows',\n async init (S) {\n const strings = await S.importLocale();\n const svgEditor = this;\n const svgCanvas = svgEditor.canvas;\n const // {svgcontent} = S,\n addElem = svgCanvas.addSVGElementFromJson,\n {nonce, $} = S,\n prefix = 'se_arrow_';\n\n let selElems, arrowprefix, randomizeIds = S.randomize_ids;\n\n /**\n * @param {Window} win\n * @param {!(string|Integer)} n\n * @returns {void}\n */\n function setArrowNonce (win, n) {\n randomizeIds = true;\n arrowprefix = prefix + n + '_';\n pathdata.fw.id = arrowprefix + 'fw';\n pathdata.bk.id = arrowprefix + 'bk';\n }\n\n /**\n * @param {Window} win\n * @returns {void}\n */\n function unsetArrowNonce (win) {\n randomizeIds = false;\n arrowprefix = prefix;\n pathdata.fw.id = arrowprefix + 'fw';\n pathdata.bk.id = arrowprefix + 'bk';\n }\n\n svgCanvas.bind('setnonce', setArrowNonce);\n svgCanvas.bind('unsetnonce', unsetArrowNonce);\n\n if (randomizeIds) {\n arrowprefix = prefix + nonce + '_';\n } else {\n arrowprefix = prefix;\n }\n\n const pathdata = {\n fw: {d: 'm0,0l10,5l-10,5l5,-5l-5,-5z', refx: 8, id: arrowprefix + 'fw'},\n bk: {d: 'm10,0l-10,5l10,5l-5,-5l5,-5z', refx: 2, id: arrowprefix + 'bk'}\n };\n\n /**\n * Gets linked element.\n * @param {Element} elem\n * @param {string} attr\n * @returns {Element}\n */\n function getLinked (elem, attr) {\n const str = elem.getAttribute(attr);\n if (!str) { return null; }\n const m = str.match(/\\(#(.*)\\)/);\n // const m = str.match(/\\(#(?.+)\\)/);\n // if (!m || !m.groups.id) {\n if (!m || m.length !== 2) {\n return null;\n }\n return svgCanvas.getElem(m[1]);\n // return svgCanvas.getElem(m.groups.id);\n }\n\n /**\n * @param {boolean} on\n * @returns {void}\n */\n function showPanel (on) {\n $('#arrow_panel').toggle(on);\n if (on) {\n const el = selElems[0];\n const end = el.getAttribute('marker-end');\n const start = el.getAttribute('marker-start');\n const mid = el.getAttribute('marker-mid');\n let val;\n if (end && start) {\n val = 'both';\n } else if (end) {\n val = 'end';\n } else if (start) {\n val = 'start';\n } else if (mid) {\n val = 'mid';\n if (mid.includes('bk')) {\n val = 'mid_bk';\n }\n }\n\n if (!start && !mid && !end) {\n val = 'none';\n }\n\n $('#arrow_list').val(val);\n }\n }\n\n /**\n *\n * @returns {void}\n */\n function resetMarker () {\n const el = selElems[0];\n el.removeAttribute('marker-start');\n el.removeAttribute('marker-mid');\n el.removeAttribute('marker-end');\n }\n\n /**\n * @param {\"bk\"|\"fw\"} dir\n * @param {\"both\"|\"mid\"|\"end\"|\"start\"} type\n * @param {string} id\n * @returns {Element}\n */\n function addMarker (dir, type, id) {\n // TODO: Make marker (or use?) per arrow type, since refX can be different\n id = id || arrowprefix + dir;\n\n const data = pathdata[dir];\n\n if (type === 'mid') {\n data.refx = 5;\n }\n\n let marker = svgCanvas.getElem(id);\n if (!marker) {\n marker = addElem({\n element: 'marker',\n attr: {\n viewBox: '0 0 10 10',\n id,\n refY: 5,\n markerUnits: 'strokeWidth',\n markerWidth: 5,\n markerHeight: 5,\n orient: 'auto',\n style: 'pointer-events:none' // Currently needed for Opera\n }\n });\n const arrow = addElem({\n element: 'path',\n attr: {\n d: data.d,\n fill: '#000000'\n }\n });\n marker.append(arrow);\n svgCanvas.findDefs().append(marker);\n }\n\n marker.setAttribute('refX', data.refx);\n\n return marker;\n }\n\n /**\n *\n * @returns {void}\n */\n function setArrow () {\n resetMarker();\n\n let type = this.value;\n if (type === 'none') {\n return;\n }\n\n // Set marker on element\n let dir = 'fw';\n if (type === 'mid_bk') {\n type = 'mid';\n dir = 'bk';\n } else if (type === 'both') {\n addMarker('bk', type);\n svgCanvas.changeSelectedAttribute('marker-start', 'url(#' + pathdata.bk.id + ')');\n type = 'end';\n dir = 'fw';\n } else if (type === 'start') {\n dir = 'bk';\n }\n\n addMarker(dir, type);\n svgCanvas.changeSelectedAttribute('marker-' + type, 'url(#' + pathdata[dir].id + ')');\n svgCanvas.call('changed', selElems);\n }\n\n /**\n * @param {Element} elem\n * @returns {void}\n */\n function colorChanged (elem) {\n const color = elem.getAttribute('stroke');\n const mtypes = ['start', 'mid', 'end'];\n const defs = svgCanvas.findDefs();\n\n $.each(mtypes, function (i, type) {\n const marker = getLinked(elem, 'marker-' + type);\n if (!marker) { return; }\n\n const curColor = $(marker).children().attr('fill');\n const curD = $(marker).children().attr('d');\n if (curColor === color) { return; }\n\n const allMarkers = $(defs).find('marker');\n let newMarker = null;\n // Different color, check if already made\n allMarkers.each(function () {\n const attrs = $(this).children().attr(['fill', 'd']);\n if (attrs.fill === color && attrs.d === curD) {\n // Found another marker with this color and this path\n newMarker = this;\n }\n });\n\n if (!newMarker) {\n // Create a new marker with this color\n const lastId = marker.id;\n const dir = lastId.includes('_fw') ? 'fw' : 'bk';\n\n newMarker = addMarker(dir, type, arrowprefix + dir + allMarkers.length);\n\n $(newMarker).children().attr('fill', color);\n }\n\n $(elem).attr('marker-' + type, 'url(#' + newMarker.id + ')');\n\n // Check if last marker can be removed\n let remove = true;\n $(S.svgcontent).find('line, polyline, path, polygon').each(function () {\n const element = this;\n $.each(mtypes, function (j, mtype) {\n if ($(element).attr('marker-' + mtype) === 'url(#' + marker.id + ')') {\n remove = false;\n return remove;\n }\n return undefined;\n });\n if (!remove) { return false; }\n return undefined;\n });\n\n // Not found, so can safely remove\n if (remove) {\n $(marker).remove();\n }\n });\n }\n\n const contextTools = [\n {\n type: 'select',\n panel: 'arrow_panel',\n id: 'arrow_list',\n defval: 'none',\n events: {\n change: setArrow\n }\n }\n ];\n\n return {\n name: strings.name,\n context_tools: strings.contextTools.map((contextTool, i) => {\n return Object.assign(contextTools[i], contextTool);\n }),\n callback () {\n $('#arrow_panel').hide();\n // Set ID so it can be translated in locale file\n $('#arrow_list option')[0].id = 'connector_no_arrow';\n },\n async addLangData ({lang, importLocale}) {\n const {langList} = await importLocale();\n return {\n data: langList\n };\n },\n selectedChanged (opts) {\n // Use this to update the current selected elements\n selElems = opts.elems;\n\n const markerElems = ['line', 'path', 'polyline', 'polygon'];\n let i = selElems.length;\n while (i--) {\n const elem = selElems[i];\n if (elem && markerElems.includes(elem.tagName)) {\n if (opts.selectedElement && !opts.multiselected) {\n showPanel(true);\n } else {\n showPanel(false);\n }\n } else {\n showPanel(false);\n }\n }\n },\n elementChanged (opts) {\n const elem = opts.elems[0];\n if (elem && (\n elem.getAttribute('marker-start') ||\n elem.getAttribute('marker-mid') ||\n elem.getAttribute('marker-end')\n )) {\n // const start = elem.getAttribute('marker-start');\n // const mid = elem.getAttribute('marker-mid');\n // const end = elem.getAttribute('marker-end');\n // Has marker, so see if it should match color\n colorChanged(elem);\n }\n }\n };\n }\n};\n"],"names":["name","init","S","setArrowNonce","unsetArrowNonce","getLinked","showPanel","resetMarker","addMarker","setArrow","colorChanged","elem","color","getAttribute","mtypes","defs","svgCanvas","findDefs","$","each","i","type","marker","curColor","children","attr","curD","allMarkers","find","newMarker","attrs","this","fill","d","dir","id","includes","arrowprefix","length","remove","svgcontent","element","j","mtype","value","changeSelectedAttribute","pathdata","bk","call","selElems","data","refx","getElem","addElem","viewBox","refY","markerUnits","markerWidth","markerHeight","orient","style","arrow","append","setAttribute","el","removeAttribute","on","toggle","val","end","start","mid","str","m","match","win","randomizeIds","prefix","fw","n","importLocale","strings","_this","canvas","addSVGElementFromJson","nonce","randomize_ids","bind","contextTools","panel","defval","events","change","context_tools","map","contextTool","Object","assign","callback","hide","addLangData","lang","langList","selectedChanged","opts","markerElems","elems","tagName","selectedElement","multiselected","elementChanged"],"mappings":"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"} \ No newline at end of file diff --git a/dist/editor/extensions/ext-arrows/ext-arrows.js b/dist/editor/extensions/ext-arrows/ext-arrows.js new file mode 100644 index 00000000..5b8a45b8 --- /dev/null +++ b/dist/editor/extensions/ext-arrows/ext-arrows.js @@ -0,0 +1,10 @@ +function asyncGeneratorStep(e,t,r,n,a,i,o){try{var l=e[i](o),c=l.value}catch(e){return void r(e)}l.done?t(c):Promise.resolve(c).then(n,a)}function _asyncToGenerator(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var i=e.apply(t,r);function _next(e){asyncGeneratorStep(i,n,a,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep(i,n,a,_next,_throw,"throw",e)}_next(void 0)}))}} +/** + * @file ext-arrows.js + * + * @license MIT + * + * @copyright 2010 Alexis Deveria + * + */var e={name:"arrows",init:function init(e){var t=this;return _asyncToGenerator(regeneratorRuntime.mark((function _callee2(){var r,n,a,i,o,l,c,u,d,s,f,m,h,v,k,_,g,b,p,w,x;return regeneratorRuntime.wrap((function _callee2$(A){for(;;)switch(A.prev=A.next){case 0:return w=function _colorChanged(t){var r=t.getAttribute("stroke"),n=["start","mid","end"],a=i.findDefs();c.each(n,(function(i,o){var l=k(t,"marker-"+o);if(l){var u=c(l).children().attr("fill"),d=c(l).children().attr("d");if(u!==r){var f=c(a).find("marker"),m=null;if(f.each((function(){var e=c(this).children().attr(["fill","d"]);e.fill===r&&e.d===d&&(m=this)})),!m){var h=l.id.includes("_fw")?"fw":"bk";m=b(h,o,s+h+f.length),c(m).children().attr("fill",r)}c(t).attr("marker-"+o,"url(#"+m.id+")");var v=!0;c(e.svgcontent).find("line, polyline, path, polygon").each((function(){var e=this;if(c.each(n,(function(t,r){if(c(e).attr("marker-"+r)==="url(#"+l.id+")")return v=!1})),!v)return!1})),v&&c(l).remove()}}}))},p=function _setArrow(){g();var e=this.value;if("none"!==e){var t="fw";"mid_bk"===e?(e="mid",t="bk"):"both"===e?(b("bk",e),i.changeSelectedAttribute("marker-start","url(#"+v.bk.id+")"),e="end",t="fw"):"start"===e&&(t="bk"),b(t,e),i.changeSelectedAttribute("marker-"+e,"url(#"+v[t].id+")"),i.call("changed",d)}},b=function _addMarker(e,t,r){r=r||s+e;var n=v[e];"mid"===t&&(n.refx=5);var a=i.getElem(r);if(!a){a=o({element:"marker",attr:{viewBox:"0 0 10 10",id:r,refY:5,markerUnits:"strokeWidth",markerWidth:5,markerHeight:5,orient:"auto",style:"pointer-events:none"}});var l=o({element:"path",attr:{d:n.d,fill:"#000000"}});a.append(l),i.findDefs().append(a)}return a.setAttribute("refX",n.refx),a},g=function _resetMarker(){var e=d[0];e.removeAttribute("marker-start"),e.removeAttribute("marker-mid"),e.removeAttribute("marker-end")},_=function _showPanel(e){if(c("#arrow_panel").toggle(e),e){var t,r=d[0],n=r.getAttribute("marker-end"),a=r.getAttribute("marker-start"),i=r.getAttribute("marker-mid");n&&a?t="both":n?t="end":a?t="start":i&&(t="mid",i.includes("bk")&&(t="mid_bk")),a||i||n||(t="none"),c("#arrow_list").val(t)}},k=function _getLinked(e,t){var r=e.getAttribute(t);if(!r)return null;var n=r.match(/\(#(.*)\)/);return n&&2===n.length?i.getElem(n[1]):null},h=function _unsetArrowNonce(e){f=!1,s=u,v.fw.id=s+"fw",v.bk.id=s+"bk"},m=function _setArrowNonce(e,t){f=!0,s=u+t+"_",v.fw.id=s+"fw",v.bk.id=s+"bk"},r=t,A.next=11,import("./locale/".concat(r.curPrefs.lang,".js"));case 11:return n=A.sent,a=n.default,i=r.canvas,o=i.addSVGElementFromJson,l=e.nonce,c=e.$,u="se_arrow_",f=e.randomize_ids,i.bind("setnonce",m),i.bind("unsetnonce",h),v={fw:{d:"m0,0l10,5l-10,5l5,-5l-5,-5z",refx:8,id:(s=f?u+l+"_":u)+"fw"},bk:{d:"m10,0l-10,5l10,5l-5,-5l5,-5z",refx:2,id:s+"bk"}},x=[{type:"select",panel:"arrow_panel",id:"arrow_list",defval:"none",events:{change:p}}],A.abrupt("return",{name:a.name,context_tools:a.contextTools.map((function(e,t){return Object.assign(x[t],e)})),callback:function callback(){c("#arrow_panel").hide(),c("#arrow_list option")[0].id="connector_no_arrow"},addLangData:function addLangData(e){return _asyncToGenerator(regeneratorRuntime.mark((function _callee(){var t,r,n;return regeneratorRuntime.wrap((function _callee$(a){for(;;)switch(a.prev=a.next){case 0:return e.lang,t=e.importLocale,a.next=3,t();case 3:return r=a.sent,n=r.langList,a.abrupt("return",{data:n});case 6:case"end":return a.stop()}}),_callee)})))()},selectedChanged:function selectedChanged(e){for(var t=["line","path","polyline","polygon"],r=(d=e.elems).length;r--;){var n=d[r];n&&t.includes(n.tagName)&&e.selectedElement&&!e.multiselected?_(!0):_(!1)}},elementChanged:function elementChanged(e){var t=e.elems[0];t&&(t.getAttribute("marker-start")||t.getAttribute("marker-mid")||t.getAttribute("marker-end"))&&w(t)}});case 22:case"end":return A.stop()}}),_callee2)})))()}};export default e; +//# sourceMappingURL=ext-arrows.js.map diff --git a/dist/editor/extensions/ext-arrows/ext-arrows.js.map b/dist/editor/extensions/ext-arrows/ext-arrows.js.map new file mode 100644 index 00000000..d9854a6d --- /dev/null +++ b/dist/editor/extensions/ext-arrows/ext-arrows.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ext-arrows.js","sources":["../../../../src/editor/extensions/ext-arrows/ext-arrows.js"],"sourcesContent":["/**\n * @file ext-arrows.js\n *\n * @license MIT\n *\n * @copyright 2010 Alexis Deveria\n *\n */\n\nexport default {\n name: 'arrows',\n async init (S) {\n const svgEditor = this;\n // eslint-disable-next-line node/no-unsupported-features/es-syntax\n const {default: strings} = await import(`./locale/${svgEditor.curPrefs.lang}.js`);\n const svgCanvas = svgEditor.canvas;\n const\n addElem = svgCanvas.addSVGElementFromJson,\n {nonce, $} = S,\n prefix = 'se_arrow_';\n\n let selElems, arrowprefix, randomizeIds = S.randomize_ids;\n\n /**\n * @param {Window} win\n * @param {!(string|Integer)} n\n * @returns {void}\n */\n function setArrowNonce (win, n) {\n randomizeIds = true;\n arrowprefix = prefix + n + '_';\n pathdata.fw.id = arrowprefix + 'fw';\n pathdata.bk.id = arrowprefix + 'bk';\n }\n\n /**\n * @param {Window} win\n * @returns {void}\n */\n function unsetArrowNonce (win) {\n randomizeIds = false;\n arrowprefix = prefix;\n pathdata.fw.id = arrowprefix + 'fw';\n pathdata.bk.id = arrowprefix + 'bk';\n }\n\n svgCanvas.bind('setnonce', setArrowNonce);\n svgCanvas.bind('unsetnonce', unsetArrowNonce);\n\n if (randomizeIds) {\n arrowprefix = prefix + nonce + '_';\n } else {\n arrowprefix = prefix;\n }\n\n const pathdata = {\n fw: {d: 'm0,0l10,5l-10,5l5,-5l-5,-5z', refx: 8, id: arrowprefix + 'fw'},\n bk: {d: 'm10,0l-10,5l10,5l-5,-5l5,-5z', refx: 2, id: arrowprefix + 'bk'}\n };\n\n /**\n * Gets linked element.\n * @param {Element} elem\n * @param {string} attr\n * @returns {Element}\n */\n function getLinked (elem, attr) {\n const str = elem.getAttribute(attr);\n if (!str) { return null; }\n const m = str.match(/\\(#(.*)\\)/);\n // const m = str.match(/\\(#(?.+)\\)/);\n // if (!m || !m.groups.id) {\n if (!m || m.length !== 2) {\n return null;\n }\n return svgCanvas.getElem(m[1]);\n }\n\n /**\n * @param {boolean} on\n * @returns {void}\n */\n function showPanel (on) {\n $('#arrow_panel').toggle(on);\n if (on) {\n const el = selElems[0];\n const end = el.getAttribute('marker-end');\n const start = el.getAttribute('marker-start');\n const mid = el.getAttribute('marker-mid');\n let val;\n if (end && start) {\n val = 'both';\n } else if (end) {\n val = 'end';\n } else if (start) {\n val = 'start';\n } else if (mid) {\n val = 'mid';\n if (mid.includes('bk')) {\n val = 'mid_bk';\n }\n }\n\n if (!start && !mid && !end) {\n val = 'none';\n }\n\n $('#arrow_list').val(val);\n }\n }\n\n /**\n *\n * @returns {void}\n */\n function resetMarker () {\n const el = selElems[0];\n el.removeAttribute('marker-start');\n el.removeAttribute('marker-mid');\n el.removeAttribute('marker-end');\n }\n\n /**\n * @param {\"bk\"|\"fw\"} dir\n * @param {\"both\"|\"mid\"|\"end\"|\"start\"} type\n * @param {string} id\n * @returns {Element}\n */\n function addMarker (dir, type, id) {\n // TODO: Make marker (or use?) per arrow type, since refX can be different\n id = id || arrowprefix + dir;\n\n const data = pathdata[dir];\n\n if (type === 'mid') {\n data.refx = 5;\n }\n\n let marker = svgCanvas.getElem(id);\n if (!marker) {\n marker = addElem({\n element: 'marker',\n attr: {\n viewBox: '0 0 10 10',\n id,\n refY: 5,\n markerUnits: 'strokeWidth',\n markerWidth: 5,\n markerHeight: 5,\n orient: 'auto',\n style: 'pointer-events:none' // Currently needed for Opera\n }\n });\n const arrow = addElem({\n element: 'path',\n attr: {\n d: data.d,\n fill: '#000000'\n }\n });\n marker.append(arrow);\n svgCanvas.findDefs().append(marker);\n }\n\n marker.setAttribute('refX', data.refx);\n\n return marker;\n }\n\n /**\n *\n * @returns {void}\n */\n function setArrow () {\n resetMarker();\n\n let type = this.value;\n if (type === 'none') {\n return;\n }\n\n // Set marker on element\n let dir = 'fw';\n if (type === 'mid_bk') {\n type = 'mid';\n dir = 'bk';\n } else if (type === 'both') {\n addMarker('bk', type);\n svgCanvas.changeSelectedAttribute('marker-start', 'url(#' + pathdata.bk.id + ')');\n type = 'end';\n dir = 'fw';\n } else if (type === 'start') {\n dir = 'bk';\n }\n\n addMarker(dir, type);\n svgCanvas.changeSelectedAttribute('marker-' + type, 'url(#' + pathdata[dir].id + ')');\n svgCanvas.call('changed', selElems);\n }\n\n /**\n * @param {Element} elem\n * @returns {void}\n */\n function colorChanged (elem) {\n const color = elem.getAttribute('stroke');\n const mtypes = ['start', 'mid', 'end'];\n const defs = svgCanvas.findDefs();\n\n $.each(mtypes, function (i, type) {\n const marker = getLinked(elem, 'marker-' + type);\n if (!marker) { return; }\n\n const curColor = $(marker).children().attr('fill');\n const curD = $(marker).children().attr('d');\n if (curColor === color) { return; }\n\n const allMarkers = $(defs).find('marker');\n let newMarker = null;\n // Different color, check if already made\n allMarkers.each(function () {\n const attrs = $(this).children().attr(['fill', 'd']);\n if (attrs.fill === color && attrs.d === curD) {\n // Found another marker with this color and this path\n newMarker = this;\n }\n });\n\n if (!newMarker) {\n // Create a new marker with this color\n const lastId = marker.id;\n const dir = lastId.includes('_fw') ? 'fw' : 'bk';\n\n newMarker = addMarker(dir, type, arrowprefix + dir + allMarkers.length);\n\n $(newMarker).children().attr('fill', color);\n }\n\n $(elem).attr('marker-' + type, 'url(#' + newMarker.id + ')');\n\n // Check if last marker can be removed\n let remove = true;\n $(S.svgcontent).find('line, polyline, path, polygon').each(function () {\n const element = this;\n $.each(mtypes, function (j, mtype) {\n if ($(element).attr('marker-' + mtype) === 'url(#' + marker.id + ')') {\n remove = false;\n return remove;\n }\n return undefined;\n });\n if (!remove) { return false; }\n return undefined;\n });\n\n // Not found, so can safely remove\n if (remove) {\n $(marker).remove();\n }\n });\n }\n\n const contextTools = [\n {\n type: 'select',\n panel: 'arrow_panel',\n id: 'arrow_list',\n defval: 'none',\n events: {\n change: setArrow\n }\n }\n ];\n\n return {\n name: strings.name,\n context_tools: strings.contextTools.map((contextTool, i) => {\n return Object.assign(contextTools[i], contextTool);\n }),\n callback () {\n $('#arrow_panel').hide();\n // Set ID so it can be translated in locale file\n $('#arrow_list option')[0].id = 'connector_no_arrow';\n },\n async addLangData ({lang, importLocale}) {\n const {langList} = await importLocale();\n return {\n data: langList\n };\n },\n selectedChanged (opts) {\n // Use this to update the current selected elements\n selElems = opts.elems;\n\n const markerElems = ['line', 'path', 'polyline', 'polygon'];\n let i = selElems.length;\n while (i--) {\n const elem = selElems[i];\n if (elem && markerElems.includes(elem.tagName)) {\n if (opts.selectedElement && !opts.multiselected) {\n showPanel(true);\n } else {\n showPanel(false);\n }\n } else {\n showPanel(false);\n }\n }\n },\n elementChanged (opts) {\n const elem = opts.elems[0];\n if (elem && (\n elem.getAttribute('marker-start') ||\n elem.getAttribute('marker-mid') ||\n elem.getAttribute('marker-end')\n )) {\n // const start = elem.getAttribute('marker-start');\n // const mid = elem.getAttribute('marker-mid');\n // const end = elem.getAttribute('marker-end');\n // Has marker, so see if it should match color\n colorChanged(elem);\n }\n }\n };\n }\n};\n"],"names":["name","init","S","setArrowNonce","unsetArrowNonce","getLinked","showPanel","resetMarker","addMarker","setArrow","colorChanged","elem","color","getAttribute","mtypes","defs","svgCanvas","findDefs","$","each","i","type","marker","curColor","children","attr","curD","allMarkers","find","newMarker","attrs","this","fill","d","dir","id","includes","arrowprefix","length","remove","svgcontent","element","j","mtype","value","changeSelectedAttribute","pathdata","bk","call","selElems","data","refx","getElem","addElem","viewBox","refY","markerUnits","markerWidth","markerHeight","orient","style","arrow","append","setAttribute","el","removeAttribute","on","toggle","val","end","start","mid","str","m","match","win","randomizeIds","prefix","fw","n","svgEditor","_this","import","curPrefs","lang","strings","canvas","addSVGElementFromJson","nonce","randomize_ids","bind","contextTools","panel","defval","events","change","context_tools","map","contextTool","Object","assign","callback","hide","addLangData","importLocale","langList","selectedChanged","opts","markerElems","elems","tagName","selectedElement","multiselected","elementChanged"],"mappings":"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"} \ No newline at end of file diff --git a/dist/editor/extensions/ext-closepath.js b/dist/editor/extensions/ext-closepath.js deleted file mode 100644 index 6afe28b6..00000000 --- a/dist/editor/extensions/ext-closepath.js +++ /dev/null @@ -1,2 +0,0 @@ -function _AwaitValue(t){this.wrapped=t}function _AsyncGenerator(t){var e,n;function resume(e,n){try{var r=t[e](n),i=r.value,a=i instanceof _AwaitValue;Promise.resolve(a?i.wrapped:i).then((function(t){a?resume("return"===e?"return":"next",t):settle(r.done?"return":"normal",t)}),(function(t){resume("throw",t)}))}catch(t){settle("throw",t)}}function settle(t,r){switch(t){case"return":e.resolve({value:r,done:!0});break;case"throw":e.reject(r);break;default:e.resolve({value:r,done:!1})}(e=e.next)?resume(e.key,e.arg):n=null}this._invoke=function send(t,r){return new Promise((function(i,a){var s={key:t,arg:r,resolve:i,reject:a,next:null};n?n=n.next=s:(e=n=s,resume(t,r))}))},"function"!=typeof t.return&&(this.return=void 0)}function asyncGeneratorStep(t,e,n,r,i,a,s){try{var h=t[a](s),o=h.value}catch(t){return void n(t)}h.done?e(o):Promise.resolve(o).then(r,i)}function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function _defineProperties(t,e){for(var n=0;ne.getTotalLength())break;n--}while(n>0);return n}),window.SVGPathSeg=t,window.SVGPathSegClosePath=e,window.SVGPathSegMovetoAbs=n,window.SVGPathSegMovetoRel=r,window.SVGPathSegLinetoAbs=i,window.SVGPathSegLinetoRel=a,window.SVGPathSegCurvetoCubicAbs=s,window.SVGPathSegCurvetoCubicRel=h,window.SVGPathSegCurvetoQuadraticAbs=o,window.SVGPathSegCurvetoQuadraticRel=_,window.SVGPathSegArcAbs=u,window.SVGPathSegArcRel=c,window.SVGPathSegLinetoHorizontalAbs=S,window.SVGPathSegLinetoHorizontalRel=g,window.SVGPathSegLinetoVerticalAbs=l,window.SVGPathSegLinetoVerticalRel=P,window.SVGPathSegCurvetoCubicSmoothAbs=p,window.SVGPathSegCurvetoCubicSmoothRel=f,window.SVGPathSegCurvetoQuadraticSmoothAbs=y,window.SVGPathSegCurvetoQuadraticSmoothRel=C}if(!("SVGPathSegList"in window)||!("appendItem"in window.SVGPathSegList.prototype)){var A=function(){function SVGPathSegList(t){_classCallCheck(this,SVGPathSegList),this._pathElement=t,this._list=this._parsePath(this._pathElement.getAttribute("d")),this._mutationObserverConfig={attributes:!0,attributeFilter:["d"]},this._pathElementMutationObserver=new MutationObserver(this._updateListFromPathMutations.bind(this)),this._pathElementMutationObserver.observe(this._pathElement,this._mutationObserverConfig)}return _createClass(SVGPathSegList,[{key:"_checkPathSynchronizedToList",value:function _checkPathSynchronizedToList(){this._updateListFromPathMutations(this._pathElementMutationObserver.takeRecords())}},{key:"_updateListFromPathMutations",value:function _updateListFromPathMutations(t){if(this._pathElement){var e=!1;t.forEach((function(t){"d"===t.attributeName&&(e=!0)})),e&&(this._list=this._parsePath(this._pathElement.getAttribute("d")))}}},{key:"_writeListToPath",value:function _writeListToPath(){this._pathElementMutationObserver.disconnect(),this._pathElement.setAttribute("d",SVGPathSegList._pathSegArrayAsString(this._list)),this._pathElementMutationObserver.observe(this._pathElement,this._mutationObserverConfig)}},{key:"segmentChanged",value:function segmentChanged(t){this._writeListToPath()}},{key:"clear",value:function clear(){this._checkPathSynchronizedToList(),this._list.forEach((function(t){t._owningPathSegList=null})),this._list=[],this._writeListToPath()}},{key:"initialize",value:function initialize(t){return this._checkPathSynchronizedToList(),this._list=[t],t._owningPathSegList=this,this._writeListToPath(),t}},{key:"_checkValidIndex",value:function _checkValidIndex(t){if(isNaN(t)||t<0||t>=this.numberOfItems)throw new Error("INDEX_SIZE_ERR")}},{key:"getItem",value:function getItem(t){return this._checkPathSynchronizedToList(),this._checkValidIndex(t),this._list[t]}},{key:"insertItemBefore",value:function insertItemBefore(t,e){return this._checkPathSynchronizedToList(),e>this.numberOfItems&&(e=this.numberOfItems),t._owningPathSegList&&(t=t.clone()),this._list.splice(e,0,t),t._owningPathSegList=this,this._writeListToPath(),t}},{key:"replaceItem",value:function replaceItem(t,e){return this._checkPathSynchronizedToList(),t._owningPathSegList&&(t=t.clone()),this._checkValidIndex(e),this._list[e]=t,t._owningPathSegList=this,this._writeListToPath(),t}},{key:"removeItem",value:function removeItem(t){this._checkPathSynchronizedToList(),this._checkValidIndex(t);var e=this._list[t];return this._list.splice(t,1),this._writeListToPath(),e}},{key:"appendItem",value:function appendItem(t){return this._checkPathSynchronizedToList(),t._owningPathSegList&&(t=t.clone()),this._list.push(t),t._owningPathSegList=this,this._writeListToPath(),t}},{key:"_parsePath",value:function _parsePath(t){if(!t||!t.length)return[];var e=this,n=function(){function Builder(){_classCallCheck(this,Builder),this.pathSegList=[]}return _createClass(Builder,[{key:"appendSegment",value:function appendSegment(t){this.pathSegList.push(t)}}]),Builder}(),r=function(){function Source(t){_classCallCheck(this,Source),this._string=t,this._currentIndex=0,this._endIndex=this._string.length,this._previousCommand=SVGPathSeg.PATHSEG_UNKNOWN,this._skipOptionalSpaces()}return _createClass(Source,[{key:"_isCurrentSpace",value:function _isCurrentSpace(){var t=this._string[this._currentIndex];return t<=" "&&(" "===t||"\n"===t||"\t"===t||"\r"===t||"\f"===t)}},{key:"_skipOptionalSpaces",value:function _skipOptionalSpaces(){for(;this._currentIndex="0"&&t<="9")&&e!==SVGPathSeg.PATHSEG_CLOSEPATH?e===SVGPathSeg.PATHSEG_MOVETO_ABS?SVGPathSeg.PATHSEG_LINETO_ABS:e===SVGPathSeg.PATHSEG_MOVETO_REL?SVGPathSeg.PATHSEG_LINETO_REL:e:SVGPathSeg.PATHSEG_UNKNOWN}},{key:"initialCommandIsMoveTo",value:function initialCommandIsMoveTo(){if(!this.hasMoreData())return!0;var t=this.peekSegmentType();return t===SVGPathSeg.PATHSEG_MOVETO_ABS||t===SVGPathSeg.PATHSEG_MOVETO_REL}},{key:"_parseNumber",value:function _parseNumber(){var t=0,e=0,n=1,r=0,i=1,a=1,s=this._currentIndex;if(this._skipOptionalSpaces(),this._currentIndex"9")&&"."!==this._string.charAt(this._currentIndex))){for(var h=this._currentIndex;this._currentIndex="0"&&this._string.charAt(this._currentIndex)<="9";)this._currentIndex++;if(this._currentIndex!==h)for(var o=this._currentIndex-1,_=1;o>=h;)e+=_*(this._string.charAt(o--)-"0"),_*=10;if(this._currentIndex=this._endIndex||this._string.charAt(this._currentIndex)<"0"||this._string.charAt(this._currentIndex)>"9")return;for(;this._currentIndex="0"&&this._string.charAt(this._currentIndex)<="9";)n*=10,r+=(this._string.charAt(this._currentIndex)-"0")/n,this._currentIndex+=1}if(this._currentIndex!==s&&this._currentIndex+1=this._endIndex||this._string.charAt(this._currentIndex)<"0"||this._string.charAt(this._currentIndex)>"9")return;for(;this._currentIndex="0"&&this._string.charAt(this._currentIndex)<="9";)t*=10,t+=this._string.charAt(this._currentIndex)-"0",this._currentIndex++}var u=e+r;if(u*=i,t&&(u*=Math.pow(10,a*t)),s!==this._currentIndex)return this._skipOptionalSpacesOrDelimiter(),u}}},{key:"_parseArcFlag",value:function _parseArcFlag(){if(!(this._currentIndex>=this._endIndex)){var t=!1,e=this._string.charAt(this._currentIndex++);if("0"===e)t=!1;else{if("1"!==e)return;t=!0}return this._skipOptionalSpacesOrDelimiter(),t}}},{key:"parseSegment",value:function parseSegment(){var t=this._string[this._currentIndex],n=this._pathSegTypeFromChar(t);if(n===SVGPathSeg.PATHSEG_UNKNOWN){if(this._previousCommand===SVGPathSeg.PATHSEG_UNKNOWN)return null;if((n=this._nextCommandHelper(t,this._previousCommand))===SVGPathSeg.PATHSEG_UNKNOWN)return null}else this._currentIndex++;switch(this._previousCommand=n,n){case SVGPathSeg.PATHSEG_MOVETO_REL:return new SVGPathSegMovetoRel(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_MOVETO_ABS:return new SVGPathSegMovetoAbs(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_REL:return new SVGPathSegLinetoRel(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_ABS:return new SVGPathSegLinetoAbs(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:return new SVGPathSegLinetoHorizontalRel(e,this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:return new SVGPathSegLinetoHorizontalAbs(e,this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL:return new SVGPathSegLinetoVerticalRel(e,this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS:return new SVGPathSegLinetoVerticalAbs(e,this._parseNumber());case SVGPathSeg.PATHSEG_CLOSEPATH:return this._skipOptionalSpaces(),new SVGPathSegClosePath(e);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL:var r={x1:this._parseNumber(),y1:this._parseNumber(),x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicRel(e,r.x,r.y,r.x1,r.y1,r.x2,r.y2);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS:var i={x1:this._parseNumber(),y1:this._parseNumber(),x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicAbs(e,i.x,i.y,i.x1,i.y1,i.x2,i.y2);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL:var a={x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicSmoothRel(e,a.x,a.y,a.x2,a.y2);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:var s={x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicSmoothAbs(e,s.x,s.y,s.x2,s.y2);case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL:var h={x1:this._parseNumber(),y1:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoQuadraticRel(e,h.x,h.y,h.x1,h.y1);case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS:var o={x1:this._parseNumber(),y1:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoQuadraticAbs(e,o.x,o.y,o.x1,o.y1);case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:return new SVGPathSegCurvetoQuadraticSmoothRel(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:return new SVGPathSegCurvetoQuadraticSmoothAbs(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_ARC_REL:var _={x1:this._parseNumber(),y1:this._parseNumber(),arcAngle:this._parseNumber(),arcLarge:this._parseArcFlag(),arcSweep:this._parseArcFlag(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegArcRel(e,_.x,_.y,_.x1,_.y1,_.arcAngle,_.arcLarge,_.arcSweep);case SVGPathSeg.PATHSEG_ARC_ABS:var u={x1:this._parseNumber(),y1:this._parseNumber(),arcAngle:this._parseNumber(),arcLarge:this._parseArcFlag(),arcSweep:this._parseArcFlag(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegArcAbs(e,u.x,u.y,u.x1,u.y1,u.arcAngle,u.arcLarge,u.arcSweep);default:throw new Error("Unknown path seg type.")}}}]),Source}(),i=new n,a=new r(t);if(!a.initialCommandIsMoveTo())return[];for(;a.hasMoreData();){var s=a.parseSegment();if(!s)return[];i.appendSegment(s)}return i.pathSegList}}],[{key:"_pathSegArrayAsString",value:function _pathSegArrayAsString(t){var e="",n=!0;return t.forEach((function(t){n?(n=!1,e+=t._asPathString()):e+=" "+t._asPathString()})),e}}]),SVGPathSegList}();A.prototype.classname="SVGPathSegList",Object.defineProperty(A.prototype,"numberOfItems",{get:function get(){return this._checkPathSynchronizedToList(),this._list.length},enumerable:!0}),Object.defineProperties(SVGPathElement.prototype,{pathSegList:{get:function get(){return this._pathSegList||(this._pathSegList=new A(this)),this._pathSegList},enumerable:!0},normalizedPathSegList:{get:function get(){return this.pathSegList},enumerable:!0},animatedPathSegList:{get:function get(){return this.pathSegList},enumerable:!0},animatedNormalizedPathSegList:{get:function get(){return this.pathSegList},enumerable:!0}}),window.SVGPathSegList=A}}();var t={name:"closepath",init:function init(t){return function _asyncToGenerator(t){return function(){var e=this,n=arguments;return new Promise((function(r,i){var a=t.apply(e,n);function _next(t){asyncGeneratorStep(a,r,i,_next,_throw,"next",t)}function _throw(t){asyncGeneratorStep(a,r,i,_next,_throw,"throw",t)}_next(void 0)}))}}(regeneratorRuntime.mark((function _callee(){var e,n,r,i,a,s,h,o;return regeneratorRuntime.wrap((function _callee$(_){for(;;)switch(_.prev=_.next){case 0:return e=t.importLocale,n=t.$,_.next=3,e();case 3:return r=_.sent,a=function updateButton(t){var e=t.pathSegList,r=1===e.getItem(e.numberOfItems-1).pathSegType,i=r?"#tool_openpath":"#tool_closepath";n(r?"#tool_closepath":"#tool_openpath").hide(),n(i).show()},s=function showPanel(t){if(n("#closepath_panel").toggle(t),t){var e=i[0];e&&a(e)}},h=function toggleClosed(){var t=i[0];if(t){var e=t.pathSegList,n=e.numberOfItems-1;1===e.getItem(n).pathSegType?e.removeItem(n):e.appendItem(t.createSVGPathSegClosePath()),a(t)}},o=[{id:"tool_openpath",icon:"openpath.png",type:"context",panel:"closepath_panel",events:{click:function click(){h()}}},{id:"tool_closepath",icon:"closepath.png",type:"context",panel:"closepath_panel",events:{click:function click(){h()}}}],_.abrupt("return",{name:r.name,svgicons:"closepath_icons.svg",buttons:r.buttons.map((function(t,e){return Object.assign(o[e],t)})),callback:function callback(){n("#closepath_panel").hide()},selectedChanged:function selectedChanged(t){for(var e=(i=t.elems).length;e--;){var n=i[e];n&&"path"===n.tagName&&t.selectedElement&&!t.multiselected?s(!0):s(!1)}}});case 9:case"end":return _.stop()}}),_callee)})))()}};export default t; -//# sourceMappingURL=ext-closepath.js.map diff --git a/dist/editor/extensions/ext-closepath.js.map b/dist/editor/extensions/ext-closepath.js.map deleted file mode 100644 index 9bb7b2b5..00000000 --- a/dist/editor/extensions/ext-closepath.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ext-closepath.js","sources":["../../../src/common/svgpathseg.js","../../../src/editor/extensions/ext-closepath.js"],"sourcesContent":["/* eslint-disable import/unambiguous, max-len */\n/* globals SVGPathSeg, SVGPathSegMovetoRel, SVGPathSegMovetoAbs,\n SVGPathSegMovetoRel, SVGPathSegLinetoRel, SVGPathSegLinetoAbs,\n SVGPathSegLinetoHorizontalRel, SVGPathSegLinetoHorizontalAbs,\n SVGPathSegLinetoVerticalRel, SVGPathSegLinetoVerticalAbs,\n SVGPathSegClosePath, SVGPathSegCurvetoCubicRel,\n SVGPathSegCurvetoCubicAbs, SVGPathSegCurvetoCubicSmoothRel,\n SVGPathSegCurvetoCubicSmoothAbs, SVGPathSegCurvetoQuadraticRel,\n SVGPathSegCurvetoQuadraticAbs, SVGPathSegCurvetoQuadraticSmoothRel,\n SVGPathSegCurvetoQuadraticSmoothAbs, SVGPathSegArcRel, SVGPathSegArcAbs */\n/**\n* SVGPathSeg API polyfill\n* https://github.com/progers/pathseg\n*\n* This is a drop-in replacement for the `SVGPathSeg` and `SVGPathSegList` APIs\n* that were removed from SVG2 ({@link https://lists.w3.org/Archives/Public/www-svg/2015Jun/0044.html}),\n* including the latest spec changes which were implemented in Firefox 43 and\n* Chrome 46.\n*/\n/* eslint-disable no-shadow, class-methods-use-this, jsdoc/require-jsdoc */\n// Linting: We avoid `no-shadow` as ESLint thinks these are still available globals\n// Linting: We avoid `class-methods-use-this` as this is a polyfill that must\n// follow the conventions\n(() => {\nif (!('SVGPathSeg' in window)) {\n // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSeg\n class SVGPathSeg {\n constructor (type, typeAsLetter, owningPathSegList) {\n this.pathSegType = type;\n this.pathSegTypeAsLetter = typeAsLetter;\n this._owningPathSegList = owningPathSegList;\n }\n // Notify owning PathSegList on any changes so they can be synchronized back to the path element.\n _segmentChanged () {\n if (this._owningPathSegList) {\n this._owningPathSegList.segmentChanged(this);\n }\n }\n }\n SVGPathSeg.prototype.classname = 'SVGPathSeg';\n\n SVGPathSeg.PATHSEG_UNKNOWN = 0;\n SVGPathSeg.PATHSEG_CLOSEPATH = 1;\n SVGPathSeg.PATHSEG_MOVETO_ABS = 2;\n SVGPathSeg.PATHSEG_MOVETO_REL = 3;\n SVGPathSeg.PATHSEG_LINETO_ABS = 4;\n SVGPathSeg.PATHSEG_LINETO_REL = 5;\n SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS = 6;\n SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL = 7;\n SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS = 8;\n SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL = 9;\n SVGPathSeg.PATHSEG_ARC_ABS = 10;\n SVGPathSeg.PATHSEG_ARC_REL = 11;\n SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS = 12;\n SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL = 13;\n SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS = 14;\n SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL = 15;\n SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16;\n SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17;\n SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18;\n SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19;\n\n class SVGPathSegClosePath extends SVGPathSeg {\n constructor (owningPathSegList) {\n super(SVGPathSeg.PATHSEG_CLOSEPATH, 'z', owningPathSegList);\n }\n toString () { return '[object SVGPathSegClosePath]'; }\n _asPathString () { return this.pathSegTypeAsLetter; }\n clone () { return new SVGPathSegClosePath(undefined); }\n }\n\n class SVGPathSegMovetoAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y) {\n super(SVGPathSeg.PATHSEG_MOVETO_ABS, 'M', owningPathSegList);\n this._x = x;\n this._y = y;\n }\n toString () { return '[object SVGPathSegMovetoAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegMovetoAbs(undefined, this._x, this._y); }\n }\n Object.defineProperties(SVGPathSegMovetoAbs.prototype, {\n x: {\n get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true\n },\n y: {\n get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true\n }\n });\n\n class SVGPathSegMovetoRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y) {\n super(SVGPathSeg.PATHSEG_MOVETO_REL, 'm', owningPathSegList);\n this._x = x;\n this._y = y;\n }\n toString () { return '[object SVGPathSegMovetoRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegMovetoRel(undefined, this._x, this._y); }\n }\n Object.defineProperties(SVGPathSegMovetoRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegLinetoAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y) {\n super(SVGPathSeg.PATHSEG_LINETO_ABS, 'L', owningPathSegList);\n this._x = x;\n this._y = y;\n }\n toString () { return '[object SVGPathSegLinetoAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegLinetoAbs(undefined, this._x, this._y); }\n }\n Object.defineProperties(SVGPathSegLinetoAbs.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegLinetoRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y) {\n super(SVGPathSeg.PATHSEG_LINETO_REL, 'l', owningPathSegList);\n this._x = x;\n this._y = y;\n }\n toString () { return '[object SVGPathSegLinetoRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegLinetoRel(undefined, this._x, this._y); }\n }\n Object.defineProperties(SVGPathSegLinetoRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoCubicAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y, x1, y1, x2, y2) {\n super(SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS, 'C', owningPathSegList);\n this._x = x;\n this._y = y;\n this._x1 = x1;\n this._y1 = y1;\n this._x2 = x2;\n this._y2 = y2;\n }\n toString () { return '[object SVGPathSegCurvetoCubicAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoCubicAbs(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2); }\n }\n Object.defineProperties(SVGPathSegCurvetoCubicAbs.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n x1: {get () { return this._x1; }, set (x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true},\n y1: {get () { return this._y1; }, set (y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true},\n x2: {get () { return this._x2; }, set (x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true},\n y2: {get () { return this._y2; }, set (y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoCubicRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y, x1, y1, x2, y2) {\n super(SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL, 'c', owningPathSegList);\n this._x = x;\n this._y = y;\n this._x1 = x1;\n this._y1 = y1;\n this._x2 = x2;\n this._y2 = y2;\n }\n toString () { return '[object SVGPathSegCurvetoCubicRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoCubicRel(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2); }\n }\n Object.defineProperties(SVGPathSegCurvetoCubicRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n x1: {get () { return this._x1; }, set (x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true},\n y1: {get () { return this._y1; }, set (y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true},\n x2: {get () { return this._x2; }, set (x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true},\n y2: {get () { return this._y2; }, set (y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoQuadraticAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y, x1, y1) {\n super(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS, 'Q', owningPathSegList);\n this._x = x;\n this._y = y;\n this._x1 = x1;\n this._y1 = y1;\n }\n toString () { return '[object SVGPathSegCurvetoQuadraticAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoQuadraticAbs(undefined, this._x, this._y, this._x1, this._y1); }\n }\n Object.defineProperties(SVGPathSegCurvetoQuadraticAbs.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n x1: {get () { return this._x1; }, set (x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true},\n y1: {get () { return this._y1; }, set (y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoQuadraticRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y, x1, y1) {\n super(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL, 'q', owningPathSegList);\n this._x = x;\n this._y = y;\n this._x1 = x1;\n this._y1 = y1;\n }\n toString () { return '[object SVGPathSegCurvetoQuadraticRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoQuadraticRel(undefined, this._x, this._y, this._x1, this._y1); }\n }\n Object.defineProperties(SVGPathSegCurvetoQuadraticRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n x1: {get () { return this._x1; }, set (x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true},\n y1: {get () { return this._y1; }, set (y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegArcAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\n super(SVGPathSeg.PATHSEG_ARC_ABS, 'A', owningPathSegList);\n this._x = x;\n this._y = y;\n this._r1 = r1;\n this._r2 = r2;\n this._angle = angle;\n this._largeArcFlag = largeArcFlag;\n this._sweepFlag = sweepFlag;\n }\n toString () { return '[object SVGPathSegArcAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._r1 + ' ' + this._r2 + ' ' + this._angle + ' ' + (this._largeArcFlag ? '1' : '0') + ' ' + (this._sweepFlag ? '1' : '0') + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegArcAbs(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag); }\n }\n Object.defineProperties(SVGPathSegArcAbs.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n r1: {get () { return this._r1; }, set (r1) { this._r1 = r1; this._segmentChanged(); }, enumerable: true},\n r2: {get () { return this._r2; }, set (r2) { this._r2 = r2; this._segmentChanged(); }, enumerable: true},\n angle: {get () { return this._angle; }, set (angle) { this._angle = angle; this._segmentChanged(); }, enumerable: true},\n largeArcFlag: {get () { return this._largeArcFlag; }, set (largeArcFlag) { this._largeArcFlag = largeArcFlag; this._segmentChanged(); }, enumerable: true},\n sweepFlag: {get () { return this._sweepFlag; }, set (sweepFlag) { this._sweepFlag = sweepFlag; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegArcRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\n super(SVGPathSeg.PATHSEG_ARC_REL, 'a', owningPathSegList);\n this._x = x;\n this._y = y;\n this._r1 = r1;\n this._r2 = r2;\n this._angle = angle;\n this._largeArcFlag = largeArcFlag;\n this._sweepFlag = sweepFlag;\n }\n toString () { return '[object SVGPathSegArcRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._r1 + ' ' + this._r2 + ' ' + this._angle + ' ' + (this._largeArcFlag ? '1' : '0') + ' ' + (this._sweepFlag ? '1' : '0') + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegArcRel(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag); }\n }\n Object.defineProperties(SVGPathSegArcRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n r1: {get () { return this._r1; }, set (r1) { this._r1 = r1; this._segmentChanged(); }, enumerable: true},\n r2: {get () { return this._r2; }, set (r2) { this._r2 = r2; this._segmentChanged(); }, enumerable: true},\n angle: {get () { return this._angle; }, set (angle) { this._angle = angle; this._segmentChanged(); }, enumerable: true},\n largeArcFlag: {get () { return this._largeArcFlag; }, set (largeArcFlag) { this._largeArcFlag = largeArcFlag; this._segmentChanged(); }, enumerable: true},\n sweepFlag: {get () { return this._sweepFlag; }, set (sweepFlag) { this._sweepFlag = sweepFlag; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegLinetoHorizontalAbs extends SVGPathSeg {\n constructor (owningPathSegList, x) {\n super(SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS, 'H', owningPathSegList);\n this._x = x;\n }\n toString () { return '[object SVGPathSegLinetoHorizontalAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x; }\n clone () { return new SVGPathSegLinetoHorizontalAbs(undefined, this._x); }\n }\n Object.defineProperty(SVGPathSegLinetoHorizontalAbs.prototype, 'x', {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true});\n\n class SVGPathSegLinetoHorizontalRel extends SVGPathSeg {\n constructor (owningPathSegList, x) {\n super(SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL, 'h', owningPathSegList);\n this._x = x;\n }\n toString () { return '[object SVGPathSegLinetoHorizontalRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x; }\n clone () { return new SVGPathSegLinetoHorizontalRel(undefined, this._x); }\n }\n Object.defineProperty(SVGPathSegLinetoHorizontalRel.prototype, 'x', {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true});\n\n class SVGPathSegLinetoVerticalAbs extends SVGPathSeg {\n constructor (owningPathSegList, y) {\n super(SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS, 'V', owningPathSegList);\n this._y = y;\n }\n toString () { return '[object SVGPathSegLinetoVerticalAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._y; }\n clone () { return new SVGPathSegLinetoVerticalAbs(undefined, this._y); }\n }\n Object.defineProperty(SVGPathSegLinetoVerticalAbs.prototype, 'y', {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true});\n\n class SVGPathSegLinetoVerticalRel extends SVGPathSeg {\n constructor (owningPathSegList, y) {\n super(SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL, 'v', owningPathSegList);\n this._y = y;\n }\n toString () { return '[object SVGPathSegLinetoVerticalRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._y; }\n clone () { return new SVGPathSegLinetoVerticalRel(undefined, this._y); }\n }\n Object.defineProperty(SVGPathSegLinetoVerticalRel.prototype, 'y', {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true});\n\n class SVGPathSegCurvetoCubicSmoothAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y, x2, y2) {\n super(SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS, 'S', owningPathSegList);\n this._x = x;\n this._y = y;\n this._x2 = x2;\n this._y2 = y2;\n }\n toString () { return '[object SVGPathSegCurvetoCubicSmoothAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoCubicSmoothAbs(undefined, this._x, this._y, this._x2, this._y2); }\n }\n Object.defineProperties(SVGPathSegCurvetoCubicSmoothAbs.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n x2: {get () { return this._x2; }, set (x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true},\n y2: {get () { return this._y2; }, set (y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoCubicSmoothRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y, x2, y2) {\n super(SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL, 's', owningPathSegList);\n this._x = x;\n this._y = y;\n this._x2 = x2;\n this._y2 = y2;\n }\n toString () { return '[object SVGPathSegCurvetoCubicSmoothRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoCubicSmoothRel(undefined, this._x, this._y, this._x2, this._y2); }\n }\n Object.defineProperties(SVGPathSegCurvetoCubicSmoothRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n x2: {get () { return this._x2; }, set (x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true},\n y2: {get () { return this._y2; }, set (y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoQuadraticSmoothAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y) {\n super(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS, 'T', owningPathSegList);\n this._x = x;\n this._y = y;\n }\n toString () { return '[object SVGPathSegCurvetoQuadraticSmoothAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoQuadraticSmoothAbs(undefined, this._x, this._y); }\n }\n Object.defineProperties(SVGPathSegCurvetoQuadraticSmoothAbs.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoQuadraticSmoothRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y) {\n super(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL, 't', owningPathSegList);\n this._x = x;\n this._y = y;\n }\n toString () { return '[object SVGPathSegCurvetoQuadraticSmoothRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoQuadraticSmoothRel(undefined, this._x, this._y); }\n }\n Object.defineProperties(SVGPathSegCurvetoQuadraticSmoothRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true}\n });\n\n // Add createSVGPathSeg* functions to SVGPathElement.\n // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathElement.\n SVGPathElement.prototype.createSVGPathSegClosePath = function () { return new SVGPathSegClosePath(undefined); };\n SVGPathElement.prototype.createSVGPathSegMovetoAbs = function (x, y) { return new SVGPathSegMovetoAbs(undefined, x, y); };\n SVGPathElement.prototype.createSVGPathSegMovetoRel = function (x, y) { return new SVGPathSegMovetoRel(undefined, x, y); };\n SVGPathElement.prototype.createSVGPathSegLinetoAbs = function (x, y) { return new SVGPathSegLinetoAbs(undefined, x, y); };\n SVGPathElement.prototype.createSVGPathSegLinetoRel = function (x, y) { return new SVGPathSegLinetoRel(undefined, x, y); };\n SVGPathElement.prototype.createSVGPathSegCurvetoCubicAbs = function (x, y, x1, y1, x2, y2) { return new SVGPathSegCurvetoCubicAbs(undefined, x, y, x1, y1, x2, y2); };\n SVGPathElement.prototype.createSVGPathSegCurvetoCubicRel = function (x, y, x1, y1, x2, y2) { return new SVGPathSegCurvetoCubicRel(undefined, x, y, x1, y1, x2, y2); };\n SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticAbs = function (x, y, x1, y1) { return new SVGPathSegCurvetoQuadraticAbs(undefined, x, y, x1, y1); };\n SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticRel = function (x, y, x1, y1) { return new SVGPathSegCurvetoQuadraticRel(undefined, x, y, x1, y1); };\n SVGPathElement.prototype.createSVGPathSegArcAbs = function (x, y, r1, r2, angle, largeArcFlag, sweepFlag) { return new SVGPathSegArcAbs(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag); };\n SVGPathElement.prototype.createSVGPathSegArcRel = function (x, y, r1, r2, angle, largeArcFlag, sweepFlag) { return new SVGPathSegArcRel(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag); };\n SVGPathElement.prototype.createSVGPathSegLinetoHorizontalAbs = function (x) { return new SVGPathSegLinetoHorizontalAbs(undefined, x); };\n SVGPathElement.prototype.createSVGPathSegLinetoHorizontalRel = function (x) { return new SVGPathSegLinetoHorizontalRel(undefined, x); };\n SVGPathElement.prototype.createSVGPathSegLinetoVerticalAbs = function (y) { return new SVGPathSegLinetoVerticalAbs(undefined, y); };\n SVGPathElement.prototype.createSVGPathSegLinetoVerticalRel = function (y) { return new SVGPathSegLinetoVerticalRel(undefined, y); };\n SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothAbs = function (x, y, x2, y2) { return new SVGPathSegCurvetoCubicSmoothAbs(undefined, x, y, x2, y2); };\n SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothRel = function (x, y, x2, y2) { return new SVGPathSegCurvetoCubicSmoothRel(undefined, x, y, x2, y2); };\n SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothAbs = function (x, y) { return new SVGPathSegCurvetoQuadraticSmoothAbs(undefined, x, y); };\n SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothRel = function (x, y) { return new SVGPathSegCurvetoQuadraticSmoothRel(undefined, x, y); };\n\n if (!('getPathSegAtLength' in SVGPathElement.prototype)) {\n // Add getPathSegAtLength to SVGPathElement.\n // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-__svg__SVGPathElement__getPathSegAtLength\n // This polyfill requires SVGPathElement.getTotalLength to implement the distance-along-a-path algorithm.\n SVGPathElement.prototype.getPathSegAtLength = function (distance) {\n if (distance === undefined || !isFinite(distance)) {\n throw new Error('Invalid arguments.');\n }\n\n const measurementElement = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n measurementElement.setAttribute('d', this.getAttribute('d'));\n let lastPathSegment = measurementElement.pathSegList.numberOfItems - 1;\n\n // If the path is empty, return 0.\n if (lastPathSegment <= 0) {\n return 0;\n }\n\n do {\n measurementElement.pathSegList.removeItem(lastPathSegment);\n if (distance > measurementElement.getTotalLength()) {\n break;\n }\n lastPathSegment--;\n } while (lastPathSegment > 0);\n return lastPathSegment;\n };\n }\n\n window.SVGPathSeg = SVGPathSeg;\n window.SVGPathSegClosePath = SVGPathSegClosePath;\n window.SVGPathSegMovetoAbs = SVGPathSegMovetoAbs;\n window.SVGPathSegMovetoRel = SVGPathSegMovetoRel;\n window.SVGPathSegLinetoAbs = SVGPathSegLinetoAbs;\n window.SVGPathSegLinetoRel = SVGPathSegLinetoRel;\n window.SVGPathSegCurvetoCubicAbs = SVGPathSegCurvetoCubicAbs;\n window.SVGPathSegCurvetoCubicRel = SVGPathSegCurvetoCubicRel;\n window.SVGPathSegCurvetoQuadraticAbs = SVGPathSegCurvetoQuadraticAbs;\n window.SVGPathSegCurvetoQuadraticRel = SVGPathSegCurvetoQuadraticRel;\n window.SVGPathSegArcAbs = SVGPathSegArcAbs;\n window.SVGPathSegArcRel = SVGPathSegArcRel;\n window.SVGPathSegLinetoHorizontalAbs = SVGPathSegLinetoHorizontalAbs;\n window.SVGPathSegLinetoHorizontalRel = SVGPathSegLinetoHorizontalRel;\n window.SVGPathSegLinetoVerticalAbs = SVGPathSegLinetoVerticalAbs;\n window.SVGPathSegLinetoVerticalRel = SVGPathSegLinetoVerticalRel;\n window.SVGPathSegCurvetoCubicSmoothAbs = SVGPathSegCurvetoCubicSmoothAbs;\n window.SVGPathSegCurvetoCubicSmoothRel = SVGPathSegCurvetoCubicSmoothRel;\n window.SVGPathSegCurvetoQuadraticSmoothAbs = SVGPathSegCurvetoQuadraticSmoothAbs;\n window.SVGPathSegCurvetoQuadraticSmoothRel = SVGPathSegCurvetoQuadraticSmoothRel;\n}\n\n// Checking for SVGPathSegList in window checks for the case of an implementation without the\n// SVGPathSegList API.\n// The second check for appendItem is specific to Firefox 59+ which removed only parts of the\n// SVGPathSegList API (e.g., appendItem). In this case we need to re-implement the entire API\n// so the polyfill data (i.e., _list) is used throughout.\nif (!('SVGPathSegList' in window) || !('appendItem' in window.SVGPathSegList.prototype)) {\n // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSegList\n class SVGPathSegList {\n constructor (pathElement) {\n this._pathElement = pathElement;\n this._list = this._parsePath(this._pathElement.getAttribute('d'));\n\n // Use a MutationObserver to catch changes to the path's \"d\" attribute.\n this._mutationObserverConfig = {attributes: true, attributeFilter: ['d']};\n this._pathElementMutationObserver = new MutationObserver(this._updateListFromPathMutations.bind(this));\n this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);\n }\n // Process any pending mutations to the path element and update the list as needed.\n // This should be the first call of all public functions and is needed because\n // MutationObservers are not synchronous so we can have pending asynchronous mutations.\n _checkPathSynchronizedToList () {\n this._updateListFromPathMutations(this._pathElementMutationObserver.takeRecords());\n }\n\n _updateListFromPathMutations (mutationRecords) {\n if (!this._pathElement) {\n return;\n }\n let hasPathMutations = false;\n mutationRecords.forEach((record) => {\n if (record.attributeName === 'd') {\n hasPathMutations = true;\n }\n });\n if (hasPathMutations) {\n this._list = this._parsePath(this._pathElement.getAttribute('d'));\n }\n }\n\n // Serialize the list and update the path's 'd' attribute.\n _writeListToPath () {\n this._pathElementMutationObserver.disconnect();\n this._pathElement.setAttribute('d', SVGPathSegList._pathSegArrayAsString(this._list));\n this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);\n }\n\n // When a path segment changes the list needs to be synchronized back to the path element.\n segmentChanged (pathSeg) {\n this._writeListToPath();\n }\n\n clear () {\n this._checkPathSynchronizedToList();\n\n this._list.forEach((pathSeg) => {\n pathSeg._owningPathSegList = null;\n });\n this._list = [];\n this._writeListToPath();\n }\n\n initialize (newItem) {\n this._checkPathSynchronizedToList();\n\n this._list = [newItem];\n newItem._owningPathSegList = this;\n this._writeListToPath();\n return newItem;\n }\n\n _checkValidIndex (index) {\n if (isNaN(index) || index < 0 || index >= this.numberOfItems) {\n throw new Error('INDEX_SIZE_ERR');\n }\n }\n\n getItem (index) {\n this._checkPathSynchronizedToList();\n\n this._checkValidIndex(index);\n return this._list[index];\n }\n\n insertItemBefore (newItem, index) {\n this._checkPathSynchronizedToList();\n\n // Spec: If the index is greater than or equal to numberOfItems, then the new item is appended to the end of the list.\n if (index > this.numberOfItems) {\n index = this.numberOfItems;\n }\n if (newItem._owningPathSegList) {\n // SVG2 spec says to make a copy.\n newItem = newItem.clone();\n }\n this._list.splice(index, 0, newItem);\n newItem._owningPathSegList = this;\n this._writeListToPath();\n return newItem;\n }\n\n replaceItem (newItem, index) {\n this._checkPathSynchronizedToList();\n\n if (newItem._owningPathSegList) {\n // SVG2 spec says to make a copy.\n newItem = newItem.clone();\n }\n this._checkValidIndex(index);\n this._list[index] = newItem;\n newItem._owningPathSegList = this;\n this._writeListToPath();\n return newItem;\n }\n\n removeItem (index) {\n this._checkPathSynchronizedToList();\n\n this._checkValidIndex(index);\n const item = this._list[index];\n this._list.splice(index, 1);\n this._writeListToPath();\n return item;\n }\n\n appendItem (newItem) {\n this._checkPathSynchronizedToList();\n\n if (newItem._owningPathSegList) {\n // SVG2 spec says to make a copy.\n newItem = newItem.clone();\n }\n this._list.push(newItem);\n newItem._owningPathSegList = this;\n // TODO: Optimize this to just append to the existing attribute.\n this._writeListToPath();\n return newItem;\n }\n\n // This closely follows SVGPathParser::parsePath from Source/core/svg/SVGPathParser.cpp.\n _parsePath (string) {\n if (!string || !string.length) {\n return [];\n }\n\n const owningPathSegList = this;\n\n class Builder {\n constructor () {\n this.pathSegList = [];\n }\n appendSegment (pathSeg) {\n this.pathSegList.push(pathSeg);\n }\n }\n\n class Source {\n constructor (string) {\n this._string = string;\n this._currentIndex = 0;\n this._endIndex = this._string.length;\n this._previousCommand = SVGPathSeg.PATHSEG_UNKNOWN;\n\n this._skipOptionalSpaces();\n }\n _isCurrentSpace () {\n const character = this._string[this._currentIndex];\n return character <= ' ' && (character === ' ' || character === '\\n' || character === '\\t' || character === '\\r' || character === '\\f');\n }\n\n _skipOptionalSpaces () {\n while (this._currentIndex < this._endIndex && this._isCurrentSpace()) {\n this._currentIndex++;\n }\n return this._currentIndex < this._endIndex;\n }\n\n _skipOptionalSpacesOrDelimiter () {\n if (this._currentIndex < this._endIndex && !this._isCurrentSpace() && this._string.charAt(this._currentIndex) !== ',') {\n return false;\n }\n if (this._skipOptionalSpaces()) {\n if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) === ',') {\n this._currentIndex++;\n this._skipOptionalSpaces();\n }\n }\n return this._currentIndex < this._endIndex;\n }\n\n hasMoreData () {\n return this._currentIndex < this._endIndex;\n }\n\n peekSegmentType () {\n const lookahead = this._string[this._currentIndex];\n return this._pathSegTypeFromChar(lookahead);\n }\n\n _pathSegTypeFromChar (lookahead) {\n switch (lookahead) {\n case 'Z':\n case 'z':\n return SVGPathSeg.PATHSEG_CLOSEPATH;\n case 'M':\n return SVGPathSeg.PATHSEG_MOVETO_ABS;\n case 'm':\n return SVGPathSeg.PATHSEG_MOVETO_REL;\n case 'L':\n return SVGPathSeg.PATHSEG_LINETO_ABS;\n case 'l':\n return SVGPathSeg.PATHSEG_LINETO_REL;\n case 'C':\n return SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS;\n case 'c':\n return SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL;\n case 'Q':\n return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS;\n case 'q':\n return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL;\n case 'A':\n return SVGPathSeg.PATHSEG_ARC_ABS;\n case 'a':\n return SVGPathSeg.PATHSEG_ARC_REL;\n case 'H':\n return SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS;\n case 'h':\n return SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL;\n case 'V':\n return SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS;\n case 'v':\n return SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL;\n case 'S':\n return SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS;\n case 's':\n return SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL;\n case 'T':\n return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS;\n case 't':\n return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL;\n default:\n return SVGPathSeg.PATHSEG_UNKNOWN;\n }\n }\n\n _nextCommandHelper (lookahead, previousCommand) {\n // Check for remaining coordinates in the current command.\n if ((lookahead === '+' || lookahead === '-' || lookahead === '.' || (lookahead >= '0' && lookahead <= '9')) && previousCommand !== SVGPathSeg.PATHSEG_CLOSEPATH) {\n if (previousCommand === SVGPathSeg.PATHSEG_MOVETO_ABS) {\n return SVGPathSeg.PATHSEG_LINETO_ABS;\n }\n if (previousCommand === SVGPathSeg.PATHSEG_MOVETO_REL) {\n return SVGPathSeg.PATHSEG_LINETO_REL;\n }\n return previousCommand;\n }\n return SVGPathSeg.PATHSEG_UNKNOWN;\n }\n\n initialCommandIsMoveTo () {\n // If the path is empty it is still valid, so return true.\n if (!this.hasMoreData()) {\n return true;\n }\n const command = this.peekSegmentType();\n // Path must start with moveTo.\n return command === SVGPathSeg.PATHSEG_MOVETO_ABS || command === SVGPathSeg.PATHSEG_MOVETO_REL;\n }\n\n // Parse a number from an SVG path. This very closely follows genericParseNumber(...) from Source/core/svg/SVGParserUtilities.cpp.\n // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-PathDataBNF\n _parseNumber () {\n let exponent = 0;\n let integer = 0;\n let frac = 1;\n let decimal = 0;\n let sign = 1;\n let expsign = 1;\n\n const startIndex = this._currentIndex;\n\n this._skipOptionalSpaces();\n\n // Read the sign.\n if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) === '+') {\n this._currentIndex++;\n } else if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) === '-') {\n this._currentIndex++;\n sign = -1;\n }\n\n if (this._currentIndex === this._endIndex || ((this._string.charAt(this._currentIndex) < '0' || this._string.charAt(this._currentIndex) > '9') && this._string.charAt(this._currentIndex) !== '.')) {\n // The first character of a number must be one of [0-9+-.].\n return undefined;\n }\n\n // Read the integer part, build right-to-left.\n const startIntPartIndex = this._currentIndex;\n while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= '0' && this._string.charAt(this._currentIndex) <= '9') {\n this._currentIndex++; // Advance to first non-digit.\n }\n\n if (this._currentIndex !== startIntPartIndex) {\n let scanIntPartIndex = this._currentIndex - 1;\n let multiplier = 1;\n while (scanIntPartIndex >= startIntPartIndex) {\n integer += multiplier * (this._string.charAt(scanIntPartIndex--) - '0');\n multiplier *= 10;\n }\n }\n\n // Read the decimals.\n if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) === '.') {\n this._currentIndex++;\n\n // There must be a least one digit following the .\n if (this._currentIndex >= this._endIndex || this._string.charAt(this._currentIndex) < '0' || this._string.charAt(this._currentIndex) > '9') {\n return undefined;\n }\n while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= '0' && this._string.charAt(this._currentIndex) <= '9') {\n frac *= 10;\n decimal += (this._string.charAt(this._currentIndex) - '0') / frac;\n this._currentIndex += 1;\n }\n }\n\n // Read the exponent part.\n if (this._currentIndex !== startIndex && this._currentIndex + 1 < this._endIndex && (this._string.charAt(this._currentIndex) === 'e' || this._string.charAt(this._currentIndex) === 'E') && (this._string.charAt(this._currentIndex + 1) !== 'x' && this._string.charAt(this._currentIndex + 1) !== 'm')) {\n this._currentIndex++;\n\n // Read the sign of the exponent.\n if (this._string.charAt(this._currentIndex) === '+') {\n this._currentIndex++;\n } else if (this._string.charAt(this._currentIndex) === '-') {\n this._currentIndex++;\n expsign = -1;\n }\n\n // There must be an exponent.\n if (this._currentIndex >= this._endIndex || this._string.charAt(this._currentIndex) < '0' || this._string.charAt(this._currentIndex) > '9') {\n return undefined;\n }\n\n while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= '0' && this._string.charAt(this._currentIndex) <= '9') {\n exponent *= 10;\n exponent += (this._string.charAt(this._currentIndex) - '0');\n this._currentIndex++;\n }\n }\n\n let number = integer + decimal;\n number *= sign;\n\n if (exponent) {\n number *= 10 ** (expsign * exponent);\n }\n\n if (startIndex === this._currentIndex) {\n return undefined;\n }\n\n this._skipOptionalSpacesOrDelimiter();\n\n return number;\n }\n\n _parseArcFlag () {\n if (this._currentIndex >= this._endIndex) {\n return undefined;\n }\n let flag = false;\n const flagChar = this._string.charAt(this._currentIndex++);\n if (flagChar === '0') {\n flag = false;\n } else if (flagChar === '1') {\n flag = true;\n } else {\n return undefined;\n }\n\n this._skipOptionalSpacesOrDelimiter();\n return flag;\n }\n\n parseSegment () {\n const lookahead = this._string[this._currentIndex];\n let command = this._pathSegTypeFromChar(lookahead);\n if (command === SVGPathSeg.PATHSEG_UNKNOWN) {\n // Possibly an implicit command. Not allowed if this is the first command.\n if (this._previousCommand === SVGPathSeg.PATHSEG_UNKNOWN) {\n return null;\n }\n command = this._nextCommandHelper(lookahead, this._previousCommand);\n if (command === SVGPathSeg.PATHSEG_UNKNOWN) {\n return null;\n }\n } else {\n this._currentIndex++;\n }\n\n this._previousCommand = command;\n\n switch (command) {\n case SVGPathSeg.PATHSEG_MOVETO_REL:\n return new SVGPathSegMovetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());\n case SVGPathSeg.PATHSEG_MOVETO_ABS:\n return new SVGPathSegMovetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\n case SVGPathSeg.PATHSEG_LINETO_REL:\n return new SVGPathSegLinetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());\n case SVGPathSeg.PATHSEG_LINETO_ABS:\n return new SVGPathSegLinetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\n case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:\n return new SVGPathSegLinetoHorizontalRel(owningPathSegList, this._parseNumber());\n case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:\n return new SVGPathSegLinetoHorizontalAbs(owningPathSegList, this._parseNumber());\n case SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL:\n return new SVGPathSegLinetoVerticalRel(owningPathSegList, this._parseNumber());\n case SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS:\n return new SVGPathSegLinetoVerticalAbs(owningPathSegList, this._parseNumber());\n case SVGPathSeg.PATHSEG_CLOSEPATH:\n this._skipOptionalSpaces();\n return new SVGPathSegClosePath(owningPathSegList);\n case SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL: {\n const points = {x1: this._parseNumber(), y1: this._parseNumber(), x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegCurvetoCubicRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);\n } case SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS: {\n const points = {x1: this._parseNumber(), y1: this._parseNumber(), x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegCurvetoCubicAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);\n } case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL: {\n const points = {x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegCurvetoCubicSmoothRel(owningPathSegList, points.x, points.y, points.x2, points.y2);\n } case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: {\n const points = {x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegCurvetoCubicSmoothAbs(owningPathSegList, points.x, points.y, points.x2, points.y2);\n } case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL: {\n const points = {x1: this._parseNumber(), y1: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegCurvetoQuadraticRel(owningPathSegList, points.x, points.y, points.x1, points.y1);\n } case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS: {\n const points = {x1: this._parseNumber(), y1: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegCurvetoQuadraticAbs(owningPathSegList, points.x, points.y, points.x1, points.y1);\n } case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:\n return new SVGPathSegCurvetoQuadraticSmoothRel(owningPathSegList, this._parseNumber(), this._parseNumber());\n case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:\n return new SVGPathSegCurvetoQuadraticSmoothAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\n case SVGPathSeg.PATHSEG_ARC_REL: {\n const points = {x1: this._parseNumber(), y1: this._parseNumber(), arcAngle: this._parseNumber(), arcLarge: this._parseArcFlag(), arcSweep: this._parseArcFlag(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegArcRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);\n } case SVGPathSeg.PATHSEG_ARC_ABS: {\n const points = {x1: this._parseNumber(), y1: this._parseNumber(), arcAngle: this._parseNumber(), arcLarge: this._parseArcFlag(), arcSweep: this._parseArcFlag(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegArcAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);\n } default:\n throw new Error('Unknown path seg type.');\n }\n }\n }\n\n const builder = new Builder();\n const source = new Source(string);\n\n if (!source.initialCommandIsMoveTo()) {\n return [];\n }\n while (source.hasMoreData()) {\n const pathSeg = source.parseSegment();\n if (!pathSeg) {\n return [];\n }\n builder.appendSegment(pathSeg);\n }\n\n return builder.pathSegList;\n }\n\n // STATIC\n static _pathSegArrayAsString (pathSegArray) {\n let string = '';\n let first = true;\n pathSegArray.forEach((pathSeg) => {\n if (first) {\n first = false;\n string += pathSeg._asPathString();\n } else {\n string += ' ' + pathSeg._asPathString();\n }\n });\n return string;\n }\n }\n\n SVGPathSegList.prototype.classname = 'SVGPathSegList';\n\n Object.defineProperty(SVGPathSegList.prototype, 'numberOfItems', {\n get () {\n this._checkPathSynchronizedToList();\n return this._list.length;\n },\n enumerable: true\n });\n\n // Add the pathSegList accessors to SVGPathElement.\n // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGAnimatedPathData\n Object.defineProperties(SVGPathElement.prototype, {\n pathSegList: {\n get () {\n if (!this._pathSegList) {\n this._pathSegList = new SVGPathSegList(this);\n }\n return this._pathSegList;\n },\n enumerable: true\n },\n // TODO: The following are not implemented and simply return SVGPathElement.pathSegList.\n normalizedPathSegList: {get () { return this.pathSegList; }, enumerable: true},\n animatedPathSegList: {get () { return this.pathSegList; }, enumerable: true},\n animatedNormalizedPathSegList: {get () { return this.pathSegList; }, enumerable: true}\n });\n window.SVGPathSegList = SVGPathSegList;\n}\n})();\n","/**\n * @file ext-closepath.js\n *\n * @license MIT\n *\n * @copyright 2010 Jeff Schiller\n *\n */\nimport '../../common/svgpathseg.js';\n\n// This extension adds a simple button to the contextual panel for paths\n// The button toggles whether the path is open or closed\nexport default {\n name: 'closepath',\n async init ({importLocale, $}) {\n const strings = await importLocale();\n let selElems;\n const updateButton = function (path) {\n const seglist = path.pathSegList,\n closed = seglist.getItem(seglist.numberOfItems - 1).pathSegType === 1,\n showbutton = closed ? '#tool_openpath' : '#tool_closepath',\n hidebutton = closed ? '#tool_closepath' : '#tool_openpath';\n $(hidebutton).hide();\n $(showbutton).show();\n };\n const showPanel = function (on) {\n $('#closepath_panel').toggle(on);\n if (on) {\n const path = selElems[0];\n if (path) { updateButton(path); }\n }\n };\n const toggleClosed = function () {\n const path = selElems[0];\n if (path) {\n const seglist = path.pathSegList,\n last = seglist.numberOfItems - 1;\n // is closed\n if (seglist.getItem(last).pathSegType === 1) {\n seglist.removeItem(last);\n } else {\n seglist.appendItem(path.createSVGPathSegClosePath());\n }\n updateButton(path);\n }\n };\n\n const buttons = [\n {\n id: 'tool_openpath',\n icon: 'openpath.png',\n type: 'context',\n panel: 'closepath_panel',\n events: {\n click () {\n toggleClosed();\n }\n }\n },\n {\n id: 'tool_closepath',\n icon: 'closepath.png',\n type: 'context',\n panel: 'closepath_panel',\n events: {\n click () {\n toggleClosed();\n }\n }\n }\n ];\n\n return {\n name: strings.name,\n svgicons: 'closepath_icons.svg',\n buttons: strings.buttons.map((button, i) => {\n return Object.assign(buttons[i], button);\n }),\n callback () {\n $('#closepath_panel').hide();\n },\n selectedChanged (opts) {\n selElems = opts.elems;\n let i = selElems.length;\n while (i--) {\n const elem = selElems[i];\n if (elem && elem.tagName === 'path') {\n if (opts.selectedElement && !opts.multiselected) {\n showPanel(true);\n } else {\n showPanel(false);\n }\n } else {\n showPanel(false);\n }\n }\n }\n };\n }\n};\n"],"names":["window","SVGPathSeg","type","typeAsLetter","owningPathSegList","pathSegType","pathSegTypeAsLetter","_owningPathSegList","this","segmentChanged","prototype","classname","PATHSEG_UNKNOWN","PATHSEG_CLOSEPATH","PATHSEG_MOVETO_ABS","PATHSEG_MOVETO_REL","PATHSEG_LINETO_ABS","PATHSEG_LINETO_REL","PATHSEG_CURVETO_CUBIC_ABS","PATHSEG_CURVETO_CUBIC_REL","PATHSEG_CURVETO_QUADRATIC_ABS","PATHSEG_CURVETO_QUADRATIC_REL","PATHSEG_ARC_ABS","PATHSEG_ARC_REL","PATHSEG_LINETO_HORIZONTAL_ABS","PATHSEG_LINETO_HORIZONTAL_REL","PATHSEG_LINETO_VERTICAL_ABS","PATHSEG_LINETO_VERTICAL_REL","PATHSEG_CURVETO_CUBIC_SMOOTH_ABS","PATHSEG_CURVETO_CUBIC_SMOOTH_REL","PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS","PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL","SVGPathSegClosePath","undefined","SVGPathSegMovetoAbs","x","y","_x","_y","Object","defineProperties","get","set","_segmentChanged","enumerable","SVGPathSegMovetoRel","SVGPathSegLinetoAbs","SVGPathSegLinetoRel","SVGPathSegCurvetoCubicAbs","x1","y1","x2","y2","_x1","_y1","_x2","_y2","SVGPathSegCurvetoCubicRel","SVGPathSegCurvetoQuadraticAbs","SVGPathSegCurvetoQuadraticRel","SVGPathSegArcAbs","r1","r2","angle","largeArcFlag","sweepFlag","_r1","_r2","_angle","_largeArcFlag","_sweepFlag","SVGPathSegArcRel","SVGPathSegLinetoHorizontalAbs","defineProperty","SVGPathSegLinetoHorizontalRel","SVGPathSegLinetoVerticalAbs","SVGPathSegLinetoVerticalRel","SVGPathSegCurvetoCubicSmoothAbs","SVGPathSegCurvetoCubicSmoothRel","SVGPathSegCurvetoQuadraticSmoothAbs","SVGPathSegCurvetoQuadraticSmoothRel","SVGPathElement","createSVGPathSegClosePath","createSVGPathSegMovetoAbs","createSVGPathSegMovetoRel","createSVGPathSegLinetoAbs","createSVGPathSegLinetoRel","createSVGPathSegCurvetoCubicAbs","createSVGPathSegCurvetoCubicRel","createSVGPathSegCurvetoQuadraticAbs","createSVGPathSegCurvetoQuadraticRel","createSVGPathSegArcAbs","createSVGPathSegArcRel","createSVGPathSegLinetoHorizontalAbs","createSVGPathSegLinetoHorizontalRel","createSVGPathSegLinetoVerticalAbs","createSVGPathSegLinetoVerticalRel","createSVGPathSegCurvetoCubicSmoothAbs","createSVGPathSegCurvetoCubicSmoothRel","createSVGPathSegCurvetoQuadraticSmoothAbs","createSVGPathSegCurvetoQuadraticSmoothRel","getPathSegAtLength","distance","isFinite","Error","measurementElement","document","createElementNS","setAttribute","getAttribute","lastPathSegment","pathSegList","numberOfItems","removeItem","getTotalLength","SVGPathSegList","pathElement","_pathElement","_list","_parsePath","_mutationObserverConfig","attributes","attributeFilter","_pathElementMutationObserver","MutationObserver","_updateListFromPathMutations","bind","observe","takeRecords","mutationRecords","hasPathMutations","forEach","record","attributeName","disconnect","_pathSegArrayAsString","pathSeg","_writeListToPath","_checkPathSynchronizedToList","newItem","index","isNaN","_checkValidIndex","clone","splice","item","push","string","length","Builder","Source","_string","_currentIndex","_endIndex","_previousCommand","_skipOptionalSpaces","character","_isCurrentSpace","charAt","lookahead","_pathSegTypeFromChar","previousCommand","hasMoreData","command","peekSegmentType","exponent","integer","frac","decimal","sign","expsign","startIndex","startIntPartIndex","scanIntPartIndex","multiplier","number","_skipOptionalSpacesOrDelimiter","flag","flagChar","_nextCommandHelper","_parseNumber","points","arcAngle","arcLarge","_parseArcFlag","arcSweep","builder","source","initialCommandIsMoveTo","parseSegment","appendSegment","pathSegArray","first","_asPathString","_pathSegList","normalizedPathSegList","animatedPathSegList","animatedNormalizedPathSegList","name","init","importLocale","$","strings","updateButton","path","seglist","closed","getItem","showbutton","hide","show","showPanel","on","toggle","selElems","toggleClosed","last","appendItem","buttons","id","icon","panel","events","click","svgicons","map","button","i","assign","callback","selectedChanged","opts","elems","elem","tagName","selectedElement","multiselected"],"mappings":"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"} \ No newline at end of file diff --git a/dist/editor/extensions/ext-closepath/ext-closepath.js b/dist/editor/extensions/ext-closepath/ext-closepath.js new file mode 100644 index 00000000..6c8cc972 --- /dev/null +++ b/dist/editor/extensions/ext-closepath/ext-closepath.js @@ -0,0 +1,2 @@ +function asyncGeneratorStep(t,e,n,r,i,a,s){try{var h=t[a](s),o=h.value}catch(t){return void n(t)}h.done?e(o):Promise.resolve(o).then(r,i)}function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function _defineProperties(t,e){for(var n=0;ne.getTotalLength())break;n--}while(n>0);return n}),window.SVGPathSeg=t,window.SVGPathSegClosePath=e,window.SVGPathSegMovetoAbs=n,window.SVGPathSegMovetoRel=r,window.SVGPathSegLinetoAbs=i,window.SVGPathSegLinetoRel=a,window.SVGPathSegCurvetoCubicAbs=s,window.SVGPathSegCurvetoCubicRel=h,window.SVGPathSegCurvetoQuadraticAbs=o,window.SVGPathSegCurvetoQuadraticRel=_,window.SVGPathSegArcAbs=u,window.SVGPathSegArcRel=c,window.SVGPathSegLinetoHorizontalAbs=S,window.SVGPathSegLinetoHorizontalRel=g,window.SVGPathSegLinetoVerticalAbs=l,window.SVGPathSegLinetoVerticalRel=P,window.SVGPathSegCurvetoCubicSmoothAbs=p,window.SVGPathSegCurvetoCubicSmoothRel=f,window.SVGPathSegCurvetoQuadraticSmoothAbs=C,window.SVGPathSegCurvetoQuadraticSmoothRel=A}if(!("SVGPathSegList"in window)||!("appendItem"in window.SVGPathSegList.prototype)){var y=function(){function SVGPathSegList(t){_classCallCheck(this,SVGPathSegList),this._pathElement=t,this._list=this._parsePath(this._pathElement.getAttribute("d")),this._mutationObserverConfig={attributes:!0,attributeFilter:["d"]},this._pathElementMutationObserver=new MutationObserver(this._updateListFromPathMutations.bind(this)),this._pathElementMutationObserver.observe(this._pathElement,this._mutationObserverConfig)}return _createClass(SVGPathSegList,[{key:"_checkPathSynchronizedToList",value:function _checkPathSynchronizedToList(){this._updateListFromPathMutations(this._pathElementMutationObserver.takeRecords())}},{key:"_updateListFromPathMutations",value:function _updateListFromPathMutations(t){if(this._pathElement){var e=!1;t.forEach((function(t){"d"===t.attributeName&&(e=!0)})),e&&(this._list=this._parsePath(this._pathElement.getAttribute("d")))}}},{key:"_writeListToPath",value:function _writeListToPath(){this._pathElementMutationObserver.disconnect(),this._pathElement.setAttribute("d",SVGPathSegList._pathSegArrayAsString(this._list)),this._pathElementMutationObserver.observe(this._pathElement,this._mutationObserverConfig)}},{key:"segmentChanged",value:function segmentChanged(t){this._writeListToPath()}},{key:"clear",value:function clear(){this._checkPathSynchronizedToList(),this._list.forEach((function(t){t._owningPathSegList=null})),this._list=[],this._writeListToPath()}},{key:"initialize",value:function initialize(t){return this._checkPathSynchronizedToList(),this._list=[t],t._owningPathSegList=this,this._writeListToPath(),t}},{key:"_checkValidIndex",value:function _checkValidIndex(t){if(isNaN(t)||t<0||t>=this.numberOfItems)throw new Error("INDEX_SIZE_ERR")}},{key:"getItem",value:function getItem(t){return this._checkPathSynchronizedToList(),this._checkValidIndex(t),this._list[t]}},{key:"insertItemBefore",value:function insertItemBefore(t,e){return this._checkPathSynchronizedToList(),e>this.numberOfItems&&(e=this.numberOfItems),t._owningPathSegList&&(t=t.clone()),this._list.splice(e,0,t),t._owningPathSegList=this,this._writeListToPath(),t}},{key:"replaceItem",value:function replaceItem(t,e){return this._checkPathSynchronizedToList(),t._owningPathSegList&&(t=t.clone()),this._checkValidIndex(e),this._list[e]=t,t._owningPathSegList=this,this._writeListToPath(),t}},{key:"removeItem",value:function removeItem(t){this._checkPathSynchronizedToList(),this._checkValidIndex(t);var e=this._list[t];return this._list.splice(t,1),this._writeListToPath(),e}},{key:"appendItem",value:function appendItem(t){return this._checkPathSynchronizedToList(),t._owningPathSegList&&(t=t.clone()),this._list.push(t),t._owningPathSegList=this,this._writeListToPath(),t}},{key:"_parsePath",value:function _parsePath(t){if(!t||!t.length)return[];var e=this,n=function(){function Builder(){_classCallCheck(this,Builder),this.pathSegList=[]}return _createClass(Builder,[{key:"appendSegment",value:function appendSegment(t){this.pathSegList.push(t)}}]),Builder}(),r=function(){function Source(t){_classCallCheck(this,Source),this._string=t,this._currentIndex=0,this._endIndex=this._string.length,this._previousCommand=SVGPathSeg.PATHSEG_UNKNOWN,this._skipOptionalSpaces()}return _createClass(Source,[{key:"_isCurrentSpace",value:function _isCurrentSpace(){var t=this._string[this._currentIndex];return t<=" "&&(" "===t||"\n"===t||"\t"===t||"\r"===t||"\f"===t)}},{key:"_skipOptionalSpaces",value:function _skipOptionalSpaces(){for(;this._currentIndex="0"&&t<="9")&&e!==SVGPathSeg.PATHSEG_CLOSEPATH?e===SVGPathSeg.PATHSEG_MOVETO_ABS?SVGPathSeg.PATHSEG_LINETO_ABS:e===SVGPathSeg.PATHSEG_MOVETO_REL?SVGPathSeg.PATHSEG_LINETO_REL:e:SVGPathSeg.PATHSEG_UNKNOWN}},{key:"initialCommandIsMoveTo",value:function initialCommandIsMoveTo(){if(!this.hasMoreData())return!0;var t=this.peekSegmentType();return t===SVGPathSeg.PATHSEG_MOVETO_ABS||t===SVGPathSeg.PATHSEG_MOVETO_REL}},{key:"_parseNumber",value:function _parseNumber(){var t=0,e=0,n=1,r=0,i=1,a=1,s=this._currentIndex;if(this._skipOptionalSpaces(),this._currentIndex"9")&&"."!==this._string.charAt(this._currentIndex))){for(var h=this._currentIndex;this._currentIndex="0"&&this._string.charAt(this._currentIndex)<="9";)this._currentIndex++;if(this._currentIndex!==h)for(var o=this._currentIndex-1,_=1;o>=h;)e+=_*(this._string.charAt(o--)-"0"),_*=10;if(this._currentIndex=this._endIndex||this._string.charAt(this._currentIndex)<"0"||this._string.charAt(this._currentIndex)>"9")return;for(;this._currentIndex="0"&&this._string.charAt(this._currentIndex)<="9";)n*=10,r+=(this._string.charAt(this._currentIndex)-"0")/n,this._currentIndex+=1}if(this._currentIndex!==s&&this._currentIndex+1=this._endIndex||this._string.charAt(this._currentIndex)<"0"||this._string.charAt(this._currentIndex)>"9")return;for(;this._currentIndex="0"&&this._string.charAt(this._currentIndex)<="9";)t*=10,t+=this._string.charAt(this._currentIndex)-"0",this._currentIndex++}var u=e+r;if(u*=i,t&&(u*=Math.pow(10,a*t)),s!==this._currentIndex)return this._skipOptionalSpacesOrDelimiter(),u}}},{key:"_parseArcFlag",value:function _parseArcFlag(){if(!(this._currentIndex>=this._endIndex)){var t=!1,e=this._string.charAt(this._currentIndex++);if("0"===e)t=!1;else{if("1"!==e)return;t=!0}return this._skipOptionalSpacesOrDelimiter(),t}}},{key:"parseSegment",value:function parseSegment(){var t=this._string[this._currentIndex],n=this._pathSegTypeFromChar(t);if(n===SVGPathSeg.PATHSEG_UNKNOWN){if(this._previousCommand===SVGPathSeg.PATHSEG_UNKNOWN)return null;if((n=this._nextCommandHelper(t,this._previousCommand))===SVGPathSeg.PATHSEG_UNKNOWN)return null}else this._currentIndex++;switch(this._previousCommand=n,n){case SVGPathSeg.PATHSEG_MOVETO_REL:return new SVGPathSegMovetoRel(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_MOVETO_ABS:return new SVGPathSegMovetoAbs(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_REL:return new SVGPathSegLinetoRel(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_ABS:return new SVGPathSegLinetoAbs(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:return new SVGPathSegLinetoHorizontalRel(e,this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:return new SVGPathSegLinetoHorizontalAbs(e,this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL:return new SVGPathSegLinetoVerticalRel(e,this._parseNumber());case SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS:return new SVGPathSegLinetoVerticalAbs(e,this._parseNumber());case SVGPathSeg.PATHSEG_CLOSEPATH:return this._skipOptionalSpaces(),new SVGPathSegClosePath(e);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL:var r={x1:this._parseNumber(),y1:this._parseNumber(),x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicRel(e,r.x,r.y,r.x1,r.y1,r.x2,r.y2);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS:var i={x1:this._parseNumber(),y1:this._parseNumber(),x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicAbs(e,i.x,i.y,i.x1,i.y1,i.x2,i.y2);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL:var a={x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicSmoothRel(e,a.x,a.y,a.x2,a.y2);case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:var s={x2:this._parseNumber(),y2:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoCubicSmoothAbs(e,s.x,s.y,s.x2,s.y2);case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL:var h={x1:this._parseNumber(),y1:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoQuadraticRel(e,h.x,h.y,h.x1,h.y1);case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS:var o={x1:this._parseNumber(),y1:this._parseNumber(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegCurvetoQuadraticAbs(e,o.x,o.y,o.x1,o.y1);case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:return new SVGPathSegCurvetoQuadraticSmoothRel(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:return new SVGPathSegCurvetoQuadraticSmoothAbs(e,this._parseNumber(),this._parseNumber());case SVGPathSeg.PATHSEG_ARC_REL:var _={x1:this._parseNumber(),y1:this._parseNumber(),arcAngle:this._parseNumber(),arcLarge:this._parseArcFlag(),arcSweep:this._parseArcFlag(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegArcRel(e,_.x,_.y,_.x1,_.y1,_.arcAngle,_.arcLarge,_.arcSweep);case SVGPathSeg.PATHSEG_ARC_ABS:var u={x1:this._parseNumber(),y1:this._parseNumber(),arcAngle:this._parseNumber(),arcLarge:this._parseArcFlag(),arcSweep:this._parseArcFlag(),x:this._parseNumber(),y:this._parseNumber()};return new SVGPathSegArcAbs(e,u.x,u.y,u.x1,u.y1,u.arcAngle,u.arcLarge,u.arcSweep);default:throw new Error("Unknown path seg type.")}}}]),Source}(),i=new n,a=new r(t);if(!a.initialCommandIsMoveTo())return[];for(;a.hasMoreData();){var s=a.parseSegment();if(!s)return[];i.appendSegment(s)}return i.pathSegList}}],[{key:"_pathSegArrayAsString",value:function _pathSegArrayAsString(t){var e="",n=!0;return t.forEach((function(t){n?(n=!1,e+=t._asPathString()):e+=" "+t._asPathString()})),e}}]),SVGPathSegList}();y.prototype.classname="SVGPathSegList",Object.defineProperty(y.prototype,"numberOfItems",{get:function get(){return this._checkPathSynchronizedToList(),this._list.length},enumerable:!0}),Object.defineProperties(SVGPathElement.prototype,{pathSegList:{get:function get(){return this._pathSegList||(this._pathSegList=new y(this)),this._pathSegList},enumerable:!0},normalizedPathSegList:{get:function get(){return this.pathSegList},enumerable:!0},animatedPathSegList:{get:function get(){return this.pathSegList},enumerable:!0},animatedNormalizedPathSegList:{get:function get(){return this.pathSegList},enumerable:!0}}),window.SVGPathSegList=y}}();var t={name:"closepath",init:function init(t){return function _asyncToGenerator(t){return function(){var e=this,n=arguments;return new Promise((function(r,i){var a=t.apply(e,n);function _next(t){asyncGeneratorStep(a,r,i,_next,_throw,"next",t)}function _throw(t){asyncGeneratorStep(a,r,i,_next,_throw,"throw",t)}_next(void 0)}))}}(regeneratorRuntime.mark((function _callee(){var e,n,r,i,a,s,h,o;return regeneratorRuntime.wrap((function _callee$(_){for(;;)switch(_.prev=_.next){case 0:return e=t.importLocale,n=t.$,_.next=3,e();case 3:return r=_.sent,a=function updateButton(t){var e=t.pathSegList,r=1===e.getItem(e.numberOfItems-1).pathSegType,i=r?"#tool_openpath":"#tool_closepath";n(r?"#tool_closepath":"#tool_openpath").hide(),n(i).show()},s=function showPanel(t){if(n("#closepath_panel").toggle(t),t){var e=i[0];e&&a(e)}},h=function toggleClosed(){var t=i[0];if(t){var e=t.pathSegList,n=e.numberOfItems-1;1===e.getItem(n).pathSegType?e.removeItem(n):e.appendItem(t.createSVGPathSegClosePath()),a(t)}},o=[{id:"tool_openpath",icon:"openpath.png",type:"context",panel:"closepath_panel",events:{click:function click(){h()}}},{id:"tool_closepath",icon:"closepath.png",type:"context",panel:"closepath_panel",events:{click:function click(){h()}}}],_.abrupt("return",{name:r.name,svgicons:"closepath_icons.svg",buttons:r.buttons.map((function(t,e){return Object.assign(o[e],t)})),callback:function callback(){n("#closepath_panel").hide()},selectedChanged:function selectedChanged(t){for(var e=(i=t.elems).length;e--;){var n=i[e];n&&"path"===n.tagName&&t.selectedElement&&!t.multiselected?s(!0):s(!1)}}});case 9:case"end":return _.stop()}}),_callee)})))()}};export default t; +//# sourceMappingURL=ext-closepath.js.map diff --git a/dist/editor/extensions/ext-closepath/ext-closepath.js.map b/dist/editor/extensions/ext-closepath/ext-closepath.js.map new file mode 100644 index 00000000..4cd934f1 --- /dev/null +++ b/dist/editor/extensions/ext-closepath/ext-closepath.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ext-closepath.js","sources":["../../../../src/common/svgpathseg.js","../../../../src/editor/extensions/ext-closepath/ext-closepath.js"],"sourcesContent":["/* eslint-disable import/unambiguous, max-len */\n/* globals SVGPathSeg, SVGPathSegMovetoRel, SVGPathSegMovetoAbs,\n SVGPathSegMovetoRel, SVGPathSegLinetoRel, SVGPathSegLinetoAbs,\n SVGPathSegLinetoHorizontalRel, SVGPathSegLinetoHorizontalAbs,\n SVGPathSegLinetoVerticalRel, SVGPathSegLinetoVerticalAbs,\n SVGPathSegClosePath, SVGPathSegCurvetoCubicRel,\n SVGPathSegCurvetoCubicAbs, SVGPathSegCurvetoCubicSmoothRel,\n SVGPathSegCurvetoCubicSmoothAbs, SVGPathSegCurvetoQuadraticRel,\n SVGPathSegCurvetoQuadraticAbs, SVGPathSegCurvetoQuadraticSmoothRel,\n SVGPathSegCurvetoQuadraticSmoothAbs, SVGPathSegArcRel, SVGPathSegArcAbs */\n/**\n* SVGPathSeg API polyfill\n* https://github.com/progers/pathseg\n*\n* This is a drop-in replacement for the `SVGPathSeg` and `SVGPathSegList` APIs\n* that were removed from SVG2 ({@link https://lists.w3.org/Archives/Public/www-svg/2015Jun/0044.html}),\n* including the latest spec changes which were implemented in Firefox 43 and\n* Chrome 46.\n*/\n/* eslint-disable no-shadow, class-methods-use-this, jsdoc/require-jsdoc */\n// Linting: We avoid `no-shadow` as ESLint thinks these are still available globals\n// Linting: We avoid `class-methods-use-this` as this is a polyfill that must\n// follow the conventions\n(() => {\nif (!('SVGPathSeg' in window)) {\n // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSeg\n class SVGPathSeg {\n constructor (type, typeAsLetter, owningPathSegList) {\n this.pathSegType = type;\n this.pathSegTypeAsLetter = typeAsLetter;\n this._owningPathSegList = owningPathSegList;\n }\n // Notify owning PathSegList on any changes so they can be synchronized back to the path element.\n _segmentChanged () {\n if (this._owningPathSegList) {\n this._owningPathSegList.segmentChanged(this);\n }\n }\n }\n SVGPathSeg.prototype.classname = 'SVGPathSeg';\n\n SVGPathSeg.PATHSEG_UNKNOWN = 0;\n SVGPathSeg.PATHSEG_CLOSEPATH = 1;\n SVGPathSeg.PATHSEG_MOVETO_ABS = 2;\n SVGPathSeg.PATHSEG_MOVETO_REL = 3;\n SVGPathSeg.PATHSEG_LINETO_ABS = 4;\n SVGPathSeg.PATHSEG_LINETO_REL = 5;\n SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS = 6;\n SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL = 7;\n SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS = 8;\n SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL = 9;\n SVGPathSeg.PATHSEG_ARC_ABS = 10;\n SVGPathSeg.PATHSEG_ARC_REL = 11;\n SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS = 12;\n SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL = 13;\n SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS = 14;\n SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL = 15;\n SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16;\n SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17;\n SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18;\n SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19;\n\n class SVGPathSegClosePath extends SVGPathSeg {\n constructor (owningPathSegList) {\n super(SVGPathSeg.PATHSEG_CLOSEPATH, 'z', owningPathSegList);\n }\n toString () { return '[object SVGPathSegClosePath]'; }\n _asPathString () { return this.pathSegTypeAsLetter; }\n clone () { return new SVGPathSegClosePath(undefined); }\n }\n\n class SVGPathSegMovetoAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y) {\n super(SVGPathSeg.PATHSEG_MOVETO_ABS, 'M', owningPathSegList);\n this._x = x;\n this._y = y;\n }\n toString () { return '[object SVGPathSegMovetoAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegMovetoAbs(undefined, this._x, this._y); }\n }\n Object.defineProperties(SVGPathSegMovetoAbs.prototype, {\n x: {\n get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true\n },\n y: {\n get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true\n }\n });\n\n class SVGPathSegMovetoRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y) {\n super(SVGPathSeg.PATHSEG_MOVETO_REL, 'm', owningPathSegList);\n this._x = x;\n this._y = y;\n }\n toString () { return '[object SVGPathSegMovetoRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegMovetoRel(undefined, this._x, this._y); }\n }\n Object.defineProperties(SVGPathSegMovetoRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegLinetoAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y) {\n super(SVGPathSeg.PATHSEG_LINETO_ABS, 'L', owningPathSegList);\n this._x = x;\n this._y = y;\n }\n toString () { return '[object SVGPathSegLinetoAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegLinetoAbs(undefined, this._x, this._y); }\n }\n Object.defineProperties(SVGPathSegLinetoAbs.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegLinetoRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y) {\n super(SVGPathSeg.PATHSEG_LINETO_REL, 'l', owningPathSegList);\n this._x = x;\n this._y = y;\n }\n toString () { return '[object SVGPathSegLinetoRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegLinetoRel(undefined, this._x, this._y); }\n }\n Object.defineProperties(SVGPathSegLinetoRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoCubicAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y, x1, y1, x2, y2) {\n super(SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS, 'C', owningPathSegList);\n this._x = x;\n this._y = y;\n this._x1 = x1;\n this._y1 = y1;\n this._x2 = x2;\n this._y2 = y2;\n }\n toString () { return '[object SVGPathSegCurvetoCubicAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoCubicAbs(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2); }\n }\n Object.defineProperties(SVGPathSegCurvetoCubicAbs.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n x1: {get () { return this._x1; }, set (x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true},\n y1: {get () { return this._y1; }, set (y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true},\n x2: {get () { return this._x2; }, set (x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true},\n y2: {get () { return this._y2; }, set (y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoCubicRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y, x1, y1, x2, y2) {\n super(SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL, 'c', owningPathSegList);\n this._x = x;\n this._y = y;\n this._x1 = x1;\n this._y1 = y1;\n this._x2 = x2;\n this._y2 = y2;\n }\n toString () { return '[object SVGPathSegCurvetoCubicRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoCubicRel(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2); }\n }\n Object.defineProperties(SVGPathSegCurvetoCubicRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n x1: {get () { return this._x1; }, set (x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true},\n y1: {get () { return this._y1; }, set (y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true},\n x2: {get () { return this._x2; }, set (x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true},\n y2: {get () { return this._y2; }, set (y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoQuadraticAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y, x1, y1) {\n super(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS, 'Q', owningPathSegList);\n this._x = x;\n this._y = y;\n this._x1 = x1;\n this._y1 = y1;\n }\n toString () { return '[object SVGPathSegCurvetoQuadraticAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoQuadraticAbs(undefined, this._x, this._y, this._x1, this._y1); }\n }\n Object.defineProperties(SVGPathSegCurvetoQuadraticAbs.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n x1: {get () { return this._x1; }, set (x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true},\n y1: {get () { return this._y1; }, set (y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoQuadraticRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y, x1, y1) {\n super(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL, 'q', owningPathSegList);\n this._x = x;\n this._y = y;\n this._x1 = x1;\n this._y1 = y1;\n }\n toString () { return '[object SVGPathSegCurvetoQuadraticRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x1 + ' ' + this._y1 + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoQuadraticRel(undefined, this._x, this._y, this._x1, this._y1); }\n }\n Object.defineProperties(SVGPathSegCurvetoQuadraticRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n x1: {get () { return this._x1; }, set (x1) { this._x1 = x1; this._segmentChanged(); }, enumerable: true},\n y1: {get () { return this._y1; }, set (y1) { this._y1 = y1; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegArcAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\n super(SVGPathSeg.PATHSEG_ARC_ABS, 'A', owningPathSegList);\n this._x = x;\n this._y = y;\n this._r1 = r1;\n this._r2 = r2;\n this._angle = angle;\n this._largeArcFlag = largeArcFlag;\n this._sweepFlag = sweepFlag;\n }\n toString () { return '[object SVGPathSegArcAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._r1 + ' ' + this._r2 + ' ' + this._angle + ' ' + (this._largeArcFlag ? '1' : '0') + ' ' + (this._sweepFlag ? '1' : '0') + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegArcAbs(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag); }\n }\n Object.defineProperties(SVGPathSegArcAbs.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n r1: {get () { return this._r1; }, set (r1) { this._r1 = r1; this._segmentChanged(); }, enumerable: true},\n r2: {get () { return this._r2; }, set (r2) { this._r2 = r2; this._segmentChanged(); }, enumerable: true},\n angle: {get () { return this._angle; }, set (angle) { this._angle = angle; this._segmentChanged(); }, enumerable: true},\n largeArcFlag: {get () { return this._largeArcFlag; }, set (largeArcFlag) { this._largeArcFlag = largeArcFlag; this._segmentChanged(); }, enumerable: true},\n sweepFlag: {get () { return this._sweepFlag; }, set (sweepFlag) { this._sweepFlag = sweepFlag; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegArcRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\n super(SVGPathSeg.PATHSEG_ARC_REL, 'a', owningPathSegList);\n this._x = x;\n this._y = y;\n this._r1 = r1;\n this._r2 = r2;\n this._angle = angle;\n this._largeArcFlag = largeArcFlag;\n this._sweepFlag = sweepFlag;\n }\n toString () { return '[object SVGPathSegArcRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._r1 + ' ' + this._r2 + ' ' + this._angle + ' ' + (this._largeArcFlag ? '1' : '0') + ' ' + (this._sweepFlag ? '1' : '0') + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegArcRel(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag); }\n }\n Object.defineProperties(SVGPathSegArcRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n r1: {get () { return this._r1; }, set (r1) { this._r1 = r1; this._segmentChanged(); }, enumerable: true},\n r2: {get () { return this._r2; }, set (r2) { this._r2 = r2; this._segmentChanged(); }, enumerable: true},\n angle: {get () { return this._angle; }, set (angle) { this._angle = angle; this._segmentChanged(); }, enumerable: true},\n largeArcFlag: {get () { return this._largeArcFlag; }, set (largeArcFlag) { this._largeArcFlag = largeArcFlag; this._segmentChanged(); }, enumerable: true},\n sweepFlag: {get () { return this._sweepFlag; }, set (sweepFlag) { this._sweepFlag = sweepFlag; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegLinetoHorizontalAbs extends SVGPathSeg {\n constructor (owningPathSegList, x) {\n super(SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS, 'H', owningPathSegList);\n this._x = x;\n }\n toString () { return '[object SVGPathSegLinetoHorizontalAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x; }\n clone () { return new SVGPathSegLinetoHorizontalAbs(undefined, this._x); }\n }\n Object.defineProperty(SVGPathSegLinetoHorizontalAbs.prototype, 'x', {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true});\n\n class SVGPathSegLinetoHorizontalRel extends SVGPathSeg {\n constructor (owningPathSegList, x) {\n super(SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL, 'h', owningPathSegList);\n this._x = x;\n }\n toString () { return '[object SVGPathSegLinetoHorizontalRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x; }\n clone () { return new SVGPathSegLinetoHorizontalRel(undefined, this._x); }\n }\n Object.defineProperty(SVGPathSegLinetoHorizontalRel.prototype, 'x', {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true});\n\n class SVGPathSegLinetoVerticalAbs extends SVGPathSeg {\n constructor (owningPathSegList, y) {\n super(SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS, 'V', owningPathSegList);\n this._y = y;\n }\n toString () { return '[object SVGPathSegLinetoVerticalAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._y; }\n clone () { return new SVGPathSegLinetoVerticalAbs(undefined, this._y); }\n }\n Object.defineProperty(SVGPathSegLinetoVerticalAbs.prototype, 'y', {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true});\n\n class SVGPathSegLinetoVerticalRel extends SVGPathSeg {\n constructor (owningPathSegList, y) {\n super(SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL, 'v', owningPathSegList);\n this._y = y;\n }\n toString () { return '[object SVGPathSegLinetoVerticalRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._y; }\n clone () { return new SVGPathSegLinetoVerticalRel(undefined, this._y); }\n }\n Object.defineProperty(SVGPathSegLinetoVerticalRel.prototype, 'y', {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true});\n\n class SVGPathSegCurvetoCubicSmoothAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y, x2, y2) {\n super(SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS, 'S', owningPathSegList);\n this._x = x;\n this._y = y;\n this._x2 = x2;\n this._y2 = y2;\n }\n toString () { return '[object SVGPathSegCurvetoCubicSmoothAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoCubicSmoothAbs(undefined, this._x, this._y, this._x2, this._y2); }\n }\n Object.defineProperties(SVGPathSegCurvetoCubicSmoothAbs.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n x2: {get () { return this._x2; }, set (x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true},\n y2: {get () { return this._y2; }, set (y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoCubicSmoothRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y, x2, y2) {\n super(SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL, 's', owningPathSegList);\n this._x = x;\n this._y = y;\n this._x2 = x2;\n this._y2 = y2;\n }\n toString () { return '[object SVGPathSegCurvetoCubicSmoothRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x2 + ' ' + this._y2 + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoCubicSmoothRel(undefined, this._x, this._y, this._x2, this._y2); }\n }\n Object.defineProperties(SVGPathSegCurvetoCubicSmoothRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true},\n x2: {get () { return this._x2; }, set (x2) { this._x2 = x2; this._segmentChanged(); }, enumerable: true},\n y2: {get () { return this._y2; }, set (y2) { this._y2 = y2; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoQuadraticSmoothAbs extends SVGPathSeg {\n constructor (owningPathSegList, x, y) {\n super(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS, 'T', owningPathSegList);\n this._x = x;\n this._y = y;\n }\n toString () { return '[object SVGPathSegCurvetoQuadraticSmoothAbs]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoQuadraticSmoothAbs(undefined, this._x, this._y); }\n }\n Object.defineProperties(SVGPathSegCurvetoQuadraticSmoothAbs.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true}\n });\n\n class SVGPathSegCurvetoQuadraticSmoothRel extends SVGPathSeg {\n constructor (owningPathSegList, x, y) {\n super(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL, 't', owningPathSegList);\n this._x = x;\n this._y = y;\n }\n toString () { return '[object SVGPathSegCurvetoQuadraticSmoothRel]'; }\n _asPathString () { return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y; }\n clone () { return new SVGPathSegCurvetoQuadraticSmoothRel(undefined, this._x, this._y); }\n }\n Object.defineProperties(SVGPathSegCurvetoQuadraticSmoothRel.prototype, {\n x: {get () { return this._x; }, set (x) { this._x = x; this._segmentChanged(); }, enumerable: true},\n y: {get () { return this._y; }, set (y) { this._y = y; this._segmentChanged(); }, enumerable: true}\n });\n\n // Add createSVGPathSeg* functions to SVGPathElement.\n // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathElement.\n SVGPathElement.prototype.createSVGPathSegClosePath = function () { return new SVGPathSegClosePath(undefined); };\n SVGPathElement.prototype.createSVGPathSegMovetoAbs = function (x, y) { return new SVGPathSegMovetoAbs(undefined, x, y); };\n SVGPathElement.prototype.createSVGPathSegMovetoRel = function (x, y) { return new SVGPathSegMovetoRel(undefined, x, y); };\n SVGPathElement.prototype.createSVGPathSegLinetoAbs = function (x, y) { return new SVGPathSegLinetoAbs(undefined, x, y); };\n SVGPathElement.prototype.createSVGPathSegLinetoRel = function (x, y) { return new SVGPathSegLinetoRel(undefined, x, y); };\n SVGPathElement.prototype.createSVGPathSegCurvetoCubicAbs = function (x, y, x1, y1, x2, y2) { return new SVGPathSegCurvetoCubicAbs(undefined, x, y, x1, y1, x2, y2); };\n SVGPathElement.prototype.createSVGPathSegCurvetoCubicRel = function (x, y, x1, y1, x2, y2) { return new SVGPathSegCurvetoCubicRel(undefined, x, y, x1, y1, x2, y2); };\n SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticAbs = function (x, y, x1, y1) { return new SVGPathSegCurvetoQuadraticAbs(undefined, x, y, x1, y1); };\n SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticRel = function (x, y, x1, y1) { return new SVGPathSegCurvetoQuadraticRel(undefined, x, y, x1, y1); };\n SVGPathElement.prototype.createSVGPathSegArcAbs = function (x, y, r1, r2, angle, largeArcFlag, sweepFlag) { return new SVGPathSegArcAbs(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag); };\n SVGPathElement.prototype.createSVGPathSegArcRel = function (x, y, r1, r2, angle, largeArcFlag, sweepFlag) { return new SVGPathSegArcRel(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag); };\n SVGPathElement.prototype.createSVGPathSegLinetoHorizontalAbs = function (x) { return new SVGPathSegLinetoHorizontalAbs(undefined, x); };\n SVGPathElement.prototype.createSVGPathSegLinetoHorizontalRel = function (x) { return new SVGPathSegLinetoHorizontalRel(undefined, x); };\n SVGPathElement.prototype.createSVGPathSegLinetoVerticalAbs = function (y) { return new SVGPathSegLinetoVerticalAbs(undefined, y); };\n SVGPathElement.prototype.createSVGPathSegLinetoVerticalRel = function (y) { return new SVGPathSegLinetoVerticalRel(undefined, y); };\n SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothAbs = function (x, y, x2, y2) { return new SVGPathSegCurvetoCubicSmoothAbs(undefined, x, y, x2, y2); };\n SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothRel = function (x, y, x2, y2) { return new SVGPathSegCurvetoCubicSmoothRel(undefined, x, y, x2, y2); };\n SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothAbs = function (x, y) { return new SVGPathSegCurvetoQuadraticSmoothAbs(undefined, x, y); };\n SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothRel = function (x, y) { return new SVGPathSegCurvetoQuadraticSmoothRel(undefined, x, y); };\n\n if (!('getPathSegAtLength' in SVGPathElement.prototype)) {\n // Add getPathSegAtLength to SVGPathElement.\n // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-__svg__SVGPathElement__getPathSegAtLength\n // This polyfill requires SVGPathElement.getTotalLength to implement the distance-along-a-path algorithm.\n SVGPathElement.prototype.getPathSegAtLength = function (distance) {\n if (distance === undefined || !isFinite(distance)) {\n throw new Error('Invalid arguments.');\n }\n\n const measurementElement = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n measurementElement.setAttribute('d', this.getAttribute('d'));\n let lastPathSegment = measurementElement.pathSegList.numberOfItems - 1;\n\n // If the path is empty, return 0.\n if (lastPathSegment <= 0) {\n return 0;\n }\n\n do {\n measurementElement.pathSegList.removeItem(lastPathSegment);\n if (distance > measurementElement.getTotalLength()) {\n break;\n }\n lastPathSegment--;\n } while (lastPathSegment > 0);\n return lastPathSegment;\n };\n }\n\n window.SVGPathSeg = SVGPathSeg;\n window.SVGPathSegClosePath = SVGPathSegClosePath;\n window.SVGPathSegMovetoAbs = SVGPathSegMovetoAbs;\n window.SVGPathSegMovetoRel = SVGPathSegMovetoRel;\n window.SVGPathSegLinetoAbs = SVGPathSegLinetoAbs;\n window.SVGPathSegLinetoRel = SVGPathSegLinetoRel;\n window.SVGPathSegCurvetoCubicAbs = SVGPathSegCurvetoCubicAbs;\n window.SVGPathSegCurvetoCubicRel = SVGPathSegCurvetoCubicRel;\n window.SVGPathSegCurvetoQuadraticAbs = SVGPathSegCurvetoQuadraticAbs;\n window.SVGPathSegCurvetoQuadraticRel = SVGPathSegCurvetoQuadraticRel;\n window.SVGPathSegArcAbs = SVGPathSegArcAbs;\n window.SVGPathSegArcRel = SVGPathSegArcRel;\n window.SVGPathSegLinetoHorizontalAbs = SVGPathSegLinetoHorizontalAbs;\n window.SVGPathSegLinetoHorizontalRel = SVGPathSegLinetoHorizontalRel;\n window.SVGPathSegLinetoVerticalAbs = SVGPathSegLinetoVerticalAbs;\n window.SVGPathSegLinetoVerticalRel = SVGPathSegLinetoVerticalRel;\n window.SVGPathSegCurvetoCubicSmoothAbs = SVGPathSegCurvetoCubicSmoothAbs;\n window.SVGPathSegCurvetoCubicSmoothRel = SVGPathSegCurvetoCubicSmoothRel;\n window.SVGPathSegCurvetoQuadraticSmoothAbs = SVGPathSegCurvetoQuadraticSmoothAbs;\n window.SVGPathSegCurvetoQuadraticSmoothRel = SVGPathSegCurvetoQuadraticSmoothRel;\n}\n\n// Checking for SVGPathSegList in window checks for the case of an implementation without the\n// SVGPathSegList API.\n// The second check for appendItem is specific to Firefox 59+ which removed only parts of the\n// SVGPathSegList API (e.g., appendItem). In this case we need to re-implement the entire API\n// so the polyfill data (i.e., _list) is used throughout.\nif (!('SVGPathSegList' in window) || !('appendItem' in window.SVGPathSegList.prototype)) {\n // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSegList\n class SVGPathSegList {\n constructor (pathElement) {\n this._pathElement = pathElement;\n this._list = this._parsePath(this._pathElement.getAttribute('d'));\n\n // Use a MutationObserver to catch changes to the path's \"d\" attribute.\n this._mutationObserverConfig = {attributes: true, attributeFilter: ['d']};\n this._pathElementMutationObserver = new MutationObserver(this._updateListFromPathMutations.bind(this));\n this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);\n }\n // Process any pending mutations to the path element and update the list as needed.\n // This should be the first call of all public functions and is needed because\n // MutationObservers are not synchronous so we can have pending asynchronous mutations.\n _checkPathSynchronizedToList () {\n this._updateListFromPathMutations(this._pathElementMutationObserver.takeRecords());\n }\n\n _updateListFromPathMutations (mutationRecords) {\n if (!this._pathElement) {\n return;\n }\n let hasPathMutations = false;\n mutationRecords.forEach((record) => {\n if (record.attributeName === 'd') {\n hasPathMutations = true;\n }\n });\n if (hasPathMutations) {\n this._list = this._parsePath(this._pathElement.getAttribute('d'));\n }\n }\n\n // Serialize the list and update the path's 'd' attribute.\n _writeListToPath () {\n this._pathElementMutationObserver.disconnect();\n this._pathElement.setAttribute('d', SVGPathSegList._pathSegArrayAsString(this._list));\n this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);\n }\n\n // When a path segment changes the list needs to be synchronized back to the path element.\n segmentChanged (pathSeg) {\n this._writeListToPath();\n }\n\n clear () {\n this._checkPathSynchronizedToList();\n\n this._list.forEach((pathSeg) => {\n pathSeg._owningPathSegList = null;\n });\n this._list = [];\n this._writeListToPath();\n }\n\n initialize (newItem) {\n this._checkPathSynchronizedToList();\n\n this._list = [newItem];\n newItem._owningPathSegList = this;\n this._writeListToPath();\n return newItem;\n }\n\n _checkValidIndex (index) {\n if (isNaN(index) || index < 0 || index >= this.numberOfItems) {\n throw new Error('INDEX_SIZE_ERR');\n }\n }\n\n getItem (index) {\n this._checkPathSynchronizedToList();\n\n this._checkValidIndex(index);\n return this._list[index];\n }\n\n insertItemBefore (newItem, index) {\n this._checkPathSynchronizedToList();\n\n // Spec: If the index is greater than or equal to numberOfItems, then the new item is appended to the end of the list.\n if (index > this.numberOfItems) {\n index = this.numberOfItems;\n }\n if (newItem._owningPathSegList) {\n // SVG2 spec says to make a copy.\n newItem = newItem.clone();\n }\n this._list.splice(index, 0, newItem);\n newItem._owningPathSegList = this;\n this._writeListToPath();\n return newItem;\n }\n\n replaceItem (newItem, index) {\n this._checkPathSynchronizedToList();\n\n if (newItem._owningPathSegList) {\n // SVG2 spec says to make a copy.\n newItem = newItem.clone();\n }\n this._checkValidIndex(index);\n this._list[index] = newItem;\n newItem._owningPathSegList = this;\n this._writeListToPath();\n return newItem;\n }\n\n removeItem (index) {\n this._checkPathSynchronizedToList();\n\n this._checkValidIndex(index);\n const item = this._list[index];\n this._list.splice(index, 1);\n this._writeListToPath();\n return item;\n }\n\n appendItem (newItem) {\n this._checkPathSynchronizedToList();\n\n if (newItem._owningPathSegList) {\n // SVG2 spec says to make a copy.\n newItem = newItem.clone();\n }\n this._list.push(newItem);\n newItem._owningPathSegList = this;\n // TODO: Optimize this to just append to the existing attribute.\n this._writeListToPath();\n return newItem;\n }\n\n // This closely follows SVGPathParser::parsePath from Source/core/svg/SVGPathParser.cpp.\n _parsePath (string) {\n if (!string || !string.length) {\n return [];\n }\n\n const owningPathSegList = this;\n\n class Builder {\n constructor () {\n this.pathSegList = [];\n }\n appendSegment (pathSeg) {\n this.pathSegList.push(pathSeg);\n }\n }\n\n class Source {\n constructor (string) {\n this._string = string;\n this._currentIndex = 0;\n this._endIndex = this._string.length;\n this._previousCommand = SVGPathSeg.PATHSEG_UNKNOWN;\n\n this._skipOptionalSpaces();\n }\n _isCurrentSpace () {\n const character = this._string[this._currentIndex];\n return character <= ' ' && (character === ' ' || character === '\\n' || character === '\\t' || character === '\\r' || character === '\\f');\n }\n\n _skipOptionalSpaces () {\n while (this._currentIndex < this._endIndex && this._isCurrentSpace()) {\n this._currentIndex++;\n }\n return this._currentIndex < this._endIndex;\n }\n\n _skipOptionalSpacesOrDelimiter () {\n if (this._currentIndex < this._endIndex && !this._isCurrentSpace() && this._string.charAt(this._currentIndex) !== ',') {\n return false;\n }\n if (this._skipOptionalSpaces()) {\n if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) === ',') {\n this._currentIndex++;\n this._skipOptionalSpaces();\n }\n }\n return this._currentIndex < this._endIndex;\n }\n\n hasMoreData () {\n return this._currentIndex < this._endIndex;\n }\n\n peekSegmentType () {\n const lookahead = this._string[this._currentIndex];\n return this._pathSegTypeFromChar(lookahead);\n }\n\n _pathSegTypeFromChar (lookahead) {\n switch (lookahead) {\n case 'Z':\n case 'z':\n return SVGPathSeg.PATHSEG_CLOSEPATH;\n case 'M':\n return SVGPathSeg.PATHSEG_MOVETO_ABS;\n case 'm':\n return SVGPathSeg.PATHSEG_MOVETO_REL;\n case 'L':\n return SVGPathSeg.PATHSEG_LINETO_ABS;\n case 'l':\n return SVGPathSeg.PATHSEG_LINETO_REL;\n case 'C':\n return SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS;\n case 'c':\n return SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL;\n case 'Q':\n return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS;\n case 'q':\n return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL;\n case 'A':\n return SVGPathSeg.PATHSEG_ARC_ABS;\n case 'a':\n return SVGPathSeg.PATHSEG_ARC_REL;\n case 'H':\n return SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS;\n case 'h':\n return SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL;\n case 'V':\n return SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS;\n case 'v':\n return SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL;\n case 'S':\n return SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS;\n case 's':\n return SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL;\n case 'T':\n return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS;\n case 't':\n return SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL;\n default:\n return SVGPathSeg.PATHSEG_UNKNOWN;\n }\n }\n\n _nextCommandHelper (lookahead, previousCommand) {\n // Check for remaining coordinates in the current command.\n if ((lookahead === '+' || lookahead === '-' || lookahead === '.' || (lookahead >= '0' && lookahead <= '9')) && previousCommand !== SVGPathSeg.PATHSEG_CLOSEPATH) {\n if (previousCommand === SVGPathSeg.PATHSEG_MOVETO_ABS) {\n return SVGPathSeg.PATHSEG_LINETO_ABS;\n }\n if (previousCommand === SVGPathSeg.PATHSEG_MOVETO_REL) {\n return SVGPathSeg.PATHSEG_LINETO_REL;\n }\n return previousCommand;\n }\n return SVGPathSeg.PATHSEG_UNKNOWN;\n }\n\n initialCommandIsMoveTo () {\n // If the path is empty it is still valid, so return true.\n if (!this.hasMoreData()) {\n return true;\n }\n const command = this.peekSegmentType();\n // Path must start with moveTo.\n return command === SVGPathSeg.PATHSEG_MOVETO_ABS || command === SVGPathSeg.PATHSEG_MOVETO_REL;\n }\n\n // Parse a number from an SVG path. This very closely follows genericParseNumber(...) from Source/core/svg/SVGParserUtilities.cpp.\n // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-PathDataBNF\n _parseNumber () {\n let exponent = 0;\n let integer = 0;\n let frac = 1;\n let decimal = 0;\n let sign = 1;\n let expsign = 1;\n\n const startIndex = this._currentIndex;\n\n this._skipOptionalSpaces();\n\n // Read the sign.\n if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) === '+') {\n this._currentIndex++;\n } else if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) === '-') {\n this._currentIndex++;\n sign = -1;\n }\n\n if (this._currentIndex === this._endIndex || ((this._string.charAt(this._currentIndex) < '0' || this._string.charAt(this._currentIndex) > '9') && this._string.charAt(this._currentIndex) !== '.')) {\n // The first character of a number must be one of [0-9+-.].\n return undefined;\n }\n\n // Read the integer part, build right-to-left.\n const startIntPartIndex = this._currentIndex;\n while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= '0' && this._string.charAt(this._currentIndex) <= '9') {\n this._currentIndex++; // Advance to first non-digit.\n }\n\n if (this._currentIndex !== startIntPartIndex) {\n let scanIntPartIndex = this._currentIndex - 1;\n let multiplier = 1;\n while (scanIntPartIndex >= startIntPartIndex) {\n integer += multiplier * (this._string.charAt(scanIntPartIndex--) - '0');\n multiplier *= 10;\n }\n }\n\n // Read the decimals.\n if (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) === '.') {\n this._currentIndex++;\n\n // There must be a least one digit following the .\n if (this._currentIndex >= this._endIndex || this._string.charAt(this._currentIndex) < '0' || this._string.charAt(this._currentIndex) > '9') {\n return undefined;\n }\n while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= '0' && this._string.charAt(this._currentIndex) <= '9') {\n frac *= 10;\n decimal += (this._string.charAt(this._currentIndex) - '0') / frac;\n this._currentIndex += 1;\n }\n }\n\n // Read the exponent part.\n if (this._currentIndex !== startIndex && this._currentIndex + 1 < this._endIndex && (this._string.charAt(this._currentIndex) === 'e' || this._string.charAt(this._currentIndex) === 'E') && (this._string.charAt(this._currentIndex + 1) !== 'x' && this._string.charAt(this._currentIndex + 1) !== 'm')) {\n this._currentIndex++;\n\n // Read the sign of the exponent.\n if (this._string.charAt(this._currentIndex) === '+') {\n this._currentIndex++;\n } else if (this._string.charAt(this._currentIndex) === '-') {\n this._currentIndex++;\n expsign = -1;\n }\n\n // There must be an exponent.\n if (this._currentIndex >= this._endIndex || this._string.charAt(this._currentIndex) < '0' || this._string.charAt(this._currentIndex) > '9') {\n return undefined;\n }\n\n while (this._currentIndex < this._endIndex && this._string.charAt(this._currentIndex) >= '0' && this._string.charAt(this._currentIndex) <= '9') {\n exponent *= 10;\n exponent += (this._string.charAt(this._currentIndex) - '0');\n this._currentIndex++;\n }\n }\n\n let number = integer + decimal;\n number *= sign;\n\n if (exponent) {\n number *= 10 ** (expsign * exponent);\n }\n\n if (startIndex === this._currentIndex) {\n return undefined;\n }\n\n this._skipOptionalSpacesOrDelimiter();\n\n return number;\n }\n\n _parseArcFlag () {\n if (this._currentIndex >= this._endIndex) {\n return undefined;\n }\n let flag = false;\n const flagChar = this._string.charAt(this._currentIndex++);\n if (flagChar === '0') {\n flag = false;\n } else if (flagChar === '1') {\n flag = true;\n } else {\n return undefined;\n }\n\n this._skipOptionalSpacesOrDelimiter();\n return flag;\n }\n\n parseSegment () {\n const lookahead = this._string[this._currentIndex];\n let command = this._pathSegTypeFromChar(lookahead);\n if (command === SVGPathSeg.PATHSEG_UNKNOWN) {\n // Possibly an implicit command. Not allowed if this is the first command.\n if (this._previousCommand === SVGPathSeg.PATHSEG_UNKNOWN) {\n return null;\n }\n command = this._nextCommandHelper(lookahead, this._previousCommand);\n if (command === SVGPathSeg.PATHSEG_UNKNOWN) {\n return null;\n }\n } else {\n this._currentIndex++;\n }\n\n this._previousCommand = command;\n\n switch (command) {\n case SVGPathSeg.PATHSEG_MOVETO_REL:\n return new SVGPathSegMovetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());\n case SVGPathSeg.PATHSEG_MOVETO_ABS:\n return new SVGPathSegMovetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\n case SVGPathSeg.PATHSEG_LINETO_REL:\n return new SVGPathSegLinetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());\n case SVGPathSeg.PATHSEG_LINETO_ABS:\n return new SVGPathSegLinetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\n case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:\n return new SVGPathSegLinetoHorizontalRel(owningPathSegList, this._parseNumber());\n case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:\n return new SVGPathSegLinetoHorizontalAbs(owningPathSegList, this._parseNumber());\n case SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL:\n return new SVGPathSegLinetoVerticalRel(owningPathSegList, this._parseNumber());\n case SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS:\n return new SVGPathSegLinetoVerticalAbs(owningPathSegList, this._parseNumber());\n case SVGPathSeg.PATHSEG_CLOSEPATH:\n this._skipOptionalSpaces();\n return new SVGPathSegClosePath(owningPathSegList);\n case SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL: {\n const points = {x1: this._parseNumber(), y1: this._parseNumber(), x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegCurvetoCubicRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);\n } case SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS: {\n const points = {x1: this._parseNumber(), y1: this._parseNumber(), x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegCurvetoCubicAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);\n } case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL: {\n const points = {x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegCurvetoCubicSmoothRel(owningPathSegList, points.x, points.y, points.x2, points.y2);\n } case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: {\n const points = {x2: this._parseNumber(), y2: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegCurvetoCubicSmoothAbs(owningPathSegList, points.x, points.y, points.x2, points.y2);\n } case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL: {\n const points = {x1: this._parseNumber(), y1: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegCurvetoQuadraticRel(owningPathSegList, points.x, points.y, points.x1, points.y1);\n } case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS: {\n const points = {x1: this._parseNumber(), y1: this._parseNumber(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegCurvetoQuadraticAbs(owningPathSegList, points.x, points.y, points.x1, points.y1);\n } case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:\n return new SVGPathSegCurvetoQuadraticSmoothRel(owningPathSegList, this._parseNumber(), this._parseNumber());\n case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:\n return new SVGPathSegCurvetoQuadraticSmoothAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\n case SVGPathSeg.PATHSEG_ARC_REL: {\n const points = {x1: this._parseNumber(), y1: this._parseNumber(), arcAngle: this._parseNumber(), arcLarge: this._parseArcFlag(), arcSweep: this._parseArcFlag(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegArcRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);\n } case SVGPathSeg.PATHSEG_ARC_ABS: {\n const points = {x1: this._parseNumber(), y1: this._parseNumber(), arcAngle: this._parseNumber(), arcLarge: this._parseArcFlag(), arcSweep: this._parseArcFlag(), x: this._parseNumber(), y: this._parseNumber()};\n return new SVGPathSegArcAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);\n } default:\n throw new Error('Unknown path seg type.');\n }\n }\n }\n\n const builder = new Builder();\n const source = new Source(string);\n\n if (!source.initialCommandIsMoveTo()) {\n return [];\n }\n while (source.hasMoreData()) {\n const pathSeg = source.parseSegment();\n if (!pathSeg) {\n return [];\n }\n builder.appendSegment(pathSeg);\n }\n\n return builder.pathSegList;\n }\n\n // STATIC\n static _pathSegArrayAsString (pathSegArray) {\n let string = '';\n let first = true;\n pathSegArray.forEach((pathSeg) => {\n if (first) {\n first = false;\n string += pathSeg._asPathString();\n } else {\n string += ' ' + pathSeg._asPathString();\n }\n });\n return string;\n }\n }\n\n SVGPathSegList.prototype.classname = 'SVGPathSegList';\n\n Object.defineProperty(SVGPathSegList.prototype, 'numberOfItems', {\n get () {\n this._checkPathSynchronizedToList();\n return this._list.length;\n },\n enumerable: true\n });\n\n // Add the pathSegList accessors to SVGPathElement.\n // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGAnimatedPathData\n Object.defineProperties(SVGPathElement.prototype, {\n pathSegList: {\n get () {\n if (!this._pathSegList) {\n this._pathSegList = new SVGPathSegList(this);\n }\n return this._pathSegList;\n },\n enumerable: true\n },\n // TODO: The following are not implemented and simply return SVGPathElement.pathSegList.\n normalizedPathSegList: {get () { return this.pathSegList; }, enumerable: true},\n animatedPathSegList: {get () { return this.pathSegList; }, enumerable: true},\n animatedNormalizedPathSegList: {get () { return this.pathSegList; }, enumerable: true}\n });\n window.SVGPathSegList = SVGPathSegList;\n}\n})();\n","/**\n * @file ext-closepath.js\n *\n * @license MIT\n *\n * @copyright 2010 Jeff Schiller\n *\n */\nimport '../../../common/svgpathseg.js';\n\n// This extension adds a simple button to the contextual panel for paths\n// The button toggles whether the path is open or closed\nexport default {\n name: 'closepath',\n async init ({importLocale, $}) {\n const strings = await importLocale();\n let selElems;\n const updateButton = function (path) {\n const seglist = path.pathSegList,\n closed = seglist.getItem(seglist.numberOfItems - 1).pathSegType === 1,\n showbutton = closed ? '#tool_openpath' : '#tool_closepath',\n hidebutton = closed ? '#tool_closepath' : '#tool_openpath';\n $(hidebutton).hide();\n $(showbutton).show();\n };\n const showPanel = function (on) {\n $('#closepath_panel').toggle(on);\n if (on) {\n const path = selElems[0];\n if (path) { updateButton(path); }\n }\n };\n const toggleClosed = function () {\n const path = selElems[0];\n if (path) {\n const seglist = path.pathSegList,\n last = seglist.numberOfItems - 1;\n // is closed\n if (seglist.getItem(last).pathSegType === 1) {\n seglist.removeItem(last);\n } else {\n seglist.appendItem(path.createSVGPathSegClosePath());\n }\n updateButton(path);\n }\n };\n\n const buttons = [\n {\n id: 'tool_openpath',\n icon: 'openpath.png',\n type: 'context',\n panel: 'closepath_panel',\n events: {\n click () {\n toggleClosed();\n }\n }\n },\n {\n id: 'tool_closepath',\n icon: 'closepath.png',\n type: 'context',\n panel: 'closepath_panel',\n events: {\n click () {\n toggleClosed();\n }\n }\n }\n ];\n\n return {\n name: strings.name,\n svgicons: 'closepath_icons.svg',\n buttons: strings.buttons.map((button, i) => {\n return Object.assign(buttons[i], button);\n }),\n callback () {\n $('#closepath_panel').hide();\n },\n selectedChanged (opts) {\n selElems = opts.elems;\n let i = selElems.length;\n while (i--) {\n const elem = selElems[i];\n if (elem && elem.tagName === 'path') {\n if (opts.selectedElement && !opts.multiselected) {\n showPanel(true);\n } else {\n showPanel(false);\n }\n } else {\n showPanel(false);\n }\n }\n }\n };\n }\n};\n"],"names":["window","SVGPathSeg","type","typeAsLetter","owningPathSegList","pathSegType","pathSegTypeAsLetter","_owningPathSegList","this","segmentChanged","prototype","classname","PATHSEG_UNKNOWN","PATHSEG_CLOSEPATH","PATHSEG_MOVETO_ABS","PATHSEG_MOVETO_REL","PATHSEG_LINETO_ABS","PATHSEG_LINETO_REL","PATHSEG_CURVETO_CUBIC_ABS","PATHSEG_CURVETO_CUBIC_REL","PATHSEG_CURVETO_QUADRATIC_ABS","PATHSEG_CURVETO_QUADRATIC_REL","PATHSEG_ARC_ABS","PATHSEG_ARC_REL","PATHSEG_LINETO_HORIZONTAL_ABS","PATHSEG_LINETO_HORIZONTAL_REL","PATHSEG_LINETO_VERTICAL_ABS","PATHSEG_LINETO_VERTICAL_REL","PATHSEG_CURVETO_CUBIC_SMOOTH_ABS","PATHSEG_CURVETO_CUBIC_SMOOTH_REL","PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS","PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL","SVGPathSegClosePath","undefined","SVGPathSegMovetoAbs","x","y","_x","_y","Object","defineProperties","get","set","_segmentChanged","enumerable","SVGPathSegMovetoRel","SVGPathSegLinetoAbs","SVGPathSegLinetoRel","SVGPathSegCurvetoCubicAbs","x1","y1","x2","y2","_x1","_y1","_x2","_y2","SVGPathSegCurvetoCubicRel","SVGPathSegCurvetoQuadraticAbs","SVGPathSegCurvetoQuadraticRel","SVGPathSegArcAbs","r1","r2","angle","largeArcFlag","sweepFlag","_r1","_r2","_angle","_largeArcFlag","_sweepFlag","SVGPathSegArcRel","SVGPathSegLinetoHorizontalAbs","defineProperty","SVGPathSegLinetoHorizontalRel","SVGPathSegLinetoVerticalAbs","SVGPathSegLinetoVerticalRel","SVGPathSegCurvetoCubicSmoothAbs","SVGPathSegCurvetoCubicSmoothRel","SVGPathSegCurvetoQuadraticSmoothAbs","SVGPathSegCurvetoQuadraticSmoothRel","SVGPathElement","createSVGPathSegClosePath","createSVGPathSegMovetoAbs","createSVGPathSegMovetoRel","createSVGPathSegLinetoAbs","createSVGPathSegLinetoRel","createSVGPathSegCurvetoCubicAbs","createSVGPathSegCurvetoCubicRel","createSVGPathSegCurvetoQuadraticAbs","createSVGPathSegCurvetoQuadraticRel","createSVGPathSegArcAbs","createSVGPathSegArcRel","createSVGPathSegLinetoHorizontalAbs","createSVGPathSegLinetoHorizontalRel","createSVGPathSegLinetoVerticalAbs","createSVGPathSegLinetoVerticalRel","createSVGPathSegCurvetoCubicSmoothAbs","createSVGPathSegCurvetoCubicSmoothRel","createSVGPathSegCurvetoQuadraticSmoothAbs","createSVGPathSegCurvetoQuadraticSmoothRel","getPathSegAtLength","distance","isFinite","Error","measurementElement","document","createElementNS","setAttribute","getAttribute","lastPathSegment","pathSegList","numberOfItems","removeItem","getTotalLength","SVGPathSegList","pathElement","_pathElement","_list","_parsePath","_mutationObserverConfig","attributes","attributeFilter","_pathElementMutationObserver","MutationObserver","_updateListFromPathMutations","bind","observe","takeRecords","mutationRecords","hasPathMutations","forEach","record","attributeName","disconnect","_pathSegArrayAsString","pathSeg","_writeListToPath","_checkPathSynchronizedToList","newItem","index","isNaN","_checkValidIndex","clone","splice","item","push","string","length","Builder","Source","_string","_currentIndex","_endIndex","_previousCommand","_skipOptionalSpaces","character","_isCurrentSpace","charAt","lookahead","_pathSegTypeFromChar","previousCommand","hasMoreData","command","peekSegmentType","exponent","integer","frac","decimal","sign","expsign","startIndex","startIntPartIndex","scanIntPartIndex","multiplier","number","_skipOptionalSpacesOrDelimiter","flag","flagChar","_nextCommandHelper","_parseNumber","points","arcAngle","arcLarge","_parseArcFlag","arcSweep","builder","source","initialCommandIsMoveTo","parseSegment","appendSegment","pathSegArray","first","_asPathString","_pathSegList","normalizedPathSegList","animatedPathSegList","animatedNormalizedPathSegList","name","init","importLocale","$","strings","updateButton","path","seglist","closed","getItem","showbutton","hide","show","showPanel","on","toggle","selElems","toggleClosed","last","appendItem","buttons","id","icon","panel","events","click","svgicons","map","button","i","assign","callback","selectedChanged","opts","elems","elem","tagName","selectedElement","multiselected"],"mappings":"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"} \ No newline at end of file diff --git a/dist/editor/extensions/ext-connector.js b/dist/editor/extensions/ext-connector.js deleted file mode 100644 index 16640754..00000000 --- a/dist/editor/extensions/ext-connector.js +++ /dev/null @@ -1,11 +0,0 @@ -function _AwaitValue(t){this.wrapped=t}function _AsyncGenerator(t){var e,r;function resume(e,r){try{var n=t[e](r),o=n.value,a=o instanceof _AwaitValue;Promise.resolve(a?o.wrapped:o).then((function(t){a?resume("return"===e?"return":"next",t):settle(n.done?"return":"normal",t)}),(function(t){resume("throw",t)}))}catch(t){settle("throw",t)}}function settle(t,n){switch(t){case"return":e.resolve({value:n,done:!0});break;case"throw":e.reject(n);break;default:e.resolve({value:n,done:!1})}(e=e.next)?resume(e.key,e.arg):r=null}this._invoke=function send(t,n){return new Promise((function(o,a){var i={key:t,arg:n,resolve:o,reject:a,next:null};r?r=r.next=i:(e=r=i,resume(t,n))}))},"function"!=typeof t.return&&(this.return=void 0)}function asyncGeneratorStep(t,e,r,n,o,a,i){try{var s=t[a](i),c=s.value}catch(t){return void r(t)}s.done?e(c):Promise.resolve(c).then(n,o)}"function"==typeof Symbol&&Symbol.asyncIterator&&(_AsyncGenerator.prototype[Symbol.asyncIterator]=function(){return this}),_AsyncGenerator.prototype.next=function(t){return this._invoke("next",t)},_AsyncGenerator.prototype.throw=function(t){return this._invoke("throw",t)},_AsyncGenerator.prototype.return=function(t){return this._invoke("return",t)}; -/** - * @file ext-connector.js - * - * @license MIT - * - * @copyright 2010 Alexis Deveria - * - */ -var t={name:"connector",init:function init(t){var e=this;return function _asyncToGenerator(t){return function(){var e=this,r=arguments;return new Promise((function(n,o){var a=t.apply(e,r);function _next(t){asyncGeneratorStep(a,n,o,_next,_throw,"next",t)}function _throw(t){asyncGeneratorStep(a,n,o,_next,_throw,"throw",t)}_next(void 0)}))}}(regeneratorRuntime.mark((function _callee(){var r,n,o,a,i,s,c,u,l,d,f,h,g,m,v,_,p,b,y,x,k,w,A,S,B,E,I,N,G,M;return regeneratorRuntime.wrap((function _callee$(C){for(;;)switch(C.prev=C.next){case 0:return G=function _init(){a(b).find("*").each((function(){var t=this.getAttributeNS(p,"connector");if(t){this.setAttribute("class",l.substr(1));var e=t.split(" "),r=n.getStrokedBBox([o(e[0])]),i=n.getStrokedBBox([o(e[1])]);a(this).data("c_start",e[0]).data("c_end",e[1]).data("start_bb",r).data("end_bb",i),n.getEditorNS(!0)}}))},N=function _updateConnectors(t){if(I(t),x.length)for(var e=x.length;e--;){var r=x[e],o=r.connector,a=r.elem,i=r.is_start?"start":"end",s=n.getStrokedBBox([a]);s.x=r.start_x,s.y=r.start_y,d(o,i+"_bb",s),d(o,i+"_off");var c=r.is_start?"end":"start",u=d(o,c+"_bb"),l=u.x+u.width/2,f=u.y+u.height/2,h=w(l,f,s,A(i,o));B(o,r.is_start?0:"end",h.x,h.y,!0);var g=w(h.x,h.y,d(o,c+"_bb"),A(c,o));if(B(o,r.is_start?"end":0,g.x,g.y,!0),navigator.userAgent.includes("AppleWebKit")){for(var m=o.points,v=m.numberOfItems,_=[],p=0;p0&&void 0!==arguments[0]?arguments[0]:k,e=a(b).find(l);x=[],e.each((function(){var e;function add(){t.includes(this)&&(e=!0)}var r=[];["start","end"].forEach((function(t,e){var o=d(this,"c_"+t);null==o?(o=document.getElementById(this.attributes["se:connector"].value.split(" ")[e]),d(this,"c_"+t,o.id),d(this,t+"_bb",n.getStrokedBBox([o]))):o=document.getElementById(o),r.push(o)}),this);for(var o=0;o<2;o++){var i=r[o];if(e=!1,a(i).parents().each(add),i&&i.parentNode){if(t.includes(i)||e){var s=n.getStrokedBBox([i]);x.push({elem:i,connector:this,is_start:0===o,start_x:s.x,start_y:s.y})}}else a(this).remove()}}))},E=function _updateLine(t,e){for(var r=x.length;r--;){var n=x[r],o=n.connector,a=n.is_start?"start":"end",i=d(o,a+"_bb");i.x=n.start_x+t,i.y=n.start_y+e,d(o,a+"_bb",i);var s=n.is_start?"end":"start",c=d(o,s+"_bb"),u=c.x+c.width/2,l=c.y+c.height/2,f=w(u,l,i,A(a,o));B(o,n.is_start?0:"end",f.x,f.y,!0);var h=w(f.x,f.y,d(o,s+"_bb"),A(s,o));B(o,n.is_start?"end":0,h.x,h.y,!0)}},B=function _setPoint(t,e,r,n,o){var a=t.points,s=i.createSVGPoint();s.x=r,s.y=n,"end"===e&&(e=a.numberOfItems-1);try{a.replaceItem(s,e)}catch(o){for(var c=t.getAttribute("points").split(" "),u=0;u').appendTo("head")),e.text(t?"#tool_clone, #tool_topath, #tool_angle, #xy_panel { display: none !important; }":""),a("#connector_panel").toggle(t)},A=function _getOffset(t,e){var r=e.getAttribute("marker-"+t),n=5*e.getAttribute("stroke-width");return r?n:0},w=function _getBBintersect(t,e,r,n){n&&(n-=0,(r=a.extend({},r)).width+=n,r.height+=n,r.x-=n/2,r.y-=n/2);var o,i=r.x+r.width/2,s=r.y+r.height/2,c=t-i,u=e-s;return{x:i+c*(o=Math.abs(u/c)').appendTo('head');\n }\n connRules.text(!on ? '' : '#tool_clone, #tool_topath, #tool_angle, #xy_panel { display: none !important; }');\n $('#connector_panel').toggle(on);\n }\n\n /**\n * @param {Element} elem\n * @param {Integer|\"end\"} pos\n * @param {Float} x\n * @param {Float} y\n * @param {boolean} [setMid]\n * @returns {void}\n */\n function setPoint (elem, pos, x, y, setMid) {\n const pts = elem.points;\n const pt = svgroot.createSVGPoint();\n pt.x = x;\n pt.y = y;\n if (pos === 'end') { pos = pts.numberOfItems - 1; }\n // TODO: Test for this on init, then use alt only if needed\n try {\n pts.replaceItem(pt, pos);\n } catch (err) {\n // Should only occur in FF which formats points attr as \"n,n n,n\", so just split\n const ptArr = elem.getAttribute('points').split(' ');\n for (let i = 0; i < ptArr.length; i++) {\n if (i === pos) {\n ptArr[i] = x + ',' + y;\n }\n }\n elem.setAttribute('points', ptArr.join(' '));\n }\n\n if (setMid) {\n // Add center point\n const ptStart = pts.getItem(0);\n const ptEnd = pts.getItem(pts.numberOfItems - 1);\n setPoint(elem, 1, (ptEnd.x + ptStart.x) / 2, (ptEnd.y + ptStart.y) / 2);\n }\n }\n\n /**\n * @param {Float} diffX\n * @param {Float} diffY\n * @returns {void}\n */\n function updateLine (diffX, diffY) {\n // Update line with element\n let i = connections.length;\n while (i--) {\n const conn = connections[i];\n const line = conn.connector;\n // const {elem} = conn;\n\n const pre = conn.is_start ? 'start' : 'end';\n // const sw = line.getAttribute('stroke-width') * 5;\n\n // Update bbox for this element\n const bb = elData(line, pre + '_bb');\n bb.x = conn.start_x + diffX;\n bb.y = conn.start_y + diffY;\n elData(line, pre + '_bb', bb);\n\n const altPre = conn.is_start ? 'end' : 'start';\n\n // Get center pt of connected element\n const bb2 = elData(line, altPre + '_bb');\n const srcX = bb2.x + bb2.width / 2;\n const srcY = bb2.y + bb2.height / 2;\n\n // Set point of element being moved\n const pt = getBBintersect(srcX, srcY, bb, getOffset(pre, line)); // $(line).data(pre+'_off')?sw:0\n setPoint(line, conn.is_start ? 0 : 'end', pt.x, pt.y, true);\n\n // Set point of connected element\n const pt2 = getBBintersect(pt.x, pt.y, elData(line, altPre + '_bb'), getOffset(altPre, line));\n setPoint(line, conn.is_start ? 'end' : 0, pt2.x, pt2.y, true);\n }\n }\n\n /**\n *\n * @param {Element[]} [elems=selElems] Array of elements\n * @returns {void}\n */\n function findConnectors (elems = selElems) {\n const connectors = $(svgcontent).find(connSel);\n connections = [];\n\n // Loop through connectors to see if one is connected to the element\n connectors.each(function () {\n let addThis;\n /**\n *\n * @returns {void}\n */\n function add () {\n if (elems.includes(this)) {\n // Pretend this element is selected\n addThis = true;\n }\n }\n\n // Grab the ends\n const parts = [];\n ['start', 'end'].forEach(function (pos, i) {\n const key = 'c_' + pos;\n let part = elData(this, key);\n if (part === null || part === undefined) { // Does this ever return nullish values?\n part = document.getElementById(\n this.attributes['se:connector'].value.split(' ')[i]\n );\n elData(this, 'c_' + pos, part.id);\n elData(this, pos + '_bb', svgCanvas.getStrokedBBox([part]));\n } else part = document.getElementById(part);\n parts.push(part);\n }, this);\n\n for (let i = 0; i < 2; i++) {\n const cElem = parts[i];\n\n addThis = false;\n // The connected element might be part of a selected group\n $(cElem).parents().each(add);\n\n if (!cElem || !cElem.parentNode) {\n $(this).remove();\n continue;\n }\n if (elems.includes(cElem) || addThis) {\n const bb = svgCanvas.getStrokedBBox([cElem]);\n connections.push({\n elem: cElem,\n connector: this,\n is_start: (i === 0),\n start_x: bb.x,\n start_y: bb.y\n });\n }\n }\n });\n }\n\n /**\n * @param {Element[]} [elems=selElems]\n * @returns {void}\n */\n function updateConnectors (elems) {\n // Updates connector lines based on selected elements\n // Is not used on mousemove, as it runs getStrokedBBox every time,\n // which isn't necessary there.\n findConnectors(elems);\n if (connections.length) {\n // Update line with element\n let i = connections.length;\n while (i--) {\n const conn = connections[i];\n const line = conn.connector;\n const {elem} = conn;\n\n // const sw = line.getAttribute('stroke-width') * 5;\n const pre = conn.is_start ? 'start' : 'end';\n\n // Update bbox for this element\n const bb = svgCanvas.getStrokedBBox([elem]);\n bb.x = conn.start_x;\n bb.y = conn.start_y;\n elData(line, pre + '_bb', bb);\n /* const addOffset = */ elData(line, pre + '_off');\n\n const altPre = conn.is_start ? 'end' : 'start';\n\n // Get center pt of connected element\n const bb2 = elData(line, altPre + '_bb');\n const srcX = bb2.x + bb2.width / 2;\n const srcY = bb2.y + bb2.height / 2;\n\n // Set point of element being moved\n let pt = getBBintersect(srcX, srcY, bb, getOffset(pre, line));\n setPoint(line, conn.is_start ? 0 : 'end', pt.x, pt.y, true);\n\n // Set point of connected element\n const pt2 = getBBintersect(pt.x, pt.y, elData(line, altPre + '_bb'), getOffset(altPre, line));\n setPoint(line, conn.is_start ? 'end' : 0, pt2.x, pt2.y, true);\n\n // Update points attribute manually for webkit\n if (navigator.userAgent.includes('AppleWebKit')) {\n const pts = line.points;\n const len = pts.numberOfItems;\n const ptArr = [];\n for (let j = 0; j < len; j++) {\n pt = pts.getItem(j);\n ptArr[j] = pt.x + ',' + pt.y;\n }\n line.setAttribute('points', ptArr.join(' '));\n }\n }\n }\n }\n\n // Do once\n (function () {\n const gse = svgCanvas.groupSelectedElements;\n\n svgCanvas.groupSelectedElements = function (...args) {\n svgCanvas.removeFromSelection($(connSel).toArray());\n return gse.apply(this, args);\n };\n\n const mse = svgCanvas.moveSelectedElements;\n\n svgCanvas.moveSelectedElements = function (...args) {\n const cmd = mse.apply(this, args);\n updateConnectors();\n return cmd;\n };\n\n seNs = svgCanvas.getEditorNS();\n }());\n\n /**\n * Do on reset.\n * @returns {void}\n */\n function init () {\n // Make sure all connectors have data set\n $(svgcontent).find('*').each(function () {\n const conn = this.getAttributeNS(seNs, 'connector');\n if (conn) {\n this.setAttribute('class', connSel.substr(1));\n const connData = conn.split(' ');\n const sbb = svgCanvas.getStrokedBBox([getElem(connData[0])]);\n const ebb = svgCanvas.getStrokedBBox([getElem(connData[1])]);\n $(this).data('c_start', connData[0])\n .data('c_end', connData[1])\n .data('start_bb', sbb)\n .data('end_bb', ebb);\n svgCanvas.getEditorNS(true);\n }\n });\n // updateConnectors();\n }\n\n // $(svgroot).parent().mousemove(function (e) {\n // // if (started\n // // || svgCanvas.getMode() !== 'connector'\n // // || e.target.parentNode.parentNode !== svgcontent) return;\n //\n // console.log('y')\n // // if (e.target.parentNode.parentNode === svgcontent) {\n // //\n // // }\n // });\n\n const buttons = [{\n id: 'mode_connect',\n type: 'mode',\n icon: svgEditor.curConfig.imgPath + 'cut.png',\n includeWith: {\n button: '#tool_line',\n isDefault: false,\n position: 1\n },\n events: {\n click () {\n svgCanvas.setMode('connector');\n }\n }\n }];\n\n return {\n name: strings.name,\n svgicons: 'conn.svg',\n buttons: strings.buttons.map((button, i) => {\n return Object.assign(buttons[i], button);\n }),\n /* async */ addLangData ({lang}) { // , importLocale: importLoc\n return {\n data: strings.langList\n };\n },\n mouseDown (opts) {\n const e = opts.event;\n startX = opts.start_x;\n startY = opts.start_y;\n const mode = svgCanvas.getMode();\n const {curConfig: {initStroke}} = svgEditor;\n\n if (mode === 'connector') {\n if (started) { return undefined; }\n\n const mouseTarget = e.target;\n\n const parents = $(mouseTarget).parents();\n\n if ($.inArray(svgcontent, parents) !== -1) {\n // Connectable element\n\n // If child of foreignObject, use parent\n const fo = $(mouseTarget).closest('foreignObject');\n startElem = fo.length ? fo[0] : mouseTarget;\n\n // Get center of source element\n const bb = svgCanvas.getStrokedBBox([startElem]);\n const x = bb.x + bb.width / 2;\n const y = bb.y + bb.height / 2;\n\n started = true;\n curLine = addElem({\n element: 'polyline',\n attr: {\n id: svgCanvas.getNextId(),\n points: (x + ',' + y + ' ' + x + ',' + y + ' ' + startX + ',' + startY),\n stroke: '#' + initStroke.color,\n 'stroke-width': (!startElem.stroke_width || startElem.stroke_width === 0)\n ? initStroke.width\n : startElem.stroke_width,\n fill: 'none',\n opacity: initStroke.opacity,\n style: 'pointer-events:none'\n }\n });\n elData(curLine, 'start_bb', bb);\n }\n return {\n started: true\n };\n }\n if (mode === 'select') {\n findConnectors();\n }\n return undefined;\n },\n mouseMove (opts) {\n const zoom = svgCanvas.getZoom();\n // const e = opts.event;\n const x = opts.mouse_x / zoom;\n const y = opts.mouse_y / zoom;\n\n const diffX = x - startX,\n diffY = y - startY;\n\n const mode = svgCanvas.getMode();\n\n if (mode === 'connector' && started) {\n // const sw = curLine.getAttribute('stroke-width') * 3;\n // Set start point (adjusts based on bb)\n const pt = getBBintersect(x, y, elData(curLine, 'start_bb'), getOffset('start', curLine));\n startX = pt.x;\n startY = pt.y;\n\n setPoint(curLine, 0, pt.x, pt.y, true);\n\n // Set end point\n setPoint(curLine, 'end', x, y, true);\n } else if (mode === 'select') {\n let slen = selElems.length;\n while (slen--) {\n const elem = selElems[slen];\n // Look for selected connector elements\n if (elem && elData(elem, 'c_start')) {\n // Remove the \"translate\" transform given to move\n svgCanvas.removeFromSelection([elem]);\n svgCanvas.getTransformList(elem).clear();\n }\n }\n if (connections.length) {\n updateLine(diffX, diffY);\n }\n }\n },\n mouseUp (opts) {\n // const zoom = svgCanvas.getZoom();\n const e = opts.event;\n // , x = opts.mouse_x / zoom,\n // , y = opts.mouse_y / zoom,\n let mouseTarget = e.target;\n\n if (svgCanvas.getMode() !== 'connector') {\n return undefined;\n }\n const fo = $(mouseTarget).closest('foreignObject');\n if (fo.length) { mouseTarget = fo[0]; }\n\n const parents = $(mouseTarget).parents();\n\n if (mouseTarget === startElem) {\n // Start line through click\n started = true;\n return {\n keep: true,\n element: null,\n started\n };\n }\n if ($.inArray(svgcontent, parents) === -1) {\n // Not a valid target element, so remove line\n $(curLine).remove();\n started = false;\n return {\n keep: false,\n element: null,\n started\n };\n }\n // Valid end element\n endElem = mouseTarget;\n\n const startId = startElem.id, endId = endElem.id;\n const connStr = startId + ' ' + endId;\n const altStr = endId + ' ' + startId;\n // Don't create connector if one already exists\n const dupe = $(svgcontent).find(connSel).filter(function () {\n const conn = this.getAttributeNS(seNs, 'connector');\n if (conn === connStr || conn === altStr) { return true; }\n return false;\n });\n if (dupe.length) {\n $(curLine).remove();\n return {\n keep: false,\n element: null,\n started: false\n };\n }\n\n const bb = svgCanvas.getStrokedBBox([endElem]);\n\n const pt = getBBintersect(startX, startY, bb, getOffset('start', curLine));\n setPoint(curLine, 'end', pt.x, pt.y, true);\n $(curLine)\n .data('c_start', startId)\n .data('c_end', endId)\n .data('end_bb', bb);\n seNs = svgCanvas.getEditorNS(true);\n curLine.setAttributeNS(seNs, 'se:connector', connStr);\n curLine.setAttribute('class', connSel.substr(1));\n curLine.setAttribute('opacity', 1);\n svgCanvas.addToSelection([curLine]);\n svgCanvas.moveToBottomSelectedElement();\n selManager.requestSelector(curLine).showGrips(false);\n started = false;\n return {\n keep: true,\n element: curLine,\n started\n };\n },\n selectedChanged (opts) {\n // TODO: Find better way to skip operations if no connectors are in use\n if (!$(svgcontent).find(connSel).length) { return; }\n\n if (svgCanvas.getMode() === 'connector') {\n svgCanvas.setMode('select');\n }\n\n // Use this to update the current selected elements\n selElems = opts.elems;\n\n let i = selElems.length;\n while (i--) {\n const elem = selElems[i];\n if (elem && elData(elem, 'c_start')) {\n selManager.requestSelector(elem).showGrips(false);\n if (opts.selectedElement && !opts.multiselected) {\n // TODO: Set up context tools and hide most regular line tools\n showPanel(true);\n } else {\n showPanel(false);\n }\n } else {\n showPanel(false);\n }\n }\n updateConnectors();\n },\n elementChanged (opts) {\n let elem = opts.elems[0];\n if (!elem) return;\n if (elem.tagName === 'svg' && elem.id === 'svgcontent') {\n // Update svgcontent (can change on import)\n svgcontent = elem;\n init();\n }\n\n // Has marker, so change offset\n if (\n elem.getAttribute('marker-start') ||\n elem.getAttribute('marker-mid') ||\n elem.getAttribute('marker-end')\n ) {\n const start = elem.getAttribute('marker-start');\n const mid = elem.getAttribute('marker-mid');\n const end = elem.getAttribute('marker-end');\n curLine = elem;\n $(elem)\n .data('start_off', Boolean(start))\n .data('end_off', Boolean(end));\n\n if (elem.tagName === 'line' && mid) {\n // Convert to polyline to accept mid-arrow\n\n const x1 = Number(elem.getAttribute('x1'));\n const x2 = Number(elem.getAttribute('x2'));\n const y1 = Number(elem.getAttribute('y1'));\n const y2 = Number(elem.getAttribute('y2'));\n const {id} = elem;\n\n const midPt = (' ' + ((x1 + x2) / 2) + ',' + ((y1 + y2) / 2) + ' ');\n const pline = addElem({\n element: 'polyline',\n attr: {\n points: (x1 + ',' + y1 + midPt + x2 + ',' + y2),\n stroke: elem.getAttribute('stroke'),\n 'stroke-width': elem.getAttribute('stroke-width'),\n 'marker-mid': mid,\n fill: 'none',\n opacity: elem.getAttribute('opacity') || 1\n }\n });\n $(elem).after(pline).remove();\n svgCanvas.clearSelection();\n pline.id = id;\n svgCanvas.addToSelection([pline]);\n elem = pline;\n }\n }\n // Update line if it's a connector\n if (elem.getAttribute('class') === connSel.substr(1)) {\n const start = getElem(elData(elem, 'c_start'));\n updateConnectors([start]);\n } else {\n updateConnectors();\n }\n },\n IDsUpdated (input) {\n const remove = [];\n input.elems.forEach(function (elem) {\n if ('se:connector' in elem.attr) {\n elem.attr['se:connector'] = elem.attr['se:connector'].split(' ')\n .map(function (oldID) { return input.changes[oldID]; }).join(' ');\n\n // Check validity - the field would be something like 'svg_21 svg_22', but\n // if one end is missing, it would be 'svg_21' and therefore fail this test\n if (!(/. ./).test(elem.attr['se:connector'])) {\n remove.push(elem.attr.id);\n }\n }\n });\n return {remove};\n },\n toolButtonStateUpdate (opts) {\n if (opts.nostroke) {\n if ($('#mode_connect').hasClass('tool_button_current')) {\n svgEditor.clickSelect();\n }\n }\n $('#mode_connect')\n .toggleClass('disabled', opts.nostroke);\n }\n };\n }\n};\n"],"names":["name","init","S","getBBintersect","getOffset","showPanel","setPoint","updateLine","findConnectors","updateConnectors","$","svgcontent","find","each","conn","this","getAttributeNS","seNs","setAttribute","connSel","substr","connData","split","sbb","svgCanvas","getStrokedBBox","getElem","ebb","data","getEditorNS","elems","connections","length","i","line","connector","elem","pre","is_start","bb","x","start_x","y","start_y","elData","altPre","bb2","srcX","width","srcY","height","pt","pt2","navigator","userAgent","includes","pts","points","len","numberOfItems","ptArr","j","getItem","join","selElems","connectors","addThis","add","parts","forEach","pos","part","document","getElementById","attributes","value","id","push","cElem","parents","parentNode","remove","diffX","diffY","setMid","svgroot","createSVGPoint","replaceItem","err","getAttribute","ptStart","ptEnd","on","connRules","appendTo","text","toggle","side","giveOffset","size","offset","extend","ratio","midX","midY","lenX","lenY","Math","abs","svgEditor","_this","canvas","importLocale","addElem","addSVGElementFromJson","selManager","selectorManager","strings","started","gse","groupSelectedElements","removeFromSelection","toArray","args","apply","mse","moveSelectedElements","cmd","buttons","type","icon","curConfig","imgPath","includeWith","button","isDefault","position","events","click","setMode","svgicons","map","Object","assign","addLangData","lang","langList","mouseDown","opts","e","event","startX","startY","mode","getMode","initStroke","mouseTarget","target","inArray","fo","closest","startElem","curLine","element","attr","getNextId","stroke","color","stroke_width","fill","opacity","style","mouseMove","zoom","getZoom","mouse_x","mouse_y","slen","getTransformList","clear","mouseUp","keep","endElem","startId","endId","connStr","altStr","filter","setAttributeNS","addToSelection","moveToBottomSelectedElement","requestSelector","showGrips","selectedChanged","selectedElement","multiselected","elementChanged","tagName","start","mid","end","Boolean","x1","Number","x2","y1","y2","pline","after","clearSelection","IDsUpdated","input","oldID","changes","test","toolButtonStateUpdate","nostroke","hasClass","clickSelect","toggleClass"],"mappings":"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"} \ No newline at end of file diff --git a/dist/editor/extensions/ext-connector/ext-connector.js b/dist/editor/extensions/ext-connector/ext-connector.js new file mode 100644 index 00000000..f5bd15a2 --- /dev/null +++ b/dist/editor/extensions/ext-connector/ext-connector.js @@ -0,0 +1,11 @@ +function asyncGeneratorStep(t,e,r,n,o,a,i){try{var s=t[a](i),c=s.value}catch(t){return void r(t)}s.done?e(c):Promise.resolve(c).then(n,o)} +/** + * @file ext-connector.js + * + * @license MIT + * + * @copyright 2010 Alexis Deveria + * + */ +var t={name:"connector",init:function init(t){var e=this;return function _asyncToGenerator(t){return function(){var e=this,r=arguments;return new Promise((function(n,o){var a=t.apply(e,r);function _next(t){asyncGeneratorStep(a,n,o,_next,_throw,"next",t)}function _throw(t){asyncGeneratorStep(a,n,o,_next,_throw,"throw",t)}_next(void 0)}))}}(regeneratorRuntime.mark((function _callee(){var r,n,o,a,i,s,c,l,u,d,g,f,m,h,v,_,b,p,y,x,k,S,A,w,B,E,N,I,M,C;return regeneratorRuntime.wrap((function _callee$(G){for(;;)switch(G.prev=G.next){case 0:return N=function _init(){a(_).find("*").each((function(){var t=this.getAttributeNS(v,"connector");if(t){this.setAttribute("class",l.substr(1));var e=t.split(" "),r=n.getStrokedBBox([o(e[0])]),i=n.getStrokedBBox([o(e[1])]);a(this).data("c_start",e[0]).data("c_end",e[1]).data("start_bb",r).data("end_bb",i),n.getEditorNS(!0)}}))},E=function _updateConnectors(t){if(B(t),p.length)for(var e=p.length;e--;){var r=p[e],o=r.connector,a=r.elem,i=r.is_start?"start":"end",s=n.getStrokedBBox([a]);s.x=r.start_x,s.y=r.start_y,u(o,i+"_bb",s),u(o,i+"_off");var c=r.is_start?"end":"start",l=u(o,c+"_bb"),d=l.x+l.width/2,g=l.y+l.height/2,f=x(d,g,s,k(i,o));A(o,r.is_start?0:"end",f.x,f.y,!0);var m=x(f.x,f.y,u(o,c+"_bb"),k(c,o));if(A(o,r.is_start?"end":0,m.x,m.y,!0),navigator.userAgent.includes("AppleWebKit")){for(var h=o.points,v=h.numberOfItems,_=[],b=0;b0&&void 0!==arguments[0]?arguments[0]:y,e=a(_).find(l);p=[],e.each((function(){var e;function add(){t.includes(this)&&(e=!0)}var r=[];["start","end"].forEach((function(t,e){var o=u(this,"c_"+t);null==o?(o=document.getElementById(this.attributes["se:connector"].value.split(" ")[e]),u(this,"c_"+t,o.id),u(this,t+"_bb",n.getStrokedBBox([o]))):o=document.getElementById(o),r.push(o)}),this);for(var o=0;o<2;o++){var i=r[o];if(e=!1,a(i).parents().each(add),i&&i.parentNode){if(t.includes(i)||e){var s=n.getStrokedBBox([i]);p.push({elem:i,connector:this,is_start:0===o,start_x:s.x,start_y:s.y})}}else a(this).remove()}}))},w=function _updateLine(t,e){for(var r=p.length;r--;){var n=p[r],o=n.connector,a=n.is_start?"start":"end",i=u(o,a+"_bb");i.x=n.start_x+t,i.y=n.start_y+e,u(o,a+"_bb",i);var s=n.is_start?"end":"start",c=u(o,s+"_bb"),l=c.x+c.width/2,d=c.y+c.height/2,g=x(l,d,i,k(a,o));A(o,n.is_start?0:"end",g.x,g.y,!0);var f=x(g.x,g.y,u(o,s+"_bb"),k(s,o));A(o,n.is_start?"end":0,f.x,f.y,!0)}},A=function _setPoint(t,e,r,n,o){var a=t.points,s=i.createSVGPoint();s.x=r,s.y=n,"end"===e&&(e=a.numberOfItems-1);try{a.replaceItem(s,e)}catch(o){for(var c=t.getAttribute("points").split(" "),l=0;l').appendTo("head")),e.text(t?"#tool_clone, #tool_topath, #tool_angle, #xy_panel { display: none !important; }":""),a("#connector_panel").toggle(t)},k=function _getOffset(t,e){var r=e.getAttribute("marker-"+t),n=5*e.getAttribute("stroke-width");return r?n:0},x=function _getBBintersect(t,e,r,n){n&&(n-=0,(r=a.extend({},r)).width+=n,r.height+=n,r.x-=n/2,r.y-=n/2);var o,i=r.x+r.width/2,s=r.y+r.height/2,c=t-i,l=e-s;return{x:i+c*(o=Math.abs(l/c)').appendTo('head');\n }\n connRules.text(!on ? '' : '#tool_clone, #tool_topath, #tool_angle, #xy_panel { display: none !important; }');\n $('#connector_panel').toggle(on);\n }\n\n /**\n * @param {Element} elem\n * @param {Integer|\"end\"} pos\n * @param {Float} x\n * @param {Float} y\n * @param {boolean} [setMid]\n * @returns {void}\n */\n function setPoint (elem, pos, x, y, setMid) {\n const pts = elem.points;\n const pt = svgroot.createSVGPoint();\n pt.x = x;\n pt.y = y;\n if (pos === 'end') { pos = pts.numberOfItems - 1; }\n // TODO: Test for this on init, then use alt only if needed\n try {\n pts.replaceItem(pt, pos);\n } catch (err) {\n // Should only occur in FF which formats points attr as \"n,n n,n\", so just split\n const ptArr = elem.getAttribute('points').split(' ');\n for (let i = 0; i < ptArr.length; i++) {\n if (i === pos) {\n ptArr[i] = x + ',' + y;\n }\n }\n elem.setAttribute('points', ptArr.join(' '));\n }\n\n if (setMid) {\n // Add center point\n const ptStart = pts.getItem(0);\n const ptEnd = pts.getItem(pts.numberOfItems - 1);\n setPoint(elem, 1, (ptEnd.x + ptStart.x) / 2, (ptEnd.y + ptStart.y) / 2);\n }\n }\n\n /**\n * @param {Float} diffX\n * @param {Float} diffY\n * @returns {void}\n */\n function updateLine (diffX, diffY) {\n // Update line with element\n let i = connections.length;\n while (i--) {\n const conn = connections[i];\n const line = conn.connector;\n // const {elem} = conn;\n\n const pre = conn.is_start ? 'start' : 'end';\n // const sw = line.getAttribute('stroke-width') * 5;\n\n // Update bbox for this element\n const bb = elData(line, pre + '_bb');\n bb.x = conn.start_x + diffX;\n bb.y = conn.start_y + diffY;\n elData(line, pre + '_bb', bb);\n\n const altPre = conn.is_start ? 'end' : 'start';\n\n // Get center pt of connected element\n const bb2 = elData(line, altPre + '_bb');\n const srcX = bb2.x + bb2.width / 2;\n const srcY = bb2.y + bb2.height / 2;\n\n // Set point of element being moved\n const pt = getBBintersect(srcX, srcY, bb, getOffset(pre, line)); // $(line).data(pre+'_off')?sw:0\n setPoint(line, conn.is_start ? 0 : 'end', pt.x, pt.y, true);\n\n // Set point of connected element\n const pt2 = getBBintersect(pt.x, pt.y, elData(line, altPre + '_bb'), getOffset(altPre, line));\n setPoint(line, conn.is_start ? 'end' : 0, pt2.x, pt2.y, true);\n }\n }\n\n /**\n *\n * @param {Element[]} [elems=selElems] Array of elements\n * @returns {void}\n */\n function findConnectors (elems = selElems) {\n const connectors = $(svgcontent).find(connSel);\n connections = [];\n\n // Loop through connectors to see if one is connected to the element\n connectors.each(function () {\n let addThis;\n /**\n *\n * @returns {void}\n */\n function add () {\n if (elems.includes(this)) {\n // Pretend this element is selected\n addThis = true;\n }\n }\n\n // Grab the ends\n const parts = [];\n ['start', 'end'].forEach(function (pos, i) {\n const key = 'c_' + pos;\n let part = elData(this, key);\n if (part === null || part === undefined) { // Does this ever return nullish values?\n part = document.getElementById(\n this.attributes['se:connector'].value.split(' ')[i]\n );\n elData(this, 'c_' + pos, part.id);\n elData(this, pos + '_bb', svgCanvas.getStrokedBBox([part]));\n } else part = document.getElementById(part);\n parts.push(part);\n }, this);\n\n for (let i = 0; i < 2; i++) {\n const cElem = parts[i];\n\n addThis = false;\n // The connected element might be part of a selected group\n $(cElem).parents().each(add);\n\n if (!cElem || !cElem.parentNode) {\n $(this).remove();\n continue;\n }\n if (elems.includes(cElem) || addThis) {\n const bb = svgCanvas.getStrokedBBox([cElem]);\n connections.push({\n elem: cElem,\n connector: this,\n is_start: (i === 0),\n start_x: bb.x,\n start_y: bb.y\n });\n }\n }\n });\n }\n\n /**\n * @param {Element[]} [elems=selElems]\n * @returns {void}\n */\n function updateConnectors (elems) {\n // Updates connector lines based on selected elements\n // Is not used on mousemove, as it runs getStrokedBBox every time,\n // which isn't necessary there.\n findConnectors(elems);\n if (connections.length) {\n // Update line with element\n let i = connections.length;\n while (i--) {\n const conn = connections[i];\n const line = conn.connector;\n const {elem} = conn;\n\n // const sw = line.getAttribute('stroke-width') * 5;\n const pre = conn.is_start ? 'start' : 'end';\n\n // Update bbox for this element\n const bb = svgCanvas.getStrokedBBox([elem]);\n bb.x = conn.start_x;\n bb.y = conn.start_y;\n elData(line, pre + '_bb', bb);\n /* const addOffset = */ elData(line, pre + '_off');\n\n const altPre = conn.is_start ? 'end' : 'start';\n\n // Get center pt of connected element\n const bb2 = elData(line, altPre + '_bb');\n const srcX = bb2.x + bb2.width / 2;\n const srcY = bb2.y + bb2.height / 2;\n\n // Set point of element being moved\n let pt = getBBintersect(srcX, srcY, bb, getOffset(pre, line));\n setPoint(line, conn.is_start ? 0 : 'end', pt.x, pt.y, true);\n\n // Set point of connected element\n const pt2 = getBBintersect(pt.x, pt.y, elData(line, altPre + '_bb'), getOffset(altPre, line));\n setPoint(line, conn.is_start ? 'end' : 0, pt2.x, pt2.y, true);\n\n // Update points attribute manually for webkit\n if (navigator.userAgent.includes('AppleWebKit')) {\n const pts = line.points;\n const len = pts.numberOfItems;\n const ptArr = [];\n for (let j = 0; j < len; j++) {\n pt = pts.getItem(j);\n ptArr[j] = pt.x + ',' + pt.y;\n }\n line.setAttribute('points', ptArr.join(' '));\n }\n }\n }\n }\n\n // Do once\n (function () {\n const gse = svgCanvas.groupSelectedElements;\n\n svgCanvas.groupSelectedElements = function (...args) {\n svgCanvas.removeFromSelection($(connSel).toArray());\n return gse.apply(this, args);\n };\n\n const mse = svgCanvas.moveSelectedElements;\n\n svgCanvas.moveSelectedElements = function (...args) {\n const cmd = mse.apply(this, args);\n updateConnectors();\n return cmd;\n };\n\n seNs = svgCanvas.getEditorNS();\n }());\n\n /**\n * Do on reset.\n * @returns {void}\n */\n function init () {\n // Make sure all connectors have data set\n $(svgcontent).find('*').each(function () {\n const conn = this.getAttributeNS(seNs, 'connector');\n if (conn) {\n this.setAttribute('class', connSel.substr(1));\n const connData = conn.split(' ');\n const sbb = svgCanvas.getStrokedBBox([getElem(connData[0])]);\n const ebb = svgCanvas.getStrokedBBox([getElem(connData[1])]);\n $(this).data('c_start', connData[0])\n .data('c_end', connData[1])\n .data('start_bb', sbb)\n .data('end_bb', ebb);\n svgCanvas.getEditorNS(true);\n }\n });\n }\n\n const buttons = [{\n id: 'mode_connect',\n type: 'mode',\n icon: svgEditor.curConfig.imgPath + 'cut.png',\n includeWith: {\n button: '#tool_line',\n isDefault: false,\n position: 1\n },\n events: {\n click () {\n svgCanvas.setMode('connector');\n }\n }\n }];\n // eslint-disable-next-line node/no-unsupported-features/es-syntax\n const {default: strings} = await import(`./locale/${svgEditor.curPrefs.lang}.js`);\n return {\n name: strings.name,\n svgicons: 'conn.svg',\n buttons: strings.buttons.map((button, i) => {\n return Object.assign(buttons[i], button);\n }),\n /* async */ addLangData ({lang}) { // , importLocale: importLoc\n return {\n data: strings.langList\n };\n },\n mouseDown (opts) {\n const e = opts.event;\n startX = opts.start_x;\n startY = opts.start_y;\n const mode = svgCanvas.getMode();\n const {curConfig: {initStroke}} = svgEditor;\n\n if (mode === 'connector') {\n if (started) { return undefined; }\n\n const mouseTarget = e.target;\n\n const parents = $(mouseTarget).parents();\n\n if ($.inArray(svgcontent, parents) !== -1) {\n // Connectable element\n\n // If child of foreignObject, use parent\n const fo = $(mouseTarget).closest('foreignObject');\n startElem = fo.length ? fo[0] : mouseTarget;\n\n // Get center of source element\n const bb = svgCanvas.getStrokedBBox([startElem]);\n const x = bb.x + bb.width / 2;\n const y = bb.y + bb.height / 2;\n\n started = true;\n curLine = addElem({\n element: 'polyline',\n attr: {\n id: svgCanvas.getNextId(),\n points: (x + ',' + y + ' ' + x + ',' + y + ' ' + startX + ',' + startY),\n stroke: '#' + initStroke.color,\n 'stroke-width': (!startElem.stroke_width || startElem.stroke_width === 0)\n ? initStroke.width\n : startElem.stroke_width,\n fill: 'none',\n opacity: initStroke.opacity,\n style: 'pointer-events:none'\n }\n });\n elData(curLine, 'start_bb', bb);\n }\n return {\n started: true\n };\n }\n if (mode === 'select') {\n findConnectors();\n }\n return undefined;\n },\n mouseMove (opts) {\n const zoom = svgCanvas.getZoom();\n // const e = opts.event;\n const x = opts.mouse_x / zoom;\n const y = opts.mouse_y / zoom;\n\n const diffX = x - startX,\n diffY = y - startY;\n\n const mode = svgCanvas.getMode();\n\n if (mode === 'connector' && started) {\n // const sw = curLine.getAttribute('stroke-width') * 3;\n // Set start point (adjusts based on bb)\n const pt = getBBintersect(x, y, elData(curLine, 'start_bb'), getOffset('start', curLine));\n startX = pt.x;\n startY = pt.y;\n\n setPoint(curLine, 0, pt.x, pt.y, true);\n\n // Set end point\n setPoint(curLine, 'end', x, y, true);\n } else if (mode === 'select') {\n let slen = selElems.length;\n while (slen--) {\n const elem = selElems[slen];\n // Look for selected connector elements\n if (elem && elData(elem, 'c_start')) {\n // Remove the \"translate\" transform given to move\n svgCanvas.removeFromSelection([elem]);\n svgCanvas.getTransformList(elem).clear();\n }\n }\n if (connections.length) {\n updateLine(diffX, diffY);\n }\n }\n },\n mouseUp (opts) {\n // const zoom = svgCanvas.getZoom();\n const e = opts.event;\n // , x = opts.mouse_x / zoom,\n // , y = opts.mouse_y / zoom,\n let mouseTarget = e.target;\n\n if (svgCanvas.getMode() !== 'connector') {\n return undefined;\n }\n const fo = $(mouseTarget).closest('foreignObject');\n if (fo.length) { mouseTarget = fo[0]; }\n\n const parents = $(mouseTarget).parents();\n\n if (mouseTarget === startElem) {\n // Start line through click\n started = true;\n return {\n keep: true,\n element: null,\n started\n };\n }\n if ($.inArray(svgcontent, parents) === -1) {\n // Not a valid target element, so remove line\n $(curLine).remove();\n started = false;\n return {\n keep: false,\n element: null,\n started\n };\n }\n // Valid end element\n endElem = mouseTarget;\n\n const startId = startElem.id, endId = endElem.id;\n const connStr = startId + ' ' + endId;\n const altStr = endId + ' ' + startId;\n // Don't create connector if one already exists\n const dupe = $(svgcontent).find(connSel).filter(function () {\n const conn = this.getAttributeNS(seNs, 'connector');\n if (conn === connStr || conn === altStr) { return true; }\n return false;\n });\n if (dupe.length) {\n $(curLine).remove();\n return {\n keep: false,\n element: null,\n started: false\n };\n }\n\n const bb = svgCanvas.getStrokedBBox([endElem]);\n\n const pt = getBBintersect(startX, startY, bb, getOffset('start', curLine));\n setPoint(curLine, 'end', pt.x, pt.y, true);\n $(curLine)\n .data('c_start', startId)\n .data('c_end', endId)\n .data('end_bb', bb);\n seNs = svgCanvas.getEditorNS(true);\n curLine.setAttributeNS(seNs, 'se:connector', connStr);\n curLine.setAttribute('class', connSel.substr(1));\n curLine.setAttribute('opacity', 1);\n svgCanvas.addToSelection([curLine]);\n svgCanvas.moveToBottomSelectedElement();\n selManager.requestSelector(curLine).showGrips(false);\n started = false;\n return {\n keep: true,\n element: curLine,\n started\n };\n },\n selectedChanged (opts) {\n // TODO: Find better way to skip operations if no connectors are in use\n if (!$(svgcontent).find(connSel).length) { return; }\n\n if (svgCanvas.getMode() === 'connector') {\n svgCanvas.setMode('select');\n }\n\n // Use this to update the current selected elements\n selElems = opts.elems;\n\n let i = selElems.length;\n while (i--) {\n const elem = selElems[i];\n if (elem && elData(elem, 'c_start')) {\n selManager.requestSelector(elem).showGrips(false);\n if (opts.selectedElement && !opts.multiselected) {\n // TODO: Set up context tools and hide most regular line tools\n showPanel(true);\n } else {\n showPanel(false);\n }\n } else {\n showPanel(false);\n }\n }\n updateConnectors();\n },\n elementChanged (opts) {\n let elem = opts.elems[0];\n if (!elem) return;\n if (elem.tagName === 'svg' && elem.id === 'svgcontent') {\n // Update svgcontent (can change on import)\n svgcontent = elem;\n init();\n }\n\n // Has marker, so change offset\n if (\n elem.getAttribute('marker-start') ||\n elem.getAttribute('marker-mid') ||\n elem.getAttribute('marker-end')\n ) {\n const start = elem.getAttribute('marker-start');\n const mid = elem.getAttribute('marker-mid');\n const end = elem.getAttribute('marker-end');\n curLine = elem;\n $(elem)\n .data('start_off', Boolean(start))\n .data('end_off', Boolean(end));\n\n if (elem.tagName === 'line' && mid) {\n // Convert to polyline to accept mid-arrow\n\n const x1 = Number(elem.getAttribute('x1'));\n const x2 = Number(elem.getAttribute('x2'));\n const y1 = Number(elem.getAttribute('y1'));\n const y2 = Number(elem.getAttribute('y2'));\n const {id} = elem;\n\n const midPt = (' ' + ((x1 + x2) / 2) + ',' + ((y1 + y2) / 2) + ' ');\n const pline = addElem({\n element: 'polyline',\n attr: {\n points: (x1 + ',' + y1 + midPt + x2 + ',' + y2),\n stroke: elem.getAttribute('stroke'),\n 'stroke-width': elem.getAttribute('stroke-width'),\n 'marker-mid': mid,\n fill: 'none',\n opacity: elem.getAttribute('opacity') || 1\n }\n });\n $(elem).after(pline).remove();\n svgCanvas.clearSelection();\n pline.id = id;\n svgCanvas.addToSelection([pline]);\n elem = pline;\n }\n }\n // Update line if it's a connector\n if (elem.getAttribute('class') === connSel.substr(1)) {\n const start = getElem(elData(elem, 'c_start'));\n updateConnectors([start]);\n } else {\n updateConnectors();\n }\n },\n IDsUpdated (input) {\n const remove = [];\n input.elems.forEach(function (elem) {\n if ('se:connector' in elem.attr) {\n elem.attr['se:connector'] = elem.attr['se:connector'].split(' ')\n .map(function (oldID) { return input.changes[oldID]; }).join(' ');\n\n // Check validity - the field would be something like 'svg_21 svg_22', but\n // if one end is missing, it would be 'svg_21' and therefore fail this test\n if (!(/. ./).test(elem.attr['se:connector'])) {\n remove.push(elem.attr.id);\n }\n }\n });\n return {remove};\n },\n toolButtonStateUpdate (opts) {\n if (opts.nostroke) {\n if ($('#mode_connect').hasClass('tool_button_current')) {\n svgEditor.clickSelect();\n }\n }\n $('#mode_connect')\n .toggleClass('disabled', opts.nostroke);\n }\n };\n }\n};\n"],"names":["name","init","S","getBBintersect","getOffset","showPanel","setPoint","updateLine","findConnectors","updateConnectors","$","svgcontent","find","each","conn","this","getAttributeNS","seNs","setAttribute","connSel","substr","connData","split","sbb","svgCanvas","getStrokedBBox","getElem","ebb","data","getEditorNS","elems","connections","length","i","line","connector","elem","pre","is_start","bb","x","start_x","y","start_y","elData","altPre","bb2","srcX","width","srcY","height","pt","pt2","navigator","userAgent","includes","pts","points","len","numberOfItems","ptArr","j","getItem","join","selElems","connectors","addThis","add","parts","forEach","pos","part","document","getElementById","attributes","value","id","push","cElem","parents","parentNode","remove","diffX","diffY","setMid","svgroot","createSVGPoint","replaceItem","err","getAttribute","ptStart","ptEnd","on","connRules","appendTo","text","toggle","side","giveOffset","size","offset","extend","ratio","midX","midY","lenX","lenY","Math","abs","svgEditor","_this","canvas","addElem","addSVGElementFromJson","selManager","selectorManager","started","gse","groupSelectedElements","removeFromSelection","toArray","args","apply","mse","moveSelectedElements","cmd","buttons","type","icon","curConfig","imgPath","includeWith","button","isDefault","position","events","click","setMode","import","curPrefs","lang","strings","svgicons","map","Object","assign","addLangData","langList","mouseDown","opts","e","event","startX","startY","mode","getMode","initStroke","mouseTarget","target","inArray","fo","closest","startElem","curLine","element","attr","getNextId","stroke","color","stroke_width","fill","opacity","style","mouseMove","zoom","getZoom","mouse_x","mouse_y","slen","getTransformList","clear","mouseUp","keep","endElem","startId","endId","connStr","altStr","filter","setAttributeNS","addToSelection","moveToBottomSelectedElement","requestSelector","showGrips","selectedChanged","selectedElement","multiselected","elementChanged","tagName","start","mid","end","Boolean","x1","Number","x2","y1","y2","pline","after","clearSelection","IDsUpdated","input","oldID","changes","test","toolButtonStateUpdate","nostroke","hasClass","clickSelect","toggleClass"],"mappings":";;;;;;;;;AASA,MAAe,CACbA,KAAM,YACAC,mBAAMC,gYA8BDC,EAqCAC,EAaAC,EAiBAC,EAiCAC,EAuCAC,EA8DAC,EA6EAR,wGAAAA,mBAEPS,EAAEC,GAAYC,KAAK,KAAKC,MAAK,eACrBC,EAAOC,KAAKC,eAAeC,EAAM,gBACnCH,EAAM,MACHI,aAAa,QAASC,EAAQC,OAAO,QACpCC,EAAWP,EAAKQ,MAAM,KACtBC,EAAMC,EAAUC,eAAe,CAACC,EAAQL,EAAS,MACjDM,EAAMH,EAAUC,eAAe,CAACC,EAAQL,EAAS,MACvDX,EAAEK,MAAMa,KAAK,UAAWP,EAAS,IAC9BO,KAAK,QAASP,EAAS,IACvBO,KAAK,WAAYL,GACjBK,KAAK,SAAUD,GAClBH,EAAUK,aAAY,QA1FnBpB,6BAAkBqB,MAIzBtB,EAAesB,GACXC,EAAYC,eAEVC,EAAIF,EAAYC,OACbC,KAAK,KACJnB,EAAOiB,EAAYE,GACnBC,EAAOpB,EAAKqB,UACXC,EAAQtB,EAARsB,KAGDC,EAAMvB,EAAKwB,SAAW,QAAU,MAGhCC,EAAKf,EAAUC,eAAe,CAACW,IACrCG,EAAGC,EAAI1B,EAAK2B,QACZF,EAAGG,EAAI5B,EAAK6B,QACZC,EAAOV,EAAMG,EAAM,MAAOE,GACFK,EAAOV,EAAMG,EAAM,YAErCQ,EAAS/B,EAAKwB,SAAW,MAAQ,QAGjCQ,EAAMF,EAAOV,EAAMW,EAAS,OAC5BE,EAAOD,EAAIN,EAAIM,EAAIE,MAAQ,EAC3BC,EAAOH,EAAIJ,EAAII,EAAII,OAAS,EAG9BC,EAAKhD,EAAe4C,EAAME,EAAMV,EAAInC,EAAUiC,EAAKH,IACvD5B,EAAS4B,EAAMpB,EAAKwB,SAAW,EAAI,MAAOa,EAAGX,EAAGW,EAAGT,GAAG,OAGhDU,EAAMjD,EAAegD,EAAGX,EAAGW,EAAGT,EAAGE,EAAOV,EAAMW,EAAS,OAAQzC,EAAUyC,EAAQX,OACvF5B,EAAS4B,EAAMpB,EAAKwB,SAAW,MAAQ,EAAGc,EAAIZ,EAAGY,EAAIV,GAAG,GAGpDW,UAAUC,UAAUC,SAAS,eAAgB,SACzCC,EAAMtB,EAAKuB,OACXC,EAAMF,EAAIG,cACVC,EAAQ,GACLC,EAAI,EAAGA,EAAIH,EAAKG,IACvBV,EAAKK,EAAIM,QAAQD,GACjBD,EAAMC,GAAKV,EAAGX,EAAI,IAAMW,EAAGT,EAE7BR,EAAKhB,aAAa,SAAU0C,EAAMG,KAAK,SA7GtCvD,iCAAgBsB,yDAAQkC,EACzBC,EAAavD,EAAEC,GAAYC,KAAKO,GACtCY,EAAc,GAGdkC,EAAWpD,MAAK,eACVqD,WAKKC,MACHrC,EAAMyB,SAASxC,QAEjBmD,GAAU,OAKRE,EAAQ,IACb,QAAS,OAAOC,SAAQ,SAAUC,EAAKrC,OAElCsC,EAAO3B,EAAO7B,KADN,KAAOuD,GAEfC,MAAAA,GACFA,EAAOC,SAASC,eACd1D,KAAK2D,WAAW,gBAAgBC,MAAMrD,MAAM,KAAKW,IAEnDW,EAAO7B,KAAM,KAAOuD,EAAKC,EAAKK,IAC9BhC,EAAO7B,KAAMuD,EAAM,MAAO9C,EAAUC,eAAe,CAAC8C,MAC/CA,EAAOC,SAASC,eAAeF,GACtCH,EAAMS,KAAKN,KACVxD,UAEE,IAAIkB,EAAI,EAAGA,EAAI,EAAGA,IAAK,KACpB6C,EAAQV,EAAMnC,MAEpBiC,GAAU,EAEVxD,EAAEoE,GAAOC,UAAUlE,KAAKsD,KAEnBW,GAAUA,EAAME,eAIjBlD,EAAMyB,SAASuB,IAAUZ,EAAS,KAC9B3B,EAAKf,EAAUC,eAAe,CAACqD,IACrC/C,EAAY8C,KAAK,CACfzC,KAAM0C,EACN3C,UAAWpB,KACXuB,SAAiB,IAANL,EACXQ,QAASF,EAAGC,EACZG,QAASJ,EAAGG,UAVdhC,EAAEK,MAAMkE,cAhFP1E,uBAAY2E,EAAOC,WAEtBlD,EAAIF,EAAYC,OACbC,KAAK,KACJnB,EAAOiB,EAAYE,GACnBC,EAAOpB,EAAKqB,UAGZE,EAAMvB,EAAKwB,SAAW,QAAU,MAIhCC,EAAKK,EAAOV,EAAMG,EAAM,OAC9BE,EAAGC,EAAI1B,EAAK2B,QAAUyC,EACtB3C,EAAGG,EAAI5B,EAAK6B,QAAUwC,EACtBvC,EAAOV,EAAMG,EAAM,MAAOE,OAEpBM,EAAS/B,EAAKwB,SAAW,MAAQ,QAGjCQ,EAAMF,EAAOV,EAAMW,EAAS,OAC5BE,EAAOD,EAAIN,EAAIM,EAAIE,MAAQ,EAC3BC,EAAOH,EAAIJ,EAAII,EAAII,OAAS,EAG5BC,EAAKhD,EAAe4C,EAAME,EAAMV,EAAInC,EAAUiC,EAAKH,IACzD5B,EAAS4B,EAAMpB,EAAKwB,SAAW,EAAI,MAAOa,EAAGX,EAAGW,EAAGT,GAAG,OAGhDU,EAAMjD,EAAegD,EAAGX,EAAGW,EAAGT,EAAGE,EAAOV,EAAMW,EAAS,OAAQzC,EAAUyC,EAAQX,IACvF5B,EAAS4B,EAAMpB,EAAKwB,SAAW,MAAQ,EAAGc,EAAIZ,EAAGY,EAAIV,GAAG,KA/DnDpC,qBAAU8B,EAAMkC,EAAK9B,EAAGE,EAAG0C,OAC5B5B,EAAMpB,EAAKqB,OACXN,EAAKkC,EAAQC,iBACnBnC,EAAGX,EAAIA,EACPW,EAAGT,EAAIA,EACK,QAAR4B,IAAiBA,EAAMd,EAAIG,cAAgB,OAG7CH,EAAI+B,YAAYpC,EAAImB,GACpB,MAAOkB,WAED5B,EAAQxB,EAAKqD,aAAa,UAAUnE,MAAM,KACvCW,EAAI,EAAGA,EAAI2B,EAAM5B,OAAQC,IAC5BA,IAAMqC,IACRV,EAAM3B,GAAKO,EAAI,IAAME,GAGzBN,EAAKlB,aAAa,SAAU0C,EAAMG,KAAK,SAGrCqB,EAAQ,KAEJM,EAAUlC,EAAIM,QAAQ,GACtB6B,EAAQnC,EAAIM,QAAQN,EAAIG,cAAgB,GAC9CrD,EAAS8B,EAAM,GAAIuD,EAAMnD,EAAIkD,EAAQlD,GAAK,GAAImD,EAAMjD,EAAIgD,EAAQhD,GAAK,KAzChErC,sBAAWuF,OACdC,EAAYnF,EAAE,oBACbmF,EAAU7D,SACb6D,EAAYnF,EAAE,wCAAwCoF,SAAS,SAEjED,EAAUE,KAAMH,EAAU,kFAAL,IACrBlF,EAAE,oBAAoBsF,OAAOJ,IAnBtBxF,sBAAW6F,EAAM/D,OAClBgE,EAAahE,EAAKuD,aAAa,UAAYQ,GAI3CE,EAA2C,EAApCjE,EAAKuD,aAAa,uBACxBS,EAAaC,EAAO,GA3CpBhG,2BAAgBqC,EAAGE,EAAGH,EAAI6D,GAC7BA,IACFA,GAAU,GACV7D,EAAK7B,EAAE2F,OAAO,GAAI9D,IACfS,OAASoD,EACZ7D,EAAGW,QAAUkD,EACb7D,EAAGC,GAAK4D,EAAS,EACjB7D,EAAGG,GAAK0D,EAAS,OAUfE,EAPEC,EAAOhE,EAAGC,EAAID,EAAGS,MAAQ,EACzBwD,EAAOjE,EAAGG,EAAIH,EAAGW,OAAS,EAC1BuD,EAAOjE,EAAI+D,EACXG,EAAOhE,EAAI8D,QAaV,CACLhE,EAAG+D,EAAOE,GARVH,EAJYK,KAAKC,IAAIF,EAAOD,GAGlBlE,EAAGW,OAASX,EAAGS,MAChBT,EAAGS,MAAQ,EAAK2D,KAAKC,IAAIH,GAE1BC,EACHnE,EAAGW,OAAS,EAAKyD,KAAKC,IAAIF,GAC3B,GAKJhE,EAAG8D,EAAOE,EAAOJ,IAxDf9E,GADAqF,EAAYC,GACUC,OACrBrF,EAAWF,EAAXE,QACAhB,EAAcR,EAAdQ,EAAG2E,EAAWnF,EAAXmF,QACR2B,EAAUxF,EAAUyF,sBACpBC,EAAahH,EAAEiH,gBACfhG,EAAU,gBAEVyB,EAASlC,EAAEkB,KAQVjB,EAAcT,EAAdS,WACDyG,GAAU,EACVrF,EAAc,GACdiC,EAAW,kBA0QLqD,EAAM7F,EAAU8F,sBAEtB9F,EAAU8F,sBAAwB,WAChC9F,EAAU+F,oBAAoB7G,EAAES,GAASqG,sCADIC,2BAAAA,yBAEtCJ,EAAIK,MAAM3G,KAAM0G,QAGnBE,EAAMnG,EAAUoG,qBAEtBpG,EAAUoG,qBAAuB,sCAAaH,2BAAAA,sBACtCI,EAAMF,EAAID,MAAM3G,KAAM0G,UAC5BhH,IACOoH,GAGT5G,EAAOO,EAAUK,iBAyBbiG,EAAU,CAAC,CACflD,GAAI,eACJmD,KAAM,OACNC,KAAMnB,EAAUoB,UAAUC,QAAU,UACpCC,YAAa,CACXC,OAAQ,aACRC,WAAW,EACXC,SAAU,GAEZC,OAAQ,CACNC,uBACEhH,EAAUiH,QAAQ,2BAKSC,0BAAmB7B,EAAU8B,SAASC,qCAAvDC,8BACT,CACL7I,KAAM6I,EAAQ7I,KACd8I,SAAU,WACVhB,QAASe,EAAQf,QAAQiB,KAAI,SAACX,EAAQnG,UAC7B+G,OAAOC,OAAOnB,EAAQ7F,GAAImG,MAEvBc,sCAAcN,WACjB,CACLhH,KAAMiH,EAAQM,WAGlBC,6BAAWC,OACHC,EAAID,EAAKE,MACfC,EAASH,EAAK5G,QACdgH,EAASJ,EAAK1G,YACR+G,EAAOlI,EAAUmI,UACJC,EAAe/C,EAA3BoB,UAAY2B,cAEN,cAATF,EAAsB,IACpBtC,aAEEyC,EAAcP,EAAEQ,OAEhB/E,EAAUrE,EAAEmJ,GAAa9E,cAES,IAApCrE,EAAEqJ,QAAQpJ,EAAYoE,GAAiB,KAInCiF,EAAKtJ,EAAEmJ,GAAaI,QAAQ,iBAClCC,EAAYF,EAAGhI,OAASgI,EAAG,GAAKH,MAG1BtH,EAAKf,EAAUC,eAAe,CAACyI,IAC/B1H,EAAID,EAAGC,EAAID,EAAGS,MAAQ,EACtBN,EAAIH,EAAGG,EAAIH,EAAGW,OAAS,EAE7BkE,GAAU,EACV+C,EAAUnD,EAAQ,CAChBoD,QAAS,WACTC,KAAM,CACJzF,GAAIpD,EAAU8I,YACd7G,OAASjB,EAAI,IAAME,EAAI,IAAMF,EAAI,IAAME,EAAI,IAAM8G,EAAS,IAAMC,EAChEc,OAAQ,IAAMX,EAAWY,qBACPN,EAAUO,cAA2C,IAA3BP,EAAUO,aAElDP,EAAUO,aADVb,EAAW5G,MAEf0H,KAAM,OACNC,QAASf,EAAWe,QACpBC,MAAO,yBAGXhI,EAAOuH,EAAS,WAAY5H,SAEvB,CACL6E,SAAS,GAGA,WAATsC,GACFlJ,KAIJqK,6BAAWxB,OACHyB,EAAOtJ,EAAUuJ,UAEjBvI,EAAI6G,EAAK2B,QAAUF,EACnBpI,EAAI2G,EAAK4B,QAAUH,EAEnB5F,EAAQ1C,EAAIgH,EAChBrE,EAAQzC,EAAI+G,EAERC,EAAOlI,EAAUmI,aAEV,cAATD,GAAwBtC,EAAS,KAG7BjE,EAAKhD,EAAeqC,EAAGE,EAAGE,EAAOuH,EAAS,YAAa/J,EAAU,QAAS+J,IAChFX,EAASrG,EAAGX,EACZiH,EAAStG,EAAGT,EAEZpC,EAAS6J,EAAS,EAAGhH,EAAGX,EAAGW,EAAGT,GAAG,GAGjCpC,EAAS6J,EAAS,MAAO3H,EAAGE,GAAG,QAC1B,GAAa,WAATgH,EAAmB,SACxBwB,EAAOlH,EAAShC,OACbkJ,KAAQ,KACP9I,EAAO4B,EAASkH,GAElB9I,GAAQQ,EAAOR,EAAM,aAEvBZ,EAAU+F,oBAAoB,CAACnF,IAC/BZ,EAAU2J,iBAAiB/I,GAAMgJ,SAGjCrJ,EAAYC,QACdzB,EAAW2E,EAAOC,KAIxBkG,yBAAShC,OAKHQ,EAHMR,EAAKE,MAGKO,UAEQ,cAAxBtI,EAAUmI,eAGRK,EAAKtJ,EAAEmJ,GAAaI,QAAQ,iBAC9BD,EAAGhI,SAAU6H,EAAcG,EAAG,QAE5BjF,EAAUrE,EAAEmJ,GAAa9E,aAE3B8E,IAAgBK,QAGX,CACLoB,MAAM,EACNlB,QAAS,KACThD,QAJFA,GAAU,OAO4B,IAApC1G,EAAEqJ,QAAQpJ,EAAYoE,UAExBrE,EAAEyJ,GAASlF,SAEJ,CACLqG,MAAM,EACNlB,QAAS,KACThD,QAJFA,GAAU,GAQZmE,EAAU1B,MAEJ2B,EAAUtB,EAAUtF,GAAI6G,EAAQF,EAAQ3G,GACxC8G,EAAUF,EAAU,IAAMC,EAC1BE,EAASF,EAAQ,IAAMD,KAEhB9K,EAAEC,GAAYC,KAAKO,GAASyK,QAAO,eACxC9K,EAAOC,KAAKC,eAAeC,EAAM,oBACnCH,IAAS4K,GAAW5K,IAAS6K,KAG1B3J,cACPtB,EAAEyJ,GAASlF,SACJ,CACLqG,MAAM,EACNlB,QAAS,KACThD,SAAS,OAIP7E,EAAKf,EAAUC,eAAe,CAAC8J,IAE/BpI,EAAKhD,EAAeqJ,EAAQC,EAAQlH,EAAInC,EAAU,QAAS+J,WACjE7J,EAAS6J,EAAS,MAAOhH,EAAGX,EAAGW,EAAGT,GAAG,GACrChC,EAAEyJ,GACCvI,KAAK,UAAW4J,GAChB5J,KAAK,QAAS6J,GACd7J,KAAK,SAAUW,GAClBtB,EAAOO,EAAUK,aAAY,GAC7BsI,EAAQ0B,eAAe5K,EAAM,eAAgByK,GAC7CvB,EAAQjJ,aAAa,QAASC,EAAQC,OAAO,IAC7C+I,EAAQjJ,aAAa,UAAW,GAChCM,EAAUsK,eAAe,CAAC3B,IAC1B3I,EAAUuK,8BACV7E,EAAW8E,gBAAgB7B,GAAS8B,WAAU,GAEvC,CACLX,MAAM,EACNlB,QAASD,EACT/C,QAJFA,GAAU,KAOZ8E,yCAAiB7C,MAEV3I,EAAEC,GAAYC,KAAKO,GAASa,QAEL,cAAxBR,EAAUmI,WACZnI,EAAUiH,QAAQ,kBAMhBxG,GAFJ+B,EAAWqF,EAAKvH,OAECE,OACVC,KAAK,KACJG,EAAO4B,EAAS/B,GAClBG,GAAQQ,EAAOR,EAAM,YACvB8E,EAAW8E,gBAAgB5J,GAAM6J,WAAU,GACvC5C,EAAK8C,kBAAoB9C,EAAK+C,cAEhC/L,GAAU,GAEVA,GAAU,IAGZA,GAAU,GAGdI,MAEF4L,uCAAgBhD,OACVjH,EAAOiH,EAAKvH,MAAM,MACjBM,MACgB,QAAjBA,EAAKkK,SAAiC,eAAZlK,EAAKwC,KAEjCjE,EAAayB,EACbnC,KAKAmC,EAAKqD,aAAa,iBAClBrD,EAAKqD,aAAa,eAClBrD,EAAKqD,aAAa,cAClB,KACM8G,EAAQnK,EAAKqD,aAAa,gBAC1B+G,EAAMpK,EAAKqD,aAAa,cACxBgH,EAAMrK,EAAKqD,aAAa,iBAC9B0E,EAAU/H,EACV1B,EAAE0B,GACCR,KAAK,YAAa8K,QAAQH,IAC1B3K,KAAK,UAAW8K,QAAQD,IAEN,SAAjBrK,EAAKkK,SAAsBE,EAAK,KAG5BG,EAAKC,OAAOxK,EAAKqD,aAAa,OAC9BoH,EAAKD,OAAOxK,EAAKqD,aAAa,OAC9BqH,EAAKF,OAAOxK,EAAKqD,aAAa,OAC9BsH,EAAKH,OAAOxK,EAAKqD,aAAa,OAC7Bb,EAAMxC,EAANwC,GAGDoI,EAAQhG,EAAQ,CACpBoD,QAAS,WACTC,KAAM,CACJ5G,OAASkJ,EAAK,IAAMG,GAJT,KAAQH,EAAKE,GAAM,EAAK,KAAQC,EAAKC,GAAM,EAAK,KAI1BF,EAAK,IAAME,EAC5CxC,OAAQnI,EAAKqD,aAAa,yBACVrD,EAAKqD,aAAa,6BACpB+G,EACd9B,KAAM,OACNC,QAASvI,EAAKqD,aAAa,YAAc,KAG7C/E,EAAE0B,GAAM6K,MAAMD,GAAO/H,SACrBzD,EAAU0L,iBACVF,EAAMpI,GAAKA,EACXpD,EAAUsK,eAAe,CAACkB,IAC1B5K,EAAO4K,MAIP5K,EAAKqD,aAAa,WAAatE,EAAQC,OAAO,GAAI,KAC9CmL,EAAQ7K,EAAQkB,EAAOR,EAAM,YACnC3B,EAAiB,CAAC8L,SAElB9L,MAGJ0M,+BAAYC,OACJnI,EAAS,UACfmI,EAAMtL,MAAMuC,SAAQ,SAAUjC,GACxB,iBAAkBA,EAAKiI,OACzBjI,EAAKiI,KAAK,gBAAkBjI,EAAKiI,KAAK,gBAAgB/I,MAAM,KACzDyH,KAAI,SAAUsE,UAAgBD,EAAME,QAAQD,MAAWtJ,KAAK,KAIzD,MAAOwJ,KAAKnL,EAAKiI,KAAK,kBAC1BpF,EAAOJ,KAAKzC,EAAKiI,KAAKzF,QAIrB,CAACK,OAAAA,IAEVuI,qDAAuBnE,GACjBA,EAAKoE,UACH/M,EAAE,iBAAiBgN,SAAS,wBAC9B7G,EAAU8G,cAGdjN,EAAE,iBACCkN,YAAY,WAAYvE,EAAKoE"} \ No newline at end of file diff --git a/dist/editor/extensions/ext-eyedropper.js b/dist/editor/extensions/ext-eyedropper.js deleted file mode 100644 index ad1830f3..00000000 --- a/dist/editor/extensions/ext-eyedropper.js +++ /dev/null @@ -1,11 +0,0 @@ -function _AwaitValue(e){this.wrapped=e}function _AsyncGenerator(e){var t,r;function resume(t,r){try{var n=e[t](r),o=n.value,i=o instanceof _AwaitValue;Promise.resolve(i?o.wrapped:o).then((function(e){i?resume("return"===t?"return":"next",e):settle(n.done?"return":"normal",e)}),(function(e){resume("throw",e)}))}catch(e){settle("throw",e)}}function settle(e,n){switch(e){case"return":t.resolve({value:n,done:!0});break;case"throw":t.reject(n);break;default:t.resolve({value:n,done:!1})}(t=t.next)?resume(t.key,t.arg):r=null}this._invoke=function send(e,n){return new Promise((function(o,i){var a={key:e,arg:n,resolve:o,reject:i,next:null};r?r=r.next=a:(t=r=a,resume(e,n))}))},"function"!=typeof e.return&&(this.return=void 0)}function asyncGeneratorStep(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)}"function"==typeof Symbol&&Symbol.asyncIterator&&(_AsyncGenerator.prototype[Symbol.asyncIterator]=function(){return this}),_AsyncGenerator.prototype.next=function(e){return this._invoke("next",e)},_AsyncGenerator.prototype.throw=function(e){return this._invoke("throw",e)},_AsyncGenerator.prototype.return=function(e){return this._invoke("return",e)}; -/** - * @file ext-eyedropper.js - * - * @license MIT - * - * @copyright 2010 Jeff Schiller - * - */ -var e={name:"eyedropper",init:function init(e){var t=this;return function _asyncToGenerator(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function _next(e){asyncGeneratorStep(i,n,o,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep(i,n,o,_next,_throw,"throw",e)}_next(void 0)}))}}(regeneratorRuntime.mark((function _callee(){var r,n,o,i,a,s,c,u,l;return regeneratorRuntime.wrap((function _callee$(p){for(;;)switch(p.prev=p.next){case 0:return u=function _getStyle(e){if("eyedropper"!==a.getMode()){var t=o("#tool_eyedropper"),r=null;e.multiselected||!e.elems[0]||["svg","g","use"].includes(e.elems[0].nodeName)?t.addClass("disabled"):(r=e.elems[0],t.removeClass("disabled"),c.fillPaint=r.getAttribute("fill")||"black",c.fillOpacity=r.getAttribute("fill-opacity")||1,c.strokePaint=r.getAttribute("stroke"),c.strokeOpacity=r.getAttribute("stroke-opacity")||1,c.strokeWidth=r.getAttribute("stroke-width"),c.strokeDashArray=r.getAttribute("stroke-dasharray"),c.strokeLinecap=r.getAttribute("stroke-linecap"),c.strokeLinejoin=r.getAttribute("stroke-linejoin"),c.opacity=r.getAttribute("opacity")||1)}},p.next=3,e.importLocale();case 3:return r=p.sent,n=t,o=e.$,i=e.ChangeElementCommand,a=n.canvas,s=function addToHistory(e){a.undoMgr.addCommandToHistory(e)},c={fillPaint:"red",fillOpacity:1,strokePaint:"black",strokeOpacity:1,strokeWidth:5,strokeDashArray:null,opacity:1,strokeLinecap:"butt",strokeLinejoin:"miter"},l=[{id:"tool_eyedropper",icon:"eyedropper.png",type:"mode",events:{click:function click(){a.setMode("eyedropper")}}}],p.abrupt("return",{name:r.name,svgicons:"eyedropper-icon.xml",buttons:r.buttons.map((function(e,t){return Object.assign(l[t],e)})),selectedChanged:u,elementChanged:u,mouseDown:function mouseDown(e){if("eyedropper"===a.getMode()){var t=e.event.target;if(!["svg","g","use"].includes(t.nodeName)){var r={},n=function change(e,t,n){r[t]=e.getAttribute(t),e.setAttribute(t,n)};c.fillPaint&&n(t,"fill",c.fillPaint),c.fillOpacity&&n(t,"fill-opacity",c.fillOpacity),c.strokePaint&&n(t,"stroke",c.strokePaint),c.strokeOpacity&&n(t,"stroke-opacity",c.strokeOpacity),c.strokeWidth&&n(t,"stroke-width",c.strokeWidth),c.strokeDashArray&&n(t,"stroke-dasharray",c.strokeDashArray),c.opacity&&n(t,"opacity",c.opacity),c.strokeLinecap&&n(t,"stroke-linecap",c.strokeLinecap),c.strokeLinejoin&&n(t,"stroke-linejoin",c.strokeLinejoin),s(new i(t,r))}}}});case 8:case"end":return p.stop()}}),_callee)})))()}};export default e; -//# sourceMappingURL=ext-eyedropper.js.map diff --git a/dist/editor/extensions/ext-eyedropper.js.map b/dist/editor/extensions/ext-eyedropper.js.map deleted file mode 100644 index 6f30a215..00000000 --- a/dist/editor/extensions/ext-eyedropper.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ext-eyedropper.js","sources":["../../../src/editor/extensions/ext-eyedropper.js"],"sourcesContent":["/**\n * @file ext-eyedropper.js\n *\n * @license MIT\n *\n * @copyright 2010 Jeff Schiller\n *\n */\n\nexport default {\n name: 'eyedropper',\n async init (S) {\n const strings = await S.importLocale();\n const svgEditor = this;\n const {$, ChangeElementCommand} = S, // , svgcontent,\n // svgdoc = S.svgroot.parentNode.ownerDocument,\n svgCanvas = svgEditor.canvas,\n addToHistory = function (cmd) { svgCanvas.undoMgr.addCommandToHistory(cmd); },\n currentStyle = {\n fillPaint: 'red', fillOpacity: 1.0,\n strokePaint: 'black', strokeOpacity: 1.0,\n strokeWidth: 5, strokeDashArray: null,\n opacity: 1.0,\n strokeLinecap: 'butt',\n strokeLinejoin: 'miter'\n };\n\n /**\n *\n * @param {module:svgcanvas.SvgCanvas#event:ext_selectedChanged|module:svgcanvas.SvgCanvas#event:ext_elementChanged} opts\n * @returns {void}\n */\n function getStyle (opts) {\n // if we are in eyedropper mode, we don't want to disable the eye-dropper tool\n const mode = svgCanvas.getMode();\n if (mode === 'eyedropper') { return; }\n\n const tool = $('#tool_eyedropper');\n // enable-eye-dropper if one element is selected\n let elem = null;\n if (!opts.multiselected && opts.elems[0] &&\n !['svg', 'g', 'use'].includes(opts.elems[0].nodeName)\n ) {\n elem = opts.elems[0];\n tool.removeClass('disabled');\n // grab the current style\n currentStyle.fillPaint = elem.getAttribute('fill') || 'black';\n currentStyle.fillOpacity = elem.getAttribute('fill-opacity') || 1.0;\n currentStyle.strokePaint = elem.getAttribute('stroke');\n currentStyle.strokeOpacity = elem.getAttribute('stroke-opacity') || 1.0;\n currentStyle.strokeWidth = elem.getAttribute('stroke-width');\n currentStyle.strokeDashArray = elem.getAttribute('stroke-dasharray');\n currentStyle.strokeLinecap = elem.getAttribute('stroke-linecap');\n currentStyle.strokeLinejoin = elem.getAttribute('stroke-linejoin');\n currentStyle.opacity = elem.getAttribute('opacity') || 1.0;\n // disable eye-dropper tool\n } else {\n tool.addClass('disabled');\n }\n }\n\n const buttons = [\n {\n id: 'tool_eyedropper',\n icon: 'eyedropper.png',\n type: 'mode',\n events: {\n click () {\n svgCanvas.setMode('eyedropper');\n }\n }\n }\n ];\n\n return {\n name: strings.name,\n svgicons: 'eyedropper-icon.xml',\n buttons: strings.buttons.map((button, i) => {\n return Object.assign(buttons[i], button);\n }),\n\n // if we have selected an element, grab its paint and enable the eye dropper button\n selectedChanged: getStyle,\n elementChanged: getStyle,\n\n mouseDown (opts) {\n const mode = svgCanvas.getMode();\n if (mode === 'eyedropper') {\n const e = opts.event;\n const {target} = e;\n if (!['svg', 'g', 'use'].includes(target.nodeName)) {\n const changes = {};\n\n const change = function (elem, attrname, newvalue) {\n changes[attrname] = elem.getAttribute(attrname);\n elem.setAttribute(attrname, newvalue);\n };\n\n if (currentStyle.fillPaint) { change(target, 'fill', currentStyle.fillPaint); }\n if (currentStyle.fillOpacity) { change(target, 'fill-opacity', currentStyle.fillOpacity); }\n if (currentStyle.strokePaint) { change(target, 'stroke', currentStyle.strokePaint); }\n if (currentStyle.strokeOpacity) { change(target, 'stroke-opacity', currentStyle.strokeOpacity); }\n if (currentStyle.strokeWidth) { change(target, 'stroke-width', currentStyle.strokeWidth); }\n if (currentStyle.strokeDashArray) { change(target, 'stroke-dasharray', currentStyle.strokeDashArray); }\n if (currentStyle.opacity) { change(target, 'opacity', currentStyle.opacity); }\n if (currentStyle.strokeLinecap) { change(target, 'stroke-linecap', currentStyle.strokeLinecap); }\n if (currentStyle.strokeLinejoin) { change(target, 'stroke-linejoin', currentStyle.strokeLinejoin); }\n\n addToHistory(new ChangeElementCommand(target, changes));\n }\n }\n }\n };\n }\n};\n"],"names":["name","init","S","getStyle","opts","svgCanvas","getMode","tool","$","elem","multiselected","elems","includes","nodeName","addClass","removeClass","currentStyle","fillPaint","getAttribute","fillOpacity","strokePaint","strokeOpacity","strokeWidth","strokeDashArray","strokeLinecap","strokeLinejoin","opacity","importLocale","strings","svgEditor","_this","ChangeElementCommand","canvas","addToHistory","cmd","undoMgr","addCommandToHistory","buttons","id","icon","type","events","click","setMode","svgicons","map","button","i","Object","assign","selectedChanged","elementChanged","mouseDown","target","event","changes","change","attrname","newvalue","setAttribute"],"mappings":";;;;;;;;;AASA,MAAe,CACbA,KAAM,aACAC,mBAAMC,wWAqBDC,oGAAAA,qBAAUC,MAGJ,eADAC,EAAUC,eAGjBC,EAAOC,EAAE,oBAEXC,EAAO,KACNL,EAAKM,gBAAiBN,EAAKO,MAAM,IACnC,CAAC,MAAO,IAAK,OAAOC,SAASR,EAAKO,MAAM,GAAGE,UAgB5CN,EAAKO,SAAS,aAddL,EAAOL,EAAKO,MAAM,GAClBJ,EAAKQ,YAAY,YAEjBC,EAAaC,UAAYR,EAAKS,aAAa,SAAW,QACtDF,EAAaG,YAAcV,EAAKS,aAAa,iBAAmB,EAChEF,EAAaI,YAAcX,EAAKS,aAAa,UAC7CF,EAAaK,cAAgBZ,EAAKS,aAAa,mBAAqB,EACpEF,EAAaM,YAAcb,EAAKS,aAAa,gBAC7CF,EAAaO,gBAAkBd,EAAKS,aAAa,oBACjDF,EAAaQ,cAAgBf,EAAKS,aAAa,kBAC/CF,EAAaS,eAAiBhB,EAAKS,aAAa,mBAChDF,EAAaU,QAAUjB,EAAKS,aAAa,YAAc,cA1CrChB,EAAEyB,6BAAlBC,SACAC,EAAYC,EACXtB,EAA2BN,EAA3BM,EAAGuB,EAAwB7B,EAAxB6B,qBAER1B,EAAYwB,EAAUG,OACtBC,EAAe,SAAfA,aAAyBC,GAAO7B,EAAU8B,QAAQC,oBAAoBF,IACtElB,EAAe,CACbC,UAAW,MAAOE,YAAa,EAC/BC,YAAa,QAASC,cAAe,EACrCC,YAAa,EAAGC,gBAAiB,KACjCG,QAAS,EACTF,cAAe,OACfC,eAAgB,SAqCdY,EAAU,CACd,CACEC,GAAI,kBACJC,KAAM,iBACNC,KAAM,OACNC,OAAQ,CACNC,uBACErC,EAAUsC,QAAQ,oCAMnB,CACL3C,KAAM4B,EAAQ5B,KACd4C,SAAU,sBACVP,QAAST,EAAQS,QAAQQ,KAAI,SAACC,EAAQC,UAC7BC,OAAOC,OAAOZ,EAAQU,GAAID,MAInCI,gBAAiB/C,EACjBgD,eAAgBhD,EAEhBiD,6BAAWhD,MAEI,eADAC,EAAUC,UACI,KAElB+C,EADGjD,EAAKkD,MACRD,WACF,CAAC,MAAO,IAAK,OAAOzC,SAASyC,EAAOxC,UAAW,KAC5C0C,EAAU,GAEVC,EAAS,SAATA,OAAmB/C,EAAMgD,EAAUC,GACvCH,EAAQE,GAAYhD,EAAKS,aAAauC,GACtChD,EAAKkD,aAAaF,EAAUC,IAG1B1C,EAAaC,WAAauC,EAAOH,EAAQ,OAAQrC,EAAaC,WAC9DD,EAAaG,aAAeqC,EAAOH,EAAQ,eAAgBrC,EAAaG,aACxEH,EAAaI,aAAeoC,EAAOH,EAAQ,SAAUrC,EAAaI,aAClEJ,EAAaK,eAAiBmC,EAAOH,EAAQ,iBAAkBrC,EAAaK,eAC5EL,EAAaM,aAAekC,EAAOH,EAAQ,eAAgBrC,EAAaM,aACxEN,EAAaO,iBAAmBiC,EAAOH,EAAQ,mBAAoBrC,EAAaO,iBAChFP,EAAaU,SAAW8B,EAAOH,EAAQ,UAAWrC,EAAaU,SAC/DV,EAAaQ,eAAiBgC,EAAOH,EAAQ,iBAAkBrC,EAAaQ,eAC5ER,EAAaS,gBAAkB+B,EAAOH,EAAQ,kBAAmBrC,EAAaS,gBAElFQ,EAAa,IAAIF,EAAqBsB,EAAQE"} \ No newline at end of file diff --git a/dist/editor/extensions/ext-eyedropper/ext-eyedropper.js b/dist/editor/extensions/ext-eyedropper/ext-eyedropper.js new file mode 100644 index 00000000..d8d62b64 --- /dev/null +++ b/dist/editor/extensions/ext-eyedropper/ext-eyedropper.js @@ -0,0 +1,11 @@ +function asyncGeneratorStep(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)} +/** + * @file ext-eyedropper.js + * + * @license MIT + * + * @copyright 2010 Jeff Schiller + * + */ +var e={name:"eyedropper",init:function init(e){var t=this;return function _asyncToGenerator(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function _next(e){asyncGeneratorStep(i,n,o,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep(i,n,o,_next,_throw,"throw",e)}_next(void 0)}))}}(regeneratorRuntime.mark((function _callee(){var r,n,o,i,a,s,c,l,u,p;return regeneratorRuntime.wrap((function _callee$(d){for(;;)switch(d.prev=d.next){case 0:return u=function _getStyle(e){if("eyedropper"!==s.getMode()){var t=i("#tool_eyedropper"),r=null;e.multiselected||!e.elems[0]||["svg","g","use"].includes(e.elems[0].nodeName)?t.addClass("disabled"):(r=e.elems[0],t.removeClass("disabled"),l.fillPaint=r.getAttribute("fill")||"black",l.fillOpacity=r.getAttribute("fill-opacity")||1,l.strokePaint=r.getAttribute("stroke"),l.strokeOpacity=r.getAttribute("stroke-opacity")||1,l.strokeWidth=r.getAttribute("stroke-width"),l.strokeDashArray=r.getAttribute("stroke-dasharray"),l.strokeLinecap=r.getAttribute("stroke-linecap"),l.strokeLinejoin=r.getAttribute("stroke-linejoin"),l.opacity=r.getAttribute("opacity")||1)}},r=t,d.next=4,import("./locale/".concat(r.curPrefs.lang,".js"));case 4:return n=d.sent,o=n.default,i=e.$,a=e.ChangeElementCommand,s=r.canvas,c=function addToHistory(e){s.undoMgr.addCommandToHistory(e)},l={fillPaint:"red",fillOpacity:1,strokePaint:"black",strokeOpacity:1,strokeWidth:5,strokeDashArray:null,opacity:1,strokeLinecap:"butt",strokeLinejoin:"miter"},p=[{id:"tool_eyedropper",icon:"eyedropper.png",type:"mode",events:{click:function click(){s.setMode("eyedropper")}}}],d.abrupt("return",{name:o.name,svgicons:"eyedropper-icon.xml",buttons:o.buttons.map((function(e,t){return Object.assign(p[t],e)})),selectedChanged:u,elementChanged:u,mouseDown:function mouseDown(e){if("eyedropper"===s.getMode()){var t=e.event.target;if(!["svg","g","use"].includes(t.nodeName)){var r={},n=function change(e,t,n){r[t]=e.getAttribute(t),e.setAttribute(t,n)};l.fillPaint&&n(t,"fill",l.fillPaint),l.fillOpacity&&n(t,"fill-opacity",l.fillOpacity),l.strokePaint&&n(t,"stroke",l.strokePaint),l.strokeOpacity&&n(t,"stroke-opacity",l.strokeOpacity),l.strokeWidth&&n(t,"stroke-width",l.strokeWidth),l.strokeDashArray&&n(t,"stroke-dasharray",l.strokeDashArray),l.opacity&&n(t,"opacity",l.opacity),l.strokeLinecap&&n(t,"stroke-linecap",l.strokeLinecap),l.strokeLinejoin&&n(t,"stroke-linejoin",l.strokeLinejoin),c(new a(t,r))}}}});case 9:case"end":return d.stop()}}),_callee)})))()}};export default e; +//# sourceMappingURL=ext-eyedropper.js.map diff --git a/dist/editor/extensions/ext-eyedropper/ext-eyedropper.js.map b/dist/editor/extensions/ext-eyedropper/ext-eyedropper.js.map new file mode 100644 index 00000000..ed9b2c39 --- /dev/null +++ b/dist/editor/extensions/ext-eyedropper/ext-eyedropper.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ext-eyedropper.js","sources":["../../../../src/editor/extensions/ext-eyedropper/ext-eyedropper.js"],"sourcesContent":["/**\n * @file ext-eyedropper.js\n *\n * @license MIT\n *\n * @copyright 2010 Jeff Schiller\n *\n */\n\nexport default {\n name: 'eyedropper',\n async init (S) {\n const svgEditor = this;\n // eslint-disable-next-line node/no-unsupported-features/es-syntax\n const {default: strings} = await import(`./locale/${svgEditor.curPrefs.lang}.js`);\n const {$, ChangeElementCommand} = S, // , svgcontent,\n // svgdoc = S.svgroot.parentNode.ownerDocument,\n svgCanvas = svgEditor.canvas,\n addToHistory = function (cmd) { svgCanvas.undoMgr.addCommandToHistory(cmd); },\n currentStyle = {\n fillPaint: 'red', fillOpacity: 1.0,\n strokePaint: 'black', strokeOpacity: 1.0,\n strokeWidth: 5, strokeDashArray: null,\n opacity: 1.0,\n strokeLinecap: 'butt',\n strokeLinejoin: 'miter'\n };\n\n /**\n *\n * @param {module:svgcanvas.SvgCanvas#event:ext_selectedChanged|module:svgcanvas.SvgCanvas#event:ext_elementChanged} opts\n * @returns {void}\n */\n function getStyle (opts) {\n // if we are in eyedropper mode, we don't want to disable the eye-dropper tool\n const mode = svgCanvas.getMode();\n if (mode === 'eyedropper') { return; }\n\n const tool = $('#tool_eyedropper');\n // enable-eye-dropper if one element is selected\n let elem = null;\n if (!opts.multiselected && opts.elems[0] &&\n !['svg', 'g', 'use'].includes(opts.elems[0].nodeName)\n ) {\n elem = opts.elems[0];\n tool.removeClass('disabled');\n // grab the current style\n currentStyle.fillPaint = elem.getAttribute('fill') || 'black';\n currentStyle.fillOpacity = elem.getAttribute('fill-opacity') || 1.0;\n currentStyle.strokePaint = elem.getAttribute('stroke');\n currentStyle.strokeOpacity = elem.getAttribute('stroke-opacity') || 1.0;\n currentStyle.strokeWidth = elem.getAttribute('stroke-width');\n currentStyle.strokeDashArray = elem.getAttribute('stroke-dasharray');\n currentStyle.strokeLinecap = elem.getAttribute('stroke-linecap');\n currentStyle.strokeLinejoin = elem.getAttribute('stroke-linejoin');\n currentStyle.opacity = elem.getAttribute('opacity') || 1.0;\n // disable eye-dropper tool\n } else {\n tool.addClass('disabled');\n }\n }\n\n const buttons = [\n {\n id: 'tool_eyedropper',\n icon: 'eyedropper.png',\n type: 'mode',\n events: {\n click () {\n svgCanvas.setMode('eyedropper');\n }\n }\n }\n ];\n\n return {\n name: strings.name,\n svgicons: 'eyedropper-icon.xml',\n buttons: strings.buttons.map((button, i) => {\n return Object.assign(buttons[i], button);\n }),\n\n // if we have selected an element, grab its paint and enable the eye dropper button\n selectedChanged: getStyle,\n elementChanged: getStyle,\n\n mouseDown (opts) {\n const mode = svgCanvas.getMode();\n if (mode === 'eyedropper') {\n const e = opts.event;\n const {target} = e;\n if (!['svg', 'g', 'use'].includes(target.nodeName)) {\n const changes = {};\n\n const change = function (elem, attrname, newvalue) {\n changes[attrname] = elem.getAttribute(attrname);\n elem.setAttribute(attrname, newvalue);\n };\n\n if (currentStyle.fillPaint) { change(target, 'fill', currentStyle.fillPaint); }\n if (currentStyle.fillOpacity) { change(target, 'fill-opacity', currentStyle.fillOpacity); }\n if (currentStyle.strokePaint) { change(target, 'stroke', currentStyle.strokePaint); }\n if (currentStyle.strokeOpacity) { change(target, 'stroke-opacity', currentStyle.strokeOpacity); }\n if (currentStyle.strokeWidth) { change(target, 'stroke-width', currentStyle.strokeWidth); }\n if (currentStyle.strokeDashArray) { change(target, 'stroke-dasharray', currentStyle.strokeDashArray); }\n if (currentStyle.opacity) { change(target, 'opacity', currentStyle.opacity); }\n if (currentStyle.strokeLinecap) { change(target, 'stroke-linecap', currentStyle.strokeLinecap); }\n if (currentStyle.strokeLinejoin) { change(target, 'stroke-linejoin', currentStyle.strokeLinejoin); }\n\n addToHistory(new ChangeElementCommand(target, changes));\n }\n }\n }\n };\n }\n};\n"],"names":["name","init","S","getStyle","opts","svgCanvas","getMode","tool","$","elem","multiselected","elems","includes","nodeName","addClass","removeClass","currentStyle","fillPaint","getAttribute","fillOpacity","strokePaint","strokeOpacity","strokeWidth","strokeDashArray","strokeLinecap","strokeLinejoin","opacity","svgEditor","_this","import","curPrefs","lang","strings","ChangeElementCommand","canvas","addToHistory","cmd","undoMgr","addCommandToHistory","buttons","id","icon","type","events","click","setMode","svgicons","map","button","i","Object","assign","selectedChanged","elementChanged","mouseDown","target","event","changes","change","attrname","newvalue","setAttribute"],"mappings":";;;;;;;;;AASA,MAAe,CACbA,KAAM,aACAC,mBAAMC,0WAsBDC,oGAAAA,qBAAUC,MAGJ,eADAC,EAAUC,eAGjBC,EAAOC,EAAE,oBAEXC,EAAO,KACNL,EAAKM,gBAAiBN,EAAKO,MAAM,IACnC,CAAC,MAAO,IAAK,OAAOC,SAASR,EAAKO,MAAM,GAAGE,UAgB5CN,EAAKO,SAAS,aAddL,EAAOL,EAAKO,MAAM,GAClBJ,EAAKQ,YAAY,YAEjBC,EAAaC,UAAYR,EAAKS,aAAa,SAAW,QACtDF,EAAaG,YAAcV,EAAKS,aAAa,iBAAmB,EAChEF,EAAaI,YAAcX,EAAKS,aAAa,UAC7CF,EAAaK,cAAgBZ,EAAKS,aAAa,mBAAqB,EACpEF,EAAaM,YAAcb,EAAKS,aAAa,gBAC7CF,EAAaO,gBAAkBd,EAAKS,aAAa,oBACjDF,EAAaQ,cAAgBf,EAAKS,aAAa,kBAC/CF,EAAaS,eAAiBhB,EAAKS,aAAa,mBAChDF,EAAaU,QAAUjB,EAAKS,aAAa,YAAc,KA3CrDS,EAAYC,WAEeC,0BAAmBF,EAAUG,SAASC,oCAAvDC,YACTxB,EAA2BN,EAA3BM,EAAGyB,EAAwB/B,EAAxB+B,qBAER5B,EAAYsB,EAAUO,OACtBC,EAAe,SAAfA,aAAyBC,GAAO/B,EAAUgC,QAAQC,oBAAoBF,IACtEpB,EAAe,CACbC,UAAW,MAAOE,YAAa,EAC/BC,YAAa,QAASC,cAAe,EACrCC,YAAa,EAAGC,gBAAiB,KACjCG,QAAS,EACTF,cAAe,OACfC,eAAgB,SAqCdc,EAAU,CACd,CACEC,GAAI,kBACJC,KAAM,iBACNC,KAAM,OACNC,OAAQ,CACNC,uBACEvC,EAAUwC,QAAQ,oCAMnB,CACL7C,KAAMgC,EAAQhC,KACd8C,SAAU,sBACVP,QAASP,EAAQO,QAAQQ,KAAI,SAACC,EAAQC,UAC7BC,OAAOC,OAAOZ,EAAQU,GAAID,MAInCI,gBAAiBjD,EACjBkD,eAAgBlD,EAEhBmD,6BAAWlD,MAEI,eADAC,EAAUC,UACI,KAElBiD,EADGnD,EAAKoD,MACRD,WACF,CAAC,MAAO,IAAK,OAAO3C,SAAS2C,EAAO1C,UAAW,KAC5C4C,EAAU,GAEVC,EAAS,SAATA,OAAmBjD,EAAMkD,EAAUC,GACvCH,EAAQE,GAAYlD,EAAKS,aAAayC,GACtClD,EAAKoD,aAAaF,EAAUC,IAG1B5C,EAAaC,WAAayC,EAAOH,EAAQ,OAAQvC,EAAaC,WAC9DD,EAAaG,aAAeuC,EAAOH,EAAQ,eAAgBvC,EAAaG,aACxEH,EAAaI,aAAesC,EAAOH,EAAQ,SAAUvC,EAAaI,aAClEJ,EAAaK,eAAiBqC,EAAOH,EAAQ,iBAAkBvC,EAAaK,eAC5EL,EAAaM,aAAeoC,EAAOH,EAAQ,eAAgBvC,EAAaM,aACxEN,EAAaO,iBAAmBmC,EAAOH,EAAQ,mBAAoBvC,EAAaO,iBAChFP,EAAaU,SAAWgC,EAAOH,EAAQ,UAAWvC,EAAaU,SAC/DV,EAAaQ,eAAiBkC,EAAOH,EAAQ,iBAAkBvC,EAAaQ,eAC5ER,EAAaS,gBAAkBiC,EAAOH,EAAQ,kBAAmBvC,EAAaS,gBAElFU,EAAa,IAAIF,EAAqBsB,EAAQE"} \ No newline at end of file diff --git a/dist/editor/extensions/ext-foreignobject.js b/dist/editor/extensions/ext-foreignobject.js deleted file mode 100644 index 252ffb14..00000000 --- a/dist/editor/extensions/ext-foreignobject.js +++ /dev/null @@ -1,11 +0,0 @@ -function _AwaitValue(e){this.wrapped=e}function _AsyncGenerator(e){var t,n;function resume(t,n){try{var r=e[t](n),o=r.value,i=o instanceof _AwaitValue;Promise.resolve(i?o.wrapped:o).then((function(e){i?resume("return"===t?"return":"next",e):settle(r.done?"return":"normal",e)}),(function(e){resume("throw",e)}))}catch(e){settle("throw",e)}}function settle(e,r){switch(e){case"return":t.resolve({value:r,done:!0});break;case"throw":t.reject(r);break;default:t.resolve({value:r,done:!1})}(t=t.next)?resume(t.key,t.arg):n=null}this._invoke=function send(e,r){return new Promise((function(o,i){var a={key:e,arg:r,resolve:o,reject:i,next:null};n?n=n.next=a:(t=n=a,resume(e,r))}))},"function"!=typeof e.return&&(this.return=void 0)}function asyncGeneratorStep(e,t,n,r,o,i,a){try{var c=e[i](a),s=c.value}catch(e){return void n(e)}c.done?t(s):Promise.resolve(s).then(r,o)}function _asyncToGenerator(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function _next(e){asyncGeneratorStep(i,r,o,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep(i,r,o,_next,_throw,"throw",e)}_next(void 0)}))}}"function"==typeof Symbol&&Symbol.asyncIterator&&(_AsyncGenerator.prototype[Symbol.asyncIterator]=function(){return this}),_AsyncGenerator.prototype.next=function(e){return this._invoke("next",e)},_AsyncGenerator.prototype.throw=function(e){return this._invoke("throw",e)},_AsyncGenerator.prototype.return=function(e){return this._invoke("return",e)}; -/** - * @file ext-foreignobject.js - * - * @license Apache-2.0 - * - * @copyright 2010 Jacques Distler, 2010 Alexis Deveria - * - */ -var e={name:"foreignobject",init:function init(e){var t=this;return _asyncToGenerator(regeneratorRuntime.mark((function _callee2(){var n,r,o,i,a,c,s,u,l,f,g,_,h,d,v,p,m,b,x,y;return regeneratorRuntime.wrap((function _callee2$(w){for(;;)switch(w.prev=w.next){case 0:return b=function _setAttr(e,t){c.changeSelectedAttribute(e,t),c.call("changed",_)},m=function _showForeignEditor(){var e=_[0];if(e&&!v){v=!0,g(!0),e.removeAttribute("fill");var t=c.svgToString(e,0);r("#svg_source_textarea").val(t),r("#svg_source_editor").fadeIn(),l(),r("#svg_source_textarea").focus()}},p=function _setForeignString(e){var t=_[0];try{var n=o(''+e+"");c.sanitizeSvg(n.documentElement),t.replaceWith(s.importNode(n.documentElement.firstChild,!0)),c.call("changed",[t]),c.clearSelection()}catch(e){return console.log(e),!1}return!0},g=function _toggleSourceButtons(e){r("#tool_source_save, #tool_source_cancel").toggle(!e),r("#foreign_save, #foreign_cancel").toggle(e)},f=function _showPanel(e){var t=r("#fc_rules");t.length||(t=r('').appendTo("head")),t.text(e?" #tool_topath { display: none !important; }":""),r("#foreignObject_panel").toggle(e)},n=t,r=e.$,o=e.text2xml,i=e.NS,a=e.importLocale,c=n.canvas,s=e.svgroot.parentNode.ownerDocument,w.next=11,a();case 11:return u=w.sent,l=function properlySourceSizeTextArea(){var e=r("#svg_source_container").height()-80;r("#svg_source_textarea").css("height",e)},v=!1,x=[{id:"tool_foreign",icon:"foreignobject-tool.png",type:"mode",events:{click:function click(){c.setMode("foreign")}}},{id:"edit_foreign",icon:"foreignobject-edit.png",type:"context",panel:"foreignObject_panel",events:{click:function click(){m()}}}],y=[{type:"input",panel:"foreignObject_panel",id:"foreign_width",size:3,events:{change:function change(){b("width",this.value)}}},{type:"input",panel:"foreignObject_panel",id:"foreign_height",events:{change:function change(){b("height",this.value)}}},{type:"input",panel:"foreignObject_panel",id:"foreign_font_size",size:2,defval:16,events:{change:function change(){b("font-size",this.value)}}}],w.abrupt("return",{name:u.name,svgicons:"foreignobject-icons.xml",buttons:u.buttons.map((function(e,t){return Object.assign(x[t],e)})),context_tools:u.contextTools.map((function(e,t){return Object.assign(y[t],e)})),callback:function callback(){r("#foreignObject_panel").hide();var e=function endChanges(){r("#svg_source_editor").hide(),v=!1,r("#svg_source_textarea").blur(),g(!1)};setTimeout((function(){r("#tool_source_save").clone().hide().attr("id","foreign_save").unbind().appendTo("#tool_source_back").click(_asyncToGenerator(regeneratorRuntime.mark((function _callee(){return regeneratorRuntime.wrap((function _callee$(t){for(;;)switch(t.prev=t.next){case 0:if(v){t.next=2;break}return t.abrupt("return");case 2:if(p(r("#svg_source_textarea").val())){t.next=11;break}return t.next=5,r.confirm("Errors found. Revert to original?");case 5:if(t.sent){t.next=8;break}return t.abrupt("return");case 8:e(),t.next=12;break;case 11:e();case 12:case"end":return t.stop()}}),_callee)})))),r("#tool_source_cancel").clone().hide().attr("id","foreign_cancel").unbind().appendTo("#tool_source_back").click((function(){e()}))}),3e3)},mouseDown:function mouseDown(e){if("foreign"===c.getMode()){h=!0,d=c.addSVGElementFromJson({element:"foreignObject",attr:{x:e.start_x,y:e.start_y,id:c.getNextId(),"font-size":16,width:"48",height:"20",style:"pointer-events:inherit"}});var t=s.createElementNS(i.MATH,"math");t.setAttributeNS(i.XMLNS,"xmlns",i.MATH),t.setAttribute("display","inline");var n=s.createElementNS(i.MATH,"mi");n.setAttribute("mathvariant","normal"),n.textContent="Φ";var r=s.createElementNS(i.MATH,"mo");r.textContent="∪";var o=s.createElementNS(i.MATH,"mi");return o.textContent="ℳ",t.append(n,r,o),d.append(t),{started:!0}}},mouseUp:function mouseUp(e){if("foreign"===c.getMode()&&h){var t=r(d).attr(["width","height"]),n="0"!==t.width||"0"!==t.height;return c.addToSelection([d],!0),{keep:n,element:d}}},selectedChanged:function selectedChanged(e){for(var t=(_=e.elems).length;t--;){var n=_[t];n&&"foreignObject"===n.tagName&&e.selectedElement&&!e.multiselected?(r("#foreign_font_size").val(n.getAttribute("font-size")),r("#foreign_width").val(n.getAttribute("width")),r("#foreign_height").val(n.getAttribute("height")),f(!0)):f(!1)}},elementChanged:function elementChanged(e){}});case 17:case"end":return w.stop()}}),_callee2)})))()}};export default e; -//# sourceMappingURL=ext-foreignobject.js.map diff --git a/dist/editor/extensions/ext-foreignobject.js.map b/dist/editor/extensions/ext-foreignobject.js.map deleted file mode 100644 index 66f3b8af..00000000 --- a/dist/editor/extensions/ext-foreignobject.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ext-foreignobject.js","sources":["../../../src/editor/extensions/ext-foreignobject.js"],"sourcesContent":["/**\n * @file ext-foreignobject.js\n *\n * @license Apache-2.0\n *\n * @copyright 2010 Jacques Distler, 2010 Alexis Deveria\n *\n */\n\nexport default {\n name: 'foreignobject',\n async init (S) {\n const svgEditor = this;\n const {$, text2xml, NS, importLocale} = S;\n const svgCanvas = svgEditor.canvas;\n const\n // {svgcontent} = S,\n // addElem = svgCanvas.addSVGElementFromJson,\n svgdoc = S.svgroot.parentNode.ownerDocument;\n const strings = await importLocale();\n\n const properlySourceSizeTextArea = function () {\n // TODO: remove magic numbers here and get values from CSS\n const height = $('#svg_source_container').height() - 80;\n $('#svg_source_textarea').css('height', height);\n };\n\n /**\n * @param {boolean} on\n * @returns {void}\n */\n function showPanel (on) {\n let fcRules = $('#fc_rules');\n if (!fcRules.length) {\n fcRules = $('').appendTo('head');\n }\n fcRules.text(!on ? '' : ' #tool_topath { display: none !important; }');\n $('#foreignObject_panel').toggle(on);\n }\n\n /**\n * @param {boolean} on\n * @returns {void}\n */\n function toggleSourceButtons (on) {\n $('#tool_source_save, #tool_source_cancel').toggle(!on);\n $('#foreign_save, #foreign_cancel').toggle(on);\n }\n\n let selElems,\n started,\n newFO,\n editingforeign = false;\n\n /**\n * This function sets the content of element elt to the input XML.\n * @param {string} xmlString - The XML text\n * @returns {boolean} This function returns false if the set was unsuccessful, true otherwise.\n */\n function setForeignString (xmlString) {\n const elt = selElems[0]; // The parent `Element` to append to\n try {\n // convert string into XML document\n const newDoc = text2xml('' + xmlString + '');\n // run it through our sanitizer to remove anything we do not support\n svgCanvas.sanitizeSvg(newDoc.documentElement);\n elt.replaceWith(svgdoc.importNode(newDoc.documentElement.firstChild, true));\n svgCanvas.call('changed', [elt]);\n svgCanvas.clearSelection();\n } catch (e) {\n // Todo: Surface error to user\n console.log(e); // eslint-disable-line no-console\n return false;\n }\n\n return true;\n }\n\n /**\n *\n * @returns {void}\n */\n function showForeignEditor () {\n const elt = selElems[0];\n if (!elt || editingforeign) { return; }\n editingforeign = true;\n toggleSourceButtons(true);\n elt.removeAttribute('fill');\n\n const str = svgCanvas.svgToString(elt, 0);\n $('#svg_source_textarea').val(str);\n $('#svg_source_editor').fadeIn();\n properlySourceSizeTextArea();\n $('#svg_source_textarea').focus();\n }\n\n /**\n * @param {string} attr\n * @param {string|Float} val\n * @returns {void}\n */\n function setAttr (attr, val) {\n svgCanvas.changeSelectedAttribute(attr, val);\n svgCanvas.call('changed', selElems);\n }\n\n const buttons = [{\n id: 'tool_foreign',\n icon: 'foreignobject-tool.png',\n type: 'mode',\n events: {\n click () {\n svgCanvas.setMode('foreign');\n }\n }\n }, {\n id: 'edit_foreign',\n icon: 'foreignobject-edit.png',\n type: 'context',\n panel: 'foreignObject_panel',\n events: {\n click () {\n showForeignEditor();\n }\n }\n }];\n\n const contextTools = [\n {\n type: 'input',\n panel: 'foreignObject_panel',\n id: 'foreign_width',\n size: 3,\n events: {\n change () {\n setAttr('width', this.value);\n }\n }\n }, {\n type: 'input',\n panel: 'foreignObject_panel',\n id: 'foreign_height',\n events: {\n change () {\n setAttr('height', this.value);\n }\n }\n }, {\n type: 'input',\n panel: 'foreignObject_panel',\n id: 'foreign_font_size',\n size: 2,\n defval: 16,\n events: {\n change () {\n setAttr('font-size', this.value);\n }\n }\n }\n ];\n\n return {\n name: strings.name,\n svgicons: 'foreignobject-icons.xml',\n buttons: strings.buttons.map((button, i) => {\n return Object.assign(buttons[i], button);\n }),\n context_tools: strings.contextTools.map((contextTool, i) => {\n return Object.assign(contextTools[i], contextTool);\n }),\n callback () {\n $('#foreignObject_panel').hide();\n\n const endChanges = function () {\n $('#svg_source_editor').hide();\n editingforeign = false;\n $('#svg_source_textarea').blur();\n toggleSourceButtons(false);\n };\n\n // TODO: Needs to be done after orig icon loads\n setTimeout(function () {\n // Create source save/cancel buttons\n /* const save = */ $('#tool_source_save').clone()\n .hide().attr('id', 'foreign_save').unbind()\n .appendTo('#tool_source_back').click(async function () {\n if (!editingforeign) { return; }\n\n if (!setForeignString($('#svg_source_textarea').val())) {\n const ok = await $.confirm('Errors found. Revert to original?');\n if (!ok) { return; }\n endChanges();\n } else {\n endChanges();\n }\n // setSelectMode();\n });\n\n /* const cancel = */ $('#tool_source_cancel').clone()\n .hide().attr('id', 'foreign_cancel').unbind()\n .appendTo('#tool_source_back').click(function () {\n endChanges();\n });\n }, 3000);\n },\n mouseDown (opts) {\n // const e = opts.event;\n if (svgCanvas.getMode() !== 'foreign') {\n return undefined;\n }\n started = true;\n newFO = svgCanvas.addSVGElementFromJson({\n element: 'foreignObject',\n attr: {\n x: opts.start_x,\n y: opts.start_y,\n id: svgCanvas.getNextId(),\n 'font-size': 16, // cur_text.font_size,\n width: '48',\n height: '20',\n style: 'pointer-events:inherit'\n }\n });\n const m = svgdoc.createElementNS(NS.MATH, 'math');\n m.setAttributeNS(NS.XMLNS, 'xmlns', NS.MATH);\n m.setAttribute('display', 'inline');\n const mi = svgdoc.createElementNS(NS.MATH, 'mi');\n mi.setAttribute('mathvariant', 'normal');\n mi.textContent = '\\u03A6';\n const mo = svgdoc.createElementNS(NS.MATH, 'mo');\n mo.textContent = '\\u222A';\n const mi2 = svgdoc.createElementNS(NS.MATH, 'mi');\n mi2.textContent = '\\u2133';\n m.append(mi, mo, mi2);\n newFO.append(m);\n return {\n started: true\n };\n },\n mouseUp (opts) {\n // const e = opts.event;\n if (svgCanvas.getMode() !== 'foreign' || !started) {\n return undefined;\n }\n const attrs = $(newFO).attr(['width', 'height']);\n const keep = (attrs.width !== '0' || attrs.height !== '0');\n svgCanvas.addToSelection([newFO], true);\n\n return {\n keep,\n element: newFO\n };\n },\n selectedChanged (opts) {\n // Use this to update the current selected elements\n selElems = opts.elems;\n\n let i = selElems.length;\n while (i--) {\n const elem = selElems[i];\n if (elem && elem.tagName === 'foreignObject') {\n if (opts.selectedElement && !opts.multiselected) {\n $('#foreign_font_size').val(elem.getAttribute('font-size'));\n $('#foreign_width').val(elem.getAttribute('width'));\n $('#foreign_height').val(elem.getAttribute('height'));\n showPanel(true);\n } else {\n showPanel(false);\n }\n } else {\n showPanel(false);\n }\n }\n },\n elementChanged (opts) {\n // const elem = opts.elems[0];\n }\n };\n }\n};\n"],"names":["name","init","S","showPanel","toggleSourceButtons","setForeignString","showForeignEditor","setAttr","attr","val","svgCanvas","changeSelectedAttribute","call","selElems","elt","editingforeign","removeAttribute","str","svgToString","$","fadeIn","properlySourceSizeTextArea","focus","xmlString","newDoc","text2xml","NS","SVG","XLINK","sanitizeSvg","documentElement","replaceWith","svgdoc","importNode","firstChild","clearSelection","e","console","log","on","toggle","fcRules","length","appendTo","text","svgEditor","_this","importLocale","canvas","svgroot","parentNode","ownerDocument","strings","height","css","buttons","id","icon","type","events","click","setMode","panel","contextTools","size","change","this","value","defval","svgicons","map","button","i","Object","assign","context_tools","contextTool","callback","hide","endChanges","blur","setTimeout","clone","unbind","confirm","mouseDown","opts","getMode","started","newFO","addSVGElementFromJson","element","x","start_x","y","start_y","getNextId","width","style","m","createElementNS","MATH","setAttributeNS","XMLNS","setAttribute","mi","textContent","mo","mi2","append","mouseUp","attrs","keep","addToSelection","selectedChanged","elems","elem","tagName","selectedElement","multiselected","getAttribute","elementChanged"],"mappings":"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"} \ No newline at end of file diff --git a/dist/editor/extensions/ext-foreignobject/ext-foreignobject.js b/dist/editor/extensions/ext-foreignobject/ext-foreignobject.js new file mode 100644 index 00000000..c96524de --- /dev/null +++ b/dist/editor/extensions/ext-foreignobject/ext-foreignobject.js @@ -0,0 +1,10 @@ +function asyncGeneratorStep(e,t,n,r,o,i,a){try{var c=e[i](a),s=c.value}catch(e){return void n(e)}c.done?t(s):Promise.resolve(s).then(r,o)}function _asyncToGenerator(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function _next(e){asyncGeneratorStep(i,r,o,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep(i,r,o,_next,_throw,"throw",e)}_next(void 0)}))}} +/** + * @file ext-foreignobject.js + * + * @license Apache-2.0 + * + * @copyright 2010 Jacques Distler, 2010 Alexis Deveria + * + */var e={name:"foreignobject",init:function init(e){var t=this;return _asyncToGenerator(regeneratorRuntime.mark((function _callee2(){var n,r,o,i,a,c,s,l,u,g,f,_,d,h,v,p,m,b,x,y;return regeneratorRuntime.wrap((function _callee2$(w){for(;;)switch(w.prev=w.next){case 0:return b=function _setAttr(e,t){a.changeSelectedAttribute(e,t),a.call("changed",_)},m=function _showForeignEditor(){var e=_[0];if(e&&!v){v=!0,f(!0),e.removeAttribute("fill");var t=a.svgToString(e,0);r("#svg_source_textarea").val(t),r("#svg_source_editor").fadeIn(),u(),r("#svg_source_textarea").focus()}},p=function _setForeignString(e){var t=_[0];try{var n=o(''+e+"");a.sanitizeSvg(n.documentElement),t.replaceWith(c.importNode(n.documentElement.firstChild,!0)),a.call("changed",[t]),a.clearSelection()}catch(e){return console.log(e),!1}return!0},f=function _toggleSourceButtons(e){r("#tool_source_save, #tool_source_cancel").toggle(!e),r("#foreign_save, #foreign_cancel").toggle(e)},g=function _showPanel(e){var t=r("#fc_rules");t.length||(t=r('').appendTo("head")),t.text(e?" #tool_topath { display: none !important; }":""),r("#foreignObject_panel").toggle(e)},n=t,r=e.$,o=e.text2xml,i=e.NS,a=n.canvas,c=e.svgroot.parentNode.ownerDocument,w.next=11,import("./locale/".concat(n.curPrefs.lang,".js"));case 11:return s=w.sent,l=s.default,u=function properlySourceSizeTextArea(){var e=r("#svg_source_container").height()-80;r("#svg_source_textarea").css("height",e)},v=!1,x=[{id:"tool_foreign",icon:"foreignobject-tool.png",type:"mode",events:{click:function click(){a.setMode("foreign")}}},{id:"edit_foreign",icon:"foreignobject-edit.png",type:"context",panel:"foreignObject_panel",events:{click:function click(){m()}}}],y=[{type:"input",panel:"foreignObject_panel",id:"foreign_width",size:3,events:{change:function change(){b("width",this.value)}}},{type:"input",panel:"foreignObject_panel",id:"foreign_height",events:{change:function change(){b("height",this.value)}}},{type:"input",panel:"foreignObject_panel",id:"foreign_font_size",size:2,defval:16,events:{change:function change(){b("font-size",this.value)}}}],w.abrupt("return",{name:l.name,svgicons:"foreignobject-icons.xml",buttons:l.buttons.map((function(e,t){return Object.assign(x[t],e)})),context_tools:l.contextTools.map((function(e,t){return Object.assign(y[t],e)})),callback:function callback(){r("#foreignObject_panel").hide();var e=function endChanges(){r("#svg_source_editor").hide(),v=!1,r("#svg_source_textarea").blur(),f(!1)};setTimeout((function(){r("#tool_source_save").clone().hide().attr("id","foreign_save").unbind().appendTo("#tool_source_back").click(_asyncToGenerator(regeneratorRuntime.mark((function _callee(){return regeneratorRuntime.wrap((function _callee$(t){for(;;)switch(t.prev=t.next){case 0:if(v){t.next=2;break}return t.abrupt("return");case 2:if(p(r("#svg_source_textarea").val())){t.next=11;break}return t.next=5,r.confirm("Errors found. Revert to original?");case 5:if(t.sent){t.next=8;break}return t.abrupt("return");case 8:e(),t.next=12;break;case 11:e();case 12:case"end":return t.stop()}}),_callee)})))),r("#tool_source_cancel").clone().hide().attr("id","foreign_cancel").unbind().appendTo("#tool_source_back").click((function(){e()}))}),3e3)},mouseDown:function mouseDown(e){if("foreign"===a.getMode()){d=!0,h=a.addSVGElementFromJson({element:"foreignObject",attr:{x:e.start_x,y:e.start_y,id:a.getNextId(),"font-size":16,width:"48",height:"20",style:"pointer-events:inherit"}});var t=c.createElementNS(i.MATH,"math");t.setAttributeNS(i.XMLNS,"xmlns",i.MATH),t.setAttribute("display","inline");var n=c.createElementNS(i.MATH,"mi");n.setAttribute("mathvariant","normal"),n.textContent="Φ";var r=c.createElementNS(i.MATH,"mo");r.textContent="∪";var o=c.createElementNS(i.MATH,"mi");return o.textContent="ℳ",t.append(n,r,o),h.append(t),{started:!0}}},mouseUp:function mouseUp(e){if("foreign"===a.getMode()&&d){var t=r(h).attr(["width","height"]),n="0"!==t.width||"0"!==t.height;return a.addToSelection([h],!0),{keep:n,element:h}}},selectedChanged:function selectedChanged(e){for(var t=(_=e.elems).length;t--;){var n=_[t];n&&"foreignObject"===n.tagName&&e.selectedElement&&!e.multiselected?(r("#foreign_font_size").val(n.getAttribute("font-size")),r("#foreign_width").val(n.getAttribute("width")),r("#foreign_height").val(n.getAttribute("height")),g(!0)):g(!1)}},elementChanged:function elementChanged(e){}});case 18:case"end":return w.stop()}}),_callee2)})))()}};export default e; +//# sourceMappingURL=ext-foreignobject.js.map diff --git a/dist/editor/extensions/ext-foreignobject/ext-foreignobject.js.map b/dist/editor/extensions/ext-foreignobject/ext-foreignobject.js.map new file mode 100644 index 00000000..9e601009 --- /dev/null +++ b/dist/editor/extensions/ext-foreignobject/ext-foreignobject.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ext-foreignobject.js","sources":["../../../../src/editor/extensions/ext-foreignobject/ext-foreignobject.js"],"sourcesContent":["/**\n * @file ext-foreignobject.js\n *\n * @license Apache-2.0\n *\n * @copyright 2010 Jacques Distler, 2010 Alexis Deveria\n *\n */\n\nexport default {\n name: 'foreignobject',\n async init (S) {\n const svgEditor = this;\n const {$, text2xml, NS} = S;\n const svgCanvas = svgEditor.canvas;\n const\n // {svgcontent} = S,\n // addElem = svgCanvas.addSVGElementFromJson,\n svgdoc = S.svgroot.parentNode.ownerDocument;\n // eslint-disable-next-line node/no-unsupported-features/es-syntax\n const {default: strings} = await import(`./locale/${svgEditor.curPrefs.lang}.js`);\n\n const properlySourceSizeTextArea = function () {\n // TODO: remove magic numbers here and get values from CSS\n const height = $('#svg_source_container').height() - 80;\n $('#svg_source_textarea').css('height', height);\n };\n\n /**\n * @param {boolean} on\n * @returns {void}\n */\n function showPanel (on) {\n let fcRules = $('#fc_rules');\n if (!fcRules.length) {\n fcRules = $('').appendTo('head');\n }\n fcRules.text(!on ? '' : ' #tool_topath { display: none !important; }');\n $('#foreignObject_panel').toggle(on);\n }\n\n /**\n * @param {boolean} on\n * @returns {void}\n */\n function toggleSourceButtons (on) {\n $('#tool_source_save, #tool_source_cancel').toggle(!on);\n $('#foreign_save, #foreign_cancel').toggle(on);\n }\n\n let selElems,\n started,\n newFO,\n editingforeign = false;\n\n /**\n * This function sets the content of element elt to the input XML.\n * @param {string} xmlString - The XML text\n * @returns {boolean} This function returns false if the set was unsuccessful, true otherwise.\n */\n function setForeignString (xmlString) {\n const elt = selElems[0]; // The parent `Element` to append to\n try {\n // convert string into XML document\n const newDoc = text2xml('' + xmlString + '');\n // run it through our sanitizer to remove anything we do not support\n svgCanvas.sanitizeSvg(newDoc.documentElement);\n elt.replaceWith(svgdoc.importNode(newDoc.documentElement.firstChild, true));\n svgCanvas.call('changed', [elt]);\n svgCanvas.clearSelection();\n } catch (e) {\n // Todo: Surface error to user\n console.log(e); // eslint-disable-line no-console\n return false;\n }\n\n return true;\n }\n\n /**\n *\n * @returns {void}\n */\n function showForeignEditor () {\n const elt = selElems[0];\n if (!elt || editingforeign) { return; }\n editingforeign = true;\n toggleSourceButtons(true);\n elt.removeAttribute('fill');\n\n const str = svgCanvas.svgToString(elt, 0);\n $('#svg_source_textarea').val(str);\n $('#svg_source_editor').fadeIn();\n properlySourceSizeTextArea();\n $('#svg_source_textarea').focus();\n }\n\n /**\n * @param {string} attr\n * @param {string|Float} val\n * @returns {void}\n */\n function setAttr (attr, val) {\n svgCanvas.changeSelectedAttribute(attr, val);\n svgCanvas.call('changed', selElems);\n }\n\n const buttons = [{\n id: 'tool_foreign',\n icon: 'foreignobject-tool.png',\n type: 'mode',\n events: {\n click () {\n svgCanvas.setMode('foreign');\n }\n }\n }, {\n id: 'edit_foreign',\n icon: 'foreignobject-edit.png',\n type: 'context',\n panel: 'foreignObject_panel',\n events: {\n click () {\n showForeignEditor();\n }\n }\n }];\n\n const contextTools = [\n {\n type: 'input',\n panel: 'foreignObject_panel',\n id: 'foreign_width',\n size: 3,\n events: {\n change () {\n setAttr('width', this.value);\n }\n }\n }, {\n type: 'input',\n panel: 'foreignObject_panel',\n id: 'foreign_height',\n events: {\n change () {\n setAttr('height', this.value);\n }\n }\n }, {\n type: 'input',\n panel: 'foreignObject_panel',\n id: 'foreign_font_size',\n size: 2,\n defval: 16,\n events: {\n change () {\n setAttr('font-size', this.value);\n }\n }\n }\n ];\n\n return {\n name: strings.name,\n svgicons: 'foreignobject-icons.xml',\n buttons: strings.buttons.map((button, i) => {\n return Object.assign(buttons[i], button);\n }),\n context_tools: strings.contextTools.map((contextTool, i) => {\n return Object.assign(contextTools[i], contextTool);\n }),\n callback () {\n $('#foreignObject_panel').hide();\n\n const endChanges = function () {\n $('#svg_source_editor').hide();\n editingforeign = false;\n $('#svg_source_textarea').blur();\n toggleSourceButtons(false);\n };\n\n // TODO: Needs to be done after orig icon loads\n setTimeout(function () {\n // Create source save/cancel buttons\n /* const save = */ $('#tool_source_save').clone()\n .hide().attr('id', 'foreign_save').unbind()\n .appendTo('#tool_source_back').click(async function () {\n if (!editingforeign) { return; }\n\n if (!setForeignString($('#svg_source_textarea').val())) {\n const ok = await $.confirm('Errors found. Revert to original?');\n if (!ok) { return; }\n endChanges();\n } else {\n endChanges();\n }\n // setSelectMode();\n });\n\n /* const cancel = */ $('#tool_source_cancel').clone()\n .hide().attr('id', 'foreign_cancel').unbind()\n .appendTo('#tool_source_back').click(function () {\n endChanges();\n });\n }, 3000);\n },\n mouseDown (opts) {\n // const e = opts.event;\n if (svgCanvas.getMode() !== 'foreign') {\n return undefined;\n }\n started = true;\n newFO = svgCanvas.addSVGElementFromJson({\n element: 'foreignObject',\n attr: {\n x: opts.start_x,\n y: opts.start_y,\n id: svgCanvas.getNextId(),\n 'font-size': 16, // cur_text.font_size,\n width: '48',\n height: '20',\n style: 'pointer-events:inherit'\n }\n });\n const m = svgdoc.createElementNS(NS.MATH, 'math');\n m.setAttributeNS(NS.XMLNS, 'xmlns', NS.MATH);\n m.setAttribute('display', 'inline');\n const mi = svgdoc.createElementNS(NS.MATH, 'mi');\n mi.setAttribute('mathvariant', 'normal');\n mi.textContent = '\\u03A6';\n const mo = svgdoc.createElementNS(NS.MATH, 'mo');\n mo.textContent = '\\u222A';\n const mi2 = svgdoc.createElementNS(NS.MATH, 'mi');\n mi2.textContent = '\\u2133';\n m.append(mi, mo, mi2);\n newFO.append(m);\n return {\n started: true\n };\n },\n mouseUp (opts) {\n // const e = opts.event;\n if (svgCanvas.getMode() !== 'foreign' || !started) {\n return undefined;\n }\n const attrs = $(newFO).attr(['width', 'height']);\n const keep = (attrs.width !== '0' || attrs.height !== '0');\n svgCanvas.addToSelection([newFO], true);\n\n return {\n keep,\n element: newFO\n };\n },\n selectedChanged (opts) {\n // Use this to update the current selected elements\n selElems = opts.elems;\n\n let i = selElems.length;\n while (i--) {\n const elem = selElems[i];\n if (elem && elem.tagName === 'foreignObject') {\n if (opts.selectedElement && !opts.multiselected) {\n $('#foreign_font_size').val(elem.getAttribute('font-size'));\n $('#foreign_width').val(elem.getAttribute('width'));\n $('#foreign_height').val(elem.getAttribute('height'));\n showPanel(true);\n } else {\n showPanel(false);\n }\n } else {\n showPanel(false);\n }\n }\n },\n elementChanged (opts) {\n // const elem = opts.elems[0];\n }\n };\n }\n};\n"],"names":["name","init","S","showPanel","toggleSourceButtons","setForeignString","showForeignEditor","setAttr","attr","val","svgCanvas","changeSelectedAttribute","call","selElems","elt","editingforeign","removeAttribute","str","svgToString","$","fadeIn","properlySourceSizeTextArea","focus","xmlString","newDoc","text2xml","NS","SVG","XLINK","sanitizeSvg","documentElement","replaceWith","svgdoc","importNode","firstChild","clearSelection","e","console","log","on","toggle","fcRules","length","appendTo","text","svgEditor","_this","canvas","svgroot","parentNode","ownerDocument","import","curPrefs","lang","strings","height","css","buttons","id","icon","type","events","click","setMode","panel","contextTools","size","change","this","value","defval","svgicons","map","button","i","Object","assign","context_tools","contextTool","callback","hide","endChanges","blur","setTimeout","clone","unbind","confirm","mouseDown","opts","getMode","started","newFO","addSVGElementFromJson","element","x","start_x","y","start_y","getNextId","width","style","m","createElementNS","MATH","setAttributeNS","XMLNS","setAttribute","mi","textContent","mo","mi2","append","mouseUp","attrs","keep","addToSelection","selectedChanged","elems","elem","tagName","selectedElement","multiselected","getAttribute","elementChanged"],"mappings":"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"} \ No newline at end of file diff --git a/dist/editor/extensions/ext-grid.js b/dist/editor/extensions/ext-grid.js deleted file mode 100644 index 14dbe570..00000000 --- a/dist/editor/extensions/ext-grid.js +++ /dev/null @@ -1,11 +0,0 @@ -function _AwaitValue(e){this.wrapped=e}function _AsyncGenerator(e){var t,n;function resume(t,n){try{var r=e[t](n),o=r.value,a=o instanceof _AwaitValue;Promise.resolve(a?o.wrapped:o).then((function(e){a?resume("return"===t?"return":"next",e):settle(r.done?"return":"normal",e)}),(function(e){resume("throw",e)}))}catch(e){settle("throw",e)}}function settle(e,r){switch(e){case"return":t.resolve({value:r,done:!0});break;case"throw":t.reject(r);break;default:t.resolve({value:r,done:!1})}(t=t.next)?resume(t.key,t.arg):n=null}this._invoke=function send(e,r){return new Promise((function(o,a){var i={key:e,arg:r,resolve:o,reject:a,next:null};n?n=n.next=i:(t=n=i,resume(e,r))}))},"function"!=typeof e.return&&(this.return=void 0)}function asyncGeneratorStep(e,t,n,r,o,a,i){try{var s=e[a](i),c=s.value}catch(e){return void n(e)}s.done?t(c):Promise.resolve(c).then(r,o)}"function"==typeof Symbol&&Symbol.asyncIterator&&(_AsyncGenerator.prototype[Symbol.asyncIterator]=function(){return this}),_AsyncGenerator.prototype.next=function(e){return this._invoke("next",e)},_AsyncGenerator.prototype.throw=function(e){return this._invoke("throw",e)},_AsyncGenerator.prototype.return=function(e){return this._invoke("return",e)}; -/** - * @file ext-grid.js - * - * @license Apache-2.0 - * - * @copyright 2010 Redou Mine, 2010 Alexis Deveria - * - */ -var e={name:"grid",init:function init(e){var t=this;return function _asyncToGenerator(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var a=e.apply(t,n);function _next(e){asyncGeneratorStep(a,r,o,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep(a,r,o,_next,_throw,"throw",e)}_next(void 0)}))}}(regeneratorRuntime.mark((function _callee(){var n,r,o,a,i,s,c,u,l,d,p,h,v,g,f,m,y,w,_,b,x,G;return regeneratorRuntime.wrap((function _callee$(k){for(;;)switch(k.prev=k.next){case 0:return x=function _gridUpdate(){g&&b(c.getZoom()),n("#canvasGrid").toggle(g),n("#view_grid").toggleClass("push_button_pressed tool_button")},b=function _updateGrid(e){var t=h[s.curConfig.baseUnit]*e,n=100/t,r=1;v.some((function(e){return r=e,n<=e}));var o=r*t;d.width=o,d.height=o;var a=d.getContext("2d"),i=.5,u=o/10;a.globalAlpha=.2,a.strokeStyle=s.curConfig.gridColor;for(var l=1;l<10;l++){var p=Math.round(u*l)+.5;a.moveTo(p,o),a.lineTo(p,0),a.moveTo(o,p),a.lineTo(0,p)}a.stroke(),a.beginPath(),a.globalAlpha=.5,a.moveTo(i,o),a.lineTo(i,0),a.moveTo(o,i),a.lineTo(0,i),a.stroke();var g=d.toDataURL("image/png");w.setAttribute("width",o),w.setAttribute("height",o),w.parentNode.setAttribute("width",o),w.parentNode.setAttribute("height",o),c.setHref(w,g)},n=e.$,r=e.NS,o=e.getTypeMap,a=e.importLocale,k.next=5,a();case 5:return i=k.sent,c=(s=t).canvas,u=document.getElementById("svgcanvas").ownerDocument,l=c.assignAttributes,d=document.createElement("canvas"),p=n("#canvasBackground"),h=o(),v=[.01,.1,1,10,100,1e3],g=s.curConfig.showGrid||!1,n(d).hide().appendTo("body"),f=u.createElementNS(r.SVG,"svg"),l(f,{id:"canvasGrid",width:"100%",height:"100%",x:0,y:0,overflow:"visible",display:"none"}),p.append(f),m=u.createElementNS(r.SVG,"defs"),y=u.createElementNS(r.SVG,"pattern"),l(y,{id:"gridpattern",patternUnits:"userSpaceOnUse",x:0,y:0,width:100,height:100}),w=u.createElementNS(r.SVG,"image"),l(w,{x:0,y:0,width:100,height:100}),y.append(w),m.append(y),n("#canvasGrid").append(m),_=u.createElementNS(r.SVG,"rect"),l(_,{width:"100%",height:"100%",x:0,y:0,"stroke-width":0,stroke:"none",fill:"url(#gridpattern)",style:"pointer-events: none; display:visible;"}),n("#canvasGrid").append(_),G=[{id:"view_grid",icon:"grid.png",type:"context",panel:"editor_panel",events:{click:function click(){s.curConfig.showGrid=g=!g,x()}}}],k.abrupt("return",{name:i.name,svgicons:"grid-icon.xml",zoomChanged:function zoomChanged(e){g&&b(e)},callback:function callback(){g&&x()},buttons:i.buttons.map((function(e,t){return Object.assign(G[t],e)}))});case 27:case"end":return k.stop()}}),_callee)})))()}};export default e; -//# sourceMappingURL=ext-grid.js.map diff --git a/dist/editor/extensions/ext-grid.js.map b/dist/editor/extensions/ext-grid.js.map deleted file mode 100644 index 7360daf7..00000000 --- a/dist/editor/extensions/ext-grid.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ext-grid.js","sources":["../../../src/editor/extensions/ext-grid.js"],"sourcesContent":["/**\n * @file ext-grid.js\n *\n * @license Apache-2.0\n *\n * @copyright 2010 Redou Mine, 2010 Alexis Deveria\n *\n */\n\nexport default {\n name: 'grid',\n async init ({$, NS, getTypeMap, importLocale}) {\n const strings = await importLocale();\n const svgEditor = this;\n const svgCanvas = svgEditor.canvas;\n const svgdoc = document.getElementById('svgcanvas').ownerDocument,\n {assignAttributes} = svgCanvas,\n hcanvas = document.createElement('canvas'),\n canvBG = $('#canvasBackground'),\n units = getTypeMap(), // Assumes prior `init()` call on `units.js` module\n intervals = [0.01, 0.1, 1, 10, 100, 1000];\n let showGrid = svgEditor.curConfig.showGrid || false;\n\n $(hcanvas).hide().appendTo('body');\n\n const canvasGrid = svgdoc.createElementNS(NS.SVG, 'svg');\n assignAttributes(canvasGrid, {\n id: 'canvasGrid',\n width: '100%',\n height: '100%',\n x: 0,\n y: 0,\n overflow: 'visible',\n display: 'none'\n });\n canvBG.append(canvasGrid);\n const gridDefs = svgdoc.createElementNS(NS.SVG, 'defs');\n // grid-pattern\n const gridPattern = svgdoc.createElementNS(NS.SVG, 'pattern');\n assignAttributes(gridPattern, {\n id: 'gridpattern',\n patternUnits: 'userSpaceOnUse',\n x: 0, // -(value.strokeWidth / 2), // position for strokewidth\n y: 0, // -(value.strokeWidth / 2), // position for strokewidth\n width: 100,\n height: 100\n });\n\n const gridimg = svgdoc.createElementNS(NS.SVG, 'image');\n assignAttributes(gridimg, {\n x: 0,\n y: 0,\n width: 100,\n height: 100\n });\n gridPattern.append(gridimg);\n gridDefs.append(gridPattern);\n $('#canvasGrid').append(gridDefs);\n\n // grid-box\n const gridBox = svgdoc.createElementNS(NS.SVG, 'rect');\n assignAttributes(gridBox, {\n width: '100%',\n height: '100%',\n x: 0,\n y: 0,\n 'stroke-width': 0,\n stroke: 'none',\n fill: 'url(#gridpattern)',\n style: 'pointer-events: none; display:visible;'\n });\n $('#canvasGrid').append(gridBox);\n\n /**\n *\n * @param {Float} zoom\n * @returns {void}\n */\n function updateGrid (zoom) {\n // TODO: Try this with elements, then compare performance difference\n const unit = units[svgEditor.curConfig.baseUnit]; // 1 = 1px\n const uMulti = unit * zoom;\n // Calculate the main number interval\n const rawM = 100 / uMulti;\n let multi = 1;\n intervals.some((num) => {\n multi = num;\n return rawM <= num;\n });\n const bigInt = multi * uMulti;\n\n // Set the canvas size to the width of the container\n hcanvas.width = bigInt;\n hcanvas.height = bigInt;\n const ctx = hcanvas.getContext('2d');\n const curD = 0.5;\n const part = bigInt / 10;\n\n ctx.globalAlpha = 0.2;\n ctx.strokeStyle = svgEditor.curConfig.gridColor;\n for (let i = 1; i < 10; i++) {\n const subD = Math.round(part * i) + 0.5;\n // const lineNum = (i % 2)?12:10;\n const lineNum = 0;\n ctx.moveTo(subD, bigInt);\n ctx.lineTo(subD, lineNum);\n ctx.moveTo(bigInt, subD);\n ctx.lineTo(lineNum, subD);\n }\n ctx.stroke();\n ctx.beginPath();\n ctx.globalAlpha = 0.5;\n ctx.moveTo(curD, bigInt);\n ctx.lineTo(curD, 0);\n\n ctx.moveTo(bigInt, curD);\n ctx.lineTo(0, curD);\n ctx.stroke();\n\n const datauri = hcanvas.toDataURL('image/png');\n gridimg.setAttribute('width', bigInt);\n gridimg.setAttribute('height', bigInt);\n gridimg.parentNode.setAttribute('width', bigInt);\n gridimg.parentNode.setAttribute('height', bigInt);\n svgCanvas.setHref(gridimg, datauri);\n }\n\n /**\n *\n * @returns {void}\n */\n function gridUpdate () {\n if (showGrid) {\n updateGrid(svgCanvas.getZoom());\n }\n $('#canvasGrid').toggle(showGrid);\n $('#view_grid').toggleClass('push_button_pressed tool_button');\n }\n const buttons = [{\n id: 'view_grid',\n icon: 'grid.png',\n type: 'context',\n panel: 'editor_panel',\n events: {\n click () {\n svgEditor.curConfig.showGrid = showGrid = !showGrid;\n gridUpdate();\n }\n }\n }];\n return {\n name: strings.name,\n svgicons: 'grid-icon.xml',\n\n zoomChanged (zoom) {\n if (showGrid) { updateGrid(zoom); }\n },\n callback () {\n if (showGrid) {\n gridUpdate();\n }\n },\n buttons: strings.buttons.map((button, i) => {\n return Object.assign(buttons[i], button);\n })\n };\n }\n};\n"],"names":["name","init","updateGrid","gridUpdate","showGrid","svgCanvas","getZoom","$","toggle","toggleClass","zoom","uMulti","units","svgEditor","curConfig","baseUnit","rawM","multi","intervals","some","num","bigInt","hcanvas","width","height","ctx","getContext","curD","part","globalAlpha","strokeStyle","gridColor","i","subD","Math","round","moveTo","lineTo","stroke","beginPath","datauri","toDataURL","gridimg","setAttribute","parentNode","setHref","NS","getTypeMap","importLocale","strings","_this","canvas","svgdoc","document","getElementById","ownerDocument","assignAttributes","createElement","canvBG","hide","appendTo","canvasGrid","createElementNS","SVG","id","x","y","overflow","display","append","gridDefs","gridPattern","patternUnits","gridBox","fill","style","buttons","icon","type","panel","events","click","svgicons","zoomChanged","callback","map","button","Object","assign"],"mappings":"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"} \ No newline at end of file diff --git a/dist/editor/extensions/ext-grid/ext-grid.js b/dist/editor/extensions/ext-grid/ext-grid.js new file mode 100644 index 00000000..b82e8f5f --- /dev/null +++ b/dist/editor/extensions/ext-grid/ext-grid.js @@ -0,0 +1,11 @@ +function asyncGeneratorStep(e,t,n,r,a,o,i){try{var c=e[o](i),s=c.value}catch(e){return void n(e)}c.done?t(s):Promise.resolve(s).then(r,a)} +/** + * @file ext-grid.js + * + * @license Apache-2.0 + * + * @copyright 2010 Redou Mine, 2010 Alexis Deveria + * + */ +var e={name:"grid",init:function init(e){var t=this;return function _asyncToGenerator(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var o=e.apply(t,n);function _next(e){asyncGeneratorStep(o,r,a,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep(o,r,a,_next,_throw,"throw",e)}_next(void 0)}))}}(regeneratorRuntime.mark((function _callee(){var n,r,a,o,i,c,s,d,u,l,p,g,h,v,m,f,w,b,_,y,G,S;return regeneratorRuntime.wrap((function _callee$(x){for(;;)switch(x.prev=x.next){case 0:return G=function _gridUpdate(){v&&y(s.getZoom()),n("#canvasGrid").toggle(v),n("#view_grid").toggleClass("push_button_pressed tool_button")},y=function _updateGrid(e){var t=g[o.curConfig.baseUnit]*e,n=100/t,r=1;h.some((function(e){return r=e,n<=e}));var a=r*t;l.width=a,l.height=a;var i=l.getContext("2d"),c=.5,d=a/10;i.globalAlpha=.2,i.strokeStyle=o.curConfig.gridColor;for(var u=1;u<10;u++){var p=Math.round(d*u)+.5;i.moveTo(p,a),i.lineTo(p,0),i.moveTo(a,p),i.lineTo(0,p)}i.stroke(),i.beginPath(),i.globalAlpha=.5,i.moveTo(c,a),i.lineTo(c,0),i.moveTo(a,c),i.lineTo(0,c),i.stroke();var v=l.toDataURL("image/png");b.setAttribute("width",a),b.setAttribute("height",a),b.parentNode.setAttribute("width",a),b.parentNode.setAttribute("height",a),s.setHref(b,v)},n=e.$,r=e.NS,a=e.getTypeMap,o=t,x.next=6,import("./locale/".concat(o.curPrefs.lang,".js"));case 6:return i=x.sent,c=i.default,s=o.canvas,d=document.getElementById("svgcanvas").ownerDocument,u=s.assignAttributes,l=document.createElement("canvas"),p=n("#canvasBackground"),g=a(),h=[.01,.1,1,10,100,1e3],v=o.curConfig.showGrid||!1,n(l).hide().appendTo("body"),m=d.createElementNS(r.SVG,"svg"),u(m,{id:"canvasGrid",width:"100%",height:"100%",x:0,y:0,overflow:"visible",display:"none"}),p.append(m),f=d.createElementNS(r.SVG,"defs"),w=d.createElementNS(r.SVG,"pattern"),u(w,{id:"gridpattern",patternUnits:"userSpaceOnUse",x:0,y:0,width:100,height:100}),b=d.createElementNS(r.SVG,"image"),u(b,{x:0,y:0,width:100,height:100}),w.append(b),f.append(w),n("#canvasGrid").append(f),_=d.createElementNS(r.SVG,"rect"),u(_,{width:"100%",height:"100%",x:0,y:0,"stroke-width":0,stroke:"none",fill:"url(#gridpattern)",style:"pointer-events: none; display:visible;"}),n("#canvasGrid").append(_),S=[{id:"view_grid",icon:"grid.png",type:"context",panel:"editor_panel",events:{click:function click(){o.curConfig.showGrid=v=!v,G()}}}],x.abrupt("return",{name:c.name,svgicons:"grid-icon.xml",zoomChanged:function zoomChanged(e){v&&y(e)},callback:function callback(){v&&G()},buttons:c.buttons.map((function(e,t){return Object.assign(S[t],e)}))});case 28:case"end":return x.stop()}}),_callee)})))()}};export default e; +//# sourceMappingURL=ext-grid.js.map diff --git a/dist/editor/extensions/ext-grid/ext-grid.js.map b/dist/editor/extensions/ext-grid/ext-grid.js.map new file mode 100644 index 00000000..c8801c95 --- /dev/null +++ b/dist/editor/extensions/ext-grid/ext-grid.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ext-grid.js","sources":["../../../../src/editor/extensions/ext-grid/ext-grid.js"],"sourcesContent":["/**\n * @file ext-grid.js\n *\n * @license Apache-2.0\n *\n * @copyright 2010 Redou Mine, 2010 Alexis Deveria\n *\n */\n\nexport default {\n name: 'grid',\n async init ({$, NS, getTypeMap}) {\n const svgEditor = this;\n // eslint-disable-next-line node/no-unsupported-features/es-syntax\n const {default: strings} = await import(`./locale/${svgEditor.curPrefs.lang}.js`);\n const svgCanvas = svgEditor.canvas;\n const svgdoc = document.getElementById('svgcanvas').ownerDocument,\n {assignAttributes} = svgCanvas,\n hcanvas = document.createElement('canvas'),\n canvBG = $('#canvasBackground'),\n units = getTypeMap(), // Assumes prior `init()` call on `units.js` module\n intervals = [0.01, 0.1, 1, 10, 100, 1000];\n let showGrid = svgEditor.curConfig.showGrid || false;\n\n $(hcanvas).hide().appendTo('body');\n\n const canvasGrid = svgdoc.createElementNS(NS.SVG, 'svg');\n assignAttributes(canvasGrid, {\n id: 'canvasGrid',\n width: '100%',\n height: '100%',\n x: 0,\n y: 0,\n overflow: 'visible',\n display: 'none'\n });\n canvBG.append(canvasGrid);\n const gridDefs = svgdoc.createElementNS(NS.SVG, 'defs');\n // grid-pattern\n const gridPattern = svgdoc.createElementNS(NS.SVG, 'pattern');\n assignAttributes(gridPattern, {\n id: 'gridpattern',\n patternUnits: 'userSpaceOnUse',\n x: 0, // -(value.strokeWidth / 2), // position for strokewidth\n y: 0, // -(value.strokeWidth / 2), // position for strokewidth\n width: 100,\n height: 100\n });\n\n const gridimg = svgdoc.createElementNS(NS.SVG, 'image');\n assignAttributes(gridimg, {\n x: 0,\n y: 0,\n width: 100,\n height: 100\n });\n gridPattern.append(gridimg);\n gridDefs.append(gridPattern);\n $('#canvasGrid').append(gridDefs);\n\n // grid-box\n const gridBox = svgdoc.createElementNS(NS.SVG, 'rect');\n assignAttributes(gridBox, {\n width: '100%',\n height: '100%',\n x: 0,\n y: 0,\n 'stroke-width': 0,\n stroke: 'none',\n fill: 'url(#gridpattern)',\n style: 'pointer-events: none; display:visible;'\n });\n $('#canvasGrid').append(gridBox);\n\n /**\n *\n * @param {Float} zoom\n * @returns {void}\n */\n function updateGrid (zoom) {\n // TODO: Try this with elements, then compare performance difference\n const unit = units[svgEditor.curConfig.baseUnit]; // 1 = 1px\n const uMulti = unit * zoom;\n // Calculate the main number interval\n const rawM = 100 / uMulti;\n let multi = 1;\n intervals.some((num) => {\n multi = num;\n return rawM <= num;\n });\n const bigInt = multi * uMulti;\n\n // Set the canvas size to the width of the container\n hcanvas.width = bigInt;\n hcanvas.height = bigInt;\n const ctx = hcanvas.getContext('2d');\n const curD = 0.5;\n const part = bigInt / 10;\n\n ctx.globalAlpha = 0.2;\n ctx.strokeStyle = svgEditor.curConfig.gridColor;\n for (let i = 1; i < 10; i++) {\n const subD = Math.round(part * i) + 0.5;\n // const lineNum = (i % 2)?12:10;\n const lineNum = 0;\n ctx.moveTo(subD, bigInt);\n ctx.lineTo(subD, lineNum);\n ctx.moveTo(bigInt, subD);\n ctx.lineTo(lineNum, subD);\n }\n ctx.stroke();\n ctx.beginPath();\n ctx.globalAlpha = 0.5;\n ctx.moveTo(curD, bigInt);\n ctx.lineTo(curD, 0);\n\n ctx.moveTo(bigInt, curD);\n ctx.lineTo(0, curD);\n ctx.stroke();\n\n const datauri = hcanvas.toDataURL('image/png');\n gridimg.setAttribute('width', bigInt);\n gridimg.setAttribute('height', bigInt);\n gridimg.parentNode.setAttribute('width', bigInt);\n gridimg.parentNode.setAttribute('height', bigInt);\n svgCanvas.setHref(gridimg, datauri);\n }\n\n /**\n *\n * @returns {void}\n */\n function gridUpdate () {\n if (showGrid) {\n updateGrid(svgCanvas.getZoom());\n }\n $('#canvasGrid').toggle(showGrid);\n $('#view_grid').toggleClass('push_button_pressed tool_button');\n }\n const buttons = [{\n id: 'view_grid',\n icon: 'grid.png',\n type: 'context',\n panel: 'editor_panel',\n events: {\n click () {\n svgEditor.curConfig.showGrid = showGrid = !showGrid;\n gridUpdate();\n }\n }\n }];\n return {\n name: strings.name,\n svgicons: 'grid-icon.xml',\n\n zoomChanged (zoom) {\n if (showGrid) { updateGrid(zoom); }\n },\n callback () {\n if (showGrid) {\n gridUpdate();\n }\n },\n buttons: strings.buttons.map((button, i) => {\n return Object.assign(buttons[i], button);\n })\n };\n }\n};\n"],"names":["name","init","updateGrid","gridUpdate","showGrid","svgCanvas","getZoom","$","toggle","toggleClass","zoom","uMulti","units","svgEditor","curConfig","baseUnit","rawM","multi","intervals","some","num","bigInt","hcanvas","width","height","ctx","getContext","curD","part","globalAlpha","strokeStyle","gridColor","i","subD","Math","round","moveTo","lineTo","stroke","beginPath","datauri","toDataURL","gridimg","setAttribute","parentNode","setHref","NS","getTypeMap","_this","import","curPrefs","lang","strings","canvas","svgdoc","document","getElementById","ownerDocument","assignAttributes","createElement","canvBG","hide","appendTo","canvasGrid","createElementNS","SVG","id","x","y","overflow","display","append","gridDefs","gridPattern","patternUnits","gridBox","fill","style","buttons","icon","type","panel","events","click","svgicons","zoomChanged","callback","map","button","Object","assign"],"mappings":"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"} \ No newline at end of file diff --git a/dist/editor/extensions/ext-helloworld.js b/dist/editor/extensions/ext-helloworld.js deleted file mode 100644 index 72819254..00000000 --- a/dist/editor/extensions/ext-helloworld.js +++ /dev/null @@ -1,11 +0,0 @@ -function _AwaitValue(e){this.wrapped=e}function _AsyncGenerator(e){var r,t;function resume(r,t){try{var n=e[r](t),o=n.value,a=o instanceof _AwaitValue;Promise.resolve(a?o.wrapped:o).then((function(e){a?resume("return"===r?"return":"next",e):settle(n.done?"return":"normal",e)}),(function(e){resume("throw",e)}))}catch(e){settle("throw",e)}}function settle(e,n){switch(e){case"return":r.resolve({value:n,done:!0});break;case"throw":r.reject(n);break;default:r.resolve({value:n,done:!1})}(r=r.next)?resume(r.key,r.arg):t=null}this._invoke=function send(e,n){return new Promise((function(o,a){var i={key:e,arg:n,resolve:o,reject:a,next:null};t?t=t.next=i:(r=t=i,resume(e,n))}))},"function"!=typeof e.return&&(this.return=void 0)}function asyncGeneratorStep(e,r,t,n,o,a,i){try{var u=e[a](i),l=u.value}catch(e){return void t(e)}u.done?r(l):Promise.resolve(l).then(n,o)}function _slicedToArray(e,r){return _arrayWithHoles(e)||function _iterableToArrayLimit(e,r){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var t=[],n=!0,o=!1,a=void 0;try{for(var i,u=e[Symbol.iterator]();!(n=(i=u.next()).done)&&(t.push(i.value),!r||t.length!==r);n=!0);}catch(e){o=!0,a=e}finally{try{n||null==u.return||u.return()}finally{if(o)throw a}}return t}(e,r)||_unsupportedIterableToArray(e,r)||_nonIterableRest()}function _arrayWithHoles(e){if(Array.isArray(e))return e}function _unsupportedIterableToArray(e,r){if(e){if("string"==typeof e)return _arrayLikeToArray(e,r);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(e,r):void 0}}function _arrayLikeToArray(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=new Array(r);t {\n text = text.replace('{' + prop + '}', val);\n });\n\n // Show the text using the custom alert function\n $.alert(text);\n }\n }\n };\n }\n};\n"],"names":["name","init","$","importLocale","strings","svgCanvas","_this","canvas","svgicons","buttons","id","icon","type","title","events","click","setMode","mouseDown","getMode","started","mouseUp","opts","zoom","getZoom","x","mouse_x","y","mouse_y","text","forEach","prop","val","replace","alert"],"mappings":";;;;;;;;;AAcA,MAAe,CACbA,KAAM,aACAC,qdAAOC,IAAAA,EAAGC,IAAAA,sBAEQA,kBAAhBC,SAEAC,EADYC,EACUC,yBACrB,CACLP,KAAMI,EAAQJ,KAGdQ,SAAU,sBAGVC,QAAS,CAAC,CAERC,GAAI,cAGJC,KAAM,iBAINC,KAAM,OAGNC,MAAOT,EAAQK,QAAQ,GAAGI,MAG1BC,OAAQ,CACNC,uBAIEV,EAAUW,QAAQ,mBAMxBC,kCAE8B,gBAAxBZ,EAAUa,gBAGL,CAACC,SAAS,IAOrBC,yBAASC,MAEqB,gBAAxBhB,EAAUa,UAA6B,KACnCI,EAAOjB,EAAUkB,UAGjBC,EAAIH,EAAKI,QAAUH,EACnBI,EAAIL,EAAKM,QAAUL,EAGpBM,EAAQxB,EAARwB,MAEH,CAAC,IAAKJ,GACN,CAAC,IAAKE,IACNG,SAAQ,sCAAEC,OAAMC,OAChBH,EAAOA,EAAKI,QAAQ,IAAMF,EAAO,IAAKC,MAIxC7B,EAAE+B,MAAML"} \ No newline at end of file diff --git a/dist/editor/extensions/ext-helloworld/ext-helloworld.js b/dist/editor/extensions/ext-helloworld/ext-helloworld.js new file mode 100644 index 00000000..46cbd3d5 --- /dev/null +++ b/dist/editor/extensions/ext-helloworld/ext-helloworld.js @@ -0,0 +1,10 @@ +function asyncGeneratorStep(r,e,t,n,o,a,i){try{var l=r[a](i),u=l.value}catch(r){return void t(r)}l.done?e(u):Promise.resolve(u).then(n,o)}function _slicedToArray(r,e){return function _arrayWithHoles(r){if(Array.isArray(r))return r}(r)||function _iterableToArrayLimit(r,e){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(r)))return;var t=[],n=!0,o=!1,a=void 0;try{for(var i,l=r[Symbol.iterator]();!(n=(i=l.next()).done)&&(t.push(i.value),!e||t.length!==e);n=!0);}catch(r){o=!0,a=r}finally{try{n||null==l.return||l.return()}finally{if(o)throw a}}return t}(r,e)||function _unsupportedIterableToArray(r,e){if(!r)return;if("string"==typeof r)return _arrayLikeToArray(r,e);var t=Object.prototype.toString.call(r).slice(8,-1);"Object"===t&&r.constructor&&(t=r.constructor.name);if("Map"===t||"Set"===t)return Array.from(r);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return _arrayLikeToArray(r,e)}(r,e)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")} +/** + * @file ext-helloworld.js + * + * @license MIT + * + * @copyright 2010 Alexis Deveria + * + */()}function _arrayLikeToArray(r,e){(null==e||e>r.length)&&(e=r.length);for(var t=0,n=new Array(e);t {\n text = text.replace('{' + prop + '}', val);\n });\n\n // Show the text using the custom alert function\n $.alert(text);\n }\n }\n };\n }\n};\n"],"names":["name","init","$","importLocale","svgEditor","_this","import","curPrefs","lang","strings","svgCanvas","canvas","svgicons","buttons","id","icon","type","title","events","click","setMode","mouseDown","getMode","started","mouseUp","opts","zoom","getZoom","x","mouse_x","y","mouse_y","text","forEach","prop","val","replace","alert"],"mappings":";;;;;;;;gIAcA,MAAe,CACbA,KAAM,aACAC,udAAOC,IAAAA,IAAGC,aACRC,EAAYC,WAEeC,0BAAmBF,EAAUG,SAASC,oCAAvDC,YACVC,EAAYN,EAAUO,yBACrB,CACLX,KAAMS,EAAQT,KAGdY,SAAU,sBAGVC,QAAS,CAAC,CAERC,GAAI,cAGJC,KAAM,iBAINC,KAAM,OAGNC,MAAOR,EAAQI,QAAQ,GAAGI,MAG1BC,OAAQ,CACNC,uBAIET,EAAUU,QAAQ,mBAMxBC,kCAE8B,gBAAxBX,EAAUY,gBAGL,CAACC,SAAS,IAOrBC,yBAASC,MAEqB,gBAAxBf,EAAUY,UAA6B,KACnCI,EAAOhB,EAAUiB,UAGjBC,EAAIH,EAAKI,QAAUH,EACnBI,EAAIL,EAAKM,QAAUL,EAGpBM,EAAQvB,EAARuB,MAEH,CAAC,IAAKJ,GACN,CAAC,IAAKE,IACNG,SAAQ,sCAAEC,OAAMC,OAChBH,EAAOA,EAAKI,QAAQ,IAAMF,EAAO,IAAKC,MAIxCjC,EAAEmC,MAAML"} \ No newline at end of file diff --git a/dist/editor/extensions/ext-imagelib.js b/dist/editor/extensions/ext-imagelib.js deleted file mode 100644 index 3fc01c9f..00000000 --- a/dist/editor/extensions/ext-imagelib.js +++ /dev/null @@ -1,11 +0,0 @@ -function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _AwaitValue(e){this.wrapped=e}function _AsyncGenerator(e){var t,r;function resume(t,r){try{var n=e[t](r),o=n.value,i=o instanceof _AwaitValue;Promise.resolve(i?o.wrapped:o).then((function(e){i?resume("return"===t?"return":"next",e):settle(n.done?"return":"normal",e)}),(function(e){resume("throw",e)}))}catch(e){settle("throw",e)}}function settle(e,n){switch(e){case"return":t.resolve({value:n,done:!0});break;case"throw":t.reject(n);break;default:t.resolve({value:n,done:!1})}(t=t.next)?resume(t.key,t.arg):r=null}this._invoke=function send(e,n){return new Promise((function(o,i){var a={key:e,arg:n,resolve:o,reject:i,next:null};r?r=r.next=a:(t=r=a,resume(e,n))}))},"function"!=typeof e.return&&(this.return=void 0)}function asyncGeneratorStep(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)}function _asyncToGenerator(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function _next(e){asyncGeneratorStep(i,n,o,_next,_throw,"next",e)}function _throw(e){asyncGeneratorStep(i,n,o,_next,_throw,"throw",e)}_next(void 0)}))}}"function"==typeof Symbol&&Symbol.asyncIterator&&(_AsyncGenerator.prototype[Symbol.asyncIterator]=function(){return this}),_AsyncGenerator.prototype.next=function(e){return this._invoke("next",e)},_AsyncGenerator.prototype.throw=function(e){return this._invoke("throw",e)},_AsyncGenerator.prototype.return=function(e){return this._invoke("return",e)}; -/** - * @file ext-imagelib.js - * - * @license MIT - * - * @copyright 2010 Alexis Deveria - * - */ -var e={name:"imagelib",init:function init(e){var t=this;return _asyncToGenerator(regeneratorRuntime.mark((function _callee2(){var r,n,o,i,a,s,c,u,p,l,d,m,b,g,h,f,v,w,x,_,y,k,S;return regeneratorRuntime.wrap((function _callee2$(A){for(;;)switch(A.prev=A.next){case 0:return k=function _showBrowser(){var e=r("#imgbrowse");if(e.length)r("#imgbrowse_holder").show();else{r("
").insertAfter("#svg_docprops"),e=r("#imgbrowse");var t=a.select_lib,n=r("
    ").appendTo(e),o=r('',ur=fb.open();if(null!==ur&&(ur.document.write(cr),ur.document.title=tr.filename),ur||"undefined"==typeof safari)return ur;break;case"datauri":case"dataurl":return fb.document.location.href=this.output("datauristring",tr);default:return null}})),pi=function De(er){return!0===Array.isArray(ca)&&ca.indexOf(er)>-1};switch(nr){case"pt":Wn=1;break;case"mm":Wn=72/25.4;break;case"cm":Wn=72/2.54;break;case"in":Wn=72;break;case"px":Wn=1==pi("px_scaling")?.75:96/72;break;case"pc":case"em":Wn=12;break;case"ex":Wn=6;break;default:throw new Error("Invalid unit: "+nr)}Fr(),Lr();var Ai=hr.__private__.getPageInfo=hr.getPageInfo=function(er){if(isNaN(er)||er%1!=0)throw new Error("Invalid argument passed to jsPDF.getPageInfo");return{objId:sa[er].objId,pageNumber:er,pageContext:sa[er]}},fi=hr.__private__.getPageInfoByObjId=function(er){if(isNaN(er)||er%1!=0)throw new Error("Invalid argument passed to jsPDF.getPageInfoByObjId");for(var tr in sa)if(sa[tr].objId===er)break;return Ai(tr)},gi=hr.__private__.getCurrentPageInfo=hr.getCurrentPageInfo=function(){return{objId:sa[Ir].objId,pageNumber:Ir,pageContext:sa[Ir]}};hr.addPage=function(){return ei.apply(this,arguments),this},hr.setPage=function(){return ri.apply(this,arguments),qr.call(this,Gr[Ir]),this},hr.insertPage=function(er){return this.addPage(),this.movePage(Ir,er),this},hr.movePage=function(er,tr){var rr,nr;if(er>tr){rr=Gr[er],nr=sa[er];for(var ar=er;ar>tr;ar--)Gr[ar]=Gr[ar-1],sa[ar]=sa[ar-1];Gr[tr]=rr,sa[tr]=nr,this.setPage(tr)}else if(er0&&("string"==typeof er?er=Ar.splitTextToSize(er,ur):"[object Array]"===Object.prototype.toString.call(er)&&(er=Ar.splitTextToSize(er.join(" "),ur))),ir={text:er,x:tr,y:rr,options:nr,mutex:{pdfEscape:$a,activeFontKey:Kn,fonts:$n,activeFontSize:$r}},la.publish("preProcessText",ir),er=ir.text,sr=(nr=ir.options).angle,pr instanceof pa==0&&sr&&"number"==typeof sr){sr*=Math.PI/180,0===nr.rotationDirection&&(sr=-sr),_r===mr.ADVANCED&&(sr=-sr);var Pr=Math.cos(sr),Fr=Math.sin(sr);pr=new pa(Pr,Fr,-Fr,Pr,0,0)}else sr&&sr instanceof pa&&(pr=sr);_r!==mr.ADVANCED||pr||(pr=fa),void 0!==(cr=nr.charSpace||Gi)&&(gr+=vr(kr(cr))+" Tc\n",this.setCharSpace(this.getCharSpace()||0)),nr.lang;var Ur=-1,Ir=void 0!==nr.renderingMode?nr.renderingMode:nr.stroke,Rr=Ar.internal.getCurrentPageInfo().pageContext;switch(Ir){case 0:case!1:case"fill":Ur=0;break;case 1:case!0:case"stroke":Ur=1;break;case 2:case"fillThenStroke":Ur=2;break;case 3:case"invisible":Ur=3;break;case 4:case"fillAndAddForClipping":Ur=4;break;case 5:case"strokeAndAddPathForClipping":Ur=5;break;case 6:case"fillThenStrokeAndAddToPathForClipping":Ur=6;break;case 7:case"addToPathForClipping":Ur=7}var Mr=void 0!==Rr.usedRenderingMode?Rr.usedRenderingMode:-1;-1!==Ur?gr+=Ur+" Tr\n":-1!==Mr&&(gr+="0 Tr\n"),-1!==Ur&&(Rr.usedRenderingMode=Ur),lr=nr.align||"left";var Qr,Or=$r*wr,Dr=Ar.internal.pageSize.getWidth(),jr=$n[Kn];cr=nr.charSpace||Gi,ur=nr.maxWidth||0,hr={};var Hr=[];if("[object Array]"===Object.prototype.toString.call(er)){var Gr;or=w(er),"left"!==lr&&(Qr=or.map((function(er){return Ar.getStringUnitWidth(er,{font:jr,charSpace:cr,fontSize:$r,doKerning:!1})*$r/xr})));var zr,Vr=0;if("right"===lr){tr-=Qr[0],er=[],Nr=or.length;for(var Kr=0;Kr":")"),Tn=parseFloat(or[Xn][1]),Qn=parseFloat(or[Xn][2]);break;case Hn:Dn=(br?"<":"(")+or[Xn]+(br?">":")"),Tn=Ii(tr),Qn=Ri(rr)}void 0!==Hr&&void 0!==Hr[Xn]&&(Vn=Hr[Xn]+" Tw\n"),0===Xn?er.push(Vn+Wn(Tn,Qn,pr)+Dn):zn===Hn?er.push(Vn+Dn):zn===Gn&&er.push(Vn+Wn(Tn,Qn,pr)+Dn)}er=zn===Hn?er.join(" Tj\nT* "):er.join(" Tj\n"),er+=" Tj\n";var Yn="BT\n/";return Yn+=Kn+" "+$r+" Tf\n",Yn+=vr($r*wr)+" TL\n",Yn+=ji+"\n",Yn+=gr,Yn+=er,Wr(Yn+="ET"),dr[Kn]=!0,Ar};var mi=hr.__private__.clip=hr.clip=function(er){return Wr("evenodd"===er?"W*":"W"),this};hr.clipEvenOdd=function(){return mi("evenodd")},hr.__private__.discardPath=hr.discardPath=function(){return Wr("n"),this};var _i=hr.__private__.isValidStyle=function(er){var tr=!1;return-1!==[void 0,null,"S","D","F","DF","FD","f","f*","B","B*","n"].indexOf(er)&&(tr=!0),tr};hr.__private__.setDefaultPathOperation=hr.setDefaultPathOperation=function(er){return _i(er)&&(cr=er),this};var vi=hr.__private__.getStyle=hr.getStyle=function(er){var tr=cr;switch(er){case"D":case"S":tr="S";break;case"F":tr="f";break;case"FD":case"DF":tr="B";break;case"f":case"f*":case"B":case"B*":tr=er}return tr},yi=hr.close=function(){return Wr("h"),this};hr.stroke=function(){return Wr("S"),this},hr.fill=function(er){return bi("f",er),this},hr.fillEvenOdd=function(er){return bi("f*",er),this},hr.fillStroke=function(er){return bi("B",er),this},hr.fillStrokeEvenOdd=function(er){return bi("B*",er),this};var bi=function Je(er,tr){"object"==_typeof(tr)?xi(tr,er):Wr(er)},wi=function Xe(er){null===er||_r===mr.ADVANCED&&void 0===er||(er=vi(er),Wr(er))};function Ke(er,tr,rr,nr,ar){var ir=new p(tr||this.boundingBox,rr||this.xStep,nr||this.yStep,this.gState,ar||this.matrix);ir.stream=this.stream;var or=er+"$$"+this.cloneIndex+++"$$";return ga(or,ir),ir}var xi=function Ze(er,tr){var rr=ra[er.key],nr=ta[rr];if(nr instanceof d)Wr("q"),Wr(ki(tr)),nr.gState&&hr.setGState(nr.gState),Wr(er.matrix.toString()+" cm"),Wr("/"+rr+" sh"),Wr("Q");else if(nr instanceof p){var ar=new pa(1,0,0,-1,0,ro());er.matrix&&(ar=ar.multiply(er.matrix||fa),rr=Ke.call(nr,er.key,er.boundingBox,er.xStep,er.yStep,ar).id),Wr("q"),Wr("/Pattern cs"),Wr("/"+rr+" scn"),nr.gState&&hr.setGState(nr.gState),Wr(tr),Wr("Q")}},ki=function $e(er){switch(er){case"f":case"F":return"W n";case"f*":return"W* n";case"B":return"W S";case"B*":return"W* S";case"S":return"W S";case"n":return"W n"}},Si=hr.moveTo=function(er,tr){return Wr(vr(kr(er))+" "+vr(Cr(tr))+" m"),this},Ci=hr.lineTo=function(er,tr){return Wr(vr(kr(er))+" "+vr(Cr(tr))+" l"),this},Bi=hr.curveTo=function(er,tr,rr,nr,ar,ir){return Wr([vr(kr(er)),vr(Cr(tr)),vr(kr(rr)),vr(Cr(nr)),vr(kr(ar)),vr(Cr(ir)),"c"].join(" ")),this};hr.__private__.line=hr.line=function(er,tr,rr,nr,ar){if(isNaN(er)||isNaN(tr)||isNaN(rr)||isNaN(nr)||!_i(ar))throw new Error("Invalid arguments passed to jsPDF.line");return _r===mr.COMPAT?this.lines([[rr-er,nr-tr]],er,tr,[1,1],ar||"S"):this.lines([[rr-er,nr-tr]],er,tr,[1,1]).stroke()},hr.__private__.lines=hr.lines=function(er,tr,rr,nr,ar,ir){var or,sr,lr,cr,ur,dr,hr,pr,Ar,fr,gr,mr;if("number"==typeof er&&(mr=rr,rr=tr,tr=er,er=mr),nr=nr||[1,1],ir=ir||!1,isNaN(tr)||isNaN(rr)||!Array.isArray(er)||!Array.isArray(nr)||!_i(ar)||"boolean"!=typeof ir)throw new Error("Invalid arguments passed to jsPDF.lines");for(Si(tr,rr),or=nr[0],sr=nr[1],cr=er.length,fr=tr,gr=rr,lr=0;lr=0)){if(this.hasOwnProperty(tr)&&!er.hasOwnProperty(tr))return!1;if(this[tr]!==er[tr])return!1;nr++}for(tr in er)er.hasOwnProperty(tr)&&rr.indexOf(tr)<0&&nr--;return 0===nr},g.API={events:[]},g.version="2.1.0";var yb,bb=g.API,wb=1,xb=function y(er){return er.replace(/\\/g,"\\\\").replace(/\(/g,"\\(").replace(/\)/g,"\\)")},kb=function w(er){return er.replace(/\\\\/g,"\\").replace(/\\\(/g,"(").replace(/\\\)/g,")")},Sb=function N(er){return er.toFixed(2)},Cb=function L(er){return er.toFixed(5)};bb.__acroform__={};var Bb=function x(er,tr){er.prototype=Object.create(tr.prototype),er.prototype.constructor=er},Eb=function A(er){return er*wb},Nb=function _(er){var tr=new $b,rr=hw.internal.getHeight(er)||0,nr=hw.internal.getWidth(er)||0;return tr.BBox=[0,0,Number(Sb(nr)),Number(Sb(rr))],tr},Lb=bb.__acroform__.setBit=function(er,tr){if(er=er||0,tr=tr||0,isNaN(er)||isNaN(tr))throw new Error("Invalid arguments passed to jsPDF.API.__acroform__.setBit");return er|1<0;){tr="",ir--;var cr,ur,dr=Ob("3",er,ir).height,hr=er.multiline?or-ir:(or-dr)/2,pr=hr+=2,Ar=0,fr=0;if(ir<=0){tr="(...) Tj\n",tr+="% Width of Text: "+Ob(tr,er,ir=12).width+", FieldWidth:"+sr+"\n";break}var gr="",mr=0;for(var _r in ar)if(ar.hasOwnProperty(_r)){gr=" "==(gr+=ar[_r]+" ").substr(gr.length-1)?gr.substr(0,gr.length-1):gr;var vr=parseInt(_r),yr=lr(vr,gr,ir),br=_r>=ar.length-1;if(yr&&!br){gr+=" ";continue}if(yr||br){if(br)fr=vr;else if(er.multiline&&(dr+2)*(mr+2)+2>or)continue e}else{if(!er.multiline)continue e;if((dr+2)*(mr+2)+2>or)continue e;fr=vr}for(var wr="",xr=Ar;xr<=fr;xr++)wr+=ar[xr]+" ";switch(wr=" "==wr.substr(wr.length-1)?wr.substr(0,wr.length-1):wr,ur=Ob(wr,er,ir).width,er.textAlign){case"right":cr=sr-ur-2;break;case"center":cr=(sr-ur)/2;break;case"left":default:cr=2}tr+=Sb(cr)+" "+Sb(pr)+" Td\n",tr+="("+xb(wr)+") Tj\n",tr+=-Sb(cr)+" 0 Td\n",pr=-(ir+2),ur=0,Ar=fr+1,mr++,gr=""}break}return nr.text=tr,nr.fontSize=ir,nr},Ob=function M(er,tr,rr){var nr=yb.internal.getFont(tr.fontName,tr.fontStyle),ar=yb.getStringUnitWidth(er,{font:nr,fontSize:parseFloat(rr),charSpace:0})*parseFloat(rr);return{height:yb.getStringUnitWidth("3",{font:nr,fontSize:parseFloat(rr),charSpace:0})*parseFloat(rr)*1.5,width:ar}},Db={fields:[],xForms:[],acroFormDictionaryRoot:null,printedOut:!1,internal:null,isInitialized:!1},jb=function q(){yb.internal.acroformPlugin.acroFormDictionaryRoot.objId=void 0;var er=yb.internal.acroformPlugin.acroFormDictionaryRoot.Fields;for(var tr in er)if(er.hasOwnProperty(tr)){var rr=er[tr];rr.objId=void 0,rr.hasAnnotation&&Gb.call(yb,rr)}},Hb=function R(er){yb.internal.acroformPlugin.printedOut&&(yb.internal.acroformPlugin.printedOut=!1,yb.internal.acroformPlugin.acroFormDictionaryRoot=null),yb.internal.acroformPlugin.acroFormDictionaryRoot||Wb.call(yb),yb.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(er)},Gb=function T(er){var tr={type:"reference",object:er};void 0===yb.internal.getPageInfo(er.page).pageContext.annotations.find((function(er){return er.type===tr.type&&er.object===tr.object}))&&yb.internal.getPageInfo(er.page).pageContext.annotations.push(tr)},zb=function D(){if(void 0===yb.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error("putCatalogCallback: Root missing.");yb.internal.write("/AcroForm "+yb.internal.acroformPlugin.acroFormDictionaryRoot.objId+" 0 R")},Vb=function U(){yb.internal.events.unsubscribe(yb.internal.acroformPlugin.acroFormDictionaryRoot._eventID),delete yb.internal.acroformPlugin.acroFormDictionaryRoot._eventID,yb.internal.acroformPlugin.printedOut=!0},Kb=function z(er){var tr=!er;for(var rr in er||(yb.internal.newObjectDeferredBegin(yb.internal.acroformPlugin.acroFormDictionaryRoot.objId,!0),yb.internal.acroformPlugin.acroFormDictionaryRoot.putStream()),er=er||yb.internal.acroformPlugin.acroFormDictionaryRoot.Kids)if(er.hasOwnProperty(rr)){var nr=er[rr],ar=[],ir=nr.Rect;if(nr.Rect&&(nr.Rect=Rb.call(this,nr.Rect)),yb.internal.newObjectDeferredBegin(nr.objId,!0),nr.DA=hw.createDefaultAppearanceStream(nr),"object"==_typeof(nr)&&"function"==typeof nr.getKeyValueListForStream&&(ar=nr.getKeyValueListForStream()),nr.Rect=ir,nr.hasAppearanceStream&&!nr.appearanceStreamContent){var or=Mb.call(this,nr);ar.push({key:"AP",value:"<>"}),yb.internal.acroformPlugin.xForms.push(or)}if(nr.appearanceStreamContent){var sr="";for(var lr in nr.appearanceStreamContent)if(nr.appearanceStreamContent.hasOwnProperty(lr)){var cr=nr.appearanceStreamContent[lr];if(sr+="/"+lr+" ",sr+="<<",Object.keys(cr).length>=1||Array.isArray(cr)){for(var rr in cr)if(cr.hasOwnProperty(rr)){var ur=cr[rr];"function"==typeof ur&&(ur=ur.call(this,nr)),sr+="/"+rr+" "+ur+" ",yb.internal.acroformPlugin.xForms.indexOf(ur)>=0||yb.internal.acroformPlugin.xForms.push(ur)}}else"function"==typeof(ur=cr)&&(ur=ur.call(this,nr)),sr+="/"+rr+" "+ur,yb.internal.acroformPlugin.xForms.indexOf(ur)>=0||yb.internal.acroformPlugin.xForms.push(ur);sr+=">>"}ar.push({key:"AP",value:"<<\n"+sr+">>"})}yb.internal.putStream({additionalKeyValues:ar}),yb.internal.out("endobj")}tr&&qb.call(this,yb.internal.acroformPlugin.xForms)},qb=function H(er){for(var tr in er)if(er.hasOwnProperty(tr)){var rr=tr,nr=er[tr];yb.internal.newObjectDeferredBegin(nr&&nr.objId,!0),"object"==_typeof(nr)&&"function"==typeof nr.putStream&&nr.putStream(),delete er[rr]}},Wb=function W(){if(void 0!==this.internal&&(void 0===this.internal.acroformPlugin||!1===this.internal.acroformPlugin.isInitialized)){if(yb=this,ew.FieldNum=0,this.internal.acroformPlugin=JSON.parse(JSON.stringify(Db)),this.internal.acroformPlugin.acroFormDictionaryRoot)throw new Error("Exception while creating AcroformDictionary");wb=yb.internal.scaleFactor,yb.internal.acroformPlugin.acroFormDictionaryRoot=new Zb,yb.internal.acroformPlugin.acroFormDictionaryRoot._eventID=yb.internal.events.subscribe("postPutResources",Vb),yb.internal.events.subscribe("buildDocument",jb),yb.internal.events.subscribe("putCatalog",zb),yb.internal.events.subscribe("postPutPages",Kb),yb.internal.acroformPlugin.isInitialized=!0}},Xb=bb.__acroform__.arrayToPdfArray=function(er){if(Array.isArray(er)){for(var tr="[",rr=0;rr0?tr:void 0}}),Object.defineProperty(this,"Fields",{enumerable:!1,configurable:!1,get:function get(){return tr}}),Object.defineProperty(this,"DA",{enumerable:!1,configurable:!1,get:function get(){if(er)return"("+er+")"},set:function set(tr){er=tr}})};Bb(Zb,Jb);var ew=function K(){Jb.call(this);var er=4;Object.defineProperty(this,"F",{enumerable:!1,configurable:!1,get:function get(){return er},set:function set(tr){if(isNaN(tr))throw new Error('Invalid value "'+tr+'" for attribute F supplied.');er=tr}}),Object.defineProperty(this,"showWhenPrinted",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(er,3))},set:function set(tr){!0===Boolean(tr)?this.F=Ub(er,3):this.F=Ib(er,3)}});var tr=0;Object.defineProperty(this,"Ff",{enumerable:!1,configurable:!1,get:function get(){return tr},set:function set(er){if(isNaN(er))throw new Error('Invalid value "'+er+'" for attribute Ff supplied.');tr=er}});var rr=[];Object.defineProperty(this,"Rect",{enumerable:!1,configurable:!1,get:function get(){if(0!==rr.length)return rr},set:function set(er){rr=void 0!==er?er:[]}}),Object.defineProperty(this,"x",{enumerable:!0,configurable:!0,get:function get(){return!rr||isNaN(rr[0])?0:rr[0]},set:function set(er){rr[0]=er}}),Object.defineProperty(this,"y",{enumerable:!0,configurable:!0,get:function get(){return!rr||isNaN(rr[1])?0:rr[1]},set:function set(er){rr[1]=er}}),Object.defineProperty(this,"width",{enumerable:!0,configurable:!0,get:function get(){return!rr||isNaN(rr[2])?0:rr[2]},set:function set(er){rr[2]=er}}),Object.defineProperty(this,"height",{enumerable:!0,configurable:!0,get:function get(){return!rr||isNaN(rr[3])?0:rr[3]},set:function set(er){rr[3]=er}});var nr="";Object.defineProperty(this,"FT",{enumerable:!0,configurable:!1,get:function get(){return nr},set:function set(er){switch(er){case"/Btn":case"/Tx":case"/Ch":case"/Sig":nr=er;break;default:throw new Error('Invalid value "'+er+'" for attribute FT supplied.')}}});var ar=null;Object.defineProperty(this,"T",{enumerable:!0,configurable:!1,get:function get(){if(!ar||ar.length<1){if(this instanceof lw)return;ar="FieldObject"+K.FieldNum++}return"("+xb(ar)+")"},set:function set(er){ar=er.toString()}}),Object.defineProperty(this,"fieldName",{configurable:!0,enumerable:!0,get:function get(){return ar},set:function set(er){ar=er}});var ir="helvetica";Object.defineProperty(this,"fontName",{enumerable:!0,configurable:!0,get:function get(){return ir},set:function set(er){ir=er}});var or="normal";Object.defineProperty(this,"fontStyle",{enumerable:!0,configurable:!0,get:function get(){return or},set:function set(er){or=er}});var sr=0;Object.defineProperty(this,"fontSize",{enumerable:!0,configurable:!0,get:function get(){return sr},set:function set(er){sr=er}});var lr=void 0;Object.defineProperty(this,"maxFontSize",{enumerable:!0,configurable:!0,get:function get(){return void 0===lr?50/wb:lr},set:function set(er){lr=er}});var cr="black";Object.defineProperty(this,"color",{enumerable:!0,configurable:!0,get:function get(){return cr},set:function set(er){cr=er}});var ur="/F1 0 Tf 0 g";Object.defineProperty(this,"DA",{enumerable:!0,configurable:!1,get:function get(){if(!(!ur||this instanceof lw||this instanceof uw))return Yb(ur)},set:function set(er){er=er.toString(),ur=er}});var dr=null;Object.defineProperty(this,"DV",{enumerable:!1,configurable:!1,get:function get(){if(dr)return this instanceof iw==0?Yb(dr):dr},set:function set(er){er=er.toString(),dr=this instanceof iw==0?"("===er.substr(0,1)?kb(er.substr(1,er.length-2)):kb(er):er}}),Object.defineProperty(this,"defaultValue",{enumerable:!0,configurable:!0,get:function get(){return this instanceof iw==1?kb(dr.substr(1,dr.length-1)):dr},set:function set(er){er=er.toString(),dr=this instanceof iw==1?"/"+er:er}});var hr=null;Object.defineProperty(this,"V",{enumerable:!1,configurable:!1,get:function get(){if(hr)return this instanceof iw==0?Yb(hr):hr},set:function set(er){er=er.toString(),hr=this instanceof iw==0?"("===er.substr(0,1)?kb(er.substr(1,er.length-2)):kb(er):er}}),Object.defineProperty(this,"value",{enumerable:!0,configurable:!0,get:function get(){return this instanceof iw==1?kb(hr.substr(1,hr.length-1)):hr},set:function set(er){er=er.toString(),hr=this instanceof iw==1?"/"+er:er}}),Object.defineProperty(this,"hasAnnotation",{enumerable:!0,configurable:!0,get:function get(){return this.Rect}}),Object.defineProperty(this,"Type",{enumerable:!0,configurable:!1,get:function get(){return this.hasAnnotation?"/Annot":null}}),Object.defineProperty(this,"Subtype",{enumerable:!0,configurable:!1,get:function get(){return this.hasAnnotation?"/Widget":null}});var pr,Ar=!1;Object.defineProperty(this,"hasAppearanceStream",{enumerable:!0,configurable:!0,writeable:!0,get:function get(){return Ar},set:function set(er){er=Boolean(er),Ar=er}}),Object.defineProperty(this,"page",{enumerable:!0,configurable:!0,writeable:!0,get:function get(){if(pr)return pr},set:function set(er){pr=er}}),Object.defineProperty(this,"readOnly",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,1))},set:function set(er){!0===Boolean(er)?this.Ff=Ub(this.Ff,1):this.Ff=Ib(this.Ff,1)}}),Object.defineProperty(this,"required",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,2))},set:function set(er){!0===Boolean(er)?this.Ff=Ub(this.Ff,2):this.Ff=Ib(this.Ff,2)}}),Object.defineProperty(this,"noExport",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,3))},set:function set(er){!0===Boolean(er)?this.Ff=Ub(this.Ff,3):this.Ff=Ib(this.Ff,3)}});var fr=null;Object.defineProperty(this,"Q",{enumerable:!0,configurable:!1,get:function get(){if(null!==fr)return fr},set:function set(er){if(-1===[0,1,2].indexOf(er))throw new Error('Invalid value "'+er+'" for attribute Q supplied.');fr=er}}),Object.defineProperty(this,"textAlign",{get:function get(){var er;switch(fr){case 0:default:er="left";break;case 1:er="center";break;case 2:er="right"}return er},configurable:!0,enumerable:!0,set:function set(er){switch(er){case"right":case 2:fr=2;break;case"center":case 1:fr=1;break;case"left":case 0:default:fr=0}}})};Bb(ew,Jb);var tw=function Z(){ew.call(this),this.FT="/Ch",this.V="()",this.fontName="zapfdingbats";var er=0;Object.defineProperty(this,"TI",{enumerable:!0,configurable:!1,get:function get(){return er},set:function set(tr){er=tr}}),Object.defineProperty(this,"topIndex",{enumerable:!0,configurable:!0,get:function get(){return er},set:function set(tr){er=tr}});var tr=[];Object.defineProperty(this,"Opt",{enumerable:!0,configurable:!1,get:function get(){return Xb(tr)},set:function set(er){var rr,nr;nr=[],"string"==typeof(rr=er)&&(nr=function(er,tr,rr){rr||(rr=1);for(var nr,ar=[];nr=tr.exec(er);)ar.push(nr[rr]);return ar}(rr,/\((.*?)\)/g)),tr=nr}}),this.getOptions=function(){return tr},this.setOptions=function(er){tr=er,this.sort&&tr.sort()},this.addOption=function(er){er=(er=er||"").toString(),tr.push(er),this.sort&&tr.sort()},this.removeOption=function(er,rr){for(rr=rr||!1,er=(er=er||"").toString();-1!==tr.indexOf(er)&&(tr.splice(tr.indexOf(er),1),!1!==rr););},Object.defineProperty(this,"combo",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,18))},set:function set(er){!0===Boolean(er)?this.Ff=Ub(this.Ff,18):this.Ff=Ib(this.Ff,18)}}),Object.defineProperty(this,"edit",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,19))},set:function set(er){!0===this.combo&&(!0===Boolean(er)?this.Ff=Ub(this.Ff,19):this.Ff=Ib(this.Ff,19))}}),Object.defineProperty(this,"sort",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,20))},set:function set(er){!0===Boolean(er)?(this.Ff=Ub(this.Ff,20),tr.sort()):this.Ff=Ib(this.Ff,20)}}),Object.defineProperty(this,"multiSelect",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,22))},set:function set(er){!0===Boolean(er)?this.Ff=Ub(this.Ff,22):this.Ff=Ib(this.Ff,22)}}),Object.defineProperty(this,"doNotSpellCheck",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,23))},set:function set(er){!0===Boolean(er)?this.Ff=Ub(this.Ff,23):this.Ff=Ib(this.Ff,23)}}),Object.defineProperty(this,"commitOnSelChange",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,27))},set:function set(er){!0===Boolean(er)?this.Ff=Ub(this.Ff,27):this.Ff=Ib(this.Ff,27)}}),this.hasAppearanceStream=!1};Bb(tw,ew);var rw=function $(){tw.call(this),this.fontName="helvetica",this.combo=!1};Bb(rw,tw);var nw=function Q(){rw.call(this),this.combo=!0};Bb(nw,rw);var aw=function tt(){nw.call(this),this.edit=!0};Bb(aw,nw);var iw=function et(){ew.call(this),this.FT="/Btn",Object.defineProperty(this,"noToggleToOff",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,15))},set:function set(er){!0===Boolean(er)?this.Ff=Ub(this.Ff,15):this.Ff=Ib(this.Ff,15)}}),Object.defineProperty(this,"radio",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,16))},set:function set(er){!0===Boolean(er)?this.Ff=Ub(this.Ff,16):this.Ff=Ib(this.Ff,16)}}),Object.defineProperty(this,"pushButton",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,17))},set:function set(er){!0===Boolean(er)?this.Ff=Ub(this.Ff,17):this.Ff=Ib(this.Ff,17)}}),Object.defineProperty(this,"radioIsUnison",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,26))},set:function set(er){!0===Boolean(er)?this.Ff=Ub(this.Ff,26):this.Ff=Ib(this.Ff,26)}});var er,tr={};Object.defineProperty(this,"MK",{enumerable:!1,configurable:!1,get:function get(){if(0!==Object.keys(tr).length){var er,rr=[];for(er in rr.push("<<"),tr)rr.push("/"+er+" ("+tr[er]+")");return rr.push(">>"),rr.join("\n")}},set:function set(er){"object"==_typeof(er)&&(tr=er)}}),Object.defineProperty(this,"caption",{enumerable:!0,configurable:!0,get:function get(){return tr.CA||""},set:function set(er){"string"==typeof er&&(tr.CA=er)}}),Object.defineProperty(this,"AS",{enumerable:!1,configurable:!1,get:function get(){return er},set:function set(tr){er=tr}}),Object.defineProperty(this,"appearanceState",{enumerable:!0,configurable:!0,get:function get(){return er.substr(1,er.length-1)},set:function set(tr){er="/"+tr}})};Bb(iw,ew);var ow=function nt(){iw.call(this),this.pushButton=!0};Bb(ow,iw);var sw=function rt(){iw.call(this),this.radio=!0,this.pushButton=!1;var er=[];Object.defineProperty(this,"Kids",{enumerable:!0,configurable:!1,get:function get(){return er},set:function set(tr){er=void 0!==tr?tr:[]}})};Bb(sw,iw);var lw=function it(){var er,tr;ew.call(this),Object.defineProperty(this,"Parent",{enumerable:!1,configurable:!1,get:function get(){return er},set:function set(tr){er=tr}}),Object.defineProperty(this,"optionName",{enumerable:!1,configurable:!0,get:function get(){return tr},set:function set(er){tr=er}});var rr,nr={};Object.defineProperty(this,"MK",{enumerable:!1,configurable:!1,get:function get(){var er,tr=[];for(er in tr.push("<<"),nr)tr.push("/"+er+" ("+nr[er]+")");return tr.push(">>"),tr.join("\n")},set:function set(er){"object"==_typeof(er)&&(nr=er)}}),Object.defineProperty(this,"caption",{enumerable:!0,configurable:!0,get:function get(){return nr.CA||""},set:function set(er){"string"==typeof er&&(nr.CA=er)}}),Object.defineProperty(this,"AS",{enumerable:!1,configurable:!1,get:function get(){return rr},set:function set(er){rr=er}}),Object.defineProperty(this,"appearanceState",{enumerable:!0,configurable:!0,get:function get(){return rr.substr(1,rr.length-1)},set:function set(er){rr="/"+er}}),this.caption="l",this.appearanceState="Off",this._AppearanceType=hw.RadioButton.Circle,this.appearanceStreamContent=this._AppearanceType.createAppearanceStream(this.optionName)};Bb(lw,ew),sw.prototype.setAppearance=function(er){if(!("createAppearanceStream"in er)||!("getCA"in er))throw new Error("Couldn't assign Appearance to RadioButton. Appearance was Invalid!");for(var tr in this.Kids)if(this.Kids.hasOwnProperty(tr)){var rr=this.Kids[tr];rr.appearanceStreamContent=er.createAppearanceStream(rr.optionName),rr.caption=er.getCA()}},sw.prototype.createOption=function(er){var tr=new lw;return tr.Parent=this,tr.optionName=er,this.Kids.push(tr),pw.call(this,tr),tr};var cw=function at(){iw.call(this),this.fontName="zapfdingbats",this.caption="3",this.appearanceState="On",this.value="On",this.textAlign="center",this.appearanceStreamContent=hw.CheckBox.createAppearanceStream()};Bb(cw,iw);var uw=function ot(){ew.call(this),this.FT="/Tx",Object.defineProperty(this,"multiline",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,13))},set:function set(er){!0===Boolean(er)?this.Ff=Ub(this.Ff,13):this.Ff=Ib(this.Ff,13)}}),Object.defineProperty(this,"fileSelect",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,21))},set:function set(er){!0===Boolean(er)?this.Ff=Ub(this.Ff,21):this.Ff=Ib(this.Ff,21)}}),Object.defineProperty(this,"doNotSpellCheck",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,23))},set:function set(er){!0===Boolean(er)?this.Ff=Ub(this.Ff,23):this.Ff=Ib(this.Ff,23)}}),Object.defineProperty(this,"doNotScroll",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,24))},set:function set(er){!0===Boolean(er)?this.Ff=Ub(this.Ff,24):this.Ff=Ib(this.Ff,24)}}),Object.defineProperty(this,"comb",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,25))},set:function set(er){!0===Boolean(er)?this.Ff=Ub(this.Ff,25):this.Ff=Ib(this.Ff,25)}}),Object.defineProperty(this,"richText",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,26))},set:function set(er){!0===Boolean(er)?this.Ff=Ub(this.Ff,26):this.Ff=Ib(this.Ff,26)}});var er=null;Object.defineProperty(this,"MaxLen",{enumerable:!0,configurable:!1,get:function get(){return er},set:function set(tr){er=tr}}),Object.defineProperty(this,"maxLength",{enumerable:!0,configurable:!0,get:function get(){return er},set:function set(tr){Number.isInteger(tr)&&(er=tr)}}),Object.defineProperty(this,"hasAppearanceStream",{enumerable:!0,configurable:!0,get:function get(){return this.V||this.DV}})};Bb(uw,ew);var dw=function st(){uw.call(this),Object.defineProperty(this,"password",{enumerable:!0,configurable:!0,get:function get(){return Boolean(Fb(this.Ff,14))},set:function set(er){!0===Boolean(er)?this.Ff=Ub(this.Ff,14):this.Ff=Ib(this.Ff,14)}}),this.password=!0};Bb(dw,uw);var hw={CheckBox:{createAppearanceStream:function createAppearanceStream(){return{N:{On:hw.CheckBox.YesNormal},D:{On:hw.CheckBox.YesPushDown,Off:hw.CheckBox.OffPushDown}}},YesPushDown:function YesPushDown(er){var tr=new Nb(er),rr=[],nr=yb.internal.getFont(er.fontName,er.fontStyle).id,ar=yb.__private__.encodeColorString(er.color),ir=Qb(er,er.caption);return rr.push("0.749023 g"),rr.push("0 0 "+Sb(hw.internal.getWidth(er))+" "+Sb(hw.internal.getHeight(er))+" re"),rr.push("f"),rr.push("BMC"),rr.push("q"),rr.push("0 0 1 rg"),rr.push("/"+nr+" "+Sb(ir.fontSize)+" Tf "+ar),rr.push("BT"),rr.push(ir.text),rr.push("ET"),rr.push("Q"),rr.push("EMC"),tr.stream=rr.join("\n"),tr},YesNormal:function YesNormal(er){var tr=new Nb(er),rr=yb.internal.getFont(er.fontName,er.fontStyle).id,nr=yb.__private__.encodeColorString(er.color),ar=[],ir=hw.internal.getHeight(er),or=hw.internal.getWidth(er),sr=Qb(er,er.caption);return ar.push("1 g"),ar.push("0 0 "+Sb(or)+" "+Sb(ir)+" re"),ar.push("f"),ar.push("q"),ar.push("0 0 1 rg"),ar.push("0 0 "+Sb(or-1)+" "+Sb(ir-1)+" re"),ar.push("W"),ar.push("n"),ar.push("0 g"),ar.push("BT"),ar.push("/"+rr+" "+Sb(sr.fontSize)+" Tf "+nr),ar.push(sr.text),ar.push("ET"),ar.push("Q"),tr.stream=ar.join("\n"),tr},OffPushDown:function OffPushDown(er){var tr=new Nb(er),rr=[];return rr.push("0.749023 g"),rr.push("0 0 "+Sb(hw.internal.getWidth(er))+" "+Sb(hw.internal.getHeight(er))+" re"),rr.push("f"),tr.stream=rr.join("\n"),tr}},RadioButton:{Circle:{createAppearanceStream:function createAppearanceStream(er){var tr={D:{Off:hw.RadioButton.Circle.OffPushDown},N:{}};return tr.N[er]=hw.RadioButton.Circle.YesNormal,tr.D[er]=hw.RadioButton.Circle.YesPushDown,tr},getCA:function getCA(){return"l"},YesNormal:function YesNormal(er){var tr=new Nb(er),rr=[],nr=hw.internal.getWidth(er)<=hw.internal.getHeight(er)?hw.internal.getWidth(er)/4:hw.internal.getHeight(er)/4;nr=Number((.9*nr).toFixed(5));var ar=hw.internal.Bezier_C,ir=Number((nr*ar).toFixed(5));return rr.push("q"),rr.push("1 0 0 1 "+Cb(hw.internal.getWidth(er)/2)+" "+Cb(hw.internal.getHeight(er)/2)+" cm"),rr.push(nr+" 0 m"),rr.push(nr+" "+ir+" "+ir+" "+nr+" 0 "+nr+" c"),rr.push("-"+ir+" "+nr+" -"+nr+" "+ir+" -"+nr+" 0 c"),rr.push("-"+nr+" -"+ir+" -"+ir+" -"+nr+" 0 -"+nr+" c"),rr.push(ir+" -"+nr+" "+nr+" -"+ir+" "+nr+" 0 c"),rr.push("f"),rr.push("Q"),tr.stream=rr.join("\n"),tr},YesPushDown:function YesPushDown(er){var tr=new Nb(er),rr=[],nr=hw.internal.getWidth(er)<=hw.internal.getHeight(er)?hw.internal.getWidth(er)/4:hw.internal.getHeight(er)/4,ar=(nr=Number((.9*nr).toFixed(5)),Number((2*nr).toFixed(5))),ir=Number((ar*hw.internal.Bezier_C).toFixed(5)),or=Number((nr*hw.internal.Bezier_C).toFixed(5));return rr.push("0.749023 g"),rr.push("q"),rr.push("1 0 0 1 "+Cb(hw.internal.getWidth(er)/2)+" "+Cb(hw.internal.getHeight(er)/2)+" cm"),rr.push(ar+" 0 m"),rr.push(ar+" "+ir+" "+ir+" "+ar+" 0 "+ar+" c"),rr.push("-"+ir+" "+ar+" -"+ar+" "+ir+" -"+ar+" 0 c"),rr.push("-"+ar+" -"+ir+" -"+ir+" -"+ar+" 0 -"+ar+" c"),rr.push(ir+" -"+ar+" "+ar+" -"+ir+" "+ar+" 0 c"),rr.push("f"),rr.push("Q"),rr.push("0 g"),rr.push("q"),rr.push("1 0 0 1 "+Cb(hw.internal.getWidth(er)/2)+" "+Cb(hw.internal.getHeight(er)/2)+" cm"),rr.push(nr+" 0 m"),rr.push(nr+" "+or+" "+or+" "+nr+" 0 "+nr+" c"),rr.push("-"+or+" "+nr+" -"+nr+" "+or+" -"+nr+" 0 c"),rr.push("-"+nr+" -"+or+" -"+or+" -"+nr+" 0 -"+nr+" c"),rr.push(or+" -"+nr+" "+nr+" -"+or+" "+nr+" 0 c"),rr.push("f"),rr.push("Q"),tr.stream=rr.join("\n"),tr},OffPushDown:function OffPushDown(er){var tr=new Nb(er),rr=[],nr=hw.internal.getWidth(er)<=hw.internal.getHeight(er)?hw.internal.getWidth(er)/4:hw.internal.getHeight(er)/4;nr=Number((.9*nr).toFixed(5));var ar=Number((2*nr).toFixed(5)),ir=Number((ar*hw.internal.Bezier_C).toFixed(5));return rr.push("0.749023 g"),rr.push("q"),rr.push("1 0 0 1 "+Cb(hw.internal.getWidth(er)/2)+" "+Cb(hw.internal.getHeight(er)/2)+" cm"),rr.push(ar+" 0 m"),rr.push(ar+" "+ir+" "+ir+" "+ar+" 0 "+ar+" c"),rr.push("-"+ir+" "+ar+" -"+ar+" "+ir+" -"+ar+" 0 c"),rr.push("-"+ar+" -"+ir+" -"+ir+" -"+ar+" 0 -"+ar+" c"),rr.push(ir+" -"+ar+" "+ar+" -"+ir+" "+ar+" 0 c"),rr.push("f"),rr.push("Q"),tr.stream=rr.join("\n"),tr}},Cross:{createAppearanceStream:function createAppearanceStream(er){var tr={D:{Off:hw.RadioButton.Cross.OffPushDown},N:{}};return tr.N[er]=hw.RadioButton.Cross.YesNormal,tr.D[er]=hw.RadioButton.Cross.YesPushDown,tr},getCA:function getCA(){return"8"},YesNormal:function YesNormal(er){var tr=new Nb(er),rr=[],nr=hw.internal.calculateCross(er);return rr.push("q"),rr.push("1 1 "+Sb(hw.internal.getWidth(er)-2)+" "+Sb(hw.internal.getHeight(er)-2)+" re"),rr.push("W"),rr.push("n"),rr.push(Sb(nr.x1.x)+" "+Sb(nr.x1.y)+" m"),rr.push(Sb(nr.x2.x)+" "+Sb(nr.x2.y)+" l"),rr.push(Sb(nr.x4.x)+" "+Sb(nr.x4.y)+" m"),rr.push(Sb(nr.x3.x)+" "+Sb(nr.x3.y)+" l"),rr.push("s"),rr.push("Q"),tr.stream=rr.join("\n"),tr},YesPushDown:function YesPushDown(er){var tr=new Nb(er),rr=hw.internal.calculateCross(er),nr=[];return nr.push("0.749023 g"),nr.push("0 0 "+Sb(hw.internal.getWidth(er))+" "+Sb(hw.internal.getHeight(er))+" re"),nr.push("f"),nr.push("q"),nr.push("1 1 "+Sb(hw.internal.getWidth(er)-2)+" "+Sb(hw.internal.getHeight(er)-2)+" re"),nr.push("W"),nr.push("n"),nr.push(Sb(rr.x1.x)+" "+Sb(rr.x1.y)+" m"),nr.push(Sb(rr.x2.x)+" "+Sb(rr.x2.y)+" l"),nr.push(Sb(rr.x4.x)+" "+Sb(rr.x4.y)+" m"),nr.push(Sb(rr.x3.x)+" "+Sb(rr.x3.y)+" l"),nr.push("s"),nr.push("Q"),tr.stream=nr.join("\n"),tr},OffPushDown:function OffPushDown(er){var tr=new Nb(er),rr=[];return rr.push("0.749023 g"),rr.push("0 0 "+Sb(hw.internal.getWidth(er))+" "+Sb(hw.internal.getHeight(er))+" re"),rr.push("f"),tr.stream=rr.join("\n"),tr}}},createDefaultAppearanceStream:function createDefaultAppearanceStream(er){var tr=yb.internal.getFont(er.fontName,er.fontStyle).id,rr=yb.__private__.encodeColorString(er.color);return"/"+tr+" "+er.fontSize+" Tf "+rr}};hw.internal={Bezier_C:.551915024494,calculateCross:function calculateCross(er){var tr=hw.internal.getWidth(er),rr=hw.internal.getHeight(er),nr=Math.min(tr,rr);return{x1:{x:(tr-nr)/2,y:(rr-nr)/2+nr},x2:{x:(tr-nr)/2+nr,y:(rr-nr)/2},x3:{x:(tr-nr)/2,y:(rr-nr)/2},x4:{x:(tr-nr)/2+nr,y:(rr-nr)/2+nr}}}},hw.internal.getWidth=function(er){var tr=0;return"object"==_typeof(er)&&(tr=Eb(er.Rect[2])),tr},hw.internal.getHeight=function(er){var tr=0;return"object"==_typeof(er)&&(tr=Eb(er.Rect[3])),tr};var pw=bb.addField=function(er){if(Wb.call(this),!(er instanceof ew))throw new Error("Invalid argument passed to jsPDF.addField.");return Hb.call(this,er),er.page=yb.internal.getCurrentPageInfo().pageNumber,this};bb.AcroFormChoiceField=tw,bb.AcroFormListBox=rw,bb.AcroFormComboBox=nw,bb.AcroFormEditBox=aw,bb.AcroFormButton=iw,bb.AcroFormPushButton=ow,bb.AcroFormRadioButton=sw,bb.AcroFormCheckBox=cw,bb.AcroFormTextField=uw,bb.AcroFormPasswordField=dw,bb.AcroFormAppearance=hw,bb.AcroForm={ChoiceField:tw,ListBox:rw,ComboBox:nw,EditBox:aw,Button:iw,PushButton:ow,RadioButton:sw,CheckBox:cw,TextField:uw,PasswordField:dw,Appearance:hw},g.AcroForm={ChoiceField:tw,ListBox:rw,ComboBox:nw,EditBox:aw,Button:iw,PushButton:ow,RadioButton:sw,CheckBox:cw,TextField:uw,PasswordField:dw,Appearance:hw},function(er){er.__addimage__={};var tr="UNKNOWN",rr={PNG:[[137,80,78,71]],TIFF:[[77,77,0,42],[73,73,42,0]],JPEG:[[255,216,255,224,void 0,void 0,74,70,73,70,0],[255,216,255,225,void 0,void 0,69,120,105,102,0,0],[255,216,255,219],[255,216,255,238]],JPEG2000:[[0,0,0,12,106,80,32,32]],GIF87a:[[71,73,70,56,55,97]],GIF89a:[[71,73,70,56,57,97]],WEBP:[[82,73,70,70,void 0,void 0,void 0,void 0,87,69,66,80]],BMP:[[66,77],[66,65],[67,73],[67,80],[73,67],[80,84]]},nr=er.__addimage__.getImageFileTypeByImageData=function(er,nr){var ar,ir;nr=nr||tr;var or,sr,lr,cr=tr;if(wr(er))for(lr in rr)for(or=rr[lr],ar=0;ar>"}),"transparency"in er&&Array.isArray(er.transparency)){for(var ir="",or=0,sr=er.transparency.length;or255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.toRGB=function(){return"rgb("+this.r+", "+this.g+", "+this.b+")"},this.toHex=function(){var er=this.r.toString(16),tr=this.g.toString(16),rr=this.b.toString(16);return 1==er.length&&(er="0"+er),1==tr.length&&(tr="0"+tr),1==rr.length&&(rr="0"+rr),"#"+er+tr+rr}}function h(er){if("object"!=_typeof(er))throw new Error("Invalid Context passed to initialize PubSub (jsPDF-module)");var tr={};this.subscribe=function(er,rr,nr){if(nr=nr||!1,"string"!=typeof er||"function"!=typeof rr||"boolean"!=typeof nr)throw new Error("Invalid arguments passed to PubSub.subscribe (jsPDF-module)");tr.hasOwnProperty(er)||(tr[er]={});var ar=Math.random().toString(35);return tr[er][ar]=[rr,!!nr],ar},this.unsubscribe=function(er){for(var rr in tr)if(tr[rr][er])return delete tr[rr][er],0===Object.keys(tr[rr]).length&&delete tr[rr],!0;return!1},this.publish=function(rr){if(tr.hasOwnProperty(rr)){var nr=Array.prototype.slice.call(arguments,1),ar=[];for(var ir in tr[rr]){var or=tr[rr][ir];try{or[0].apply(er,nr)}catch(er){fb.console&&gb.error("jsPDF PubSub Error",er.message,er)}or[1]&&ar.push(ir)}ar.length&&ar.forEach(this.unsubscribe)}},this.getTopics=function(){return tr}}function l(er){if(!(this instanceof l))return new l(er);var tr="opacity,stroke-opacity".split(",");for(var rr in er)er.hasOwnProperty(rr)&&tr.indexOf(rr)>=0&&(this[rr]=er[rr]);this.id="",this.objectNumber=-1}function f$8(er,tr){this.gState=er,this.matrix=tr,this.id="",this.objectNumber=-1}function d(er,tr,rr,nr,ar){if(!(this instanceof d))return new d(er,tr,rr,nr,ar);this.type="axial"===er?2:3,this.coords=tr,this.colors=rr,f$8.call(this,nr,ar)}function p(er,tr,rr,nr,ar){if(!(this instanceof p))return new p(er,tr,rr,nr,ar);this.boundingBox=er,this.xStep=tr,this.yStep=rr,this.stream="",this.cloneIndex=0,f$8.call(this,nr,ar)}function g(er){var tr,rr="string"==typeof arguments[0]?arguments[0]:"p",nr=arguments[1],ar=arguments[2],ir=arguments[3],or=[],sr=1,lr=16,cr="S";"object"==_typeof(er=er||{})&&(rr=er.orientation,nr=er.unit||nr,ar=er.format||ar,ir=er.compress||er.compressPdf||ir,sr="number"==typeof er.userUnit?Math.abs(er.userUnit):1,void 0!==er.precision&&(tr=er.precision),void 0!==er.floatPrecision&&(lr=er.floatPrecision),cr=er.defaultPathOperation||"S"),or=er.filters||(!0===ir?["FlateEncode"]:or),nr=nr||"mm",rr=(""+(rr||"P")).toLowerCase();var ur=er.putOnlyUsedFonts||!1,dr={},hr={internal:{},__private__:{}};hr.__private__.PubSub=h;var pr="1.3",Ar=hr.__private__.getPdfVersion=function(){return pr};hr.__private__.setPdfVersion=function(er){pr=er};var fr={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],"government-letter":[576,756],legal:[612,1008],"junior-legal":[576,360],ledger:[1224,792],tabloid:[792,1224],"credit-card":[153,243]};hr.__private__.getPageFormats=function(){return fr};var gr=hr.__private__.getPageFormat=function(er){return fr[er]};ar=ar||"a4";var mr={COMPAT:"compat",ADVANCED:"advanced"},_r=mr.COMPAT;function F(){this.saveGraphicsState(),Wr(new pa(Wn,0,0,-Wn,0,ro()*Wn).toString()+" cm"),this.setFontSize(this.getFontSize()/Wn),cr="n",_r=mr.ADVANCED}function I(){this.restoreGraphicsState(),cr="S",_r=mr.COMPAT}hr.advancedAPI=function(er){var tr=_r===mr.COMPAT;return tr&&F.call(this),"function"!=typeof er||(er(this),tr&&I.call(this)),this},hr.compatAPI=function(er){var tr=_r===mr.ADVANCED;return tr&&I.call(this),"function"!=typeof er||(er(this),tr&&F.call(this)),this},hr.isAdvancedAPI=function(){return _r===mr.ADVANCED};var vr,yr=function j(er){if(_r!==mr.ADVANCED)throw new Error(er+" is only available in 'advanced' API mode. You need to call advancedAPI() first.")},br=hr.roundToPrecision=hr.__private__.roundToPrecision=function(er,rr){var nr=tr||rr;if(isNaN(er)||isNaN(nr))throw new Error("Invalid argument passed to jsPDF.roundToPrecision");return er.toFixed(nr).replace(/0+$/,"")};vr=hr.hpf=hr.__private__.hpf="number"==typeof lr?function(er){if(isNaN(er))throw new Error("Invalid argument passed to jsPDF.hpf");return br(er,lr)}:"smart"===lr?function(er){if(isNaN(er))throw new Error("Invalid argument passed to jsPDF.hpf");return br(er,er>-1&&er<1?16:5)}:function(er){if(isNaN(er))throw new Error("Invalid argument passed to jsPDF.hpf");return br(er,16)};var wr=hr.f2=hr.__private__.f2=function(er){if(isNaN(er))throw new Error("Invalid argument passed to jsPDF.f2");return br(er,2)},xr=hr.__private__.f3=function(er){if(isNaN(er))throw new Error("Invalid argument passed to jsPDF.f3");return br(er,3)},kr=hr.scale=hr.__private__.scale=function(er){if(isNaN(er))throw new Error("Invalid argument passed to jsPDF.scale");return _r===mr.COMPAT?er*Wn:_r===mr.ADVANCED?er:void 0},Sr=function q(er){return _r===mr.COMPAT?ro()-er:_r===mr.ADVANCED?er:void 0},Cr=function R(er){return kr(Sr(er))};hr.__private__.setPrecision=hr.setPrecision=function(er){"number"==typeof parseInt(er,10)&&(tr=parseInt(er,10))};var Br,Er="00000000000000000000000000000000",Nr=hr.__private__.getFileId=function(){return Er},Lr=hr.__private__.setFileId=function(er){return Er=void 0!==er&&/^[a-fA-F0-9]{32}$/.test(er)?er.toUpperCase():Er.split("").map((function(){return"ABCDEF0123456789".charAt(Math.floor(16*Math.random()))})).join("")};hr.setFileId=function(er){return Lr(er),this},hr.getFileId=function(){return Nr()};var Pr=hr.__private__.convertDateToPDFDate=function(er){var tr=er.getTimezoneOffset(),rr=tr<0?"+":"-",nr=Math.floor(Math.abs(tr/60)),ar=Math.abs(tr%60),ir=[rr,Rr(nr),"'",Rr(ar),"'"].join("");return["D:",er.getFullYear(),Rr(er.getMonth()+1),Rr(er.getDate()),Rr(er.getHours()),Rr(er.getMinutes()),Rr(er.getSeconds()),ir].join("")},Tr=hr.__private__.convertPDFDateToDate=function(er){var tr=parseInt(er.substr(2,4),10),rr=parseInt(er.substr(6,2),10)-1,nr=parseInt(er.substr(8,2),10),ar=parseInt(er.substr(10,2),10),ir=parseInt(er.substr(12,2),10),or=parseInt(er.substr(14,2),10);return new Date(tr,rr,nr,ar,ir,or,0)},Fr=hr.__private__.setCreationDate=function(er){var tr;if(void 0===er&&(er=new Date),er instanceof Date)tr=Pr(er);else{if(!/^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\+0[0-9]|\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$/.test(er))throw new Error("Invalid argument passed to jsPDF.setCreationDate");tr=er}return Br=tr},Ur=hr.__private__.getCreationDate=function(er){var tr=Br;return"jsDate"===er&&(tr=Tr(Br)),tr};hr.setCreationDate=function(er){return Fr(er),this},hr.getCreationDate=function(er){return Ur(er)};var Ir,Rr=hr.__private__.padd2=function(er){return("0"+parseInt(er)).slice(-2)},Mr=hr.__private__.padd2Hex=function(er){return("00"+(er=er.toString())).substr(er.length)},Qr=0,Or=[],Dr=[],jr=0,Hr=[],Gr=[],zr=!1,Vr=Dr,Kr=function it(){Qr=0,jr=0,Dr=[],Or=[],Hr=[],ba=_a(),wa=_a()};hr.__private__.setCustomOutputDestination=function(er){zr=!0,Vr=er};var qr=function at(er){zr||(Vr=er)};hr.__private__.resetCustomOutputDestination=function(){zr=!1,Vr=Dr};var Wr=hr.__private__.out=function(er){return er=er.toString(),jr+=er.length+1,Vr.push(er),Vr},Xr=hr.__private__.write=function(er){return Wr(1===arguments.length?er.toString():Array.prototype.join.call(arguments," "))},Yr=hr.__private__.getArrayBuffer=function(er){for(var tr=er.length,rr=new ArrayBuffer(tr),nr=new Uint8Array(rr);tr--;)nr[tr]=er.charCodeAt(tr);return rr},Jr=[["Helvetica","helvetica","normal","WinAnsiEncoding"],["Helvetica-Bold","helvetica","bold","WinAnsiEncoding"],["Helvetica-Oblique","helvetica","italic","WinAnsiEncoding"],["Helvetica-BoldOblique","helvetica","bolditalic","WinAnsiEncoding"],["Courier","courier","normal","WinAnsiEncoding"],["Courier-Bold","courier","bold","WinAnsiEncoding"],["Courier-Oblique","courier","italic","WinAnsiEncoding"],["Courier-BoldOblique","courier","bolditalic","WinAnsiEncoding"],["Times-Roman","times","normal","WinAnsiEncoding"],["Times-Bold","times","bold","WinAnsiEncoding"],["Times-Italic","times","italic","WinAnsiEncoding"],["Times-BoldItalic","times","bolditalic","WinAnsiEncoding"],["ZapfDingbats","zapfdingbats","normal",null],["Symbol","symbol","normal",null]];hr.__private__.getStandardFonts=function(){return Jr};var $r=er.fontSize||16;hr.__private__.setFontSize=hr.setFontSize=function(er){return $r=_r===mr.ADVANCED?er/Wn:er,this};var Zr,Tn=hr.__private__.getFontSize=hr.getFontSize=function(){return _r===mr.COMPAT?$r:$r*Wn},Un=er.R2L||!1;hr.__private__.setR2L=hr.setR2L=function(er){return Un=er,this},hr.__private__.getR2L=hr.getR2L=function(){return Un};var Qn,Dn=hr.__private__.setZoomMode=function(er){if(/^\d*\.?\d*%$/.test(er))Zr=er;else if(isNaN(er)){if(-1===[void 0,null,"fullwidth","fullheight","fullpage","original"].indexOf(er))throw new Error('zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. "'+er+'" is not recognized.');Zr=er}else Zr=parseInt(er,10)};hr.__private__.getZoomMode=function(){return Zr};var Hn,Gn=hr.__private__.setPageMode=function(er){if(-1==[void 0,null,"UseNone","UseOutlines","UseThumbs","FullScreen"].indexOf(er))throw new Error('Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. "'+er+'" is not recognized.');Qn=er};hr.__private__.getPageMode=function(){return Qn};var zn=hr.__private__.setLayoutMode=function(er){if(-1==[void 0,null,"continuous","single","twoleft","tworight","two"].indexOf(er))throw new Error('Layout mode must be one of continuous, single, twoleft, tworight. "'+er+'" is not recognized.');Hn=er};hr.__private__.getLayoutMode=function(){return Hn},hr.__private__.setDisplayMode=hr.setDisplayMode=function(er,tr,rr){return Dn(er),zn(tr),Gn(rr),this};var Vn={title:"",subject:"",author:"",keywords:"",creator:""};hr.__private__.getDocumentProperty=function(er){if(-1===Object.keys(Vn).indexOf(er))throw new Error("Invalid argument passed to jsPDF.getDocumentProperty");return Vn[er]},hr.__private__.getDocumentProperties=function(){return Vn},hr.__private__.setDocumentProperties=hr.setProperties=hr.setDocumentProperties=function(er){for(var tr in Vn)Vn.hasOwnProperty(tr)&&er[tr]&&(Vn[tr]=er[tr]);return this},hr.__private__.setDocumentProperty=function(er,tr){if(-1===Object.keys(Vn).indexOf(er))throw new Error("Invalid arguments passed to jsPDF.setDocumentProperty");return Vn[er]=tr};var Kn,Wn,Xn,Yn,Jn,$n={},Zn={},ea=[],ta={},ra={},na={},aa={},ia=null,oa=0,sa=[],la=new h(hr),ca=er.hotfixes||[],ua={},da={},ha=[],pa=function Dt(er,tr,rr,nr,ar,ir){if(!(this instanceof Dt))return new Dt(er,tr,rr,nr,ar,ir);isNaN(er)&&(er=1),isNaN(tr)&&(tr=0),isNaN(rr)&&(rr=0),isNaN(nr)&&(nr=1),isNaN(ar)&&(ar=0),isNaN(ir)&&(ir=0),this._matrix=[er,tr,rr,nr,ar,ir]};Object.defineProperty(pa.prototype,"sx",{get:function get(){return this._matrix[0]},set:function set(er){this._matrix[0]=er}}),Object.defineProperty(pa.prototype,"shy",{get:function get(){return this._matrix[1]},set:function set(er){this._matrix[1]=er}}),Object.defineProperty(pa.prototype,"shx",{get:function get(){return this._matrix[2]},set:function set(er){this._matrix[2]=er}}),Object.defineProperty(pa.prototype,"sy",{get:function get(){return this._matrix[3]},set:function set(er){this._matrix[3]=er}}),Object.defineProperty(pa.prototype,"tx",{get:function get(){return this._matrix[4]},set:function set(er){this._matrix[4]=er}}),Object.defineProperty(pa.prototype,"ty",{get:function get(){return this._matrix[5]},set:function set(er){this._matrix[5]=er}}),Object.defineProperty(pa.prototype,"a",{get:function get(){return this._matrix[0]},set:function set(er){this._matrix[0]=er}}),Object.defineProperty(pa.prototype,"b",{get:function get(){return this._matrix[1]},set:function set(er){this._matrix[1]=er}}),Object.defineProperty(pa.prototype,"c",{get:function get(){return this._matrix[2]},set:function set(er){this._matrix[2]=er}}),Object.defineProperty(pa.prototype,"d",{get:function get(){return this._matrix[3]},set:function set(er){this._matrix[3]=er}}),Object.defineProperty(pa.prototype,"e",{get:function get(){return this._matrix[4]},set:function set(er){this._matrix[4]=er}}),Object.defineProperty(pa.prototype,"f",{get:function get(){return this._matrix[5]},set:function set(er){this._matrix[5]=er}}),Object.defineProperty(pa.prototype,"rotation",{get:function get(){return Math.atan2(this.shx,this.sx)}}),Object.defineProperty(pa.prototype,"scaleX",{get:function get(){return this.decompose().scale.sx}}),Object.defineProperty(pa.prototype,"scaleY",{get:function get(){return this.decompose().scale.sy}}),Object.defineProperty(pa.prototype,"isIdentity",{get:function get(){return 1===this.sx&&0===this.shy&&0===this.shx&&1===this.sy&&0===this.tx&&0===this.ty}}),pa.prototype.join=function(er){return[this.sx,this.shy,this.shx,this.sy,this.tx,this.ty].map(vr).join(er)},pa.prototype.multiply=function(er){var tr=er.sx*this.sx+er.shy*this.shx,rr=er.sx*this.shy+er.shy*this.sy,nr=er.shx*this.sx+er.sy*this.shx,ar=er.shx*this.shy+er.sy*this.sy,ir=er.tx*this.sx+er.ty*this.shx+this.tx,or=er.tx*this.shy+er.ty*this.sy+this.ty;return new pa(tr,rr,nr,ar,ir,or)},pa.prototype.decompose=function(){var er=this.sx,tr=this.shy,rr=this.shx,nr=this.sy,ar=this.tx,ir=this.ty,or=Math.sqrt(er*er+tr*tr),sr=(er/=or)*rr+(tr/=or)*nr;rr-=er*sr,nr-=tr*sr;var lr=Math.sqrt(rr*rr+nr*nr);return sr/=lr,er*(nr/=lr)>16&255,nr=lr>>8&255,ar=255&lr}if(void 0===nr||void 0===ir&&rr===nr&&nr===ar)if("string"==typeof rr)tr=rr+" "+or[0];else switch(er.precision){case 2:tr=wr(rr/255)+" "+or[0];break;case 3:default:tr=xr(rr/255)+" "+or[0]}else if(void 0===ir||"object"==_typeof(ir)){if(ir&&!isNaN(ir.a)&&0===ir.a)return["1.","1.","1.",or[1]].join(" ");if("string"==typeof rr)tr=[rr,nr,ar,or[1]].join(" ");else switch(er.precision){case 2:tr=[wr(rr/255),wr(nr/255),wr(ar/255),or[1]].join(" ");break;default:case 3:tr=[xr(rr/255),xr(nr/255),xr(ar/255),or[1]].join(" ")}}else if("string"==typeof rr)tr=[rr,nr,ar,ir,or[2]].join(" ");else switch(er.precision){case 2:tr=[wr(rr),wr(nr),wr(ar),wr(ir),or[2]].join(" ");break;case 3:default:tr=[xr(rr),xr(nr),xr(ar),xr(ir),or[2]].join(" ")}return tr},Sa=hr.__private__.getFilters=function(){return or},Ca=hr.__private__.putStream=function(er){var tr=(er=er||{}).data||"",rr=er.filters||Sa(),nr=er.alreadyAppliedFilters||[],ar=er.addLength1||!1,ir=tr.length,or={};!0===rr&&(rr=["FlateEncode"]);var sr=er.additionalKeyValues||[],lr=(or=void 0!==g.API.processDataByFilters?g.API.processDataByFilters(tr,rr):{data:tr,reverseChain:[]}).reverseChain+(Array.isArray(nr)?nr.join(" "):nr.toString());if(0!==or.data.length&&(sr.push({key:"Length",value:or.data.length}),!0===ar&&sr.push({key:"Length1",value:ir})),0!=lr.length)if(lr.split("/").length-1==1)sr.push({key:"Filter",value:lr});else{sr.push({key:"Filter",value:"["+lr+"]"});for(var cr=0;cr>"),0!==or.data.length&&(Wr("stream"),Wr(or.data),Wr("endstream"))},Ba=hr.__private__.putPage=function(er){var tr=er.number,rr=er.data,nr=er.objId,ar=er.contentsObjId;va(nr,!0),Wr("<>"),Wr("endobj");var ir=rr.join("\n");return _r===mr.ADVANCED&&(ir+="\nQ"),va(ar,!0),Ca({data:ir,filters:Sa()}),Wr("endobj"),nr},Ea=hr.__private__.putPages=function(){var er,tr,rr=[];for(er=1;er<=oa;er++)sa[er].objId=_a(),sa[er].contentsObjId=_a();for(er=1;er<=oa;er++)rr.push(Ba({number:er,data:Gr[er],objId:sa[er].objId,contentsObjId:sa[er].contentsObjId,mediaBox:sa[er].mediaBox,cropBox:sa[er].cropBox,bleedBox:sa[er].bleedBox,trimBox:sa[er].trimBox,artBox:sa[er].artBox,userUnit:sa[er].userUnit,rootDictionaryObjId:ba,resourceDictionaryObjId:wa}));va(ba,!0),Wr("<>"),Wr("endobj"),la.publish("postPutPages")},Na=function ne(er){var tr=function e(er,tr){return-1!==er.indexOf(" ")?"("+$a(er,tr)+")":$a(er,tr)};la.publish("putFont",{font:er,out:Wr,newObject:ma,putStream:Ca,pdfEscapeWithNeededParanthesis:tr}),!0!==er.isAlreadyPutted&&(er.objectNumber=ma(),Wr("<<"),Wr("/Type /Font"),Wr("/BaseFont /"+tr(er.postScriptName)),Wr("/Subtype /Type1"),"string"==typeof er.encoding&&Wr("/Encoding /"+er.encoding),Wr("/FirstChar 32"),Wr("/LastChar 255"),Wr(">>"),Wr("endobj"))},La=function re(){for(var er in $n)$n.hasOwnProperty(er)&&(!1===ur||!0===ur&&dr.hasOwnProperty(er))&&Na($n[er])},Pa=function ie(er){er.objectNumber=ma();var tr=[];tr.push({key:"Type",value:"/XObject"}),tr.push({key:"Subtype",value:"/Form"}),tr.push({key:"BBox",value:"["+[vr(er.x),vr(er.y),vr(er.x+er.width),vr(er.y+er.height)].join(" ")+"]"}),tr.push({key:"Matrix",value:"["+er.matrix.toString()+"]"});var rr=er.pages[1].join("\n");Ca({data:rr,additionalKeyValues:tr}),Wr("endobj")},Ta=function ae(){for(var er in ua)ua.hasOwnProperty(er)&&Pa(ua[er])},Fa=function oe(er,tr){var rr,nr=[],ar=1/(tr-1);for(rr=0;rr<1;rr+=ar)nr.push(rr);if(nr.push(1),0!=er[0].offset){var ir={offset:0,color:er[0].color};er.unshift(ir)}if(1!=er[er.length-1].offset){var or={offset:1,color:er[er.length-1].color};er.push(or)}for(var sr="",lr=0,cr=0;crer[lr+1].offset;)lr++;var ur=er[lr].offset,dr=(rr-ur)/(er[lr+1].offset-ur),hr=er[lr].color,pr=er[lr+1].color;sr+=Mr(Math.round((1-dr)*hr[0]+dr*pr[0]).toString(16))+Mr(Math.round((1-dr)*hr[1]+dr*pr[1]).toString(16))+Mr(Math.round((1-dr)*hr[2]+dr*pr[2]).toString(16))}return sr.trim()},Ua=function se(er,tr){tr||(tr=21);var rr=ma(),nr=Fa(er.colors,tr),ar=[];ar.push({key:"FunctionType",value:"0"}),ar.push({key:"Domain",value:"[0.0 1.0]"}),ar.push({key:"Size",value:"["+tr+"]"}),ar.push({key:"BitsPerSample",value:"8"}),ar.push({key:"Range",value:"[0.0 1.0 0.0 1.0 0.0 1.0]"}),ar.push({key:"Decode",value:"[0.0 1.0 0.0 1.0 0.0 1.0]"}),Ca({data:nr,additionalKeyValues:ar,alreadyAppliedFilters:["/ASCIIHexDecode"]}),Wr("endobj"),er.objectNumber=ma(),Wr("<< /ShadingType "+er.type),Wr("/ColorSpace /DeviceRGB");var ir="/Coords ["+vr(parseFloat(er.coords[0]))+" "+vr(parseFloat(er.coords[1]))+" ";2===er.type?ir+=vr(parseFloat(er.coords[2]))+" "+vr(parseFloat(er.coords[3])):ir+=vr(parseFloat(er.coords[2]))+" "+vr(parseFloat(er.coords[3]))+" "+vr(parseFloat(er.coords[4]))+" "+vr(parseFloat(er.coords[5])),Wr(ir+="]"),er.matrix&&Wr("/Matrix ["+er.matrix.toString()+"]"),Wr("/Function "+rr+" 0 R"),Wr("/Extend [true true]"),Wr(">>"),Wr("endobj")},Ia=function ue(er,tr){var rr=_a(),nr=ma();tr.push({resourcesOid:rr,objectOid:nr}),er.objectNumber=nr;var ar=[];ar.push({key:"Type",value:"/Pattern"}),ar.push({key:"PatternType",value:"1"}),ar.push({key:"PaintType",value:"1"}),ar.push({key:"TilingType",value:"1"}),ar.push({key:"BBox",value:"["+er.boundingBox.map(vr).join(" ")+"]"}),ar.push({key:"XStep",value:vr(er.xStep)}),ar.push({key:"YStep",value:vr(er.yStep)}),ar.push({key:"Resources",value:rr+" 0 R"}),er.matrix&&ar.push({key:"Matrix",value:"["+er.matrix.toString()+"]"}),Ca({data:er.stream,additionalKeyValues:ar}),Wr("endobj")},Ra=function ce(er){var tr;for(tr in ta)ta.hasOwnProperty(tr)&&(ta[tr]instanceof d?Ua(ta[tr]):ta[tr]instanceof p&&Ia(ta[tr],er))},Ma=function he(er){for(var tr in er.objectNumber=ma(),Wr("<<"),er)switch(tr){case"opacity":Wr("/ca "+wr(er[tr]));break;case"stroke-opacity":Wr("/CA "+wr(er[tr]))}Wr(">>"),Wr("endobj")},Qa=function le(){var er;for(er in na)na.hasOwnProperty(er)&&Ma(na[er])},Oa=function fe(){for(var er in Wr("/XObject <<"),ua)ua.hasOwnProperty(er)&&ua[er].objectNumber>=0&&Wr("/"+er+" "+ua[er].objectNumber+" 0 R");la.publish("putXobjectDict"),Wr(">>")},Da=function de(){for(var er in Wr("/Font <<"),$n)$n.hasOwnProperty(er)&&(!1===ur||!0===ur&&dr.hasOwnProperty(er))&&Wr("/"+er+" "+$n[er].objectNumber+" 0 R");Wr(">>")},ja=function pe(){if(Object.keys(ta).length>0){for(var er in Wr("/Shading <<"),ta)ta.hasOwnProperty(er)&&ta[er]instanceof d&&ta[er].objectNumber>=0&&Wr("/"+er+" "+ta[er].objectNumber+" 0 R");la.publish("putShadingPatternDict"),Wr(">>")}},Ha=function ge(er){if(Object.keys(ta).length>0){for(var tr in Wr("/Pattern <<"),ta)ta.hasOwnProperty(tr)&&ta[tr]instanceof hr.TilingPattern&&ta[tr].objectNumber>=0&&ta[tr].objectNumber>")}},Ga=function me(){if(Object.keys(na).length>0){var er;for(er in Wr("/ExtGState <<"),na)na.hasOwnProperty(er)&&na[er].objectNumber>=0&&Wr("/"+er+" "+na[er].objectNumber+" 0 R");la.publish("putGStateDict"),Wr(">>")}},za=function ve(er){va(er.resourcesOid,!0),Wr("<<"),Wr("/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]"),Da(),ja(),Ha(er.objectOid),Ga(),Oa(),Wr(">>"),Wr("endobj")},Va=function be(){var er=[];La(),Qa(),Ta(),Ra(er),la.publish("putResources"),er.forEach(za),za({resourcesOid:wa,objectOid:Number.MAX_SAFE_INTEGER}),la.publish("postPutResources")},Ka=function ye(){la.publish("putAdditionalObjects");for(var er=0;er>8&&(lr=!0);er=sr.join("")}for(rr=er.length;void 0===lr&&0!==rr;)er.charCodeAt(rr-1)>>8&&(lr=!0),rr--;if(!lr)return er;for(sr=tr.noBOM?[]:[254,255],rr=0,nr=er.length;rr>8)>>8)throw new Error("Character at position "+rr+" of string '"+er+"' exceeds 16bits. Cannot be encoded into UCS-2 BE");sr.push(ur),sr.push(cr-(ur<<8))}return String.fromCharCode.apply(void 0,sr)},$a=hr.__private__.pdfEscape=hr.pdfEscape=function(er,tr){return Ja(er,tr).replace(/\\/g,"\\\\").replace(/\(/g,"\\(").replace(/\)/g,"\\)")},Za=hr.__private__.beginPage=function(er){Gr[++oa]=[],sa[oa]={objId:0,contentsObjId:0,userUnit:Number(sr),artBox:null,bleedBox:null,cropBox:null,trimBox:null,mediaBox:{bottomLeftX:0,bottomLeftY:0,topRightX:Number(er[0]),topRightY:Number(er[1])}},ri(oa),qr(Gr[Ir])},ei=function Pe(er,tr){var nr,ir,or;switch(rr=tr||rr,"string"==typeof er&&(nr=gr(er.toLowerCase()),Array.isArray(nr)&&(ir=nr[0],or=nr[1])),Array.isArray(er)&&(ir=er[0]*Wn,or=er[1]*Wn),isNaN(ir)&&(ir=ar[0],or=ar[1]),(ir>14400||or>14400)&&(gb.warn("A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width/height to 14400"),ir=Math.min(14400,ir),or=Math.min(14400,or)),ar=[ir,or],rr.substr(0,1)){case"l":or>ir&&(ar=[or,ir]);break;case"p":ir>or&&(ar=[or,ir])}Za(ar),Pi(Li),Wr(Oi),0!==Vi&&Wr(Vi+" J"),0!==Ki&&Wr(Ki+" j"),la.publish("addPage",{pageNumber:oa})},ti=function ke(er){er>0&&er<=oa&&(Gr.splice(er,1),sa.splice(er,1),oa--,Ir>oa&&(Ir=oa),this.setPage(Ir))},ri=function Fe(er){er>0&&er<=oa&&(Ir=er)},ni=hr.__private__.getNumberOfPages=hr.getNumberOfPages=function(){return Gr.length-1},ai=function Ce(er,tr,rr){var nr,ar=void 0;return rr=rr||{},er=void 0!==er?er:$n[Kn].fontName,tr=void 0!==tr?tr:$n[Kn].fontStyle,nr=er.toLowerCase(),void 0!==Zn[nr]&&void 0!==Zn[nr][tr]?ar=Zn[nr][tr]:void 0!==Zn[er]&&void 0!==Zn[er][tr]?ar=Zn[er][tr]:!1===rr.disableWarning&&gb.warn("Unable to look up font label for font '"+er+"', '"+tr+"'. Refer to getFontList() for available fonts."),ar||rr.noFallback||null==(ar=Zn.times[tr])&&(ar=Zn.times.normal),ar},ii=hr.__private__.putInfo=function(){for(var er in ma(),Wr("<<"),Wr("/Producer (jsPDF "+g.version+")"),Vn)Vn.hasOwnProperty(er)&&Vn[er]&&Wr("/"+er.substr(0,1).toUpperCase()+er.substr(1)+" ("+$a(Vn[er])+")");Wr("/CreationDate ("+Br+")"),Wr(">>"),Wr("endobj")},oi=hr.__private__.putCatalog=function(er){var tr=(er=er||{}).rootDictionaryObjId||ba;switch(ma(),Wr("<<"),Wr("/Type /Catalog"),Wr("/Pages "+tr+" 0 R"),Zr||(Zr="fullwidth"),Zr){case"fullwidth":Wr("/OpenAction [3 0 R /FitH null]");break;case"fullheight":Wr("/OpenAction [3 0 R /FitV null]");break;case"fullpage":Wr("/OpenAction [3 0 R /Fit]");break;case"original":Wr("/OpenAction [3 0 R /XYZ null null 1]");break;default:var rr=""+Zr;"%"===rr.substr(rr.length-1)&&(Zr=parseInt(Zr)/100),"number"==typeof Zr&&Wr("/OpenAction [3 0 R /XYZ null null "+wr(Zr)+"]")}switch(Hn||(Hn="continuous"),Hn){case"continuous":Wr("/PageLayout /OneColumn");break;case"single":Wr("/PageLayout /SinglePage");break;case"two":case"twoleft":Wr("/PageLayout /TwoColumnLeft");break;case"tworight":Wr("/PageLayout /TwoColumnRight")}Qn&&Wr("/PageMode /"+Qn),la.publish("putCatalog"),Wr(">>"),Wr("endobj")},si=hr.__private__.putTrailer=function(){Wr("trailer"),Wr("<<"),Wr("/Size "+(Qr+1)),Wr("/Root "+Qr+" 0 R"),Wr("/Info "+(Qr-1)+" 0 R"),Wr("/ID [ <"+Er+"> <"+Er+"> ]"),Wr(">>")},li=hr.__private__.putHeader=function(){Wr("%PDF-"+pr),Wr("%ºß¬à")},ci=hr.__private__.putXRef=function(){var er="0000000000";Wr("xref"),Wr("0 "+(Qr+1)),Wr("0000000000 65535 f ");for(var tr=1;tr<=Qr;tr++)"function"==typeof Or[tr]?Wr((er+Or[tr]()).slice(-10)+" 00000 n "):void 0!==Or[tr]?Wr((er+Or[tr]).slice(-10)+" 00000 n "):Wr("0000000000 00000 n ")},ui=hr.__private__.buildDocument=function(){Kr(),qr(Dr),la.publish("buildDocument"),li(),Ea(),Ka(),Va(),ii(),oi();var er=jr;return ci(),si(),Wr("startxref"),Wr(""+er),Wr("%%EOF"),qr(Gr[Ir]),Dr.join("\n")},di=hr.__private__.getBlob=function(er){return new Blob([Yr(er)],{type:"application/pdf"})},hi=hr.output=hr.__private__.output=Ya((function(er,tr){switch("string"==typeof(tr=tr||{})?tr={filename:tr}:tr.filename=tr.filename||"generated.pdf",er){case void 0:return ui();case"save":hr.save(tr.filename);break;case"arraybuffer":return Yr(ui());case"blob":return di(ui());case"bloburi":case"bloburl":if(void 0!==fb.URL&&"function"==typeof fb.URL.createObjectURL)return fb.URL&&fb.URL.createObjectURL(di(ui()))||void 0;gb.warn("bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser.");break;case"datauristring":case"dataurlstring":var rr="",nr=ui();try{rr=_b(nr)}catch(er){rr=_b(unescape(encodeURIComponent(nr)))}return"data:application/pdf;filename="+tr.filename+";base64,"+rr;case"pdfobjectnewwindow":if("[object Window]"===Object.prototype.toString.call(fb)){var ar=' - - - - - - - - - - - - - -

    Select an image:

    -smiley.svg -
    -logo.png - - - diff --git a/src/editor/extensions/imagelib/index.html b/src/editor/extensions/imagelib/index.html deleted file mode 100644 index 9aec0ecd..00000000 --- a/src/editor/extensions/imagelib/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -

    Select an image:

    -smiley.svg -
    -logo.png - - - diff --git a/src/editor/extensions/imagelib/openclipart.html b/src/editor/extensions/imagelib/openclipart.html deleted file mode 100644 index 866a8d17..00000000 --- a/src/editor/extensions/imagelib/openclipart.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/editor/index.js b/src/editor/index.js index fe9f1a91..36d70438 100644 --- a/src/editor/index.js +++ b/src/editor/index.js @@ -45,14 +45,7 @@ svgEditor.setConfig({ // EXTENSION CONFIG svgEditor.setConfig({ - extensions: [ - // 'ext-overview_window.js', 'ext-markers.js', 'ext-connector.js', - // 'ext-eyedropper.js', 'ext-shapes.js', 'ext-imagelib.js', - // 'ext-grid.js', 'ext-polygon.js', 'ext-star.js', 'ext-panning.js', - // 'ext-storage.js' - ], - // noDefaultExtensions can only be meaningfully used in - // `svgedit-config-es.js` or in the URL + extensions: [], noDefaultExtensions: false }); diff --git a/src/editor/locale.js b/src/editor/locale.js index 5ab2e63e..f86aa7be 100644 --- a/src/editor/locale.js +++ b/src/editor/locale.js @@ -103,19 +103,6 @@ export const setStrings = function (type, obj, ids) { * @param {string} langParam * @returns {module:locale.AddLangExtensionLocaleData} */ - -let editor_; -/** - * Sets the current editor instance (on which `addLangData`) exists. - * @function init - * @memberof module:locale - * @param {module:locale.LocaleEditorInit} editor - * @returns {void} -*/ -export const init = (editor) => { - editor_ = editor; -}; - /** * @typedef {PlainObject} module:locale.LangAndData * @property {string} langParam @@ -128,17 +115,7 @@ export const init = (editor) => { * @fires module:svgcanvas.SvgCanvas#event:ext_addLangData * @returns {Promise} Resolves to [`LangAndData`]{@link module:locale.LangAndData} */ -export const readLang = async function (langData) { - const more = await editor_.addLangData(langParam); - $.each(more, function (i, m) { - if (m.data) { - langData = $.merge(langData, m.data); - } - }); - - // Old locale file, do nothing for now. - if (!langData.tools) { return undefined; } - +export const readLang = function (langData) { const { tools, // misc, diff --git a/src/editor/svgedit.js b/src/editor/svgedit.js index 77888b7a..6ecef8be 100644 --- a/src/editor/svgedit.js +++ b/src/editor/svgedit.js @@ -42,8 +42,7 @@ import jQueryPluginDBox from '../svgcanvas/dbox.js'; import { readLang, putLocale, - setStrings, - init as localeInit + setStrings } from './locale.js'; const {$q} = Utils; @@ -130,17 +129,17 @@ const callbacks = [], * @type {string[]} */ defaultExtensions = [ - 'ext-connector.js', - 'ext-eyedropper.js', - 'ext-grid.js', - 'ext-imagelib.js', - 'ext-markers.js', - 'ext-overview_window.js', - 'ext-panning.js', - 'ext-polygon.js', - 'ext-shapes.js', - 'ext-star.js', - 'ext-storage.js' + 'ext-connector', + 'ext-eyedropper', + 'ext-grid', + 'ext-imagelib', + 'ext-markers', + 'ext-overview_window', + 'ext-panning', + 'ext-polygon', + 'ext-shapes', + 'ext-star', + 'ext-storage' ], /** * @typedef {"@default"|string} module:SVGEditor.Stylesheet `@default` will automatically load all of the default CSS paths for SVGEditor @@ -157,7 +156,7 @@ const callbacks = [], * @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 {string} [extPath="extensions/"] The path used for extension files, with trailing slash. Default will be changed to `../dist/extensions/` if this is a modular load. Note that as of version 2.7, this is not configurable by URL for security reasons. + * @property {string} [extPath="extensions/"] The path used for extension files, 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! @@ -231,7 +230,7 @@ const callbacks = [], no_save_warning: false, // PATH CONFIGURATION // The following path configuration items are disallowed in the URL (as should any future path configurations) - extPath: './extensions/', // Default will be changed if this is a non-modular load + extPath: './extensions/', imgPath: './images/', // DOCUMENT PROPERTIES // Change the following to a preference (already in the Document Properties dialog)? @@ -319,41 +318,6 @@ async function loadSvgString (str, {noAlert} = {}) { throw new Error('Error loading SVG'); } -/** - * @function module:SVGEditor~getImportLocale - * @param {PlainObject} defaults - * @param {string} defaults.defaultLang - * @param {string} defaults.defaultName - * @returns {module:SVGEditor~ImportLocale} - */ -function getImportLocale ({defaultLang, defaultName}) { - /** - * @function module:SVGEditor~ImportLocale - * @param {PlainObject} localeInfo - * @param {string} [localeInfo.name] Defaults to `defaultName` of {@link module:SVGEditor~getImportLocale} - * @param {string} [localeInfo.lang=defaultLang] Defaults to `defaultLang` of {@link module:SVGEditor~getImportLocale} - * @returns {Promise} Resolves to {@link module:locale.LocaleStrings} - */ - return async function importLocaleDefaulting ({name = defaultName, lang = defaultLang} = {}) { - /** - * - * @param {string} language - * @returns {Promise} Resolves to {@link module:locale.LocaleStrings} - */ - async function importLocale (language) { - const url = `${curConfig.extPath}ext-locale/${name}/${language}.js`; - // eslint-disable-next-line node/no-unsupported-features/es-syntax - const locale = await import(url); - return locale.default; - } - try { - return await importLocale(lang); - } catch (err) { - return importLocale('en'); - } - }; -} - /** * EXPORTS. */ @@ -797,7 +761,6 @@ editor.init = function () { * @returns {Promise} Resolves to result of {@link module:locale.readLang} */ const extAndLocaleFunc = async function () { - // const lang = ('lang' in curPrefs) ? curPrefs.lang : null; const {langParam, langData} = await editor.putLocale(editor.pref('lang'), goodLangs); await setLang(langParam, langData); @@ -809,13 +772,6 @@ editor.init = function () { try { await Promise.all( curConfig.extensions.map(async (extname) => { - const extensionName = extname.match(/^ext-(.+)\.js/); - // const {extName} = extname.match(/^ext-(?.+)\.js/).groups; - if (!extensionName) { // Ensure URL cannot specify some other unintended file in the extPath - return undefined; - } - const url = curConfig.extPath + extname; - /** * @tutorial ExtensionDocs * @typedef {PlainObject} module:SVGEditor.ExtensionObject @@ -826,16 +782,14 @@ editor.init = function () { /** * @type {module:SVGEditor.ExtensionObject} */ + const url = `${curConfig.extPath}${extname}/${extname}.js`; // eslint-disable-next-line node/no-unsupported-features/es-syntax const imported = await import(url); - const {name = extensionName[1], init} = imported.default; - // const {name = extName, init} = imported; - const importLocale = getImportLocale({defaultLang: langParam, defaultName: name}); - return editor.addExtension(name, (init && init.bind(editor)), {$, importLocale}); + const {name = extname, init} = imported.default; + return editor.addExtension(name, (init && init.bind(editor)), {$, langParam}); } catch (err) { // Todo: Add config to alert any errors - console.log(err); // eslint-disable-line no-console - console.error('Extension failed to load: ' + extname + '; ' + err); // eslint-disable-line no-console + console.error('Extension failed to load: ' + extname + '; ', err); // eslint-disable-line no-console return undefined; } }) @@ -2874,34 +2828,19 @@ editor.init = function () { } }; - const extsPreLang = []; /** * @param {external:Window} win * @param {module:svgcanvas.SvgCanvas#event:extension_added} ext * @listens module:svgcanvas.SvgCanvas#event:extension_added * @returns {Promise|void} Resolves to `undefined` */ - const extAdded = async function (win, ext) { + const extAdded = function (win, ext) { if (!ext) { return undefined; } let cbCalled = false; let resizeDone = false; - if (ext.langReady) { - if (editor.langChanged) { // We check for this since the "lang" pref could have been set by storage - const lang = editor.pref('lang'); - await ext.langReady({ - lang, - uiStrings, - importLocale: getImportLocale({defaultLang: lang, defaultName: ext.name}) - }); - loadedExtensionNames.push(ext.name); - } else { - extsPreLang.push(ext); - } - } - /** * Clear resize timer if present and if not previously performed, * perform an icon resize. @@ -6090,16 +6029,15 @@ editor.init = function () { // revnums += svgCanvas.getVersion(); // $('#copyright')[0].setAttribute('title', revnums); - const loadedExtensionNames = []; /** * @function module:SVGEditor.setLang * @param {string} lang The language code * @param {module:locale.LocaleStrings} allStrings See {@tutorial LocaleDocs} * @fires module:svgcanvas.SvgCanvas#event:ext_langReady * @fires module:svgcanvas.SvgCanvas#event:ext_langChanged - * @returns {Promise} A Promise which resolves to `undefined` + * @returns {void} A Promise which resolves to `undefined` */ - const setLang = editor.setLang = async function (lang, allStrings) { + const setLang = editor.setLang = function (lang, allStrings) { editor.langChanged = true; editor.pref('lang', lang); $('#lang_select').val(lang); @@ -6127,28 +6065,6 @@ editor.init = function () { populateLayers(); } - // In case extensions loaded before the locale, now we execute a callback on them - if (extsPreLang.length) { - await Promise.all(extsPreLang.map((ext) => { - loadedExtensionNames.push(ext.name); - return ext.langReady({ - lang, - uiStrings, - importLocale: getImportLocale({defaultLang: lang, defaultName: ext.name}) - }); - })); - extsPreLang.length = 0; - } else { - loadedExtensionNames.forEach((loadedExtensionName) => { - svgCanvas.runExtension( - loadedExtensionName, - 'langReady', - /** @type {module:svgcanvas.SvgCanvas#event:ext_langReady} */ { - lang, uiStrings, importLocale: getImportLocale({defaultLang: lang, defaultName: loadedExtensionName}) - } - ); - }); - } svgCanvas.runExtensions('langChanged', /** @type {module:svgcanvas.SvgCanvas#event:ext_langChanged} */ lang); // Update flyout tooltips @@ -6171,51 +6087,9 @@ editor.init = function () { $('#tool_pos' + this.id.substr(10))[0].title = this.title; }); }; - localeInit( - /** - * @implements {module:locale.LocaleEditorInit} - */ - { - /** - * Gets an array of results from extensions with a `addLangData` method, - * returning an object with a `data` property set to its locales (to be - * merged with regular locales). - * @param {string} langParam - * @fires module:svgcanvas.SvgCanvas#event:ext_addLangData - * @todo Can we forego this in favor of `langReady` (or forego `langReady`)? - * @returns {module:locale.AddLangExtensionLocaleData[]} - */ - addLangData (langParam) { - return svgCanvas.runExtensions( - 'addLangData', - /** - * @function - * @type {module:svgcanvas.ExtensionVarBuilder} - * @param {string} name - * @returns {module:svgcanvas.SvgCanvas#event:ext_addLangData} - */ - (name) => { // We pass in a function as we don't know the extension name here when defining this `addLangData` method - return { - lang: langParam, - importLocale: getImportLocale({defaultLang: langParam, defaultName: name}) - }; - }, - true - ); - }, - curConfig - } - ); + // Load extensions - // Bit of a hack to run extensions in local Opera/IE9 - if (document.location.protocol === 'file:') { - setTimeout(extAndLocaleFunc, 100); - } else { - // Returns a promise (if we wanted to fire 'extensions-loaded' event, - // potentially useful to hide interface as some extension locales - // are only available after this) - extAndLocaleFunc(); - } + extAndLocaleFunc(); }; /**