diff --git a/frappe/core/doctype/docfield/docfield.json b/frappe/core/doctype/docfield/docfield.json index f03c5506d3..0d8d7ea671 100644 --- a/frappe/core/doctype/docfield/docfield.json +++ b/frappe/core/doctype/docfield/docfield.json @@ -546,15 +546,16 @@ { "depends_on": "eval:!in_list([\"Tab Break\", \"Section Break\", \"Column Break\", \"Button\", \"HTML\"], doc.fieldtype)", "fieldname": "documentation_url", - "fieldtype": "Small Text", - "label": "Documentation URL" + "fieldtype": "Data", + "label": "Documentation URL", + "options": "URL" } ], "idx": 1, "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2022-11-17 14:14:39.404696", + "modified": "2023-01-11 20:46:43.164926", "modified_by": "Administrator", "module": "Core", "name": "DocField", diff --git a/frappe/core/doctype/system_settings/system_settings.py b/frappe/core/doctype/system_settings/system_settings.py index 0f7a7f0819..c4f35f3cc0 100644 --- a/frappe/core/doctype/system_settings/system_settings.py +++ b/frappe/core/doctype/system_settings/system_settings.py @@ -50,11 +50,14 @@ class SystemSettings(Document): social_login_enabled = frappe.db.exists("Social Login Key", {"enable_social_login": 1}) ldap_enabled = frappe.db.get_single_value("LDAP Settings", "enabled") + login_with_email_link_enabled = frappe.db.get_single_value( + "System Settings", "login_with_email_link" + ) - if not (social_login_enabled or ldap_enabled): + if not (social_login_enabled or ldap_enabled or login_with_email_link_enabled): frappe.throw( _( - "Please enable atleast one Social Login Key or LDAP before disabling username/password based login." + "Please enable atleast one Social Login Key or LDAP or Login With Email Link before disabling username/password based login." ) ) diff --git a/frappe/public/js/form_builder/components/EditableInput.vue b/frappe/public/js/form_builder/components/EditableInput.vue index 3ede63db43..8964838f4a 100644 --- a/frappe/public/js/form_builder/components/EditableInput.vue +++ b/frappe/public/js/form_builder/components/EditableInput.vue @@ -53,11 +53,11 @@ function focus_on_label() { @blur="editing = false" @click.stop /> - {{ text }} + {{ empty_label }} - {{ text }} + {{ placeholder }} diff --git a/frappe/public/js/form_builder/components/Field.vue b/frappe/public/js/form_builder/components/Field.vue index b6301352a3..5a7ce5626f 100644 --- a/frappe/public/js/form_builder/components/Field.vue +++ b/frappe/public/js/form_builder/components/Field.vue @@ -2,7 +2,7 @@ import EditableInput from "./EditableInput.vue"; import { ref, computed } from "vue"; import { useStore } from "../store"; -import { move_children_to_parent } from "../utils"; +import { move_children_to_parent, clone_field } from "../utils"; let props = defineProps(["column", "field"]); let store = useStore(); @@ -28,6 +28,20 @@ function move_fields_to_column() { ); move_children_to_parent(props, "column", "field", current_section); } + +function duplicate_field() { + let duplicate_field = clone_field(props.field); + + if (duplicate_field.df.label) { + duplicate_field.df.label = duplicate_field.df.label + " Copy"; + } + duplicate_field.df.fieldname = ""; + + // push duplicate_field after props.field in the same column + let index = props.column.fields.indexOf(props.field); + props.column.fields.splice(index + 1, 0, duplicate_field); + store.selected_field = duplicate_field.df; +}