plain.admin 0.33.1__tar.gz → 0.34.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. {plain_admin-0.33.1 → plain_admin-0.34.0}/.gitignore +3 -0
  2. {plain_admin-0.33.1 → plain_admin-0.34.0}/PKG-INFO +1 -1
  3. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/CHANGELOG.md +21 -0
  4. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/assets/admin/admin.css +17 -12
  5. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/assets/admin/admin.js +2 -2
  6. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/assets/toolbar/toolbar.js +33 -0
  7. {plain_admin-0.33.1 → plain_admin-0.34.0}/pyproject.toml +1 -1
  8. {plain_admin-0.33.1 → plain_admin-0.34.0}/tests/app/settings.py +1 -4
  9. {plain_admin-0.33.1 → plain_admin-0.34.0}/tests/test_admin.py +4 -2
  10. plain_admin-0.33.1/plain/admin/impersonate/models.py +0 -0
  11. {plain_admin-0.33.1 → plain_admin-0.34.0}/LICENSE +0 -0
  12. {plain_admin-0.33.1 → plain_admin-0.34.0}/README.md +0 -0
  13. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/README.md +0 -0
  14. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/__init__.py +0 -0
  15. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/assets/admin/list.js +0 -0
  16. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/assets/admin/vendor/chart.js +0 -0
  17. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/assets/admin/vendor/jquery-3.6.1.slim.min.js +0 -0
  18. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/assets/admin/vendor/popper.min.js +0 -0
  19. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/assets/admin/vendor/tippy-bundle.umd.min.js +0 -0
  20. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/cards/__init__.py +0 -0
  21. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/cards/base.py +0 -0
  22. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/cards/charts.py +0 -0
  23. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/cards/tables.py +0 -0
  24. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/config.py +0 -0
  25. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/dates.py +0 -0
  26. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/default_settings.py +0 -0
  27. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/impersonate/README.md +0 -0
  28. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/impersonate/__init__.py +0 -0
  29. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/impersonate/middleware.py +0 -0
  30. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/impersonate/permissions.py +0 -0
  31. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/impersonate/settings.py +0 -0
  32. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/impersonate/urls.py +0 -0
  33. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/impersonate/views.py +0 -0
  34. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/middleware.py +0 -0
  35. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/querystats/README.md +0 -0
  36. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/querystats/__init__.py +0 -0
  37. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/querystats/core.py +0 -0
  38. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/querystats/middleware.py +0 -0
  39. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/querystats/urls.py +0 -0
  40. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/querystats/views.py +0 -0
  41. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/base.html +0 -0
  42. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/cards/base.html +0 -0
  43. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/cards/card.html +0 -0
  44. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/cards/chart.html +0 -0
  45. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/cards/table.html +0 -0
  46. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/delete.html +0 -0
  47. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/detail.html +0 -0
  48. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/index.html +0 -0
  49. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/list.html +0 -0
  50. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/page.html +0 -0
  51. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/search.html +0 -0
  52. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/values/UUID.html +0 -0
  53. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/values/bool.html +0 -0
  54. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/values/datetime.html +0 -0
  55. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/values/default.html +0 -0
  56. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/values/dict.html +0 -0
  57. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/values/get_display.html +0 -0
  58. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/values/img.html +0 -0
  59. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/values/list.html +0 -0
  60. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/values/model.html +0 -0
  61. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/admin/values/queryset.html +0 -0
  62. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/elements/admin/Checkbox.html +0 -0
  63. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/elements/admin/CheckboxField.html +0 -0
  64. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/elements/admin/FieldErrors.html +0 -0
  65. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/elements/admin/Help.html +0 -0
  66. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/elements/admin/Input.html +0 -0
  67. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/elements/admin/InputField.html +0 -0
  68. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/elements/admin/Label.html +0 -0
  69. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/elements/admin/Select.html +0 -0
  70. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/elements/admin/SelectField.html +0 -0
  71. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/elements/admin/Submit.html +0 -0
  72. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/elements/admin/Textarea.html +0 -0
  73. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/elements/admin/TextareaField.html +0 -0
  74. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/querystats/querystats.html +0 -0
  75. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/querystats/toolbar.html +0 -0
  76. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/toolbar/exception.html +0 -0
  77. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/toolbar/querystats.html +0 -0
  78. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/toolbar/request.html +0 -0
  79. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates/toolbar/toolbar.html +0 -0
  80. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/templates.py +0 -0
  81. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/toolbar.py +0 -0
  82. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/urls.py +0 -0
  83. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/views/__init__.py +0 -0
  84. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/views/base.py +0 -0
  85. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/views/models.py +0 -0
  86. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/views/objects.py +0 -0
  87. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/views/registry.py +0 -0
  88. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/views/types.py +0 -0
  89. {plain_admin-0.33.1 → plain_admin-0.34.0}/plain/admin/views/viewsets.py +0 -0
  90. {plain_admin-0.33.1 → plain_admin-0.34.0}/tests/app/urls.py +0 -0
  91. {plain_admin-0.33.1 → plain_admin-0.34.0}/tests/app/users/migrations/0001_initial.py +0 -0
  92. {plain_admin-0.33.1 → plain_admin-0.34.0}/tests/app/users/migrations/__init__.py +0 -0
  93. {plain_admin-0.33.1 → plain_admin-0.34.0}/tests/app/users/models.py +0 -0
@@ -16,3 +16,6 @@ plain*/tests/.plain
16
16
 
17
17
  # Plain temp dirs
18
18
  .plain
19
+
20
+ coverage.xml
21
+ .vscode
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plain.admin
3
- Version: 0.33.1
3
+ Version: 0.34.0
4
4
  Summary: Admin dashboard and tools for Plain.
5
5
  Author-email: Dave Gaeddert <dave.gaeddert@dropseed.dev>
6
6
  License-Expression: BSD-3-Clause
@@ -1,5 +1,26 @@
1
1
  # plain-admin changelog
2
2
 
3
+ ## [0.34.0](https://github.com/dropseed/plain/releases/plain-admin@0.34.0) (2025-07-18)
4
+
5
+ ### What's changed
6
+
7
+ - The admin toolbar now automatically expands when an exception occurs, making it easier to immediately see exception details ([55a6eaf](https://github.com/dropseed/plain/commit/55a6eaf))
8
+ - The admin toolbar now remembers your custom height preference when resized, persisting across page reloads and browser sessions ([b8db44b](https://github.com/dropseed/plain/commit/b8db44b))
9
+
10
+ ### Upgrade instructions
11
+
12
+ - No changes required
13
+
14
+ ## [0.33.2](https://github.com/dropseed/plain/releases/plain-admin@0.33.2) (2025-07-07)
15
+
16
+ ### What's changed
17
+
18
+ - No user-facing changes in this release. Internal CSS cleanup and linter adjustments were made to the bundled admin styles ([3265f5f](https://github.com/dropseed/plain/commit/3265f5f)).
19
+
20
+ ### Upgrade instructions
21
+
22
+ - No changes required
23
+
3
24
  ## [0.33.1](https://github.com/dropseed/plain/releases/plain-admin@0.33.1) (2025-06-26)
4
25
 
5
26
  ### What's changed
@@ -5,9 +5,11 @@ end-user to drop in HTML elements and have a decent, consistent starting point.
5
5
  We shouldn't use many custom classes in here (like .btn) because the user
6
6
  could unintentionally overwrite those since our CSS is combined.
7
7
  */
8
+
9
+ /* biome-disable lint/style/noDescendingSpecificity */
8
10
  table {
9
11
  width: 100%;
10
- font-size: .875rem;
12
+ font-size: 0.875rem;
11
13
  line-height: 1.25rem;
12
14
  table-layout: auto;
13
15
  }
@@ -17,6 +19,14 @@ th {
17
19
  padding: 0.5rem 0.5rem;
18
20
  }
19
21
 
22
+ main a {
23
+ color: rgb(37, 99, 235);
24
+ }
25
+
26
+ main a:hover {
27
+ text-decoration: underline;
28
+ }
29
+
20
30
  table th a {
21
31
  color: rgba(255, 255, 255, 0.6);
22
32
  }
@@ -47,23 +57,15 @@ table img {
47
57
  border-radius: 2px;
48
58
  }
49
59
 
50
- main a {
51
- color: rgb(37, 99, 235);
52
- }
53
-
54
- main a:hover {
55
- text-decoration: underline;
56
- }
57
-
58
60
  select {
59
61
  border-radius: 6px;
60
62
  background-color: rgba(255, 255, 255, 0.05);
61
63
  border: 1px solid rgba(255, 255, 255, 0.1);
62
64
  }
63
65
 
64
- .actions a,
66
+ main button,
65
67
  .actions button,
66
- main button {
68
+ .actions a {
67
69
  display: inline-block;
68
70
  padding: 8px 16px;
69
71
  font-size: 14px;
@@ -74,7 +76,10 @@ main button {
74
76
  background-color: #2a2826;
75
77
  border: 1px solid #3f3d3b;
76
78
  border-radius: 6px;
77
- transition: background-color 0.2s, border-color 0.2s, transform 0.2s;
79
+ transition:
80
+ background-color 0.2s,
81
+ border-color 0.2s,
82
+ transform 0.2s;
78
83
  cursor: pointer;
79
84
  flex-shrink: 0;
80
85
 
@@ -2,7 +2,7 @@ jQuery(($) => {
2
2
  $("[data-toggle]").on("click", function (e) {
3
3
  e.preventDefault();
4
4
  const targets = $(this).data("toggle").split(",");
5
- $.each(targets, (index, target) => {
5
+ $.each(targets, (_index, target) => {
6
6
  const $target = $(target);
7
7
  if ($target.data("toggle-class")) {
8
8
  $target.toggleClass($target.data("toggle-class"));
@@ -12,7 +12,7 @@ jQuery(($) => {
12
12
  });
13
13
  });
14
14
 
15
- $("[data-autosubmit]").on("change", function (e) {
15
+ $("[data-autosubmit]").on("change", function (_e) {
16
16
  $(this).closest("form").submit();
17
17
  });
18
18
 
@@ -43,6 +43,10 @@ const plainToolbar = {
43
43
  document.querySelector("#plaintoolbar-details").classList.add("hidden");
44
44
  localStorage.setItem("plaintoolbar.expanded", "0");
45
45
  },
46
+ expandTemporary: function () {
47
+ this.expanded = true;
48
+ document.querySelector("#plaintoolbar-details").classList.remove("hidden");
49
+ },
46
50
  showTab: function (tabName) {
47
51
  this.expand();
48
52
 
@@ -74,6 +78,15 @@ const plainToolbar = {
74
78
  }
75
79
  localStorage.setItem("plaintoolbar.tab", tabName);
76
80
  },
81
+ resetHeight: () => {
82
+ const content = document.querySelector(
83
+ "#plaintoolbar-details [data-resizer]",
84
+ )?.nextElementSibling;
85
+ if (content) {
86
+ content.style.height = "";
87
+ localStorage.removeItem("plaintoolbar.height");
88
+ }
89
+ },
77
90
  };
78
91
 
79
92
  // Render it hidden immediately if the user has hidden it before
@@ -91,10 +104,28 @@ window.addEventListener("load", () => {
91
104
  if (lastTab) {
92
105
  plainToolbar.showTab(lastTab);
93
106
  }
107
+ // Restore custom height if it was set
108
+ const savedHeight = localStorage.getItem("plaintoolbar.height");
109
+ if (savedHeight) {
110
+ const content = document.querySelector(
111
+ "#plaintoolbar-details [data-resizer]",
112
+ )?.nextElementSibling;
113
+ if (content) {
114
+ content.style.height = savedHeight;
115
+ }
116
+ }
94
117
  } else if (state === "0") {
95
118
  plainToolbar.collapse();
96
119
  }
97
120
  const toolbar = document.querySelector("#plaintoolbar");
121
+ const hasException = toolbar.querySelector('[data-toolbar-tab="Exception"]');
122
+
123
+ if (hasException) {
124
+ plainToolbar.show();
125
+ if (!plainToolbar.expanded) {
126
+ plainToolbar.expandTemporary();
127
+ }
128
+ }
98
129
 
99
130
  for (const tab of toolbar.querySelectorAll("button[data-toolbar-tab]")) {
100
131
  tab.addEventListener("click", () => {
@@ -160,6 +191,8 @@ window.addEventListener("load", () => {
160
191
  isDragging = false;
161
192
  handle.style.cursor = "grab";
162
193
  document.body.style.userSelect = "";
194
+ // Save the new height to localStorage
195
+ localStorage.setItem("plaintoolbar.height", content.style.height);
163
196
  }
164
197
  });
165
198
  }
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "plain.admin"
3
- version = "0.33.1"
3
+ version = "0.34.0"
4
4
  description = "Admin dashboard and tools for Plain."
5
5
  authors = [{name = "Dave Gaeddert", email = "dave.gaeddert@dropseed.dev"}]
6
6
  license = "BSD-3-Clause"
@@ -9,10 +9,7 @@ INSTALLED_PACKAGES = [
9
9
  "plain.admin",
10
10
  "app.users",
11
11
  ]
12
- DATABASE = {
13
- "ENGINE": "plain.models.backends.sqlite3",
14
- "NAME": ":memory:",
15
- }
12
+
16
13
  MIDDLEWARE = [
17
14
  "plain.sessions.middleware.SessionMiddleware",
18
15
  "plain.auth.middleware.AuthenticationMiddleware",
@@ -18,5 +18,7 @@ def test_admin_login_required(db):
18
18
  user.is_admin = True
19
19
  user.save()
20
20
 
21
- # Now admin
22
- assert client.get("/admin/").status_code == 200
21
+ # Now admin (currently redirects to the first view)
22
+ resp = client.get("/admin/")
23
+ assert resp.status_code == 302
24
+ assert resp.url == "/admin/p/session/"
File without changes
File without changes
File without changes