From 02a7275ae433ff54578eaea74ffe22db30d0ba3c Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Sun, 4 Nov 2018 11:19:34 +0100 Subject: [PATCH] Added sandboxed CKEditor 4 as a template editor --- CHANGELOG.md | 2 +- TODO.md | 2 +- UPGRADE.md | 2 +- client/package-lock.json | 1360 +++++++++++++----- client/package.json | 3 + client/src/lib/{ckeditor.js => ckeditor5.js} | 11 +- client/src/lib/form.js | 2 +- client/src/lib/grapesjs.js | 48 + client/src/lib/grapesjs.scss | 5 + client/src/lib/sandboxed-ckeditor.js | 73 +- client/src/lib/sandboxed-ckeditor.scss | 68 +- client/src/templates/helpers.js | 42 +- client/webpack.config.js | 17 +- config/default.yaml | 6 +- languages/de_DE.mo | Bin 84676 -> 89022 bytes languages/de_DE.po | 10 +- languages/es_ES.mo | Bin 89664 -> 94048 bytes languages/es_ES.po | 10 +- languages/it_IT.mo | Bin 80038 -> 84313 bytes languages/it_IT.po | 10 +- routes/sandboxed-ckeditor.js | 2 +- routes/sandboxed-mosaico.js | 2 +- views/layout.hbs | 1 + 23 files changed, 1299 insertions(+), 377 deletions(-) rename client/src/lib/{ckeditor.js => ckeditor5.js} (95%) create mode 100644 client/src/lib/grapesjs.js create mode 100644 client/src/lib/grapesjs.scss diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b18d957..328be1c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ * Fixed security issue where description tags were able to include script tags. Reported by Andreas Lindh. Fixed with [ae6affda](https://github.com/Mailtrain-org/mailtrain/commit/ae6affda8193f034e06f7e095ee23821a83d5190) * Fixed security issue where templates that looked like file paths loaded content from arbitrary files. Reported by Andreas Lindh. Fixed with [0879fa41](https://github.com/Mailtrain-org/mailtrain/commit/0879fa412a2d4a417aeca5cd5092a8f86531e7ef) * Fixed security issue where users were able to use html tags in subscription values. Reported by Andreas Lindh. Fixed with [9d5fb816](https://github.com/Mailtrain-org/mailtrain/commit/9d5fb816c937114966d4f589e1ad4e164ff3a187) - * Support for multiple HTML editors (Mosaico, GrapeJS, Summernote, HTML code) + * Support for multiple HTML editors (Mosaico, Grapesjs, Summernote, HTML code) ## 1.22.0 2017-03-02 diff --git a/TODO.md b/TODO.md index 2f34ef21..60693bbd 100644 --- a/TODO.md +++ b/TODO.md @@ -3,7 +3,7 @@ ### Templates - Add MJML template editor -- Include GrapeJS with MJML support +- Include Grapesjs with MJML support - CKEditor to sandbox - Add Files support to CKEditor diff --git a/UPGRADE.md b/UPGRADE.md index dddbbb7f..72bbc870 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -5,7 +5,7 @@ The migration should happen almost automatically. There are however the followin 1. Structure of config files (under `config`) has changed at many places. Revisit the default config (`config/default.toml`) and update your configs accordingly. -2. Images uploaded in a template editor (Mosaico, GrapeJS, etc.) need to be manually moved to a new destination (under `client`). +2. Images uploaded in a template editor (Mosaico, Grapesjs, etc.) need to be manually moved to a new destination (under `client`). For Mosaico, this means to move folders named by a number from `public/mosaico` to `client/static/mosaico`. 3. Directory for custom Mosaico templates has changed from `public/mosaico/templates` to `client/static/mosaico/templates`. diff --git a/client/package-lock.json b/client/package-lock.json index 36ab0b6e..9f883842 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -491,11 +491,20 @@ "@ckeditor/ckeditor5-utils": "11.0.0" } }, + "@types/node": { + "version": "10.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.2.tgz", + "integrity": "sha512-53ElVDSnZeFUUFIYzI8WLQ25IhWzb6vbddNp8UHlXQyU0ET2RhV5zg0NfubzU7iNMh5bBXb0htCzfvrSVNgzaQ==" + }, + "@types/semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "acorn": { "version": "5.3.0", @@ -570,20 +579,22 @@ "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" }, "anymatch": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, "requires": { "micromatch": "2.3.11", "normalize-path": "2.1.1" @@ -618,7 +629,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, "requires": { "arr-flatten": "1.1.0" } @@ -626,8 +636,7 @@ "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" }, "array-find-index": { "version": "1.0.2", @@ -653,8 +662,7 @@ "array-unique": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" }, "asap": { "version": "2.0.6", @@ -664,8 +672,7 @@ "asn1": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" }, "asn1.js": { "version": "4.9.2", @@ -690,14 +697,12 @@ "assert-plus": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" }, "async": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, "requires": { "lodash": "4.17.4" } @@ -705,8 +710,7 @@ "async-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" }, "async-foreach": { "version": "0.1.3", @@ -717,8 +721,7 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "attr-accept": { "version": "1.1.0", @@ -742,14 +745,12 @@ "aws-sign2": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" }, "aws4": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" }, "axios": { "version": "0.16.2", @@ -874,7 +875,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "babel-types": "6.26.0", @@ -1099,8 +1099,7 @@ "babel-plugin-syntax-flow": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", - "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", - "dev": true + "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=" }, "babel-plugin-syntax-function-bind": { "version": "6.13.0", @@ -1111,8 +1110,7 @@ "babel-plugin-syntax-jsx": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", - "dev": true + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=" }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", @@ -1454,7 +1452,6 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", - "dev": true, "requires": { "babel-plugin-syntax-flow": "6.18.0", "babel-runtime": "6.26.0" @@ -1484,7 +1481,6 @@ "version": "6.25.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", - "dev": true, "requires": { "babel-runtime": "6.26.0" } @@ -1493,7 +1489,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", - "dev": true, "requires": { "babel-helper-builder-react-jsx": "6.26.0", "babel-plugin-syntax-jsx": "6.18.0", @@ -1504,7 +1499,6 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", - "dev": true, "requires": { "babel-plugin-syntax-jsx": "6.18.0", "babel-runtime": "6.26.0" @@ -1514,7 +1508,6 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", - "dev": true, "requires": { "babel-plugin-syntax-jsx": "6.18.0", "babel-runtime": "6.26.0" @@ -1529,6 +1522,14 @@ "regenerator-transform": "0.10.1" } }, + "babel-plugin-transform-runtime": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", + "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", + "requires": { + "babel-runtime": "6.26.0" + } + }, "babel-plugin-transform-strict-mode": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", @@ -1624,7 +1625,6 @@ "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", - "dev": true, "requires": { "babel-plugin-transform-flow-strip-types": "6.22.0" } @@ -1633,7 +1633,6 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", - "dev": true, "requires": { "babel-plugin-syntax-jsx": "6.18.0", "babel-plugin-transform-react-display-name": "6.25.0", @@ -1763,7 +1762,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, "requires": { "babel-runtime": "6.26.0", "esutils": "2.0.2", @@ -1777,11 +1775,37 @@ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true }, + "backbone": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.3.3.tgz", + "integrity": "sha1-TMgOp8sWMaxHSInOQPL4vGg7KZk=", + "requires": { + "underscore": "1.8.3" + } + }, + "backbone-undo": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/backbone-undo/-/backbone-undo-0.2.5.tgz", + "integrity": "sha1-VbJSMPkDGcpiJGXomoAki4k8LOI=", + "requires": { + "backbone": "1.2.1", + "underscore": "1.8.3" + }, + "dependencies": { + "backbone": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.2.1.tgz", + "integrity": "sha1-1yGcXtSeXhMdv/ryXJbW0sw8oD4=", + "requires": { + "underscore": "1.8.3" + } + } + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "base64-js": { "version": "1.2.1", @@ -1793,7 +1817,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, "optional": true, "requires": { "tweetnacl": "0.14.5" @@ -1808,8 +1831,7 @@ "binary-extensions": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", - "dev": true + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=" }, "block-stream": { "version": "0.0.9", @@ -1835,14 +1857,12 @@ "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, "boom": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, "requires": { "hoek": "2.16.3" } @@ -1856,7 +1876,6 @@ "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, "requires": { "balanced-match": "1.0.0", "concat-map": "0.0.1" @@ -1866,7 +1885,6 @@ "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, "requires": { "expand-range": "1.8.2", "preserve": "0.2.0", @@ -1996,6 +2014,15 @@ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "requires": { + "no-case": "2.3.2", + "upper-case": "1.1.3" + } + }, "camelcase": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", @@ -2045,8 +2072,12 @@ "caseless": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=" + }, + "cash-dom": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/cash-dom/-/cash-dom-1.3.7.tgz", + "integrity": "sha512-cWqx3b+8Vh5hvRd87voSW7hxHVhUekGiOUd7iix8fP29cl6TBIInkAqYVSKaL2xeVewS3/kfPnIIC+Xl3nVe/A==" }, "center-align": { "version": "0.1.3", @@ -2070,7 +2101,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, "requires": { "ansi-styles": "2.2.1", "escape-string-regexp": "1.0.5", @@ -2079,11 +2109,55 @@ "supports-color": "2.0.0" } }, + "cheerio": { + "version": "0.22.0", + "resolved": "http://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", + "requires": { + "css-select": "1.2.0", + "dom-serializer": "0.1.0", + "entities": "1.1.2", + "htmlparser2": "3.10.0", + "lodash.assignin": "4.2.0", + "lodash.bind": "4.2.1", + "lodash.defaults": "4.2.0", + "lodash.filter": "4.6.0", + "lodash.flatten": "4.4.0", + "lodash.foreach": "4.5.0", + "lodash.map": "4.6.0", + "lodash.merge": "4.6.1", + "lodash.pick": "4.4.0", + "lodash.reduce": "4.6.0", + "lodash.reject": "4.6.0", + "lodash.some": "4.6.0" + }, + "dependencies": { + "css-select": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.2", + "domutils": "1.5.1", + "nth-check": "1.0.2" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.2.1" + } + } + } + }, "chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", @@ -2125,6 +2199,21 @@ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz", "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=" }, + "clean-css": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "requires": { + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", @@ -2186,6 +2275,16 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, + "codemirror": { + "version": "5.41.0", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.41.0.tgz", + "integrity": "sha512-mkCwbneCx2WHg1MNCYrI+8Zuq0KMMaZ5yTFpQlAZazy3yxME8bHcuSc9WUFzgPZ114WqWu1FIHlx8CavLzBDIg==" + }, + "codemirror-formatting": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/codemirror-formatting/-/codemirror-formatting-1.0.0.tgz", + "integrity": "sha1-h5zB/dkBg0PB1VEXac5TYNcF6/I=" + }, "color": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", @@ -2242,7 +2341,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, "requires": { "delayed-stream": "1.0.0" } @@ -2250,8 +2348,7 @@ "commander": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" }, "commondir": { "version": "1.0.1", @@ -2262,8 +2359,16 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "requires": { + "ini": "1.3.5", + "proto-list": "1.2.4" + } }, "console-browserify": { "version": "1.1.0", @@ -2300,8 +2405,7 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cosmiconfig": { "version": "5.0.6", @@ -2402,7 +2506,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, "requires": { "boom": "2.10.1" } @@ -2585,8 +2688,7 @@ "css-what": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", - "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==", - "dev": true + "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==" }, "cssesc": { "version": "0.1.0", @@ -3247,7 +3349,6 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, "requires": { "assert-plus": "1.0.0" }, @@ -3255,8 +3356,7 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" } } }, @@ -3277,6 +3377,16 @@ "jquery": "3.3.1" } }, + "datauri": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/datauri/-/datauri-1.1.0.tgz", + "integrity": "sha512-0q+cTTKx7q8eDteZRIQLTFJuiIsVing17UbWTPssY4JLSMaYsk/VKpNulBDo9NSgQWcvlPrkEHW8kUO67T/7mQ==", + "requires": { + "image-size": "0.6.3", + "mimer": "0.3.2", + "semver": "5.5.0" + } + }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", @@ -3297,6 +3407,11 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, + "deep-extend": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -3335,8 +3450,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "delegates": { "version": "1.0.0", @@ -3399,7 +3513,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, "requires": { "domelementtype": "1.1.3", "entities": "1.1.2" @@ -3408,8 +3521,7 @@ "domelementtype": { "version": "1.1.3", "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" } } }, @@ -3422,14 +3534,20 @@ "domelementtype": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.2.1.tgz", - "integrity": "sha512-SQVCLFS2E7G5CRCMdn6K9bIhRj1bS6QBWZfF0TUPh4V/BbqrQ619IdSS3/izn0FZ+9l+uODzaZjb08fjOfablA==", - "dev": true + "integrity": "sha512-SQVCLFS2E7G5CRCMdn6K9bIhRj1bS6QBWZfF0TUPh4V/BbqrQ619IdSS3/izn0FZ+9l+uODzaZjb08fjOfablA==" + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1.2.1" + } }, "domutils": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, "requires": { "dom-serializer": "0.1.0", "domelementtype": "1.2.1" @@ -3448,12 +3566,45 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, "optional": true, "requires": { "jsbn": "0.1.1" } }, + "editorconfig": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.2.tgz", + "integrity": "sha512-GWjSI19PVJAM9IZRGOS+YKI8LN+/sjkSjNyvxL5ucqP9/IqtYNXBaQ/6c/hkPNYQHyOHra2KoXZI/JVpuqwmcQ==", + "requires": { + "@types/node": "10.12.2", + "@types/semver": "5.5.0", + "commander": "2.19.0", + "lru-cache": "4.1.3", + "semver": "5.6.0", + "sigmund": "1.0.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + }, + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + } + } + }, "electron-to-chromium": { "version": "1.3.31", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.31.tgz", @@ -3504,8 +3655,7 @@ "entities": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" }, "errno": { "version": "0.1.6", @@ -3552,8 +3702,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { "version": "1.11.0", @@ -3598,8 +3747,7 @@ "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" }, "events": { "version": "1.1.1", @@ -3621,7 +3769,6 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, "requires": { "is-posix-bracket": "0.1.1" } @@ -3630,7 +3777,6 @@ "version": "1.8.2", "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, "requires": { "fill-range": "2.2.3" } @@ -3638,14 +3784,12 @@ "extend": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, "extglob": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, "requires": { "is-extglob": "1.0.0" } @@ -3653,8 +3797,7 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { "version": "2.0.1", @@ -3697,14 +3840,12 @@ "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" }, "fill-range": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true, "requires": { "is-number": "2.1.0", "isobject": "2.1.0", @@ -3747,17 +3888,20 @@ "debug": "3.1.0" } }, + "font-awesome": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", + "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, "for-own": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, "requires": { "for-in": "1.0.2" } @@ -3765,14 +3909,12 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, "requires": { "asynckit": "0.4.0", "combined-stream": "1.0.5", @@ -3799,14 +3941,12 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", - "dev": true, "optional": true, "requires": { "nan": "2.10.0", @@ -3816,24 +3956,20 @@ "abbrev": { "version": "1.1.1", "bundled": true, - "dev": true, "optional": true }, "ansi-regex": { "version": "2.1.1", - "bundled": true, - "dev": true + "bundled": true }, "aproba": { "version": "1.2.0", "bundled": true, - "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.4", "bundled": true, - "dev": true, "optional": true, "requires": { "delegates": "1.0.0", @@ -3842,13 +3978,11 @@ }, "balanced-match": { "version": "1.0.0", - "bundled": true, - "dev": true + "bundled": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, - "dev": true, "requires": { "balanced-match": "1.0.0", "concat-map": "0.0.1" @@ -3857,34 +3991,28 @@ "chownr": { "version": "1.0.1", "bundled": true, - "dev": true, "optional": true }, "code-point-at": { "version": "1.1.0", - "bundled": true, - "dev": true + "bundled": true }, "concat-map": { "version": "0.0.1", - "bundled": true, - "dev": true + "bundled": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true, - "dev": true + "bundled": true }, "core-util-is": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "debug": { "version": "2.6.9", "bundled": true, - "dev": true, "optional": true, "requires": { "ms": "2.0.0" @@ -3893,25 +4021,21 @@ "deep-extend": { "version": "0.5.1", "bundled": true, - "dev": true, "optional": true }, "delegates": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true }, "detect-libc": { "version": "1.0.3", "bundled": true, - "dev": true, "optional": true }, "fs-minipass": { "version": "1.2.5", "bundled": true, - "dev": true, "optional": true, "requires": { "minipass": "2.2.4" @@ -3920,13 +4044,11 @@ "fs.realpath": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true }, "gauge": { "version": "2.7.4", "bundled": true, - "dev": true, "optional": true, "requires": { "aproba": "1.2.0", @@ -3942,7 +4064,6 @@ "glob": { "version": "7.1.2", "bundled": true, - "dev": true, "optional": true, "requires": { "fs.realpath": "1.0.0", @@ -3956,13 +4077,11 @@ "has-unicode": { "version": "2.0.1", "bundled": true, - "dev": true, "optional": true }, "iconv-lite": { "version": "0.4.21", "bundled": true, - "dev": true, "optional": true, "requires": { "safer-buffer": "2.1.2" @@ -3971,7 +4090,6 @@ "ignore-walk": { "version": "3.0.1", "bundled": true, - "dev": true, "optional": true, "requires": { "minimatch": "3.0.4" @@ -3980,7 +4098,6 @@ "inflight": { "version": "1.0.6", "bundled": true, - "dev": true, "optional": true, "requires": { "once": "1.4.0", @@ -3989,19 +4106,16 @@ }, "inherits": { "version": "2.0.3", - "bundled": true, - "dev": true + "bundled": true }, "ini": { "version": "1.3.5", "bundled": true, - "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, - "dev": true, "requires": { "number-is-nan": "1.0.1" } @@ -4009,26 +4123,22 @@ "isarray": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true }, "minimatch": { "version": "3.0.4", "bundled": true, - "dev": true, "requires": { "brace-expansion": "1.1.11" } }, "minimist": { "version": "0.0.8", - "bundled": true, - "dev": true + "bundled": true }, "minipass": { "version": "2.2.4", "bundled": true, - "dev": true, "requires": { "safe-buffer": "5.1.1", "yallist": "3.0.2" @@ -4037,7 +4147,6 @@ "minizlib": { "version": "1.1.0", "bundled": true, - "dev": true, "optional": true, "requires": { "minipass": "2.2.4" @@ -4046,7 +4155,6 @@ "mkdirp": { "version": "0.5.1", "bundled": true, - "dev": true, "requires": { "minimist": "0.0.8" } @@ -4054,20 +4162,17 @@ "ms": { "version": "2.0.0", "bundled": true, - "dev": true, "optional": true }, "nan": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", - "dev": true, "optional": true }, "needle": { "version": "2.2.0", "bundled": true, - "dev": true, "optional": true, "requires": { "debug": "2.6.9", @@ -4078,7 +4183,6 @@ "node-pre-gyp": { "version": "0.10.0", "bundled": true, - "dev": true, "optional": true, "requires": { "detect-libc": "1.0.3", @@ -4096,7 +4200,6 @@ "nopt": { "version": "4.0.1", "bundled": true, - "dev": true, "optional": true, "requires": { "abbrev": "1.1.1", @@ -4106,13 +4209,11 @@ "npm-bundled": { "version": "1.0.3", "bundled": true, - "dev": true, "optional": true }, "npm-packlist": { "version": "1.1.10", "bundled": true, - "dev": true, "optional": true, "requires": { "ignore-walk": "3.0.1", @@ -4122,7 +4223,6 @@ "npmlog": { "version": "4.1.2", "bundled": true, - "dev": true, "optional": true, "requires": { "are-we-there-yet": "1.1.4", @@ -4133,19 +4233,16 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true, - "dev": true + "bundled": true }, "object-assign": { "version": "4.1.1", "bundled": true, - "dev": true, "optional": true }, "once": { "version": "1.4.0", "bundled": true, - "dev": true, "requires": { "wrappy": "1.0.2" } @@ -4153,19 +4250,16 @@ "os-homedir": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "osenv": { "version": "0.1.5", "bundled": true, - "dev": true, "optional": true, "requires": { "os-homedir": "1.0.2", @@ -4175,19 +4269,16 @@ "path-is-absolute": { "version": "1.0.1", "bundled": true, - "dev": true, "optional": true }, "process-nextick-args": { "version": "2.0.0", "bundled": true, - "dev": true, "optional": true }, "rc": { "version": "1.2.7", "bundled": true, - "dev": true, "optional": true, "requires": { "deep-extend": "0.5.1", @@ -4199,7 +4290,6 @@ "minimist": { "version": "1.2.0", "bundled": true, - "dev": true, "optional": true } } @@ -4207,7 +4297,6 @@ "readable-stream": { "version": "2.3.6", "bundled": true, - "dev": true, "optional": true, "requires": { "core-util-is": "1.0.2", @@ -4222,7 +4311,6 @@ "rimraf": { "version": "2.6.2", "bundled": true, - "dev": true, "optional": true, "requires": { "glob": "7.1.2" @@ -4230,43 +4318,36 @@ }, "safe-buffer": { "version": "5.1.1", - "bundled": true, - "dev": true + "bundled": true }, "safer-buffer": { "version": "2.1.2", "bundled": true, - "dev": true, "optional": true }, "sax": { "version": "1.2.4", "bundled": true, - "dev": true, "optional": true }, "semver": { "version": "5.5.0", "bundled": true, - "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", "bundled": true, - "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", "bundled": true, - "dev": true, "optional": true }, "string-width": { "version": "1.0.2", "bundled": true, - "dev": true, "requires": { "code-point-at": "1.1.0", "is-fullwidth-code-point": "1.0.0", @@ -4276,7 +4357,6 @@ "string_decoder": { "version": "1.1.1", "bundled": true, - "dev": true, "optional": true, "requires": { "safe-buffer": "5.1.1" @@ -4285,7 +4365,6 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, - "dev": true, "requires": { "ansi-regex": "2.1.1" } @@ -4293,13 +4372,11 @@ "strip-json-comments": { "version": "2.0.1", "bundled": true, - "dev": true, "optional": true }, "tar": { "version": "4.4.1", "bundled": true, - "dev": true, "optional": true, "requires": { "chownr": "1.0.1", @@ -4314,13 +4391,11 @@ "util-deprecate": { "version": "1.0.2", "bundled": true, - "dev": true, "optional": true }, "wide-align": { "version": "1.1.2", "bundled": true, - "dev": true, "optional": true, "requires": { "string-width": "1.0.2" @@ -4328,13 +4403,11 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true, - "dev": true + "bundled": true }, "yallist": { "version": "3.0.2", - "bundled": true, - "dev": true + "bundled": true } } }, @@ -4384,14 +4457,12 @@ "generate-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=" }, "generate-object-property": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, "requires": { "is-property": "1.0.2" } @@ -4412,7 +4483,6 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, "requires": { "assert-plus": "1.0.0" }, @@ -4420,8 +4490,7 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" } } }, @@ -4439,7 +4508,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -4453,7 +4521,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, "requires": { "glob-parent": "2.0.0", "is-glob": "2.0.1" @@ -4463,7 +4530,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, "requires": { "is-glob": "2.0.1" } @@ -4509,14 +4575,44 @@ "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "grapesjs": { + "version": "0.14.40", + "resolved": "https://registry.npmjs.org/grapesjs/-/grapesjs-0.14.40.tgz", + "integrity": "sha512-KjXO/NM7KGa9ZmSf+09inQ7gSDWwOS1rHBWZw+0FAW7bX/jFWfKBl0P+p3P1OS9cHLy5Wr9q8gCkjqNfAcgL1w==", + "requires": { + "backbone": "1.3.3", + "backbone-undo": "0.2.5", + "cash-dom": "1.3.7", + "codemirror": "5.41.0", + "codemirror-formatting": "1.0.0", + "font-awesome": "4.7.0", + "keymaster": "1.6.2", + "promise-polyfill": "8.1.0", + "spectrum-colorpicker": "1.8.0", + "underscore": "1.9.1" + }, + "dependencies": { + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + } + } + }, + "grapesjs-mjml": { + "version": "0.0.27", + "resolved": "https://registry.npmjs.org/grapesjs-mjml/-/grapesjs-mjml-0.0.27.tgz", + "integrity": "sha512-P+J7IVxNrv7fn04UD6Rixu6+M0r8hZV4Z0AkCtWHLLhbwGHsgmZ9G4KlcI1K7egpH18G0019GTkw2NBqpbA3cQ==", + "requires": { + "mjml": "3.3.5" + } }, "har-validator": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, "requires": { "chalk": "1.1.3", "commander": "2.13.0", @@ -4537,7 +4633,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, "requires": { "ansi-regex": "2.1.1" } @@ -4583,7 +4678,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, "requires": { "boom": "2.10.1", "cryptiles": "2.0.5", @@ -4591,6 +4685,11 @@ "sntp": "1.0.9" } }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, "hex-color-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", @@ -4623,8 +4722,7 @@ "hoek": { "version": "2.16.3", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" }, "hoist-non-react-statics": { "version": "2.3.1", @@ -4665,11 +4763,83 @@ "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", "dev": true }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "requires": { + "camel-case": "3.0.0", + "clean-css": "4.2.1", + "commander": "2.17.1", + "he": "1.2.0", + "param-case": "2.1.1", + "relateurl": "0.2.7", + "uglify-js": "3.4.9" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "uglify-js": { + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "requires": { + "commander": "2.17.1", + "source-map": "0.6.1" + } + } + } + }, + "htmlparser2": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz", + "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==", + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.4.2", + "domutils": "1.7.0", + "entities": "1.1.2", + "inherits": "2.0.3", + "readable-stream": "3.0.6" + }, + "dependencies": { + "domelementtype": { + "version": "1.3.0", + "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" + }, + "readable-stream": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.0.6.tgz", + "integrity": "sha512-9E1oLoOWfhSXHGv6QlwXJim7uNzd9EVlWK+21tCU9Ju/kR0/p2AZYPz4qSchgO8PlLIH4FpZYfzwS+rEksZjIg==", + "requires": { + "inherits": "2.0.3", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, "http-signature": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, "requires": { "assert-plus": "0.2.0", "jsprim": "1.4.1", @@ -4799,6 +4969,11 @@ "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", "dev": true }, + "image-size": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz", + "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==" + }, "immutable": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", @@ -4853,7 +5028,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "1.4.0", "wrappy": "1.0.2" @@ -4862,8 +5036,12 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "interpret": { "version": "1.1.0", @@ -4901,7 +5079,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, "requires": { "binary-extensions": "1.11.0" } @@ -4955,14 +5132,12 @@ "is-dotfile": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" }, "is-equal-shallow": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, "requires": { "is-primitive": "2.0.0" } @@ -4970,14 +5145,12 @@ "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" }, "is-finite": { "version": "1.0.2", @@ -5001,7 +5174,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, "requires": { "is-extglob": "1.0.0" } @@ -5010,7 +5182,6 @@ "version": "2.17.1", "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz", "integrity": "sha512-Q2khNw+oBlWuaYvEEHtKSw/pCxD2L5Rc1C+UQme9X6JdRDh7m5D7HkozA0qa3DUkQ6VzCnEm8mVIQPyIRkI5sQ==", - "dev": true, "requires": { "generate-function": "2.0.0", "generate-object-property": "1.2.0", @@ -5022,7 +5193,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, "requires": { "kind-of": "3.2.2" } @@ -5083,20 +5253,17 @@ "is-posix-bracket": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" }, "is-primitive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" }, "is-property": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" }, "is-regex": { "version": "1.0.4", @@ -5139,8 +5306,7 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "is-utf8": { "version": "0.2.1", @@ -5156,14 +5322,12 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, "requires": { "isarray": "1.0.0" }, @@ -5171,8 +5335,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" } } }, @@ -5188,8 +5351,7 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "javascript-stringify": { "version": "1.6.0", @@ -5208,6 +5370,28 @@ "integrity": "sha512-lLkz3IRPTNeATsKQGeltbzRK/5+bWsXBHfpZrxJAi4N30RtCtNA+rJznp4uR2+4OgkBsoeeFwONVLr4gzIVErQ==", "dev": true }, + "js-beautify": { + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.8.8.tgz", + "integrity": "sha512-qVNq7ZZ7ZbLdzorvSlRDadS0Rh5oyItaE95v6I4wbbuSiijxn7SnnsV6dvKlcXuO2jX7lK8tn9fBulx34K/Ejg==", + "requires": { + "config-chain": "1.1.12", + "editorconfig": "0.15.2", + "mkdirp": "0.5.1", + "nopt": "4.0.1" + }, + "dependencies": { + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "requires": { + "abbrev": "1.1.1", + "osenv": "0.1.4" + } + } + } + }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", @@ -5227,7 +5411,6 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, "optional": true }, "jsesc": { @@ -5251,8 +5434,7 @@ "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-traverse": { "version": "0.4.1", @@ -5272,8 +5454,7 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json5": { "version": "0.5.1", @@ -5299,14 +5480,12 @@ "jsonpointer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=" }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -5317,16 +5496,50 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" } } }, + "juice": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/juice/-/juice-4.3.2.tgz", + "integrity": "sha512-3Qym/RnFoCGa9qrDz6xn4zRnohgI6G87xKWZV+/seF3dYpaVqNS1HijsDef+elGhytRY79RIboOzk0hucLtx6g==", + "requires": { + "cheerio": "0.22.0", + "commander": "2.19.0", + "cross-spawn": "5.1.0", + "deep-extend": "0.5.1", + "mensch": "0.3.3", + "slick": "1.12.2", + "web-resource-inliner": "4.2.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + } + } + }, + "keymaster": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/keymaster/-/keymaster-1.6.2.tgz", + "integrity": "sha1-4a5U0OqUiPn2C2a2aPAumhlGxus=" + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "1.1.6" } @@ -5377,6 +5590,11 @@ } } }, + "load-script": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", + "integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ=" + }, "loader-runner": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", @@ -5420,6 +5638,16 @@ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", "dev": true }, + "lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" + }, + "lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" + }, "lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", @@ -5432,6 +5660,26 @@ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" + }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -5442,18 +5690,48 @@ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" }, + "lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" + }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, + "lodash.merge": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==" + }, "lodash.mergewith": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz", "integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=", "dev": true }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" + }, + "lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" + }, + "lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" + }, + "lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" + }, "lodash.tail": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", @@ -5465,6 +5743,11 @@ "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=" + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -5495,11 +5778,15 @@ "signal-exit": "3.0.2" } }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" + }, "lru-cache": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true, "requires": { "pseudomap": "1.0.2", "yallist": "2.1.2" @@ -5570,6 +5857,11 @@ "readable-stream": "2.3.3" } }, + "mensch": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.3.tgz", + "integrity": "sha1-4gD/TdgjcX+OBWOzLj9UgfyiYrI=" + }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", @@ -5600,7 +5892,6 @@ "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, "requires": { "arr-diff": "2.0.0", "array-unique": "0.2.1", @@ -5636,18 +5927,21 @@ "mime-db": { "version": "1.30.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", - "dev": true + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" }, "mime-types": { "version": "2.1.17", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "dev": true, "requires": { "mime-db": "1.30.0" } }, + "mimer": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/mimer/-/mimer-0.3.2.tgz", + "integrity": "sha512-N6NcgDQAevhP/02DQ/epK6daLy4NKrIHyTlJcO6qBiYn98q+Y4a/knNsAATCe1xLS2F0nEmJp+QYli2s8vKwyQ==" + }, "minimalistic-assert": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", @@ -5664,7 +5958,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "1.1.8" } @@ -5672,8 +5965,7 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "mixin-object": { "version": "2.0.1", @@ -5693,11 +5985,355 @@ } } }, + "mjml": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml/-/mjml-3.3.5.tgz", + "integrity": "sha512-a7uMTYsXNPfwe4ncjQXobcqWsdOoKa4sk2+F59g8Q7AFZDLIFV0Ya5fcp3spBADovCLycZ8seF79K3svU/KDIg==", + "requires": { + "lodash": "4.17.4", + "mjml-accordion": "3.3.5", + "mjml-button": "3.3.5", + "mjml-carousel": "3.3.5", + "mjml-cli": "3.3.5", + "mjml-column": "3.3.5", + "mjml-container": "3.3.5", + "mjml-core": "3.3.5", + "mjml-divider": "3.3.5", + "mjml-group": "3.3.5", + "mjml-head-attributes": "3.3.5", + "mjml-head-font": "3.3.5", + "mjml-head-preview": "3.3.5", + "mjml-head-style": "3.3.5", + "mjml-head-title": "3.3.5", + "mjml-hero": "3.3.5", + "mjml-html": "3.3.5", + "mjml-image": "3.3.5", + "mjml-invoice": "3.3.5", + "mjml-list": "3.3.5", + "mjml-location": "3.3.5", + "mjml-navbar": "3.3.5", + "mjml-raw": "3.3.5", + "mjml-section": "3.3.5", + "mjml-social": "3.3.5", + "mjml-spacer": "3.3.5", + "mjml-table": "3.3.5", + "mjml-text": "3.3.5", + "mjml-wrapper": "3.3.5" + } + }, + "mjml-accordion": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-accordion/-/mjml-accordion-3.3.5.tgz", + "integrity": "sha512-pK30iNhIvqnDnidqVKFw4GJEfKWCukYYw4hByIagwikdVKdbXHc1pf/IpFsKtJ8zx9Cdi4JeFVWYwwikU2v1Bw==", + "requires": { + "classnames": "2.2.5", + "lodash": "4.17.4", + "mjml-core": "3.3.5", + "react": "15.6.2" + } + }, + "mjml-button": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-button/-/mjml-button-3.3.5.tgz", + "integrity": "sha512-PKvk6arRTYLY4PcpPdf9bTpFvZtw/2KIID4H0+lYLz0C8pIuHPoHh4wTaXguBGdT9gLfpMAp2WleMOUD6zmEPA==", + "requires": { + "lodash": "4.17.4", + "mjml-core": "3.3.5", + "react": "15.6.2" + } + }, + "mjml-carousel": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-carousel/-/mjml-carousel-3.3.5.tgz", + "integrity": "sha512-yGXLZBUxQLKiCxS5H5MSoAbGJcSmdcBYFHqLsukiHAHbsetpang9BbI0v3X+PrvOco6DzL2SlOG8EDXnrAuNUw==", + "requires": { + "lodash": "4.17.4", + "mjml-core": "3.3.5", + "react": "15.6.2" + } + }, + "mjml-cli": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-cli/-/mjml-cli-3.3.5.tgz", + "integrity": "sha512-LmOht5KFC/9oRngLitnGUpB2lNPUz2TGNeRIxBIJNC0FtaBpUz3g5LCofZHYvSMOEcgVqISeOHsmNIV75l3lLw==", + "requires": { + "chokidar": "1.7.0", + "commander": "2.13.0", + "glob": "7.1.2", + "lodash": "4.17.4", + "mjml-core": "3.3.5", + "mz": "2.7.0" + } + }, + "mjml-column": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-column/-/mjml-column-3.3.5.tgz", + "integrity": "sha512-VvU7PQ9phme1oWoKugw1UTNeqNXMqDVOkrrtMNpKiLOByuG0vMegwWGJOIsuznuy80Pl5wnVk9XuynMbOhb82A==", + "requires": { + "classnames": "2.2.5", + "lodash": "4.17.4", + "mjml-core": "3.3.5", + "react": "15.6.2" + } + }, + "mjml-container": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-container/-/mjml-container-3.3.5.tgz", + "integrity": "sha512-HGg2AHsuoZnM6iLlkoq81oWn1f3W+lJ64dKiYw4ZPY/MEHVl9ayFDpRw7dsia5pSENtjwjQsQsUC2iCyQulaAA==", + "requires": { + "classnames": "2.2.5", + "mjml-core": "3.3.5", + "react": "15.6.2" + } + }, + "mjml-core": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-core/-/mjml-core-3.3.5.tgz", + "integrity": "sha512-Cqc+8HLyMe26Co1jnyKTt+m10rQnXmAjXYcrdJV8QrjpDeLIZd1dClYTBjEAtREmUf5cAovdRHulPLfiOF9sZA==", + "requires": { + "cheerio": "0.22.0", + "classnames": "2.2.5", + "debug": "2.6.9", + "he": "1.2.0", + "hoist-non-react-statics": "1.2.0", + "html-minifier": "3.5.21", + "immutable": "3.8.2", + "jquery": "3.3.1", + "js-beautify": "1.8.8", + "juice": "4.3.2", + "lodash": "4.17.4", + "mjml-validator": "3.3.5", + "react": "15.6.2", + "react-dom": "15.6.2", + "warning": "3.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "hoist-non-react-statics": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", + "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=" + } + } + }, + "mjml-divider": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-divider/-/mjml-divider-3.3.5.tgz", + "integrity": "sha512-LIEwKA2v/hxU7YKL/h/H4TRCL47167W6JQ+Ju7JZE9ropPvEHnmd5sWme9wc9iib70+6RIk25JvGjxfQZJeOOw==", + "requires": { + "lodash": "4.17.4", + "mjml-core": "3.3.5", + "react": "15.6.2" + } + }, + "mjml-group": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-group/-/mjml-group-3.3.5.tgz", + "integrity": "sha512-PNAmb+TqTkglKJFQpgaxuKSxfo7m/MCKNxgOjY6xaTswY/5BVtYO1ne2+raYBGWR2OLw3f8vNV4EZW+REy3fSQ==", + "requires": { + "classnames": "2.2.5", + "lodash": "4.17.4", + "mjml-core": "3.3.5", + "react": "15.6.2" + } + }, + "mjml-head-attributes": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-head-attributes/-/mjml-head-attributes-3.3.5.tgz", + "integrity": "sha512-P0QzVA+xHp0Dn5DzC+sMsdu06a2q3ZqtHho6ex9cRAJ1DrgXr043XT5VddycaW0BssG8tca31nA+eELiP8GxYw==", + "requires": { + "lodash": "4.17.4" + } + }, + "mjml-head-font": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-head-font/-/mjml-head-font-3.3.5.tgz", + "integrity": "sha512-GosELGr8UsMkzfhPU8QJLvsCjrJMyJn6eA2u7icI0e8Q5G13GxUYIdyh1ICepn9Ff/NZp7mkwXCDmelJmlhxng==", + "requires": { + "lodash": "4.17.4" + } + }, + "mjml-head-preview": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-head-preview/-/mjml-head-preview-3.3.5.tgz", + "integrity": "sha512-hoiGShrkk2fw4lIsgoaC+L40eV6AGi2/p9C2BSAKTmeKPl70sUIk9TKpu+g3atAtV10EkHiG5XBhZCZSbZwnRA==" + }, + "mjml-head-style": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-head-style/-/mjml-head-style-3.3.5.tgz", + "integrity": "sha512-51o0rB7fCx2f58hI/FHQH1X72ahap25oXeiCtJ+X+hH4xdtUaRL5stPM5WdED2kRDCrurMdNxo4s9xN+immPeA==" + }, + "mjml-head-title": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-head-title/-/mjml-head-title-3.3.5.tgz", + "integrity": "sha512-DGcdLRKOxIGFJLESQi8ftIb6dKCIlPOPRpXVJ1FPoQ0/qPLXbXpHqJPRLIGzAD8tIPtVa/MbXk+Wm5+DP/Nf6w==" + }, + "mjml-hero": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-hero/-/mjml-hero-3.3.5.tgz", + "integrity": "sha512-Q8jM/wtpDkq+8WOK2V3W59MGAmW7kNZc7U+MTwuF/xjdJIUrYkOBgYyE/iv8dVUkOXXtI2tnouJ+nWxHfLJX3A==", + "requires": { + "classnames": "2.2.5", + "lodash": "4.17.4", + "mjml-core": "3.3.5", + "react": "15.6.2" + } + }, + "mjml-html": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-html/-/mjml-html-3.3.5.tgz", + "integrity": "sha512-Ei2zyFmVb4s5qHCp1cckWeKwLIsUVmNsRGboZmcmHgr00MYHvrxC8s42oRsUP/B6i5U7FBrJAit9X54Q1eRByQ==", + "requires": { + "lodash": "4.17.4", + "mjml-core": "3.3.5", + "react": "15.6.2" + } + }, + "mjml-image": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-image/-/mjml-image-3.3.5.tgz", + "integrity": "sha512-UDHyaTfwchOtZp3PN9pDJpcFSv3YbEb6U25SGT0UHoJTckKOAcKWoaPGfCvi1DvnQ9+r3xqZV0/oI1qdXxa3Pw==", + "requires": { + "lodash": "4.17.4", + "mjml-core": "3.3.5", + "react": "15.6.2" + } + }, + "mjml-invoice": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-invoice/-/mjml-invoice-3.3.5.tgz", + "integrity": "sha512-JHWvpZQu9JRr/JC/h9sl4/XBcsfdPZ88kFKL5nKaQ6dFBmdYvs+sqZ7ZDAgfGGwzoTNNKrgLdt6shvwKGo5B1g==", + "requires": { + "he": "1.2.0", + "lodash": "4.17.4", + "mjml-core": "3.3.5", + "mjml-table": "3.3.5", + "numeral": "2.0.6", + "react": "15.6.2" + } + }, + "mjml-list": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-list/-/mjml-list-3.3.5.tgz", + "integrity": "sha512-50Jk4Z3Z5VfOpreZWGyuC53ZvDsQ0TtKGKXZZv0fyK38Fz597mxPah83u+bD/SveJMoSt4PzMX5/5RAroympQQ==", + "requires": { + "lodash": "4.17.4", + "mjml-core": "3.3.5", + "react": "15.6.2" + } + }, + "mjml-location": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-location/-/mjml-location-3.3.5.tgz", + "integrity": "sha512-GUeXSMJwc9syfO3/DRyjMyqYlg8J9UAwXnqUB9TwnvgJdHquhJeD6xEtBFuLY7KyENiZsKavXvV4BqT6/GqAPg==", + "requires": { + "lodash": "4.17.4", + "mjml-core": "3.3.5", + "mjml-image": "3.3.5", + "mjml-text": "3.3.5", + "react": "15.6.2" + } + }, + "mjml-navbar": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-navbar/-/mjml-navbar-3.3.5.tgz", + "integrity": "sha512-elHcplAHvgSeJYHT0qtA+mT//8RKTBXwVOqk4b+4HV7Y9084p7rKsqtHYArMO8mfbXRYqrJ5zWn9rOU5UvSGPg==", + "requires": { + "lodash": "4.17.4", + "mjml-core": "3.3.5", + "mjml-section": "3.3.5", + "react": "15.6.2" + } + }, + "mjml-raw": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-raw/-/mjml-raw-3.3.5.tgz", + "integrity": "sha512-7gP98gI+eHkoc1Y91Uq57Ow3/GvF82tTmt3bjTq6aCtHKLPRDVGg+mF99JGdyqDSPQOY/rLh1W1XWgZ0JknNqQ==", + "requires": { + "mjml-core": "3.3.5", + "react": "15.6.2" + } + }, + "mjml-section": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-section/-/mjml-section-3.3.5.tgz", + "integrity": "sha512-71Y5fCwoBq/v1Vl5/cmXvjrc6RZoIXzYVFuXFrWkaOO2cJ/ozXNXLRPCbj4DmjK55RITXktS2Y8X22FOgvM0EA==", + "requires": { + "lodash": "4.17.4", + "mjml-core": "3.3.5", + "react": "15.6.2" + } + }, + "mjml-social": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-social/-/mjml-social-3.3.5.tgz", + "integrity": "sha512-0x2mhrMoLQu8dhZnlZJZrfb0eVmUUXzkp0yNlIPlDR07WywPKbFOorIQXMT5rSvihskDpklRHA8lz13bBJ/ofw==", + "requires": { + "lodash": "4.17.4", + "mjml-core": "3.3.5", + "react": "15.6.2" + } + }, + "mjml-spacer": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-spacer/-/mjml-spacer-3.3.5.tgz", + "integrity": "sha512-9uAgL4ga1cSRBJVRQhjLJCgv0DlAfi71V2LbZRa7mFJ3biPTZuGw2OYdWXopX3Iu5MtkIuJ4+dMPV+C14NGR9Q==", + "requires": { + "mjml-core": "3.3.5", + "react": "15.6.2" + } + }, + "mjml-table": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-table/-/mjml-table-3.3.5.tgz", + "integrity": "sha512-sZ5wOpHRVlag1llIu7NQcFOvo/9JQudn62lEcJqRXBygUE5BNkswN1L2oS6wHYVWiwynDleIF7Jg2l0Dv5RJDA==", + "requires": { + "mjml-core": "3.3.5", + "react": "15.6.2" + } + }, + "mjml-text": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-text/-/mjml-text-3.3.5.tgz", + "integrity": "sha512-4W6J5Dl1HAwYVpropG/BxkKDI4nvOdEoPT9T9v/kZtjcQAEj0VTrsOF2GbZbBA9gCuXZMNssUqsnuy6OvlUv2w==", + "requires": { + "classnames": "2.2.5", + "lodash": "4.17.4", + "mjml-core": "3.3.5", + "react": "15.6.2" + } + }, + "mjml-validator": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-validator/-/mjml-validator-3.3.5.tgz", + "integrity": "sha512-+SPP64nJVG9IX1QwcxPY7POiMZZKlD+jxiuYo1F453IXsezeZCAUq+CmcBrDMHkG5ms1uC5d/GPZ4ICMu2V69A==", + "requires": { + "lodash": "4.17.4", + "warning": "3.0.0" + } + }, + "mjml-wrapper": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/mjml-wrapper/-/mjml-wrapper-3.3.5.tgz", + "integrity": "sha512-G88x20fqEJWVi4xuN1KGpxNQJdELCC44RiY0bWd7GnH+eAcWcA7/HS2VWmq6f7G3Wi8+avdI51Yd+5uvjxWElA==", + "requires": { + "lodash": "4.17.4", + "mjml-core": "3.3.5", + "mjml-section": "3.3.5", + "react": "15.6.2" + } + }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" } @@ -5720,12 +6356,30 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "1.3.0", + "object-assign": "4.1.1", + "thenify-all": "1.6.0" + } + }, "nan": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", "dev": true }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "requires": { + "lower-case": "1.1.4" + } + }, "node-fetch": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", @@ -5865,7 +6519,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, "requires": { "remove-trailing-separator": "1.1.0" } @@ -5904,7 +6557,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, "requires": { "boolbase": "1.0.0" } @@ -5921,11 +6573,15 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, + "numeral": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz", + "integrity": "sha1-StCAk21EPCVhrtnyGX7//iX05QY=" + }, "oauth-sign": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" }, "object-assign": { "version": "4.1.1", @@ -5952,7 +6608,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, "requires": { "for-own": "0.1.5", "is-extendable": "0.1.1" @@ -5974,7 +6629,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1.0.2" } @@ -6010,8 +6664,7 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-locale": { "version": "1.4.0", @@ -6025,14 +6678,12 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "osenv": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true, "requires": { "os-homedir": "1.0.2", "os-tmpdir": "1.0.2" @@ -6085,6 +6736,14 @@ "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", "dev": true }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "requires": { + "no-case": "2.3.2" + } + }, "parse-asn1": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", @@ -6102,7 +6761,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, "requires": { "glob-base": "0.3.0", "is-dotfile": "1.0.3", @@ -6134,8 +6792,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-is-inside": { "version": "1.0.2", @@ -6203,14 +6860,12 @@ "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, "requires": { "pinkie": "2.0.4" } @@ -7775,8 +8430,7 @@ "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" }, "private": { "version": "0.1.8", @@ -7793,8 +8447,7 @@ "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "promise": { "version": "7.3.1", @@ -7804,6 +8457,11 @@ "asap": "2.0.6" } }, + "promise-polyfill": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.0.tgz", + "integrity": "sha512-OzSf6gcCUQ01byV4BgwyUCswlaQQ6gzXc23aLQWhicvfX9kfsUiUhgt3CCQej8jDnl8/PhGF31JdHX2/MzF3WA==" + }, "prop-types": { "version": "15.6.0", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", @@ -7814,6 +8472,11 @@ "object-assign": "4.1.1" } }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -7823,8 +8486,7 @@ "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "public-encrypt": { "version": "4.0.0", @@ -7842,8 +8504,7 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "q": { "version": "1.5.1", @@ -7854,8 +8515,7 @@ "qs": { "version": "6.3.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", - "dev": true + "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=" }, "query-string": { "version": "4.3.4", @@ -7896,7 +8556,6 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "dev": true, "requires": { "is-number": "3.0.0", "kind-of": "4.0.0" @@ -7906,7 +8565,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, "requires": { "kind-of": "3.2.2" }, @@ -7915,7 +8573,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "1.1.6" } @@ -7926,7 +8583,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, "requires": { "is-buffer": "1.1.6" } @@ -7981,6 +8637,17 @@ "prop-types": "15.6.0" } }, + "react-ckeditor-component": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/react-ckeditor-component/-/react-ckeditor-component-1.1.0.tgz", + "integrity": "sha512-dcptPsMKRDGvAGxokwdVDKPgZbTgwngknaQVD+SDTV6XSw57J6LD7cRaqEo6WGLwMZh39Up37fdJjugNd6vEAA==", + "requires": { + "babel-plugin-transform-runtime": "6.23.0", + "babel-preset-react": "6.24.1", + "babel-runtime": "6.26.0", + "load-script": "1.0.0" + } + }, "react-day-picker": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-6.2.1.tgz", @@ -8194,7 +8861,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", @@ -8208,8 +8874,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" } } }, @@ -8217,7 +8882,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true, "requires": { "graceful-fs": "4.1.11", "minimatch": "3.0.4", @@ -8317,7 +8981,6 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, "requires": { "is-equal-shallow": "0.1.3" } @@ -8356,23 +9019,25 @@ } } }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" + }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "repeat-element": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "repeating": { "version": "2.0.1", @@ -8387,7 +9052,6 @@ "version": "2.79.0", "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true, "requires": { "aws-sign2": "0.6.0", "aws4": "1.6.0", @@ -8497,8 +9161,7 @@ "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, "sass-graph": { "version": "2.2.4", @@ -8574,8 +9237,7 @@ "semver": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" }, "set-blocking": { "version": "2.0.0", @@ -8586,8 +9248,7 @@ "set-immediate-shim": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" }, "setimmediate": { "version": "1.0.5", @@ -8627,6 +9288,19 @@ } } }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, "shelljs": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.2.tgz", @@ -8638,6 +9312,11 @@ "rechoir": "0.6.2" } }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -8667,6 +9346,11 @@ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", "dev": true }, + "slick": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz", + "integrity": "sha1-vQSN23TefRymkV+qSldXCzVQwtc=" + }, "slugify": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.2.9.tgz", @@ -8676,7 +9360,6 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, "requires": { "hoek": "2.16.3" } @@ -8732,6 +9415,11 @@ "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", "dev": true }, + "spectrum-colorpicker": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/spectrum-colorpicker/-/spectrum-colorpicker-1.8.0.tgz", + "integrity": "sha1-uSbPUALAp3hgtfg1HhwJPGUgAQc=" + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -8742,7 +9430,6 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", - "dev": true, "requires": { "asn1": "0.2.3", "assert-plus": "1.0.0", @@ -8757,8 +9444,7 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" } } }, @@ -8821,7 +9507,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, "requires": { "safe-buffer": "5.1.1" } @@ -8829,14 +9514,12 @@ "stringstream": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, "requires": { "ansi-regex": "2.1.1" } @@ -9069,8 +9752,7 @@ "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, "svgo": { "version": "0.7.2", @@ -9109,6 +9791,22 @@ "inherits": "2.0.3" } }, + "thenify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "requires": { + "any-promise": "1.3.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "requires": { + "thenify": "3.3.0" + } + }, "through2": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", @@ -9143,14 +9841,12 @@ "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" }, "tough-cookie": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "dev": true, "requires": { "punycode": "1.4.1" } @@ -9200,14 +9896,12 @@ "tunnel-agent": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, "optional": true }, "type-check": { @@ -9273,6 +9967,11 @@ "dev": true, "optional": true }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + }, "uniq": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", @@ -9306,6 +10005,11 @@ "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", "dev": true }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" + }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -9386,8 +10090,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "util.promisify": { "version": "1.0.0", @@ -9402,8 +10105,7 @@ "uuid": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", - "dev": true + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" }, "v8flags": { "version": "2.1.1", @@ -9414,6 +10116,11 @@ "user-home": "1.1.1" } }, + "valid-data-url": { + "version": "0.1.6", + "resolved": "http://registry.npmjs.org/valid-data-url/-/valid-data-url-0.1.6.tgz", + "integrity": "sha512-FXg2qXMzfAhZc0y2HzELNfUeiOjPr+52hU1DNBWiJJ2luXD+dD1R9NA48Ug5aj0ibbxroeGDc/RJv6ThiGgkDw==" + }, "validate-npm-package-license": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", @@ -9439,7 +10146,6 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, "requires": { "assert-plus": "1.0.0", "core-util-is": "1.0.2", @@ -9449,8 +10155,7 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" } } }, @@ -9482,6 +10187,21 @@ "graceful-fs": "4.1.11" } }, + "web-resource-inliner": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-4.2.1.tgz", + "integrity": "sha512-fOWnBQHVX8zHvEbECDTxtYL0FXIIZZ5H3LWoez8mGopYJK7inEru1kVMDzM1lVdeJBNEqUnNP5FBGxvzuMcwwQ==", + "requires": { + "async": "2.6.0", + "chalk": "1.1.3", + "datauri": "1.1.0", + "htmlparser2": "3.10.0", + "lodash.unescape": "4.0.1", + "request": "2.79.0", + "valid-data-url": "0.1.6", + "xtend": "4.0.1" + } + }, "webpack": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.7.0.tgz", @@ -9613,7 +10333,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "dev": true, "requires": { "isexe": "2.0.0" } @@ -9658,14 +10377,12 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, "y18n": { "version": "3.2.1", @@ -9676,8 +10393,7 @@ "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yargs": { "version": "7.1.0", diff --git a/client/package.json b/client/package.json index 46cfc55e..b3266a92 100644 --- a/client/package.json +++ b/client/package.json @@ -37,6 +37,8 @@ "axios": "^0.16.2", "datatables.net": "^1.10.15", "datatables.net-bs": "^1.10.15", + "grapesjs": "^0.14.40", + "grapesjs-mjml": "0.0.27", "i18next": "^8.4.3", "i18next-xhr-backend": "^1.4.2", "immutable": "^3.8.1", @@ -46,6 +48,7 @@ "querystringify": "^1.0.0", "react": "^15.6.1", "react-ace": "^5.1.0", + "react-ckeditor-component": "^1.1.0", "react-day-picker": "^6.1.0", "react-dnd-html5-backend": "^2.4.1", "react-dnd-touch-backend": "^0.3.13", diff --git a/client/src/lib/ckeditor.js b/client/src/lib/ckeditor5.js similarity index 95% rename from client/src/lib/ckeditor.js rename to client/src/lib/ckeditor5.js index 6f3a901a..dda9d600 100644 --- a/client/src/lib/ckeditor.js +++ b/client/src/lib/ckeditor5.js @@ -17,7 +17,7 @@ import ImagePlugin from '@ckeditor/ckeditor5-image/src/image'; import ImageCaptionPlugin from '@ckeditor/ckeditor5-image/src/imagecaption'; import ImageStylePlugin from '@ckeditor/ckeditor5-image/src/imagestyle'; import ImageToolbarPlugin from '@ckeditor/ckeditor5-image/src/imagetoolbar'; -import ImageUploadPlugin from '@ckeditor/ckeditor5-image/src/imageupload'; +//import ImageUploadPlugin from '@ckeditor/ckeditor5-image/src/imageupload'; import LinkPlugin from '@ckeditor/ckeditor5-link/src/link'; import ListPlugin from '@ckeditor/ckeditor5-list/src/list'; import ParagraphPlugin from '@ckeditor/ckeditor5-paragraph/src/paragraph'; @@ -75,6 +75,8 @@ class InsertImage extends Plugin { } } +/* +Upload through CKEditor is disable because files can be managed by Files tab class UploadAdapter { constructor(loader, url, t) { @@ -105,6 +107,7 @@ class MailtrainUploadAdapter extends Plugin { this.editor.plugins.get(FileRepository).createUploadAdapter = loader => new UploadAdapter(loader, this.editor.t); } } + */ @@ -123,14 +126,14 @@ ClassicEditor.builtinPlugins = [ ImageCaptionPlugin, ImageStylePlugin, ImageToolbarPlugin, - ImageUploadPlugin, + //ImageUploadPlugin, LinkPlugin, ListPlugin, ParagraphPlugin, AlignmentPlugin, TablePlugin, TableToolbarPlugin, - MailtrainUploadAdapter, + //MailtrainUploadAdapter, InsertImage ]; @@ -152,7 +155,7 @@ ClassicEditor.defaultConfig = { 'numberedList', '|', 'insertImage', - 'imageUpload', + // 'imageUpload', 'blockQuote', '|', 'insertTable', diff --git a/client/src/lib/form.js b/client/src/lib/form.js index 1c64391a..b829d5fb 100644 --- a/client/src/lib/form.js +++ b/client/src/lib/form.js @@ -17,7 +17,7 @@ import ACEEditorRaw from 'react-ace'; import 'brace/theme/github'; import 'brace/ext/searchbox'; -import CKEditorRaw from './ckeditor'; +import CKEditorRaw from './ckeditor5'; import DayPicker from 'react-day-picker'; import 'react-day-picker/lib/style.css'; diff --git a/client/src/lib/grapesjs.js b/client/src/lib/grapesjs.js new file mode 100644 index 00000000..b9d7f1ae --- /dev/null +++ b/client/src/lib/grapesjs.js @@ -0,0 +1,48 @@ +'use strict'; + +import React, {Component} from 'react'; + +import 'grapesjs/dist/css/grapes.min.css'; +import grapesjs from 'grapesjs'; +import grapesjsMjml from 'grapesjs-mjml'; + +export default class GrapesJs extends Component { + constructor(props) { + super(props); + + this.state = { + + }; + } + + componentDidMount() { + const editor = grapesjs.init({ + container: this.canvasNode, + height: '100%', + width: 'auto', + noticeOnUnload: 0, + storageManager:{autoload: 0}, + fromElement: false, + components: + ' \n' + + ' \n' + + ' \n' + + ' My Company\n' + + ' \n' + + ' \n' + + ' ', + plugins: ['gjs-mjml'], + pluginsOpts: { + 'gjs-mjml': {} + } + }); + } + + render() { + return ( +
+
this.canvasNode = node}/> +
+ ); + } +} \ No newline at end of file diff --git a/client/src/lib/grapesjs.scss b/client/src/lib/grapesjs.scss new file mode 100644 index 00000000..1d22bb61 --- /dev/null +++ b/client/src/lib/grapesjs.scss @@ -0,0 +1,5 @@ +.gjs-cv-canvas { + top: 0; + width: 100%; + height: 100%; +} \ No newline at end of file diff --git a/client/src/lib/sandboxed-ckeditor.js b/client/src/lib/sandboxed-ckeditor.js index 14d5e5df..80113b12 100644 --- a/client/src/lib/sandboxed-ckeditor.js +++ b/client/src/lib/sandboxed-ckeditor.js @@ -16,26 +16,66 @@ import { base, unbase } from "../../../shared/templates"; -import CKEditor from './ckeditor'; +import CKEditor from "react-ckeditor-component"; + +const initialHeight = 600; +const navbarHeight = 34; // Sync this with navbarheight in sandboxed-ckeditor.scss @translate(null, { withRef: true }) export class CKEditorHost extends Component { constructor(props) { super(props); - this.state = {} + this.state = { + fullscreen: false + } + + this.onWindowResizeHandler = ::this.onWindowResize; } static propTypes = { entityTypeId: PropTypes.string, entity: PropTypes.object, - initialHtml: PropTypes.string + initialHtml: PropTypes.string, + title: PropTypes.string, + onFullscreenAsync: PropTypes.func + } + + async toggleFullscreenAsync() { + const fullscreen = !this.state.fullscreen; + this.setState({ + fullscreen + }); + await this.props.onFullscreenAsync(fullscreen); + + let newHeight; + if (fullscreen) { + newHeight = window.innerHeight - navbarHeight; + } else { + newHeight = initialHeight; + } + await this.contentNode.ask('setHeight', newHeight); } async exportState() { return await this.contentNode.ask('exportState'); } + onWindowResize() { + if (this.state.fullscreen) { + const newHeight = window.innerHeight - navbarHeight; + this.contentNode.ask('setHeight', newHeight); + } + } + + componentDidMount() { + window.addEventListener('resize', this.onWindowResizeHandler, false); + } + + componentWillUnmount() { + window.removeEventListener('resize', this.onWindowResizeHandler, false); + } + render() { const t = this.props.t; @@ -51,7 +91,12 @@ export class CKEditorHost extends Component { }; return ( -
+
+
+ {this.state.fullscreen && } +
{this.props.title}
+ +
this.contentNode = node} className={styles.host} singleToken={true} contentProps={editorData} contentSrc="ckeditor/editor" tokenMethod="ckeditor" tokenParams={editorData}/>
); @@ -93,16 +138,30 @@ export class CKEditorSandbox extends Component { }; } + async setHeight(methods, params) { + this.node.editorInstance.resize('100%', params); + } + componentDidMount() { parentRPC.setMethodHandler('exportState', ::this.exportState); + parentRPC.setMethodHandler('setHeight', ::this.setHeight); } render() { + const config = { + removeButtons: 'Underline,Subscript,Superscript,Maximize', + resize_enabled: false, + height: initialHeight + }; + return (
- this.setState({html: editor.getData()})} - data={this.state.html} + this.node = node} + content={this.state.html} + events={{ + change: evt => this.setState({html: evt.editor.getData()}), + }} + config={config} />
); diff --git a/client/src/lib/sandboxed-ckeditor.scss b/client/src/lib/sandboxed-ckeditor.scss index edf8d9b9..6b6f3b8d 100644 --- a/client/src/lib/sandboxed-ckeditor.scss +++ b/client/src/lib/sandboxed-ckeditor.scss @@ -1,10 +1,72 @@ +$navbarHeight: 34px; + .editor { .host { } } .sandbox { - :global .ck-editor__editable { - height: 500px; + height: 100%; + overflow: hidden; +} + +.editorFullscreen { + position: fixed; + top: 0px; + bottom: 0px; + left: 0px; + right: 0px; + z-index: 1000; + background: white; + margin-top: $navbarHeight; + + .navbar { + margin-top: -$navbarHeight; } -} \ No newline at end of file + + .host { + height: 100%; + } +} + +.navbar { + background: #DE4320; + width: 100%; + height: $navbarHeight; +} + +.logo { + float: left; + height: $navbarHeight; + padding: 5px 0 5px 10px; + filter: brightness(0) invert(1); +} + +.title { + padding: 5px 0 5px 10px; + font-size: 18px; + font-family: sans-serif; + font-family: "Ubuntu",Tahoma,"Helvetica Neue",Helvetica,Arial,sans-serif; + font-weight: bold; + float: left; + color: white; + height: $navbarHeight; +} + +.btn { + display: block; + float: right; + padding: 0px 15px; + line-height: $navbarHeight; + text-align: center; + color: white; + font-size: 14px; + font-weight: bold; + font-family: sans-serif; + cursor: pointer; +} + +.btn:hover { + background-color: #b1381e; + color: white; +} diff --git a/client/src/templates/helpers.js b/client/src/templates/helpers.js index 8605c872..4a6963ed 100644 --- a/client/src/templates/helpers.js +++ b/client/src/templates/helpers.js @@ -14,6 +14,7 @@ import 'brace/mode/html'; import { MosaicoEditorHost } from "../lib/sandboxed-mosaico"; import { CKEditorHost } from "../lib/sandboxed-ckeditor"; +import GrapesJS from "../lib/grapesjs"; import {getTemplateTypes as getMosaicoTemplateTypes} from './mosaico/helpers'; import {getSandboxUrl} from "../lib/urls"; @@ -174,7 +175,7 @@ export function getTemplateTypes(t, prefix = '', entityTypeId = ResourceType.TEM validate: state => {} }; - templateTypes.grapejs = { // FIXME + templateTypes.xgrapesjs = { // FIXME typeName: t('GrapeJS'), getTypeForm: (owner, isEdit) => null, getHTMLEditor: owner => null, @@ -188,12 +189,12 @@ export function getTemplateTypes(t, prefix = '', entityTypeId = ResourceType.TEM validate: state => {} }; - templateTypes.xckeditor = { - typeName: t('CKEditor'), + templateTypes.grapesjs = { + typeName: t('GrapeJS (fake)'), getTypeForm: (owner, isEdit) => null, getHTMLEditor: owner => - owner.editorNode = node} entity={owner.props.entity} initialHtml={owner.getFormValue(prefix + 'html')} @@ -212,10 +213,37 @@ export function getTemplateTypes(t, prefix = '', entityTypeId = ResourceType.TEM validate: state => {} }; - templateTypes.ckeditor = { - typeName: t('CKEditor'), + templateTypes.ckeditor4 = { + typeName: t('CKEditor 4'), getTypeForm: (owner, isEdit) => null, - getHTMLEditor: owner => , + getHTMLEditor: owner => + + owner.editorNode = node} + entity={owner.props.entity} + initialHtml={owner.getFormValue(prefix + 'html')} + entityTypeId={entityTypeId} + title={t('CKEditor 4 Template Designer')} + onFullscreenAsync={::owner.setElementInFullscreen} + /> + , + exportHTMLEditorData: async owner => { + const {html} = await owner.editorNode.exportState(); + owner.updateFormValue(prefix + 'html', html); + }, + initData: () => ({}), + afterLoad: data => {}, + beforeSave: data => { + clearBeforeSave(data); + }, + afterTypeChange: mutState => {}, + validate: state => {} + }; + + templateTypes.ckeditor5 = { + typeName: t('CKEditor 5'), + getTypeForm: (owner, isEdit) => null, + getHTMLEditor: owner => , exportHTMLEditorData: async owner => {}, initData: () => ({}), afterLoad: data => {}, diff --git a/client/webpack.config.js b/client/webpack.config.js index 1d5bf7cf..c5600fa7 100644 --- a/client/webpack.config.js +++ b/client/webpack.config.js @@ -13,9 +13,9 @@ module.exports = { } ) ], entry: { - root: ['babel-polyfill', './src/root.js'], - mosaico: ['babel-polyfill', './src/lib/sandboxed-mosaico-root.js'], - ckeditor: ['babel-polyfill', './src/lib/sandboxed-ckeditor-root.js'], + "root": ['babel-polyfill', './src/root.js'], + "mosaico-root": ['babel-polyfill', './src/lib/sandboxed-mosaico-root.js'], + "ckeditor-root": ['babel-polyfill', './src/lib/sandboxed-ckeditor-root.js'], }, output: { library: 'MailtrainReactBody', @@ -46,8 +46,6 @@ module.exports = { } } ] - // exclude: /(disposables|react-dnd-touch-backend|attr-accept)/ /* https://github.com/react-dnd/react-dnd/issues/407 */, - // use: [ 'babel-loader' ] }, { test: /\.css$/, @@ -69,7 +67,7 @@ module.exports = { }, minify: false } ) - }, + } ] }, { @@ -84,10 +82,7 @@ module.exports = { ] }, { - // Or /ckeditor5-[^/]+\/theme\/icons\/[^/]+\.svg$/ if you want to limit this loader - // to CKEditor 5 icons only. test: /\.svg$/, - use: [ 'raw-loader' ] }, { @@ -105,8 +100,8 @@ module.exports = { 'sass-loader' ] }, { - test: /\.(woff|ttf|eot)$/, - use: [ 'url-loader' ] + test: /\.(otf|woff2|woff|ttf|eot)$/, + use: [ 'raw-loader' ] } ] }, diff --git a/config/default.yaml b/config/default.yaml index e374f68f..15369125 100644 --- a/config/default.yaml +++ b/config/default.yaml @@ -16,10 +16,12 @@ title: mailtrain # Enabled HTML editors editors: -- ckeditor +- ckeditor4 +- ckeditor5 - codeeditor - mosaico - mosaicoWithFsTemplate +- grapesjs # Default language to use language: en @@ -149,7 +151,7 @@ mosaico: # customscripts: # - /mosaico/custom/my-mosaico-plugin.js -grapejs: +grapesjs: # Installed templates templates: - key: demo diff --git a/languages/de_DE.mo b/languages/de_DE.mo index 3f1d6bd0ef28158a8a62132ee5e7f02c7786792b..5a2ba4d9d2c7c669d79ce8589d1e79c237d412bc 100644 GIT binary patch delta 19630 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 delta 15549 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 TBK5z6|I{E{{UoPnPxb!;A;x^f diff --git a/languages/de_DE.po b/languages/de_DE.po index 8002764e..3afc8157 100644 --- a/languages/de_DE.po +++ b/languages/de_DE.po @@ -974,11 +974,11 @@ msgstr "Vorlagen Editoren" #: views/index.hbs:21 msgid "" -"Mailtrain ships with GrapeJS and Mosaico built in, two advanced template " +"Mailtrain ships with Grapesjs and Mosaico built in, two advanced template " "editors. Mailtrain also offers a code editor if you prefer to handcraft the " "HTML yourself." msgstr "" -"Mailtrain beinhaltet GrapeJS und Mosaico, zwei Programme zum Bearbeiten der " +"Mailtrain beinhaltet Grapesjs und Mosaico, zwei Programme zum Bearbeiten der " "E-Mail-Vorlagen. Natürlich bietet Mailtrain auch einen Code-Editor, sofern " "Sie den HTML Code selber erstellen möchten." @@ -1913,8 +1913,8 @@ msgid "CLOSE" msgstr "SCHLIESSEN" #: views/partials/grapejs.hbs:2 -msgid "Open GrapeJS" -msgstr "GrapeJS öffnen" +msgid "Open Grapesjs" +msgstr "Grapesjs öffnen" #: views/partials/html-preview.hbs:1 msgid "Toggle HTML preview" @@ -3699,7 +3699,7 @@ msgid "Attachment not found" msgstr "Anhangs-Datei nicht gefunden" #: routes/blacklist.js:13 routes/campaigns.js:26 routes/editorapi.js:35 -#: routes/fields.js:13 routes/forms.js:16 routes/grapejs.js:13 +#: routes/fields.js:13 routes/forms.js:16 routes/grapesjs.js:13 #: routes/lists.js:50 routes/mosaico.js:14 routes/report-templates.js:20 #: routes/reports.js:22 routes/segments.js:13 routes/settings.js:23 #: routes/templates.js:18 routes/triggers.js:18 routes/users.js:75 diff --git a/languages/es_ES.mo b/languages/es_ES.mo index 214acc8a6dfac0b6dc4e2fcafff54b8d04eb7f33..ed5927d99b7a5819340f0822c932ff7fb35c27c1 100644 GIT binary patch delta 20115 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 D2LfIt delta 16121 zcmYk?2Y3|4|Htt?2!Vu9LJJ|lCA1I%gh&aYhu&Lg3jB~JA_zzm6+J+D6_zSeq)3w* zq)V>?A{`>4RFMu!NBF-#H^cLHpJ#l{cV>2Wc4l_(a`?x^bUU}DOS+gXV4B0RCavS- z#c%RC&aD9Q6;@HA$|E0`T0PHq_;I5#{E00-7U<8&)sF7s^R03P3iYXI0?%MRe2B#{>;D{wX>clIJ)D8M@+HiRH{E9G;-aQ>Fys3k z!zkU2k(g@BU$`sM#f8s#*Kxd*Zns{jard&s9C#a zePHYVbxWtO8vkWiGoCr3qPc7F|O5I?l18Qm;QN6j)+%hjkE*o7L$85`eoy9Spop=*r#(Con}s2N{_ zD&K^Ka1WNm8}9MoxcKqC%xccWjFhgxK-`F$jqRwBrP}zGTQy@uE%le!+ssH!RNNM| zd)~9R90uxqgL4&s>^QaXdu)skF#(eXG0XS~euRZT zVcl^C4#A0^^5(@XpE=Gj#i;Vo!OSgA!SeWQu;bp#lrw(r=Vn&cqV8)qX2Ro`4Sz?? z&O_9Gco>rr)>EX zYu*v2eUkM()PToX*I^c}@0=&23;ufj9OLcgL0{unc2_+&G4g)x{o4s}BnQ2jN=EZBB3^FM@458L22 z>YeUPF>9I^6&FMeuqxKY-l)B?36t<5W@c$3UB@X)95>Z2skJW#Qtq?yNYp@G6{un! z7RT>UA6h3d3U8w>lzE!j&1Enb@!MDd`(Qd;ff;ZuYH7CE_#9>?zJ$8t`>6As>E^r& zVPrIbe5i^-s5`ER#jrK1!(o^M=cAtgAEvvFbB6h5n(r=+QTHinKyC-Dvm+TcR8Gg@7eOeug&dbM_tEPz!sFlPzq|HF4!8i^4%~K z_C?+15cJ|G8!y4E#H&!ZwF7k{7f=_tf!Xk-EzdIB^dEto=W}AoXo4%D_Id-<37u^` z5F?2vVg#W+5c5Vw2vL~p;eT`b95LQ;^MV((9^I{dujcrkTxxM0h#qVD`YYEjehd7_R(Q8VL3)yLU52{piG zsQy313>xW|WVDUP;~t!Y`UvT`$Xu`oYU=ypTQ~%D!IVXA{XF@7Hwo2m+Qp`s7gb#x z)on%8{WV0bL`PKj@1w@o7j^z{8_!4WgmpIl5epF?L(RuOSPJ!vKuLYMi6;|F{4N&2 z@mLsFV?3Tlb&!6E14>!q`Xa)TmYP-tP}5osRofUV;JX-r zvr*GMA2Z+@)NOBG>OP3b<$Fk|iv%n)s~d{ir!lBzwXLmDmw6vGxPhoAX(|TcD%7lO zLS1$b&c=hNZPsPExmh3TX4fK<;d9QA8A`!3?1Z1KFtcl{w_(TKLvv@4)0)N%(up@V^7rb z&B6EZ5cb4UYt0|`b1<0r3F^+%tTPjx9^WR;Dm{+#0qU*0H^nT}In2oQottFR<73Q> zuP_T{T5qO2A7&$t#SpB5q1eF2?NLki0qV^#$~qr|h&Q9o--GJ+4C(>9jy_%RC7DW? z@dv)IVO`Xn%*C|05EF3;M&l)G&<3_0aXc2ozNmI{Q0>m5ZtOMY!t@)>m(l#FS6AhY z%)c@%ZNZ1AI~aj_RFtH8s7p8$BkH!k45LWt$2iAQ4ze={INJ27ZGRLWs~?{hNmG&d57IaPLMF3u$m z-L2kvH)D3Zgqp}lsAn@|k9Hs}%9GKZc1GRlRMbHBVolA9Myg`X2PwgJ3fQ~cnQNQ2pFPpZ_5{VAec8YUH1wE-(V~;%H2Vi;>;$tiXJ@ z4GUo^>TU5Fb%AUL%}kZR!YoMws^9j9%#3tL?S+pIG5=b_Q559F`51*8Fb2dnGc(_E{3IvldvNWz(72UY4PG==AT!mbD09o#PlO( z309&y`T;f4xHy+U>IOLDY=>;vYjX#p3t^Gh$ITh;GPNhD<*) z$*4O$fSQT3w)`&Y!kvEMQv`>hrhFG>#v9lcpWs|fK5l;3d59H>V@{agJG!D~^lQwD z8?d3C&;w-JP>|!K<8;6eu>~H*N?72OdAvHH$~R&w3^{F{|IQdnJQy_-6HxD(ZrlP)l_O)$U)+iGkC5^>l4T|MP#1Ol}HZVi4v$Z@xcyQSmI)=2?ik!(ULl{VM8?f>X_A zi$QJXGN^%7N4-B9pa$?hYG!??8=aiW{OitUQ1B7XwGFcVY8n(komdprt|~@gZPXoh zLT$!DsDaGG1l*1v<6~@xy)Kv=IgBNUPov&5X@6t>^*9y&&5X1zYHGTo?syXB!)>Sw zq@rf(8S28>E}GAPM9fQ^jB4KpBXA<>aa@k-?`Ks1FR&CA_Wf?wtd&)<)@Ui}0vAyy zr2E5+JP!3@X^&-a3|7JIn27(P+9zBxKlygVa>QR_G#*E_duHo>r7xQXJu#Asg&2l= zQ6s;Ax+CX`nW_BfB}_uS`#YirG}4x@v*jl+lJY0k+*j@QEDWc-F6P(s--(QN^-$Df zF~P=jQIF$t)LQRAZLZUp2d|*cdxd)5gRhyVA{^B&26ZC|sF`YldK!jXXJAe}|I5i} zO?RR?K99QNe=rKOT{m}L2DK!uQB(K@s>4mFO?ntZ@Uo5Xq0SHd(`@FVsP-jMPeBr9 z=lV`E8Eu|!sHqu_8qi$S3~a=Lcm#E!`_}X~%z*Nv`l*GQ!F{L;ok7jaU#Q3Ssf|Pa zGVLPJ|7E^78I7nSYN{KdI_Qk*a3Ge%QMP^q1`!`Y*3dbFI{y)B2GZX&yE_LCBCds+ ziS4Kx`~wT%^P7yj2$_7h%x>%m_7f{dhE!3+w{arINVW{>+ zQFm4r)lU=D`5jT`4M6Rw$*84VjhXSJkBp}HGM2!zvQ$Y^8-P#s@GJvRT?IOKt87=e+L7esB! zny58=8%yF~)YPxQP~3=F@DOV4&!YzT0;4hLp?@iTPCOZns1<4r+gnGWW@IfE$KO#S z4*A=d1A~b3qRuaZdOAwjxF%*LZh%$N@Hv1jiDy4DGx`8?=(!1fYzm5??yNQz#kQ!m z8;-F!-4wRncp!KZ(%n47lXLIll7^&qdb_4 zxB%wHM68I-Q5{djbT}EcmNQW8=c6vL5o_Qc)YPYcW~Mw0gNX~HZm1M$#u}neCnl58 z1v;QQ?t~g?4{U^=<3>D;>+s9x{Naw}Uhv%jmtiv2cxk?(&A`UQxA6#8{MUTP%DgM@wgPHU|EmH>52#4{AI&JXQ%P_-v(zfjM6)9!?F>cVE6s9 z1?vq<>+uhHC2BWpz)rXmTVTNekN=(rVL0(r)MBney$MoL59A~FYT4-UiRnz~I@D8l z6m#Ppw|F^k=-5Dy|3iBcR;P5Q+o@cgs6FXD{#E(adI>dof1)P$nR}{Sf^SF$kAJgF z#Uhk$$7*;D3u6)fp(_y^Vi_E1hax$y816z3@;;_ z)LoDe6*?=U$G;&Dpssn_O-+dIJ}boIe~E8Iop}Z|k{hVIERf0LRAAA%VmadZtY8P? zv#6O)$m((W5Pywph%;t0E3yr>JNKdP;DS4(d_vUZ>}H$?av0B`*5w)&qLDa}&qdKR@KuA!c>SE#p4<_M3o7`>Pc_n~&s zIn-P0sry9*Z?nmHJ^s(F^{C(XJo!BS|H-Fqesh(@))drk-i5mV!`4fv-kzY===GF} zVd2BQ9{(G4C93gh)YEs%Enm?aKPu7;#6{Jnpx*a~FdhDh>hcb1As)HYD|+iqjq>;6=^VzcSR%%aT20P2>a zmU<=X^|}*v-NUH6{S8y_7B<9rvF5?JjhdrJZm%kFp%aRmyO@C;C|&5TuM!S0!9;WLtXDGR=}t3 z$f^l3qvFk-&qA%-52zQ(Nz{J0k6MeT?!&4HQ4>m=xt)gE?yFFrZ97ocxazj3RyAr` z8FQuesO@_YHA5$mmymPK-CoU`G`g(E|G~Z&<0yTIdbJfOXI{-Mu|Dxo)HRNvcFhCS zOW>7TJSjSSX@Z%zlc>A<9TV_xw|`PX_`>q0bO-A0PNK&7z&(-_>(gp2N;JD>HR?Io zhuiQlYA1}Y;PL;yxeztVzc3!dE1Hj}1~`oPBI*OBVsnnR`EEg_%SA9^Qs>IUv%GLd*W-TH+hX}9{=woy>J}y0W6KlNgn4z z9EJL}@Cd78e07i08~fu&coo&IRSib08Q5FH-1#xo{GLYbz{|LjXTEw(vqSFJGBXlV zoAcbBHA=^fAg3p825P6TM7@BwqMqA}XjbY}jkpXW>v;U%BHS!BOC@fpYo;q>J&*sN z6cbQiwg#Xc=DDbcd$}z?g6i^-JFI4OzFGCn1%E+Z;38`1k1^Q&xn>yO3a-~I7~?iD z8*eqL-ELIxsi;kT9ku8$+$y!gqNX=Ay>3Q*{W*Yo75;*Hq1<$b)bfUIY-C3A8)}36 z>u#tOo%nrYkN+R!ccV*brzRd}FFrye}NiN?l$I?UJLa&4n*y*WvJQs4IAJS%z`!EHm`zYr>qB>P$=D%ZJBR`_%bRTN$KciOUPt3r?fYBGaX~q8uh_+#@$}Gpl=L09o(XGKaI(+HaJs=A5%V?^nF@W z$Q#suc&NKUemUjgByDybIVgWh`jGS~DTKOOlxHNr()RH#=N%>H@cI8Ne{MT{g2yQ> zgNv{aC(I|`hWsa_P2|&(O4yG0-sBvlBfW3Wk=OAlen7nzSjSM}O2jp2*PVC-`OcJO z@(;kr%hH~x#s^8?le*Zlp16RtgR;4tFqV^>kiX?W*?hIvPWg^_EolMy&9qOXT^w;a z)G^hn{P&b65%U*;GeRT(h7>?S4o^EXJbPixzL=Y3kCVj?Yjp*}YQ)oQeRq4+O_Ud)yez4+7Pu}M9j8d=ZKHDj67!$!w*F1gW1H!K zSE!rAIm<~6i4T#!CI2^G!phWN$C;#lov z>m<&$dEllt^!k=jQje1A)V@XPMf?KOQ5J(2{9RM{pW`BBJ!~&+XtUeaE&NZL!IbMb zOX3eaXBp@4OgrI}XCdt~{Wf>*keNWbLdt4S;<5F=C)B|nTXq;Lk`{2`FGvTdD?}P&u`KVs=5|_l6VC@KCtB>l&y1nH7@Nt zOY0|;@)_wAq(u(WX!5l%f%0OQ9uJdNkp3Y>an9eg(b3jkIf8aN8sWE;%_AM6O$=pU zlQNS}qUA1zOv!h)^-khB#M^0E$=}}m=b?MENrZ0^HLXb9C@hLPZj-i>PtTd_vC4nO@&jeX zNKI+8le!Mn%_EK`E{SXL&7qHwDb!~mbt65cz7=J?$$vwBpogdFj%_`I&H~7fqjEZx zD@c7we9kyuQ&R&1jc!PDuWtt}dr=ZbZ8fZlBW%mln8F#EXj6!^jCwvN z{l}X<^%>D#%J$pxe75)1IF_>C=_86Zc}Zo+PrzrS6Qugw(%$AdLnl){g|=zXOIqpP zZyxQtNsG;-pQ-7C9dRY;&5?_ihlxkpg7@(&$_kToJi!D;v4J)RNa@K3Qof4vSn}1$ zr`WbWd`;Yw^qhR9G>*G2IbWvXoX2-d=PGHQdpS8S{1z?p6V)SaBd_Co@)O;UT4wjP zpx;i4aEQN-twsC|vA+IPC3PbIl51qgUx|Mv{|D~I!IbH1$iJMUV;*TBWnYmdQNIvB zqpl@+9TUm#Ch^TqUsT+yEkZvyNqG-q{xI`@rN58wkuGpfKkC-#L}DGk*?#KNua2yg z?=xBd*EE}TA}McR+nnGW{ms$9!!75?$OkKxM=2QRPHkDkbH+_=>CH6OcATH`1#WPw z2;Ufc`Y*O-8)vN}zX#tOf7-e?aa}SSNG|2YY3HGjf5;EBef?w4ZEoWt)U6?3m~$Fa z7i{bA>ATGw+o+56Eh?9~=UNrg;y0ymt8IP8Uj9d{P2E%cnB<{;6mePFwnH6>q)6h~ z#37`%QSTibRo`Gb_FBk7oCH4$HviHq2_6Vh`1S)9m9^p|lx5nZCh$DW65EL>x&x82MYz8A)04f6kdp*-xD3zyBo! zE@=oUfi#jdp2pu&U6j0z^fV42?~-4H2mB}VEtmXO%6=qnj6F#2k-tm%HBvJ19MTff zDaz|p_9ywbN&UITT>tzNoTZ`|4aVSTD!P)dPJTai9dJ4E@Ax_Kn`0HRj^fnm@9M0a z_XlOWi1(4klTX0+sQZ$%n4}{eWjeB>X4ScEJGxK)U(!U|z)N`nIxS4fM)^CWrEZyb zqLWV2q7AiQ;8Z+md-#nOsrKx?-jLp+vzWzxsAy+zsIw#`a>pEQ-!nly?wNhBTRXgA4Zo!NE-g(=Hy_rAaC zT`GPj7m6e4pgYNHPZB?If{u37e@Hq(e492pdRUVvYft_qE~1T&V5{;CNE@lYLn=s{ z3;Nczg5Z*yxm{SjQxxeK$|(hK05t>sCFUQEDw2Oq*)FU>noql5iFLd~euO>$uKPv1 zu&A$yB1q?GQIfQVd>dNbAYYaAy!W8*jlM{#!x54rvqR^-UX}^N7qU3LDvmmF)$_mcU7 z%0fj7enaIX+d+`EBV{vbI~p5O)|~un+6H59%HActIjT^8ncx^@gY5aLyK37^R~;!x zp8$W6))5S$;Zjc2QH8Ql%!zAAwJEdR_rd;jNrDB@;$tewHd#i*; z1~>28r+44}B^veX*1b!K>I1stCWp-;TZd_3YTccVEgI zcI?${K*w%fOSI_P@x%Yb6(YO#>rg8>xKX`EwMw+=+P7c#-n}YB#+NJ=?A|>e&2L`0 zQoRwuZA#SX+N*0{(^u2pUAuJeANf|vQYGICcAKUa^8}}SmYQ0Z!EJ0)(37Fz{{hp) B?i&CA diff --git a/languages/es_ES.po b/languages/es_ES.po index 8abe4590..ed6f9006 100644 --- a/languages/es_ES.po +++ b/languages/es_ES.po @@ -979,11 +979,11 @@ msgstr "Editores plantilla" #: views/index.hbs:21 msgid "" -"Mailtrain ships with GrapeJS and Mosaico built in, two advanced template " +"Mailtrain ships with Grapesjs and Mosaico built in, two advanced template " "editors. Mailtrain also offers a code editor if you prefer to handcraft the " "HTML yourself." msgstr "" -"Mailtrain envía con los incorporados GrapeJS y Mosaico, dos editores " +"Mailtrain envía con los incorporados Grapesjs y Mosaico, dos editores " "avanzados de plantillas . Mailtrain también ofrece un editor de código, por " "si prefieres modificar HTML." @@ -1946,8 +1946,8 @@ msgid "CLOSE" msgstr "CERRAR" #: views/partials/grapejs.hbs:2 -msgid "Open GrapeJS" -msgstr "Abrir GrapeJS" +msgid "Open Grapesjs" +msgstr "Abrir Grapesjs" #: views/partials/html-preview.hbs:1 msgid "Toggle HTML preview" @@ -3831,7 +3831,7 @@ msgid "Attachment not found" msgstr "Adjunto no encontrado" #: routes/blacklist.js:13 routes/campaigns.js:26 routes/editorapi.js:35 -#: routes/fields.js:13 routes/forms.js:16 routes/grapejs.js:14 +#: routes/fields.js:13 routes/forms.js:16 routes/grapesjs.js:14 #: routes/lists.js:50 routes/mosaico.js:14 routes/report-templates.js:20 #: routes/reports.js:22 routes/segments.js:13 routes/settings.js:23 #: routes/templates.js:18 routes/triggers.js:18 routes/users.js:75 diff --git a/languages/it_IT.mo b/languages/it_IT.mo index 7e5a8f97444a95e9bd6930a3325159728785f192..2edbd154bfe726101d26cb98846463a307284f7a 100644 GIT binary patch delta 19364 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 D(;9?h delta 15290 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 + {{#if mailtrainConfig}}