diff --git a/cmd/install.go b/cmd/install.go index f2080ff2..640bfb9c 100644 --- a/cmd/install.go +++ b/cmd/install.go @@ -193,7 +193,7 @@ func installTemplates(q *models.Queries) (int, int) { } var campTplID int - if err := q.CreateTemplate.Get(&campTplID, "Default campaign template", models.TemplateTypeCampaign, "", campTpl.ReadBytes()); err != nil { + if err := q.CreateTemplate.Get(&campTplID, "Default campaign template", models.TemplateTypeCampaign, "", campTpl.ReadBytes(), nil); err != nil { lo.Fatalf("error creating default campaign template: %v", err) } if _, err := q.SetDefaultTemplate.Exec(campTplID); err != nil { @@ -207,7 +207,7 @@ func installTemplates(q *models.Queries) (int, int) { } var archiveTplID int - if err := q.CreateTemplate.Get(&archiveTplID, "Default archive template", models.TemplateTypeCampaign, "", archiveTpl.ReadBytes()); err != nil { + if err := q.CreateTemplate.Get(&archiveTplID, "Default archive template", models.TemplateTypeCampaign, "", archiveTpl.ReadBytes(), nil); err != nil { lo.Fatalf("error creating default campaign template: %v", err) } @@ -217,7 +217,7 @@ func installTemplates(q *models.Queries) (int, int) { lo.Fatalf("error reading default e-mail template: %v", err) } - if _, err := q.CreateTemplate.Exec("Sample transactional template", models.TemplateTypeTx, "Welcome {{ .Subscriber.Name }}", txTpl.ReadBytes()); err != nil { + if _, err := q.CreateTemplate.Exec("Sample transactional template", models.TemplateTypeTx, "Welcome {{ .Subscriber.Name }}", txTpl.ReadBytes(), nil); err != nil { lo.Fatalf("error creating sample transactional template: %v", err) } @@ -252,6 +252,7 @@ func installCampaign(campTplID, archiveTplID int, q *models.Queries) { archiveTplID, `{"name": "Subscriber"}`, nil, + nil, ); err != nil { lo.Fatalf("error creating sample campaign: %v", err) } diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js index 54e014fd..21ad5ca9 100644 --- a/frontend/.eslintrc.js +++ b/frontend/.eslintrc.js @@ -28,4 +28,5 @@ module.exports = { comments: 200, }], }, + ignorePatterns: ['src/email-builder.js'], }; diff --git a/frontend/package.json b/frontend/package.json index 3a119c01..c9a7c256 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -17,6 +17,7 @@ "chart.js": "^4.4.1", "codeflask": "^1.4.1", "dayjs": "^1.11.10", + "indent.js": "^0.3.5", "js-beautify": "^1.15.1", "prismjs": "^1.30.0", "qs": "^6.10.1", @@ -30,6 +31,7 @@ "vuex": "^3.6.2" }, "devDependencies": { + "@types/js-beautify": "^1.14.3", "@vitejs/plugin-vue2": "^2.3.1", "@vue/eslint-config-airbnb": "^7.0.1", "cypress": "13.15.0", diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 691a7ee0..27169ace 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -53,8 +53,7 @@
-
+
{{ $t('settings.needsRestart') }} — @@ -188,6 +187,14 @@ export default Vue.extend({ computed: { ...mapState(['serverConfig', 'profile']), + isGlobalNotices() { + return (this.serverConfig.needs_restart + || this.serverConfig.has_legacy_user + || (this.serverConfig.update + && this.serverConfig.update.messages + && this.serverConfig.update.messages.length > 0)); + }, + version() { return import.meta.env.VUE_APP_VERSION; }, diff --git a/frontend/src/assets/style.scss b/frontend/src/assets/style.scss index 0bcd02f9..a835d273 100644 --- a/frontend/src/assets/style.scss +++ b/frontend/src/assets/style.scss @@ -305,23 +305,21 @@ body.is-noscroll { border-radius: 2px; } -.plain-editor textarea { - height: 65vh; -} - .alt-body textarea { height: 30vh; } - .editor { margin-bottom: 30px; +} +.richtext-editor { .tox-tinymce { + height: 100%; box-shadow: 2px 2px 0 #f3f3f3; border: 1px solid #e6e6e6; border-radius: 3px; - + .tox-toolbar__primary { border-color: #e6e6e6 !important; } @@ -336,10 +334,8 @@ body.is-noscroll { .tox-tinymce--toolbar-sticky-on .tox-editor-header { padding-top: 48px !important; } - } - .tox.tox-silver-sink { z-index: 850; @@ -647,7 +643,7 @@ body.is-noscroll { border-radius: 30px !important; border: 0; padding: 0 20px !important; - + &.is-small { font-size: 0.65rem; background: $white-ter; @@ -655,7 +651,7 @@ body.is-noscroll { padding: 3px 5px; min-width: auto !important; } - + &:not(body) { background-color: #eee; font-size: 0.85em; @@ -676,7 +672,7 @@ body.is-noscroll { color: $green; background: #dcfce7; } - &.blocklisted, &.cancelled, &.status-unsubscribed { + &.blocklisted, &.cancelled, &.status-unsubscribed, &.campaign_visual { $color: $red; color: $color; background: #fff1f0; diff --git a/frontend/src/components/CampaignPreview.vue b/frontend/src/components/CampaignPreview.vue index 954621c7..7426420b 100644 --- a/frontend/src/components/CampaignPreview.vue +++ b/frontend/src/components/CampaignPreview.vue @@ -9,14 +9,14 @@