fix: change chexbox positions
This commit is contained in:
+20
-46
@@ -51,14 +51,24 @@ class ProjectBriefAdmin(admin.ModelAdmin):
|
|||||||
(
|
(
|
||||||
"Brief",
|
"Brief",
|
||||||
{
|
{
|
||||||
|
"description": (
|
||||||
|
"Each field has its own lock and website visibility controls. "
|
||||||
|
"Lock prevents client edits; Show on website includes the field "
|
||||||
|
"on the public card when the project is published."
|
||||||
|
),
|
||||||
"fields": (
|
"fields": (
|
||||||
"client",
|
"client",
|
||||||
"title",
|
"locked",
|
||||||
"category",
|
"show_on_website",
|
||||||
|
("title", "lock_title", "show_title_on_website"),
|
||||||
|
("category", "lock_category", "show_category_on_website"),
|
||||||
"description",
|
"description",
|
||||||
"budget_range",
|
("lock_description", "show_description_on_website"),
|
||||||
"desired_deadline",
|
("budget_range", "lock_budget_range", "show_budget_on_website"),
|
||||||
|
("desired_deadline", "lock_desired_deadline", "show_deadline_on_website"),
|
||||||
"reference_links",
|
"reference_links",
|
||||||
|
("lock_reference_links", "show_references_on_website"),
|
||||||
|
("lock_attachments", "show_attachments_on_website"),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -75,34 +85,13 @@ class ProjectBriefAdmin(admin.ModelAdmin):
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"Client editing locks",
|
"Website showcase overrides",
|
||||||
{
|
{
|
||||||
"description": (
|
"description": (
|
||||||
"Lock individual fields so the client cannot change them while "
|
"Optional public-facing content. Leave blank to fall back to the "
|
||||||
"the brief is still editable. 'Lock entire project' blocks all "
|
"brief field values above."
|
||||||
"client edits regardless of status."
|
|
||||||
),
|
),
|
||||||
"fields": (
|
"fields": (
|
||||||
"locked",
|
|
||||||
"lock_title",
|
|
||||||
"lock_category",
|
|
||||||
"lock_description",
|
|
||||||
"lock_budget_range",
|
|
||||||
"lock_desired_deadline",
|
|
||||||
"lock_reference_links",
|
|
||||||
"lock_attachments",
|
|
||||||
),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
(
|
|
||||||
"Website showcase",
|
|
||||||
{
|
|
||||||
"description": (
|
|
||||||
"Control whether this project appears on the public website and "
|
|
||||||
"which fields are visible on the website card."
|
|
||||||
),
|
|
||||||
"fields": (
|
|
||||||
"show_on_website",
|
|
||||||
"public_title",
|
"public_title",
|
||||||
"public_summary",
|
"public_summary",
|
||||||
"public_tags",
|
"public_tags",
|
||||||
@@ -112,28 +101,13 @@ class ProjectBriefAdmin(admin.ModelAdmin):
|
|||||||
),
|
),
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
|
||||||
"Website field visibility",
|
|
||||||
{
|
|
||||||
"description": (
|
|
||||||
"Each field can be independently shown or hidden on the website card."
|
|
||||||
),
|
|
||||||
"fields": (
|
|
||||||
"show_title_on_website",
|
|
||||||
"show_category_on_website",
|
|
||||||
"show_description_on_website",
|
|
||||||
"show_budget_on_website",
|
|
||||||
"show_deadline_on_website",
|
|
||||||
"show_references_on_website",
|
|
||||||
"show_attachments_on_website",
|
|
||||||
),
|
|
||||||
"classes": ("collapse",),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
inlines = [ProjectBriefAttachmentInline, ProjectInternalNoteInline]
|
inlines = [ProjectBriefAttachmentInline, ProjectInternalNoteInline]
|
||||||
date_hierarchy = "submitted_at"
|
date_hierarchy = "submitted_at"
|
||||||
|
|
||||||
|
class Media:
|
||||||
|
css = {"all": ("css/project-brief-admin.css",)}
|
||||||
|
|
||||||
def save_formset(self, request, form, formset, change):
|
def save_formset(self, request, form, formset, change):
|
||||||
instances = formset.save(commit=False)
|
instances = formset.save(commit=False)
|
||||||
for instance in instances:
|
for instance in instances:
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ class ProjectBrief(models.Model):
|
|||||||
)
|
)
|
||||||
locked = models.BooleanField(
|
locked = models.BooleanField(
|
||||||
default=False,
|
default=False,
|
||||||
|
verbose_name="Lock project",
|
||||||
help_text="Lock the whole project so the client cannot edit it at all.",
|
help_text="Lock the whole project so the client cannot edit it at all.",
|
||||||
)
|
)
|
||||||
lock_title = models.BooleanField(default=False, help_text="Lock title for the client.")
|
lock_title = models.BooleanField(default=False, help_text="Lock title for the client.")
|
||||||
|
|||||||
@@ -0,0 +1,89 @@
|
|||||||
|
#projectbrief_form .project-brief-fieldset > .form-row.multi-field {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) minmax(0, 1fr);
|
||||||
|
gap: 1rem 1.25rem;
|
||||||
|
align-items: start;
|
||||||
|
padding-top: 0.75rem;
|
||||||
|
border-top: 1px solid #e5e7eb;
|
||||||
|
}
|
||||||
|
|
||||||
|
#projectbrief_form .project-brief-fieldset > .form-row.multi-field:first-of-type {
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#projectbrief_form .project-brief-field-header {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) minmax(0, 1fr);
|
||||||
|
gap: 1rem 1.25rem;
|
||||||
|
margin: 0.75rem 0 0.25rem;
|
||||||
|
padding: 0.5rem 0;
|
||||||
|
border-bottom: 2px solid #cbd5e1;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.04em;
|
||||||
|
color: #64748b;
|
||||||
|
}
|
||||||
|
|
||||||
|
#projectbrief_form .project-brief-field-header span:nth-child(2),
|
||||||
|
#projectbrief_form .project-brief-field-header span:nth-child(3) {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-lock_title,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-lock_category,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-lock_description,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-lock_budget_range,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-lock_desired_deadline,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-lock_reference_links,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-lock_attachments,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-show_title_on_website,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-show_category_on_website,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-show_description_on_website,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-show_budget_on_website,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-show_deadline_on_website,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-show_references_on_website,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-show_attachments_on_website {
|
||||||
|
padding-top: 0.15rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-lock_title label,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-lock_category label,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-lock_description label,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-lock_budget_range label,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-lock_desired_deadline label,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-lock_reference_links label,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-lock_attachments label,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-show_title_on_website label,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-show_category_on_website label,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-show_description_on_website label,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-show_budget_on_website label,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-show_deadline_on_website label,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-show_references_on_website label,
|
||||||
|
#projectbrief_form .project-brief-fieldset .field-show_attachments_on_website label {
|
||||||
|
font-size: 0.78rem;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #475569;
|
||||||
|
}
|
||||||
|
|
||||||
|
#projectbrief_form .project-brief-fieldset .form-row:not(.multi-field) .field-lock_description,
|
||||||
|
#projectbrief_form .project-brief-fieldset .form-row:not(.multi-field) .field-lock_reference_links,
|
||||||
|
#projectbrief_form .project-brief-fieldset .form-row:not(.multi-field) .field-lock_attachments,
|
||||||
|
#projectbrief_form .project-brief-fieldset .form-row:not(.multi-field) .field-show_description_on_website,
|
||||||
|
#projectbrief_form .project-brief-fieldset .form-row:not(.multi-field) .field-show_references_on_website,
|
||||||
|
#projectbrief_form .project-brief-fieldset .form-row:not(.multi-field) .field-show_attachments_on_website {
|
||||||
|
display: inline-block;
|
||||||
|
width: calc(50% - 0.75rem);
|
||||||
|
vertical-align: top;
|
||||||
|
margin-right: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
#projectbrief_form .field-description textarea,
|
||||||
|
#projectbrief_form .field-reference_links textarea {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#projectbrief_form .field-lock_attachments .help,
|
||||||
|
#projectbrief_form .field-show_attachments_on_website .help {
|
||||||
|
margin-top: 0.25rem;
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{% extends "admin/change_form.html" %}
|
||||||
|
|
||||||
|
{% block field_sets %}
|
||||||
|
{{ block.super }}
|
||||||
|
<script>
|
||||||
|
(function () {
|
||||||
|
const form = document.getElementById("projectbrief_form");
|
||||||
|
if (!form) return;
|
||||||
|
const fieldsets = form.querySelectorAll("fieldset.module.aligned");
|
||||||
|
if (!fieldsets.length || form.querySelector(".project-brief-field-header")) return;
|
||||||
|
const briefFieldset = fieldsets[0];
|
||||||
|
const titleRow = briefFieldset.querySelector(".form-row.field-title");
|
||||||
|
if (!titleRow) return;
|
||||||
|
const header = document.createElement("div");
|
||||||
|
header.className = "project-brief-field-header";
|
||||||
|
header.innerHTML = "<span>Field</span><span>Lock</span><span>Show on website</span>";
|
||||||
|
briefFieldset.classList.add("project-brief-fieldset");
|
||||||
|
briefFieldset.insertBefore(header, titleRow);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
Reference in New Issue
Block a user