0
0
mirror of https://github.com/wagtail/wagtail.git synced 2024-11-29 09:33:54 +01:00
Commit Graph

1126 Commits

Author SHA1 Message Date
jacobtoppm
51de90fc81 Fix FieldBlocks ending up with a null annotationTemplateNode and making commenting impossible if they initialise pre-CommentPanel
- fixes #9035
2022-08-25 06:45:40 +10:00
Steven Steinwand
700d8fde07 Simplify css selectors 2022-08-24 13:50:20 +01:00
Steven Steinwand
1c1dc8170e Format css 2022-08-24 13:50:20 +01:00
Steven Steinwand
e27e0b8bf4 Hide anchors and toggles for page titles from screen readers 2022-08-24 13:50:20 +01:00
PaarthAgarwal
4e747326fa fix formatting issues with modal header
- formatting fix for the header on small devices
- ensure the padding left is not set so that the outside is fully clickable
- fixed close button colours
- fix alignment and heights of smaller breakpoint modal header
- fixes #9053
- fixes #9014
2022-08-22 16:52:16 +10:00
Steven Steinwand
d1167d8446 Add pseudo element to increase hoverable area for the drafttail field and the add block trigger button.
- Change variables for sizing
- Move hover extended styling to BlockToolbar
- fixes #9024
2022-08-21 09:13:17 +10:00
Sage Abdullah
32b5b992b3 Clear existing preview data on initial load of the create/edit view
This prevents stale preview data from being initially shown after reloading the PreviewOnCreate view
- fixes #9058
2022-08-21 08:25:34 +10:00
Sage Abdullah
b20a64f13b Fix live preview error banner overlapping with preview mode selector 2022-08-18 12:39:46 +01:00
Matt Westcott
323dfe49e9 Fix error insertion logic for modal upload forms
Fixes #9019

* The `[data-field]` element (not the input) should be queried to find the `[data-field-errors]` element
* The code should not assume the presence of an icon element
2022-08-18 09:32:21 +01:00
Matt Westcott
cc4675aa5e Use correct classnames for showing/hiding edit button on chooser widget
Fixes #9008
2022-08-17 07:50:29 +10:00
PaarthAgarwal
011099dd45 fixed console error for breadcrumbs 2022-08-16 07:35:23 +10:00
Matt Westcott
8564383ef5 remove stray console-log from page-editor.js 2022-08-16 06:13:30 +10:00
Thibaud Colas
ca7f23d176
Update InlinePanel and StreamField styles for new designs (#8983) 2022-08-12 13:17:40 +01:00
LB (Ben Johnston)
6a11ae711a
Only use hidden until-found in panels if browsers supports it (#8962) 2022-08-12 12:19:48 +01:00
Matt Westcott
267cac0fe1 Remove outdated fixme comment and redundant results_only parameter 2022-08-12 17:35:42 +10:00
Thibaud Colas
cee3e6d28b Add target styles for block toolbar 2022-08-10 15:15:20 +10:00
Thibaud Colas
5014c2ea1c Move rich text comments from block toolbar to inline 2022-08-10 15:15:20 +10:00
Thibaud Colas
dca2294293 Fully move rich text split from meta toolbar to block toolbar 2022-08-10 15:15:20 +10:00
Thibaud Colas
53dded86c8 Update base Draftail/TextField form styles to match designs 2022-08-10 15:15:20 +10:00
Thibaud Colas
c620e58c86 Fix keyboard focus not showing the chooser‘s actions 2022-08-10 15:08:57 +10:00
Thibaud Colas
21b5ad5ce9 Update chooser styles across all types 2022-08-10 15:08:57 +10:00
Matt Westcott
90e91e0e4a Consistently use edit_url in the state representation of choosers
Previously we were using edit_link in dicts handled by JS, and edit_url in dicts handled by Python, meaning that ChooserBlock.get_form_state had to rewrite it
2022-08-10 14:53:41 +10:00
Matt Westcott
0077183682 Add a base class for Telepath adapters for chooser widgets 2022-08-10 14:53:41 +10:00
Matt Westcott
d4c146ad01 Add a base class for chooser factories 2022-08-10 14:53:41 +10:00
Sage Abdullah
f322e9d868 Improve Snippets listing styles 2022-08-09 13:01:50 +01:00
Sage Abdullah
9476f677fc Enforce bulk action checkbox column to be 50px 2022-08-09 13:01:50 +01:00
Akash-Kumar-Sen
46bb760319 Ensure page explorer header item aligns with toggle on sm device
- fixes #8939
2022-08-09 21:29:20 +10:00
Akash Kumar Sen
71dfb4090b fix overlapping of report filters/table & form submissions
- as of 3.0 - report filters would overflow the viewport in Wagtail
- fix layout issue with form submission lists introduced with filtering changes
- remove invalid css grid-column-start (unused)
- adopt theme variables for all main spacing instead of hard-coded em/rem/px values
- fixes #8929
2022-08-08 22:05:01 +10:00
anujaraj
3576e27ab0 added border to tooltip dropdown for high contrast & fix arrow
- fixes #8830
2022-08-06 23:07:01 +10:00
LB Johnston
573da5d307 login/password form - styling fix for #8925 2022-08-06 21:37:42 +10:00
PaarthAgarwal
d2529cad92 Restyling all log in & password reset flow pages
- add id=main to all login flow form templates for non-JS skip link usage
- remove inline script to focus on username field in login form
- adopt a consistent DOM layout for all log in & password reset flow forms
- ensure h1 is at the top of the DOM in all forms
- add wagtail logo to sign in form and document the ability to override it
- fixes #2309
2022-08-06 19:06:19 +10:00
Thibaud Colas
eac5e0bc2c Finish re-implementing form styles based on design feedback & code review
Co-authored-by: LB Johnston <mail@lb.ee>
2022-08-05 10:36:52 +02:00
Thibaud Colas
3d96e7fbe7 Implement collapsible and linkable panels
Co-authored-by: LB Johnston <mail@lb.ee>
2022-08-05 10:36:52 +02:00
Thibaud Colas
af9b16e93d Re-implement base form field styles based on new page editor designs
Co-authored-by: LB Johnston <mail@lb.ee>
2022-08-05 10:36:52 +02:00
Matt Westcott
6a881e0a5d Hide 'Edit this item' link from chooser widget if edit_url is not supplied 2022-08-05 08:34:14 +10:00
LB Johnston
3be9e7fb9e bulk-actions - fix issue where non-number object ids would fail
- add bulk actions baseline tests
- move to includes/bulk-actions
- fix linting issues
- fixes #8563
2022-08-05 07:41:15 +10:00
LB Johnston
c6dc70ad62 move bulk-actions
- intentionally a separate commit to keep file history in git
2022-08-05 07:41:15 +10:00
LB Johnston
4abf011849 add range util 2022-08-05 07:41:15 +10:00
anujaraj
2d8aa123c0
Added a forced-color media query to disabled buttons in high contrast (#8909)
* added a forced-color media query to allow distinct visibiity of disabled buttons

* Also set disabled button border color to GrayText in forced-colors mode

The `button` element was not correctly picking up the same border color as the text, for some reason. This commit fixes that.
2022-08-04 12:55:00 -04:00
Thibaud Colas
8a7e0884d7 Finish implementing rich text max length with identical client & server count 2022-08-04 16:59:31 +02:00
Thibaud Colas
405af5d451 Skip two Axe tests currently timing out 2022-08-04 06:48:41 +10:00
Jacob Topp-Mugglestone
0cdb9d8915
Implement combined rich text split and block insertion (#8923)
Co-authored-by: Thibaud Colas <thibaudcolas@gmail.com>
2022-08-02 18:31:32 +01:00
Matt Westcott
e83f3f6bde Make 'no images' prompt consistent with documents, with "upload one now" prompt 2022-08-02 19:28:49 +02:00
Matt Westcott
79cd029e80 Use data-chooser-modal-search-filter on collection filter mixin
So that document and image choosers don't have to identify it by ID in their JS
2022-08-02 19:28:49 +02:00
Matt Westcott
3caa98abbe Change CSS selectors to the generic defaults 2022-08-02 19:28:49 +02:00
Matt Westcott
90454c75df Make ImageChooserModalOnloadHandlerFactory inherit from base implementation 2022-08-02 19:28:49 +02:00
Matt Westcott
b2fa61d33b Convert image chooser modal onload handlers into a class 2022-08-02 19:28:49 +02:00
Matt Westcott
0b752a81ac Move validation into the base chooser modal implementation 2022-08-02 19:28:49 +02:00
Matt Westcott
49720cc08f Update form validation code to check all required fields and eliminate jquery 2022-08-02 19:28:49 +02:00
Matt Westcott
21d172200c Use CreateViewMixin for image upload view 2022-08-02 19:28:49 +02:00
Matt Westcott
e831d8e6cc Use standard modal step names (choose / chosen) for image chooser 2022-08-02 19:28:49 +02:00
Matt Westcott
3aa69c5e31 Use the generic creation_form.html for the image chooser 2022-08-02 19:28:49 +02:00
Matt Westcott
be368d1361 Make images chooser.html inherit from generic template
Remove the `w-tabs__wrapper` element from the generic template, as it isn't needed (its primary purpose is to handle the tab list overflowing/scrolling) and adds unwanted bottom margin.
2022-08-02 19:28:49 +02:00
Matt Westcott
f861bf991e Move collection filter into filter form 2022-08-02 19:28:49 +02:00
Matt Westcott
112f2ea7da Fix focus() to focus the correct button in the 'chosen' vs 'unchosen' divs according to the widget state 2022-08-02 16:41:46 +02:00
Matt Westcott
f91daa7f3e Use textContent rather than innerText for accessing title element
innerText is unimplemented by jest / jsdom, as per https://github.com/jsdom/jsdom/issues/1245
2022-08-02 16:41:45 +02:00
Matt Westcott
d1f21993dc Deprecate createPageChooser 2022-08-02 16:38:28 +02:00
Matt Westcott
e21e1d6644 Correctly handle edit link element being omitted from chooser widget 2022-08-02 16:37:24 +02:00
Matt Westcott
7d2f1d4286 Make PageChooser widget inherit from base Chooser 2022-08-02 16:35:59 +02:00
Matt Westcott
f048970b73 make the 'edit_link' key name customisable 2022-08-02 16:35:58 +02:00
Matt Westcott
edb40be2a0 Support urlParams when calling ModalWorkflow from chooser widgets 2022-08-02 16:32:49 +02:00
Matt Westcott
dc4deae871 eliminate jQuery from PageChooser 2022-08-02 16:32:49 +02:00
Matt Westcott
3a7c302228 Refactor a PageChooser class out of createPageChooser 2022-08-02 16:32:49 +02:00
LB Johnston
22e904fb01 Refine dashboard design - summary panels
* Update colours and icons for summary panels
* add h1 id for aria referencing
* rework layout to use flex box & not floats
* move summary styles to own component scss file
* now functions correctly in RTL mode
2022-07-31 04:11:07 +10:00
PaarthAgarwal
684c173729 Refine dashboard design - header
* Updated header - updated avatar alignment, use theme variables
* pulled header_description out of h1, added info of header_description
* #8818
2022-07-31 04:11:07 +10:00
Scott Cranfill
f72aec9b61 Ensure consistent sidebar icon position whether expanded or collapsed
Adding vertical margin gives them same height when collapsed as the text with line-height when expanded.
2022-07-30 17:22:49 +10:00
PaarthAgarwal
2a751e9b00 updated help block colours & link styles
- resolves #8896
2022-07-26 22:01:12 +10:00
Matt Westcott
157f7674bc Eliminate the custom response name 'imageChosen' 2022-07-23 11:33:01 +10:00
Matt Westcott
dec7cdd9bf Deprecate createImageChooser 2022-07-23 11:33:01 +10:00
Matt Westcott
89d89334ca Make ImageChooser a subclass of Chooser
Need to split out a Chooser.initHTMLElements method so that we can set up this.previewImage before using it in getStateFromHTML.
2022-07-23 11:33:01 +10:00
Matt Westcott
20d941cfbf eliminate jquery from ImageChooser 2022-07-23 11:33:01 +10:00
Matt Westcott
57562c0f3a Refactor an ImageChooser class out of createImageChooser
Use the client/src/components/ChooserWidget Chooser class as a guide, but don't copy code from there (so that any image-specific customisations don't get lost in translation)
2022-07-23 11:33:01 +10:00
Matt Westcott
870b1df5e7 Rename getStateFromHtml to getStateFromHTML
because that matches things like innerHTML, and it'll be annoying to change once it's used in the wild
2022-07-23 11:11:08 +10:00
Matt Westcott
6dba0cf447 Eliminate the custom response name 'documentChosen' 2022-07-23 11:11:08 +10:00
Matt Westcott
61d45e3150 Deprecate createDocumentChooser 2022-07-23 11:11:08 +10:00
Matt Westcott
049bb340c9 Make DocumentChooser a subclass of Chooser
Remove pretty much the entire implementation because it's identical :-)
2022-07-23 11:11:08 +10:00
Matt Westcott
b87585d044 eliminate jquery from DocumentChooser 2022-07-23 11:11:08 +10:00
Matt Westcott
96c92d4a68 Refactor a DocumentChooser class out of createDocumentChooser
Use the client/src/components/ChooserWidget Chooser class as a guide, but don't copy code from there (so that any snippet-specific customisations don't get lost in translation)
2022-07-23 11:11:08 +10:00
Sage Abdullah
dc525f56ae Extract filters styles and template from report to its own component 2022-07-21 09:40:05 +01:00
Sage Abdullah
5a957a629a Retain other query params in header search behaviour 2022-07-21 09:40:05 +01:00
anujaraj
10afd9d7ed
Add a border around modal dialogs so they can be identified in forced colors mode. Fixes #8833 (#8874) 2022-07-20 21:53:41 +01:00
anujaraj
df50d8a1a4
Add bottom border to messages. Fixes #8836 (#8875)
Co-authored-by: Thibaud Colas <thibaudcolas@gmail.com>
2022-07-20 21:34:23 +01:00
Thibaud Colas
624ca4b7cc Add missing grey-150 and teal-75 2022-07-20 12:08:47 +01:00
Thibaud Colas
c87628758c Update documentation for custom admin colours, with live example
Co-authored-by: Scott Cranfill <scott@scottcranfill.com>
2022-07-20 12:08:47 +01:00
Thibaud Colas
5c362bf831 Refactor all stylesheets to use CSS variables
Co-authored-by: Scott Cranfill <scott@scottcranfill.com>
2022-07-20 12:08:47 +01:00
Thibaud Colas
758a40d650 Remove now-unneeded switch variant 2022-07-20 12:08:47 +01:00
Thibaud Colas
d43f5d7e77 Set up separate Sass-based color definitions for userbar 2022-07-20 12:08:47 +01:00
Thibaud Colas
73ce1b6f8e Remove now-unused color variables styles 2022-07-20 12:08:47 +01:00
Thibaud Colas
8f96a5669d Switch Tailwind color theme to use customisable CSS variables
Co-authored-by: Scott Cranfill <scott@scottcranfill.com>
2022-07-20 12:08:47 +01:00
PaarthAgarwal
c404acb10d cleanup page listing styles
- fixes #8867
- relates to PR #8792
2022-07-20 16:27:19 +10:00
Dolidodzik
b131b4813e replace latin abbreviations with english phrases & updated docs guidelines
- added sub-section to language part of general_guidelines.md
- fixes #8860
2022-07-20 16:11:38 +10:00
anujaraj
b3768a1145 Contrast themes – Update help-block styles
- Ensure help blocks show more appropriately in Windows High Contrast Mode with less reliance on communication via colour alone
- fixes #8817
- added dashed-dotted borders styles and removed forced-colors-adjust:none properties to/from help boxes
2022-07-20 15:47:11 +10:00
Coen van der Kamp
1b9628f06c Add styling for Django 4 div-based radio select markup
- fixes #8869
2022-07-20 15:41:45 +10:00
PaarthAgarwal
0ed07c66db adopted shared header for form submission page
- relates to #8539
- fixes #3759
- fixes #3236
- rename index_submissions to submissions_index (aligns with naming of all other index views)
2022-07-19 22:00:54 +10:00
Sage Abdullah
de53c7b22d Reintroduce .form-side style edits from preview side panel 2022-07-19 06:46:11 +01:00
Sage Abdullah
c942096ab1 Remove side panel init code in page-editor.js 2022-07-19 06:46:11 +01:00
Paarth Agarwal
35b5ed350a
Adopt slim header in page listing views (#8792)
Co-authored-by: Thibaud Colas <thibaudcolas@gmail.com>
2022-07-18 18:28:51 +01:00
sag᠎e
0693eed245
Use new modal dialog component for privacy settings modal. Fix #8478 (#8847)
Co-authored-by: Thibaud Colas <thibaudcolas@gmail.com>
2022-07-18 10:39:50 +01:00
Paarth Agarwal
d4b37357ab
Adopted shared header for redirects listing view (#8849)
Co-authored-by: Thibaud Colas <thibaudcolas@gmail.com>
2022-07-15 22:35:11 +01:00
anujaraj
8daf1554ae
Display the correct color for icons in forced colors mode. Fix #8816 (#8852)
Co-authored-by: Thibaud Colas <thibaudcolas@gmail.com>
2022-07-15 15:41:59 +01:00
Paarth Agarwal
e10648ffc2
Display data for Twitter embed blocks (#8167)
Co-authored-by: Iman Syed <52247241+imansyed000@users.noreply.github.com>
Co-authored-by: Thibaud Colas <thibaudcolas@gmail.com>
2022-07-15 14:38:03 +01:00
sag᠎e
5ee5acb7ce
Introduce a new auto-updating preview panel inside the page editor (#8671)
Co-authored-by: Thibaud Colas <thibaudcolas@gmail.com>
2022-07-14 13:59:05 +01:00
Paarth Agarwal
6a6cb880cf
Fix typo in header icon class name (#8831) 2022-07-13 06:53:30 +01:00
Thibaud Colas
27ff5bfeaf
Remove button-group from ModelAdmin InspectView footer actions (#8832) 2022-07-13 03:11:41 +01:00
Thibaud Colas
b070ce1cd3
Add new Draftail toolbars and command palette, with new styles (#8806) 2022-07-13 01:35:22 +01:00
Thibaud Colas
22cf8c240d Implement Draftail character count / max length component in meta toolbar 2022-07-11 20:35:27 +01:00
Thibaud Colas
0c4c2ff374 Implement link copy-paste processing in Draftail 2022-07-11 20:35:27 +01:00
Thibaud Colas
d30eec40a8 Update to Draftail v2 alpha 2022-07-11 20:35:27 +01:00
Shohan
7286c530e9
Snippets bulk actions (#8574) 2022-07-10 11:42:38 +01:00
anujaraj
3cb9b70d12
Make checkboxes visible in forced colors mode. Fix #8334 (#8718)
Co-authored-by: Thibaud Colas <thibaudcolas@gmail.com>
2022-07-10 02:05:07 +01:00
anujaraj
3f0a648181
Make progress bars’ progress visible in forced colors mode (#8719)
Co-authored-by: Thibaud Colas <thibaudcolas@gmail.com>
2022-07-10 00:18:39 +01:00
LB Johnston
d57021e1cc clean up eslint for test files
- disable general rules to make writing tests simpler
2022-07-06 19:28:25 +10:00
LB Johnston
b66d2232d0 remove needless stylelint disables 2022-07-06 19:23:38 +10:00
LB Johnston
220fedaec9 cleanup - add noop function for common usecase
- this avoids the need to add ignoring where used legitimately
2022-07-06 19:23:14 +10:00
LB Johnston
510a6bf350 utils/text - move cleanForSlug into same file & add tests/jsdoc 2022-07-06 19:22:04 +10:00
LB Johnston
0dfa39d3c5 eslint - remove react/jsx-no-useless-fragment ignoring & fix 2022-07-06 19:21:35 +10:00
LB Johnston
441a32fb22 eslint - remove react/jsx-curly-brace-presence ignoring & format 2022-07-06 19:21:35 +10:00
LB Johnston
14c4bcff68 eslint - remove anchor-is-valid ignoring & fix 2022-07-06 19:21:35 +10:00
LB Johnston
8e13985bc0 eslint - remove jsx-a11y/alt-text ignoring & fix 2022-07-06 19:21:35 +10:00
PaarthAgarwal
79a212b4b5 added prefix w- before header classes
- refine existing scss to use classes & remove unused scss
2022-07-06 19:13:19 +10:00
LB Johnston
cff9aac514 remove commented out css 2022-07-06 19:13:19 +10:00
PaarthAgarwal
3b9c9fce5b adopt the shared header include in the dashboard (home) view 2022-07-06 18:30:08 +10:00
Matt Westcott
dc99bd02c1 Change create tab ID back to 'upload'
This allows the 'upload one now' link to work again without having to update the translation string (which has tab-upload hard-coded)
2022-07-04 19:01:28 +01:00
Matt Westcott
cbe8e3e794 move collection chooser into filter form 2022-07-04 19:01:28 +01:00
Matt Westcott
0159913261 use generic creation_form.html for document chooser upload template 2022-07-04 19:01:28 +01:00
Matt Westcott
3b993611b0 Inherit from generic chooser.html template 2022-07-04 19:01:28 +01:00
Matt Westcott
4dd3483617 Add a (non-functional) 'create' form to generic chooser modal 2022-07-04 13:48:35 +01:00
LB Johnston
04839f7caf Migrate Portal React component to Typescript 2022-07-04 11:57:28 +01:00
LB Johnston
2ba00d99b0 fix - ensure tooltips get re-initialised
- chooser modals (e.g. documents)
- header search
2022-07-04 07:57:16 +10:00
Matt Westcott
172b133568 Eliminate the custom response name 'snippetChosen'
This makes the snippet chooser modal code a completely vanilla implementation of ChooserModalOnloadHandlerFactory, so we don't need snippet-chooser-modal.js at all.
2022-06-29 13:42:04 +10:00
Matt Westcott
be5b8c41c7 Deprecate createSnippetChooser 2022-06-29 13:42:04 +10:00
Matt Westcott
f3e40571f1 Make SnippetChooser a subclass of Chooser 2022-06-29 13:42:04 +10:00
Matt Westcott
b5733d92d4 eliminate jquery from SnippetChooser 2022-06-29 13:42:04 +10:00
Matt Westcott
9af3efd261 Refactor a SnippetChooser class out of createSnippetChooser
Use the client/src/components/ChooserWidget Chooser class as a guide, but don't copy code from there (so that any snippet-specific customisations don't get lost in translation)
2022-06-29 13:42:04 +10:00
Bernd de Ridder
013ff2179b Update human-readable-date with accessible tooltip
- resolves #8697
2022-06-29 11:02:16 +10:00
PaarthAgarwal
87172278a9 Remove old legacy breadcrumbs completely 2022-06-28 22:13:06 +10:00
LB Johnston
d6baee0754 gettext utils - fix issue where ngettext would not work
- ngettext was not correctly set up and would not do any pluralisation
- add full unit test suite for JS translation utils
- add full JSDOC definitions for JS translation utils
2022-06-27 14:44:32 +01:00
LB Johnston
f797896cba Update some React component files to use .tsx
- these can be converted to Typescript components without any changes
2022-06-27 09:45:59 +01:00
LB Johnston
f252aa83d1 eslint - remove prefer-object-pread ignoring & format/fix 2022-06-24 11:17:04 +01:00
LB Johnston
5ba404704b eslint - remove operator-assignment & format 2022-06-24 08:25:02 +10:00
LB Johnston
a0c769b845 eslint - remove no-extra-boolean-cast & format 2022-06-24 08:25:02 +10:00
LB Johnston
0c3c8ae49b eslint - remove 'no-lonely-if' & format 2022-06-24 08:25:02 +10:00
LB Johnston
75d2f063a2 eslint - update lines-between-class-members & format
- allow single line members to be compact
2022-06-24 08:25:02 +10:00
LB Johnston
9f7c023c12 eslint - remove import/no-extraneous-dependencies & add ignore
- ignoring in one location where import is added for dev only
2022-06-23 13:41:59 +01:00
LB Johnston
6995ba4aee eslint - move import/first & fix
- import/first is useful in tests when we need to set up globals before importing (jquery)
2022-06-23 13:35:09 +01:00
LB Johnston
6fd77175aa eslint - remove import/no-useless-path-segments & format 2022-06-23 13:35:09 +01:00
LB Johnston
e0b6d54e25 eslint - remove import/order & format 2022-06-23 13:35:09 +01:00
LB Johnston
20a75b2a90 eslint - remove rule import/newline-after-import & format
- relates to #8731
2022-06-23 13:35:09 +01:00
PaarthAgarwal
4411b76388 Added new non collapsible breadcrumbs to page chooser 2022-06-23 07:16:19 +10:00
PaarthAgarwal
8c2c4a1098 Add new breadcrumbs to page explorer
- added test and updated existing test for breadcrumbs-next
- fix background issue so that the breadcrumbs work correctly on any background
2022-06-15 17:27:33 +10:00