From 7ad1e2d11db2261dc34693d68526104e0a51ce78 Mon Sep 17 00:00:00 2001 From: shariquerik Date: Tue, 22 Jun 2021 17:13:20 +0530 Subject: [PATCH 01/14] fix: Webform Permission for custom doctypem --- frappe/www/list.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/frappe/www/list.py b/frappe/www/list.py index 5e4e491c80..975347adac 100644 --- a/frappe/www/list.py +++ b/frappe/www/list.py @@ -161,6 +161,14 @@ def get_list_context(context, doctype, web_form_name=None): module = load_doctype_module(doctype) list_context = update_context_from_module(module, list_context) + # get context for custom doctype + if meta.custom: + get_custom_website_context = frappe.get_hooks('get_custom_website_context') + if get_custom_website_context: + out = frappe._dict(frappe.get_attr(get_custom_website_context[0])() or {}) + if out: + list_context = out + # get context from web form module if web_form_name: web_form = frappe.get_doc('Web Form', web_form_name) From d39a389fd5a066bb08b5805550f6b86d0b4618d3 Mon Sep 17 00:00:00 2001 From: shariquerik Date: Mon, 12 Jul 2021 17:01:30 +0530 Subject: [PATCH 02/14] fix: app check condition for getting correct list_context --- frappe/www/list.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/frappe/www/list.py b/frappe/www/list.py index 975347adac..3ed103b69d 100644 --- a/frappe/www/list.py +++ b/frappe/www/list.py @@ -161,11 +161,11 @@ def get_list_context(context, doctype, web_form_name=None): module = load_doctype_module(doctype) list_context = update_context_from_module(module, list_context) - # get context for custom doctype - if meta.custom: - get_custom_website_context = frappe.get_hooks('get_custom_website_context') - if get_custom_website_context: - out = frappe._dict(frappe.get_attr(get_custom_website_context[0])() or {}) + # get context for custom webform + if meta.custom and web_form_name: + list_context_for_custom_webform = frappe.get_hooks('get_list_context_for_custom_webform') + if list_context_for_custom_webform: + out = frappe._dict(frappe.get_attr(list_context_for_custom_webform[0])(meta.module) or {}) if out: list_context = out From 895520885e08e216da52bcc8e7f668170f0bd408 Mon Sep 17 00:00:00 2001 From: Shariq Ansari <30859809+shariquerik@users.noreply.github.com> Date: Tue, 31 Aug 2021 11:27:33 +0530 Subject: [PATCH 03/14] chore: Better naming convention Co-authored-by: Suraj Shetty <13928957+surajshetty3416@users.noreply.github.com> --- frappe/www/list.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/www/list.py b/frappe/www/list.py index 3ed103b69d..74fadfb70f 100644 --- a/frappe/www/list.py +++ b/frappe/www/list.py @@ -163,7 +163,7 @@ def get_list_context(context, doctype, web_form_name=None): # get context for custom webform if meta.custom and web_form_name: - list_context_for_custom_webform = frappe.get_hooks('get_list_context_for_custom_webform') + webform_list_contexts = frappe.get_hooks('webform_list_context') if list_context_for_custom_webform: out = frappe._dict(frappe.get_attr(list_context_for_custom_webform[0])(meta.module) or {}) if out: From d8d25bdf19819633715bf558ecf41e55db859e00 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Tue, 31 Aug 2021 11:34:42 +0530 Subject: [PATCH 04/14] chore: Better naming convention --- frappe/www/list.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frappe/www/list.py b/frappe/www/list.py index 74fadfb70f..f8e4a4eb93 100644 --- a/frappe/www/list.py +++ b/frappe/www/list.py @@ -164,8 +164,8 @@ def get_list_context(context, doctype, web_form_name=None): # get context for custom webform if meta.custom and web_form_name: webform_list_contexts = frappe.get_hooks('webform_list_context') - if list_context_for_custom_webform: - out = frappe._dict(frappe.get_attr(list_context_for_custom_webform[0])(meta.module) or {}) + if webform_list_contexts: + out = frappe._dict(frappe.get_attr(webform_list_contexts[0])(meta.module) or {}) if out: list_context = out From 6c847987f124ec0408a1ee0075878fdcf615d844 Mon Sep 17 00:00:00 2001 From: Youssef Date: Wed, 1 Sep 2021 10:07:49 +0000 Subject: [PATCH 05/14] feat: Choose Letter Head when printing multiple documents from List /Report (cherry picked from commit 1c6688fd9c39008e86e88617ce901ba02b9076de) # Conflicts: # frappe/public/js/frappe/list/bulk_operations.js --- .../public/js/frappe/list/bulk_operations.js | 82 +++++++++++++------ 1 file changed, 57 insertions(+), 25 deletions(-) diff --git a/frappe/public/js/frappe/list/bulk_operations.js b/frappe/public/js/frappe/list/bulk_operations.js index 3b99560411..3bb7b33853 100644 --- a/frappe/public/js/frappe/list/bulk_operations.js +++ b/frappe/public/js/frappe/list/bulk_operations.js @@ -4,7 +4,7 @@ export default class BulkOperations { this.doctype = doctype; } - print(docs) { + print (docs) { const print_settings = frappe.model.get_doc(':Print Settings', 'Print Settings'); const allow_print_for_draft = cint(print_settings.allow_print_for_draft); const is_submittable = frappe.model.is_submittable(this.doctype); @@ -27,31 +27,38 @@ export default class BulkOperations { if (valid_docs.length > 0) { const dialog = new frappe.ui.Dialog({ title: __('Print Documents'), - fields: [{ - 'fieldtype': 'Check', - 'label': __('With Letterhead'), - 'fieldname': 'with_letterhead' - }, - { - 'fieldtype': 'Select', - 'label': __('Print Format'), - 'fieldname': 'print_sel', - options: frappe.meta.get_print_formats(this.doctype) - }] + fields: [ + { + 'fieldtype': 'Select', + 'label': __('Letter Head'), + 'fieldname': 'letter_sel', + 'default': __('No Letterhead'), + options: this.get_letterhead_options() + }, + { + 'fieldtype': 'Select', + 'label': __('Print Format'), + 'fieldname': 'print_sel', + options: frappe.meta.get_print_formats(this.doctype) + } + ] }); dialog.set_primary_action(__('Print'), args => { if (!args) return; const default_print_format = frappe.get_meta(this.doctype).default_print_format; - const with_letterhead = args.with_letterhead ? 1 : 0; + const with_letterhead = args.letter_sel == __("No Letterhead") ? 0 : 1; const print_format = args.print_sel ? args.print_sel : default_print_format; const json_string = JSON.stringify(valid_docs); - + const letterhead = args.letter_sel; const w = window.open('/api/method/frappe.utils.print_format.download_multi_pdf?' + 'doctype=' + encodeURIComponent(this.doctype) + '&name=' + encodeURIComponent(json_string) + '&format=' + encodeURIComponent(print_format) + - '&no_letterhead=' + (with_letterhead ? '0' : '1')); + '&no_letterhead=' + (with_letterhead ? '0' : '1') + + '&letterhead=' + encodeURIComponent(letterhead) + ); + if (!w) { frappe.msgprint(__('Please enable pop-ups')); return; @@ -64,7 +71,28 @@ export default class BulkOperations { } } - delete(docnames, done = null) { + get_letterhead_options () { + const letterhead_options = [__("No Letterhead")]; + frappe.call({ + method: "frappe.client.get_list", + args: { + doctype: 'Letter Head', + fields: ['name', 'is_default'], + limit: 0 + }, + async: false, + callback (r) { + if (r.message) { + r.message.forEach(letterhead => { + letterhead_options.push(letterhead.name); + }); + } + } + }); + return letterhead_options; + } + + delete (docnames, done = null) { frappe .call({ method: 'frappe.desk.reportview.delete_items', @@ -88,7 +116,7 @@ export default class BulkOperations { }); } - assign(docnames, done) { + assign (docnames, done) { if (docnames.length > 0) { const assign_to = new frappe.ui.form.AssignToDialog({ obj: this, @@ -106,7 +134,7 @@ export default class BulkOperations { } } - apply_assignment_rule(docnames, done) { + apply_assignment_rule (docnames, done) { if (docnames.length > 0) { frappe.call('frappe.automation.doctype.assignment_rule.assignment_rule.bulk_apply', { doctype: this.doctype, @@ -115,7 +143,7 @@ export default class BulkOperations { } } - submit_or_cancel(docnames, action='submit', done=null) { + submit_or_cancel (docnames, action = 'submit', done = null) { action = action.toLowerCase(); frappe .call({ @@ -140,7 +168,7 @@ export default class BulkOperations { }); } - edit(docnames, field_mappings, done) { + edit (docnames, field_mappings, done) { let field_options = Object.keys(field_mappings).sort(); const status_regex = /status/i; @@ -198,16 +226,16 @@ export default class BulkOperations { if (default_field) set_value_field(dialog); // to set `Value` df based on default `Field` - function set_value_field(dialogObj) { + function set_value_field (dialogObj) { const new_df = Object.assign({}, field_mappings[dialogObj.get_value('field')]); /* if the field label has status in it and if it has select fieldtype with no default value then set a default value from the available option. */ - if(new_df.label.match(status_regex) && + if (new_df.label.match(status_regex) && new_df.fieldtype === 'Select' && !new_df.default) { let options = []; - if(typeof new_df.options==="string") { + if (typeof new_df.options === "string") { options = new_df.options.split("\n"); } //set second option as default if first option is an empty string @@ -224,7 +252,7 @@ export default class BulkOperations { } - add_tags(docnames, done) { + add_tags (docnames, done) { const dialog = new frappe.ui.Dialog({ title: __('Add Tags'), fields: [ @@ -233,7 +261,7 @@ export default class BulkOperations { fieldname: 'tags', label: __("Tags"), reqd: true, - get_data: function(txt) { + get_data: function (txt) { return frappe.db.get_link_options("Tag", txt); } }, @@ -261,6 +289,7 @@ export default class BulkOperations { }); dialog.show(); } +<<<<<<< HEAD export(doctype, docnames) { frappe.require('data_import_tools.bundle.js', () => { @@ -272,3 +301,6 @@ export default class BulkOperations { }); } } +======= +} +>>>>>>> 1c6688fd9c (feat: Choose Letter Head when printing multiple documents from List /Report) From ba07f3bc95bffad45edcbd8d8a4f7fcaeb8b79fb Mon Sep 17 00:00:00 2001 From: Raffael Meyer <14891507+barredterra@users.noreply.github.com> Date: Thu, 2 Sep 2021 11:30:57 +0200 Subject: [PATCH 06/14] fix: resolve merge conflicts --- frappe/public/js/frappe/list/bulk_operations.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/frappe/public/js/frappe/list/bulk_operations.js b/frappe/public/js/frappe/list/bulk_operations.js index 3bb7b33853..931f2cf587 100644 --- a/frappe/public/js/frappe/list/bulk_operations.js +++ b/frappe/public/js/frappe/list/bulk_operations.js @@ -251,7 +251,6 @@ export default class BulkOperations { dialog.show(); } - add_tags (docnames, done) { const dialog = new frappe.ui.Dialog({ title: __('Add Tags'), @@ -289,9 +288,8 @@ export default class BulkOperations { }); dialog.show(); } -<<<<<<< HEAD - export(doctype, docnames) { + export (doctype, docnames) { frappe.require('data_import_tools.bundle.js', () => { const data_exporter = new frappe.data_import.DataExporter(doctype, 'Insert New Records'); data_exporter.dialog.set_value('export_records', 'by_filter'); @@ -301,6 +299,3 @@ export default class BulkOperations { }); } } -======= -} ->>>>>>> 1c6688fd9c (feat: Choose Letter Head when printing multiple documents from List /Report) From ab09ebf696df84aa4cea00756e72695700439efc Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Thu, 2 Sep 2021 20:46:19 +0530 Subject: [PATCH 07/14] fix: Dashboard Setting already exist error and linter fixes --- .../js/frappe/views/workspace/workspace.js | 26 +++++----- frappe/public/scss/desk/desktop.scss | 52 +++++++++---------- 2 files changed, 40 insertions(+), 38 deletions(-) diff --git a/frappe/public/js/frappe/views/workspace/workspace.js b/frappe/public/js/frappe/views/workspace/workspace.js index b14b2eddfa..1e0143c2a8 100644 --- a/frappe/public/js/frappe/views/workspace/workspace.js +++ b/frappe/public/js/frappe/views/workspace/workspace.js @@ -155,7 +155,7 @@ frappe.views.Workspace = class Workspace { }); // Scroll sidebar to selected page if it is not in viewport. - !frappe.dom.is_element_in_viewport(this.sidebar.find('.selected')) + !frappe.dom.is_element_in_viewport(this.sidebar.find('.selected')) && this.sidebar.find('.selected')[0].scrollIntoView(); } @@ -185,7 +185,7 @@ frappe.views.Workspace = class Workspace { } append_item(item, container) { - let is_current_page = frappe.router.slug(item.title) == frappe.router.slug(this.get_page_to_show().name) + let is_current_page = frappe.router.slug(item.title) == frappe.router.slug(this.get_page_to_show().name) && item.public == this.get_page_to_show().public; if (is_current_page) { item.selected = true; @@ -253,11 +253,13 @@ frappe.views.Workspace = class Workspace { if (!this.page_data || Object.keys(this.page_data).length === 0) return; return frappe.dashboard_utils.get_dashboard_settings().then(settings => { - let chart_config = settings.chart_config ? JSON.parse(settings.chart_config) : {}; - if (this.page_data.charts && this.page_data.charts.items) { - this.page_data.charts.items.map(chart => { - chart.chart_settings = chart_config[chart.chart_name] || {}; - }); + if (settings) { + let chart_config = settings.chart_config ? JSON.parse(settings.chart_config) : {}; + if (this.page_data.charts && this.page_data.charts.items) { + this.page_data.charts.items.map(chart => { + chart.chart_settings = chart_config[chart.chart_name] || {}; + }); + } } }); }); @@ -560,7 +562,7 @@ frappe.views.Workspace = class Workspace { fieldname: 'is_public', depends_on: `eval:${this.has_access}`, onchange: function() { - d.set_df_property('parent', 'options', + d.set_df_property('parent', 'options', this.get_value() ? me.public_parent_pages : me.private_parent_pages); } }, @@ -704,9 +706,9 @@ frappe.views.Workspace = class Workspace { } }); - let blocks = outputData.blocks.filter( - item => item.type != 'card' || - (item.data.card_name !== 'Custom Documents' && + let blocks = outputData.blocks.filter( + item => item.type != 'card' || + (item.data.card_name !== 'Custom Documents' && item.data.card_name !== 'Custom Reports') ); @@ -752,4 +754,4 @@ frappe.views.Workspace = class Workspace { this.setup_pages(); this.undo.readOnly = true; } -}; \ No newline at end of file +}; diff --git a/frappe/public/scss/desk/desktop.scss b/frappe/public/scss/desk/desktop.scss index 49ed07bbce..1257d9b3a4 100644 --- a/frappe/public/scss/desk/desktop.scss +++ b/frappe/public/scss/desk/desktop.scss @@ -17,10 +17,10 @@ body { } .standard-sidebar-section { - margin-top: var(--margin-xl); + margin-bottom: var(--margin-xl); - &:first-of-type { - margin-top: var(--margin-sm); + &:last-of-type { + margin-bottom: var(--margin-sm); } } } @@ -143,7 +143,7 @@ body { font-weight: 500; line-height: 1.3em; color: var(--heading-color); - + svg { flex: none; margin-right: 6px; @@ -863,7 +863,7 @@ body { .drag-handle { display: inline-block; } - + .delete-page { display: inline-block; margin-right: 8px; @@ -888,44 +888,44 @@ body { .codex-editor { min-height: 630px; - + .codex-editor__redactor{ display: flex; flex-wrap: wrap; flex-direction: row; margin: 0px -7px; padding-bottom: 20px !important; - + .ce-block{ width: 100%; padding-left: 0; padding-right: 0; - + &.ce-block--selected { .ce-block__content { background-color: inherit; } } - + .ce-block__content { max-width: 100%; height: 100%; padding: 7px; - + &> div { height: 100%; } - + .tune-btn > * { pointer-events: none; } - + .ce-header { padding: 0 !important; margin-bottom: 0 !important; flex: 1; } - + .widget{ &.header { display: flex; @@ -938,11 +938,11 @@ body { background-color: var(--control-bg); color: var(--text-muted); } - + &:focus { outline: none; } - + &.new-widget { align-items: inherit; } @@ -959,7 +959,7 @@ body { gap: 5px; background-color: var(--card-bg); padding-left: 5px; - + .drag-handle { cursor: all-scroll; cursor: -webkit-grabbing; @@ -969,22 +969,22 @@ body { } } } - + svg { fill: none; } - + .ce-toolbar { svg { fill: currentColor; } - + .icon { stroke: none; width: fit-content; height: fit-content; } - + .ce-settings { width: fit-content; @@ -1011,18 +1011,18 @@ body { border-radius: 0 4px 4px 0;z-index: 0; } } - + .ce-toolbar__settings-btn { display: none; } } - + .ce-inline-tool, .ce-inline-toolbar__dropdown { .icon { fill: currentColor; } } - + @media (min-width: 1199px) { .ce-toolbar__content { max-width: 930px; @@ -1033,14 +1033,14 @@ body { max-width: 760px; } } - + @media (max-width: 1199px) { .ce-block.col-4 { flex: 0 0 50%; max-width: 50%; } } - + @media (max-width: 750px) { .ce-block.col-4 { flex: 0 0 100%; @@ -1053,6 +1053,6 @@ body { max-width: 100%; } } - + } } From b20e543de91cf49c5df9d9967b97dc92bcc47524 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Fri, 3 Sep 2021 16:55:44 +0530 Subject: [PATCH 08/14] test: test hook to get website_list_context --- frappe/tests/test_webform.py | 67 +++++++++++++++++++++++++++++++ frappe/www/_test/_test_webform.py | 6 +++ 2 files changed, 73 insertions(+) create mode 100644 frappe/tests/test_webform.py create mode 100644 frappe/www/_test/_test_webform.py diff --git a/frappe/tests/test_webform.py b/frappe/tests/test_webform.py new file mode 100644 index 0000000000..92dc441bdf --- /dev/null +++ b/frappe/tests/test_webform.py @@ -0,0 +1,67 @@ +import unittest + +import frappe +from frappe.www.list import get_list_context + + +class TestWebsite(unittest.TestCase): + def test_get_context_hook_of_webform(self): + create_custom_doctype() + create_webform() + + # check context for apps without any hook + context_list = get_list_context("", "Custom Doctype", "test-webform") + self.assertFalse(context_list) + + # create a hook to get webform_context + set_webform_hook( + "webform_list_context", + "frappe.www._test._test_webform.webform_list_context", + ) + # check context for apps with hook + context_list = get_list_context("", "Custom Doctype", "test-webform") + self.assertTrue(context_list) + + +def create_custom_doctype(): + frappe.get_doc( + { + "doctype": "DocType", + "name": "Custom Doctype", + "module": "Core", + "custom": 1, + "fields": [{"label": "Title", "fieldname": "title", "fieldtype": "Data"}], + } + ).insert(ignore_if_duplicate=True) + + +def create_webform(): + frappe.get_doc( + { + "doctype": "Web Form", + "module": "Core", + "title": "Test Webform", + "route": "test-webform", + "doc_type": "Custom Doctype", + "web_form_fields": [ + { + "doctype": "Web Form Field", + "fieldname": "title", + "fieldtype": "Data", + "label": "Title", + } + ], + } + ).insert(ignore_if_duplicate=True) + + +def set_webform_hook(key, value): + from frappe import hooks + + # reset hooks + for hook in "webform_list_context": + if hasattr(hooks, hook): + delattr(hooks, hook) + + setattr(hooks, key, value) + frappe.cache().delete_key("app_hooks") diff --git a/frappe/www/_test/_test_webform.py b/frappe/www/_test/_test_webform.py new file mode 100644 index 0000000000..3209e3e03c --- /dev/null +++ b/frappe/www/_test/_test_webform.py @@ -0,0 +1,6 @@ +def webform_list_context(module): + return {"get_list": get_webform_context_list} + + +def get_webform_context_list(): + pass From 5ccda1d5ac8d32f33c9095aed05f5ac5379cdd52 Mon Sep 17 00:00:00 2001 From: leela Date: Mon, 6 Sep 2021 10:27:10 +0530 Subject: [PATCH 09/14] fix: RTL support for text editor (cherry picked from commit 99f914698f7b86048c25087eb74dbd1fae707ac4) --- frappe/public/js/frappe/form/controls/comment.js | 2 ++ frappe/public/js/frappe/form/controls/text_editor.js | 3 +++ 2 files changed, 5 insertions(+) diff --git a/frappe/public/js/frappe/form/controls/comment.js b/frappe/public/js/frappe/form/controls/comment.js index 7c10b61366..b9b2d6a987 100644 --- a/frappe/public/js/frappe/form/controls/comment.js +++ b/frappe/public/js/frappe/form/controls/comment.js @@ -104,8 +104,10 @@ frappe.ui.form.ControlComment = class ControlComment extends frappe.ui.form.Cont return [ ['bold', 'italic', 'underline'], ['blockquote', 'code-block'], + [{ 'direction': "rtl" }], ['link', 'image'], [{ 'list': 'ordered' }, { 'list': 'bullet' }], + [{ 'align': [] }], ['clean'] ]; } diff --git a/frappe/public/js/frappe/form/controls/text_editor.js b/frappe/public/js/frappe/form/controls/text_editor.js index 99e87c5f21..2ce8fd1046 100644 --- a/frappe/public/js/frappe/form/controls/text_editor.js +++ b/frappe/public/js/frappe/form/controls/text_editor.js @@ -164,8 +164,11 @@ frappe.ui.form.ControlTextEditor = class ControlTextEditor extends frappe.ui.for ['bold', 'italic', 'underline', 'clean'], [{ 'color': [] }, { 'background': [] }], ['blockquote', 'code-block'], + // Adding Direction tool to give the user the ability to change text direction. + [{ 'direction': "rtl" }], ['link', 'image'], [{ 'list': 'ordered' }, { 'list': 'bullet' }, { 'list': 'check' }], + [{ 'align': [] }], [{ 'indent': '-1'}, { 'indent': '+1' }], [{'table': [ 'insert-table', From 768e4052f9de0d5bde38e11475617c3a4a69c677 Mon Sep 17 00:00:00 2001 From: leela Date: Fri, 3 Sep 2021 12:32:05 +0530 Subject: [PATCH 10/14] fix: node creation from tree view (cherry picked from commit f8cd2ad388c96eefff4730ce130806231bc0d87e) --- frappe/desk/treeview.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/frappe/desk/treeview.py b/frappe/desk/treeview.py index 704e5d8ed6..f40c135653 100644 --- a/frappe/desk/treeview.py +++ b/frappe/desk/treeview.py @@ -69,13 +69,11 @@ def make_tree_args(**kwarg): doctype = kwarg['doctype'] parent_field = 'parent_' + doctype.lower().replace(' ', '_') - name_field = kwarg.get('name_field', doctype.lower().replace(' ', '_') + '_name') if kwarg['is_root'] == 'false': kwarg['is_root'] = False if kwarg['is_root'] == 'true': kwarg['is_root'] = True kwarg.update({ - name_field: kwarg[name_field], parent_field: kwarg.get("parent") or kwarg.get(parent_field) }) From 62a205fe2efd9763b31e67009edce46fee2cad3f Mon Sep 17 00:00:00 2001 From: Saqib Date: Mon, 6 Sep 2021 12:43:17 +0530 Subject: [PATCH 11/14] feat: change custom button type (#14074) * feat: change custom button type using frm --- frappe/public/js/frappe/form/form.js | 4 ++++ frappe/public/js/frappe/ui/page.js | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/frappe/public/js/frappe/form/form.js b/frappe/public/js/frappe/form/form.js index 3588923527..8a691e8012 100644 --- a/frappe/public/js/frappe/form/form.js +++ b/frappe/public/js/frappe/form/form.js @@ -1152,6 +1152,10 @@ frappe.ui.form.Form = class FrappeForm { return btn; } + change_custom_button_type(label, group, type) { + this.page.change_inner_button_type(label, group, type); + } + clear_custom_buttons() { this.page.clear_inner_toolbar(); this.page.clear_user_actions(); diff --git a/frappe/public/js/frappe/ui/page.js b/frappe/public/js/frappe/ui/page.js index 320227b258..c299edb7db 100644 --- a/frappe/public/js/frappe/ui/page.js +++ b/frappe/public/js/frappe/ui/page.js @@ -618,6 +618,23 @@ frappe.ui.Page = class Page { } } + change_inner_button_type(label, group, type) { + let btn; + + if (group) { + var $group = this.get_inner_group_button(__(group)); + if ($group.length) { + btn = $group.find(`.dropdown-item[data-label="${encodeURIComponent(label)}"]`); + } + } else { + btn = this.inner_toolbar.find(`button[data-label="${encodeURIComponent(label)}"]`); + } + + if (btn) { + btn.removeClass().addClass(`btn btn-${type} ellipsis`); + } + } + add_inner_message(message) { let $message = $(`${message}`); this.inner_toolbar.find('.inner-page-message').remove(); From f4d260de0d771fda0c66314d832d253f49aa2e77 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Mon, 6 Sep 2021 14:16:27 +0530 Subject: [PATCH 12/14] fix: Problems while using translations via Globe Symbol (#14128) Co-authored-by: Vama Mehta (cherry picked from commit 40f2e915918860ade1e514c8b0bb4cf1bb6d0b2b) Co-authored-by: vama --- frappe/public/js/frappe/form/controls/base_control.js | 2 +- frappe/translate.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/frappe/public/js/frappe/form/controls/base_control.js b/frappe/public/js/frappe/form/controls/base_control.js index d6c268a28a..6a14637f33 100644 --- a/frappe/public/js/frappe/form/controls/base_control.js +++ b/frappe/public/js/frappe/form/controls/base_control.js @@ -131,7 +131,7 @@ frappe.ui.form.Control = class BaseControl { if (!this.doc.__islocal) { new frappe.views.TranslationManager({ 'df': this.df, - 'source_text': value, + 'source_text': this.value, 'target_language': this.doc.language, 'doc': this.doc }); diff --git a/frappe/translate.py b/frappe/translate.py index f1dbfdec59..6f3ed81dc2 100644 --- a/frappe/translate.py +++ b/frappe/translate.py @@ -821,6 +821,9 @@ def update_translations_for_source(source=None, translation_dict=None): translation_dict = json.loads(translation_dict) + if is_html(source): + source = strip_html_tags(source) + # for existing records translation_records = frappe.db.get_values('Translation', { 'source_text': source From 8b252d493aecf2a5ee6f0d99cd5b98a1087d9a98 Mon Sep 17 00:00:00 2001 From: Suraj Shetty <13928957+surajshetty3416@users.noreply.github.com> Date: Mon, 6 Sep 2021 22:49:48 +0530 Subject: [PATCH 13/14] ci: Conditionally run codecov upload --- .github/workflows/server-mariadb-tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/server-mariadb-tests.yml b/.github/workflows/server-mariadb-tests.yml index 57a7fa304d..72b085c495 100644 --- a/.github/workflows/server-mariadb-tests.yml +++ b/.github/workflows/server-mariadb-tests.yml @@ -121,6 +121,7 @@ jobs: ORCHESTRATOR_URL: http://test-orchestrator.frappe.io - name: Upload coverage data + if: ${{ steps.check-build.outputs.build == 'strawberry' }} uses: codecov/codecov-action@v2 with: name: MariaDB From fba196484c4efc184f3997779e57dccdb24c7adc Mon Sep 17 00:00:00 2001 From: Suraj Shetty <13928957+surajshetty3416@users.noreply.github.com> Date: Mon, 6 Sep 2021 22:50:42 +0530 Subject: [PATCH 14/14] ci: Conditionally run codecov upload --- .github/workflows/server-postgres-tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/server-postgres-tests.yml b/.github/workflows/server-postgres-tests.yml index 57ac9c6c60..ddc41c049c 100644 --- a/.github/workflows/server-postgres-tests.yml +++ b/.github/workflows/server-postgres-tests.yml @@ -124,6 +124,7 @@ jobs: ORCHESTRATOR_URL: http://test-orchestrator.frappe.io - name: Upload coverage data + if: ${{ steps.check-build.outputs.build == 'strawberry' }} uses: codecov/codecov-action@v2 with: name: Postgres