{"version":3,"file":"dialog.min.js","sources":["../../../apps/frappe/frappe/public/js/frappe/dom.js","../../../apps/frappe/frappe/public/js/frappe/form/formatters.js","../../../apps/frappe/frappe/public/js/frappe/class.js","../../../apps/frappe/frappe/public/js/frappe/form/layout.js","../../../apps/frappe/frappe/public/js/frappe/ui/field_group.js","../../../apps/frappe/frappe/public/js/frappe/form/link_selector.js","../../../apps/frappe/frappe/public/js/frappe/form/multi_select_dialog.js","../../../apps/frappe/frappe/public/js/frappe/ui/dialog.js"],"sourcesContent":["// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors\n// MIT License. See license.txt\n\n// add a new dom element\nfrappe.provide('frappe.dom');\n\nfrappe.dom = {\n\tid_count: 0,\n\tfreeze_count: 0,\n\tby_id: function(id) {\n\t\treturn document.getElementById(id);\n\t},\n\tget_unique_id: function() {\n\t\tconst id = 'unique-' + frappe.dom.id_count;\n\t\tfrappe.dom.id_count++;\n\t\treturn id;\n\t},\n\tset_unique_id: function(ele) {\n\t\tvar $ele = $(ele);\n\t\tif($ele.attr('id')) {\n\t\t\treturn $ele.attr('id');\n\t\t}\n\t\tvar id = 'unique-' + frappe.dom.id_count;\n\t\t$ele.attr('id', id);\n\t\tfrappe.dom.id_count++;\n\t\treturn id;\n\t},\n\teval: function(txt) {\n\t\tif(!txt) return;\n\t\tvar el = document.createElement('script');\n\t\tel.appendChild(document.createTextNode(txt));\n\t\t// execute the script globally\n\t\tdocument.getElementsByTagName('head')[0].appendChild(el);\n\t},\n\tremove_script_and_style: function(txt) {\n\t\tconst evil_tags = [\"script\", \"style\", \"noscript\", \"title\", \"meta\", \"base\", \"head\"];\n\t\tconst parser = new DOMParser();\n\t\tconst doc = parser.parseFromString(txt, \"text/html\");\n\t\tconst body = doc.body;\n\t\tlet found = !!doc.head.innerHTML;\n\n\t\tfor (const tag of evil_tags) {\n\t\t\tfor (const element of body.getElementsByTagName(tag)) {\n\t\t\t\tfound = true;\n\t\t\t\telement.parentNode.removeChild(element);\n\t\t\t}\n\t\t}\n\n\t\tfor (const element of body.getElementsByTagName(\"link\")) {\n\t\t\tconst relation = element.getAttribute(\"rel\");\n\t\t\tif (relation && relation.toLowerCase().trim() === \"stylesheet\") {\n\t\t\t\tfound = true;\n\t\t\t\telement.parentNode.removeChild(element);\n\t\t\t}\n\t\t}\n\n\t\tif (found) {\n\t\t\treturn body.innerHTML;\n\t\t} else {\n\t\t\t// don't disturb\n\t\t\treturn txt;\n\t\t}\n\t},\n\tis_element_in_viewport: function (el, tolerance=0) {\n\n\t\t//special bonus for those using jQuery\n\t\tif (typeof jQuery === \"function\" && el instanceof jQuery) {\n\t\t\tel = el[0];\n\t\t}\n\n\t\tvar rect = el.getBoundingClientRect();\n\n\t\treturn (\n\t\t\trect.top + tolerance >= 0\n\t\t\t&& rect.left + tolerance >= 0\n\t\t\t&& rect.bottom - tolerance <= $(window).height()\n\t\t\t&& rect.right - tolerance <= $(window).width()\n\t\t);\n\t},\n\n\tis_element_in_modal(element) {\n\t\treturn Boolean($(element).parents('.modal').length);\n\t},\n\n\tset_style: function(txt, id) {\n\t\tif(!txt) return;\n\n\t\tvar se = document.createElement('style');\n\t\tse.type = \"text/css\";\n\n\t\tif (id) {\n\t\t\tvar element = document.getElementById(id);\n\t\t\tif (element) {\n\t\t\t\telement.parentNode.removeChild(element);\n\t\t\t}\n\t\t\tse.id = id;\n\t\t}\n\n\t\tif (se.styleSheet) {\n\t\t\tse.styleSheet.cssText = txt;\n\t\t} else {\n\t\t\tse.appendChild(document.createTextNode(txt));\n\t\t}\n\t\tdocument.getElementsByTagName('head')[0].appendChild(se);\n\t\treturn se;\n\t},\n\tadd: function(parent, newtag, className, cs, innerHTML, onclick) {\n\t\tif(parent && parent.substr)parent = frappe.dom.by_id(parent);\n\t\tvar c = document.createElement(newtag);\n\t\tif(parent)\n\t\t\tparent.appendChild(c);\n\n\t\t// if image, 3rd parameter is source\n\t\tif(className) {\n\t\t\tif(newtag.toLowerCase()=='img')\n\t\t\t\tc.src = className\n\t\t\telse\n\t\t\t\tc.className = className;\n\t\t}\n\t\tif(cs) frappe.dom.css(c,cs);\n\t\tif(innerHTML) c.innerHTML = innerHTML;\n\t\tif(onclick) c.onclick = onclick;\n\t\treturn c;\n\t},\n\tcss: function(ele, s) {\n\t\tif(ele && s) {\n\t\t\t$.extend(ele.style, s);\n\t\t}\n\t\treturn ele;\n\t},\n\tactivate: function($parent, $child, common_class, active_class='active') {\n\t\t$parent.find(`.${common_class}.${active_class}`)\n\t\t\t.removeClass(active_class);\n\t\t$child.addClass(active_class);\n\t},\n\tfreeze: function(msg, css_class) {\n\t\t// blur\n\t\tif (!$('#freeze').length) {\n\t\t\tvar freeze = $('
')\n\t\t\t\t.on(\"click\", function() {\n\t\t\t\t\tif (cur_frm && cur_frm.cur_grid) {\n\t\t\t\t\t\tcur_frm.cur_grid.toggle_view();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.appendTo(\"#body\");\n\n\t\t\tfreeze.html(repl(' ',\n\t\t\t\t{msg: msg || \"\"}));\n\n\t\t\tsetTimeout(function() { freeze.addClass(\"in\") }, 1);\n\n\t\t} else {\n\t\t\t$(\"#freeze\").addClass(\"in\");\n\t\t}\n\n\t\tif (css_class) {\n\t\t\t$(\"#freeze\").addClass(css_class);\n\t\t}\n\n\t\tfrappe.dom.freeze_count++;\n\t},\n\tunfreeze: function() {\n\t\tif(!frappe.dom.freeze_count) return; // anything open?\n\t\tfrappe.dom.freeze_count--;\n\t\tif(!frappe.dom.freeze_count) {\n\t\t\tvar freeze = $('#freeze').removeClass(\"in\").remove();\n\t\t}\n\t},\n\tsave_selection: function() {\n\t\t// via http://stackoverflow.com/questions/5605401/insert-link-in-contenteditable-element\n\t\tif (window.getSelection) {\n\t\t\tvar sel = window.getSelection();\n\t\t\tif (sel.getRangeAt && sel.rangeCount) {\n\t\t\t\tvar ranges = [];\n\t\t\t\tfor (var i = 0, len = sel.rangeCount; i < len; ++i) {\n\t\t\t\t\tranges.push(sel.getRangeAt(i));\n\t\t\t\t}\n\t\t\t\treturn ranges;\n\t\t\t}\n\t\t} else if (document.selection && document.selection.createRange) {\n\t\t\treturn document.selection.createRange();\n\t\t}\n\t\treturn null;\n\t},\n\trestore_selection: function(savedSel) {\n\t\tif (savedSel) {\n\t\t\tif (window.getSelection) {\n\t\t\t\tvar sel = window.getSelection();\n\t\t\t\tsel.removeAllRanges();\n\t\t\t\tfor (var i = 0, len = savedSel.length; i < len; ++i) {\n\t\t\t\t\tsel.addRange(savedSel[i]);\n\t\t\t\t}\n\t\t\t} else if (document.selection && savedSel.select) {\n\t\t\t\tsavedSel.select();\n\t\t\t}\n\t\t}\n\t},\n\tis_touchscreen: function() {\n\t\treturn ('ontouchstart' in window)\n\t},\n\thandle_broken_images(container) {\n\t\t$(container).find('img').on('error', (e) => {\n\t\t\tconst $img = $(e.currentTarget);\n\t\t\t$img.addClass('no-image');\n\t\t});\n\t},\n\tscroll_to_bottom(container) {\n\t\tconst $container = $(container);\n\t\t$container.scrollTop($container[0].scrollHeight);\n\t},\n\tfile_to_base64(file_obj) {\n\t\treturn new Promise(resolve => {\n\t\t\tconst reader = new FileReader();\n\t\t\treader.onload = function() {\n\t\t\t\tresolve(reader.result);\n\t\t\t};\n\t\t\treader.readAsDataURL(file_obj);\n\t\t});\n\t},\n\tscroll_to_section(section_name) {\n\t\tsetTimeout(() => {\n\t\t\tconst section = $(`a:contains(\"${section_name}\")`);\n\t\t\tif (section.length) {\n\t\t\t\tif(section.parent().hasClass('collapsed')) {\n\t\t\t\t\t// opens the section\n\t\t\t\t\tsection.click();\n\t\t\t\t}\n\t\t\t\tfrappe.ui.scroll(section.parent().parent());\n\t\t\t}\n\t\t}, 200);\n\t},\n\tpixel_to_inches(pixels) {\n\t\tconst div = $('');\n\t\tdiv.appendTo(document.body);\n\n\t\tconst dpi_x = document.getElementById('dpi').offsetWidth;\n\t\tconst inches = pixels / dpi_x;\n\t\tdiv.remove();\n\n\t\treturn inches;\n\t}\n};\n\nfrappe.ellipsis = function(text, max) {\n\tif(!max) max = 20;\n\ttext = cstr(text);\n\tif(text.length > max) {\n\t\ttext = text.substr(0, max) + '...';\n\t}\n\treturn text;\n};\n\nfrappe.run_serially = function(tasks) {\n\tvar result = Promise.resolve();\n\ttasks.forEach(task => {\n\t\tif(task) {\n\t\t\tresult = result.then ? result.then(task) : Promise.resolve();\n\t\t}\n\t});\n\treturn result;\n};\n\nfrappe.load_image = (src, onload, onerror, preprocess = () => {}) => {\n\tvar tester = new Image();\n\ttester.onload = function() {\n\t\tonload(this);\n\t};\n\ttester.onerror = onerror;\n\n\tpreprocess(tester);\n\ttester.src = src;\n}\n\nfrappe.timeout = seconds => {\n\treturn new Promise((resolve) => {\n\t\tsetTimeout(() => resolve(), seconds * 1000);\n\t});\n};\n\nfrappe.scrub = function(text, spacer='_') {\n\treturn text.replace(/ /g, spacer).toLowerCase();\n};\n\nfrappe.unscrub = function(txt) {\n\treturn frappe.model.unscrub(txt);\n};\n\nfrappe.get_data_pill = (label, target_id=null, remove_action=null, image=null) => {\n\tlet data_pill_wrapper = $(`\n\t\t\n\t`);\n\n\tif (remove_action) {\n\t\tlet remove_btn = $(`\n\t\t\t\n\t\t\t\t${frappe.utils.icon('close', 'sm')}\n\t\t\t\n\t\t`).click(() => {\n\t\t\tremove_action(target_id || label, data_pill_wrapper);\n\t\t});\n\t\tdata_pill_wrapper.append(remove_btn);\n\t}\n\n\treturn data_pill_wrapper;\n};\n\nfrappe.get_modal = function(title, content) {\n\treturn $(`\n\t\t\t\t\t${v}\n\t\t\t\t`;\n\t\t});\n\t\treturn html;\n\t},\n\tComment: function(value) {\n\t\treturn value;\n\t},\n\tAssign: function(value) {\n\t\tvar html = \"\";\n\t\t$.each(JSON.parse(value || \"[]\"), function(i, v) {\n\t\t\tif(v) html+= ''+v+'';\n\t\t});\n\t\treturn html;\n\t},\n\tSmallText: function(value) {\n\t\treturn frappe.form.formatters.Text(value);\n\t},\n\tTextEditor: function(value) {\n\t\tlet formatted_value = frappe.form.formatters.Text(value);\n\t\t// to use ql-editor styles\n\t\ttry {\n\t\t\tif (!$(formatted_value).find('.ql-editor').length) {\n\t\t\t\tformatted_value = `
\" + (value==null ? \"\" : $(\"\").text(value).html()) + \"\"\n\t},\n\tWorkflowState: function(value) {\n\t\tvar workflow_state = frappe.get_doc(\"Workflow State\", value);\n\t\tif(workflow_state) {\n\t\t\treturn repl(\"\\\n\t\t\t\t %(value)s\", {\n\t\t\t\t\tvalue: value,\n\t\t\t\t\tstyle: workflow_state.style.toLowerCase(),\n\t\t\t\t\ticon: workflow_state.icon\n\t\t\t\t});\n\t\t} else {\n\t\t\treturn \"\" + value + \"\";\n\t\t}\n\t},\n\tEmail: function(value) {\n\t\treturn $(\"\").text(value).html();\n\t},\n\tFileSize: function(value) {\n\t\tif(value > 1048576) {\n\t\t\tvalue = flt(flt(value) / 1048576, 1) + \"M\";\n\t\t} else if (value > 1024) {\n\t\t\tvalue = flt(flt(value) / 1024, 1) + \"K\";\n\t\t}\n\t\treturn value;\n\t},\n\tTableMultiSelect: function(rows, df, options) {\n\t\trows = rows || [];\n\t\tconst meta = frappe.get_meta(df.options);\n\t\tconst link_field = meta.fields.find(df => df.fieldtype === 'Link');\n\t\tconst formatted_values = rows.map(row => {\n\t\t\tconst value = row[link_field.fieldname];\n\t\t\treturn frappe.format(value, link_field, options, row);\n\t\t});\n\t\treturn formatted_values.join(', ');\n\t},\n\tColor: (value) => {\n\t\treturn value ? `\n\t\t\t\n\t\t\t${value}\n\t\t` : '';\n\t},\n\tIcon: (value) => {\n\t\treturn value ? `\n\t\t\t${value}\n\t\t` : '';\n\t}\n};\n\nfrappe.form.get_formatter = function(fieldtype) {\n\tif(!fieldtype)\n\t\tfieldtype = \"Data\";\n\treturn frappe.form.formatters[fieldtype.replace(/ /g, \"\")] || frappe.form.formatters.Data;\n}\n\nfrappe.format = function(value, df, options, doc) {\n\tif(!df) df = {\"fieldtype\":\"Data\"};\n\tif (df.fieldname == '_user_tags') df.fieldtype = 'Tag';\n\tvar fieldtype = df.fieldtype || \"Data\";\n\n\t// format Dynamic Link as a Link\n\tif(fieldtype===\"Dynamic Link\") {\n\t\tfieldtype = \"Link\";\n\t\tdf._options = doc ? doc[df.options] : null;\n\t}\n\n\tvar formatter = df.formatter || frappe.form.get_formatter(fieldtype);\n\n\tvar formatted = formatter(value, df, options, doc);\n\n\tif (typeof formatted == \"string\")\n\t\tformatted = frappe.dom.remove_script_and_style(formatted);\n\n\treturn formatted;\n};\n\nfrappe.get_format_helper = function(doc) {\n\tvar helper = {\n\t\tget_formatted: function(fieldname) {\n\t\t\tvar df = frappe.meta.get_docfield(doc.doctype, fieldname);\n\t\t\tif(!df) { console.log(\"fieldname not found: \" + fieldname); }\n\t\t\treturn frappe.format(doc[fieldname], df, {inline:1}, doc);\n\t\t}\n\t};\n\t$.extend(helper, doc);\n\treturn helper;\n};\n\nfrappe.form.link_formatters['User'] = function(value, doc, docfield) {\n\tlet full_name = doc && (doc.full_name || (docfield && doc[`${docfield.fieldname}_full_name`]));\n\treturn full_name || value;\n};\n","// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors\n// MIT License. See license.txt\n\n/*\n\nInheritence \"Class\"\n-------------------\nsee: http://ejohn.org/blog/simple-javascript-inheritance/\nTo subclass, use:\n\n\tvar MyClass = Class.extend({\n\t\tinit: function\n\t})\n\n*/\n// https://stackoverflow.com/a/15052240/5353542\n\n/* Simple JavaScript Inheritance for ES 5.1\n * based on http://ejohn.org/blog/simple-javascript-inheritance/\n * (inspired by base2 and Prototype)\n * MIT Licensed.\n */\n(function(global) {\n\t\"use strict\";\n\tvar fnTest = /xyz/.test(function(){xyz;}) ? /\\b_super\\b/ : /.*/;\n\n\t// The base Class implementation (does nothing)\n\tfunction Class(){}\n\n\t// Create a new Class that inherits from this class\n\tClass.extend = function(props) {\n\t var _super = this.prototype;\n\n\t // Set up the prototype to inherit from the base class\n\t // (but without running the init constructor)\n\t var proto = Object.create(_super);\n\n\t // Copy the properties over onto the new prototype\n\t for (var name in props) {\n\t\t// Check if we're overwriting an existing function\n\t\tproto[name] = typeof props[name] === \"function\" &&\n\t\t typeof _super[name] == \"function\" && fnTest.test(props[name])\n\t\t ? (function(name, fn){\n\t\t\t return function() {\n\t\t\t\tvar tmp = this._super;\n\n\t\t\t\t// Add a new ._super() method that is the same method\n\t\t\t\t// but on the super-class\n\t\t\t\tthis._super = _super[name];\n\n\t\t\t\t// The method only need to be bound temporarily, so we\n\t\t\t\t// remove it when we're done executing\n\t\t\t\tvar ret = fn.apply(this, arguments);\n\t\t\t\tthis._super = tmp;\n\n\t\t\t\treturn ret;\n\t\t\t };\n\t\t\t})(name, props[name])\n\t\t : props[name];\n\t }\n\n\t // The new constructor\n\t var newClass = typeof proto.init === \"function\"\n\t\t? proto.hasOwnProperty(\"init\")\n\t\t ? proto.init // All construction is actually done in the init method\n\t\t : function SubClass(){ _super.init.apply(this, arguments); }\n\t\t: function EmptyClass(){};\n\n\t // Populate our constructed prototype object\n\t newClass.prototype = proto;\n\n\t // Enforce the constructor to be what we expect\n\t proto.constructor = newClass;\n\n\t // And make this class extendable\n\t newClass.extend = Class.extend;\n\n\t return newClass;\n\t};\n\n\t// export\n\tglobal.Class = Class;\n })(this);","import '../class';\n\nfrappe.ui.form.Layout = Class.extend({\n\tinit: function (opts) {\n\t\tthis.views = {};\n\t\tthis.pages = [];\n\t\tthis.sections = [];\n\t\tthis.fields_list = [];\n\t\tthis.fields_dict = {};\n\n\t\t$.extend(this, opts);\n\t},\n\tmake: function() {\n\t\tif (!this.parent && this.body) {\n\t\t\tthis.parent = this.body;\n\t\t}\n\t\tthis.wrapper = $(' \n\t\t\t').appendTo(this.parent);\n\t\tthis.message = $('').appendTo(this.wrapper);\n\t\tif (!this.fields) {\n\t\t\tthis.fields = this.get_doctype_fields();\n\t\t}\n\t\tthis.setup_tabbing();\n\t\tthis.render();\n\t},\n\tshow_empty_form_message: function() {\n\t\tif (!(this.wrapper.find(\".frappe-control:visible\").length || this.wrapper.find(\".section-head.collapsed\").length)) {\n\t\t\tthis.show_message(__(\"This form does not have any input\"));\n\t\t}\n\t},\n\n\tget_doctype_fields: function() {\n\t\tlet fields = [\n\t\t\tthis.get_new_name_field()\n\t\t];\n\t\tif (this.doctype_layout) {\n\t\t\tfields = fields.concat(this.get_fields_from_layout());\n\t\t} else {\n\t\t\tfields = fields.concat(frappe.meta.sort_docfields(frappe.meta.docfield_map[this.doctype]));\n\t\t}\n\n\t\treturn fields;\n\t},\n\n\tget_new_name_field() {\n\t\treturn {\n\t\t\tparent: this.frm.doctype,\n\t\t\tfieldtype: 'Data',\n\t\t\tfieldname: '__newname',\n\t\t\treqd: 1,\n\t\t\thidden: 1,\n\t\t\tlabel: __('Name'),\n\t\t\tget_status: function(field) {\n\t\t\t\tif (field.frm && field.frm.is_new()\n\t\t\t\t\t&& field.frm.meta.autoname\n\t\t\t\t\t&& ['prompt', 'name'].includes(field.frm.meta.autoname.toLowerCase())) {\n\t\t\t\t\treturn 'Write';\n\t\t\t\t}\n\t\t\t\treturn 'None';\n\t\t\t}\n\t\t};\n\t},\n\n\tget_fields_from_layout() {\n\t\tconst fields = [];\n\t\tfor (let f of this.doctype_layout.fields) {\n\t\t\tconst docfield = copy_dict(frappe.meta.docfield_map[this.doctype][f.fieldname]);\n\t\t\tdocfield.label = f.label;\n\t\t\tfields.push(docfield);\n\t\t}\n\t\treturn fields;\n\t},\n\n\tshow_message: function(html, color) {\n\t\tif (this.message_color) {\n\t\t\t// remove previous color\n\t\t\tthis.message.removeClass(this.message_color);\n\t\t}\n\t\tthis.message_color = (color && ['yellow', 'blue', 'red', 'green', 'orange'].includes(color)) ? color : 'blue';\n\t\tif (html) {\n\t\t\tif (html.substr(0, 1)!=='<') {\n\t\t\t\t// wrap in a block\n\t\t\t\thtml = '' + html + '';\n\t\t\t}\n\t\t\tthis.message.removeClass('hidden').addClass(this.message_color);\n\t\t\t$(html).appendTo(this.message);\n\t\t} else {\n\t\t\tthis.message.empty().addClass('hidden');\n\t\t}\n\t},\n\trender: function (new_fields) {\n\t\tvar me = this;\n\t\tvar fields = new_fields || this.fields;\n\n\t\tthis.section = null;\n\t\tthis.column = null;\n\n\t\tif (this.with_dashboard) {\n\t\t\tthis.setup_dashboard_section();\n\t\t}\n\n\t\tif (this.no_opening_section()) {\n\t\t\tthis.make_section();\n\t\t}\n\t\t$.each(fields, function (i, df) {\n\t\t\tswitch (df.fieldtype) {\n\t\t\t\tcase \"Fold\":\n\t\t\t\t\tme.make_page(df);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Section Break\":\n\t\t\t\t\tme.make_section(df);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Column Break\":\n\t\t\t\t\tme.make_column(df);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tme.make_field(df);\n\t\t\t}\n\t\t});\n\n\t},\n\n\tno_opening_section: function () {\n\t\treturn (this.fields[0] && this.fields[0].fieldtype != \"Section Break\") || !this.fields.length;\n\t},\n\n\tsetup_dashboard_section: function () {\n\t\tif (this.no_opening_section()) {\n\t\t\tthis.fields.unshift({fieldtype: 'Section Break'});\n\t\t}\n\t},\n\n\treplace_field: function (fieldname, df, render) {\n\t\tdf.fieldname = fieldname; // change of fieldname is avoided\n\t\tif (this.fields_dict[fieldname] && this.fields_dict[fieldname].df) {\n\t\t\tconst fieldobj = this.init_field(df, render);\n\t\t\tthis.fields_dict[fieldname].$wrapper.remove();\n\t\t\tthis.fields_list.splice(this.fields_dict[fieldname], 1, fieldobj);\n\t\t\tthis.fields_dict[fieldname] = fieldobj;\n\t\t\tif (this.frm) {\n\t\t\t\tfieldobj.perm = this.frm.perm;\n\t\t\t}\n\t\t\tthis.section.fields_list.splice(this.section.fields_dict[fieldname], 1, fieldobj);\n\t\t\tthis.section.fields_dict[fieldname] = fieldobj;\n\t\t\tthis.refresh_fields([df]);\n\t\t}\n\t},\n\n\tmake_field: function (df, colspan, render) {\n\t\t!this.section && this.make_section();\n\t\t!this.column && this.make_column();\n\n\t\tconst fieldobj = this.init_field(df, render);\n\t\tthis.fields_list.push(fieldobj);\n\t\tthis.fields_dict[df.fieldname] = fieldobj;\n\t\tif (this.frm) {\n\t\t\tfieldobj.perm = this.frm.perm;\n\t\t}\n\n\t\tthis.section.fields_list.push(fieldobj);\n\t\tthis.section.fields_dict[df.fieldname] = fieldobj;\n\t\tfieldobj.section = this.section;\n\t},\n\n\tinit_field: function (df, render = false) {\n\t\tconst fieldobj = frappe.ui.form.make_control({\n\t\t\tdf: df,\n\t\t\tdoctype: this.doctype,\n\t\t\tparent: this.column.wrapper.get(0),\n\t\t\tfrm: this.frm,\n\t\t\trender_input: render,\n\t\t\tdoc: this.doc,\n\t\t\tlayout: this\n\t\t});\n\n\t\tfieldobj.layout = this;\n\t\treturn fieldobj;\n\t},\n\n\tmake_page: function (df) { // eslint-disable-line no-unused-vars\n\t\tvar me = this,\n\t\t\thead = $('\\\n\t\t\t\t' + __(\"Show more details\") + '\\\n\t\t\t').appendTo(this.wrapper);\n\n\t\tthis.page = $('').appendTo(this.wrapper);\n\n\t\tthis.fold_btn = head.find(\".btn-fold\").on(\"click\", function () {\n\t\t\tvar page = $(this).parent().next();\n\t\t\tif (page.hasClass(\"hide\")) {\n\t\t\t\t$(this).removeClass(\"btn-fold\").html(__(\"Hide details\"));\n\t\t\t\tpage.removeClass(\"hide\");\n\t\t\t\tfrappe.utils.scroll_to($(this), true, 30);\n\t\t\t\tme.folded = false;\n\t\t\t} else {\n\t\t\t\t$(this).addClass(\"btn-fold\").html(__(\"Show more details\"));\n\t\t\t\tpage.addClass(\"hide\");\n\t\t\t\tme.folded = true;\n\t\t\t}\n\t\t});\n\n\t\tthis.section = null;\n\t\tthis.folded = true;\n\t},\n\n\tunfold: function () {\n\t\tthis.fold_btn.trigger('click');\n\t},\n\n\tmake_section: function (df) {\n\t\tthis.section = new frappe.ui.form.Section(this, df);\n\n\t\t// append to layout fields\n\t\tif (df) {\n\t\t\tthis.fields_dict[df.fieldname] = this.section;\n\t\t\tthis.fields_list.push(this.section);\n\t\t}\n\n\t\tthis.column = null;\n\t},\n\n\tmake_column: function (df) {\n\t\tthis.column = new frappe.ui.form.Column(this.section, df);\n\t\tif (df && df.fieldname) {\n\t\t\tthis.fields_list.push(this.column);\n\t\t}\n\t},\n\n\trefresh: function (doc) {\n\t\tvar me = this;\n\t\tif (doc) this.doc = doc;\n\n\t\tif (this.frm) {\n\t\t\tthis.wrapper.find(\".empty-form-alert\").remove();\n\t\t}\n\n\t\t// NOTE this might seem redundant at first, but it needs to be executed when frm.refresh_fields is called\n\t\tme.attach_doc_and_docfields(true);\n\n\t\tif (this.frm && this.frm.wrapper) {\n\t\t\t$(this.frm.wrapper).trigger(\"refresh-fields\");\n\t\t}\n\n\t\t// dependent fields\n\t\tthis.refresh_dependency();\n\n\t\t// refresh sections\n\t\tthis.refresh_sections();\n\n\t\tif (this.frm) {\n\t\t\t// collapse sections\n\t\t\tthis.refresh_section_collapse();\n\t\t}\n\n\t\tif (document.activeElement) {\n\t\t\tif (document.activeElement.tagName == 'INPUT' && this.is_numeric_field_active()) {\n\t\t\t\tdocument.activeElement.select();\n\t\t\t}\n\t\t}\n\t},\n\n\tis_numeric_field_active() {\n\t\tconst control = $(document.activeElement).closest(\".frappe-control\");\n\t\tconst fieldtype = (control.data() || {}).fieldtype;\n\t\treturn frappe.model.numeric_fieldtypes.includes(fieldtype);\n\t},\n\n\trefresh_sections: function() {\n\t\t// hide invisible sections\n\t\tthis.wrapper.find(\".form-section:not(.hide-control)\").each(function() {\n\t\t\tconst section = $(this).removeClass(\"empty-section visible-section\");\n\t\t\tif (section.find(\".frappe-control:not(.hide-control)\").length) {\n\t\t\t\tsection.addClass(\"visible-section\");\n\t\t\t} else {\n\t\t\t\t// nothing visible, hide the section\n\t\t\t\tsection.addClass(\"empty-section\");\n\t\t\t}\n\t\t});\n\t},\n\n\trefresh_fields: function (fields) {\n\t\tlet fieldnames = fields.map((field) => {\n\t\t\tif (field.fieldname) return field.fieldname;\n\t\t});\n\n\t\tthis.fields_list.map(fieldobj => {\n\t\t\tif (fieldnames.includes(fieldobj.df.fieldname)) {\n\t\t\t\tfieldobj.refresh();\n\t\t\t\tif (fieldobj.df[\"default\"]) {\n\t\t\t\t\tfieldobj.set_input(fieldobj.df[\"default\"]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\tadd_fields: function (fields) {\n\t\tthis.render(fields);\n\t\tthis.refresh_fields(fields);\n\t},\n\n\trefresh_section_collapse: function () {\n\t\tif (!(this.sections && this.sections.length)) return;\n\n\t\tfor (var i = 0; i < this.sections.length; i++) {\n\t\t\tvar section = this.sections[i];\n\t\t\tvar df = section.df;\n\t\t\tif (df && df.collapsible) {\n\t\t\t\tvar collapse = true;\n\n\t\t\t\tif (df.collapsible_depends_on) {\n\t\t\t\t\tcollapse = !this.evaluate_depends_on_value(df.collapsible_depends_on);\n\t\t\t\t}\n\n\t\t\t\tif (collapse && section.has_missing_mandatory()) {\n\t\t\t\t\tcollapse = false;\n\t\t\t\t}\n\n\t\t\t\tsection.collapse(collapse);\n\t\t\t}\n\t\t}\n\t},\n\n\tattach_doc_and_docfields: function (refresh) {\n\t\tvar me = this;\n\t\tfor (var i = 0, l = this.fields_list.length; i < l; i++) {\n\t\t\tvar fieldobj = this.fields_list[i];\n\t\t\tif (me.doc) {\n\t\t\t\tfieldobj.doc = me.doc;\n\t\t\t\tfieldobj.doctype = me.doc.doctype;\n\t\t\t\tfieldobj.docname = me.doc.name;\n\t\t\t\tfieldobj.df = frappe.meta.get_docfield(me.doc.doctype,\n\t\t\t\t\tfieldobj.df.fieldname, me.doc.name) || fieldobj.df;\n\n\t\t\t\t// on form change, permissions can change\n\t\t\t\tif (me.frm) {\n\t\t\t\t\tfieldobj.perm = me.frm.perm;\n\t\t\t\t}\n\t\t\t}\n\t\t\trefresh && fieldobj.df && fieldobj.refresh && fieldobj.refresh();\n\t\t}\n\t},\n\n\trefresh_section_count: function () {\n\t\tthis.wrapper.find(\".section-count-label:visible\").each(function (i) {\n\t\t\t$(this).html(i + 1);\n\t\t});\n\t},\n\tsetup_tabbing: function () {\n\t\tvar me = this;\n\t\tthis.wrapper.on(\"keydown\", function (ev) {\n\t\t\tif (ev.which == 9) {\n\t\t\t\tvar current = $(ev.target),\n\t\t\t\t\tdoctype = current.attr(\"data-doctype\"),\n\t\t\t\t\tfieldname = current.attr(\"data-fieldname\");\n\t\t\t\tif (doctype)\n\t\t\t\t\treturn me.handle_tab(doctype, fieldname, ev.shiftKey);\n\t\t\t}\n\t\t});\n\t},\n\thandle_tab: function (doctype, fieldname, shift) {\n\t\tvar me = this,\n\t\t\tgrid_row = null,\n\t\t\tprev = null,\n\t\t\tfields = me.fields_list,\n\t\t\tin_grid = false,\n\t\t\tfocused = false;\n\n\t\t// in grid\n\t\tif (doctype != me.doctype) {\n\t\t\tgrid_row = me.get_open_grid_row();\n\t\t\tif (!grid_row || !grid_row.layout) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfields = grid_row.layout.fields_list;\n\t\t}\n\n\t\tfor (var i = 0, len = fields.length; i < len; i++) {\n\t\t\tif (fields[i].df.fieldname == fieldname) {\n\t\t\t\tif (shift) {\n\t\t\t\t\tif (prev) {\n\t\t\t\t\t\tthis.set_focus(prev);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(this.primary_button).focus();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (i < len - 1) {\n\t\t\t\t\tfocused = me.focus_on_next_field(i, fields);\n\t\t\t\t}\n\n\t\t\t\tif (focused) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.is_visible(fields[i]))\n\t\t\t\tprev = fields[i];\n\t\t}\n\n\t\tif (!focused) {\n\t\t\t// last field in this group\n\t\t\tif (grid_row) {\n\t\t\t\t// in grid\n\t\t\t\tif (grid_row.doc.idx == grid_row.grid.grid_rows.length) {\n\t\t\t\t\t// last row, close it and find next field\n\t\t\t\t\tgrid_row.toggle_view(false, function () {\n\t\t\t\t\t\tgrid_row.grid.frm.layout.handle_tab(grid_row.grid.df.parent, grid_row.grid.df.fieldname);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// next row\n\t\t\t\t\tgrid_row.grid.grid_rows[grid_row.doc.idx].toggle_view(true);\n\t\t\t\t}\n\t\t\t} else if (!shift) {\n\t\t\t\t// End of tab navigation\n\t\t\t\t$(this.primary_button).focus();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\tfocus_on_next_field: function (start_idx, fields) {\n\t\t// loop to find next eligible fields\n\t\tfor (var i = start_idx + 1, len = fields.length; i < len; i++) {\n\t\t\tvar field = fields[i];\n\t\t\tif (this.is_visible(field)) {\n\t\t\t\tif (field.df.fieldtype === \"Table\") {\n\t\t\t\t\t// open table grid\n\t\t\t\t\tif (!(field.grid.grid_rows && field.grid.grid_rows.length)) {\n\t\t\t\t\t\t// empty grid, add a new row\n\t\t\t\t\t\tfield.grid.add_new_row();\n\t\t\t\t\t}\n\t\t\t\t\t// show grid row (if exists)\n\t\t\t\t\tfield.grid.grid_rows[0].show_form();\n\t\t\t\t\treturn true;\n\n\t\t\t\t} else if (!in_list(frappe.model.no_value_type, field.df.fieldtype)) {\n\t\t\t\t\tthis.set_focus(field);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tis_visible: function (field) {\n\t\treturn field.disp_status === \"Write\" && (field.$wrapper && field.$wrapper.is(\":visible\"));\n\t},\n\tset_focus: function (field) {\n\t\t// next is table, show the table\n\t\tif (field.df.fieldtype==\"Table\") {\n\t\t\tif (!field.grid.grid_rows.length) {\n\t\t\t\tfield.grid.add_new_row(1);\n\t\t\t} else {\n\t\t\t\tfield.grid.grid_rows[0].toggle_view(true);\n\t\t\t}\n\t\t} else if (field.editor) {\n\t\t\tfield.editor.set_focus();\n\t\t} else if (field.$input) {\n\t\t\tfield.$input.focus();\n\t\t}\n\t},\n\tget_open_grid_row: function () {\n\t\treturn $(\".grid-row-open\").data(\"grid_row\");\n\t},\n\trefresh_dependency: function () {\n\t\t// Resolve \"depends_on\" and show / hide accordingly\n\t\tvar me = this;\n\n\t\t// build dependants' dictionary\n\t\tvar has_dep = false;\n\n\t\tfor (var fkey in this.fields_list) {\n\t\t\tvar f = this.fields_list[fkey];\n\t\t\tf.dependencies_clear = true;\n\t\t\tif (f.df.depends_on || f.df.mandatory_depends_on || f.df.read_only_depends_on) {\n\t\t\t\thas_dep = true;\n\t\t\t}\n\t\t}\n\n\t\tif (!has_dep) return;\n\n\t\t// show / hide based on values\n\t\tfor (var i = me.fields_list.length - 1; i >= 0; i--) {\n\t\t\tvar f = me.fields_list[i];\n\t\t\tf.guardian_has_value = true;\n\t\t\tif (f.df.depends_on) {\n\t\t\t\t// evaluate guardian\n\n\t\t\t\tf.guardian_has_value = this.evaluate_depends_on_value(f.df.depends_on);\n\n\t\t\t\t// show / hide\n\t\t\t\tif (f.guardian_has_value) {\n\t\t\t\t\tif (f.df.hidden_due_to_dependency) {\n\t\t\t\t\t\tf.df.hidden_due_to_dependency = false;\n\t\t\t\t\t\tf.refresh();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!f.df.hidden_due_to_dependency) {\n\t\t\t\t\t\tf.df.hidden_due_to_dependency = true;\n\t\t\t\t\t\tf.refresh();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (f.df.mandatory_depends_on) {\n\t\t\t\tthis.set_dependant_property(f.df.mandatory_depends_on, f.df.fieldname, 'reqd');\n\t\t\t}\n\n\t\t\tif (f.df.read_only_depends_on) {\n\t\t\t\tthis.set_dependant_property(f.df.read_only_depends_on, f.df.fieldname, 'read_only');\n\t\t\t}\n\t\t}\n\n\t\tthis.refresh_section_count();\n\t},\n\tset_dependant_property: function (condition, fieldname, property) {\n\t\tlet set_property = this.evaluate_depends_on_value(condition);\n\t\tlet value = set_property ? 1 : 0;\n\t\tlet form_obj;\n\n\t\tif (this.frm) {\n\t\t\tform_obj = this.frm;\n\t\t} else if (this.is_dialog || this.doctype === 'Web Form') {\n\t\t\tform_obj = this;\n\t\t}\n\t\tif (form_obj) {\n\t\t\tif (this.doc && this.doc.parent && this.doc.parentfield) {\n\t\t\t\tform_obj.setting_dependency = true;\n\t\t\t\tform_obj.set_df_property(this.doc.parentfield, property, value, this.doc.parent, fieldname, this.doc.name);\n\t\t\t\tform_obj.setting_dependency = false;\n\t\t\t\t// refresh child fields\n\t\t\t\tthis.fields_dict[fieldname] && this.fields_dict[fieldname].refresh();\n\t\t\t} else {\n\t\t\t\tform_obj.set_df_property(fieldname, property, value);\n\t\t\t}\n\t\t}\n\t},\n\tevaluate_depends_on_value: function (expression) {\n\t\tvar out = null;\n\t\tvar doc = this.doc;\n\n\t\tif (!doc && this.get_values) {\n\t\t\tvar doc = this.get_values(true);\n\t\t}\n\n\t\tif (!doc) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar parent = this.frm ? this.frm.doc : this.doc || null;\n\n\t\tif (typeof (expression) === 'boolean') {\n\t\t\tout = expression;\n\n\t\t} else if (typeof (expression) === 'function') {\n\t\t\tout = expression(doc);\n\n\t\t} else if (expression.substr(0, 5)=='eval:') {\n\t\t\ttry {\n\t\t\t\tout = frappe.utils.eval(expression.substr(5), { doc, parent });\n\t\t\t\tif (parent && parent.istable && expression.includes('is_submittable')) {\n\t\t\t\t\tout = true;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tfrappe.throw(__('Invalid \"depends_on\" expression'));\n\t\t\t}\n\n\t\t} else if (expression.substr(0, 3)=='fn:' && this.frm) {\n\t\t\tout = this.frm.script_manager.trigger(expression.substr(3), this.doctype, this.docname);\n\t\t} else {\n\t\t\tvar value = doc[expression];\n\t\t\tif ($.isArray(value)) {\n\t\t\t\tout = !!value.length;\n\t\t\t} else {\n\t\t\t\tout = !!value;\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t}\n});\n\nfrappe.ui.form.Section = Class.extend({\n\tinit: function(layout, df) {\n\t\tthis.layout = layout;\n\t\tthis.df = df || {};\n\t\tthis.fields_list = [];\n\t\tthis.fields_dict = {};\n\n\t\tthis.make();\n\t\t// if (this.frm)\n\t\t// \tthis.section.body.css({\"padding\":\"0px 3%\"})\n\t\tthis.row = {\n\t\t\twrapper: this.wrapper\n\t\t};\n\n\t\tthis.refresh();\n\t},\n\tmake: function() {\n\t\tif (!this.layout.page) {\n\t\t\tthis.layout.page = $('').appendTo(this.layout.wrapper);\n\t\t}\n\t\tlet make_card = this.layout.card_layout;\n\t\tthis.wrapper = $(``)\n\t\t\t.appendTo(this.layout.page);\n\t\tthis.layout.sections.push(this);\n\n\t\tif (this.df) {\n\t\t\tif (this.df.label) {\n\t\t\t\tthis.make_head();\n\t\t\t}\n\t\t\tif (this.df.description) {\n\t\t\t\t$('' + __(this.df.description) + '')\n\t\t\t\t\t.appendTo(this.wrapper);\n\t\t\t}\n\t\t\tif (this.df.cssClass) {\n\t\t\t\tthis.wrapper.addClass(this.df.cssClass);\n\t\t\t}\n\t\t\tif (this.df.hide_border) {\n\t\t\t\tthis.wrapper.toggleClass(\"hide-border\", true);\n\t\t\t}\n\t\t}\n\n\t\t// for bc\n\t\tthis.body = $('').appendTo(this.wrapper);\n\t},\n\n\tmake_head: function () {\n\t\tthis.head = $(`\n\t\t\t${__(this.df.label)}\n\t\t\t\n\t\t\t\n\t\t`);\n\t\tthis.head.appendTo(this.wrapper);\n\t\tthis.indicator = this.head.find('.collapse-indicator');\n\t\tthis.indicator.hide();\n\t\tif (this.df.collapsible) {\n\t\t\t// show / hide based on status\n\t\t\tthis.collapse_link = this.head.on(\"click\", () => {\n\t\t\t\tthis.collapse();\n\t\t\t});\n\n\t\t\tthis.indicator.show();\n\t\t}\n\t},\n\trefresh: function() {\n\t\tif (!this.df)\n\t\t\treturn;\n\n\t\t// hide if explictly hidden\n\t\tvar hide = this.df.hidden || this.df.hidden_due_to_dependency;\n\n\t\t// hide if no perm\n\t\tif (!hide && this.layout && this.layout.frm && !this.layout.frm.get_perm(this.df.permlevel || 0, \"read\")) {\n\t\t\thide = true;\n\t\t}\n\n\t\tthis.wrapper.toggleClass(\"hide-control\", !!hide);\n\t},\n\tcollapse: function (hide) {\n\t\t// unknown edge case\n\t\tif (!(this.head && this.body)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (hide===undefined) {\n\t\t\thide = !this.body.hasClass(\"hide\");\n\t\t}\n\n\t\tthis.body.toggleClass(\"hide\", hide);\n\t\tthis.head.toggleClass(\"collapsed\", hide);\n\n\t\tlet indicator_icon = hide ? 'down' : 'up-line';\n\n\t\tthis.indicator & this.indicator.html(frappe.utils.icon(indicator_icon, 'sm', 'mb-1'));\n\n\t\t// refresh signature fields\n\t\tthis.fields_list.forEach((f) => {\n\t\t\tif (f.df.fieldtype == 'Signature') {\n\t\t\t\tf.refresh();\n\t\t\t}\n\t\t});\n\t},\n\n\tis_collapsed() {\n\t\treturn this.body.hasClass('hide');\n\t},\n\n\thas_missing_mandatory: function () {\n\t\tvar missing_mandatory = false;\n\t\tfor (var j = 0, l = this.fields_list.length; j < l; j++) {\n\t\t\tvar section_df = this.fields_list[j].df;\n\t\t\tif (section_df.reqd && this.layout.doc[section_df.fieldname] == null) {\n\t\t\t\tmissing_mandatory = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn missing_mandatory;\n\t}\n});\n\nfrappe.ui.form.Column = Class.extend({\n\tinit: function(section, df) {\n\t\tif (!df) df = {};\n\n\t\tthis.df = df;\n\t\tthis.section = section;\n\t\tthis.make();\n\t\tthis.resize_all_columns();\n\t},\n\tmake: function () {\n\t\tthis.wrapper = $('\\\n\t\t\t\\\n\t\t').appendTo(this.section.body)\n\t\t\t.find(\"form\")\n\t\t\t.on(\"submit\", function () {\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\tif (this.df.label) {\n\t\t\t$('').appendTo(this.wrapper);\n\t\t}\n\t},\n\tresize_all_columns: function () {\n\t\t// distribute all columns equally\n\t\tvar colspan = cint(12 / this.section.wrapper.find(\".form-column\").length);\n\n\t\tthis.section.wrapper.find(\".form-column\").removeClass()\n\t\t\t.addClass(\"form-column\")\n\t\t\t.addClass(\"col-sm-\" + colspan);\n\n\t},\n\trefresh: function () {\n\t\tthis.section.refresh();\n\t}\n});\n","import '../form/layout';\n\nfrappe.provide('frappe.ui');\n\nfrappe.ui.FieldGroup = frappe.ui.form.Layout.extend({\n\tinit: function(opts) {\n\t\t$.extend(this, opts);\n\t\tthis.dirty = false;\n\t\tthis._super();\n\t\t$.each(this.fields || [], function(i, f) {\n\t\t\tif(!f.fieldname && f.label) {\n\t\t\t\tf.fieldname = f.label.replace(/ /g, \"_\").toLowerCase();\n\t\t\t}\n\t\t})\n\t\tif(this.values) {\n\t\t\tthis.set_values(this.values);\n\t\t}\n\t},\n\tmake: function() {\n\t\tvar me = this;\n\t\tif(this.fields) {\n\t\t\tthis._super();\n\t\t\tthis.refresh();\n\t\t\t// set default\n\t\t\t$.each(this.fields_list, function(i, field) {\n\t\t\t\tif (field.df[\"default\"]) {\n\t\t\t\t\tlet def_value = field.df[\"default\"];\n\n\t\t\t\t\tif (def_value == 'Today' && field.df[\"fieldtype\"] == 'Date') {\n\t\t\t\t\t\tdef_value = frappe.datetime.get_today();\n\t\t\t\t\t}\n\n\t\t\t\t\tfield.set_input(def_value);\n\t\t\t\t\t// if default and has depends_on, render its fields.\n\t\t\t\t\tme.refresh_dependency();\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tif(!this.no_submit_on_enter) {\n\t\t\t\tthis.catch_enter_as_submit();\n\t\t\t}\n\n\t\t\t$(this.wrapper).find('input, select').on(\n\t\t\t\t'change awesomplete-selectcomplete',\n\t\t\t\t() => {\n\t\t\t\t\tthis.dirty = true;\n\t\t\t\t\tfrappe.run_serially([\n\t\t\t\t\t\t() => frappe.timeout(0.1),\n\t\t\t\t\t\t() => me.refresh_dependency()\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t);\n\n\t\t}\n\t},\n\tfirst_button: false,\n\tfocus_on_first_input: function() {\n\t\tif(this.no_focus) return;\n\t\t$.each(this.fields_list, function(i, f) {\n\t\t\tif(!in_list(['Date', 'Datetime', 'Time', 'Check'], f.df.fieldtype) && f.set_focus) {\n\t\t\t\tf.set_focus();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t},\n\tcatch_enter_as_submit: function() {\n\t\tvar me = this;\n\t\t$(this.body).find('input[type=\"text\"], input[type=\"password\"], select').keypress(function(e) {\n\t\t\tif(e.which==13) {\n\t\t\t\tif(me.has_primary_action) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tme.get_primary_btn().trigger(\"click\");\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\tget_input: function(fieldname) {\n\t\tvar field = this.fields_dict[fieldname];\n\t\treturn $(field.txt ? field.txt : field.input);\n\t},\n\tget_field: function(fieldname) {\n\t\treturn this.fields_dict[fieldname];\n\t},\n\tget_values: function(ignore_errors) {\n\t\tvar ret = {};\n\t\tvar errors = [];\n\t\tfor (var key in this.fields_dict) {\n\t\t\tvar f = this.fields_dict[key];\n\t\t\tif (f.get_value) {\n\t\t\t\tvar v = f.get_value();\n\t\t\t\tif (\n\t\t\t\t\tf.df.reqd &&\n\t\t\t\t\tis_null(typeof v === 'string' ? strip_html(v) : v)\n\t\t\t\t)\n\t\t\t\t\terrors.push(__(f.df.label));\n\n\t\t\t\tif (f.df.reqd\n\t\t\t\t\t&& f.df.fieldtype === 'Text Editor'\n\t\t\t\t\t&& is_null(strip_html(cstr(v))))\n\t\t\t\t\terrors.push(__(f.df.label));\n\n\t\t\t\tif (!is_null(v)) ret[f.df.fieldname] = v;\n\t\t\t}\n\t\t}\n\t\tif (errors.length && !ignore_errors) {\n\t\t\tfrappe.msgprint({\n\t\t\t\ttitle: __('Missing Values Required'),\n\t\t\t\tmessage: __('Following fields have missing values:') +\n\t\t\t\t\t'',\n\t\t\t\tindicator: 'orange'\n\t\t\t});\n\t\t\treturn null;\n\t\t}\n\t\treturn ret;\n\t},\n\tget_value: function(key) {\n\t\tvar f = this.fields_dict[key];\n\t\treturn f && (f.get_value ? f.get_value() : null);\n\t},\n\tset_value: function(key, val){\n\t\treturn new Promise(resolve => {\n\t\t\tvar f = this.fields_dict[key];\n\t\t\tif(f) {\n\t\t\t\tf.set_value(val).then(() => {\n\t\t\t\t\tf.set_input(val);\n\t\t\t\t\tthis.refresh_dependency();\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tresolve();\n\t\t\t}\n\t\t});\n\t},\n\thas_field: function(fieldname) {\n\t\treturn !!this.fields_dict[fieldname];\n\t},\n\tset_input: function(key, val) {\n\t\treturn this.set_value(key, val);\n\t},\n\tset_values: function(dict) {\n\t\tlet promises = [];\n\t\tfor(var key in dict) {\n\t\t\tif(this.fields_dict[key]) {\n\t\t\t\tpromises.push(this.set_value(key, dict[key]));\n\t\t\t}\n\t\t}\n\n\t\treturn Promise.all(promises);\n\t},\n\tclear: function() {\n\t\tfor(var key in this.fields_dict) {\n\t\t\tvar f = this.fields_dict[key];\n\t\t\tif(f && f.set_input) {\n\t\t\t\tf.set_input(f.df['default'] || '');\n\t\t\t}\n\t\t}\n\t},\n\tset_df_property: function (fieldname, prop, value) {\n\t\tif (!fieldname) {\n\t\t\treturn;\n\t\t}\n\t\tconst field = this.get_field(fieldname);\n\t\tfield.df[prop] = value;\n\t\tfield.refresh();\n\t}\n});\n","// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors\n// MIT License. See license.txt\n\nfrappe.ui.form.LinkSelector = Class.extend({\n\tinit: function (opts) {\n\t\t/* help: Options: doctype, get_query, target */\n\t\t$.extend(this, opts);\n\n\t\tvar me = this;\n\t\tif (this.doctype != \"[Select]\") {\n\t\t\tfrappe.model.with_doctype(this.doctype, function (r) {\n\t\t\t\tme.make();\n\t\t\t});\n\t\t} else {\n\t\t\tthis.make();\n\t\t}\n\t},\n\tmake: function () {\n\t\tvar me = this;\n\n\t\tthis.start = 0;\n\t\tthis.dialog = new frappe.ui.Dialog({\n\t\t\ttitle: __(\"Select {0}\", [(this.doctype == '[Select]') ? __(\"value\") : __(this.doctype)]),\n\t\t\tfields: [\n\t\t\t\t{\n\t\t\t\t\tfieldtype: \"Data\", fieldname: \"txt\", label: __(\"Beginning with\"),\n\t\t\t\t\tdescription: __(\"You can use wildcard %\"),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfieldtype: \"HTML\", fieldname: \"results\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfieldtype: \"Button\", fieldname: \"more\", label: __(\"More\"), click: () => {\n\t\t\t\t\t\tme.start += 20;\n\t\t\t\t\t\tme.search();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\tprimary_action_label: __(\"Search\"),\n\t\t\tprimary_action: function () {\n\t\t\t\tme.start = 0;\n\t\t\t\tme.search();\n\t\t\t}\n\t\t});\n\n\t\tif (this.txt)\n\t\t\tthis.dialog.fields_dict.txt.set_input(this.txt);\n\n\t\tthis.dialog.get_input(\"txt\").on(\"keypress\", function (e) {\n\t\t\tif (e.which === 13) {\n\t\t\t\tme.start = 0;\n\t\t\t\tme.search();\n\t\t\t}\n\t\t});\n\t\tthis.dialog.show();\n\t\tthis.search();\n\t},\n\tsearch: function () {\n\t\tvar args = {\n\t\t\ttxt: this.dialog.fields_dict.txt.get_value(),\n\t\t\tsearchfield: \"name\",\n\t\t\tstart: this.start\n\t\t};\n\t\tvar me = this;\n\n\t\tif (this.target.set_custom_query) {\n\t\t\tthis.target.set_custom_query(args);\n\t\t}\n\n\t\t// load custom query from grid\n\t\tif (this.target.is_grid && this.target.fieldinfo[this.fieldname]\n\t\t\t&& this.target.fieldinfo[this.fieldname].get_query) {\n\t\t\t$.extend(args,\n\t\t\t\tthis.target.fieldinfo[this.fieldname].get_query(cur_frm.doc));\n\t\t}\n\n\t\tfrappe.link_search(this.doctype, args, function (r) {\n\t\t\tvar parent = me.dialog.fields_dict.results.$wrapper;\n\t\t\tif (args.start === 0) {\n\t\t\t\tparent.empty();\n\t\t\t}\n\n\t\t\tif (r.values.length) {\n\t\t\t\t$.each(r.values, function (i, v) {\n\t\t\t\t\tvar row = $(repl('
- ' + errors.join('
- ') + '
\\\n\t\t\t\t\t\t', {\n\t\t\t\t\t\t\tname: v[0],\n\t\t\t\t\t\t\tvalues: v.splice(1).join(\", \")\n\t\t\t\t\t\t})).appendTo(parent);\n\n\t\t\t\t\trow.find(\"a\")\n\t\t\t\t\t\t.attr('data-value', v[0])\n\t\t\t\t\t\t.click(function () {\n\t\t\t\t\t\t\tvar value = $(this).attr(\"data-value\");\n\t\t\t\t\t\t\tvar $link = this;\n\t\t\t\t\t\t\tif (me.target.is_grid) {\n\t\t\t\t\t\t\t\t// set in grid\n\t\t\t\t\t\t\t\tme.set_in_grid(value);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (me.target.doctype)\n\t\t\t\t\t\t\t\t\tme.target.parse_validate_and_set_in_model(value);\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tme.target.set_input(value);\n\t\t\t\t\t\t\t\t\tme.target.$input.trigger(\"change\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tme.dialog.hide();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\t$('\\\n\t\t\t\t\t\t\t%(name)s\\\n\t\t\t\t\t\t\\\n\t\t\t\t\t\t\t%(values)s\\\n\t\t\t\t\t\t').appendTo(parent).find(\".new-doc\").click(function () {\n\t\t\t\t\t\tfrappe.new_doc(me.doctype);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (r.values.length < 20) {\n\t\t\t\tvar more_btn = me.dialog.fields_dict.more.$wrapper;\n\t\t\t\tmore_btn.hide();\n\t\t\t}\n\n\t\t}, this.dialog.get_primary_btn());\n\n\t},\n\tset_in_grid: function (value) {\n\t\tvar me = this, updated = false;\n\t\tvar d = null;\n\t\tif (this.qty_fieldname) {\n\t\t\tfrappe.prompt({\n\t\t\t\tfieldname: \"qty\", fieldtype: \"Float\", label: \"Qty\",\n\t\t\t\t\"default\": 1, reqd: 1\n\t\t\t}, function (data) {\n\t\t\t\t$.each(me.target.frm.doc[me.target.df.fieldname] || [], function (i, d) {\n\t\t\t\t\tif (d[me.fieldname] === value) {\n\t\t\t\t\t\tfrappe.model.set_value(d.doctype, d.name, me.qty_fieldname, data.qty);\n\t\t\t\t\t\tfrappe.show_alert(__(\"Added {0} ({1})\", [value, d[me.qty_fieldname]]));\n\t\t\t\t\t\tupdated = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (!updated) {\n\t\t\t\t\tfrappe.run_serially([\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\td = me.target.add_new_row();\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => frappe.timeout(0.1),\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\tlet args = {};\n\t\t\t\t\t\t\targs[me.fieldname] = value;\n\t\t\t\t\t\t\targs[me.qty_fieldname] = data.qty;\n\n\t\t\t\t\t\t\treturn frappe.model.set_value(d.doctype, d.name, args);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t() => frappe.show_alert(__(\"Added {0} ({1})\", [value, data.qty]))\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t}, __(\"Set Quantity\"), __(\"Set Quantity\"));\n\t\t} else if (me.dynamic_link_field) {\n\t\t\tvar d = me.target.add_new_row();\n\t\t\tfrappe.model.set_value(d.doctype, d.name, me.dynamic_link_field, me.dynamic_link_reference);\n\t\t\tfrappe.model.set_value(d.doctype, d.name, me.fieldname, value);\n\t\t\tfrappe.show_alert(__(\"{0} {1} added\", [me.dynamic_link_reference, value]));\n\t\t} else {\n\t\t\tvar d = me.target.add_new_row();\n\t\t\tfrappe.model.set_value(d.doctype, d.name, me.fieldname, value);\n\t\t\tfrappe.show_alert(__(\"{0} added\", [value]));\n\t\t}\n\t}\n});\n\nfrappe.link_search = function (doctype, args, callback, btn) {\n\tif (!args) {\n\t\targs = {\n\t\t\ttxt: ''\n\t\t}\n\t}\n\targs.doctype = doctype;\n\tif (!args.searchfield) {\n\t\targs.searchfield = 'name';\n\t}\n\n\tfrappe.call({\n\t\tmethod: \"frappe.desk.search.search_widget\",\n\t\ttype: \"GET\",\n\t\targs: args,\n\t\tcallback: function (r) {\n\t\t\tcallback && callback(r);\n\t\t},\n\t\tbtn: btn\n\t});\n}\n\n","frappe.ui.form.MultiSelectDialog = class MultiSelectDialog {\n\tconstructor(opts) {\n\t\t/* Options: doctype, target, setters, get_query, action, add_filters_group, data_fields, primary_action_label */\n\t\tObject.assign(this, opts);\n\t\tthis.for_select = this.doctype == \"[Select]\";\n\t\tif (!this.for_select) {\n\t\t\tfrappe.model.with_doctype(this.doctype, () => this.init());\n\t\t} else {\n\t\t\tthis.init();\n\t\t}\n\t}\n\n\tinit() {\n\t\tthis.page_length = 20;\n\t\tthis.child_page_length = 20;\n\t\tthis.fields = this.get_fields();\n\n\t\tthis.make();\n\t}\n\n\tget_fields() {\n\t\tconst primary_fields = this.get_primary_filters();\n\t\tconst result_fields = this.get_result_fields();\n\t\tconst data_fields = this.get_data_fields();\n\t\tconst child_selection_fields = this.get_child_selection_fields();\n\n\t\treturn [...primary_fields, ...result_fields, ...data_fields, ...child_selection_fields];\n\t}\n\n\tget_result_fields() {\n\t\tconst show_next_page = () => {\n\t\t\tthis.page_length += 20;\n\t\t\tthis.get_results();\n\t\t};\n\t\treturn [\n\t\t\t{\n\t\t\t\tfieldtype: \"HTML\", fieldname: \"results_area\"\n\t\t\t},\n\t\t\t{\n\t\t\t\tfieldtype: \"Button\", fieldname: \"more_btn\",\n\t\t\t\tlabel: __(\"More\"), click: show_next_page.bind(this)\n\t\t\t}\n\t\t];\n\t}\n\n\tget_data_fields() {\n\t\tif (this.data_fields && this.data_fields.length) {\n\t\t\t// Custom Data Fields\n\t\t\treturn [\n\t\t\t\t{ fieldtype: \"Section Break\" },\n\t\t\t\t...this.data_fields\n\t\t\t];\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tget_child_selection_fields() {\n\t\tconst fields = [];\n\t\tif (this.allow_child_item_selection && this.child_fieldname) {\n\t\t\tconst show_more_child_results = () => {\n\t\t\t\tthis.child_page_length += 20;\n\t\t\t\tthis.show_child_results();\n\t\t\t};\n\t\t\tfields.push({ fieldtype: \"HTML\", fieldname: \"child_selection_area\" });\n\t\t\tfields.push({\n\t\t\t\tfieldtype: \"Button\", fieldname: \"more_child_btn\", hidden: 1,\n\t\t\t\tlabel: __(\"More\"), click: show_more_child_results.bind(this)\n\t\t\t});\n\t\t}\n\t\treturn fields;\n\t}\n\n\tmake() {\n\t\tlet doctype_plural = __(this.doctype).plural();\n\t\tlet title = __(\"Select {0}\", [this.for_select ? __(\"value\") : doctype_plural]);\n\n\t\tthis.dialog = new frappe.ui.Dialog({\n\t\t\ttitle: title,\n\t\t\tfields: this.fields,\n\t\t\tsize: this.size,\n\t\t\tprimary_action_label: this.primary_action_label || __(\"Get Items\"),\n\t\t\tsecondary_action_label: __(\"Make {0}\", [__(this.doctype)]),\n\t\t\tprimary_action: () => {\n\t\t\t\tlet filters_data = this.get_custom_filters();\n\t\t\t\tconst data_values = cur_dialog.get_values(); // to pass values of data fields\n\t\t\t\tconst filtered_children = this.get_selected_child_names();\n\t\t\t\tconst selected_documents = [...this.get_checked_values(), ...this.get_parent_name_of_selected_children()];\n\t\t\t\tthis.action(selected_documents, {\n\t\t\t\t\t...this.args,\n\t\t\t\t\t...data_values,\n\t\t\t\t\t...filters_data,\n\t\t\t\t\tfiltered_children\n\t\t\t\t});\n\t\t\t},\n\t\t\tsecondary_action: this.make_new_document.bind(this)\n\t\t});\n\n\t\tif (this.add_filters_group) {\n\t\t\tthis.make_filter_area();\n\t\t}\n\n\t\tthis.args = {};\n\n\t\tthis.setup_results();\n\t\tthis.bind_events();\n\t\tthis.get_results();\n\t\tthis.dialog.show();\n\t}\n\n\tmake_new_document(e) {\n\t\t// If user wants to close the modal\n\t\tif (e) {\n\t\t\tthis.set_route_options();\n\t\t\tfrappe.new_doc(this.doctype, true);\n\t\t}\n\t}\n\n\tset_route_options() {\n\t\t// set route options to get pre-filled form fields\n\t\tfrappe.route_options = {};\n\t\tif (Array.isArray(this.setters)) {\n\t\t\tfor (let df of this.setters) {\n\t\t\t\tfrappe.route_options[df.fieldname] = this.dialog.fields_dict[df.fieldname].get_value() || undefined;\n\t\t\t}\n\t\t} else {\n\t\t\tObject.keys(this.setters).forEach(setter => {\n\t\t\t\tfrappe.route_options[setter] = this.dialog.fields_dict[setter].get_value() || undefined;\n\t\t\t});\n\t\t}\n\t}\n\n\tsetup_results() {\n\t\tthis.$parent = $(this.dialog.body);\n\t\tthis.$wrapper = this.dialog.fields_dict.results_area.$wrapper.append(``);\n\n\t\tthis.$results = this.$wrapper.find('.results');\n\t\tthis.$results.append(this.make_list_row());\n\t}\n\n\tshow_child_results() {\n\t\tthis.get_child_result().then(r => {\n\t\t\tthis.child_results = r.message || [];\n\t\t\tthis.render_child_datatable();\n\n\t\t\tthis.$wrapper.addClass('hidden');\n\t\t\tthis.$child_wrapper.removeClass('hidden');\n\t\t\tthis.dialog.fields_dict.more_btn.$wrapper.hide();\n\t\t});\n\t}\n\n\ttoggle_child_selection() {\n\t\tif (this.dialog.fields_dict['allow_child_item_selection'].get_value()) {\n\t\t\tthis.show_child_results();\n\t\t} else {\n\t\t\tthis.child_results = [];\n\t\t\tthis.get_results();\n\t\t\tthis.$wrapper.removeClass('hidden');\n\t\t\tthis.$child_wrapper.addClass('hidden');\n\t\t}\n\t}\n\n\trender_child_datatable() {\n\t\tif (!this.child_datatable) {\n\t\t\tthis.setup_child_datatable();\n\t\t} else {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.child_datatable.rowmanager.checkMap = [];\n\t\t\t\tthis.child_datatable.refresh(this.get_child_datatable_rows());\n\t\t\t\tthis.$child_wrapper.find('.dt-scrollable').css('height', '300px');\n\t\t\t\tthis.$child_wrapper.find('.dt-scrollable').css('overflow-y', 'scroll');\n\t\t\t}, 500);\n\t\t}\n\t}\n\n\tget_child_datatable_columns() {\n\t\tconst parent = this.doctype;\n\t\treturn [parent, ...this.child_columns].map(d => ({ name: frappe.unscrub(d), editable: false }));\n\t}\n\n\tget_child_datatable_rows() {\n\t\tif (this.child_results.length > this.child_page_length) {\n\t\t\tthis.dialog.fields_dict.more_child_btn.toggle(true);\n\t\t} else {\n\t\t\tthis.dialog.fields_dict.more_child_btn.toggle(false);\n\t\t}\n\t\treturn this.child_results\n\t\t\t.slice(0, this.child_page_length)\n\t\t\t.map(d => Object.values(d).slice(1)); // slice name field\n\t}\n\n\tsetup_child_datatable() {\n\t\tconst header_columns = this.get_child_datatable_columns();\n\t\tconst rows = this.get_child_datatable_rows();\n\t\tthis.$child_wrapper = this.dialog.fields_dict.child_selection_area.$wrapper;\n\t\tthis.$child_wrapper.addClass('my-3');\n\n\t\tthis.child_datatable = new frappe.DataTable(this.$child_wrapper.get(0), {\n\t\t\tcolumns: header_columns,\n\t\t\tdata: rows,\n\t\t\tlayout: 'fluid',\n\t\t\tinlineFilters: true,\n\t\t\tserialNoColumn: false,\n\t\t\tcheckboxColumn: true,\n\t\t\tcellHeight: 35,\n\t\t\tnoDataMessage: __('No Data'),\n\t\t\tdisableReorderColumn: true\n\t\t});\n\t\tthis.$child_wrapper.find('.dt-scrollable').css('height', '300px');\n\t}\n\n\tget_primary_filters() {\n\t\tlet fields = [];\n\n\t\tlet columns = new Array(3);\n\n\t\t// Hack for three column layout\n\t\t// To add column break\n\t\tcolumns[0] = [\n\t\t\t{\n\t\t\t\tfieldtype: \"Data\",\n\t\t\t\tlabel: __(\"Name\"),\n\t\t\t\tfieldname: \"search_term\"\n\t\t\t}\n\t\t];\n\t\tcolumns[1] = [];\n\t\tcolumns[2] = [];\n\n\t\tif ($.isArray(this.setters)) {\n\t\t\tthis.setters.forEach((setter, index) => {\n\t\t\t\tcolumns[(index + 1) % 3].push(setter);\n\t\t\t});\n\t\t} else {\n\t\t\tObject.keys(this.setters).forEach((setter, index) => {\n\t\t\t\tlet df_prop = frappe.meta.docfield_map[this.doctype][setter];\n\n\t\t\t\t// Index + 1 to start filling from index 1\n\t\t\t\t// Since Search is a standrd field already pushed\n\t\t\t\tcolumns[(index + 1) % 3].push({\n\t\t\t\t\tfieldtype: df_prop.fieldtype,\n\t\t\t\t\tlabel: df_prop.label,\n\t\t\t\t\tfieldname: setter,\n\t\t\t\t\toptions: df_prop.options,\n\t\t\t\t\tdefault: this.setters[setter]\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/seal\n\t\tif (Object.seal) {\n\t\t\tObject.seal(columns);\n\t\t\t// now a is a fixed-size array with mutable entries\n\t\t}\n\n\t\tif (this.allow_child_item_selection) {\n\t\t\tthis.child_doctype = frappe.meta.get_docfield(this.doctype, this.child_fieldname).options;\n\t\t\tcolumns[0].push({\n\t\t\t\tfieldtype: \"Check\",\n\t\t\t\tlabel: __(\"Select {0}\", [this.child_doctype]),\n\t\t\t\tfieldname: \"allow_child_item_selection\",\n\t\t\t\tonchange: this.toggle_child_selection.bind(this)\n\t\t\t});\n\t\t}\n\n\t\tfields = [\n\t\t\t...columns[0],\n\t\t\t{ fieldtype: \"Column Break\" },\n\t\t\t...columns[1],\n\t\t\t{ fieldtype: \"Column Break\" },\n\t\t\t...columns[2],\n\t\t\t{ fieldtype: \"Section Break\", fieldname: \"primary_filters_sb\" }\n\t\t];\n\n\t\tif (this.add_filters_group) {\n\t\t\tfields.push(\n\t\t\t\t{\n\t\t\t\t\tfieldtype: 'HTML',\n\t\t\t\t\tfieldname: 'filter_area',\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\treturn fields;\n\t}\n\n\tmake_filter_area() {\n\t\tthis.filter_group = new frappe.ui.FilterGroup({\n\t\t\tparent: this.dialog.get_field('filter_area').$wrapper,\n\t\t\tdoctype: this.doctype,\n\t\t\ton_change: () => {\n\t\t\t\tthis.get_results();\n\t\t\t}\n\t\t});\n\t\t// 'Apply Filter' breaks since the filers are not in a popover\n\t\t// Hence keeping it hidden\n\t\tthis.filter_group.wrapper.find('.apply-filters').hide();\n\t}\n\n\tget_custom_filters() {\n\t\tif (this.add_filters_group && this.filter_group) {\n\t\t\treturn this.filter_group.get_filters().reduce((acc, filter) => {\n\t\t\t\treturn Object.assign(acc, {\n\t\t\t\t\t[filter[1]]: [filter[2], filter[3]]\n\t\t\t\t});\n\t\t\t}, {});\n\t\t} else {\n\t\t\treturn {};\n\t\t}\n\t}\n\n\tbind_events() {\n\t\tlet me = this;\n\n\t\tthis.$results.on('click', '.list-item-container', function (e) {\n\t\t\tif (!$(e.target).is(':checkbox') && !$(e.target).is('a')) {\n\t\t\t\t$(this).find(':checkbox').trigger('click');\n\t\t\t}\n\t\t});\n\n\t\tthis.$results.on('click', '.list-item--head :checkbox', (e) => {\n\t\t\tthis.$results.find('.list-item-container .list-row-check')\n\t\t\t\t.prop(\"checked\", ($(e.target).is(':checked')));\n\t\t});\n\n\t\tthis.$parent.find('.input-with-feedback').on('change', () => {\n\t\t\tfrappe.flags.auto_scroll = false;\n\t\t\tthis.get_results();\n\t\t});\n\n\t\tthis.$parent.find('[data-fieldtype=\"Data\"]').on('input', () => {\n\t\t\tvar $this = $(this);\n\t\t\tclearTimeout($this.data('timeout'));\n\t\t\t$this.data('timeout', setTimeout(function () {\n\t\t\t\tfrappe.flags.auto_scroll = false;\n\t\t\t\tme.empty_list();\n\t\t\t\tme.get_results();\n\t\t\t}, 300));\n\t\t});\n\t}\n\n\tget_parent_name_of_selected_children() {\n\t\tif (!this.child_datatable || !this.child_datatable.datamanager.rows.length) return [];\n\n\t\tlet parent_names = this.child_datatable.rowmanager.checkMap.reduce((parent_names, checked, index) => {\n\t\t\tif (checked == 1) {\n\t\t\t\tconst parent_name = this.child_results[index].parent;\n\t\t\t\tif (!parent_names.includes(parent_name)) {\n\t\t\t\t\tparent_names.push(parent_name);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn parent_names;\n\t\t}, []);\n\n\t\treturn parent_names;\n\t}\n\n\tget_selected_child_names() {\n\t\tif (!this.child_datatable || !this.child_datatable.datamanager.rows.length) return [];\n\n\t\tlet checked_names = this.child_datatable.rowmanager.checkMap.reduce((checked_names, checked, index) => {\n\t\t\tif (checked == 1) {\n\t\t\t\tconst child_row_name = this.child_results[index].name;\n\t\t\t\tchecked_names.push(child_row_name);\n\t\t\t}\n\t\t\treturn checked_names;\n\t\t}, []);\n\n\t\treturn checked_names;\n\t}\n\n\tget_checked_values() {\n\t\t// Return name of checked value.\n\t\treturn this.$results.find('.list-item-container').map(function () {\n\t\t\tif ($(this).find('.list-row-check:checkbox:checked').length > 0) {\n\t\t\t\treturn $(this).attr('data-item-name');\n\t\t\t}\n\t\t}).get();\n\t}\n\n\tget_checked_items() {\n\t\t// Return checked items with all the column values.\n\t\tlet checked_values = this.get_checked_values();\n\t\treturn this.results.filter(res => checked_values.includes(res.name));\n\t}\n\n\tmake_list_row(result = {}) {\n\t\tvar me = this;\n\t\t// Make a head row by default (if result not passed)\n\t\tlet head = Object.keys(result).length === 0;\n\n\t\tlet contents = ``;\n\t\tlet columns = [\"name\"];\n\n\t\tif ($.isArray(this.setters)) {\n\t\t\tfor (let df of this.setters) {\n\t\t\t\tcolumns.push(df.fieldname);\n\t\t\t}\n\t\t} else {\n\t\t\tcolumns = columns.concat(Object.keys(this.setters));\n\t\t}\n\n\t\tcolumns.forEach(function (column) {\n\t\t\tcontents += `
' + __(\"No Results\") + ''\n\t\t\t\t\t+ (frappe.model.can_create(me.doctype) ?\n\t\t\t\t\t\t('
'\n\t\t\t\t\t\t\t+ __('Create a new {0}', [__(me.doctype)]) + \"\") : '')\n\t\t\t\t\t+ '\n\t\t\t\t${\n\thead ? `${__(frappe.model.unscrub(column))}`\n\t\t: (column !== \"name\" ? `${__(result[column] || '')}`\n\t\t\t: `\n\t\t\t\t\t\t\t${__(result[column] || '')}`)}\n\t\t\t`;\n\t\t});\n\n\t\tlet $row = $(`\n\t\t\t`);\n\n\t\thead ? $row.addClass('list-item--head')\n\t\t\t: $row = $(``).append($row);\n\n\t\treturn $row;\n\t}\n\n\trender_result_list(results, more = 0, empty = true) {\n\t\tvar me = this;\n\t\tvar more_btn = me.dialog.fields_dict.more_btn.$wrapper;\n\n\t\t// Make empty result set if filter is set\n\t\tif (!frappe.flags.auto_scroll && empty) {\n\t\t\tthis.empty_list();\n\t\t}\n\t\tmore_btn.hide();\n\t\t$(\".modal-dialog .list-item--head\").css(\"z-index\", 1);\n\n\t\tif (results.length === 0) return;\n\t\tif (more) more_btn.show();\n\n\t\tlet checked = this.get_checked_values();\n\n\t\tresults\n\t\t\t.filter(result => !checked.includes(result.name))\n\t\t\t.forEach(result => {\n\t\t\t\tme.$results.append(me.make_list_row(result));\n\t\t\t});\n\n\t\tthis.$results.find(\".list-item--head\").css(\"z-index\", 1);\n\n\t\tif (frappe.flags.auto_scroll) {\n\t\t\tthis.$results.animate({ scrollTop: me.$results.prop('scrollHeight') }, 500);\n\t\t}\n\t}\n\n\tempty_list() {\n\t\t// Store all checked items\n\t\tlet checked = this.get_checked_items().map(item => {\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\tchecked: true\n\t\t\t};\n\t\t});\n\n\t\t// Remove **all** items\n\t\tthis.$results.find('.list-item-container').remove();\n\n\t\t// Rerender checked items\n\t\tthis.render_result_list(checked, 0, false);\n\t}\n\n\tget_filters_from_setters() {\n\t\tlet me = this;\n\t\tlet filters = this.get_query ? this.get_query().filters : {} || {};\n\t\tlet filter_fields = [];\n\n\t\tif ($.isArray(this.setters)) {\n\t\t\tfor (let df of this.setters) {\n\t\t\t\tfilters[df.fieldname] = me.dialog.fields_dict[df.fieldname].get_value() || undefined;\n\t\t\t\tme.args[df.fieldname] = filters[df.fieldname];\n\t\t\t\tfilter_fields.push(df.fieldname);\n\t\t\t}\n\t\t} else {\n\t\t\tObject.keys(this.setters).forEach(function (setter) {\n\t\t\t\tvar value = me.dialog.fields_dict[setter].get_value();\n\t\t\t\tif (me.dialog.fields_dict[setter].df.fieldtype == \"Data\" && value) {\n\t\t\t\t\tfilters[setter] = [\"like\", \"%\" + value + \"%\"];\n\t\t\t\t} else {\n\t\t\t\t\tfilters[setter] = value || undefined;\n\t\t\t\t\tme.args[setter] = filters[setter];\n\t\t\t\t\tfilter_fields.push(setter);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn [filters, filter_fields];\n\t}\n\n\tget_args_for_search() {\n\t\tlet [filters, filter_fields] = this.get_filters_from_setters();\n\n\t\tlet custom_filters = this.get_custom_filters();\n\t\tObject.assign(filters, custom_filters);\n\n\t\treturn {\n\t\t\tdoctype: this.doctype,\n\t\t\ttxt: this.dialog.fields_dict[\"search_term\"].get_value(),\n\t\t\tfilters: filters,\n\t\t\tfilter_fields: filter_fields,\n\t\t\tpage_length: this.page_length + 5,\n\t\t\tquery: this.get_query ? this.get_query().query : '',\n\t\t\tas_dict: 1\n\t\t};\n\t}\n\n\tasync perform_search(args) {\n\t\tconst res = await frappe.call({\n\t\t\ttype: \"GET\",\n\t\t\tmethod: 'frappe.desk.search.search_widget',\n\t\t\tno_spinner: true,\n\t\t\targs: args,\n\t\t});\n\t\tconst more = res.values.length && res.values.length > this.page_length ? 1 : 0;\n\n\t\treturn [res, more];\n\t}\n\n\tasync get_results() {\n\t\tconst args = this.get_args_for_search();\n\t\tconst [res, more] = await this.perform_search(args);\n\n\t\tif (more) {\n\t\t\tres.values = res.values.splice(0, this.page_length);\n\t\t}\n\n\t\tthis.results = [];\n\t\tif (res.values.length) {\n\t\t\tres.values.forEach(result => {\n\t\t\t\tresult.checked = 0;\n\t\t\t\tthis.results.push(result);\n\t\t\t});\n\t\t}\n\t\tthis.render_result_list(this.results, more);\n\t}\n\n\tasync get_filtered_parents_for_child_search() {\n\t\tconst parent_search_args = this.get_args_for_search();\n\t\tparent_search_args.filter_fields = ['name'];\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tconst [response, _] = await this.perform_search(parent_search_args);\n\n\t\tlet parent_names = [];\n\t\tif (response.values.length) {\n\t\t\tparent_names = response.values.map(v => v.name);\n\t\t}\n\t\treturn parent_names;\n\t}\n\n\tasync add_parent_filters(filters) {\n\t\tconst parent_names = await this.get_filtered_parents_for_child_search();\n\t\tif (parent_names.length) {\n\t\t\tfilters.push([ \"parent\", \"in\", parent_names ]);\n\t\t}\n\t}\n\n\tadd_custom_child_filters(filters) {\n\t\tif (this.add_filters_group && this.filter_group) {\n\t\t\tthis.filter_group.get_filters().forEach(filter => {\n\t\t\t\tif (filter[0] == this.child_doctype) {\n\t\t\t\t\tfilters.push([filter[1], filter[2], filter[3]]);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tasync get_child_result() {\n\t\tlet filters = [[\"parentfield\", \"=\", this.child_fieldname]];\n\n\t\tawait this.add_parent_filters(filters);\n\t\tthis.add_custom_child_filters(filters);\n\n\t\treturn frappe.call({\n\t\t\tmethod: \"frappe.client.get_list\",\n\t\t\targs: {\n\t\t\t\tdoctype: this.child_doctype,\n\t\t\t\tfilters: filters,\n\t\t\t\tfields: ['name', 'parent', ...this.child_columns],\n\t\t\t\tparent: this.doctype,\n\t\t\t\tlimit_page_length: this.child_page_length + 5,\n\t\t\t\torder_by: 'parent'\n\t\t\t}\n\t\t});\n\t}\n};\n","\nimport './field_group';\nimport '../dom';\n\nfrappe.provide('frappe.ui');\n\nwindow.cur_dialog = null;\n\nfrappe.ui.open_dialogs = [];\n\nfrappe.ui.Dialog = class Dialog extends frappe.ui.FieldGroup {\n\tconstructor(opts) {\n\t\tsuper();\n\t\tthis.display = false;\n\t\tthis.is_dialog = true;\n\n\t\t$.extend(this, { animate: true, size: null }, opts);\n\t\tthis.make();\n\t}\n\n\tmake() {\n\t\tthis.$wrapper = frappe.get_modal(\"\", \"\");\n\n\t\tif(this.static) {\n\t\t\tthis.$wrapper.modal({\n\t\t\t\tbackdrop: 'static',\n\t\t\t\tkeyboard: false\n\t\t\t});\n\t\t\tthis.get_close_btn().hide();\n\t\t}\n\n\t\tthis.wrapper = this.$wrapper.find('.modal-dialog')\n\t\t\t.get(0);\n\t\tif (this.size == \"small\" )\n\t\t\t$(this.wrapper).addClass(\"modal-sm\");\n\t\telse if (this.size == \"large\" )\n\t\t\t$(this.wrapper).addClass(\"modal-lg\");\n\t\telse if (this.size == \"extra-large\" )\n\t\t\t$(this.wrapper).addClass(\"modal-xl\");\n\n\t\tthis.make_head();\n\t\tthis.modal_body = this.$wrapper.find(\".modal-body\");\n\t\tthis.$body = $('').appendTo(this.modal_body);\n\t\tthis.body = this.$body.get(0);\n\t\tthis.$message = $('').appendTo(this.modal_body);\n\t\tthis.header = this.$wrapper.find(\".modal-header\");\n\t\tthis.footer = this.$wrapper.find(\".modal-footer\");\n\t\tthis.standard_actions = this.footer.find('.standard-actions');\n\t\tthis.custom_actions = this.footer.find('.custom-actions');\n\t\tthis.set_indicator();\n\n\t\t// make fields (if any)\n\t\tsuper.make();\n\n\t\tthis.refresh_section_collapse();\n\n\t\t// show footer\n\t\tthis.action = this.action || { primary: { }, secondary: { } };\n\t\tif (this.primary_action || (this.action.primary && this.action.primary.onsubmit)) {\n\t\t\tthis.set_primary_action(\n\t\t\t\tthis.primary_action_label || this.action.primary.label || __(\"Submit\", null, \"Primary action in dialog\"),\n\t\t\t\tthis.primary_action || this.action.primary.onsubmit\n\t\t\t);\n\t\t}\n\n\t\tif (this.secondary_action) {\n\t\t\tthis.set_secondary_action(this.secondary_action);\n\t\t}\n\n\t\tif (this.secondary_action_label || (this.action.secondary && this.action.secondary.label)) {\n\t\t\tthis.set_secondary_action_label(this.secondary_action_label || this.action.secondary.label);\n\t\t}\n\n\t\tif (this.minimizable) {\n\t\t\tthis.header.find('.title-section').click(() => this.is_minimized && this.toggle_minimize());\n\t\t\tthis.get_minimize_btn().removeClass('hide').on('click', () => this.toggle_minimize());\n\t\t}\n\n\t\tvar me = this;\n\t\tthis.$wrapper\n\t\t\t.on(\"hide.bs.modal\", function() {\n\t\t\t\tme.display = false;\n\t\t\t\tme.is_minimized = false;\n\t\t\t\tme.hide_scrollbar(false);\n\n\t\t\t\tif(frappe.ui.open_dialogs[frappe.ui.open_dialogs.length-1]===me) {\n\t\t\t\t\tfrappe.ui.open_dialogs.pop();\n\t\t\t\t\tif(frappe.ui.open_dialogs.length) {\n\t\t\t\t\t\twindow.cur_dialog = frappe.ui.open_dialogs[frappe.ui.open_dialogs.length-1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\twindow.cur_dialog = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tme.onhide && me.onhide();\n\t\t\t\tme.on_hide && me.on_hide();\n\t\t\t})\n\t\t\t.on(\"shown.bs.modal\", function() {\n\t\t\t\t// focus on first input\n\t\t\t\tme.display = true;\n\t\t\t\twindow.cur_dialog = me;\n\t\t\t\tfrappe.ui.open_dialogs.push(me);\n\t\t\t\tme.focus_on_first_input();\n\t\t\t\tme.hide_scrollbar(true);\n\t\t\t\tme.on_page_show && me.on_page_show();\n\t\t\t\t$(document).trigger('frappe.ui.Dialog:shown');\n\t\t\t\t$(document).off('focusin.modal');\n\t\t\t})\n\t\t\t.on('scroll', function() {\n\t\t\t\tvar $input = $('input:focus');\n\t\t\t\tif ($input.length && ['Date', 'Datetime', 'Time'].includes($input.attr('data-fieldtype'))) {\n\t\t\t\t\t$input.blur();\n\t\t\t\t}\n\t\t\t});\n\n\t}\n\n\tget_primary_btn() {\n\t\treturn this.standard_actions.find(\".btn-primary\");\n\t}\n\n\tget_minimize_btn() {\n\t\treturn this.$wrapper.find(\".modal-header .btn-modal-minimize\");\n\t}\n\n\tset_message(text) {\n\t\tthis.$message.removeClass('hide');\n\t\tthis.$body.addClass('hide');\n\t\tthis.$message.text(text);\n\t}\n\n\tclear_message() {\n\t\tthis.$message.addClass('hide');\n\t\tthis.$body.removeClass('hide');\n\t}\n\n\tclear() {\n\t\tsuper.clear();\n\t\tthis.clear_message();\n\t}\n\n\tset_primary_action(label, click) {\n\t\tthis.footer.removeClass('hide');\n\t\tthis.has_primary_action = true;\n\t\tvar me = this;\n\t\treturn this.get_primary_btn()\n\t\t\t.removeClass(\"hide\")\n\t\t\t.html(label)\n\t\t\t.click(function() {\n\t\t\t\tme.primary_action_fulfilled = true;\n\t\t\t\t// get values and send it\n\t\t\t\t// as first parameter to click callback\n\t\t\t\t// if no values then return\n\t\t\t\tvar values = me.get_values();\n\t\t\t\tif(!values) return;\n\t\t\t\tclick && click.apply(me, [values]);\n\t\t\t});\n\t}\n\n\tset_secondary_action(click) {\n\t\tthis.footer.removeClass('hide');\n\t\tthis.get_secondary_btn().removeClass('hide').off('click').on('click', click);\n\t}\n\n\tset_secondary_action_label(label) {\n\t\tthis.get_secondary_btn()\n\t\t\t.removeClass(\"hide\")\n\t\t\t.html(label);\n\t}\n\n\tdisable_primary_action() {\n\t\tthis.get_primary_btn().addClass('disabled');\n\t}\n\n\tenable_primary_action() {\n\t\tthis.get_primary_btn().removeClass('disabled');\n\t}\n\n\tmake_head() {\n\t\tthis.set_title(this.title);\n\t}\n\n\tset_title(t) {\n\t\tthis.$wrapper.find(\".modal-title\").html(t);\n\t}\n\n\tset_indicator() {\n\t\tif (this.indicator) {\n\t\t\tthis.header.find('.indicator').removeClass().addClass('indicator ' + this.indicator);\n\t\t}\n\t}\n\n\tshow() {\n\t\t// show it\n\t\tif (this.animate) {\n\t\t\tthis.$wrapper.addClass('fade');\n\t\t} else {\n\t\t\tthis.$wrapper.removeClass('fade');\n\t\t}\n\t\tthis.$wrapper.modal(\"show\");\n\n\t\tthis.$wrapper.removeClass('modal-minimize');\n\n\t\tif (this.minimizable && this.is_minimized) {\n\t\t\t$(\".modal-backdrop\").toggle();\n\t\t\tthis.is_minimized = false;\n\t\t}\n\n\t\t// clear any message\n\t\tthis.clear_message();\n\n\t\tthis.primary_action_fulfilled = false;\n\t\tthis.is_visible = true;\n\t\treturn this;\n\t}\n\n\thide() {\n\t\tthis.$wrapper.modal(\"hide\");\n\t\tthis.is_visible = false;\n\t}\n\n\tget_close_btn() {\n\t\treturn this.$wrapper.find(\".btn-modal-close\");\n\t}\n\n\tget_secondary_btn() {\n\t\treturn this.standard_actions.find(\".btn-modal-secondary\");\n\t}\n\n\tno_cancel() {\n\t\tthis.get_close_btn().toggle(false);\n\t}\n\n\tcancel() {\n\t\tthis.get_close_btn().trigger(\"click\");\n\t}\n\n\ttoggle_minimize() {\n\t\t$('.modal-backdrop').toggle();\n\t\tlet modal = this.$wrapper.closest('.modal').toggleClass('modal-minimize');\n\t\tmodal.attr('tabindex') ? modal.removeAttr('tabindex') : modal.attr('tabindex', -1);\n\t\tthis.is_minimized = !this.is_minimized;\n\t\tconst icon = this.is_minimized ? 'expand' : 'collapse';\n\t\tthis.get_minimize_btn().html(frappe.utils.icon(icon));\n\t\tthis.on_minimize_toggle && this.on_minimize_toggle(this.is_minimized);\n\t\tthis.header.find('.modal-title').toggleClass('cursor-pointer');\n\t\tthis.hide_scrollbar(!this.is_minimized);\n\t}\n\n\thide_scrollbar(bool) {\n\t\t$(\"body\").css(\"overflow\", bool ? \"hidden\" : \"auto\");\n\t}\n\n\tadd_custom_action(label, action, css_class=null) {\n\t\tthis.footer.removeClass('hide');\n\t\tlet action_button = $(`\n\t\t\t\n\t\t`);\n\t\tthis.custom_actions.append(action_button);\n\n\t\taction && action_button.click(action);\n\t}\n};\n\nfrappe.ui.hide_open_dialog = () => {\n\t// hide open dialog\n\tif (window.cur_dialog) {\n\t\tif (!cur_dialog.minimizable) {\n\t\t\tcur_dialog.hide();\n\t\t} else if (!cur_dialog.is_minimized) {\n\t\t\tcur_dialog.toggle_minimize();\n\t\t}\n\t}\n};\n"],"names":["frappe","provide","dom","id_count","freeze_count","by_id","id","document","getElementById","get_unique_id","const","set_unique_id","ele","$ele","$","attr","eval","txt","el","createElement","appendChild","createTextNode","getElementsByTagName","remove_script_and_style","doc","DOMParser","parseFromString","body","found","head","innerHTML","tag","element","parentNode","removeChild","relation","getAttribute","toLowerCase","trim","is_element_in_viewport","tolerance","jQuery","rect","getBoundingClientRect","top","left","bottom","window","height","right","width","is_element_in_modal","Boolean","parents","length","set_style","se","type","styleSheet","cssText","add","parent","newtag","className","cs","onclick","substr","c","src","css","s","extend","style","activate","$parent","$child","common_class","active_class","find","removeClass","addClass","freeze","msg","css_class","on","cur_frm","cur_grid","toggle_view","appendTo","html","repl","setTimeout","unfreeze","remove","save_selection","getSelection","sel","getRangeAt","rangeCount","ranges","i","len","push","selection","createRange","restore_selection","savedSel","removeAllRanges","addRange","select","is_touchscreen","handle_broken_images","container","e","currentTarget","scroll_to_bottom","$container","scrollTop","scrollHeight","file_to_base64","file_obj","Promise","resolve","reader","FileReader","onload","result","readAsDataURL","scroll_to_section","section_name","section","hasClass","click","ui","scroll","pixel_to_inches","pixels","div","inches","offsetWidth","ellipsis","text","max","cstr","run_serially","tasks","forEach","task","then","load_image","onerror","preprocess","tester","Image","this","timeout","seconds","scrub","spacer","replace","unscrub","model","get_data_pill","label","target_id","remove_action","image","let","data_pill_wrapper","remove_btn","utils","icon","append","get_modal","title","content","__","is_online","boot","developer_mode","navigator","onLine","show_alert","indicator","message","form","link_formatters","formatters","_right","value","options","inline","only_value","Data","df","Select","Float","docfield","precision","cint","sysdefaults","float_precision","Currency","always_show_decimals","is_null","temp","split","undefined","format_number","Int","Percent","flt","Rating","map","join","currency","meta","get_field_currency","currency_precision","parts","decimals","fraction","get_value","format_currency","Check","Link","doctype","_options","original_value","match","for_print","substring","link_onclick","can_read","a","href","encodeURIComponent","router","slug","dataset","name","innerText","outerHTML","Date","datetime","str_to_user","DateRange","Array","isArray","Datetime","m","moment","convert_to_user_tz","time_zone","tz","format","date_format","toUpperCase","time_format","Text","tags","replace_newlines","Time","Duration","duration_options","get_duration_options","get_formatted_duration","LikedBy","each","JSON","parse","v","avatar","Tag","Comment","Assign","SmallText","TextEditor","formatted_value","Code","WorkflowState","workflow_state","get_doc","Email","FileSize","TableMultiSelect","rows","link_field","get_meta","fields","fieldtype","row","fieldname","Color","Icon","get_formatter","formatted","formatter","get_format_helper","helper","get_formatted","get_docfield","console","log","full_name","global","fnTest","test","Class","props","_super","prototype","proto","Object","create","fn","tmp","ret","apply","arguments","newClass","init","hasOwnProperty","constructor","Layout","opts","views","pages","sections","fields_list","fields_dict","make","wrapper","get_doctype_fields","setup_tabbing","render","show_empty_form_message","show_message","get_new_name_field","doctype_layout","concat","get_fields_from_layout","sort_docfields","docfield_map","frm","reqd","hidden","get_status","field","is_new","autoname","includes","f","copy_dict","color","message_color","empty","new_fields","me","column","with_dashboard","setup_dashboard_section","no_opening_section","make_section","make_page","make_column","make_field","unshift","replace_field","fieldobj","init_field","$wrapper","splice","perm","refresh_fields","colspan","make_control","get","render_input","layout","page","fold_btn","next","scroll_to","folded","unfold","trigger","Section","Column","refresh","attach_doc_and_docfields","refresh_dependency","refresh_sections","refresh_section_collapse","activeElement","tagName","is_numeric_field_active","closest","data","numeric_fieldtypes","fieldnames","set_input","add_fields","collapsible","collapse","collapsible_depends_on","evaluate_depends_on_value","has_missing_mandatory","l","docname","refresh_section_count","ev","which","current","target","handle_tab","shiftKey","shift","grid_row","prev","focused","get_open_grid_row","set_focus","primary_button","focus","focus_on_next_field","is_visible","idx","grid","grid_rows","start_idx","add_new_row","show_form","in_list","no_value_type","disp_status","is","editor","$input","has_dep","fkey","dependencies_clear","depends_on","mandatory_depends_on","read_only_depends_on","guardian_has_value","hidden_due_to_dependency","set_dependant_property","condition","property","form_obj","is_dialog","parentfield","setting_dependency","set_df_property","expression","out","get_values","istable","throw","script_manager","make_card","card_layout","make_head","description","cssClass","hide_border","toggleClass","hide","collapse_link","show","get_perm","permlevel","indicator_icon","is_collapsed","missing_mandatory","j","section_df","resize_all_columns","FieldGroup","dirty","values","set_values","def_value","get_today","no_submit_on_enter","catch_enter_as_submit","first_button","focus_on_first_input","no_focus","keypress","has_primary_action","preventDefault","get_primary_btn","get_input","input","get_field","ignore_errors","errors","key","strip_html","msgprint","set_value","val","has_field","dict","promises","all","clear","prop","LinkSelector","with_doctype","r","start","dialog","Dialog","search","primary_action_label","primary_action","args","searchfield","set_custom_query","is_grid","fieldinfo","get_query","link_search","results","set_in_grid","parse_validate_and_set_in_model","can_create","new_doc","more","updated","d","qty_fieldname","prompt","default","qty","dynamic_link_field","dynamic_link_reference","callback","btn","call","method","MultiSelectDialog","[object Object]","assign","for_select","page_length","child_page_length","get_fields","primary_fields","get_primary_filters","result_fields","get_result_fields","data_fields","get_data_fields","child_selection_fields","get_child_selection_fields","get_results","bind","allow_child_item_selection","child_fieldname","show_child_results","doctype_plural","plural","size","secondary_action_label","filters_data","get_custom_filters","data_values","cur_dialog","filtered_children","get_selected_child_names","selected_documents","get_checked_values","get_parent_name_of_selected_children","action","secondary_action","make_new_document","add_filters_group","make_filter_area","setup_results","bind_events","set_route_options","route_options","setters","keys","setter","results_area","$results","make_list_row","get_child_result","child_results","render_child_datatable","$child_wrapper","more_btn","child_datatable","rowmanager","checkMap","get_child_datatable_rows","setup_child_datatable","child_columns","editable","more_child_btn","toggle","slice","header_columns","get_child_datatable_columns","child_selection_area","DataTable","columns","inlineFilters","serialNoColumn","checkboxColumn","cellHeight","noDataMessage","disableReorderColumn","index","df_prop","seal","child_doctype","onchange","toggle_child_selection","filter_group","FilterGroup","on_change","get_filters","reduce","acc","filter","flags","auto_scroll","$this","clearTimeout","empty_list","datamanager","parent_names","checked","parent_name","checked_names","child_row_name","checked_values","res","contents","$row","animate","get_checked_items","item","render_result_list","filters","filter_fields","get_filters_from_setters","custom_filters","query","as_dict","no_spinner","get_args_for_search","perform_search","parent_search_args","response","get_filtered_parents_for_child_search","add_parent_filters","add_custom_child_filters","limit_page_length","order_by","open_dialogs","super","display","static","modal","backdrop","keyboard","get_close_btn","modal_body","$body","$message","header","footer","standard_actions","custom_actions","set_indicator","primary","secondary","onsubmit","set_primary_action","set_secondary_action","set_secondary_action_label","minimizable","is_minimized","toggle_minimize","get_minimize_btn","hide_scrollbar","pop","onhide","on_hide","on_page_show","off","blur","clear_message","primary_action_fulfilled","get_secondary_btn","set_title","t","removeAttr","on_minimize_toggle","bool","action_button","hide_open_dialog"],"mappings":"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"}\n\t\t\t\t\n\t\t\t\n\t\t\t${contents}\n\t\t