Skip to content

Commit 65fa351

Browse files
authored
fix: solve django 4.2 dark theme toggle problem (#105)
1 parent ad202bc commit 65fa351

17 files changed

+172
-4
lines changed

image_uploader_widget/static/admin/css/image-uploader-inline.css

+14-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
body {
1+
html[data-theme="light"], :root {
22
--iuw-background: #FFF;
33
--iuw-border-color: #CCC;
44
--iuw-color: #333;
@@ -11,7 +11,7 @@ body {
1111
--iuw-add-image-color: #AAA;
1212
}
1313
@media (prefers-color-scheme: dark) {
14-
body {
14+
:root {
1515
--iuw-background: #121212;
1616
--iuw-border-color: #CCC;
1717
--iuw-color: #333;
@@ -24,6 +24,18 @@ body {
2424
--iuw-add-image-color: #CCC;
2525
}
2626
}
27+
html[data-theme="dark"] {
28+
--iuw-background: #121212;
29+
--iuw-border-color: #CCC;
30+
--iuw-color: #333;
31+
--iuw-placeholder-text-color: #AAA;
32+
--iuw-placeholder-destak-color: #417690;
33+
--iuw-dropzone-background: rgba(0, 0, 0, 0.8);
34+
--iuw-image-preview-border: #333;
35+
--iuw-image-preview-shadow: rgba(0, 0, 0, 0.3);
36+
--iuw-add-image-background: #333;
37+
--iuw-add-image-color: #CCC;
38+
}
2739

2840
@keyframes arrow-flashing {
2941
from {

image_uploader_widget/static/admin/css/image-uploader-widget.css

+15-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
body {
1+
html[data-theme="light"], :root {
22
--iuw-background: #FFF;
33
--iuw-border-color: #CCC;
44
--iuw-color: #333;
@@ -12,7 +12,7 @@ body {
1212
}
1313

1414
@media (prefers-color-scheme: dark) {
15-
body {
15+
:root {
1616
--iuw-background: #121212;
1717
--iuw-border-color: #CCC;
1818
--iuw-color: #333;
@@ -26,6 +26,19 @@ body {
2626
}
2727
}
2828

29+
html[data-theme="dark"] {
30+
--iuw-background: #121212;
31+
--iuw-border-color: #CCC;
32+
--iuw-color: #333;
33+
--iuw-placeholder-text-color: #AAA;
34+
--iuw-placeholder-destak-color: #417690;
35+
--iuw-dropzone-background: rgba(0, 0, 0, 0.8);
36+
--iuw-image-preview-border: #333;
37+
--iuw-image-preview-shadow: rgba(0, 0, 0, 0.3);
38+
--iuw-add-image-background: #333;
39+
--iuw-add-image-color: #CCC;
40+
}
41+
2942
@keyframes arrow-flashing {
3043
from {
3144
opacity: 0;

tests/inlines/ui_regression/tests_ui.py

+65
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import django
12
from django.core.files import File
23
from selenium.webdriver.common.by import By
34
from selenium.webdriver.support.wait import WebDriverWait
@@ -181,3 +182,67 @@ def test_hover_add_button(self):
181182
self.hover_and_wait(add_button, 0.4)
182183

183184
self.assertMatchSnapshot(root, 'in_test_hover_add_button')
185+
186+
def test_ui_initialized_toggle_dark_theme(self):
187+
major, minor, _, _, _ = django.VERSION
188+
if major < 4 or minor < 2:
189+
# Theme toggle is added in django 4.2
190+
# https://docs.djangoproject.com/en/4.2/releases/4.2/#django-contrib-admin
191+
return
192+
193+
inline = models.Inline.objects.create()
194+
195+
item1 = models.InlineItem()
196+
item1.parent = inline
197+
with open(self.image1, 'rb') as f:
198+
item1.image.save("image.png", File(f))
199+
item1.save()
200+
201+
item2 = models.InlineItem()
202+
item2.parent = inline
203+
with open(self.image2, 'rb') as f:
204+
item2.image.save("image2.png", File(f))
205+
item2.save()
206+
207+
self.selenium.get(self.get_edit_url(inline.id))
208+
209+
root = self.selenium.find_element(By.CSS_SELECTOR, '.iuw-inline-root')
210+
self.assertMatchSnapshot(root, 'in_test_ui_initialized_toggle_dark_theme')
211+
212+
toggle = self.selenium.find_element(By.CSS_SELECTOR, '#header button.theme-toggle')
213+
self.click_and_wait(toggle, 0.3)
214+
215+
self.assertMatchSnapshot(root, 'in_test_ui_initialized_toggle_dark_theme2')
216+
217+
def test_ui_initialized_toggle_dark_theme_inverted(self):
218+
self.dark_mode()
219+
220+
major, minor, _, _, _ = django.VERSION
221+
if major < 4 or minor < 2:
222+
# Theme toggle is added in django 4.2
223+
# https://docs.djangoproject.com/en/4.2/releases/4.2/#django-contrib-admin
224+
return
225+
226+
inline = models.Inline.objects.create()
227+
228+
item1 = models.InlineItem()
229+
item1.parent = inline
230+
with open(self.image1, 'rb') as f:
231+
item1.image.save("image.png", File(f))
232+
item1.save()
233+
234+
item2 = models.InlineItem()
235+
item2.parent = inline
236+
with open(self.image2, 'rb') as f:
237+
item2.image.save("image2.png", File(f))
238+
item2.save()
239+
240+
self.selenium.get(self.get_edit_url(inline.id))
241+
242+
root = self.selenium.find_element(By.CSS_SELECTOR, '.iuw-inline-root')
243+
self.assertMatchSnapshot(root, 'in_test_ui_initialized_toggle_dark_theme_inverted')
244+
245+
toggle = self.selenium.find_element(By.CSS_SELECTOR, '#header button.theme-toggle')
246+
self.click_and_wait(toggle, 0.3)
247+
248+
self.assertMatchSnapshot(root, 'in_test_ui_initialized_toggle_dark_theme_inverted2')

tests/widget/ui_regression/tests_ui_optional.py

+39
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import django
12
from django.contrib.auth import get_user_model
23
from django.core.files import File
34
from selenium.webdriver.common.by import By
@@ -142,3 +143,41 @@ def test_ui_initialized_with_data_preview_dark(self):
142143

143144
modal = self.get_preview_modal(black_overlay=True)
144145
self.assertMatchSnapshot(modal, 'wo_test_ui_initialized_with_data_preview_dark')
146+
147+
def test_ui_initialized_toggle_dark_theme(self):
148+
major, minor, _, _, _ = django.VERSION
149+
if major < 4 or minor < 2:
150+
# Theme toggle is added in django 4.2
151+
# https://docs.djangoproject.com/en/4.2/releases/4.2/#django-contrib-admin
152+
return
153+
154+
item = self.init_item()
155+
self.selenium.get(self.get_edit_url(item.id))
156+
157+
root = self.get_widget_root()
158+
self.assertMatchSnapshot(root, 'wo_test_ui_initialized_toggle_dark_theme')
159+
160+
toggle = self.selenium.find_element(By.CSS_SELECTOR, '#header button.theme-toggle')
161+
self.click_and_wait(toggle, 0.3)
162+
163+
self.assertMatchSnapshot(root, 'wo_test_ui_initialized_toggle_dark_theme2')
164+
165+
def test_ui_initialized_toggle_dark_theme_inverted(self):
166+
self.dark_mode()
167+
168+
major, minor, _, _, _ = django.VERSION
169+
if major < 4 or minor < 2:
170+
# Theme toggle is added in django 4.2
171+
# https://docs.djangoproject.com/en/4.2/releases/4.2/#django-contrib-admin
172+
return
173+
174+
item = self.init_item()
175+
self.selenium.get(self.get_edit_url(item.id))
176+
177+
root = self.get_widget_root()
178+
self.assertMatchSnapshot(root, 'wo_test_ui_initialized_toggle_dark_theme_inverted')
179+
180+
toggle = self.selenium.find_element(By.CSS_SELECTOR, '#header button.theme-toggle')
181+
self.click_and_wait(toggle, 0.3)
182+
183+
self.assertMatchSnapshot(root, 'wo_test_ui_initialized_toggle_dark_theme_inverted2')

tests/widget/ui_regression/tests_ui_required.py

+39
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import django
12
from django.contrib.auth import get_user_model
23
from django.core.files import File
34
from selenium.webdriver.common.by import By
@@ -121,3 +122,41 @@ def test_ui_initialized_with_data_preview_dark(self):
121122

122123
modal = self.get_preview_modal(black_overlay=True)
123124
self.assertMatchSnapshot(modal, 'wr_test_ui_initialized_with_data_preview_dark')
125+
126+
def test_ui_initialized_toggle_dark_theme(self):
127+
major, minor, _, _, _ = django.VERSION
128+
if major < 4 or minor < 2:
129+
# Theme toggle is added in django 4.2
130+
# https://docs.djangoproject.com/en/4.2/releases/4.2/#django-contrib-admin
131+
return
132+
133+
item = self.init_item()
134+
self.selenium.get(self.get_edit_url(item.id))
135+
136+
root = self.get_widget_root()
137+
self.assertMatchSnapshot(root, 'wr_test_ui_initialized_toggle_dark_theme')
138+
139+
toggle = self.selenium.find_element(By.CSS_SELECTOR, '#header button.theme-toggle')
140+
self.click_and_wait(toggle, 0.3)
141+
142+
self.assertMatchSnapshot(root, 'wr_test_ui_initialized_toggle_dark_theme2')
143+
144+
def test_ui_initialized_toggle_dark_theme_inverted(self):
145+
self.dark_mode()
146+
147+
major, minor, _, _, _ = django.VERSION
148+
if major < 4 or minor < 2:
149+
# Theme toggle is added in django 4.2
150+
# https://docs.djangoproject.com/en/4.2/releases/4.2/#django-contrib-admin
151+
return
152+
153+
item = self.init_item()
154+
self.selenium.get(self.get_edit_url(item.id))
155+
156+
root = self.get_widget_root()
157+
self.assertMatchSnapshot(root, 'wr_test_ui_initialized_toggle_dark_theme_inverted')
158+
159+
toggle = self.selenium.find_element(By.CSS_SELECTOR, '#header button.theme-toggle')
160+
self.click_and_wait(toggle, 0.3)
161+
162+
self.assertMatchSnapshot(root, 'wr_test_ui_initialized_toggle_dark_theme_inverted2')
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading
Loading

0 commit comments

Comments
 (0)