Commit graph

328 commits

Author SHA1 Message Date
Kailash Nadh
481d6ef0a2 Move bundled fonts to a better location. 2022-02-12 13:24:18 +05:30
Kailash Nadh
93366f4e9e Remember last chosen tab on the settings UI.
This commit adds a UI setting that was accidentally lost from an
earlier PR.

It introduces `$utils.setPref()|getPref()` to save arbitrary key/value
preferences in a JSON blob under the app's namespace in localStorage.
2022-02-06 16:12:08 +05:30
Kailash Nadh
0f6a0376da Add accurate realtime message rate counter.
The `rate` field `/api/campaigns/running/stats` returned was computed
based on the total time spent from the start of the campaign to the
current time. This meant that for large campaigns, if there were
pauses or slowdowns in between, the rate would be skewed heavily
making it useless to figure out the current send rate.

This commit introduces a realtime running rate counter in the campaign
manager that returns accurate (running) send rates for the last minute.

The `rate` field in the API now shows the live running rate and a
new `net_rate` field shows the rate from the beginning of the campaign.
2022-02-06 11:38:02 +05:30
Kailash Nadh
02eaa661aa Fix lists test to accommodate new UI yes/no campaign prompts. 2022-02-05 18:51:22 +05:30
Kailash Nadh
251c1ea64f Fix campaign start throwing error when disabling schedule on the UI.
Closes #690
2022-02-04 22:43:42 +05:30
Kailash Nadh
da30d4688e Add subscriber status counts to the lists UI.
- Change `query-lists` query to aggregate the subscriber count by
  status (confirmed, unsubscribed etc.) and expose them under a new
  `subscriber_statuses: {}` field in the `GET /lists` API.
- Display the statuses and counts in the lists table on the UI.

Closes #616
2022-02-03 00:03:31 +05:30
Kailash Nadh
182795ec10 Refactor table stats field set styles. 2022-02-03 00:00:57 +05:30
Kailash Nadh
2614b072f2 Refactor campaign analytics to show unique / non-unique data.
The analytics page showed non-unique counts for views and clicks which
was misleading and source of confusion: #522, #561, #571, #676, #680
This commit changes this behaviour to pull unique views and clicks when
individual subscriber tracking is turned on in settings, and non-unique
counts when it is turned off (as `subscriber_id` in `campaign_views`
and `link_clicks` will be NULL, rendering unique queries dysfunctional).

This commit changes the stats SQL queries to use string interpolation
to either to SELECT `*` or `DISTINCT subscriber_id` on app boot based
on the setting in the DB. This involves significant changes to how
queries are read and prepared on init.

- Refactor `initQueries()` to `readQueries()` and `prepareQueries()`.
- Read queries first before preparing.
- Load settings from the DB using the read settings query.
- Prepare queries next. Use the privacy setting from the DB to apply
  string interpolation to the analytics queries to pull
  unique/non-unique before preparing the queries.

On the UI:
- Show a note on the analytics page about unique/non-unique counts.
- Hide the % donut charts on the analytics page in non-unique mode.

Closes #676, closes #680
2022-02-01 23:40:03 +05:30
Kailash Nadh
636db204fc Fix editor HTML beautification in incorrectly adding breaks to links.
Closes #655
2022-01-30 21:43:23 +05:30
Kailash Nadh
64d2c5aeb9 Add support for custom public S3 URLs. Closes #505. 2022-01-15 21:20:32 +05:30
Kailash Nadh
c6d5d862e2 Warn of unsaved changes on the campaign editor on navigation. Closes #551. 2022-01-15 17:20:22 +05:30
Kailash Nadh
4c09cc1fc3 Auto-focus TinyMCE editor area on load. 2022-01-15 16:46:38 +05:30
Kailash Nadh
04ea18c87d Refactor opt-in confirmation behaviour in subscriber update API.
- Updating a subscriber no longer triggers an opt-in confirmation mail
  as `POST /api/subscribers/:id/optin` allows that.
- A "Send opt-in confirmation" option is added to the subscriber
  update UI.

Closes #656.
2022-01-15 15:50:13 +05:30
Kailash Nadh
c95427e299 Merge branch 'master' of github.com:knadh/listmonk 2022-01-15 12:59:35 +05:30
dependabot[bot]
a314eb5885
Bump follow-redirects from 1.13.1 to 1.14.7 in /frontend
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.13.1 to 1.14.7.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.13.1...v1.14.7)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-14 14:12:19 +00:00
Kailash Nadh
e62dc24576 Re-order SMTP auth protocols in the settings UI by popularity. 2022-01-06 23:14:36 +05:30
Kailash Nadh
2f56057fc3 Close burger 'menu' when clicking items in mobile view. 2022-01-05 20:20:55 +05:30
Joe Paul
4c48c3240b fix(frontend): Persist messenger selection 2022-01-05 11:41:29 +05:30
Kailash Nadh
583dab4bc6 Add support for per-campaign custom headers.
- Add new `headers[]` column to the campain table.
- Add new headers box to the campaign UI that takes a JSON array of
  custom headers like the headers on the SMTP settings UI.
- Headers are added to e-mails and messenger postback webhooks.
- Add cypress tests.

Closes #514.
2022-01-04 22:27:40 +05:30
Kailash Nadh
9e9ea0ef15 Refactor automatic camel casing of API response fields.
- Remove `humps` lib dependency with a new util function.
- Replace hacky way of excluding certain fields in responses with
  a proper key filtering mechanism.
2022-01-04 22:17:05 +05:30
Kailash Nadh
dd061f56d4 Add support for direct SSL/TLS (non-STARTTLS) SMTP connections.
- Add support for TLS in `smtppool` (v0.4.0) and upgrade the lib.
- Change `tls_enabled: bool` in the settings table to string
  `tls_type: STARTTLS|TLS|none` and on the settings UI.
- Add DB migrations and schema changes to apply the field change.

Closes #504.
2022-01-03 19:28:36 +05:30
Kailash Nadh
b48a15cfa3 Fix incorrect 'nice date' formatting. Closes #635. 2021-12-27 18:55:13 +05:30
Kailash Nadh
e982e6bb25 Don't warn on format change when campaign content is empty. Closes #634. 2021-12-27 18:41:25 +05:30
Kailash Nadh
c1c2b67503 Add a link to more language packs to the language settings UI. 2021-12-18 21:50:17 +05:30
Kailash Nadh
fabe06e339 Add support for custom CSS/JS in settings for admin and public pages.
This feature was originally authored by @sweetppro in PR #438.
However, since the PR ended up in an unclean state with
multiple master merges (instead of rebase) from the upstream, there are
several commits that are out of order and can can no longer be be
squashed for a clean feature merge.

This commit aggregates the changes from the original PR and applies the
following fixes on top of it.

- Add custom admin JS box to appearance UI.
- Refactor i18n language strings.
- Add handlers and migrations for the new `appearance.admin.custom_js`
  field.
- Fix migration version to `v2.1.0`
- Load custom appearance CSS/JS bytes into global constants during boot
  instead of making a DB call on every request.
- Fix and canonicalize URIs from `/api/custom*` to `/public/*.css`
  and `/admin/*.css`. Add proxy paths to yarn proxy config.
- Remove redundant HTTP handlers for different custom appearance files
  and refactor into a single handler `serveCustomApperance()`
- Fix content-type and UTF8 encoding headers for different file types.
- Fix incorrect registration of public facing custom CSS/JS handlers
  in the authenticated admin URI group.
- Fix merge conflicts in `Settings.vue`.
- Minor HTML and style fixes.
- Remove the `AppearanceEditor` component and use the existing
  `HTMLEditor` component instead.
- Add `language` prop to the `HTMLEditor` component.

Co-authored-by: SweetPPro <sweetppro@users.noreply.github.com>
2021-12-18 15:38:42 +05:30
Kailash Nadh
ca128df49a Add support for searching lists + search UI. Closes #618. 2021-12-09 21:34:38 +05:30
Kailash Nadh
e9709e54ee Upgrade labstack/echo webserver to major version v4.
- echo is now on v4 with major changes including a few breaking changes
- bind() behaviour is now strict. JSON / form etc. unmarshalling of
  request data need appropriate `json`, `form` tags. Missing tags for
  the public subscription page is added in this commit.
- This also closes #602.
2021-12-09 20:51:07 +05:30
Kailash Nadh
02c1408f5c Fix broken Cypress UI tests. 2021-12-09 20:47:52 +05:30
Kailash Nadh
4cb5eb782f Fix settings form input validation.
- Fix settings UI form submit button.
- Validate upload URI. Closes #621.
2021-12-09 19:30:15 +05:30
Kailash Nadh
3386de40c7 Fix GET /subscribers calls not accepting multiple list_ids.
Closes #585
2021-11-29 20:38:57 +05:30
SweetPPro
35ac1ccdf5
Embed Inter font files and remove Google font links. Closes #547.
Only Woff2 fonts have been added, from here (utliising all charsets):
https://google-webfonts-helper.herokuapp.com/fonts/inter?subsets=cyrillic,cyrillic-ext,greek,greek-ext,latin,latin-ext,vietnamese
2021-11-10 20:43:42 +05:30
SweetPPro
46f13bf9cd
Fix broken logout link in desktop nav view (#580) 2021-11-10 20:31:34 +05:30
SweetPPro
7b9ba2efbc
improved mobile navbar/sidebar (#574)
* improved mobile navbar/sidebar

Sidebar is hidden and all menu items moved to hamburger menu on mobile devices

* improvements to menu rendering

-removed redundant code
-fixed an issue with emitting data to App.vue

* Update Navigation.vue

fixed linting errors

* Add minor refactors to the mobile menu PR.

- Fix indentation and line lengths.
- Simplify prop definitions in the Navigation component.
- Remove redundant computed methods and use prop variables directly in
  the Navigation compontent.
- Simplify menu rendering logic by:
  removing isSidebar, showLogout and using simpler v-if / else
  in the parent instead of the Navigation component.

* Update App.vue

removed orphaned isSideBar Boolean

Co-authored-by: Kailash Nadh <kailash@nadh.in>
2021-11-10 00:26:34 +05:30
Kailash Nadh
19e0ea5f6c Fix scheduling params being ignored on the create campaign UI. Fixes #516. 2021-11-07 09:17:54 +05:30
dependabot[bot]
2819ca86cb
Bump tinymce from 5.9.2 to 5.10.0 in /frontend
Bumps [tinymce](https://github.com/tinymce/tinymce/tree/HEAD/modules/tinymce) from 5.9.2 to 5.10.0.
- [Release notes](https://github.com/tinymce/tinymce/releases)
- [Changelog](https://github.com/tinymce/tinymce/blob/develop/modules/tinymce/CHANGELOG.md)
- [Commits](https://github.com/tinymce/tinymce/commits/5.10.0/modules/tinymce)

---
updated-dependencies:
- dependency-name: tinymce
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-02 15:53:03 +00:00
Kailash Nadh
5bfbe15c24 Fix campaign template preview not working without saving. Closes #553. 2021-10-31 11:49:43 +05:30
Kailash Nadh
f39ee4e783 Fix TinyMce campaign editor toolbar to the top on scroll. Closes #549. 2021-10-28 22:21:44 +05:30
Kailash Nadh
1c8ac0f866 Add 'preconfirm subscription' option to subscriber UI. Closes #526. 2021-10-27 20:46:37 +05:30
Kailash Nadh
ed8d68bd54 Add anti-bot nonce field to generated forms. Closes #541. 2021-10-27 20:10:29 +05:30
Kailash Nadh
bc9252f410 Autogenerate subscriber name from e-mail on the UI if it's empty. Closes #525. 2021-10-20 21:54:22 +05:30
Kailash Nadh
0f896c1b6e Fix email field in generated form HTML. Closes #529. 2021-10-20 21:38:50 +05:30
Kailash Nadh
a01759756e Fix strings on the UI missed in i18n translation. Closes #506. 2021-10-16 12:43:03 +05:30
Kailash Nadh
b46ab6d3a9 Fallback to default S3 URL on empty media upload URL in settings. 2021-10-04 22:20:24 +05:30
Kailash Nadh
bf2703bc60 Fix status tag flashing on campaign edit UI load. 2021-09-27 23:20:36 +05:30
Kailash Nadh
93c7c8727c Replace TinyMCE source editor with Flask HTML editor. 2021-09-27 23:11:19 +05:30
Kailash Nadh
cd639e89c4 Add link to bounces docs in settings UI. 2021-09-27 21:20:17 +05:30
Kailash Nadh
1f31218639 Add a 404 page to the admin UI. 2021-09-27 20:53:30 +05:30
Kailash Nadh
30f9f030cd Replace TinyMCE UI pt font sizes with px. 2021-09-27 17:36:02 +05:30
Kailash Nadh
98ed4fb384 Add a landing login page and a logout option.
BasicAuth without an explicit landing page or a logout option has
sometimes been confusing to users. This commit adds a static
landing page on / with a login link and a logout option in the admin
that "logs out" BasicAuth session by posting invalid credentials to
the server to obtain a 401.
2021-09-26 23:42:57 +05:30
Kailash Nadh
9d2bc9c41d Add HTML syntax highlighted editing to the template editor.
- Refactor codeflask HTML editor into a standalone html-editor
  component.
- Replace the plaintext box in the template editor with html-editor.
- Replace codeflask in the campaign editor with the new html-editor.
- Refactor templates Cypress tests to test the new editor.
- Refactor campaigns Cypress tests to test the new editor and also
  test switching between different editors and content formats.
2021-09-26 21:56:53 +05:30