From 63765f7222aedc8cd5c2f5bfeb8660edfbff24c2 Mon Sep 17 00:00:00 2001 From: Tomas Bures Date: Tue, 18 Sep 2018 10:30:13 +0200 Subject: [PATCH] Client's public folder renamed to static Regular campaign sender seems to have most of the code in place. (Not tested.) --- .gitignore | 13 - UPGRADE.md | 4 +- app-builder.js | 142 ++++------ client/src/campaigns/Content.js | 1 - client/src/campaigns/helpers.js | 53 ++++ client/src/lib/mosaico.js | 4 +- client/src/lib/urls.js | 18 +- client/src/lists/CUD.js | 4 +- client/src/lists/subscriptions/List.js | 4 +- client/src/templates/helpers.js | 10 +- .../bootstrap/css/bootstrap-theme.css | 0 .../bootstrap/css/bootstrap-theme.css.map | 0 .../bootstrap/css/bootstrap-theme.min.css | 0 .../bootstrap/css/bootstrap-theme.min.css.map | 0 .../bootstrap/css/bootstrap.css | 0 .../bootstrap/css/bootstrap.css.map | 0 .../bootstrap/css/bootstrap.min.css | 0 .../bootstrap/css/bootstrap.min.css.map | 0 .../fonts/glyphicons-halflings-regular.eot | Bin .../fonts/glyphicons-halflings-regular.svg | 0 .../fonts/glyphicons-halflings-regular.ttf | Bin .../fonts/glyphicons-halflings-regular.woff | Bin .../fonts/glyphicons-halflings-regular.woff2 | Bin .../bootstrap/js/bootstrap.js | 0 .../bootstrap/js/bootstrap.min.js | 0 client/{public => static}/bootstrap/js/npm.js | 0 .../bootstrap/themes/cosmo.min.css | 0 .../bootstrap/themes/flatly.min.css | 0 .../bootstrap/themes/paper.min.css | 0 .../bootstrap/themes/simplex.min.css | 0 .../bootstrap/themes/slate.min.css | 0 .../bootstrap/themes/superhero.min.css | 0 .../bootstrap/themes/united.min.css | 0 .../bootstrap/themes/yeti.min.css | 0 client/{public => static}/css/footer.css | 0 client/{public => static}/css/mailtrain.css | 0 client/{public => static}/css/narrow.css | 0 client/{public => static}/favicon.ico | Bin client/{public => static}/jquery-2.2.1.min.js | 0 .../{public => static}/mailtrain-header.png | Bin .../{public => static}/mailtrain-notext.png | Bin client/{public => static}/mailtrain.png | Bin .../mosaico/fa/fonts/fontawesome-webfont.eot | Bin .../mosaico/fa/fonts/fontawesome-webfont.svg | 0 .../mosaico/fa/fonts/fontawesome-webfont.ttf | Bin .../mosaico/fa/fonts/fontawesome-webfont.woff | Bin .../fa/fonts/fontawesome-webfont.woff2 | Bin .../mosaico/img/byvoxmail.png | Bin .../mosaico/img/mosaico-badge.gif | Bin .../mosaico/img/mosaico-v.gif | Bin .../mosaico/img/mosaico32.png | Bin .../mosaico/img/mosaicologo.png | Bin .../mosaico/img/screenshot-orig.png | Bin .../mosaico/img/screenshot.png | Bin .../{public => static}/mosaico/lang/LICENSE | 0 .../{public => static}/mosaico/lang/README.md | 0 .../mosaico/lang/mosaico-de.json | 0 .../mosaico/lang/mosaico-en.json | 0 .../mosaico/lang/mosaico-es.json | 0 .../mosaico/lang/mosaico-fr.json | 0 .../mosaico/lang/mosaico-it.json | 0 .../mosaico/lang/mosaico-nl.json | 0 .../mosaico/lang/mosaico-ru.json | 0 .../mosaico/lang/mosaico-sr_RS.json | 0 .../mosaico/lang/mosaico-sv.json | 0 .../mosaico/mosaico-material.min.css | 0 .../mosaico/mosaico-material.min.css.map | 0 .../mosaico/mosaico.min.css | 0 .../mosaico/mosaico.min.css.map | 0 .../{public => static}/mosaico/mosaico.min.js | 0 .../mosaico/mosaico.min.js.map | 0 .../templates/versafix-1/edres/_full.png | Bin .../versafix-1/edres/buttonBlock.png | Bin .../versafix-1/edres/doubleArticleBlock.png | Bin .../versafix-1/edres/doubleImageBlock.png | Bin .../templates/versafix-1/edres/hrBlock.png | Bin .../templates/versafix-1/edres/imageBlock.png | Bin .../templates/versafix-1/edres/logoBlock.png | Bin .../versafix-1/edres/sideArticleBlock.png | Bin .../versafix-1/edres/singleArticleBlock.png | Bin .../versafix-1/edres/socialBlock.png | Bin .../versafix-1/edres/spacerBlock.png | Bin .../templates/versafix-1/edres/textBlock.png | Bin .../templates/versafix-1/edres/titleBlock.png | Bin .../versafix-1/edres/tripleArticleBlock.png | Bin .../versafix-1/edres/tripleImageBlock.png | Bin .../img/social_def/facebook_bw_ok.png | Bin .../versafix-1/img/social_def/facebook_ok.png | Bin .../img/social_def/flickr_bw_ok.png | Bin .../versafix-1/img/social_def/flickr_ok.png | Bin .../img/social_def/google+_bw_ok.png | Bin .../versafix-1/img/social_def/google+_ok.png | Bin .../img/social_def/instagram_bw_ok.png | Bin .../img/social_def/instagram_ok.png | Bin .../img/social_def/linkedin_bw_ok.png | Bin .../versafix-1/img/social_def/linkedin_ok.png | Bin .../img/social_def/twitter_bw_ok.png | Bin .../versafix-1/img/social_def/twitter_ok.png | Bin .../versafix-1/img/social_def/vimeo_bw_ok.png | Bin .../versafix-1/img/social_def/vimeo_ok.png | Bin .../versafix-1/img/social_def/web_bw_ok.png | Bin .../versafix-1/img/social_def/web_ok.png | Bin .../img/social_def/youtube_bw_ok.png | Bin .../versafix-1/img/social_def/youtube_ok.png | Bin .../templates/versafix-1/img/sponsor.gif | Bin .../mosaico/templates/versafix-1/index.html | 0 .../mosaico/uploads/.gitignore | 0 .../mosaico/uploads/README.md | 2 +- .../mosaico/vendor/canvas-to-blob.min.js | 0 .../mosaico/vendor/jquery-migrate.min.js | 0 .../mosaico/vendor/jquery-ui.min.css | 0 .../mosaico/vendor/jquery-ui.min.js | 0 .../mosaico/vendor/jquery.fileupload-image.js | 0 .../vendor/jquery.fileupload-process.js | 0 .../vendor/jquery.fileupload-validate.js | 0 .../mosaico/vendor/jquery.fileupload.js | 0 .../mosaico/vendor/jquery.iframe-transport.js | 0 .../mosaico/vendor/jquery.min.js | 0 .../vendor/jquery.ui.touch-punch.min.js | 0 .../mosaico/vendor/knockout-jqueryui.min.js | 0 .../mosaico/vendor/knockout.js | 0 .../mosaico/vendor/load-image.all.min.js | 0 .../notoregular/noto-sans-400-normal.eot | Bin .../notoregular/noto-sans-400-normal.ttf | Bin .../notoregular/noto-sans-400-normal.woff | Bin .../mosaico/vendor/notoregular/stylesheet.css | 0 .../mosaico/vendor/plugins/advlist/index.js | 0 .../mosaico/vendor/plugins/advlist/plugin.js | 0 .../vendor/plugins/advlist/plugin.min.js | 0 .../mosaico/vendor/plugins/anchor/index.js | 0 .../mosaico/vendor/plugins/anchor/plugin.js | 0 .../vendor/plugins/anchor/plugin.min.js | 0 .../mosaico/vendor/plugins/autolink/index.js | 0 .../mosaico/vendor/plugins/autolink/plugin.js | 0 .../vendor/plugins/autolink/plugin.min.js | 0 .../vendor/plugins/autoresize/index.js | 0 .../vendor/plugins/autoresize/plugin.js | 0 .../vendor/plugins/autoresize/plugin.min.js | 0 .../mosaico/vendor/plugins/autosave/index.js | 0 .../mosaico/vendor/plugins/autosave/plugin.js | 0 .../vendor/plugins/autosave/plugin.min.js | 0 .../mosaico/vendor/plugins/bbcode/index.js | 0 .../mosaico/vendor/plugins/bbcode/plugin.js | 0 .../vendor/plugins/bbcode/plugin.min.js | 0 .../mosaico/vendor/plugins/charmap/index.js | 0 .../mosaico/vendor/plugins/charmap/plugin.js | 0 .../vendor/plugins/charmap/plugin.min.js | 0 .../mosaico/vendor/plugins/code/index.js | 0 .../mosaico/vendor/plugins/code/plugin.js | 0 .../mosaico/vendor/plugins/code/plugin.min.js | 0 .../vendor/plugins/codesample/css/prism.css | 0 .../vendor/plugins/codesample/index.js | 0 .../vendor/plugins/codesample/plugin.js | 0 .../vendor/plugins/codesample/plugin.min.js | 0 .../vendor/plugins/colorpicker/index.js | 0 .../vendor/plugins/colorpicker/plugin.js | 0 .../vendor/plugins/colorpicker/plugin.min.js | 0 .../vendor/plugins/contextmenu/index.js | 0 .../vendor/plugins/contextmenu/plugin.js | 0 .../vendor/plugins/contextmenu/plugin.min.js | 0 .../vendor/plugins/directionality/index.js | 0 .../vendor/plugins/directionality/plugin.js | 0 .../plugins/directionality/plugin.min.js | 0 .../plugins/emoticons/img/smiley-cool.gif | Bin .../plugins/emoticons/img/smiley-cry.gif | Bin .../emoticons/img/smiley-embarassed.gif | Bin .../emoticons/img/smiley-foot-in-mouth.gif | Bin .../plugins/emoticons/img/smiley-frown.gif | Bin .../plugins/emoticons/img/smiley-innocent.gif | Bin .../plugins/emoticons/img/smiley-kiss.gif | Bin .../plugins/emoticons/img/smiley-laughing.gif | Bin .../emoticons/img/smiley-money-mouth.gif | Bin .../plugins/emoticons/img/smiley-sealed.gif | Bin .../plugins/emoticons/img/smiley-smile.gif | Bin .../emoticons/img/smiley-surprised.gif | Bin .../emoticons/img/smiley-tongue-out.gif | Bin .../emoticons/img/smiley-undecided.gif | Bin .../plugins/emoticons/img/smiley-wink.gif | Bin .../plugins/emoticons/img/smiley-yell.gif | Bin .../mosaico/vendor/plugins/emoticons/index.js | 0 .../vendor/plugins/emoticons/plugin.js | 0 .../vendor/plugins/emoticons/plugin.min.js | 0 .../mosaico/vendor/plugins/fullpage/index.js | 0 .../mosaico/vendor/plugins/fullpage/plugin.js | 0 .../vendor/plugins/fullpage/plugin.min.js | 0 .../vendor/plugins/fullscreen/index.js | 0 .../vendor/plugins/fullscreen/plugin.js | 0 .../vendor/plugins/fullscreen/plugin.min.js | 0 .../mosaico/vendor/plugins/help/img/logo.png | Bin .../mosaico/vendor/plugins/help/index.js | 0 .../mosaico/vendor/plugins/help/plugin.js | 0 .../mosaico/vendor/plugins/help/plugin.min.js | 0 .../mosaico/vendor/plugins/hr/index.js | 0 .../mosaico/vendor/plugins/hr/plugin.js | 0 .../mosaico/vendor/plugins/hr/plugin.min.js | 0 .../mosaico/vendor/plugins/image/index.js | 0 .../mosaico/vendor/plugins/image/plugin.js | 0 .../vendor/plugins/image/plugin.min.js | 0 .../vendor/plugins/imagetools/index.js | 0 .../vendor/plugins/imagetools/plugin.js | 0 .../vendor/plugins/imagetools/plugin.min.js | 0 .../mosaico/vendor/plugins/importcss/index.js | 0 .../vendor/plugins/importcss/plugin.js | 0 .../vendor/plugins/importcss/plugin.min.js | 0 .../vendor/plugins/insertdatetime/index.js | 0 .../vendor/plugins/insertdatetime/plugin.js | 0 .../plugins/insertdatetime/plugin.min.js | 0 .../vendor/plugins/legacyoutput/index.js | 0 .../vendor/plugins/legacyoutput/plugin.js | 0 .../vendor/plugins/legacyoutput/plugin.min.js | 0 .../mosaico/vendor/plugins/link/index.js | 0 .../mosaico/vendor/plugins/link/plugin.js | 0 .../mosaico/vendor/plugins/link/plugin.min.js | 0 .../mosaico/vendor/plugins/lists/index.js | 0 .../mosaico/vendor/plugins/lists/plugin.js | 0 .../vendor/plugins/lists/plugin.min.js | 0 .../mosaico/vendor/plugins/media/index.js | 0 .../mosaico/vendor/plugins/media/plugin.js | 0 .../vendor/plugins/media/plugin.min.js | 0 .../vendor/plugins/nonbreaking/index.js | 0 .../vendor/plugins/nonbreaking/plugin.js | 0 .../vendor/plugins/nonbreaking/plugin.min.js | 0 .../vendor/plugins/noneditable/index.js | 0 .../vendor/plugins/noneditable/plugin.js | 0 .../vendor/plugins/noneditable/plugin.min.js | 0 .../mosaico/vendor/plugins/pagebreak/index.js | 0 .../vendor/plugins/pagebreak/plugin.js | 0 .../vendor/plugins/pagebreak/plugin.min.js | 0 .../mosaico/vendor/plugins/paste/index.js | 0 .../mosaico/vendor/plugins/paste/plugin.js | 0 .../vendor/plugins/paste/plugin.min.js | 0 .../mosaico/vendor/plugins/preview/index.js | 0 .../mosaico/vendor/plugins/preview/plugin.js | 0 .../vendor/plugins/preview/plugin.min.js | 0 .../mosaico/vendor/plugins/print/index.js | 0 .../mosaico/vendor/plugins/print/plugin.js | 0 .../vendor/plugins/print/plugin.min.js | 0 .../mosaico/vendor/plugins/save/index.js | 0 .../mosaico/vendor/plugins/save/plugin.js | 0 .../mosaico/vendor/plugins/save/plugin.min.js | 0 .../vendor/plugins/searchreplace/index.js | 0 .../vendor/plugins/searchreplace/plugin.js | 0 .../plugins/searchreplace/plugin.min.js | 0 .../vendor/plugins/spellchecker/index.js | 0 .../vendor/plugins/spellchecker/plugin.js | 0 .../vendor/plugins/spellchecker/plugin.min.js | 0 .../mosaico/vendor/plugins/tabfocus/index.js | 0 .../mosaico/vendor/plugins/tabfocus/plugin.js | 0 .../vendor/plugins/tabfocus/plugin.min.js | 0 .../mosaico/vendor/plugins/table/index.js | 0 .../mosaico/vendor/plugins/table/plugin.js | 0 .../vendor/plugins/table/plugin.min.js | 0 .../mosaico/vendor/plugins/template/index.js | 0 .../mosaico/vendor/plugins/template/plugin.js | 0 .../vendor/plugins/template/plugin.min.js | 0 .../mosaico/vendor/plugins/textcolor/index.js | 0 .../vendor/plugins/textcolor/plugin.js | 0 .../vendor/plugins/textcolor/plugin.min.js | 0 .../vendor/plugins/textpattern/index.js | 0 .../vendor/plugins/textpattern/plugin.js | 0 .../vendor/plugins/textpattern/plugin.min.js | 0 .../mosaico/vendor/plugins/toc/index.js | 0 .../mosaico/vendor/plugins/toc/plugin.js | 0 .../mosaico/vendor/plugins/toc/plugin.min.js | 0 .../plugins/visualblocks/css/visualblocks.css | 0 .../vendor/plugins/visualblocks/index.js | 0 .../vendor/plugins/visualblocks/plugin.js | 0 .../vendor/plugins/visualblocks/plugin.min.js | 0 .../vendor/plugins/visualchars/index.js | 0 .../vendor/plugins/visualchars/plugin.js | 0 .../vendor/plugins/visualchars/plugin.min.js | 0 .../mosaico/vendor/plugins/wordcount/index.js | 0 .../vendor/plugins/wordcount/plugin.js | 0 .../vendor/plugins/wordcount/plugin.min.js | 0 .../vendor/skins/gray-flat/Variables.less | 0 .../skins/gray-flat/content.inline.min.css | 0 .../vendor/skins/gray-flat/content.min.css | 0 .../vendor/skins/gray-flat/fonts/readme.md | 0 .../skins/gray-flat/fonts/tinymce-small.eot | Bin .../skins/gray-flat/fonts/tinymce-small.json | 0 .../skins/gray-flat/fonts/tinymce-small.svg | 0 .../skins/gray-flat/fonts/tinymce-small.ttf | Bin .../skins/gray-flat/fonts/tinymce-small.woff | Bin .../vendor/skins/gray-flat/fonts/tinymce.eot | Bin .../vendor/skins/gray-flat/fonts/tinymce.json | 0 .../vendor/skins/gray-flat/fonts/tinymce.svg | 0 .../vendor/skins/gray-flat/fonts/tinymce.ttf | Bin .../vendor/skins/gray-flat/fonts/tinymce.woff | Bin .../vendor/skins/gray-flat/img/anchor.gif | Bin .../vendor/skins/gray-flat/img/loader.gif | Bin .../vendor/skins/gray-flat/img/object.gif | Bin .../vendor/skins/gray-flat/img/trans.gif | Bin .../vendor/skins/gray-flat/skin.ie7.min.css | 0 .../mosaico/vendor/skins/gray-flat/skin.json | 0 .../vendor/skins/gray-flat/skin.min.css | 0 .../skins/lightgray/content.inline.min.css | 0 .../vendor/skins/lightgray/content.min.css | 0 .../skins/lightgray/content.mobile.min.css | 0 .../skins/lightgray/fonts/tinymce-mobile.woff | Bin .../skins/lightgray/fonts/tinymce-small.eot | Bin .../skins/lightgray/fonts/tinymce-small.svg | 0 .../skins/lightgray/fonts/tinymce-small.ttf | Bin .../skins/lightgray/fonts/tinymce-small.woff | Bin .../vendor/skins/lightgray/fonts/tinymce.eot | Bin .../vendor/skins/lightgray/fonts/tinymce.svg | 0 .../vendor/skins/lightgray/fonts/tinymce.ttf | Bin .../vendor/skins/lightgray/fonts/tinymce.woff | Bin .../vendor/skins/lightgray/img/anchor.gif | Bin .../vendor/skins/lightgray/img/loader.gif | Bin .../vendor/skins/lightgray/img/object.gif | Bin .../vendor/skins/lightgray/img/trans.gif | Bin .../vendor/skins/lightgray/skin.min.css | 0 .../skins/lightgray/skin.mobile.min.css | 0 .../mosaico/vendor/themes/inlite/index.js | 0 .../mosaico/vendor/themes/inlite/theme.js | 0 .../mosaico/vendor/themes/inlite/theme.min.js | 0 .../mosaico/vendor/themes/mobile/index.js | 0 .../mosaico/vendor/themes/mobile/theme.js | 0 .../mosaico/vendor/themes/mobile/theme.min.js | 0 .../mosaico/vendor/themes/modern/index.js | 0 .../mosaico/vendor/themes/modern/theme.js | 0 .../mosaico/vendor/themes/modern/theme.min.js | 0 .../mosaico/vendor/tinymce.min.js | 0 .../subscription/form-input-style.css | 0 .../{public => static}/subscription/widget.js | 0 config/default.yaml | 15 +- docker-compose.yml | 2 + index.js | 31 ++- lib/client-helpers.js | 15 +- lib/helpers.js | 52 ---- lib/mailers.js | 56 ++-- lib/subscription-mail-helpers.js | 2 +- lib/tools.js | 48 +++- lib/urls.js | 27 +- models/campaigns.js | 18 ++ models/fields.js | 15 +- models/files.js | 11 +- models/forms.js | 2 +- models/links.js | 175 ++++++++++++ models/lists.js | 28 +- models/subscriptions.js | 39 +-- models/users.js | 2 +- obsolete/lib/models/forms.js | 2 +- routes/index.js | 11 +- routes/mosaico.js | 13 +- routes/subscription.js | 4 +- services/sender-master.js | 10 +- services/sender-worker.js | 255 +++++++++++++++++- .../migrations/20170506102634_v1_to_v2.js | 9 +- shared/app.js | 9 + shared/mosaico-templates.js | 38 +-- shared/templates.js | 2 - test/e2e/lib/config.js | 2 +- views/layout.hbs | 12 +- 354 files changed, 836 insertions(+), 324 deletions(-) rename client/{public => static}/bootstrap/css/bootstrap-theme.css (100%) rename client/{public => static}/bootstrap/css/bootstrap-theme.css.map (100%) rename client/{public => static}/bootstrap/css/bootstrap-theme.min.css (100%) rename client/{public => static}/bootstrap/css/bootstrap-theme.min.css.map (100%) rename client/{public => static}/bootstrap/css/bootstrap.css (100%) rename client/{public => static}/bootstrap/css/bootstrap.css.map (100%) rename client/{public => static}/bootstrap/css/bootstrap.min.css (100%) rename client/{public => static}/bootstrap/css/bootstrap.min.css.map (100%) rename client/{public => static}/bootstrap/fonts/glyphicons-halflings-regular.eot (100%) rename client/{public => static}/bootstrap/fonts/glyphicons-halflings-regular.svg (100%) rename client/{public => static}/bootstrap/fonts/glyphicons-halflings-regular.ttf (100%) rename client/{public => static}/bootstrap/fonts/glyphicons-halflings-regular.woff (100%) rename client/{public => static}/bootstrap/fonts/glyphicons-halflings-regular.woff2 (100%) rename client/{public => static}/bootstrap/js/bootstrap.js (100%) rename client/{public => static}/bootstrap/js/bootstrap.min.js (100%) rename client/{public => static}/bootstrap/js/npm.js (100%) rename client/{public => static}/bootstrap/themes/cosmo.min.css (100%) rename client/{public => static}/bootstrap/themes/flatly.min.css (100%) rename client/{public => static}/bootstrap/themes/paper.min.css (100%) rename client/{public => static}/bootstrap/themes/simplex.min.css (100%) rename client/{public => static}/bootstrap/themes/slate.min.css (100%) rename client/{public => static}/bootstrap/themes/superhero.min.css (100%) rename client/{public => static}/bootstrap/themes/united.min.css (100%) rename client/{public => static}/bootstrap/themes/yeti.min.css (100%) rename client/{public => static}/css/footer.css (100%) rename client/{public => static}/css/mailtrain.css (100%) rename client/{public => static}/css/narrow.css (100%) rename client/{public => static}/favicon.ico (100%) rename client/{public => static}/jquery-2.2.1.min.js (100%) rename client/{public => static}/mailtrain-header.png (100%) rename client/{public => static}/mailtrain-notext.png (100%) rename client/{public => static}/mailtrain.png (100%) rename client/{public => static}/mosaico/fa/fonts/fontawesome-webfont.eot (100%) rename client/{public => static}/mosaico/fa/fonts/fontawesome-webfont.svg (100%) rename client/{public => static}/mosaico/fa/fonts/fontawesome-webfont.ttf (100%) rename client/{public => static}/mosaico/fa/fonts/fontawesome-webfont.woff (100%) rename client/{public => static}/mosaico/fa/fonts/fontawesome-webfont.woff2 (100%) rename client/{public => static}/mosaico/img/byvoxmail.png (100%) rename client/{public => static}/mosaico/img/mosaico-badge.gif (100%) rename client/{public => static}/mosaico/img/mosaico-v.gif (100%) rename client/{public => static}/mosaico/img/mosaico32.png (100%) rename client/{public => static}/mosaico/img/mosaicologo.png (100%) rename client/{public => static}/mosaico/img/screenshot-orig.png (100%) rename client/{public => static}/mosaico/img/screenshot.png (100%) rename client/{public => static}/mosaico/lang/LICENSE (100%) rename client/{public => static}/mosaico/lang/README.md (100%) rename client/{public => static}/mosaico/lang/mosaico-de.json (100%) rename client/{public => static}/mosaico/lang/mosaico-en.json (100%) rename client/{public => static}/mosaico/lang/mosaico-es.json (100%) rename client/{public => static}/mosaico/lang/mosaico-fr.json (100%) rename client/{public => static}/mosaico/lang/mosaico-it.json (100%) rename client/{public => static}/mosaico/lang/mosaico-nl.json (100%) rename client/{public => static}/mosaico/lang/mosaico-ru.json (100%) rename client/{public => static}/mosaico/lang/mosaico-sr_RS.json (100%) rename client/{public => static}/mosaico/lang/mosaico-sv.json (100%) rename client/{public => static}/mosaico/mosaico-material.min.css (100%) rename client/{public => static}/mosaico/mosaico-material.min.css.map (100%) rename client/{public => static}/mosaico/mosaico.min.css (100%) rename client/{public => static}/mosaico/mosaico.min.css.map (100%) rename client/{public => static}/mosaico/mosaico.min.js (100%) rename client/{public => static}/mosaico/mosaico.min.js.map (100%) rename client/{public => static}/mosaico/templates/versafix-1/edres/_full.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/edres/buttonBlock.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/edres/doubleArticleBlock.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/edres/doubleImageBlock.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/edres/hrBlock.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/edres/imageBlock.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/edres/logoBlock.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/edres/sideArticleBlock.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/edres/singleArticleBlock.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/edres/socialBlock.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/edres/spacerBlock.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/edres/textBlock.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/edres/titleBlock.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/edres/tripleArticleBlock.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/edres/tripleImageBlock.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/img/social_def/facebook_bw_ok.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/img/social_def/facebook_ok.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/img/social_def/flickr_bw_ok.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/img/social_def/flickr_ok.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/img/social_def/google+_bw_ok.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/img/social_def/google+_ok.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/img/social_def/instagram_bw_ok.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/img/social_def/instagram_ok.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/img/social_def/linkedin_bw_ok.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/img/social_def/linkedin_ok.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/img/social_def/twitter_bw_ok.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/img/social_def/twitter_ok.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/img/social_def/vimeo_bw_ok.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/img/social_def/vimeo_ok.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/img/social_def/web_bw_ok.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/img/social_def/web_ok.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/img/social_def/youtube_bw_ok.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/img/social_def/youtube_ok.png (100%) rename client/{public => static}/mosaico/templates/versafix-1/img/sponsor.gif (100%) rename client/{public => static}/mosaico/templates/versafix-1/index.html (100%) rename client/{public => static}/mosaico/uploads/.gitignore (100%) rename client/{public => static}/mosaico/uploads/README.md (76%) rename client/{public => static}/mosaico/vendor/canvas-to-blob.min.js (100%) rename client/{public => static}/mosaico/vendor/jquery-migrate.min.js (100%) rename client/{public => static}/mosaico/vendor/jquery-ui.min.css (100%) rename client/{public => static}/mosaico/vendor/jquery-ui.min.js (100%) rename client/{public => static}/mosaico/vendor/jquery.fileupload-image.js (100%) rename client/{public => static}/mosaico/vendor/jquery.fileupload-process.js (100%) rename client/{public => static}/mosaico/vendor/jquery.fileupload-validate.js (100%) rename client/{public => static}/mosaico/vendor/jquery.fileupload.js (100%) rename client/{public => static}/mosaico/vendor/jquery.iframe-transport.js (100%) rename client/{public => static}/mosaico/vendor/jquery.min.js (100%) rename client/{public => static}/mosaico/vendor/jquery.ui.touch-punch.min.js (100%) rename client/{public => static}/mosaico/vendor/knockout-jqueryui.min.js (100%) rename client/{public => static}/mosaico/vendor/knockout.js (100%) rename client/{public => static}/mosaico/vendor/load-image.all.min.js (100%) rename client/{public => static}/mosaico/vendor/notoregular/noto-sans-400-normal.eot (100%) rename client/{public => static}/mosaico/vendor/notoregular/noto-sans-400-normal.ttf (100%) rename client/{public => static}/mosaico/vendor/notoregular/noto-sans-400-normal.woff (100%) rename client/{public => static}/mosaico/vendor/notoregular/stylesheet.css (100%) rename client/{public => static}/mosaico/vendor/plugins/advlist/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/advlist/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/advlist/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/anchor/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/anchor/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/anchor/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/autolink/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/autolink/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/autolink/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/autoresize/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/autoresize/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/autoresize/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/autosave/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/autosave/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/autosave/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/bbcode/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/bbcode/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/bbcode/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/charmap/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/charmap/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/charmap/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/code/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/code/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/code/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/codesample/css/prism.css (100%) rename client/{public => static}/mosaico/vendor/plugins/codesample/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/codesample/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/codesample/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/colorpicker/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/colorpicker/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/colorpicker/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/contextmenu/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/contextmenu/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/contextmenu/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/directionality/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/directionality/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/directionality/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/emoticons/img/smiley-cool.gif (100%) rename client/{public => static}/mosaico/vendor/plugins/emoticons/img/smiley-cry.gif (100%) rename client/{public => static}/mosaico/vendor/plugins/emoticons/img/smiley-embarassed.gif (100%) rename client/{public => static}/mosaico/vendor/plugins/emoticons/img/smiley-foot-in-mouth.gif (100%) rename client/{public => static}/mosaico/vendor/plugins/emoticons/img/smiley-frown.gif (100%) rename client/{public => static}/mosaico/vendor/plugins/emoticons/img/smiley-innocent.gif (100%) rename client/{public => static}/mosaico/vendor/plugins/emoticons/img/smiley-kiss.gif (100%) rename client/{public => static}/mosaico/vendor/plugins/emoticons/img/smiley-laughing.gif (100%) rename client/{public => static}/mosaico/vendor/plugins/emoticons/img/smiley-money-mouth.gif (100%) rename client/{public => static}/mosaico/vendor/plugins/emoticons/img/smiley-sealed.gif (100%) rename client/{public => static}/mosaico/vendor/plugins/emoticons/img/smiley-smile.gif (100%) rename client/{public => static}/mosaico/vendor/plugins/emoticons/img/smiley-surprised.gif (100%) rename client/{public => static}/mosaico/vendor/plugins/emoticons/img/smiley-tongue-out.gif (100%) rename client/{public => static}/mosaico/vendor/plugins/emoticons/img/smiley-undecided.gif (100%) rename client/{public => static}/mosaico/vendor/plugins/emoticons/img/smiley-wink.gif (100%) rename client/{public => static}/mosaico/vendor/plugins/emoticons/img/smiley-yell.gif (100%) rename client/{public => static}/mosaico/vendor/plugins/emoticons/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/emoticons/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/emoticons/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/fullpage/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/fullpage/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/fullpage/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/fullscreen/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/fullscreen/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/fullscreen/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/help/img/logo.png (100%) rename client/{public => static}/mosaico/vendor/plugins/help/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/help/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/help/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/hr/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/hr/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/hr/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/image/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/image/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/image/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/imagetools/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/imagetools/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/imagetools/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/importcss/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/importcss/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/importcss/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/insertdatetime/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/insertdatetime/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/insertdatetime/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/legacyoutput/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/legacyoutput/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/legacyoutput/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/link/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/link/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/link/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/lists/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/lists/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/lists/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/media/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/media/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/media/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/nonbreaking/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/nonbreaking/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/nonbreaking/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/noneditable/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/noneditable/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/noneditable/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/pagebreak/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/pagebreak/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/pagebreak/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/paste/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/paste/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/paste/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/preview/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/preview/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/preview/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/print/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/print/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/print/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/save/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/save/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/save/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/searchreplace/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/searchreplace/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/searchreplace/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/spellchecker/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/spellchecker/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/spellchecker/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/tabfocus/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/tabfocus/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/tabfocus/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/table/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/table/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/table/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/template/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/template/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/template/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/textcolor/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/textcolor/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/textcolor/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/textpattern/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/textpattern/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/textpattern/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/toc/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/toc/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/toc/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/visualblocks/css/visualblocks.css (100%) rename client/{public => static}/mosaico/vendor/plugins/visualblocks/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/visualblocks/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/visualblocks/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/visualchars/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/visualchars/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/visualchars/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/plugins/wordcount/index.js (100%) rename client/{public => static}/mosaico/vendor/plugins/wordcount/plugin.js (100%) rename client/{public => static}/mosaico/vendor/plugins/wordcount/plugin.min.js (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/Variables.less (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/content.inline.min.css (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/content.min.css (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/fonts/readme.md (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/fonts/tinymce-small.eot (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/fonts/tinymce-small.json (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/fonts/tinymce-small.svg (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/fonts/tinymce-small.ttf (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/fonts/tinymce-small.woff (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/fonts/tinymce.eot (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/fonts/tinymce.json (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/fonts/tinymce.svg (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/fonts/tinymce.ttf (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/fonts/tinymce.woff (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/img/anchor.gif (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/img/loader.gif (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/img/object.gif (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/img/trans.gif (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/skin.ie7.min.css (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/skin.json (100%) rename client/{public => static}/mosaico/vendor/skins/gray-flat/skin.min.css (100%) rename client/{public => static}/mosaico/vendor/skins/lightgray/content.inline.min.css (100%) rename client/{public => static}/mosaico/vendor/skins/lightgray/content.min.css (100%) rename client/{public => static}/mosaico/vendor/skins/lightgray/content.mobile.min.css (100%) rename client/{public => static}/mosaico/vendor/skins/lightgray/fonts/tinymce-mobile.woff (100%) rename client/{public => static}/mosaico/vendor/skins/lightgray/fonts/tinymce-small.eot (100%) rename client/{public => static}/mosaico/vendor/skins/lightgray/fonts/tinymce-small.svg (100%) rename client/{public => static}/mosaico/vendor/skins/lightgray/fonts/tinymce-small.ttf (100%) rename client/{public => static}/mosaico/vendor/skins/lightgray/fonts/tinymce-small.woff (100%) rename client/{public => static}/mosaico/vendor/skins/lightgray/fonts/tinymce.eot (100%) rename client/{public => static}/mosaico/vendor/skins/lightgray/fonts/tinymce.svg (100%) rename client/{public => static}/mosaico/vendor/skins/lightgray/fonts/tinymce.ttf (100%) rename client/{public => static}/mosaico/vendor/skins/lightgray/fonts/tinymce.woff (100%) rename client/{public => static}/mosaico/vendor/skins/lightgray/img/anchor.gif (100%) rename client/{public => static}/mosaico/vendor/skins/lightgray/img/loader.gif (100%) rename client/{public => static}/mosaico/vendor/skins/lightgray/img/object.gif (100%) rename client/{public => static}/mosaico/vendor/skins/lightgray/img/trans.gif (100%) rename client/{public => static}/mosaico/vendor/skins/lightgray/skin.min.css (100%) rename client/{public => static}/mosaico/vendor/skins/lightgray/skin.mobile.min.css (100%) rename client/{public => static}/mosaico/vendor/themes/inlite/index.js (100%) rename client/{public => static}/mosaico/vendor/themes/inlite/theme.js (100%) rename client/{public => static}/mosaico/vendor/themes/inlite/theme.min.js (100%) rename client/{public => static}/mosaico/vendor/themes/mobile/index.js (100%) rename client/{public => static}/mosaico/vendor/themes/mobile/theme.js (100%) rename client/{public => static}/mosaico/vendor/themes/mobile/theme.min.js (100%) rename client/{public => static}/mosaico/vendor/themes/modern/index.js (100%) rename client/{public => static}/mosaico/vendor/themes/modern/theme.js (100%) rename client/{public => static}/mosaico/vendor/themes/modern/theme.min.js (100%) rename client/{public => static}/mosaico/vendor/tinymce.min.js (100%) rename client/{public => static}/subscription/form-input-style.css (100%) rename client/{public => static}/subscription/widget.js (100%) create mode 100644 models/links.js create mode 100644 shared/app.js diff --git a/.gitignore b/.gitignore index 47825b2b..b9a299f9 100644 --- a/.gitignore +++ b/.gitignore @@ -15,19 +15,6 @@ dump.rdb # generate POT file every time you want to update your PO file languages/mailtrain.pot -public/mosaico/uploads/* -!public/mosaico/uploads/README.md -public/mosaico/custom/* -!public/mosaico/custom/README.md -public/mosaico/templates/* -!public/mosaico/templates/versafix-1 - -public/grapejs/uploads/* -!public/grapejs/uploads/README.md -public/grapejs/templates/* -!public/grapejs/templates/demo -!public/grapejs/templates/aves - config/production.toml workers/reports/config/production.toml docker-compose.override.yml diff --git a/UPGRADE.md b/UPGRADE.md index 9d16d0dd..4e5b8d8f 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -6,8 +6,8 @@ The migration should almost happen automatically. There are however the followin 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`). - For Mosaico, this means to move folders named by a number from `public/mosaico` to `client/public/mosaico`. + 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/public/mosaico/templates`. +3. Directory for custom Mosaico templates has changed from `public/mosaico/templates` to `client/static/mosaico/templates`. 4. Imports are not migrated. If you have any pending imports, complete them before migration to v2. \ No newline at end of file diff --git a/app-builder.js b/app-builder.js index 2c173562..fbf03ef5 100644 --- a/app-builder.js +++ b/app-builder.js @@ -54,6 +54,9 @@ const index = require('./routes/index'); const interoperableErrors = require('./shared/interoperable-errors'); +const { getTrustedUrl } = require('./lib/urls'); +const { AppType } = require('./shared/app'); + hbs.registerPartials(__dirname + '/views/partials'); hbs.registerPartials(__dirname + '/views/subscription/partials/'); @@ -104,7 +107,8 @@ hbs.registerHelper('flash_messages', function () { // eslint-disable-line prefer handlebarsHelpers.registerHelpers(hbs.handlebars); -function createApp(trusted) { + +function createApp(appType) { const app = express(); function install404Fallback(url) { @@ -171,9 +175,9 @@ function createApp(trusted) { limit: config.www.postSize })); - if (trusted) { + if (appType === AppType.TRUSTED) { passport.setupRegularAuth(app); - } else { + } else if (appType === AppType.SANDBOXED) { app.use(passport.tryAuthByRestrictedAccessToken); } @@ -189,52 +193,6 @@ function createApp(trusted) { next(); }); - /* FIXME - can we remove this??? - app.use((req, res, next) => { - res.locals.flash = req.flash.bind(req); - res.locals.user = req.user; - res.locals.admin = req.user && req.user.id == 1; // FIXME, this should verify the admin privileges and set this accordingly - res.locals.ldap = { - enabled: config.ldap.enabled, - passwordresetlink: config.ldap.passwordresetlink - }; - - let menu = [{ - title: _('Home'), - url: '/', - selected: true - }]; - - res.setSelectedMenu = key => { - menu.forEach(item => { - item.selected = (item.key === key); - }); - }; - - res.locals.menu = menu; - tools.updateMenu(res); - - res.locals.customStyles = config.customstyles || []; - res.locals.customScripts = config.customscripts || []; - - let bodyClasses = []; - if (req.user) { - bodyClasses.push('logged-in user-' + req.user.username); - } - res.locals.bodyClass = bodyClasses.join(' '); - - getSettings(['uaCode', 'shoutout'], (err, configItems) => { - if (err) { - return next(err); - } - Object.keys(configItems).forEach(key => { - res.locals[key] = configItems[key]; - }); - next(); - }); - }); - */ - // Endpoint under /api are authenticated by access token app.all('/api/*', passport.authByAccessToken); @@ -244,62 +202,64 @@ function createApp(trusted) { next(); }); - app.all('/rest/*', (req, res, next) => { req.needsRESTJSONResponse = true; next(); }); - // Initializes the request context to be used for authorization app.use((req, res, next) => { req.context = contextHelpers.getRequestContext(req); next(); }); - - // Regular endpoints - useWith404Fallback('/subscription', subscription); - useWith404Fallback('/files', files); - useWith404Fallback('/mosaico', mosaico.getRouter(trusted)); - - if (config.reports && config.reports.enabled === true) { - useWith404Fallback('/reports', reports); + if (appType === AppType.PUBLIC) { + useWith404Fallback('/subscription', subscription); } + if (appType === AppType.TRUSTED || appType === AppType.SANDBOXED) { + // Regular endpoints + useWith404Fallback('/files', files); + useWith404Fallback('/mosaico', mosaico.getRouter(appType)); - // API endpoints - useWith404Fallback('/api', api); + if (config.reports && config.reports.enabled === true) { + useWith404Fallback('/reports', reports); + } - // REST endpoints - app.use('/rest', namespacesRest); - app.use('/rest', sendConfigurationsRest); - app.use('/rest', usersRest); - app.use('/rest', accountRest); - app.use('/rest', campaignsRest); - app.use('/rest', triggersRest); - app.use('/rest', listsRest); - app.use('/rest', formsRest); - app.use('/rest', fieldsRest); - app.use('/rest', importsRest); - app.use('/rest', importRunsRest); - app.use('/rest', sharesRest); - app.use('/rest', segmentsRest); - app.use('/rest', subscriptionsRest); - app.use('/rest', templatesRest); - app.use('/rest', mosaicoTemplatesRest); - app.use('/rest', blacklistRest); - app.use('/rest', editorsRest); - app.use('/rest', filesRest); - app.use('/rest', settingsRest); - if (config.reports && config.reports.enabled === true) { - app.use('/rest', reportTemplatesRest); - app.use('/rest', reportsRest); + // API endpoints + useWith404Fallback('/api', api); + + // REST endpoints + app.use('/rest', namespacesRest); + app.use('/rest', sendConfigurationsRest); + app.use('/rest', usersRest); + app.use('/rest', accountRest); + app.use('/rest', campaignsRest); + app.use('/rest', triggersRest); + app.use('/rest', listsRest); + app.use('/rest', formsRest); + app.use('/rest', fieldsRest); + app.use('/rest', importsRest); + app.use('/rest', importRunsRest); + app.use('/rest', sharesRest); + app.use('/rest', segmentsRest); + app.use('/rest', subscriptionsRest); + app.use('/rest', templatesRest); + app.use('/rest', mosaicoTemplatesRest); + app.use('/rest', blacklistRest); + app.use('/rest', editorsRest); + app.use('/rest', filesRest); + app.use('/rest', settingsRest); + + if (config.reports && config.reports.enabled === true) { + app.use('/rest', reportTemplatesRest); + app.use('/rest', reportsRest); + } + install404Fallback('/rest'); } - install404Fallback('/rest'); - app.use('/', index.getRouter(trusted)); + app.use('/', index.getRouter(appType)); // Error handlers if (app.get('env') === 'development') { @@ -333,7 +293,7 @@ function createApp(trusted) { } else { if (err instanceof interoperableErrors.NotLoggedInError) { - return res.redirect('/account/login?next=' + encodeURIComponent(req.originalUrl)); + return res.redirect(getTrustedUrl('/account/login?next=' + encodeURIComponent(req.originalUrl))); } else { res.status(err.status || 500); res.render('error', { @@ -378,7 +338,7 @@ function createApp(trusted) { // TODO: Render interoperable errors using a special client that does internationalization of the error message if (err instanceof interoperableErrors.NotLoggedInError) { - return res.redirect('/account/login?next=' + encodeURIComponent(req.originalUrl)); + return res.redirect(getTrustedUrl('/account/login?next=' + encodeURIComponent(req.originalUrl))); } else { res.status(err.status || 500); res.render('error', { @@ -393,6 +353,4 @@ function createApp(trusted) { return app; } -module.exports = { - createApp -}; +module.exports.createApp = createApp; diff --git a/client/src/campaigns/Content.js b/client/src/campaigns/Content.js index af42eddc..c421281a 100644 --- a/client/src/campaigns/Content.js +++ b/client/src/campaigns/Content.js @@ -40,7 +40,6 @@ export default class CustomContent extends Component { const t = props.t; - console.log(props); this.templateTypes = getTemplateTypes(props.t, 'data_sourceCustom_', ResourceType.CAMPAIGN); this.customTemplateTypeOptions = []; diff --git a/client/src/campaigns/helpers.js b/client/src/campaigns/helpers.js index b78cbeb2..f4fd10de 100644 --- a/client/src/campaigns/helpers.js +++ b/client/src/campaigns/helpers.js @@ -29,3 +29,56 @@ export function getCampaignLabels(t) { campaignTypeLabels }; } + +/* FIXME - this is not used at the moment, but it's kept here because it will be probably needed at some later point of time. +export function getDefaultMergeTags(t) { + return [{ + key: 'LINK_UNSUBSCRIBE', + value: t('URL that points to the unsubscribe page') + }, { + key: 'LINK_PREFERENCES', + value: t('URL that points to the preferences page of the subscriber') + }, { + key: 'LINK_BROWSER', + value: t('URL to preview the message in a browser') + }, { + key: 'EMAIL', + value: t('Email address') + }, { + key: 'SUBSCRIPTION_ID', + value: t('Unique ID that identifies the recipient') + }, { + key: 'LIST_ID', + value: t('Unique ID that identifies the list used for this campaign') + }, { + key: 'CAMPAIGN_ID', + value: t('Unique ID that identifies current campaign') + }]; +} + +export function getRSSMergeTags(t) { + return [{ + key: 'RSS_ENTRY', + value: t('content from an RSS entry') + }, { + key: 'RSS_ENTRY_TITLE', + value: t('RSS entry title') + }, { + key: 'RSS_ENTRY_DATE', + value: t('RSS entry date') + }, { + key: 'RSS_ENTRY_LINK', + value: t('RSS entry link') + }, { + key: 'RSS_ENTRY_CONTENT', + value: t('content from an RSS entry') + }, { + key: 'RSS_ENTRY_SUMMARY', + value: t('RSS entry summary') + }, { + key: 'RSS_ENTRY_IMAGE_URL', + value: t('RSS entry image URL') + }]; +} +*/ + diff --git a/client/src/lib/mosaico.js b/client/src/lib/mosaico.js index fada9847..cd4c53f9 100644 --- a/client/src/lib/mosaico.js +++ b/client/src/lib/mosaico.js @@ -70,7 +70,7 @@ export class MosaicoEditor extends Component { return (
- {this.state.fullscreen && } + {this.state.fullscreen && }
{this.props.title}
@@ -142,7 +142,7 @@ export class MosaicoSandbox extends Component { plugins.unshift(vm => { // This is an override of the default paths in Mosaico - vm.logoPath = getTrustedUrl('public/mosaico/img/mosaico32.png'); + vm.logoPath = getTrustedUrl('static/mosaico/img/mosaico32.png'); vm.logoUrl = '#'; }); diff --git a/client/src/lib/urls.js b/client/src/lib/urls.js index d42c112e..4374498a 100644 --- a/client/src/lib/urls.js +++ b/client/src/lib/urls.js @@ -1,6 +1,7 @@ 'use strict'; import {anonymousRestrictedAccessToken} from '../../../shared/urls'; +import {AppType} from '../../../shared/app'; import mailtrainConfig from "mailtrainConfig"; let restrictedAccessToken = anonymousRestrictedAccessToken; @@ -17,25 +18,34 @@ function getSandboxUrl(path) { return mailtrainConfig.sandboxUrlBase + restrictedAccessToken + '/' + (path || ''); } +function getPublicUrl(path) { + return mailtrainConfig.publicUrlBase + (path || ''); +} + function getUrl(path) { - if (mailtrainConfig.trusted) { + if (mailtrainConfig.appType === AppType.TRUSTED) { return getTrustedUrl(path); - } else { + } else if (mailtrainConfig.appType === AppType.SANDBOXED) { return getSandboxUrl(path); + } else if (mailtrainConfig.appType === AppType.PUBLIC) { + return getPublicUrl(path); } } function getBaseDir() { - if (mailtrainConfig.trusted) { + if (mailtrainConfig.appType === AppType.TRUSTED) { return mailtrainConfig.trustedUrlBaseDir; - } else { + } else if (mailtrainConfig.appType === AppType.SANDBOXED) { return mailtrainConfig.sandboxUrlBaseDir + anonymousRestrictedAccessToken; + } else if (mailtrainConfig.appType === AppType.PUBLIC) { + return mailtrainConfig.publicUrlBaseDir; } } export { getTrustedUrl, getSandboxUrl, + getPublicUrl, getUrl, getBaseDir, setRestrictedAccessToken diff --git a/client/src/lists/CUD.js b/client/src/lists/CUD.js index 877cd3da..119e82bd 100644 --- a/client/src/lists/CUD.js +++ b/client/src/lists/CUD.js @@ -52,7 +52,8 @@ export default class CUD extends Component { contact_email: '', homepage: '', unsubscription_mode: UnsubscriptionMode.ONE_STEP, - namespace: mailtrainConfig.user.namespace + namespace: mailtrainConfig.user.namespace, + to_name: '[FIRST_NAME] [LAST_NAME]' }); } } @@ -186,6 +187,7 @@ export default class CUD extends Component { + diff --git a/client/src/lists/subscriptions/List.js b/client/src/lists/subscriptions/List.js index 50fe95df..fe0faa6d 100644 --- a/client/src/lists/subscriptions/List.js +++ b/client/src/lists/subscriptions/List.js @@ -15,7 +15,7 @@ import { import {Icon, Button} from "../../lib/bootstrap-components"; import axios from '../../lib/axios'; import {getFieldTypes, getSubscriptionStatusLabels} from './helpers'; -import {getUrl} from "../../lib/urls"; +import {getUrl, getPublicUrl} from "../../lib/urls"; @translate() @withForm @@ -158,7 +158,7 @@ export default class List extends Component { return (
-