diff --git a/cypress/integration/control_attach.js b/cypress/integration/control_attach.js index 726a1ef036..7df17f4d05 100644 --- a/cypress/integration/control_attach.js +++ b/cypress/integration/control_attach.js @@ -118,7 +118,7 @@ context("Attach Control", () => { //Navigating to the new form for the newly created doctype let doctype = "Test Attach Control"; let dt_in_route = doctype.toLowerCase().replace(/ /g, "-"); - cy.visit(`/app/${dt_in_route}/new`, { + cy.visit(`/desk/${dt_in_route}/new`, { onBeforeLoad(win) { // Mock "window.navigator.mediaDevices" property // to return mock mediaDevices object @@ -144,7 +144,7 @@ context("Attach Control", () => { //Navigating to the new form for the newly created doctype let doctype = "Test Attach Control"; let dt_in_route = doctype.toLowerCase().replace(/ /g, "-"); - cy.visit(`/app/${dt_in_route}/new`, { + cy.visit(`/desk/${dt_in_route}/new`, { onBeforeLoad(win) { // Delete "window.navigator.mediaDevices" property delete win.navigator.mediaDevices; diff --git a/cypress/integration/dashboard.js b/cypress/integration/dashboard.js index 21e3f3f789..8d037b44c8 100644 --- a/cypress/integration/dashboard.js +++ b/cypress/integration/dashboard.js @@ -42,7 +42,7 @@ describe("Dashboard view", { scrollBehavior: false }, () => { true ); - cy.visit(`/app/dashboard-view/${dashboard}`); + cy.visit(`/desk/dashboard-view/${dashboard}`); // expect chart to be loaded cy.findByText(chart).should("be.visible"); diff --git a/cypress/integration/dashboard_links.js b/cypress/integration/dashboard_links.js index 627273ea35..842b2ff12e 100644 --- a/cypress/integration/dashboard_links.js +++ b/cypress/integration/dashboard_links.js @@ -27,7 +27,7 @@ context("Dashboard links", () => { cy.visit("/desk/contact"); cy.clear_filters(); - cy.visit(`/app/user/${cy.config("testUser")}`); + cy.visit(`/desk/user/${cy.config("testUser")}`); //To check if initially the dashboard contains only the "Contact" link and there is no counter cy.select_form_tab("Connections"); @@ -40,7 +40,7 @@ context("Dashboard links", () => { cy.findByRole("button", { name: "Add Contact" }).click(); cy.get('[data-doctype="Contact"][data-fieldname="first_name"]').type("Admin"); cy.findByRole("button", { name: "Save" }).click(); - cy.visit(`/app/user/${cy.config("testUser")}`); + cy.visit(`/desk/user/${cy.config("testUser")}`); //To check if the counter for contact doc is "2" after adding additional contact cy.select_form_tab("Connections"); @@ -62,7 +62,7 @@ context("Dashboard links", () => { }); it("Report link in dashboard", () => { - cy.visit(`/app/user/${cy.config("testUser")}`); + cy.visit(`/desk/user/${cy.config("testUser")}`); cy.select_form_tab("Connections"); cy.get('.document-link[data-doctype="Contact"]').contains("Contact"); cy.window() diff --git a/cypress/integration/form_builder.js b/cypress/integration/form_builder.js index 37780eefce..9faa2072d5 100644 --- a/cypress/integration/form_builder.js +++ b/cypress/integration/form_builder.js @@ -20,7 +20,7 @@ context("Form Builder", () => { }); it("Save without change, check form dirty", () => { - cy.visit(`/app/doctype/${doctype_name}`); + cy.visit(`/desk/doctype/${doctype_name}`); cy.findByRole("tab", { name: "Form" }).click(); // Save without change @@ -37,7 +37,7 @@ context("Form Builder", () => { it("Check if Filters are applied to the link field", () => { // Visit the Form Builder - cy.visit(`/app/doctype/${doctype_name}`); + cy.visit(`/desk/doctype/${doctype_name}`); cy.findByRole("tab", { name: "Form" }).click(); cy.get("[data-fieldname='gender']").click(); @@ -81,7 +81,7 @@ context("Form Builder", () => { }); it("Add empty section and save", () => { - cy.visit(`/app/doctype/${doctype_name}`); + cy.visit(`/desk/doctype/${doctype_name}`); cy.findByRole("tab", { name: "Form" }).click(); let first_section = ".tab-content.active .form-section-container:first"; @@ -97,7 +97,9 @@ context("Form Builder", () => { }); it("Add Table field and check if columns are rendered", () => { - cy.visit(`/app/doctype/${doctype_name}`); + cy.intercept("POST", "/api/method/frappe.desk.search.search_link").as("search_link"); + + cy.visit(`/desk/doctype/${doctype_name}`); cy.findByRole("tab", { name: "Form" }).click(); let first_column = ".tab-content.active .section-columns-container:first .column:first"; @@ -157,7 +159,7 @@ context("Form Builder", () => { }); // not important and was flaky on CI it.skip("Drag Field/Column/Section & Tab", () => { - cy.visit(`/app/doctype/${doctype_name}`); + cy.visit(`/desk/doctype/${doctype_name}`); cy.findByRole("tab", { name: "Form" }).click(); let first_column = ".tab-content.active .section-columns-container:first .column:first"; @@ -218,7 +220,7 @@ context("Form Builder", () => { }); it("Add New Tab/Section/Column to Form", () => { - cy.visit(`/app/doctype/${doctype_name}`); + cy.visit(`/desk/doctype/${doctype_name}`); cy.findByRole("tab", { name: "Form" }).click(); let first_section = ".tab-content.active .form-section-container:first"; @@ -261,7 +263,7 @@ context("Form Builder", () => { }); it("Update Title field Label to New Title through Customize Form", () => { - cy.visit(`/app/doctype/${doctype_name}`); + cy.visit(`/desk/doctype/${doctype_name}`); cy.findByRole("tab", { name: "Form" }).click(); let first_field = @@ -279,7 +281,7 @@ context("Form Builder", () => { }); it("Validate Duplicate Name & reqd + hidden without default logic", () => { - cy.visit(`/app/doctype/${doctype_name}`); + cy.visit(`/desk/doctype/${doctype_name}`); cy.findByRole("tab", { name: "Form" }).click(); let first_column = ".tab-content.active .section-columns-container:first .column:first"; @@ -325,7 +327,7 @@ context("Form Builder", () => { }); it.skip("Undo/Redo", () => { - cy.visit(`/app/doctype/${doctype_name}`); + cy.visit(`/desk/doctype/${doctype_name}`); cy.findByRole("tab", { name: "Form" }).click(); // click on second tab diff --git a/cypress/integration/grid_pagination.js b/cypress/integration/grid_pagination.js index 6a6a3d2d2b..c5763430cc 100644 --- a/cypress/integration/grid_pagination.js +++ b/cypress/integration/grid_pagination.js @@ -70,7 +70,7 @@ context("Grid Pagination", () => { cy.get("@table").find(".current-page-number").should("have.value", "1"); }); // it('deletes all rows', ()=> { - // cy.visit('/app/contact/Test Contact'); + // cy.visit('/desk/contact/Test Contact'); // cy.get('.frappe-control[data-fieldname="phone_nos"]').as('table'); // cy.get('@table').find('.grid-heading-row .grid-row-check').click({force: true}); // cy.get('@table').find('button.grid-remove-all-rows').click(); diff --git a/cypress/integration/relative_time_filters.js b/cypress/integration/relative_time_filters.js index 362d3a219b..8c5aefc9da 100644 --- a/cypress/integration/relative_time_filters.js +++ b/cypress/integration/relative_time_filters.js @@ -4,13 +4,13 @@ // context('Relative Timeframe', () => { // before(() => { // cy.login(); -// cy.visit('/app/website'); +// cy.visit('/desk/website'); // cy.window().its('frappe').then(frappe => { // frappe.call("frappe.tests.ui_test_helpers.create_todo_records"); // }); // }); // it('sets relative timespan filter for last week and filters list', () => { -// cy.visit('/app/List/ToDo/List'); +// cy.visit('/desk/List/ToDo/List'); // cy.clear_filters(); // cy.get('.list-row:contains("this is fourth todo")').should('exist'); // cy.add_filter(); @@ -29,7 +29,7 @@ // cy.wait('@save_user_settings'); // }); // it('sets relative timespan filter for next week and filters list', () => { -// cy.visit('/app/List/ToDo/List'); +// cy.visit('/desk/List/ToDo/List'); // cy.clear_filters(); // cy.get('.list-row:contains("this is fourth todo")').should('exist'); // cy.add_filter(); diff --git a/cypress/integration/report_view.js b/cypress/integration/report_view.js index 8311511e87..25ac7a999e 100644 --- a/cypress/integration/report_view.js +++ b/cypress/integration/report_view.js @@ -21,7 +21,7 @@ context("Report View", () => { it("Field with enabled allow_on_submit should be editable.", () => { cy.intercept("POST", "api/method/frappe.client.set_value").as("value-update"); - cy.visit(`/app/List/${doctype_name}/Report`); + cy.visit(`/desk/List/${doctype_name}/Report`); // check status column added from docstatus cy.get(".dt-row-0 > .dt-cell--col-3").should("contain", "Submitted"); diff --git a/cypress/integration/sidebar.js b/cypress/integration/sidebar.js index aa159dd9c4..72fe152678 100644 --- a/cypress/integration/sidebar.js +++ b/cypress/integration/sidebar.js @@ -1,5 +1,5 @@ const verify_attachment_visibility = (document, is_private) => { - cy.visit(`/app/${document}`); + cy.visit(`/desk/${document}`); const assertion = is_private ? "be.checked" : "not.be.checked"; cy.get(".add-attachment-btn").click(); @@ -60,7 +60,7 @@ context("Sidebar", () => { cy.call("frappe.tests.ui_test_helpers.create_todo_with_attachment_limit", { description: "Sidebar Attachment Access Test ToDo", }).then((todo) => { - cy.visit(`/app/todo/${todo.message.name}`); + cy.visit(`/desk/todo/${todo.message.name}`); attach_file("cypress/fixtures/sample_image.jpg"); cy.get(".explore-link").should("be.visible"); diff --git a/cypress/integration/socket_updates.js b/cypress/integration/socket_updates.js index 4b892d95c7..cb85574f2c 100644 --- a/cypress/integration/socket_updates.js +++ b/cypress/integration/socket_updates.js @@ -13,7 +13,7 @@ context("Realtime updates", () => { it("Shows version conflict warning", { scrollBehavior: false }, () => { cy.insert_doc("ToDo", { description: "old" }).then((doc) => { - cy.visit(`/app/todo/${doc.name}`); + cy.visit(`/desk/todo/${doc.name}`); // make form dirty cy.fill_field("status", "Cancelled", "Select"); diff --git a/cypress/integration/workspace_blocks.js b/cypress/integration/workspace_blocks.js index 842103ec83..589962f344 100644 --- a/cypress/integration/workspace_blocks.js +++ b/cypress/integration/workspace_blocks.js @@ -143,7 +143,7 @@ context("Workspace Blocks", () => { }); it("Number Card Block", () => { - cy.visit("/app/private/test-block-page"); + cy.visit("/desk/private/test-block-page"); cy.create_records([ { doctype: "Number Card", diff --git a/cypress/support/commands.js b/cypress/support/commands.js index b7fa6d1003..8b494a858d 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -263,7 +263,7 @@ Cypress.Commands.add("awesomebar", (text) => { Cypress.Commands.add("new_form", (doctype) => { let dt_in_route = doctype.toLowerCase().replace(/ /g, "-"); - cy.visit(`/app/${dt_in_route}/new`); + cy.visit(`/desk/${dt_in_route}/new`); cy.get("body").should(($body) => { const dataRoute = $body.attr("data-route"); expect(dataRoute).to.match(new RegExp(`^Form/${doctype}/new-${dt_in_route}-`)); @@ -277,7 +277,7 @@ Cypress.Commands.add("select_form_tab", (label) => { Cypress.Commands.add("go_to_list", (doctype) => { let dt_in_route = doctype.toLowerCase().replace(/ /g, "-"); - cy.visit(`/app/${dt_in_route}`); + cy.visit(`/desk/${dt_in_route}`); }); Cypress.Commands.add("clear_cache", () => { diff --git a/frappe/__init__.py b/frappe/__init__.py index f0c299552e..7c20ca44b4 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -1483,9 +1483,9 @@ def get_desk_link(doctype, name, show_title_with_name=False, open_in_new_tab=Fal encoded_name = quote(name) if show_title_with_name and name != title: - html = '{doctype_local} {name}: {title_local}' + html = '{doctype_local} {name}: {title_local}' else: - html = '{doctype_local} {title_local}' + html = '{doctype_local} {title_local}' return html.format( doctype=doctype, diff --git a/frappe/apps.py b/frappe/apps.py index fa43856313..e6eec57126 100644 --- a/frappe/apps.py +++ b/frappe/apps.py @@ -11,8 +11,8 @@ from frappe.core.doctype.installed_applications.installed_applications import ( get_setup_wizard_not_required_apps, ) -# check if route is /app or /app/* and not /app1 or /app1/* -DESK_APP_PATTERN = re.compile(r"^/app(/.*)?$") +# check if route is /desk or /desk/* and not /app1 or /app1/* +DESK_APP_PATTERN = re.compile(r"^/desk(/.*)?$") @frappe.whitelist() diff --git a/frappe/automation/doctype/auto_repeat/auto_repeat.js b/frappe/automation/doctype/auto_repeat/auto_repeat.js index a651b80afa..da86a156f8 100644 --- a/frappe/automation/doctype/auto_repeat/auto_repeat.js +++ b/frappe/automation/doctype/auto_repeat/auto_repeat.js @@ -30,7 +30,7 @@ frappe.ui.form.on("Auto Repeat", { refresh: function (frm) { // auto repeat message if (frm.is_new()) { - let customize_form_link = `${__("Customize Form")}`; + let customize_form_link = `${__("Customize Form")}`; frm.dashboard.set_headline( __('To configure Auto Repeat, enable "Allow Auto Repeat" from {0}.', [ customize_form_link, diff --git a/frappe/core/doctype/deleted_document/deleted_document_list.js b/frappe/core/doctype/deleted_document/deleted_document_list.js index 6a271f5ae9..d3f0843d03 100644 --- a/frappe/core/doctype/deleted_document/deleted_document_list.js +++ b/frappe/core/doctype/deleted_document/deleted_document_list.js @@ -11,7 +11,7 @@ frappe.listview_settings["Deleted Document"] = { if (r.message) { let body = (docnames) => { const html = docnames.map((docname) => { - return `
Execute when a particular Workflow Action Master is executed.
+Execute when a particular Workflow Action Master is executed.
Gets the document which the action is being applied on in the doc variable.
# create a customer with the same name as the given document
diff --git a/frappe/core/doctype/submission_queue/submission_queue.py b/frappe/core/doctype/submission_queue/submission_queue.py
index 29d1afec57..e61a9fda29 100644
--- a/frappe/core/doctype/submission_queue/submission_queue.py
+++ b/frappe/core/doctype/submission_queue/submission_queue.py
@@ -132,7 +132,7 @@ class SubmissionQueue(Document):
{
"message": message.format(
*message_replacements,
- f"here",
+ f"here",
),
"alert": True,
"indicator": "red" if submission_status == "Failed" else "green",
@@ -170,7 +170,7 @@ def queue_submission(doc: Document, action: str, alert: bool = True):
frappe.msgprint(
_(
"This document has already been queued for submission. You can track the progress over {0}."
- ).format(f"here"),
+ ).format(f"here"),
indicator="orange",
alert=True,
)
@@ -184,7 +184,7 @@ def queue_submission(doc: Document, action: str, alert: bool = True):
if alert:
frappe.msgprint(
_("Queued for Submission. You can track the progress over {0}.").format(
- f"here"
+ f"here"
),
indicator="green",
alert=True,
diff --git a/frappe/core/page/permission_manager/permission_manager_help.html b/frappe/core/page/permission_manager/permission_manager_help.html
index 0613713e81..dbfa9ff167 100644
--- a/frappe/core/page/permission_manager/permission_manager_help.html
+++ b/frappe/core/page/permission_manager/permission_manager_help.html
@@ -5,8 +5,8 @@
{%= __("Permissions are set on Roles and Document Types (called DocTypes) by setting rights like Read, Write, Create, Delete, Submit, Cancel, Amend, Report, Import, Export, Print, Email and Set User Permissions.") %}
{%= __("Permissions get applied on Users based on what Roles they are assigned.") %}
{%= __("Roles can be set for users from their User page.") %}
- {%= __("Setup > User") %}
- {%= __("The system provides many pre-defined roles. You can add new roles to set finer permissions.") %} {%= __("Add a New Role") %}
+ {%= __("Setup > User") %}
+ {%= __("The system provides many pre-defined roles. You can add new roles to set finer permissions.") %} {%= __("Add a New Role") %}
{%= __("Permissions are automatically applied to Standard Reports and searches.") %}
{%= __("As a best practice, do not assign the same set of permission rule to different Roles. Instead, set multiple Roles to the same User.") %}
@@ -24,13 +24,13 @@
{%= __("Permissions at level 0 are Document Level permissions, i.e. they are primary for access to the document.") %}
{%= __("If a Role does not have access at Level 0, then higher levels are meaningless.") %}
{%= __("Permissions at higher levels are Field Level permissions. All Fields have a Permission Level set against them and the rules defined at that permissions apply to the field. This is useful in case you want to hide or make certain field read-only for certain Roles.") %}
- {%= __("You can use Customize Form to set levels on fields.") %} {%= __("Setup > Customize Form") %}
+ {%= __("You can use Customize Form to set levels on fields.") %} {%= __("Setup > Customize Form") %}
{%= __("User Permissions") %}:
- {%= __("User Permissions are used to limit users to specific records.") %}
- {%= __("Setup > User Permissions") %}
+ {%= __("Setup > User Permissions") %}
- {%= __("Select Document Types to set which User Permissions are used to limit access.") %}
- {%= __("Once you have set this, the users will only be able access documents (eg. Blog Post) where the link exists (eg. Blogger).") %}
- {%= __("Apart from System Manager, roles with Set User Permissions right can set permissions for other users for that Document Type.") %}
diff --git a/frappe/custom/doctype/customize_form/test_customize_form.py b/frappe/custom/doctype/customize_form/test_customize_form.py
index 0051bb31fb..3d0f544d65 100644
--- a/frappe/custom/doctype/customize_form/test_customize_form.py
+++ b/frappe/custom/doctype/customize_form/test_customize_form.py
@@ -335,7 +335,7 @@ class TestCustomizeForm(IntegrationTestCase):
self.assertFalse([d.name for d in (user_group.links or []) if d.link_doctype == "User Group Member"])
def test_custom_action(self):
- test_route = "/app/List/DocType"
+ test_route = "/desk/List/DocType"
# create a dummy action (route)
d = self.get_customize_form("Event")
diff --git a/frappe/custom/doctype/doctype_layout/doctype_layout.js b/frappe/custom/doctype/doctype_layout/doctype_layout.js
index 9c803e40f6..dd83e15aa1 100644
--- a/frappe/custom/doctype/doctype_layout/doctype_layout.js
+++ b/frappe/custom/doctype/doctype_layout/doctype_layout.js
@@ -40,7 +40,7 @@ frappe.ui.form.on("DocType Layout", {
add_buttons(frm) {
if (!frm.is_new()) {
frm.add_custom_button(__("Go to {0} List", [frm.doc.name]), () => {
- window.open(`/app/${frappe.router.slug(frm.doc.name)}`);
+ window.open(`/desk/${frappe.router.slug(frm.doc.name)}`);
});
frm.add_custom_button(__("Sync {0} Fields", [frm.doc.name]), async () => {
diff --git a/frappe/desk/doctype/dashboard/dashboard.py b/frappe/desk/doctype/dashboard/dashboard.py
index dcc2f49e69..89cdd55428 100644
--- a/frappe/desk/doctype/dashboard/dashboard.py
+++ b/frappe/desk/doctype/dashboard/dashboard.py
@@ -122,7 +122,7 @@ def get_non_standard_warning_message(non_standard_docs_map):
def get_html(docs, doctype):
html = f"{frappe.bold(doctype)}
"
for doc in docs:
- html += f''
+ html += f''
html += "
"
return html
diff --git a/frappe/desk/doctype/note/note.json b/frappe/desk/doctype/note/note.json
index 9a01353943..530e084c19 100644
--- a/frappe/desk/doctype/note/note.json
+++ b/frappe/desk/doctype/note/note.json
@@ -61,7 +61,7 @@
},
{
"bold": 1,
- "description": "Help: To link to another record in the system, use \"/app/note/[Note Name]\" as the Link URL. (don't use \"http://\")",
+ "description": "Help: To link to another record in the system, use \"/desk/note/[Note Name]\" as the Link URL. (don't use \"http://\")",
"fieldname": "content",
"fieldtype": "Text Editor",
"in_global_search": 1,
diff --git a/frappe/desk/doctype/system_health_report/system_health_report.json b/frappe/desk/doctype/system_health_report/system_health_report.json
index 4a7352ba88..40f2446e5b 100644
--- a/frappe/desk/doctype/system_health_report/system_health_report.json
+++ b/frappe/desk/doctype/system_health_report/system_health_report.json
@@ -77,7 +77,7 @@
"options": "System Health Report Workers"
},
{
- "documentation_url": "/app/rq-worker",
+ "documentation_url": "/desk/rq-worker",
"fieldname": "total_background_workers",
"fieldtype": "Int",
"label": "Total Background Workers"
@@ -89,7 +89,7 @@
"label": "Background Jobs"
},
{
- "documentation_url": "/app/rq-job",
+ "documentation_url": "/desk/rq-job",
"fieldname": "scheduler_status",
"fieldtype": "Data",
"label": "Scheduler Status"
@@ -140,7 +140,7 @@
"label": "Outgoing Emails (Last 7 days)"
},
{
- "documentation_url": "/app/email-queue?status=Error",
+ "documentation_url": "/desk/email-queue?status=Error",
"fieldname": "failed_emails",
"fieldtype": "Int",
"label": "Failed Emails"
@@ -151,7 +151,7 @@
"label": "Total Outgoing Emails"
},
{
- "documentation_url": "/app/email-queue?status=Not+Sent",
+ "documentation_url": "/desk/email-queue?status=Not+Sent",
"fieldname": "pending_emails",
"fieldtype": "Int",
"label": "Pending Emails"
@@ -162,13 +162,13 @@
"label": "Incoming Emails (Last 7 days)"
},
{
- "documentation_url": "/app/unhandled-email",
+ "documentation_url": "/desk/unhandled-email",
"fieldname": "unhandled_emails",
"fieldtype": "Int",
"label": "Unhandled Emails"
},
{
- "documentation_url": "/app/communication?communication_type=Communication&sent_or_received=Received",
+ "documentation_url": "/desk/communication?communication_type=Communication&sent_or_received=Received",
"fieldname": "handled_emails",
"fieldtype": "Int",
"label": "Handled Emails"
@@ -179,7 +179,7 @@
"label": "Errors"
},
{
- "documentation_url": "/app/error-log",
+ "documentation_url": "/desk/error-log",
"fieldname": "total_errors",
"fieldtype": "Int",
"label": "Total Errors (last 1 day)"
@@ -205,7 +205,7 @@
"fieldtype": "Column Break"
},
{
- "documentation_url": "/app/query-report/Database Storage Usage By Tables",
+ "documentation_url": "/desk/query-report/Database Storage Usage By Tables",
"fieldname": "top_db_tables",
"fieldtype": "Table",
"label": "Storage Usage By Table",
@@ -265,13 +265,13 @@
"fieldtype": "Column Break"
},
{
- "documentation_url": "/app/backups",
+ "documentation_url": "/desk/backups",
"fieldname": "onsite_backups",
"fieldtype": "Int",
"label": "Number of onsite backups"
},
{
- "documentation_url": "/app/user",
+ "documentation_url": "/desk/user",
"fieldname": "total_users",
"fieldtype": "Int",
"label": "Total Users"
@@ -286,7 +286,7 @@
"label": "New Users (Last 30 days)"
},
{
- "documentation_url": "/app/activity-log?status=Failed&operation=Login",
+ "documentation_url": "/desk/activity-log?status=Failed&operation=Login",
"fieldname": "failed_logins",
"fieldtype": "Int",
"label": "Failed Logins (Last 30 days)"
@@ -353,7 +353,7 @@
"label": "Realtime (SocketIO)"
},
{
- "documentation_url": "/app/rq-job",
+ "documentation_url": "/desk/rq-job",
"fieldname": "background_jobs_check",
"fieldtype": "Data",
"label": "Background Jobs Check"
diff --git a/frappe/desk/doctype/workspace/workspace.js b/frappe/desk/doctype/workspace/workspace.js
index cd53041fe7..797682a50b 100644
--- a/frappe/desk/doctype/workspace/workspace.js
+++ b/frappe/desk/doctype/workspace/workspace.js
@@ -9,7 +9,7 @@ frappe.ui.form.on("Workspace", {
refresh: function (frm) {
frm.enable_save();
- let url = `/app/${
+ let url = `/desk/${
frm.doc.public
? frappe.router.slug(frm.doc.title)
: "private/" + frappe.router.slug(frm.doc.title)
diff --git a/frappe/desk/report/todo/todo.py b/frappe/desk/report/todo/todo.py
index 8d600888eb..f49ffe3bed 100644
--- a/frappe/desk/report/todo/todo.py
+++ b/frappe/desk/report/todo/todo.py
@@ -46,7 +46,7 @@ def execute(filters=None):
for todo in todo_list:
if todo.owner == frappe.session.user or todo.assigned_by == frappe.session.user:
if todo.reference_type:
- todo.reference = """{}: {}""".format(
+ todo.reference = """{}: {}""".format(
todo.reference_type,
todo.reference_name,
todo.reference_type,
diff --git a/frappe/desktop_icon/framework.json b/frappe/desktop_icon/framework.json
index 8880bd3d7e..93fb518fa8 100644
--- a/frappe/desktop_icon/framework.json
+++ b/frappe/desktop_icon/framework.json
@@ -7,7 +7,7 @@
"icon_type": "App",
"idx": 0,
"label": "Framework",
- "link": "/app/build",
+ "link": "/desk/build",
"link_type": "External",
"logo_url": "/assets/frappe/images/frappe-framework-logo.svg",
"modified": "2025-12-12 07:36:09.059666",
diff --git a/frappe/email/doctype/notification/notification.js b/frappe/email/doctype/notification/notification.js
index ba9a33e95a..a943e26862 100644
--- a/frappe/email/doctype/notification/notification.js
+++ b/frappe/email/doctype/notification/notification.js
@@ -257,7 +257,7 @@ frappe.ui.form.on("Notification", {
frm.set_df_property(
"channel",
"description",
- `To use SMS Channel, initialize SMS Settings.`
+ `To use SMS Channel, initialize SMS Settings.`
);
} else {
frm.set_df_property("channel", "description", ` `);
diff --git a/frappe/hooks.py b/frappe/hooks.py
index 64f2b4b498..ab1beae09b 100644
--- a/frappe/hooks.py
+++ b/frappe/hooks.py
@@ -544,7 +544,7 @@ standard_help_items = [
{
"item_label": "System Health",
"item_type": "Route",
- "route": "/app/system-health-report",
+ "route": "/desk/system-health-report",
"is_standard": 1,
},
{
diff --git a/frappe/integrations/doctype/google_calendar/google_calendar.js b/frappe/integrations/doctype/google_calendar/google_calendar.js
index 977dee8dfe..80ef88010e 100644
--- a/frappe/integrations/doctype/google_calendar/google_calendar.js
+++ b/frappe/integrations/doctype/google_calendar/google_calendar.js
@@ -6,7 +6,7 @@ frappe.ui.form.on("Google Calendar", {
if (frm.is_new()) {
frm.dashboard.set_headline(
__("To use Google Calendar, enable {0}.", [
- `${__("Google Settings")}`,
+ `${__("Google Settings")}`,
])
);
}
diff --git a/frappe/integrations/doctype/google_contacts/google_contacts.js b/frappe/integrations/doctype/google_contacts/google_contacts.js
index 06289b0ca5..112582d2c3 100644
--- a/frappe/integrations/doctype/google_contacts/google_contacts.js
+++ b/frappe/integrations/doctype/google_contacts/google_contacts.js
@@ -6,7 +6,7 @@ frappe.ui.form.on("Google Contacts", {
if (!frm.doc.enable) {
frm.dashboard.set_headline(
__("To use Google Contacts, enable {0}.", [
- `${__("Google Settings")}`,
+ `${__("Google Settings")}`,
])
);
}
diff --git a/frappe/integrations/doctype/google_contacts/google_contacts.py b/frappe/integrations/doctype/google_contacts/google_contacts.py
index 711065b29f..c0381ea356 100644
--- a/frappe/integrations/doctype/google_contacts/google_contacts.py
+++ b/frappe/integrations/doctype/google_contacts/google_contacts.py
@@ -64,7 +64,7 @@ def authorize_access(g_contact, reauthorize=False, code=None):
return oauth_obj.get_authentication_url(
{
"g_contact": g_contact,
- "redirect": f"/app/Form/{quote('Google Contacts')}/{quote(g_contact)}",
+ "redirect": f"/desk/Form/{quote('Google Contacts')}/{quote(g_contact)}",
},
)
diff --git a/frappe/integrations/google_oauth.py b/frappe/integrations/google_oauth.py
index 5aab40ce0c..a62c800094 100644
--- a/frappe/integrations/google_oauth.py
+++ b/frappe/integrations/google_oauth.py
@@ -49,7 +49,7 @@ class GoogleOAuth:
self.validate_google_settings()
def validate_google_settings(self):
- google_settings = "Google Settings"
+ google_settings = "Google Settings"
if not self.google_settings.enable:
frappe.throw(frappe._("Please enable {} before continuing.").format(google_settings))
diff --git a/frappe/printing/page/print/print.js b/frappe/printing/page/print/print.js
index dde61d5580..e20859348a 100644
--- a/frappe/printing/page/print/print.js
+++ b/frappe/printing/page/print/print.js
@@ -128,7 +128,7 @@ frappe.ui.form.PrintView = class {
description =
"", [
- `${__(
+ `${__(
"Repeat Header and Footer"
)}`,
]);
@@ -202,7 +202,7 @@ frappe.ui.form.PrintView = class {
if (!cint(frappe.boot.sysdefaults.disable_product_suggestion)) {
if (Object.keys(frappe.boot.versions).includes("print_designer")) {
this.page.add_inner_message(`
-
+
${__("Try the new Print Designer")}
`);
diff --git a/frappe/public/js/form_builder/components/Field.vue b/frappe/public/js/form_builder/components/Field.vue
index f6e31a2da3..20c9bb266b 100644
--- a/frappe/public/js/form_builder/components/Field.vue
+++ b/frappe/public/js/form_builder/components/Field.vue
@@ -184,7 +184,7 @@ function is_filter_applied() {
function open_child_doctype() {
if (!props.field?.df?.options) return;
- window.open(`/app/doctype/${props.field.df.options}`, "_blank");
+ window.open(`/desk/doctype/${props.field.df.options}`, "_blank");
}
onMounted(() => selected.value && label_input.value.focus_on_label());
diff --git a/frappe/public/js/frappe/form/form.js b/frappe/public/js/frappe/form/form.js
index eb0dc7e8ae..69bab25f06 100644
--- a/frappe/public/js/frappe/form/form.js
+++ b/frappe/public/js/frappe/form/form.js
@@ -1930,7 +1930,7 @@ frappe.ui.form.Form = class FrappeForm {
return `
${label}
@@ -2240,7 +2240,7 @@ frappe.ui.form.Form = class FrappeForm {
secondary = `
- ${__(
"All Submissions"
@@ -2251,7 +2251,7 @@ frappe.ui.form.Form = class FrappeForm {
let html = `
- ${submission_label} (${r.message.status})${secondary}
+ ${submission_label} (${r.message.status})${secondary}
`;
diff --git a/frappe/public/js/frappe/form/formatters.js b/frappe/public/js/frappe/form/formatters.js
index 7ce71659a9..e2984e952a 100644
--- a/frappe/public/js/frappe/form/formatters.js
+++ b/frappe/public/js/frappe/form/formatters.js
@@ -202,7 +202,7 @@ frappe.form.formatters = {
} else if (docfield && doctype) {
if (frappe.model.can_read(doctype)) {
const a = document.createElement("a");
- a.href = `/app/${encodeURIComponent(
+ a.href = `/desk/${encodeURIComponent(
frappe.router.slug(doctype)
)}/${encodeURIComponent(original_value)}`;
a.dataset.doctype = doctype;
diff --git a/frappe/public/js/frappe/form/linked_with.js b/frappe/public/js/frappe/form/linked_with.js
index 99b265851e..12c5dc4f6b 100644
--- a/frappe/public/js/frappe/form/linked_with.js
+++ b/frappe/public/js/frappe/form/linked_with.js
@@ -72,7 +72,7 @@ frappe.ui.form.LinkedWith = class LinkedWith {
return ``;
diff --git a/frappe/public/js/frappe/form/multi_select_dialog.js b/frappe/public/js/frappe/form/multi_select_dialog.js
index d02ad0974c..1a3eb1359f 100644
--- a/frappe/public/js/frappe/form/multi_select_dialog.js
+++ b/frappe/public/js/frappe/form/multi_select_dialog.js
@@ -469,7 +469,7 @@ frappe.ui.form.MultiSelectDialog = class MultiSelectDialog {
result[column] || ""
)}">${__(result[column] || "")}`
: `
${__(result[column] || "")}`
diff --git a/frappe/public/js/frappe/form/templates/print_layout.html b/frappe/public/js/frappe/form/templates/print_layout.html
index f65eb86bd4..caab6c662f 100644
--- a/frappe/public/js/frappe/form/templates/print_layout.html
+++ b/frappe/public/js/frappe/form/templates/print_layout.html
@@ -31,7 +31,7 @@