Compare commits

...

12 commits

Author SHA1 Message Date
5cbe87e6bf Join left and right navbar links into the center 2026-05-05 18:38:50 -06:00
25118c683b Stylin 2026-05-05 18:38:05 -06:00
353073f996 Allow system manager to impersonate 2026-05-05 18:35:45 -06:00
7d99357ac7 Docperms 2026-05-05 18:33:52 -06:00
b42b2cd1ad User field adjustments 2026-03-24 22:09:41 -06:00
6b5a69b9da Theme adjustments 2026-03-24 19:24:58 -06:00
Raffael Meyer
21417c67b1
ci: fix branch pattern (#38225) 2026-03-24 22:16:00 +00:00
Raffael Meyer
0cf2e3fd41
ci: restrict review script (#38224) 2026-03-24 21:59:00 +00:00
Ejaaz Khan
61e5378469
Merge pull request #38176 from UmakanthKaspa/fix-set-only-once-in-customize-form
fix: add `set_only_once` property to custom field and customize form
2026-03-25 01:53:53 +05:30
Ejaaz Khan
a8c429ecbe
Merge pull request #38218 from gajjug004/fix/report-view-chart-crash-on-group-by-removal
fix: report view crash when removing group by after toggling chart
2026-03-25 01:52:00 +05:30
gajjug004
4cc122af48 fix: report view chart crash on group-by removal 2026-03-24 19:00:13 +05:30
UmakanthKaspa
22a8d8dd66 fix: add set_only_once property to custom field and customize form 2026-03-23 00:14:10 +05:30
34 changed files with 253 additions and 133 deletions

View file

@ -3,6 +3,9 @@ name: Review translation PRs
on: on:
pull_request_target: pull_request_target:
types: [opened, reopened, synchronize, ready_for_review] types: [opened, reopened, synchronize, ready_for_review]
branches:
- develop
- "version-[0-9][0-9]-hotfix"
paths: paths:
- "**/*.po" - "**/*.po"

View file

@ -0,0 +1,8 @@
// Copyright (c) 2026, Frappe Technologies and contributors
// For license information, please see license.txt
// frappe.ui.form.on("Pronouns", {
// refresh(frm) {
// },
// });

View file

@ -0,0 +1,57 @@
{
"actions": [],
"allow_rename": 1,
"autoname": "field:pronouns",
"creation": "2026-03-24 20:39:16.401720",
"doctype": "DocType",
"engine": "InnoDB",
"field_order": [
"pronouns"
],
"fields": [
{
"fieldname": "pronouns",
"fieldtype": "Data",
"label": "Pronouns",
"unique": 1
}
],
"grid_page_length": 50,
"index_web_pages_for_search": 1,
"links": [],
"modified": "2026-03-24 20:58:54.860631",
"modified_by": "admin@seitimegames.com",
"module": "Contacts",
"name": "Pronouns",
"naming_rule": "By fieldname",
"owner": "admin@seitimegames.com",
"permissions": [
{
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "System Manager",
"share": 1,
"write": 1
},
{
"create": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "Guest",
"share": 1
}
],
"row_format": "Dynamic",
"rows_threshold_for_grid_search": 20,
"sort_field": "creation",
"sort_order": "DESC",
"states": []
}

View file

@ -0,0 +1,20 @@
# Copyright (c) 2026, Frappe Technologies and contributors
# For license information, please see license.txt
# import frappe
from frappe.model.document import Document
class Pronouns(Document):
# begin: auto-generated types
# This code is auto-generated. Do not modify anything in this block.
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from frappe.types import DF
pronouns: DF.Data | None
# end: auto-generated types
pass

View file

@ -0,0 +1,22 @@
# Copyright (c) 2026, Frappe Technologies and Contributors
# See license.txt
# import frappe
from frappe.tests import IntegrationTestCase
# On IntegrationTestCase, the doctype test records and all
# link-field test record dependencies are recursively loaded
# Use these module variables to add/remove to/from that list
EXTRA_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"]
IGNORE_TEST_RECORD_DEPENDENCIES = [] # eg. ["User"]
class IntegrationTestPronouns(IntegrationTestCase):
"""
Integration tests for Pronouns.
Use this class for testing interactions between multiple components.
"""
pass

View file

@ -1,6 +1,7 @@
{ {
"actions": [], "actions": [],
"allow_import": 1, "allow_import": 1,
"allow_rename": 1,
"autoname": "hash", "autoname": "hash",
"creation": "2017-01-11 04:21:35.217943", "creation": "2017-01-11 04:21:35.217943",
"doctype": "DocType", "doctype": "DocType",
@ -227,7 +228,7 @@
], ],
"grid_page_length": 50, "grid_page_length": 50,
"links": [], "links": [],
"modified": "2025-05-22 16:59:35.484376", "modified": "2026-03-31 20:37:16.503023",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Core", "module": "Core",
"name": "Custom DocPerm", "name": "Custom DocPerm",

View file

@ -40,6 +40,9 @@ class CustomDocPerm(Document):
def get_permission_log_options(self, event=None): def get_permission_log_options(self, event=None):
return {"for_doctype": "DocType", "for_document": self.parent} return {"for_doctype": "DocType", "for_document": self.parent}
# def autoname(self):
# self.name = f"{self.parent}-{self.role}-{self.permlevel}"
def update_custom_docperm(docperm, values): def update_custom_docperm(docperm, values):
custom_docperm = frappe.get_doc("Custom DocPerm", docperm) custom_docperm = frappe.get_doc("Custom DocPerm", docperm)

View file

@ -97,6 +97,11 @@ frappe.ui.form.on("User", {
frm.roles_editor.show(); frm.roles_editor.show();
} }
} }
if (!frappe.user.has_role("System Manager") && frm.doc.birth_date == null) {
var df = frappe.meta.get_docfield("User", "birth_date", cur_frm.doc.name);
df.read_only = 1;
}
}, },
refresh: function (frm) { refresh: function (frm) {
let doc = frm.doc; let doc = frm.doc;
@ -376,8 +381,9 @@ frappe.ui.form.on("User", {
}, },
setup_impersonation: function (frm) { setup_impersonation: function (frm) {
if ( if (
frappe.session.user === "Administrator" && (frappe.session.user === "Administrator" || frappe.user.has_role("System Manager")) &&
frm.doc.name != "Administrator" && frm.doc.name != "Administrator" &&
frm.doc.name != frappe.session.user &&
!frm.is_new() !frm.is_new()
) { ) {
frm.add_custom_button(__("Impersonate"), () => { frm.add_custom_button(__("Impersonate"), () => {

View file

@ -35,15 +35,16 @@
"block_modules", "block_modules",
"home_settings", "home_settings",
"short_bio", "short_bio",
"gender", "pronouns",
"birth_date", "birth_date",
"discord_username",
"interest", "interest",
"gender",
"column_break_26", "column_break_26",
"phone",
"location",
"bio", "bio",
"column_break_22", "phone",
"mobile_no", "mobile_no",
"location",
"settings_tab", "settings_tab",
"desk_settings_section", "desk_settings_section",
"mute_sounds", "mute_sounds",
@ -144,7 +145,7 @@
{ {
"fieldname": "first_name", "fieldname": "first_name",
"fieldtype": "Data", "fieldtype": "Data",
"label": "First Name", "label": "Preferred Name",
"oldfieldname": "first_name", "oldfieldname": "first_name",
"oldfieldtype": "Data", "oldfieldtype": "Data",
"reqd": 1 "reqd": 1
@ -152,6 +153,7 @@
{ {
"fieldname": "middle_name", "fieldname": "middle_name",
"fieldtype": "Data", "fieldtype": "Data",
"hidden": 1,
"label": "Middle Name", "label": "Middle Name",
"oldfieldname": "middle_name", "oldfieldname": "middle_name",
"oldfieldtype": "Data" "oldfieldtype": "Data"
@ -160,6 +162,7 @@
"bold": 1, "bold": 1,
"fieldname": "last_name", "fieldname": "last_name",
"fieldtype": "Data", "fieldtype": "Data",
"hidden": 1,
"label": "Last Name", "label": "Last Name",
"oldfieldname": "last_name", "oldfieldname": "last_name",
"oldfieldtype": "Data" "oldfieldtype": "Data"
@ -167,6 +170,7 @@
{ {
"fieldname": "full_name", "fieldname": "full_name",
"fieldtype": "Data", "fieldtype": "Data",
"hidden": 1,
"in_global_search": 1, "in_global_search": 1,
"in_standard_filter": 1, "in_standard_filter": 1,
"label": "Full Name", "label": "Full Name",
@ -206,6 +210,7 @@
{ {
"fieldname": "language", "fieldname": "language",
"fieldtype": "Link", "fieldtype": "Link",
"hidden": 1,
"label": "Language", "label": "Language",
"options": "Language" "options": "Language"
}, },
@ -265,6 +270,7 @@
{ {
"fieldname": "gender", "fieldname": "gender",
"fieldtype": "Link", "fieldtype": "Link",
"hidden": 1,
"label": "Gender", "label": "Gender",
"oldfieldname": "gender", "oldfieldname": "gender",
"oldfieldtype": "Select", "oldfieldtype": "Select",
@ -273,12 +279,14 @@
{ {
"fieldname": "phone", "fieldname": "phone",
"fieldtype": "Data", "fieldtype": "Data",
"hidden": 1,
"label": "Phone", "label": "Phone",
"options": "Phone" "options": "Phone"
}, },
{ {
"fieldname": "mobile_no", "fieldname": "mobile_no",
"fieldtype": "Data", "fieldtype": "Data",
"hidden": 1,
"label": "Mobile No", "label": "Mobile No",
"options": "Phone", "options": "Phone",
"unique": 1 "unique": 1
@ -286,24 +294,23 @@
{ {
"fieldname": "birth_date", "fieldname": "birth_date",
"fieldtype": "Date", "fieldtype": "Date",
"label": "Birth Date", "label": "Special Day",
"no_copy": 1, "no_copy": 1,
"oldfieldname": "birth_date", "oldfieldname": "birth_date",
"oldfieldtype": "Date" "oldfieldtype": "Date",
"reqd": 1
}, },
{ {
"fieldname": "location", "fieldname": "location",
"fieldtype": "Data", "fieldtype": "Data",
"hidden": 1,
"label": "Location", "label": "Location",
"no_copy": 1 "no_copy": 1
}, },
{
"fieldname": "column_break_22",
"fieldtype": "Column Break"
},
{ {
"fieldname": "interest", "fieldname": "interest",
"fieldtype": "Small Text", "fieldtype": "Small Text",
"hidden": 1,
"label": "Interests" "label": "Interests"
}, },
{ {
@ -852,6 +859,18 @@
"fieldname": "form_navigation_buttons", "fieldname": "form_navigation_buttons",
"fieldtype": "Check", "fieldtype": "Check",
"label": "Show navigation buttons" "label": "Show navigation buttons"
},
{
"fieldname": "pronouns",
"fieldtype": "Link",
"label": "Pronouns",
"options": "Pronouns"
},
{
"fieldname": "discord_username",
"fieldtype": "Data",
"label": "Discord Username",
"reqd": 1
} }
], ],
"icon": "fa fa-user", "icon": "fa fa-user",
@ -905,8 +924,8 @@
} }
], ],
"make_attachments_public": 1, "make_attachments_public": 1,
"modified": "2026-02-22 13:44:36.317890", "modified": "2026-03-24 21:30:57.199337",
"modified_by": "Administrator", "modified_by": "admin@seitimegames.com",
"module": "Core", "module": "Core",
"name": "User", "name": "User",
"owner": "Administrator", "owner": "Administrator",

View file

@ -76,7 +76,7 @@ class User(Document):
api_key: DF.Data | None api_key: DF.Data | None
api_secret: DF.Password | None api_secret: DF.Password | None
bio: DF.SmallText | None bio: DF.SmallText | None
birth_date: DF.Date | None birth_date: DF.Date
block_modules: DF.Table[BlockModule] block_modules: DF.Table[BlockModule]
bulk_actions: DF.Check bulk_actions: DF.Check
bypass_restrict_ip_check_if_2fa_enabled: DF.Check bypass_restrict_ip_check_if_2fa_enabled: DF.Check
@ -86,6 +86,7 @@ class User(Document):
default_workspace: DF.Link | None default_workspace: DF.Link | None
defaults: DF.Table[DefaultValue] defaults: DF.Table[DefaultValue]
desk_theme: DF.Literal["Light", "Dark", "Automatic"] desk_theme: DF.Literal["Light", "Dark", "Automatic"]
discord_username: DF.Data
document_follow_frequency: DF.Literal["Hourly", "Daily", "Weekly"] document_follow_frequency: DF.Literal["Hourly", "Daily", "Weekly"]
document_follow_notify: DF.Check document_follow_notify: DF.Check
email: DF.Data email: DF.Data
@ -124,6 +125,7 @@ class User(Document):
notifications: DF.Check notifications: DF.Check
onboarding_status: DF.SmallText | None onboarding_status: DF.SmallText | None
phone: DF.Data | None phone: DF.Data | None
pronouns: DF.Link | None
redirect_url: DF.SmallText | None redirect_url: DF.SmallText | None
reset_password_key: DF.Data | None reset_password_key: DF.Data | None
restrict_ip: DF.SmallText | None restrict_ip: DF.SmallText | None

View file

@ -48,6 +48,7 @@
"print_width", "print_width",
"alignment", "alignment",
"no_copy", "no_copy",
"set_only_once",
"allow_on_submit", "allow_on_submit",
"in_list_view", "in_list_view",
"in_standard_filter", "in_standard_filter",
@ -484,6 +485,12 @@
"fieldtype": "Select", "fieldtype": "Select",
"label": "Button Color", "label": "Button Color",
"options": "\nDefault\nPrimary\nInfo\nSuccess\nWarning\nDanger" "options": "\nDefault\nPrimary\nInfo\nSuccess\nWarning\nDanger"
},
{
"default": "0",
"fieldname": "set_only_once",
"fieldtype": "Check",
"label": "Set only once"
} }
], ],
"grid_page_length": 50, "grid_page_length": 50,
@ -491,7 +498,7 @@
"idx": 1, "idx": 1,
"index_web_pages_for_search": 1, "index_web_pages_for_search": 1,
"links": [], "links": [],
"modified": "2025-11-12 01:14:24.753774", "modified": "2026-03-22 10:35:32.555267",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Custom", "module": "Custom",
"name": "Custom Field", "name": "Custom Field",

View file

@ -22,9 +22,9 @@ class CustomField(Document):
if TYPE_CHECKING: if TYPE_CHECKING:
from frappe.types import DF from frappe.types import DF
alignment: DF.Literal["", "Left", "Center", "Right"]
allow_in_quick_entry: DF.Check allow_in_quick_entry: DF.Check
allow_on_submit: DF.Check allow_on_submit: DF.Check
alignment: DF.Literal["", "Left", "Center", "Right"]
bold: DF.Check bold: DF.Check
button_color: DF.Literal["", "Default", "Primary", "Info", "Success", "Warning", "Danger"] button_color: DF.Literal["", "Default", "Primary", "Info", "Success", "Warning", "Danger"]
collapsible: DF.Check collapsible: DF.Check
@ -114,6 +114,7 @@ class CustomField(Document):
report_hide: DF.Check report_hide: DF.Check
reqd: DF.Check reqd: DF.Check
search_index: DF.Check search_index: DF.Check
set_only_once: DF.Check
show_dashboard: DF.Check show_dashboard: DF.Check
sort_options: DF.Check sort_options: DF.Check
translatable: DF.Check translatable: DF.Check

View file

@ -810,6 +810,7 @@ docfield_properties = {
"placeholder": "Data", "placeholder": "Data",
"button_color": "Select", "button_color": "Select",
"mask": "Check", "mask": "Check",
"set_only_once": "Check",
} }
doctype_link_properties = { doctype_link_properties = {

View file

@ -22,6 +22,7 @@
"in_preview", "in_preview",
"bold", "bold",
"no_copy", "no_copy",
"set_only_once",
"allow_in_quick_entry", "allow_in_quick_entry",
"translatable", "translatable",
"mask", "mask",
@ -509,6 +510,12 @@
"fieldname": "mask", "fieldname": "mask",
"fieldtype": "Check", "fieldtype": "Check",
"label": "Mask" "label": "Mask"
},
{
"default": "0",
"fieldname": "set_only_once",
"fieldtype": "Check",
"label": "Set only once"
} }
], ],
"grid_page_length": 50, "grid_page_length": 50,
@ -516,7 +523,7 @@
"index_web_pages_for_search": 1, "index_web_pages_for_search": 1,
"istable": 1, "istable": 1,
"links": [], "links": [],
"modified": "2025-12-23 14:17:10.458916", "modified": "2026-03-22 10:36:12.968197",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Custom", "module": "Custom",
"name": "Customize Form Field", "name": "Customize Form Field",

View file

@ -13,10 +13,10 @@ class CustomizeFormField(Document):
if TYPE_CHECKING: if TYPE_CHECKING:
from frappe.types import DF from frappe.types import DF
alignment: DF.Literal["", "Left", "Center", "Right"]
allow_bulk_edit: DF.Check allow_bulk_edit: DF.Check
allow_in_quick_entry: DF.Check allow_in_quick_entry: DF.Check
allow_on_submit: DF.Check allow_on_submit: DF.Check
alignment: DF.Literal["", "Left", "Center", "Right"]
bold: DF.Check bold: DF.Check
button_color: DF.Literal["", "Default", "Primary", "Info", "Success", "Warning", "Danger"] button_color: DF.Literal["", "Default", "Primary", "Info", "Success", "Warning", "Danger"]
collapsible: DF.Check collapsible: DF.Check
@ -109,6 +109,7 @@ class CustomizeFormField(Document):
remember_last_selected_value: DF.Check remember_last_selected_value: DF.Check
report_hide: DF.Check report_hide: DF.Check
reqd: DF.Check reqd: DF.Check
set_only_once: DF.Check
show_dashboard: DF.Check show_dashboard: DF.Check
sort_options: DF.Check sort_options: DF.Check
translatable: DF.Check translatable: DF.Check

View file

@ -502,6 +502,11 @@ frappe.views.ReportView = class ReportView extends frappe.views.ListView {
// show chart if saved via report or user settings // show chart if saved via report or user settings
if (!this.chart) { if (!this.chart) {
if (this.chart_args) { if (this.chart_args) {
if (!this.chart_axes_valid(this.chart_args)) {
this.reset_chart_state();
return;
}
this.build_chart_args( this.build_chart_args(
this.chart_args.x_axis, this.chart_args.x_axis,
this.chart_args.y_axes, this.chart_args.y_axes,
@ -643,12 +648,30 @@ frappe.views.ReportView = class ReportView extends frappe.views.ListView {
refresh_charts() { refresh_charts() {
if (!this.chart || !this.chart_args) return; if (!this.chart || !this.chart_args) return;
if (!this.chart_axes_valid(this.chart_args)) {
this.reset_chart_state();
return;
}
this.$charts_wrapper.removeClass("hidden"); this.$charts_wrapper.removeClass("hidden");
const { x_axis, y_axes, chart_type } = this.chart_args; const { x_axis, y_axes, chart_type } = this.chart_args;
this.build_chart_args(x_axis, y_axes, chart_type); this.build_chart_args(x_axis, y_axes, chart_type);
this.chart.update(this.chart_args); this.chart.update(this.chart_args);
} }
chart_axes_valid(chart_args) {
const { x_axis, y_axes } = chart_args;
return this.columns_map[x_axis] && y_axes.every((y_axis) => this.columns_map[y_axis]);
}
reset_chart_state() {
this.chart = null;
this.chart_args = null;
this.$charts_wrapper.addClass("hidden");
this.save_view_user_settings({ chart_args: null });
}
get_editing_object(colIndex, rowIndex, value, parent) { get_editing_object(colIndex, rowIndex, value, parent) {
const control = this.render_editing_input(colIndex, value, parent); const control = this.render_editing_input(colIndex, value, parent);
if (!control) return false; if (!control) return false;

View file

@ -608,7 +608,7 @@
} }
&.active { &.active {
color: var(--primary); /*color: var(--primary);*/
font-weight: 600; font-weight: 600;
border-bottom-color: var(--primary); border-bottom-color: var(--primary);
} }

View file

@ -529,7 +529,7 @@
&.active { &.active {
font-weight: 400; font-weight: 400;
border-bottom: 1px solid var(--text-color); border-bottom: 1px solid var(--text-color);
color: var(--text-neutral); /* color: var(--text-neutral); */
padding-bottom: 9px; padding-bottom: 9px;
} }
&:focus-visible { &:focus-visible {

View file

@ -1,8 +1,6 @@
.web-footer { .web-footer {
padding: 3rem 0; padding: 3rem 0;
min-height: 140px;
background-color: var(--fg-color); background-color: var(--fg-color);
border-top: 1px solid $border-color;
margin-top: auto; margin-top: auto;
} }
@ -21,11 +19,11 @@
.footer-child-item a { .footer-child-item a {
font-size: $font-size-sm; font-size: $font-size-sm;
font-weight: 500; font-weight: 500;
color: $gray-700; color: var(--body-text-color);
&:hover { &:hover {
color: $primary; color: var(--body-text-color);
text-decoration: none; text-decoration: underline;
} }
} }
@ -81,7 +79,7 @@
} }
.footer-info { .footer-info {
color: $text-muted; color: var(--body-text-color);
font-size: $font-size-sm; font-size: $font-size-sm;
} }

View file

@ -37,7 +37,6 @@
} }
.navbar-light { .navbar-light {
border-bottom: 1px solid $border-color;
background: $navbar-bg; background: $navbar-bg;
.navbar-toggler .icon { .navbar-toggler .icon {
@ -128,14 +127,15 @@
} }
.navbar-light .navbar-nav .nav-link { .navbar-light .navbar-nav .nav-link {
color: $gray-700; color: var(--body-text-color);
font-size: $font-size-sm; font-size: $font-size-sm;
font-weight: 500; font-weight: 500;
&:hover, &:hover,
&:focus, &:focus,
&.active { &.active {
color: $primary; color: var(--body-text-color);
text-decoration: underline;
} }
} }

View file

@ -90,38 +90,38 @@
} }
.section-padding { .section-padding {
padding-top: 3rem; padding-top: 1rem;
padding-bottom: 3rem; padding-bottom: 1rem;
@include media-breakpoint-up(sm) { @include media-breakpoint-up(sm) {
padding-top: 5rem; padding-top: 2rem;
padding-bottom: 5rem; padding-bottom: 2rem;
} }
@include media-breakpoint-up(xl) { @include media-breakpoint-up(xl) {
padding-top: 8rem; padding-top: 3rem;
padding-bottom: 8rem; padding-bottom: 3rem;
} }
} }
.section-padding-top { .section-padding-top {
padding-top: 3rem; padding-top: 1rem;
@include media-breakpoint-up(sm) { @include media-breakpoint-up(sm) {
padding-top: 5rem; padding-top: 2rem;
} }
@include media-breakpoint-up(xl) { @include media-breakpoint-up(xl) {
padding-top: 8rem; padding-top: 3rem;
} }
} }
.section-padding-bottom { .section-padding-bottom {
padding-bottom: 3rem; padding-bottom: 1rem;
@include media-breakpoint-up(sm) { @include media-breakpoint-up(sm) {
padding-bottom: 5rem; padding-bottom: 2rem;
} }
@include media-breakpoint-up(xl) { @include media-breakpoint-up(xl) {
padding-bottom: 8rem; padding-bottom: 3rem;
} }
} }
@ -230,22 +230,16 @@
padding-bottom: 1px; padding-bottom: 1px;
.nav-link { .nav-link {
color: $gray-800;
font-weight: 500; font-weight: 500;
border: none; border: none;
padding: 1rem 0.5rem; padding: 1rem 0.5rem;
margin-right: 2rem; margin-right: 2rem;
white-space: nowrap; white-space: nowrap;
@include transition(); @include transition();
&:hover {
color: $primary;
}
} }
.nav-link.active, .nav-link.active,
.nav-item.show .nav-link { .nav-item.show .nav-link {
color: darken($primary, 5%);
background-color: transparent; background-color: transparent;
border-bottom: 2px solid $primary; border-bottom: 2px solid $primary;
} }

View file

@ -2,9 +2,9 @@
<div class="container"> <div class="container">
{% include "templates/includes/footer/footer_logo_extension.html" %} {% include "templates/includes/footer/footer_logo_extension.html" %}
{% if footer_items -%} <!-- {% if footer_items -%}
{% include "templates/includes/footer/footer_grouped_links.html" %} {% include "templates/includes/footer/footer_grouped_links.html" %}
{% endif %} {% endif %} -->
{% include "templates/includes/footer/footer_links.html" %} {% include "templates/includes/footer/footer_links.html" %}
{% include "templates/includes/footer/footer_info.html" %} {% include "templates/includes/footer/footer_info.html" %}

View file

@ -1,6 +1,7 @@
<div class="footer-info"> <div class="footer-info">
<div class="row"> <div class="row">
<div class="footer-col-left col-sm-6 col-12"> <!-- <div class="footer-col-left col-sm-6 col-12"> -->
<div class="col-12">
{% if copyright %} {% if copyright %}
&copy; {{ copyright }} &copy; {{ copyright }}
{% endif %} {% endif %}
@ -10,6 +11,7 @@
{% endif %} {% endif %}
</div> </div>
{# powered #} {# powered #}
<!--
<div class="footer-col-right col-sm-6 col-12 footer-powered"> <div class="footer-col-right col-sm-6 col-12 footer-powered">
{% block powered %} {% block powered %}
{%- if footer_powered -%} {%- if footer_powered -%}
@ -19,5 +21,6 @@
{%- endif -%} {%- endif -%}
{% endblock %} {% endblock %}
</div> </div>
-->
</div> </div>
</div> </div>

View file

@ -9,16 +9,18 @@
{% endmacro %} {% endmacro %}
<div class="footer-links"> <div class="footer-links">
<div class="row"> <div class="row">
<div class="footer-col-left col-sm-6"> <!-- <div class="footer-col-left col-sm-6"> -->
<div class="col-12">
{%- for item in footer_items if item.label and not (item.parent_label or item.child_items) and not item.right %} {%- for item in footer_items if item.label and not (item.parent_label or item.child_items) and not item.right %}
{{ footer_link(item) }} {{ footer_link(item) }}
{{ "|" if not loop.last }}
{% endfor -%} {% endfor -%}
</div> </div>
<div class="footer-col-right col-sm-6"> <!-- <div class="footer-col-right col-sm-6">
{%- for item in footer_items if item.label and not (item.parent_label or item.child_items) and item.right %} {%- for item in footer_items if item.label and not (item.parent_label or item.child_items) and item.right %}
{{ footer_link(item) }} {{ footer_link(item) }}
{% endfor -%} {% endfor -%}
</div> </div> -->
</div> </div>
</div> </div>

View file

@ -52,19 +52,10 @@
{% endif %} {% endif %}
{% endmacro %} {% endmacro %}
{% if top_bar_items -%} <ul class="mx-auto navbar-nav">
<ul class="mr-auto navbar-nav">
{%- for item in top_bar_items -%}
{% if not item.parent_label and not item.right -%}
{{ render_item(item, parent=True) }}
{%- endif -%}
{%- endfor %}
</ul>
{%- endif %}
<ul class="ml-auto navbar-nav">
{% include "templates/includes/navbar/navbar_search.html" %} {% include "templates/includes/navbar/navbar_search.html" %}
{%- for item in top_bar_items -%} {%- for item in top_bar_items -%}
{% if not item.parent_label and item.right -%} {% if not item.parent_label -%}
{{ render_item(item, parent=True) }} {{ render_item(item, parent=True) }}
{%- endif -%} {%- endif -%}
{%- endfor %} {%- endfor %}
@ -98,9 +89,12 @@
</div> </div>
{% endif %} {% endif %}
{% include "templates/includes/navbar/navbar_login.html" %}
</ul> </ul>
<ul class="navbar-nav">
{% include "templates/includes/navbar/navbar_login.html" %}
</ul>
{%- if call_to_action -%} {%- if call_to_action -%}
<a class="btn btn-primary navbar-cta" href="{{ call_to_action_url | abs_url }}"> <a class="btn btn-primary navbar-cta" href="{{ call_to_action_url | abs_url }}">
{{ call_to_action }} {{ call_to_action }}

View file

@ -16,6 +16,7 @@ $font-family-sans-serif: "{{ google_font }}", "InterVariable", "Inter", -apple-s
{% if primary_color %}$primary: {{ frappe.db.get_value('Color', primary_color, 'color') }};{% endif -%} {% if primary_color %}$primary: {{ frappe.db.get_value('Color', primary_color, 'color') }};{% endif -%}
{% if dark_color %}$dark: {{ frappe.db.get_value('Color', dark_color, 'color') }};{% endif -%} {% if dark_color %}$dark: {{ frappe.db.get_value('Color', dark_color, 'color') }};{% endif -%}
{% if text_color %}$body-text-color: {{ frappe.db.get_value('Color', text_color, 'color') }};{% endif -%} {% if text_color %}$body-text-color: {{ frappe.db.get_value('Color', text_color, 'color') }};{% endif -%}
{% if light_color %}$light: {{ frappe.db.get_value('Color', light_color, 'color') }};{% endif -%}
{% if background_color %}$body-bg: {{ frappe.db.get_value('Color', background_color, 'color') }};{% endif -%} {% if background_color %}$body-bg: {{ frappe.db.get_value('Color', background_color, 'color') }};{% endif -%}
$enable-shadows: {{ button_shadows and "true" or "false" }}; $enable-shadows: {{ button_shadows and "true" or "false" }};

View file

@ -1,29 +0,0 @@
<nav class="navbar navbar-primary navbar-expand-lg">
<div class="container">
<a class="navbar-brand" href="{{ url_prefix }}{{ home_page or "/" }}">
{%- if brand_html -%}
{{ brand_html }}
{%- elif banner_image -%}
<img src='{{ banner_image }}'>
{%- else -%}
<span>{{ (frappe.get_hooks("brand_html") or [_("Home")])[0] }}</span>
{%- endif -%}
</a>
<button class="navbar-toggler" type="button"
data-toggle="collapse"
data-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent"
aria-expanded="false"
aria-label="Toggle navigation">
<span>
<svg class="icon icon-lg">
<use href="#icon-menu"></use>
</svg>
</span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
{% include "templates/includes/navbar/navbar_items.html" %}
</div>
</div>
</nav>

View file

@ -1,17 +0,0 @@
{
"__islocal": true,
"__unsaved": 1,
"creation": "2021-01-20 13:20:46.147656",
"docstatus": 0,
"doctype": "Web Template",
"fields": [],
"idx": 0,
"modified": "2021-01-20 13:20:46.147656",
"modified_by": "Administrator",
"module": "Website",
"name": "Primary Navbar",
"owner": "Administrator",
"standard": 1,
"template": "",
"type": "Navbar"
}

View file

@ -1 +0,0 @@
{% include "templates/includes/navbar/navbar.html" %}

View file

@ -1,13 +0,0 @@
{
"creation": "2020-08-19 17:49:37.288380",
"docstatus": 0,
"doctype": "Web Template",
"fields": [],
"idx": 0,
"modified": "2020-08-19 17:50:44.342765",
"modified_by": "Administrator",
"name": "Standard Navbar",
"owner": "Administrator",
"standard": 1,
"type": "Navbar"
}

View file

@ -1,20 +1,27 @@
{ {
"background_color": "Background",
"button_gradients": 0, "button_gradients": 0,
"button_rounded_corners": 1, "button_rounded_corners": 1,
"button_shadows": 0, "button_shadows": 0,
"creation": "2015-02-19 13:37:33.925909", "creation": "2015-02-19 13:37:33.925909",
"custom": 0, "custom": 0,
"custom_overrides": "", "custom_overrides": "",
"dark_color": "Primary",
"docstatus": 0, "docstatus": 0,
"doctype": "Website Theme", "doctype": "Website Theme",
"font_properties": "wght:400;500;600;700;800", "font_properties": "wght:400;500;600;700;800",
"google_font": "Ethnocentric",
"idx": 28, "idx": 28,
"modified": "2020-06-15 13:10:16.618476", "ignored_apps": [],
"light_color": "Gold Text",
"modified": "2026-03-17 20:45:47.424219",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Website", "module": "Website",
"name": "Standard", "name": "Standard",
"owner": "Administrator", "owner": "Administrator",
"primary_color": "Primary",
"text_color": "Gold Text",
"theme": "Standard", "theme": "Standard",
"theme_scss": "$enable-shadows: false;\n$enable-gradients: false;\n$enable-rounded: true;\n\n// Bootstrap Variable Overrides\n\n\n@import \"frappe/public/scss/website\";\n\n\n\n// Custom Theme\n", "theme_scss": "\n@import url(\"https://fonts.googleapis.com/css2?family=Ethnocentric:wght:400;500;600;700;800&display=swap\");\n// backward compatibility. deprecated in v15\n$font-family-sans-serif: \"Ethnocentric\", \"InterVariable\", \"Inter\", -apple-system, BlinkMacSystemFont,\n\t\"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\",\n\t\"Droid Sans\", \"Helvetica Neue\", sans-serif;\n\n// override font stack if custom font is set in website theme\n:root {\n\t--font-stack: \"Ethnocentric\", \"InterVariable\", \"Inter\", -apple-system, BlinkMacSystemFont,\n\t\"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\",\n\t\"Droid Sans\", \"Helvetica Neue\", sans-serif !important;\n}\n$primary: #8139c4;$dark: #8139c4;$body-text-color: #e6c96c;$body-bg: #4e3269;$enable-shadows: false;\n$enable-gradients: false;\n$enable-rounded: true;\n\n// Bootstrap Variable Overrides\n\n\n// Import themes from installed apps\n@import \"frappe/public/scss/website.bundle\";\n\n\n\n// Custom Theme\n\n\n:root {\n\t\n\t--primary: #{$primary};\n\t--primary-color: #{$primary};\n\t\n\t--bg-color: #{$body-bg};\n\t\n\t--text-color: #{$body-text-color};\n\t--text-light: #{$body-text-color};\n\t}\n",
"theme_url": "/assets/css/standard_style.css" "theme_url": "/files/website_theme/standard_style.css"
} }

View file

@ -6,5 +6,5 @@
max-width: 100vw; max-width: 100vw;
padding: 0; padding: 0;
margin: 0; margin: 0;
background: var(--bg-light-gray); /* background: var(--bg-light-gray); */
} }