@@ -2,7 +2,7 @@ context('API Resources', () => { | |||||
before(() => { | before(() => { | ||||
cy.visit('/login'); | cy.visit('/login'); | ||||
cy.login(); | cy.login(); | ||||
cy.visit('/desk#workspace/Website'); | |||||
cy.visit('/app#workspace/Website'); | |||||
}); | }); | ||||
it('Creates two Comments', () => { | it('Creates two Comments', () => { | ||||
@@ -2,7 +2,7 @@ context('Awesome Bar', () => { | |||||
before(() => { | before(() => { | ||||
cy.visit('/login'); | cy.visit('/login'); | ||||
cy.login(); | cy.login(); | ||||
cy.visit('/desk#workspace/Website'); | |||||
cy.visit('/app#workspace/Website'); | |||||
}); | }); | ||||
beforeEach(() => { | beforeEach(() => { | ||||
@@ -16,7 +16,7 @@ context('Awesome Bar', () => { | |||||
cy.get('h1').should('contain', 'To Do'); | cy.get('h1').should('contain', 'To Do'); | ||||
cy.location('hash').should('eq', '#List/ToDo/List'); | |||||
cy.location('hash').should('eq', '/app/List/ToDo/List'); | |||||
}); | }); | ||||
it('find text in doctype list', () => { | it('find text in doctype list', () => { | ||||
@@ -1,7 +1,7 @@ | |||||
context('Control Barcode', () => { | context('Control Barcode', () => { | ||||
beforeEach(() => { | beforeEach(() => { | ||||
cy.login(); | cy.login(); | ||||
cy.visit('/desk#workspace/Website'); | |||||
cy.visit('/app#workspace/Website'); | |||||
}); | }); | ||||
function get_dialog_with_barcode() { | function get_dialog_with_barcode() { | ||||
@@ -1,7 +1,7 @@ | |||||
context('Control Duration', () => { | context('Control Duration', () => { | ||||
before(() => { | before(() => { | ||||
cy.login(); | cy.login(); | ||||
cy.visit('/desk#workspace/Website'); | |||||
cy.visit('/app#workspace/Website'); | |||||
}); | }); | ||||
function get_dialog_with_duration(hide_days=0, hide_seconds=0) { | function get_dialog_with_duration(hide_days=0, hide_seconds=0) { | ||||
@@ -1,11 +1,11 @@ | |||||
context('Control Link', () => { | context('Control Link', () => { | ||||
before(() => { | before(() => { | ||||
cy.login(); | cy.login(); | ||||
cy.visit('/desk#workspace/Website'); | |||||
cy.visit('/app#workspace/Website'); | |||||
}); | }); | ||||
beforeEach(() => { | beforeEach(() => { | ||||
cy.visit('/desk#workspace/Website'); | |||||
cy.visit('/app#workspace/Website'); | |||||
cy.create_records({ | cy.create_records({ | ||||
doctype: 'ToDo', | doctype: 'ToDo', | ||||
description: 'this is a test todo for link' | description: 'this is a test todo for link' | ||||
@@ -77,7 +77,7 @@ context('Control Link', () => { | |||||
cy.get('.frappe-control[data-fieldname=link] .link-btn') | cy.get('.frappe-control[data-fieldname=link] .link-btn') | ||||
.should('be.visible') | .should('be.visible') | ||||
.click(); | .click(); | ||||
cy.location('hash').should('eq', `#Form/ToDo/${todos[0]}`); | |||||
cy.location('hash').should('eq', `/app/Form/ToDo/${todos[0]}`); | |||||
}); | }); | ||||
}); | }); | ||||
}); | }); |
@@ -1,7 +1,7 @@ | |||||
context('Control Rating', () => { | context('Control Rating', () => { | ||||
before(() => { | before(() => { | ||||
cy.login(); | cy.login(); | ||||
cy.visit('/desk#workspace/Website'); | |||||
cy.visit('/app#workspace/Website'); | |||||
}); | }); | ||||
function get_dialog_with_rating() { | function get_dialog_with_rating() { | ||||
@@ -4,7 +4,7 @@ const doctype_name = datetime_doctype.name; | |||||
context('Control Date, Time and DateTime', () => { | context('Control Date, Time and DateTime', () => { | ||||
before(() => { | before(() => { | ||||
cy.login(); | cy.login(); | ||||
cy.visit('/desk#workspace/Website'); | |||||
cy.visit('/app#workspace/Website'); | |||||
return cy.insert_doc('DocType', datetime_doctype, true); | return cy.insert_doc('DocType', datetime_doctype, true); | ||||
}); | }); | ||||
@@ -1,7 +1,7 @@ | |||||
context('Depends On', () => { | context('Depends On', () => { | ||||
before(() => { | before(() => { | ||||
cy.login(); | cy.login(); | ||||
cy.visit('/desk#workspace/Website'); | |||||
cy.visit('/app#workspace/Website'); | |||||
return cy.window().its('frappe').then(frappe => { | return cy.window().its('frappe').then(frappe => { | ||||
return frappe.call('frappe.tests.ui_test_helpers.create_doctype', { | return frappe.call('frappe.tests.ui_test_helpers.create_doctype', { | ||||
name: 'Test Depends On', | name: 'Test Depends On', | ||||
@@ -1,7 +1,7 @@ | |||||
context('FileUploader', () => { | context('FileUploader', () => { | ||||
before(() => { | before(() => { | ||||
cy.login(); | cy.login(); | ||||
cy.visit('/desk#workspace/Website'); | |||||
cy.visit('/app#workspace/Website'); | |||||
}); | }); | ||||
function open_upload_dialog() { | function open_upload_dialog() { | ||||
@@ -1,13 +1,13 @@ | |||||
context('Form', () => { | context('Form', () => { | ||||
before(() => { | before(() => { | ||||
cy.login(); | cy.login(); | ||||
cy.visit('/desk#workspace/Website'); | |||||
cy.visit('/app#workspace/Website'); | |||||
return cy.window().its('frappe').then(frappe => { | return cy.window().its('frappe').then(frappe => { | ||||
return frappe.call("frappe.tests.ui_test_helpers.create_contact_records"); | return frappe.call("frappe.tests.ui_test_helpers.create_contact_records"); | ||||
}); | }); | ||||
}); | }); | ||||
it('create a new form', () => { | it('create a new form', () => { | ||||
cy.visit('/desk#Form/ToDo/New ToDo 1'); | |||||
cy.visit('/app/Form/ToDo/New ToDo 1'); | |||||
cy.fill_field('description', 'this is a test todo', 'Text Editor').blur(); | cy.fill_field('description', 'this is a test todo', 'Text Editor').blur(); | ||||
cy.wait(300); | cy.wait(300); | ||||
cy.get('.page-title').should('contain', 'Not Saved'); | cy.get('.page-title').should('contain', 'Not Saved'); | ||||
@@ -18,20 +18,20 @@ context('Form', () => { | |||||
}).as('form_save'); | }).as('form_save'); | ||||
cy.get('.primary-action').click(); | cy.get('.primary-action').click(); | ||||
cy.wait('@form_save').its('status').should('eq', 200); | cy.wait('@form_save').its('status').should('eq', 200); | ||||
cy.visit('/desk#List/ToDo'); | |||||
cy.location('hash').should('eq', '#List/ToDo/List'); | |||||
cy.visit('/app/List/ToDo'); | |||||
cy.location('hash').should('eq', '/app/List/ToDo/List'); | |||||
cy.get('h1').should('be.visible').and('contain', 'To Do'); | cy.get('h1').should('be.visible').and('contain', 'To Do'); | ||||
cy.get('.list-row').should('contain', 'this is a test todo'); | cy.get('.list-row').should('contain', 'this is a test todo'); | ||||
}); | }); | ||||
it('navigates between documents with child table list filters applied', () => { | it('navigates between documents with child table list filters applied', () => { | ||||
cy.visit('/desk#List/Contact'); | |||||
cy.location('hash').should('eq', '#List/Contact/List'); | |||||
cy.visit('/app/List/Contact'); | |||||
cy.location('hash').should('eq', '/app/List/Contact/List'); | |||||
cy.get('.tag-filters-area .btn:contains("Add Filter")').click(); | cy.get('.tag-filters-area .btn:contains("Add Filter")').click(); | ||||
cy.get('.fieldname-select-area').should('exist'); | cy.get('.fieldname-select-area').should('exist'); | ||||
cy.get('.fieldname-select-area input').type('Number{enter}', { force: true }); | cy.get('.fieldname-select-area input').type('Number{enter}', { force: true }); | ||||
cy.get('.filter-field .input-with-feedback.form-control').type('123', { force: true }); | cy.get('.filter-field .input-with-feedback.form-control').type('123', { force: true }); | ||||
cy.get('.filter-box .btn:contains("Apply")').click({ force: true }); | cy.get('.filter-box .btn:contains("Apply")').click({ force: true }); | ||||
cy.visit('/desk#Form/Contact/Test Form Contact 3'); | |||||
cy.visit('/app/Form/Contact/Test Form Contact 3'); | |||||
cy.get('.prev-doc').should('be.visible').click(); | cy.get('.prev-doc').should('be.visible').click(); | ||||
cy.get('.msgprint-dialog .modal-body').contains('No further records').should('be.visible'); | cy.get('.msgprint-dialog .modal-body').contains('No further records').should('be.visible'); | ||||
cy.get('.btn-modal-close:visible').click(); | cy.get('.btn-modal-close:visible').click(); | ||||
@@ -50,7 +50,7 @@ context('Form', () => { | |||||
let website_input = 'website.in'; | let website_input = 'website.in'; | ||||
let expectBackgroundColor = 'rgb(255, 220, 220)'; | let expectBackgroundColor = 'rgb(255, 220, 220)'; | ||||
cy.visit('/desk#Form/Contact/New Contact 1'); | |||||
cy.visit('/app/Form/Contact/New Contact 1'); | |||||
cy.get('.frappe-control[data-fieldname="email_ids"]').as('table'); | cy.get('.frappe-control[data-fieldname="email_ids"]').as('table'); | ||||
cy.get('@table').find('button.grid-add-row').click(); | cy.get('@table').find('button.grid-add-row').click(); | ||||
cy.get('.grid-body .rows [data-fieldname="email_id"]').click(); | cy.get('.grid-body .rows [data-fieldname="email_id"]').click(); | ||||
@@ -1,24 +1,24 @@ | |||||
context('Grid Pagination', () => { | context('Grid Pagination', () => { | ||||
beforeEach(() => { | beforeEach(() => { | ||||
cy.login(); | cy.login(); | ||||
cy.visit('/desk#workspace/Website'); | |||||
cy.visit('/app#workspace/Website'); | |||||
}); | }); | ||||
before(() => { | before(() => { | ||||
cy.login(); | cy.login(); | ||||
cy.visit('/desk#workspace/Website'); | |||||
cy.visit('/app#workspace/Website'); | |||||
return cy.window().its('frappe').then(frappe => { | return cy.window().its('frappe').then(frappe => { | ||||
return frappe.call("frappe.tests.ui_test_helpers.create_contact_phone_nos_records"); | return frappe.call("frappe.tests.ui_test_helpers.create_contact_phone_nos_records"); | ||||
}); | }); | ||||
}); | }); | ||||
it('creates pages for child table', () => { | it('creates pages for child table', () => { | ||||
cy.visit('/desk#Form/Contact/Test Contact'); | |||||
cy.visit('/app/Form/Contact/Test Contact'); | |||||
cy.get('.frappe-control[data-fieldname="phone_nos"]').as('table'); | cy.get('.frappe-control[data-fieldname="phone_nos"]').as('table'); | ||||
cy.get('@table').find('.current-page-number').should('contain', '1'); | cy.get('@table').find('.current-page-number').should('contain', '1'); | ||||
cy.get('@table').find('.total-page-number').should('contain', '20'); | cy.get('@table').find('.total-page-number').should('contain', '20'); | ||||
cy.get('@table').find('.grid-body .grid-row').should('have.length', 50); | cy.get('@table').find('.grid-body .grid-row').should('have.length', 50); | ||||
}); | }); | ||||
it('goes to the next and previous page', () => { | it('goes to the next and previous page', () => { | ||||
cy.visit('/desk#Form/Contact/Test Contact'); | |||||
cy.visit('/app/Form/Contact/Test Contact'); | |||||
cy.get('.frappe-control[data-fieldname="phone_nos"]').as('table'); | cy.get('.frappe-control[data-fieldname="phone_nos"]').as('table'); | ||||
cy.get('@table').find('.next-page').click(); | cy.get('@table').find('.next-page').click(); | ||||
cy.get('@table').find('.current-page-number').should('contain', '2'); | cy.get('@table').find('.current-page-number').should('contain', '2'); | ||||
@@ -28,7 +28,7 @@ context('Grid Pagination', () => { | |||||
cy.get('@table').find('.grid-body .grid-row').first().should('have.attr', 'data-idx', '1'); | cy.get('@table').find('.grid-body .grid-row').first().should('have.attr', 'data-idx', '1'); | ||||
}); | }); | ||||
it('adds and deletes rows and changes page', ()=> { | it('adds and deletes rows and changes page', ()=> { | ||||
cy.visit('/desk#Form/Contact/Test Contact'); | |||||
cy.visit('/app/Form/Contact/Test Contact'); | |||||
cy.get('.frappe-control[data-fieldname="phone_nos"]').as('table'); | cy.get('.frappe-control[data-fieldname="phone_nos"]').as('table'); | ||||
cy.get('@table').find('button.grid-add-row').click(); | cy.get('@table').find('button.grid-add-row').click(); | ||||
cy.get('@table').find('.grid-body .row-index').should('contain', 1001); | cy.get('@table').find('.grid-body .row-index').should('contain', 1001); | ||||
@@ -41,7 +41,7 @@ context('Grid Pagination', () => { | |||||
cy.get('@table').find('.total-page-number').should('contain', '20'); | cy.get('@table').find('.total-page-number').should('contain', '20'); | ||||
}); | }); | ||||
// it('deletes all rows', ()=> { | // it('deletes all rows', ()=> { | ||||
// cy.visit('/desk#Form/Contact/Test Contact'); | |||||
// cy.visit('/app/Form/Contact/Test Contact'); | |||||
// cy.get('.frappe-control[data-fieldname="phone_nos"]').as('table'); | // 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('.grid-heading-row .grid-row-check').click({force: true}); | ||||
// cy.get('@table').find('button.grid-remove-all-rows').click(); | // cy.get('@table').find('button.grid-remove-all-rows').click(); | ||||
@@ -1,7 +1,7 @@ | |||||
context('List View', () => { | context('List View', () => { | ||||
before(() => { | before(() => { | ||||
cy.login(); | cy.login(); | ||||
cy.visit('/desk#workspace/Website'); | |||||
cy.visit('/app#workspace/Website'); | |||||
return cy.window().its('frappe').then(frappe => { | return cy.window().its('frappe').then(frappe => { | ||||
return frappe.xcall("frappe.tests.ui_test_helpers.setup_workflow"); | return frappe.xcall("frappe.tests.ui_test_helpers.setup_workflow"); | ||||
}); | }); | ||||
@@ -1,16 +1,16 @@ | |||||
context('List View Settings', () => { | context('List View Settings', () => { | ||||
beforeEach(() => { | beforeEach(() => { | ||||
cy.login(); | cy.login(); | ||||
cy.visit('/desk#workspace/Website'); | |||||
cy.visit('/app#workspace/Website'); | |||||
}); | }); | ||||
it('Default settings', () => { | it('Default settings', () => { | ||||
cy.visit('/desk#List/DocType/List'); | |||||
cy.visit('/app/List/DocType/List'); | |||||
cy.get('.list-count').should('contain', "20 of"); | cy.get('.list-count').should('contain', "20 of"); | ||||
cy.get('.sidebar-stat').should('contain', "Tags"); | cy.get('.sidebar-stat').should('contain', "Tags"); | ||||
}); | }); | ||||
it('disable count and sidebar stats then verify', () => { | it('disable count and sidebar stats then verify', () => { | ||||
cy.wait(300); | cy.wait(300); | ||||
cy.visit('/desk#List/DocType/List'); | |||||
cy.visit('/app/List/DocType/List'); | |||||
cy.wait(300); | cy.wait(300); | ||||
cy.get('.list-count').should('contain', "20 of"); | cy.get('.list-count').should('contain', "20 of"); | ||||
cy.get('button').contains('Menu').click(); | cy.get('button').contains('Menu').click(); | ||||
@@ -35,7 +35,7 @@ context('Login', () => { | |||||
cy.get('#login_password').type(Cypress.config('adminPassword')); | cy.get('#login_password').type(Cypress.config('adminPassword')); | ||||
cy.get('.btn-login').click(); | cy.get('.btn-login').click(); | ||||
cy.location('pathname').should('eq', '/desk'); | |||||
cy.location('pathname').should('eq', '/app'); | |||||
cy.window().its('frappe.session.user').should('eq', 'Administrator'); | cy.window().its('frappe.session.user').should('eq', 'Administrator'); | ||||
}); | }); | ||||
@@ -1,11 +1,11 @@ | |||||
context('Query Report', () => { | context('Query Report', () => { | ||||
before(() => { | before(() => { | ||||
cy.login(); | cy.login(); | ||||
cy.visit('/desk#workspace/Website'); | |||||
cy.visit('/app#workspace/Website'); | |||||
}); | }); | ||||
it('add custom column in report', () => { | it('add custom column in report', () => { | ||||
cy.visit('/desk#query-report/Permitted Documents For User'); | |||||
cy.visit('/app#query-report/Permitted Documents For User'); | |||||
cy.get('div[class="page-form flex"]', {timeout: 60000}).should('have.length', 1).then(()=>{ | cy.get('div[class="page-form flex"]', {timeout: 60000}).should('have.length', 1).then(()=>{ | ||||
cy.get('#page-query-report input[data-fieldname="user"]').as('input'); | cy.get('#page-query-report input[data-fieldname="user"]').as('input'); | ||||
@@ -4,14 +4,14 @@ context('Recorder', () => { | |||||
}); | }); | ||||
it('Navigate to Recorder', () => { | it('Navigate to Recorder', () => { | ||||
cy.visit('/desk#workspace/Website'); | |||||
cy.visit('/app#workspace/Website'); | |||||
cy.awesomebar('recorder'); | cy.awesomebar('recorder'); | ||||
cy.get('h1').should('contain', 'Recorder'); | cy.get('h1').should('contain', 'Recorder'); | ||||
cy.location('hash').should('eq', '#recorder'); | cy.location('hash').should('eq', '#recorder'); | ||||
}); | }); | ||||
it('Recorder Empty State', () => { | it('Recorder Empty State', () => { | ||||
cy.visit('/desk#recorder'); | |||||
cy.visit('/app#recorder'); | |||||
cy.get('.title-text').should('contain', 'Recorder'); | cy.get('.title-text').should('contain', 'Recorder'); | ||||
cy.get('.indicator').should('contain', 'Inactive').should('have.class', 'red'); | cy.get('.indicator').should('contain', 'Inactive').should('have.class', 'red'); | ||||
@@ -24,21 +24,21 @@ context('Recorder', () => { | |||||
}); | }); | ||||
it('Recorder Start', () => { | it('Recorder Start', () => { | ||||
cy.visit('/desk#recorder'); | |||||
cy.visit('/app#recorder'); | |||||
cy.get('.primary-action').should('contain', 'Start').click(); | cy.get('.primary-action').should('contain', 'Start').click(); | ||||
cy.get('.indicator').should('contain', 'Active').should('have.class', 'green'); | cy.get('.indicator').should('contain', 'Active').should('have.class', 'green'); | ||||
cy.get('.msg-box').should('contain', 'No Requests'); | cy.get('.msg-box').should('contain', 'No Requests'); | ||||
cy.server(); | cy.server(); | ||||
cy.visit('/desk#List/DocType/List'); | |||||
cy.visit('/app/List/DocType/List'); | |||||
cy.route('POST', '/api/method/frappe.desk.reportview.get').as('list_refresh'); | cy.route('POST', '/api/method/frappe.desk.reportview.get').as('list_refresh'); | ||||
cy.wait('@list_refresh'); | cy.wait('@list_refresh'); | ||||
cy.get('.title-text').should('contain', 'DocType'); | cy.get('.title-text').should('contain', 'DocType'); | ||||
cy.get('.list-count').should('contain', '20 of '); | cy.get('.list-count').should('contain', '20 of '); | ||||
cy.visit('/desk#recorder'); | |||||
cy.visit('/app#recorder'); | |||||
cy.get('.title-text').should('contain', 'Recorder'); | cy.get('.title-text').should('contain', 'Recorder'); | ||||
cy.get('.result-list').should('contain', '/api/method/frappe.desk.reportview.get'); | cy.get('.result-list').should('contain', '/api/method/frappe.desk.reportview.get'); | ||||
@@ -48,11 +48,11 @@ context('Recorder', () => { | |||||
}); | }); | ||||
it('Recorder View Request', () => { | it('Recorder View Request', () => { | ||||
cy.visit('/desk#recorder'); | |||||
cy.visit('/app#recorder'); | |||||
cy.get('.primary-action').should('contain', 'Start').click(); | cy.get('.primary-action').should('contain', 'Start').click(); | ||||
cy.server(); | cy.server(); | ||||
cy.visit('/desk#List/DocType/List'); | |||||
cy.visit('/app/List/DocType/List'); | |||||
cy.route('POST', '/api/method/frappe.desk.reportview.get').as('list_refresh'); | cy.route('POST', '/api/method/frappe.desk.reportview.get').as('list_refresh'); | ||||
cy.wait('@list_refresh'); | cy.wait('@list_refresh'); | ||||
@@ -62,7 +62,7 @@ context('Recorder', () => { | |||||
// temporarily commenting out theses tests as they seem to be | // temporarily commenting out theses tests as they seem to be | ||||
// randomly failing maybe due a backround event | // randomly failing maybe due a backround event | ||||
// cy.visit('/desk#recorder'); | |||||
// cy.visit('/app#recorder'); | |||||
// cy.get('.list-row-container span').contains('/api/method/frappe').click(); | // cy.get('.list-row-container span').contains('/api/method/frappe').click(); | ||||
@@ -4,13 +4,13 @@ context('Relative Timeframe', () => { | |||||
}); | }); | ||||
before(() => { | before(() => { | ||||
cy.login(); | cy.login(); | ||||
cy.visit('/desk#workspace/Website'); | |||||
cy.visit('/app#workspace/Website'); | |||||
cy.window().its('frappe').then(frappe => { | cy.window().its('frappe').then(frappe => { | ||||
frappe.call("frappe.tests.ui_test_helpers.create_todo_records"); | frappe.call("frappe.tests.ui_test_helpers.create_todo_records"); | ||||
}); | }); | ||||
}); | }); | ||||
it('sets relative timespan filter for last week and filters list', () => { | it('sets relative timespan filter for last week and filters list', () => { | ||||
cy.visit('/desk#List/ToDo/List'); | |||||
cy.visit('/app/List/ToDo/List'); | |||||
cy.get('.list-row:contains("this is fourth todo")').should('exist'); | cy.get('.list-row:contains("this is fourth todo")').should('exist'); | ||||
cy.get('.tag-filters-area .btn:contains("Add Filter")').click(); | cy.get('.tag-filters-area .btn:contains("Add Filter")').click(); | ||||
cy.get('.fieldname-select-area').should('exist'); | cy.get('.fieldname-select-area').should('exist'); | ||||
@@ -29,7 +29,7 @@ context('Relative Timeframe', () => { | |||||
cy.wait('@save_user_settings'); | cy.wait('@save_user_settings'); | ||||
}); | }); | ||||
it('sets relative timespan filter for next week and filters list', () => { | it('sets relative timespan filter for next week and filters list', () => { | ||||
cy.visit('/desk#List/ToDo/List'); | |||||
cy.visit('/app/List/ToDo/List'); | |||||
cy.get('.list-row:contains("this is fourth todo")').should('exist'); | cy.get('.list-row:contains("this is fourth todo")').should('exist'); | ||||
cy.get('.tag-filters-area .btn:contains("Add Filter")').click(); | cy.get('.tag-filters-area .btn:contains("Add Filter")').click(); | ||||
cy.get('.fieldname-select-area input').type("Due Date{enter}", { delay: 100 }); | cy.get('.fieldname-select-area input').type("Due Date{enter}", { delay: 100 }); | ||||
@@ -4,7 +4,7 @@ const doctype_name = custom_submittable_doctype.name; | |||||
context('Report View', () => { | context('Report View', () => { | ||||
before(() => { | before(() => { | ||||
cy.login(); | cy.login(); | ||||
cy.visit('/desk#workspace/Website'); | |||||
cy.visit('/app#workspace/Website'); | |||||
cy.insert_doc('DocType', custom_submittable_doctype, true); | cy.insert_doc('DocType', custom_submittable_doctype, true); | ||||
cy.clear_cache(); | cy.clear_cache(); | ||||
cy.insert_doc(doctype_name, { | cy.insert_doc(doctype_name, { | ||||
@@ -18,7 +18,7 @@ context('Report View', () => { | |||||
it('Field with enabled allow_on_submit should be editable.', () => { | it('Field with enabled allow_on_submit should be editable.', () => { | ||||
cy.server(); | cy.server(); | ||||
cy.route('POST', 'api/method/frappe.client.set_value').as('value-update'); | cy.route('POST', 'api/method/frappe.client.set_value').as('value-update'); | ||||
cy.visit(`/desk#List/${doctype_name}/Report`); | |||||
cy.visit(`/app/List/${doctype_name}/Report`); | |||||
// check status column added from docstatus | // check status column added from docstatus | ||||
cy.get('.dt-row-0 > .dt-cell--col-3').should('contain', 'Submitted'); | cy.get('.dt-row-0 > .dt-cell--col-3').should('contain', 'Submitted'); | ||||
let cell = cy.get('.dt-row-0 > .dt-cell--col-4'); | let cell = cy.get('.dt-row-0 > .dt-cell--col-4'); | ||||
@@ -210,13 +210,13 @@ Cypress.Commands.add('awesomebar', text => { | |||||
Cypress.Commands.add('new_form', doctype => { | Cypress.Commands.add('new_form', doctype => { | ||||
let route = `Form/${doctype}/New ${doctype} 1`; | let route = `Form/${doctype}/New ${doctype} 1`; | ||||
cy.visit(`/desk#${route}`); | |||||
cy.visit(`/app#${route}`); | |||||
cy.get('body').should('have.attr', 'data-route', route); | cy.get('body').should('have.attr', 'data-route', route); | ||||
cy.get('body').should('have.attr', 'data-ajax-state', 'complete'); | cy.get('body').should('have.attr', 'data-ajax-state', 'complete'); | ||||
}); | }); | ||||
Cypress.Commands.add('go_to_list', doctype => { | Cypress.Commands.add('go_to_list', doctype => { | ||||
cy.visit(`/desk#List/${doctype}/List`); | |||||
cy.visit(`/app/List/${doctype}/List`); | |||||
}); | }); | ||||
Cypress.Commands.add('clear_cache', () => { | Cypress.Commands.add('clear_cache', () => { | ||||
@@ -1611,7 +1611,7 @@ def log_error(message=None, title=_("Error")): | |||||
method=title)).insert(ignore_permissions=True) | method=title)).insert(ignore_permissions=True) | ||||
def get_desk_link(doctype, name): | def get_desk_link(doctype, name): | ||||
html = '<a href="#Form/{doctype}/{name}" style="font-weight: bold;">{doctype_local} {name}</a>' | |||||
html = '<a href="/app/Form/{doctype}/{name}" style="font-weight: bold;">{doctype_local} {name}</a>' | |||||
return html.format( | return html.format( | ||||
doctype=doctype, | doctype=doctype, | ||||
name=name, | name=name, | ||||
@@ -167,7 +167,7 @@ class LoginManager: | |||||
frappe.local.cookie_manager.set_cookie("system_user", "yes") | frappe.local.cookie_manager.set_cookie("system_user", "yes") | ||||
if not resume: | if not resume: | ||||
frappe.local.response['message'] = 'Logged In' | frappe.local.response['message'] = 'Logged In' | ||||
frappe.local.response["home_page"] = "/desk" | |||||
frappe.local.response["home_page"] = "/app" | |||||
if not resume: | if not resume: | ||||
frappe.response["full_name"] = self.full_name | frappe.response["full_name"] = self.full_name | ||||
@@ -30,7 +30,7 @@ frappe.ui.form.on('Auto Repeat', { | |||||
refresh: function(frm) { | refresh: function(frm) { | ||||
// auto repeat message | // auto repeat message | ||||
if (frm.is_new()) { | if (frm.is_new()) { | ||||
let customize_form_link = `<a href="#Form/Customize Form">${__('Customize Form')}</a>`; | |||||
let customize_form_link = `<a href="/app/Form/Customize Form">${__('Customize Form')}</a>`; | |||||
frm.dashboard.set_headline(__('To configure Auto Repeat, enable "Allow Auto Repeat" from {0}.', [customize_form_link])); | frm.dashboard.set_headline(__('To configure Auto Repeat, enable "Allow Auto Repeat" from {0}.', [customize_form_link])); | ||||
} | } | ||||
@@ -11,7 +11,7 @@ frappe.listview_settings["Deleted Document"] = { | |||||
if (r.message) { | if (r.message) { | ||||
function body(docnames) { | function body(docnames) { | ||||
const html = docnames.map(docname => { | const html = docnames.map(docname => { | ||||
return `<li><a href='/desk#Form/Deleted Document/${docname}'>${docname}</a></li>`; | |||||
return `<li><a href='/app/Form/Deleted Document/${docname}'>${docname}</a></li>`; | |||||
}); | }); | ||||
return "<br><ul>" + html.join(""); | return "<br><ul>" + html.join(""); | ||||
} | } | ||||
@@ -24,12 +24,12 @@ frappe.ui.form.on('DocType', { | |||||
if (!frm.is_new() && !frm.doc.istable) { | if (!frm.is_new() && !frm.doc.istable) { | ||||
if (frm.doc.issingle) { | if (frm.doc.issingle) { | ||||
frm.add_custom_button(__('Go to {0}', [frm.doc.name]), () => { | frm.add_custom_button(__('Go to {0}', [frm.doc.name]), () => { | ||||
window.open(`/desk#Form/${frm.doc.name}`); | |||||
window.open(`/app/Form/${frm.doc.name}`); | |||||
// frappe.set_route('Form', frm.doc.name); | // frappe.set_route('Form', frm.doc.name); | ||||
}); | }); | ||||
} else { | } else { | ||||
frm.add_custom_button(__('Go to {0} List', [frm.doc.name]), () => { | frm.add_custom_button(__('Go to {0} List', [frm.doc.name]), () => { | ||||
window.open(`/desk#List/${frm.doc.name}/List`); | |||||
window.open(`/app/List/${frm.doc.name}/List`); | |||||
}); | }); | ||||
} | } | ||||
} | } | ||||
@@ -36,7 +36,7 @@ def has_unseen_error_log(user): | |||||
def _get_response(show_alert=True): | def _get_response(show_alert=True): | ||||
return { | return { | ||||
'show_alert': True, | 'show_alert': True, | ||||
'message': _("You have unseen {0}").format('<a href="/desk#List/Error%20Log/List"> Error Logs </a>') | |||||
'message': _("You have unseen {0}").format('<a href="/app/List/Error%20Log/List"> Error Logs </a>') | |||||
} | } | ||||
if frappe.db.sql_list("select name from `tabError Log` where seen = 0 limit 1"): | if frappe.db.sql_list("select name from `tabError Log` where seen = 0 limit 1"): | ||||
@@ -577,7 +577,7 @@ def update_password(new_password, logout_all_sessions=0, key=None, old_password= | |||||
frappe.db.set_value("User", user, "reset_password_key", "") | frappe.db.set_value("User", user, "reset_password_key", "") | ||||
if user_doc.user_type == "System User": | if user_doc.user_type == "System User": | ||||
return "/desk" | |||||
return "/app" | |||||
else: | else: | ||||
return redirect_url if redirect_url else "/" | return redirect_url if redirect_url else "/" | ||||
@@ -311,7 +311,7 @@ frappe.PermissionEngine = class PermissionEngine { | |||||
}, | }, | ||||
callback: function (r) { | callback: function (r) { | ||||
r.message = $.map(r.message, function (p) { | r.message = $.map(r.message, function (p) { | ||||
return $.format('<a href="#Form/User/{0}">{1}</a>', [p, p]); | |||||
return $.format('<a href="/app/Form/User/{0}">{1}</a>', [p, p]); | |||||
}); | }); | ||||
frappe.msgprint(__("Users with role {0}:", [__(role)]) | frappe.msgprint(__("Users with role {0}:", [__(role)]) | ||||
+ "<br>" + r.message.join("<br>")); | + "<br>" + r.message.join("<br>")); | ||||
@@ -5,8 +5,8 @@ | |||||
<li>{%= __("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.") %}</li> | <li>{%= __("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.") %}</li> | ||||
<li>{%= __("Permissions get applied on Users based on what Roles they are assigned.") %}</li> | <li>{%= __("Permissions get applied on Users based on what Roles they are assigned.") %}</li> | ||||
<li>{%= __("Roles can be set for users from their User page.") %} | <li>{%= __("Roles can be set for users from their User page.") %} | ||||
<a href="#List/User">{%= __("Setup > User") %}</a></li> | |||||
<li>{%= __("The system provides many pre-defined roles. You can add new roles to set finer permissions.") %}<a href="#List/Role"> {%= __("Add a New Role") %}</a></li> | |||||
<a href="/app/List/User">{%= __("Setup > User") %}</a></li> | |||||
<li>{%= __("The system provides many pre-defined roles. You can add new roles to set finer permissions.") %}<a href="/app/List/Role"> {%= __("Add a New Role") %}</a></li> | |||||
<li>{%= __("Permissions are automatically applied to Standard Reports and searches.") %}</li> | <li>{%= __("Permissions are automatically applied to Standard Reports and searches.") %}</li> | ||||
<li>{%= __("As a best practice, do not assign the same set of permission rule to different Roles. Instead, set multiple Roles to the same User.") %}</li> | <li>{%= __("As a best practice, do not assign the same set of permission rule to different Roles. Instead, set multiple Roles to the same User.") %}</li> | ||||
</ol> | </ol> | ||||
@@ -24,13 +24,13 @@ | |||||
<li>{%= __("Permissions at level 0 are Document Level permissions, i.e. they are primary for access to the document.") %}</li> | <li>{%= __("Permissions at level 0 are Document Level permissions, i.e. they are primary for access to the document.") %}</li> | ||||
<li>{%= __("If a Role does not have access at Level 0, then higher levels are meaningless.") %}</li> | <li>{%= __("If a Role does not have access at Level 0, then higher levels are meaningless.") %}</li> | ||||
<li>{%= __("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.") %}</li> | <li>{%= __("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.") %}</li> | ||||
<li>{%= __("You can use Customize Form to set levels on fields.") %} <a href="#Form/Customize Form">{%= __("Setup > Customize Form") %}</a></li> | |||||
<li>{%= __("You can use Customize Form to set levels on fields.") %} <a href="/app/Form/Customize Form">{%= __("Setup > Customize Form") %}</a></li> | |||||
</ol> | </ol> | ||||
<hr> | <hr> | ||||
<h4>{%= __("User Permissions") %}:</h4> | <h4>{%= __("User Permissions") %}:</h4> | ||||
<ol> | <ol> | ||||
<li>{%= __("User Permissions are used to limit users to specific records.") %} | <li>{%= __("User Permissions are used to limit users to specific records.") %} | ||||
<a href="#List/User Permission">{%= __("Setup > User Permissions") %}</a></li> | |||||
<a href="/app/List/User Permission">{%= __("Setup > User Permissions") %}</a></li> | |||||
<li>{%= __("Select Document Types to set which User Permissions are used to limit access.") %}</li> | <li>{%= __("Select Document Types to set which User Permissions are used to limit access.") %}</li> | ||||
<li>{%= __("Once you have set this, the users will only be able access documents (eg. Blog Post) where the link exists (eg. Blogger).") %}</li> | <li>{%= __("Once you have set this, the users will only be able access documents (eg. Blog Post) where the link exists (eg. Blogger).") %}</li> | ||||
<li>{%= __("Apart from System Manager, roles with Set User Permissions right can set permissions for other users for that Document Type.") %}</li> | <li>{%= __("Apart from System Manager, roles with Set User Permissions right can set permissions for other users for that Document Type.") %}</li> | ||||
@@ -234,7 +234,7 @@ class TestCustomizeForm(unittest.TestCase): | |||||
testdt1.delete() | testdt1.delete() | ||||
def test_custom_action(self): | def test_custom_action(self): | ||||
test_route = '#List/DocType' | |||||
test_route = '/app/List/DocType' | |||||
# create a dummy action (route) | # create a dummy action (route) | ||||
d = self.get_customize_form("Event") | d = self.get_customize_form("Event") | ||||
@@ -80,7 +80,7 @@ def get_non_standard_warning_message(non_standard_docs_map): | |||||
def get_html(docs, doctype): | def get_html(docs, doctype): | ||||
html = '<p>{}</p>'.format(frappe.bold(doctype)) | html = '<p>{}</p>'.format(frappe.bold(doctype)) | ||||
for doc in docs: | for doc in docs: | ||||
html += '<div><a href="#Form/{doctype}/{doc}">{doc}</a></div>'.format(doctype=doctype, doc=doc) | |||||
html += '<div><a href="/app/Form/{doctype}/{doc}">{doc}</a></div>'.format(doctype=doctype, doc=doc) | |||||
html += '<br>' | html += '<br>' | ||||
return html | return html | ||||
@@ -12,7 +12,7 @@ from frappe.cache_manager import build_domain_restriced_doctype_cache, build_dom | |||||
@frappe.whitelist() | @frappe.whitelist() | ||||
def get(module): | def get(module): | ||||
"""Returns data (sections, list of reports, counts) to render module view in desk: | """Returns data (sections, list of reports, counts) to render module view in desk: | ||||
`/desk/#Module/[name]`.""" | |||||
`/app/#Module/[name]`.""" | |||||
data = get_data(module) | data = get_data(module) | ||||
out = { | out = { | ||||
@@ -90,7 +90,7 @@ def get_data(module, build=True): | |||||
return data | return data | ||||
def build_config_from_file(module): | def build_config_from_file(module): | ||||
"""Build module info from `app/config/desktop.py` files.""" | |||||
"""Build module info from `app/config/apptop.py` files.""" | |||||
data = [] | data = [] | ||||
module = frappe.scrub(module) | module = frappe.scrub(module) | ||||
@@ -150,7 +150,7 @@ def add_section(data, label, icon, items): | |||||
def add_custom_doctypes(data, doctype_info): | def add_custom_doctypes(data, doctype_info): | ||||
"""Adds Custom DocTypes to modules setup via `config/desktop.py`.""" | |||||
"""Adds Custom DocTypes to modules setup via `config/apptop.py`.""" | |||||
add_section(data, _("Documents"), "fa fa-star", | add_section(data, _("Documents"), "fa fa-star", | ||||
[d for d in doctype_info if (d.custom and d.document_type in ("Document", "Transaction"))]) | [d for d in doctype_info if (d.custom and d.document_type in ("Document", "Transaction"))]) | ||||
@@ -258,7 +258,7 @@ def config_exists(app, module): | |||||
return False | return False | ||||
def add_setup_section(config, app, module, label, icon): | def add_setup_section(config, app, module, label, icon): | ||||
"""Add common sections to `/desk#Module/Setup`""" | |||||
"""Add common sections to `/app#Module/Setup`""" | |||||
try: | try: | ||||
setup_section = get_setup_section(app, module, label, icon) | setup_section = get_setup_section(app, module, label, icon) | ||||
if setup_section: | if setup_section: | ||||
@@ -348,7 +348,7 @@ class Leaderboard { | |||||
return fieldname === this.options.selected_filter_item; | return fieldname === this.options.selected_filter_item; | ||||
})); | })); | ||||
const link = `#Form/${this.options.selected_doctype}/${item.name}`; | |||||
const link = `/app/Form/${this.options.selected_doctype}/${item.name}`; | |||||
const name_html = item.formatted_name ? | const name_html = item.formatted_name ? | ||||
`<span class="text-muted ellipsis list-id">${item.formatted_name}</span>` | `<span class="text-muted ellipsis list-id">${item.formatted_name}</span>` | ||||
: `<a class="grey list-id ellipsis" href="${link}"> ${item.name} </a>`; | : `<a class="grey list-id ellipsis" href="${link}"> ${item.name} </a>`; | ||||
@@ -212,7 +212,7 @@ frappe.setup.SetupWizard = class SetupWizard extends frappe.ui.Slides { | |||||
} | } | ||||
setTimeout(function () { | setTimeout(function () { | ||||
// Reload | // Reload | ||||
window.location.href = '/desk'; | |||||
window.location.href = '/app'; | |||||
}, 2000); | }, 2000); | ||||
} | } | ||||
@@ -24,7 +24,7 @@ def execute(filters=None): | |||||
for todo in todo_list: | for todo in todo_list: | ||||
if todo.owner==frappe.session.user or todo.assigned_by==frappe.session.user: | if todo.owner==frappe.session.user or todo.assigned_by==frappe.session.user: | ||||
if todo.reference_type: | if todo.reference_type: | ||||
todo.reference = """<a href="#Form/%s/%s">%s: %s</a>""" % (todo.reference_type, | |||||
todo.reference = """<a href="/app/Form/%s/%s">%s: %s</a>""" % (todo.reference_type, | |||||
todo.reference_name, todo.reference_type, todo.reference_name) | todo.reference_name, todo.reference_type, todo.reference_name) | ||||
else: | else: | ||||
todo.reference = None | todo.reference = None | ||||
@@ -203,7 +203,7 @@ frappe.ui.form.on('Notification', { | |||||
frappe.notification.setup_example_message(frm); | frappe.notification.setup_example_message(frm); | ||||
if (frm.doc.channel === 'SMS' && frm.doc.__islocal) { | if (frm.doc.channel === 'SMS' && frm.doc.__islocal) { | ||||
frm.set_df_property('channel', | frm.set_df_property('channel', | ||||
'description', `To use SMS Channel, initialize <a href="#Form/SMS Settings">SMS Settings</a>.`); | |||||
'description', `To use SMS Channel, initialize <a href="/app/Form/SMS Settings">SMS Settings</a>.`); | |||||
} else { | } else { | ||||
frm.set_df_property('channel', 'description', ` `); | frm.set_df_property('channel', 'description', ` `); | ||||
} | } | ||||
@@ -4,7 +4,7 @@ | |||||
frappe.ui.form.on("Google Calendar", { | frappe.ui.form.on("Google Calendar", { | ||||
refresh: function(frm) { | refresh: function(frm) { | ||||
if (frm.is_new()) { | if (frm.is_new()) { | ||||
frm.dashboard.set_headline(__("To use Google Calendar, enable {0}.", [`<a href='#Form/Google Settings'>${__('Google Settings')}</a>`])); | |||||
frm.dashboard.set_headline(__("To use Google Calendar, enable {0}.", [`<a href='/app/Form/Google Settings'>${__('Google Settings')}</a>`])); | |||||
} | } | ||||
frappe.realtime.on("import_google_calendar", (data) => { | frappe.realtime.on("import_google_calendar", (data) => { | ||||
@@ -120,7 +120,7 @@ def authorize_access(g_calendar, reauthorize=None): | |||||
frappe.db.commit() | frappe.db.commit() | ||||
frappe.local.response["type"] = "redirect" | frappe.local.response["type"] = "redirect" | ||||
frappe.local.response["location"] = "/desk#Form/{0}/{1}".format(quote("Google Calendar"), quote(google_calendar.name)) | |||||
frappe.local.response["location"] = "/app/Form/{0}/{1}".format(quote("Google Calendar"), quote(google_calendar.name)) | |||||
frappe.msgprint(_("Google Calendar has been configured.")) | frappe.msgprint(_("Google Calendar has been configured.")) | ||||
except Exception as e: | except Exception as e: | ||||
@@ -4,7 +4,7 @@ | |||||
frappe.ui.form.on('Google Contacts', { | frappe.ui.form.on('Google Contacts', { | ||||
refresh: function(frm) { | refresh: function(frm) { | ||||
if (!frm.doc.enable) { | if (!frm.doc.enable) { | ||||
frm.dashboard.set_headline(__("To use Google Contacts, enable {0}.", [`<a href='#Form/Google Settings'>${__('Google Settings')}</a>`])); | |||||
frm.dashboard.set_headline(__("To use Google Contacts, enable {0}.", [`<a href='/app/Form/Google Settings'>${__('Google Settings')}</a>`])); | |||||
} | } | ||||
frappe.realtime.on('import_google_contacts', (data) => { | frappe.realtime.on('import_google_contacts', (data) => { | ||||
@@ -79,7 +79,7 @@ def authorize_access(g_contact, reauthorize=None): | |||||
frappe.db.commit() | frappe.db.commit() | ||||
frappe.local.response["type"] = "redirect" | frappe.local.response["type"] = "redirect" | ||||
frappe.local.response["location"] = "/desk#Form/Google%20Contacts/{}".format(google_contact.name) | |||||
frappe.local.response["location"] = "/app/Form/Google%20Contacts/{}".format(google_contact.name) | |||||
frappe.msgprint(_("Google Contacts has been configured.")) | frappe.msgprint(_("Google Contacts has been configured.")) | ||||
except Exception as e: | except Exception as e: | ||||
@@ -4,7 +4,7 @@ | |||||
frappe.ui.form.on('Google Drive', { | frappe.ui.form.on('Google Drive', { | ||||
refresh: function(frm) { | refresh: function(frm) { | ||||
if (!frm.doc.enable) { | if (!frm.doc.enable) { | ||||
frm.dashboard.set_headline(__("To use Google Drive, enable {0}.", [`<a href='#Form/Google Settings'>${__('Google Settings')}</a>`])); | |||||
frm.dashboard.set_headline(__("To use Google Drive, enable {0}.", [`<a href='/app/Form/Google Settings'>${__('Google Settings')}</a>`])); | |||||
} | } | ||||
frappe.realtime.on("upload_to_google_drive", (data) => { | frappe.realtime.on("upload_to_google_drive", (data) => { | ||||
@@ -88,7 +88,7 @@ def authorize_access(reauthorize=None): | |||||
frappe.db.commit() | frappe.db.commit() | ||||
frappe.local.response["type"] = "redirect" | frappe.local.response["type"] = "redirect" | ||||
frappe.local.response["location"] = "/desk#Form/{0}".format(quote("Google Drive")) | |||||
frappe.local.response["location"] = "/app/Form/{0}".format(quote("Google Drive")) | |||||
frappe.msgprint(_("Google Drive has been configured.")) | frappe.msgprint(_("Google Drive has been configured.")) | ||||
except Exception as e: | except Exception as e: | ||||
@@ -287,8 +287,8 @@ def check_if_doc_is_dynamically_linked(doc, method="Delete"): | |||||
raise_link_exists_exception(doc, reference_doctype, reference_docname, at_position) | raise_link_exists_exception(doc, reference_doctype, reference_docname, at_position) | ||||
def raise_link_exists_exception(doc, reference_doctype, reference_docname, row=''): | def raise_link_exists_exception(doc, reference_doctype, reference_docname, row=''): | ||||
doc_link = '<a href="#Form/{0}/{1}">{1}</a>'.format(doc.doctype, doc.name) | |||||
reference_link = '<a href="#Form/{0}/{1}">{1}</a>'.format(reference_doctype, reference_docname) | |||||
doc_link = '<a href="/app/Form/{0}/{1}">{1}</a>'.format(doc.doctype, doc.name) | |||||
reference_link = '<a href="/app/Form/{0}/{1}">{1}</a>'.format(reference_doctype, reference_docname) | |||||
#hack to display Single doctype only once in message | #hack to display Single doctype only once in message | ||||
if reference_doctype == reference_docname: | if reference_doctype == reference_docname: | ||||
@@ -1188,8 +1188,8 @@ class Document(BaseDocument): | |||||
doc.set(fieldname, flt(doc.get(fieldname), self.precision(fieldname, doc.parentfield))) | doc.set(fieldname, flt(doc.get(fieldname), self.precision(fieldname, doc.parentfield))) | ||||
def get_url(self): | def get_url(self): | ||||
"""Returns Desk URL for this document. `/desk#Form/{doctype}/{name}`""" | |||||
return "/desk#Form/{doctype}/{name}".format(doctype=self.doctype, name=self.name) | |||||
"""Returns Desk URL for this document. `/app/Form/{doctype}/{name}`""" | |||||
return "/app/Form/{doctype}/{name}".format(doctype=self.doctype, name=self.name) | |||||
def add_comment(self, comment_type='Comment', text=None, comment_email=None, link_doctype=None, link_name=None, comment_by=None): | def add_comment(self, comment_type='Comment', text=None, comment_email=None, link_doctype=None, link_name=None, comment_by=None): | ||||
"""Add a comment to this document. | """Add a comment to this document. | ||||
@@ -1522,7 +1522,7 @@ frappe.ui.form.Form = class FrappeForm { | |||||
const escaped_name = encodeURIComponent(value); | const escaped_name = encodeURIComponent(value); | ||||
return repl('<a class="indicator %(color)s" href="#Form/%(doctype)s/%(escaped_name)s" data-doctype="%(doctype)s" data-name="%(name)s">%(label)s</a>', { | |||||
return repl('<a class="indicator %(color)s" href="/app/Form/%(doctype)s/%(escaped_name)s" data-doctype="%(doctype)s" data-name="%(name)s">%(label)s</a>', { | |||||
color: get_color(doc || {}), | color: get_color(doc || {}), | ||||
doctype: df.options, | doctype: df.options, | ||||
escaped_name: escaped_name, | escaped_name: escaped_name, | ||||
@@ -121,7 +121,7 @@ frappe.form.formatters = { | |||||
{onclick: docfield.link_onclick.replace(/"/g, '"'), value:value}); | {onclick: docfield.link_onclick.replace(/"/g, '"'), value:value}); | ||||
} else if(docfield && doctype) { | } else if(docfield && doctype) { | ||||
return `<a | return `<a | ||||
href="#Form/${encodeURIComponent(doctype)}/${encodeURIComponent(original_value)}" | |||||
href="/app/Form/${encodeURIComponent(doctype)}/${encodeURIComponent(original_value)}" | |||||
data-doctype="${doctype}" | data-doctype="${doctype}" | ||||
data-name="${original_value}"> | data-name="${original_value}"> | ||||
${__(options && options.label || value)}</a>` | ${__(options && options.label || value)}</a>` | ||||
@@ -157,7 +157,7 @@ frappe.ui.form.LinkedWith = class LinkedWith { | |||||
return `<div class="list-row-container"> | return `<div class="list-row-container"> | ||||
<div class="level list-row small"> | <div class="level list-row small"> | ||||
<div class="level-left bold"> | <div class="level-left bold"> | ||||
<a href="#Form/${doctype}/${doc.name}">${doc.name}</a> | |||||
<a href="/app/Form/${doctype}/${doc.name}">${doc.name}</a> | |||||
</div> | </div> | ||||
</div> | </div> | ||||
</div>`; | </div>`; | ||||
@@ -236,7 +236,7 @@ frappe.ui.form.MultiSelectDialog = class MultiSelectDialog { | |||||
${ | ${ | ||||
head ? `<span class="ellipsis text-muted" title="${__(frappe.model.unscrub(column))}">${__(frappe.model.unscrub(column))}</span>` | head ? `<span class="ellipsis text-muted" title="${__(frappe.model.unscrub(column))}">${__(frappe.model.unscrub(column))}</span>` | ||||
: (column !== "name" ? `<span class="ellipsis result-row" title="${__(result[column] || '')}">${__(result[column] || '')}</span>` | : (column !== "name" ? `<span class="ellipsis result-row" title="${__(result[column] || '')}">${__(result[column] || '')}</span>` | ||||
: `<a href="${"#Form/" + me.doctype + "/" + result[column] || ''}" class="list-id ellipsis" title="${__(result[column] || '')}"> | |||||
: `<a href="${"/app/Form/" + me.doctype + "/" + result[column] || ''}" class="list-id ellipsis" title="${__(result[column] || '')}"> | |||||
${__(result[column] || '')}</a>`)} | ${__(result[column] || '')}</a>`)} | ||||
</div>`; | </div>`; | ||||
}); | }); | ||||
@@ -9,7 +9,7 @@ | |||||
{% if(addr_list[i].is_shipping_address) { %} | {% if(addr_list[i].is_shipping_address) { %} | ||||
<span class="text-muted">({%= __("Shipping") %})</span>{% } %} | <span class="text-muted">({%= __("Shipping") %})</span>{% } %} | ||||
<a href="#Form/Address/{%= encodeURIComponent(addr_list[i].name) %}" class="btn btn-default btn-xs pull-right" | |||||
<a href="/app/Form/Address/{%= encodeURIComponent(addr_list[i].name) %}" class="btn btn-default btn-xs pull-right" | |||||
style="margin-top:-3px; margin-right: -5px;"> | style="margin-top:-3px; margin-right: -5px;"> | ||||
{%= __("Edit") %}</a> | {%= __("Edit") %}</a> | ||||
</p> | </p> | ||||
@@ -9,7 +9,7 @@ | |||||
{% if(contact_list[i].designation){ %} | {% if(contact_list[i].designation){ %} | ||||
<span class="text-muted">– {%= contact_list[i].designation %}</span> | <span class="text-muted">– {%= contact_list[i].designation %}</span> | ||||
{% } %} | {% } %} | ||||
<a href="#Form/Contact/{%= encodeURIComponent(contact_list[i].name) %}" | |||||
<a href="/app/Form/Contact/{%= encodeURIComponent(contact_list[i].name) %}" | |||||
class="btn btn-xs btn-default ml-auto"> | class="btn btn-xs btn-default ml-auto"> | ||||
{%= __("Edit") %} | {%= __("Edit") %} | ||||
</a> | </a> | ||||
@@ -31,7 +31,7 @@ | |||||
</a> | </a> | ||||
<ul class="dropdown-menu print-format-dropdown" style="max-height: 300px; | <ul class="dropdown-menu print-format-dropdown" style="max-height: 300px; | ||||
overflow-y: auto; left: auto;"> | overflow-y: auto; left: auto;"> | ||||
<li><a class="dropdown-item" href="#Form/Print Settings"> | |||||
<li><a class="dropdown-item" href="/app/Form/Print Settings"> | |||||
{%= __("Print Settings") %}</a></li> | {%= __("Print Settings") %}</a></li> | ||||
<li><a class="btn-printer-setting dropdown-item" style="display: none;"> | <li><a class="btn-printer-setting dropdown-item" style="display: none;"> | ||||
{%= __("Raw Printing Settings") %}</a></li> | {%= __("Raw Printing Settings") %}</a></li> | ||||
@@ -57,14 +57,14 @@ frappe.views.ListFactory = class ListFactory extends frappe.views.Factory { | |||||
if (route[0] === 'List' && route.length === 2 && frappe.views.list_view[doctype]) { | if (route[0] === 'List' && route.length === 2 && frappe.views.list_view[doctype]) { | ||||
if(last_route && last_route[0]==='List' && last_route[1]===doctype) { | if(last_route && last_route[0]==='List' && last_route[1]===doctype) { | ||||
// last route same as this route, so going back. | // last route same as this route, so going back. | ||||
// this happens because #List/Item will redirect to #List/Item/List | |||||
// this happens because /app/List/Item will redirect to /app/List/Item/List | |||||
// while coming from back button, the last 2 routes will be same, so | // while coming from back button, the last 2 routes will be same, so | ||||
// we know user is coming in the reverse direction (via back button) | // we know user is coming in the reverse direction (via back button) | ||||
// example: | // example: | ||||
// Step 1: #List/Item redirects to #List/Item/List | |||||
// Step 2: User hits "back" comes back to #List/Item | |||||
// Step 3: Now we cannot send the user back to #List/Item/List so go back one more step | |||||
// Step 1: /app/List/Item redirects to /app/List/Item/List | |||||
// Step 2: User hits "back" comes back to /app/List/Item | |||||
// Step 3: Now we cannot send the user back to /app/List/Item/List so go back one more step | |||||
window.history.go(-1); | window.history.go(-1); | ||||
return true; | return true; | ||||
} else { | } else { | ||||
@@ -871,7 +871,7 @@ frappe.views.ListView = class ListView extends frappe.views.BaseList { | |||||
? encodeURIComponent(doc.name) | ? encodeURIComponent(doc.name) | ||||
: doc.name; | : doc.name; | ||||
return "#Form/" + this.doctype + "/" + docname; | |||||
return "/app/Form/" + this.doctype + "/" + docname; | |||||
} | } | ||||
get_seen_class(doc) { | get_seen_class(doc) { | ||||
@@ -10,7 +10,7 @@ Vue.use(VueRouter); | |||||
const routes = [ | const routes = [ | ||||
{ | { | ||||
name: "recorder-detail", | name: "recorder-detail", | ||||
path: '/desk', | |||||
path: '/app', | |||||
component: RecorderDetail, | component: RecorderDetail, | ||||
}, | }, | ||||
{ | { | ||||
@@ -22,7 +22,7 @@ const routes = [ | |||||
const router = new VueRouter({ | const router = new VueRouter({ | ||||
mode: 'history', | mode: 'history', | ||||
base: "/desk#recorder/", | |||||
base: "/app#recorder/", | |||||
routes: routes, | routes: routes, | ||||
}); | }); | ||||
@@ -16,6 +16,7 @@ frappe.route_hooks = {}; | |||||
frappe._cur_route = null; | frappe._cur_route = null; | ||||
$(window).on('hashchange', function() { | $(window).on('hashchange', function() { | ||||
// v1 style routing, route is in hash | |||||
if (window.location.hash) { | if (window.location.hash) { | ||||
let sub_path = frappe.get_sub_path(window.location.hash); | let sub_path = frappe.get_sub_path(window.location.hash); | ||||
window.location.hash = ''; | window.location.hash = ''; | ||||
@@ -36,14 +37,23 @@ $('body').on('click', 'a', function(e) { | |||||
return false; | return false; | ||||
}; | }; | ||||
// click handled, but not by href | |||||
if (e.currentTarget.getAttribute('onclick')) return; | |||||
const href = e.currentTarget.getAttribute('href'); | |||||
if (href==='#' || href==='') { | |||||
return override(e, '/app'); | |||||
} | |||||
// target has "#" ,this is a v1 style route, so remake it. | // target has "#" ,this is a v1 style route, so remake it. | ||||
if (e.currentTarget.hash) { | if (e.currentTarget.hash) { | ||||
return override(e, e.currentTarget.hash); | return override(e, e.currentTarget.hash); | ||||
} | } | ||||
// target has "/desk, this is a v2 style route. | |||||
// target has "/app, this is a v2 style route. | |||||
if (e.currentTarget.pathname && | if (e.currentTarget.pathname && | ||||
(e.currentTarget.pathname.startsWith('/desk') || e.currentTarget.pathname.startsWith('desk'))) { | |||||
(e.currentTarget.pathname.startsWith('/app') || e.currentTarget.pathname.startsWith('app'))) { | |||||
return override(e, e.currentTarget.pathname); | return override(e, e.currentTarget.pathname); | ||||
} | } | ||||
}); | }); | ||||
@@ -174,8 +184,8 @@ frappe.get_sub_path_string = function(route) { | |||||
route = window.location.pathname; | route = window.location.pathname; | ||||
} | } | ||||
if (route.substr(0, 1)=='/') route = route.substr(1); // for /desk/sub | |||||
if (route.startsWith('desk')) route = route.substr(4); // for desk/sub | |||||
if (route.substr(0, 1)=='/') route = route.substr(1); // for /app/sub | |||||
if (route.startsWith('app')) route = route.substr(4); // for desk/sub | |||||
if (route.substr(0, 1)=='/') route = route.substr(1); | if (route.substr(0, 1)=='/') route = route.substr(1); | ||||
if (route.substr(0, 1)=='#') route = route.substr(1); | if (route.substr(0, 1)=='#') route = route.substr(1); | ||||
if (route.substr(0, 1)=='!') route = route.substr(1); | if (route.substr(0, 1)=='!') route = route.substr(1); | ||||
@@ -236,7 +246,7 @@ frappe.set_route = function() { | |||||
}; | }; | ||||
frappe.push_state = function (route) { | frappe.push_state = function (route) { | ||||
let url = `/desk/${route}`; | |||||
let url = `/app/${route}`; | |||||
if (window.location.pathname !== url) { | if (window.location.pathname !== url) { | ||||
// cleanup any remenants of v1 routing | // cleanup any remenants of v1 routing | ||||
window.location.hash = ''; | window.location.hash = ''; | ||||
@@ -121,7 +121,7 @@ frappe.ui.Notifications = class Notifications { | |||||
} | } | ||||
route_to_settings() { | route_to_settings() { | ||||
frappe.set_route(`#Form/Notification Settings/${frappe.session.user}`); | |||||
frappe.set_route(`/app/Form/Notification Settings/${frappe.session.user}`); | |||||
} | } | ||||
mark_all_as_read(e) { | mark_all_as_read(e) { | ||||
@@ -253,7 +253,7 @@ class NotificationsView extends BaseNotificaitonsView { | |||||
if (this.container.find('.activity-status')) { | if (this.container.find('.activity-status')) { | ||||
this.container.find('.activity-status').replaceWith( | this.container.find('.activity-status').replaceWith( | ||||
`<a class="recent-item text-center text-muted" | `<a class="recent-item text-center text-muted" | ||||
href="#List/Notification Log"> | |||||
href="/app/List/Notification Log"> | |||||
<div class="full-log-btn">${__('View Full Log')}</div> | <div class="full-log-btn">${__('View Full Log')}</div> | ||||
</a>` | </a>` | ||||
); | ); | ||||
@@ -339,7 +339,7 @@ class NotificationsView extends BaseNotificaitonsView { | |||||
this.container.append(this.get_dropdown_item_html(field)); | this.container.append(this.get_dropdown_item_html(field)); | ||||
}); | }); | ||||
this.container.append(`<a class="list-footer" | this.container.append(`<a class="list-footer" | ||||
href="#List/Notification Log"> | |||||
href="/app/List/Notification Log"> | |||||
<div class="full-log-btn">${__('See all Activity')}</div> | <div class="full-log-btn">${__('See all Activity')}</div> | ||||
</a>`); | </a>`); | ||||
} else { | } else { | ||||
@@ -449,7 +449,7 @@ class EventsView extends BaseNotificaitonsView { | |||||
location = `, ${event.location}`; | location = `, ${event.location}`; | ||||
} | } | ||||
return `<a class="recent-item event" href="#Form/Event/${event.name}"> | |||||
return `<a class="recent-item event" href="/app/Form/Event/${event.name}"> | |||||
<div class="event-border" style="border-color: ${event.color}"></div> | <div class="event-border" style="border-color: ${event.color}"></div> | ||||
<div class="event-item"> | <div class="event-item"> | ||||
<div class="event-subject">${event.subject}</div> | <div class="event-subject">${event.subject}</div> | ||||
@@ -13,7 +13,7 @@ Object.assign(frappe.energy_points, { | |||||
const separator = `<span> - </span>`; | const separator = `<span> - </span>`; | ||||
const formatted_log = `<span> | const formatted_log = `<span> | ||||
<!--${this.get_points(log.points)} --> | <!--${this.get_points(log.points)} --> | ||||
<a href="#Form/Energy Point Log/${log.name}">${this.get_form_log_message(log)}</a> | |||||
<a href="/app/Form/Energy Point Log/${log.name}">${this.get_form_log_message(log)}</a> | |||||
${log.reason ? separator + log.reason: ''} | ${log.reason ? separator + log.reason: ''} | ||||
</span>`; | </span>`; | ||||
return formatted_log; | return formatted_log; | ||||
@@ -815,7 +815,7 @@ Object.assign(frappe.utils, { | |||||
display_text = display_text || name; | display_text = display_text || name; | ||||
doctype = encodeURIComponent(doctype); | doctype = encodeURIComponent(doctype); | ||||
name = encodeURIComponent(name); | name = encodeURIComponent(name); | ||||
const route = ['#Form', doctype, name].join('/'); | |||||
const route = ['/app/Form', doctype, name].join('/'); | |||||
if (html) { | if (html) { | ||||
return `<a href="${route}">${display_text}</a>`; | return `<a href="${route}">${display_text}</a>`; | ||||
} | } | ||||
@@ -101,7 +101,7 @@ frappe.breadcrumbs = { | |||||
label = module_info ? module_info.label : breadcrumbs.module; | label = module_info ? module_info.label : breadcrumbs.module; | ||||
if(module_info && !module_info.blocked && frappe.visible_modules.includes(module_info.module_name)) { | if(module_info && !module_info.blocked && frappe.visible_modules.includes(module_info.module_name)) { | ||||
$(repl('<li><a href="#workspace/%(module)s">%(label)s</a></li>', | |||||
$(repl('<li><a href="/app/workspace/%(module)s">%(label)s</a></li>', | |||||
{ module: breadcrumbs.module, label: __(breadcrumbs.module) })) | { module: breadcrumbs.module, label: __(breadcrumbs.module) })) | ||||
.appendTo($breadcrumbs); | .appendTo($breadcrumbs); | ||||
} | } | ||||
@@ -120,7 +120,7 @@ frappe.breadcrumbs = { | |||||
} else { | } else { | ||||
route = 'List/' + breadcrumbs.doctype; | route = 'List/' + breadcrumbs.doctype; | ||||
} | } | ||||
$(`<li><a href="#${route}">${doctype}</a></li>`) | |||||
$(`<li><a href="/app/${route}">${doctype}</a></li>`) | |||||
.appendTo($breadcrumbs) | .appendTo($breadcrumbs) | ||||
} | } | ||||
} | } | ||||
@@ -65,7 +65,7 @@ frappe.views.FileView = class FileView extends frappe.views.ListView { | |||||
frappe.breadcrumbs.add({ | frappe.breadcrumbs.add({ | ||||
type: 'Custom', | type: 'Custom', | ||||
label: __('Home'), | label: __('Home'), | ||||
route: '#List/File/Home', | |||||
route: '/app/List/File/Home', | |||||
}); | }); | ||||
} | } | ||||
@@ -322,7 +322,7 @@ frappe.views.FileView = class FileView extends frappe.views.ListView { | |||||
acc += '/' + curr; | acc += '/' + curr; | ||||
} | } | ||||
return acc; | return acc; | ||||
}, '#List/File'); | |||||
}, '/app/List/File'); | |||||
return `<a href="${route}">${folder}</a>`; | return `<a href="${route}">${folder}</a>`; | ||||
}) | }) | ||||
@@ -364,7 +364,7 @@ frappe.views.FileView = class FileView extends frappe.views.ListView { | |||||
get_route_url(file) { | get_route_url(file) { | ||||
return file.is_folder | return file.is_folder | ||||
? '#List/File/' + file.name | |||||
? '/app/List/File/' + file.name | |||||
: this.get_form_link(file); | : this.get_form_link(file); | ||||
} | } | ||||
@@ -8,7 +8,7 @@ | |||||
<div class="image-view-body"> | <div class="image-view-body"> | ||||
<a data-name="{{ data.name }}" | <a data-name="{{ data.name }}" | ||||
title="{{ data.name }}" | title="{{ data.name }}" | ||||
href="#Form/{{ data.doctype }}/{{ data.name }}" | |||||
href="/app/Form/{{ data.doctype }}/{{ data.name }}" | |||||
> | > | ||||
<div class="image-field" | <div class="image-field" | ||||
data-name="{{ data.name }}" | data-name="{{ data.name }}" | ||||
@@ -328,7 +328,7 @@ frappe.views.KanbanView.show_kanban_dialog = function (doctype, show_existing) { | |||||
<p class="text-medium"> | <p class="text-medium"> | ||||
${__('No fields found that can be used as a Kanban Column. Use the Customize Form to add a Custom Field of type "Select".')} | ${__('No fields found that can be used as a Kanban Column. Use the Customize Form to add a Custom Field of type "Select".')} | ||||
</p> | </p> | ||||
<a class="btn btn-xs btn-default" href="#Form/Customize Form?doc_type=${doctype}"> | |||||
<a class="btn btn-xs btn-default" href="/app/Form/Customize Form?doc_type=${doctype}"> | |||||
${__('Customize Form')} | ${__('Customize Form')} | ||||
</a> | </a> | ||||
</div> | </div> | ||||
@@ -40,22 +40,6 @@ frappe.views.pageview = { | |||||
show: function(name) { | show: function(name) { | ||||
if (!name) { | if (!name) { | ||||
name = (frappe.boot ? frappe.boot.home_page : window.page_name); | name = (frappe.boot ? frappe.boot.home_page : window.page_name); | ||||
if (name === "workspace") { | |||||
if (!frappe.workspace) { | |||||
let page = frappe.container.add_page('workspace'); | |||||
let container = $('<div class="container"></div>').appendTo(page); | |||||
container = $('<div></div>').appendTo(container); | |||||
frappe.workspace = new Desktop({ | |||||
wrapper: container | |||||
}); | |||||
} | |||||
} | |||||
frappe.container.change_to('workspace'); | |||||
frappe.workspace.route(); | |||||
frappe.utils.set_title(__('Home')); | |||||
return; | |||||
} | } | ||||
frappe.model.with_doctype("Page", function() { | frappe.model.with_doctype("Page", function() { | ||||
frappe.views.pageview.with_page(name, function(r) { | frappe.views.pageview.with_page(name, function(r) { | ||||
@@ -677,7 +677,7 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { | |||||
<span class="indicator orange"> | <span class="indicator orange"> | ||||
${part1} | ${part1} | ||||
${part2} | ${part2} | ||||
<a href="#List/Prepared%20Report?report_name=${this.report_name}">${part3}</a> | |||||
<a href="/app/List/Prepared%20Report?report_name=${this.report_name}">${part3}</a> | |||||
</span> | </span> | ||||
`); | `); | ||||
}; | }; | ||||
@@ -754,7 +754,7 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { | |||||
} | } | ||||
get_queued_prepared_reports_warning_message(reports) { | get_queued_prepared_reports_warning_message(reports) { | ||||
const route = `#List/Prepared Report/List?status=Queued&report_name=${this.report_name}`; | |||||
const route = `/app/List/Prepared Report/List?status=Queued&report_name=${this.report_name}`; | |||||
const report_link_html = reports.length == 1 | const report_link_html = reports.length == 1 | ||||
? `<a class="underline" href="${route}">${__('1 Report')}</a>` | ? `<a class="underline" href="${route}">${__('1 Report')}</a>` | ||||
: `<a class="underline" href="${route}">${__("{0} Reports", [reports.length])}</a>`; | : `<a class="underline" href="${route}">${__("{0} Reports", [reports.length])}</a>`; | ||||
@@ -769,7 +769,7 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { | |||||
${no_of_reports_html} | ${no_of_reports_html} | ||||
</p>`; | </p>`; | ||||
let get_item_html = item => `<a class="underline" href="#Form/Prepared Report/${item.name}">${item.name}</a>`; | |||||
let get_item_html = item => `<a class="underline" href="/app/Form/Prepared Report/${item.name}">${item.name}</a>`; | |||||
warning_message += reports.map(get_item_html).join(', '); | warning_message += reports.map(get_item_html).join(', '); | ||||
@@ -805,7 +805,7 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList { | |||||
// Rememeber the name of Prepared Report doc | // Rememeber the name of Prepared Report doc | ||||
this.prepared_report_doc_name = data.name; | this.prepared_report_doc_name = data.name; | ||||
let alert_message = `Report initiated. You can track its status | let alert_message = `Report initiated. You can track its status | ||||
<a class="bold" href='#Form/Prepared Report/${data.name}'>here</a>`; | |||||
<a class="bold" href='/app/Form/Prepared Report/${data.name}'>here</a>`; | |||||
frappe.show_alert({message: alert_message, indicator: 'orange'}, 10); | frappe.show_alert({message: alert_message, indicator: 'orange'}, 10); | ||||
this.toggle_nothing_to_show(true); | this.toggle_nothing_to_show(true); | ||||
}); | }); | ||||
@@ -93,7 +93,7 @@ frappe.views.Workspace = class Workspace { | |||||
const get_sidebar_item = function (item) { | const get_sidebar_item = function (item) { | ||||
return $(`<a | return $(`<a | ||||
href="${"desk#workspace/" + item.name}" | |||||
href="/desk/workspace/${item.name}" | |||||
class="desk-sidebar-item standard-sidebar-item ${item.selected ? "selected" : ""}" | class="desk-sidebar-item standard-sidebar-item ${item.selected ? "selected" : ""}" | ||||
> | > | ||||
<div> ${frappe.utils.icon(item.icon || "folder-normal", "md")} </div> | <div> ${frappe.utils.icon(item.icon || "folder-normal", "md")} </div> | ||||
@@ -64,7 +64,7 @@ export default class OnboardingWidget extends Widget { | |||||
"Watch Video": (step) => this.show_video(step), | "Watch Video": (step) => this.show_video(step), | ||||
"Create Entry": (step) => { | "Create Entry": (step) => { | ||||
if (step.is_complete) { | if (step.is_complete) { | ||||
frappe.set_route(`#List/${step.reference_document}`); | |||||
frappe.set_route(`/app/List/${step.reference_document}`); | |||||
} else { | } else { | ||||
if (step.show_full_form) { | if (step.show_full_form) { | ||||
this.create_entry(step); | this.create_entry(step); | ||||
@@ -55,7 +55,6 @@ function generate_route(item) { | |||||
route = "dashboard/" + item.name; | route = "dashboard/" + item.name; | ||||
} | } | ||||
route = "#" + route; | |||||
} else { | } else { | ||||
route = item.route; | route = item.route; | ||||
} | } | ||||
@@ -38,6 +38,6 @@ frappe.ui.form.on('Energy Point Log', { | |||||
make_reference_name_link(frm) { | make_reference_name_link(frm) { | ||||
let dt = frm.doc.reference_doctype; | let dt = frm.doc.reference_doctype; | ||||
let dn = frm.doc.reference_name; | let dn = frm.doc.reference_name; | ||||
frm.fields_dict.reference_name.$input_wrapper.find('.control-value').wrapInner(`<a href='#Form/${dt}/${dn}'></a>`); | |||||
frm.fields_dict.reference_name.$input_wrapper.find('.control-value').wrapInner(`<a href='/app/Form/${dt}/${dn}'></a>`); | |||||
} | } | ||||
}); | }); |
@@ -49,7 +49,7 @@ def add_comment(comment, comment_email, comment_by, reference_doctype, reference | |||||
clear_cache(route) | clear_cache(route) | ||||
content = (comment.content | content = (comment.content | ||||
+ "<p><a href='{0}/desk#Form/Comment/{1}' style='font-size: 80%'>{2}</a></p>".format(frappe.utils.get_request_site_address(), | |||||
+ "<p><a href='{0}/app/Form/Comment/{1}' style='font-size: 80%'>{2}</a></p>".format(frappe.utils.get_request_site_address(), | |||||
comment.name, | comment.name, | ||||
_("View Comment"))) | _("View Comment"))) | ||||
@@ -16,7 +16,7 @@ | |||||
</a> | </a> | ||||
{%- endif -%} | {%- endif -%} | ||||
{%- endfor -%} | {%- endfor -%} | ||||
<a class="dropdown-item switch-to-desk hidden" href="/desk">{{ _('Switch To Desk') }}</a> | |||||
<a class="dropdown-item switch-to-desk hidden" href="/app">{{ _('Switch To Desk') }}</a> | |||||
</ul> | </ul> | ||||
</li> | </li> | ||||
{% endif %} | {% endif %} | ||||
@@ -9,7 +9,7 @@ | |||||
{{ _("Success") }}</span> | {{ _("Success") }}</span> | ||||
</div> | </div> | ||||
<p>{{ _("Your connection request to Google Calendar was successfully accepted") }}</p> | <p>{{ _("Your connection request to Google Calendar was successfully accepted") }}</p> | ||||
<div><a href='{{ "/desk" }}' class='btn btn-primary btn-sm'> | |||||
<div><a href='{{ "/app" }}' class='btn btn-primary btn-sm'> | |||||
{{ _("Back to Desk") }}</a></div> | {{ _("Back to Desk") }}</a></div> | ||||
</div> | </div> | ||||
<style> | <style> | ||||
@@ -40,7 +40,7 @@ class BotParser(object): | |||||
def format_list(self, data): | def format_list(self, data): | ||||
'''Format list as markdown''' | '''Format list as markdown''' | ||||
return _('I found these: ') + ', '.join([' [{title}](#Form/{doctype}/{name})'.format( | |||||
return _('I found these: ') + ', '.join([' [{title}](/app/Form/{doctype}/{name})'.format( | |||||
title = d.title or d.name, | title = d.title or d.name, | ||||
doctype=self.get_doctype(), | doctype=self.get_doctype(), | ||||
name=d.name) for d in data]) | name=d.name) for d in data]) | ||||
@@ -58,7 +58,7 @@ class ShowNotificationBot(BotParser): | |||||
if open_items: | if open_items: | ||||
return ("Following items need your attention:\n\n" | return ("Following items need your attention:\n\n" | ||||
+ "\n\n".join(["{0} [{1}](#List/{1})".format(d[1], d[0]) | |||||
+ "\n\n".join(["{0} [{1}](/app/List/{1})".format(d[1], d[0]) | |||||
for d in open_items if d[1] > 0])) | for d in open_items if d[1] > 0])) | ||||
else: | else: | ||||
return 'Take it easy, nothing urgent needs your attention' | return 'Take it easy, nothing urgent needs your attention' | ||||
@@ -77,7 +77,7 @@ class GetOpenListBot(BotParser): | |||||
else: | else: | ||||
data = [{'name':d[0], 'title':d[1]} for d in frappe.get_attr(filters)(as_list=True)] | data = [{'name':d[0], 'title':d[1]} for d in frappe.get_attr(filters)(as_list=True)] | ||||
return ", ".join('[{title}](#Form/{doctype}/{name})'.format(doctype=doctype, | |||||
return ", ".join('[{title}](/app/Form/{doctype}/{name})'.format(doctype=doctype, | |||||
name=d.get('name'), title=d.get('title') or d.get('name')) for d in data) | name=d.get('name'), title=d.get('title') or d.get('name')) for d in data) | ||||
else: | else: | ||||
return _("Can't identify open {0}. Try something else.").format(doctype) | return _("Can't identify open {0}. Try something else.").format(doctype) | ||||
@@ -172,7 +172,7 @@ def import_doc(d, doctype, overwrite, row_idx, submit=False, ignore_links=False) | |||||
doc.get('name'))) | doc.get('name'))) | ||||
def getlink(doctype, name): | def getlink(doctype, name): | ||||
return '<a href="#Form/%(doctype)s/%(name)s">%(name)s</a>' % locals() | |||||
return '<a href="/app/Form/%(doctype)s/%(name)s">%(name)s</a>' % locals() | |||||
def get_csv_content_from_google_sheets(url): | def get_csv_content_from_google_sheets(url): | ||||
# https://docs.google.com/spreadsheets/d/{sheetid}}/edit#gid={gid} | # https://docs.google.com/spreadsheets/d/{sheetid}}/edit#gid={gid} | ||||
@@ -1035,13 +1035,13 @@ def get_link_to_report(name, label=None, report_type=None, doctype=None, filters | |||||
return """<a href='{0}'>{1}</a>""".format(get_url_to_report(name, report_type, doctype), label) | return """<a href='{0}'>{1}</a>""".format(get_url_to_report(name, report_type, doctype), label) | ||||
def get_absolute_url(doctype, name): | def get_absolute_url(doctype, name): | ||||
return "desk#Form/{0}/{1}".format(quoted(doctype), quoted(name)) | |||||
return "desk/app/Form/{0}/{1}".format(quoted(doctype), quoted(name)) | |||||
def get_url_to_form(doctype, name): | def get_url_to_form(doctype, name): | ||||
return get_url(uri = "desk#Form/{0}/{1}".format(quoted(doctype), quoted(name))) | |||||
return get_url(uri = "desk/app/Form/{0}/{1}".format(quoted(doctype), quoted(name))) | |||||
def get_url_to_list(doctype): | def get_url_to_list(doctype): | ||||
return get_url(uri = "desk#List/{0}".format(quoted(doctype))) | |||||
return get_url(uri = "desk/app/List/{0}".format(quoted(doctype))) | |||||
def get_url_to_report(name, report_type = None, doctype = None): | def get_url_to_report(name, report_type = None, doctype = None): | ||||
if report_type == "Report Builder": | if report_type == "Report Builder": | ||||
@@ -307,7 +307,7 @@ def redirect_post_login(desk_user, redirect_to=None, provider=None): | |||||
if not redirect_to: | if not redirect_to: | ||||
# the #desktop is added to prevent a facebook redirect bug | # the #desktop is added to prevent a facebook redirect bug | ||||
desk_uri = "/desk#workspace" if provider == 'facebook' else '/desk' | |||||
desk_uri = "/app#workspace" if provider == 'facebook' else '/app' | |||||
redirect_to = desk_uri if desk_user else "/me" | redirect_to = desk_uri if desk_user else "/me" | ||||
redirect_to = frappe.utils.get_url(redirect_to) | redirect_to = frappe.utils.get_url(redirect_to) | ||||
@@ -44,7 +44,7 @@ def authorize_access(reauthorize=None): | |||||
frappe.db.commit() | frappe.db.commit() | ||||
frappe.local.response["type"] = "redirect" | frappe.local.response["type"] = "redirect" | ||||
frappe.local.response["location"] = "/desk#Form/{0}".format(quote("Website Settings")) | |||||
frappe.local.response["location"] = "/app/Form/{0}".format(quote("Website Settings")) | |||||
frappe.msgprint(_("Google Indexing has been configured.")) | frappe.msgprint(_("Google Indexing has been configured.")) | ||||
except Exception as e: | except Exception as e: | ||||
@@ -252,9 +252,8 @@ def resolve_path(path): | |||||
if path != "index": | if path != "index": | ||||
path = resolve_from_map(path) | path = resolve_from_map(path) | ||||
if path.startswith("desk"): | |||||
path = "desk" | |||||
frappe.flags.desk_route = path[5:] | |||||
if path.startswith("app"): | |||||
path = "app" | |||||
return path | return path | ||||
@@ -13,7 +13,7 @@ frappe.listview_settings['Workflow Action'] = { | |||||
? encodeURIComponent(docname) | ? encodeURIComponent(docname) | ||||
: docname; | : docname; | ||||
const link = '#Form/' + doctype + '/' + docname; | |||||
const link = '/app/Form/' + doctype + '/' + docname; | |||||
return link; | return link; | ||||
} | } | ||||
}; | }; |
@@ -47,7 +47,6 @@ | |||||
if(!window.frappe) window.frappe = {}; | if(!window.frappe) window.frappe = {}; | ||||
frappe.boot = {{ boot }}; | frappe.boot = {{ boot }}; | ||||
frappe._cur_route = "{{ desk_route }}"; | |||||
frappe.csrf_token = "{{ csrf_token }}"; | frappe.csrf_token = "{{ csrf_token }}"; | ||||
@@ -4,7 +4,7 @@ | |||||
from __future__ import unicode_literals, print_function | from __future__ import unicode_literals, print_function | ||||
no_cache = 1 | no_cache = 1 | ||||
base_template_path = "templates/www/desk.html" | |||||
base_template_path = "templates/www/app.html" | |||||
import os, re | import os, re | ||||
import frappe | import frappe | ||||
@@ -37,7 +37,6 @@ def get_context(context): | |||||
boot_json = re.sub("\<script\>[^<]*\</script\>", "", boot_json) | boot_json = re.sub("\<script\>[^<]*\</script\>", "", boot_json) | ||||
context.update({ | context.update({ | ||||
"desk_route": frappe.flags.desk_route or "", | |||||
"no_cache": 1, | "no_cache": 1, | ||||
"build_version": get_build_version(), | "build_version": get_build_version(), | ||||
"include_js": hooks["app_include_js"], | "include_js": hooks["app_include_js"], |
@@ -24,7 +24,7 @@ def get_context(context): | |||||
if frappe.session.data.user_type=="Website User": | if frappe.session.data.user_type=="Website User": | ||||
redirect_to = get_home_page() | redirect_to = get_home_page() | ||||
else: | else: | ||||
redirect_to = "/desk" | |||||
redirect_to = "/app" | |||||
frappe.local.flags.redirect_location = redirect_to | frappe.local.flags.redirect_location = redirect_to | ||||
raise frappe.Redirect | raise frappe.Redirect | ||||