{"version":3,"file":"web_form.min.js","sources":["../../../apps/frappe/frappe/public/js/frappe/utils/datetime.js","../../../apps/frappe/frappe/public/js/frappe/web_form/web_form_list.js","../../../apps/frappe/frappe/public/js/frappe/event_emitter.js","../../../apps/frappe/frappe/public/js/frappe/web_form/web_form.js","../../../apps/frappe/frappe/public/js/frappe/web_form/webform_script.js"],"sourcesContent":["// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors\n// MIT License. See license.txt\n\nfrappe.provide('frappe.datetime');\n\nfrappe.defaultDateFormat = \"YYYY-MM-DD\";\nfrappe.defaultTimeFormat = \"HH:mm:ss\";\nfrappe.defaultDatetimeFormat = frappe.defaultDateFormat + \" \" + frappe.defaultTimeFormat;\nmoment.defaultFormat = frappe.defaultDateFormat;\n\nfrappe.provide(\"frappe.datetime\");\n\n$.extend(frappe.datetime, {\n\tconvert_to_user_tz: function(date, format) {\n\t\t// format defaults to true\n\t\tif(frappe.sys_defaults.time_zone) {\n\t\t\tvar date_obj = moment.tz(date, frappe.sys_defaults.time_zone).local();\n\t\t} else {\n\t\t\tvar date_obj = moment(date);\n\t\t}\n\n\t\treturn (format===false) ? date_obj : date_obj.format(frappe.defaultDatetimeFormat);\n\t},\n\n\tconvert_to_system_tz: function(date, format) {\n\t\t// format defaults to true\n\n\t\tif(frappe.sys_defaults.time_zone) {\n\t\t\tvar date_obj = moment(date).tz(frappe.sys_defaults.time_zone);\n\t\t} else {\n\t\t\tvar date_obj = moment(date);\n\t\t}\n\n\t\treturn (format===false) ? date_obj : date_obj.format(frappe.defaultDatetimeFormat);\n\t},\n\n\tis_timezone_same: function() {\n\t\tif(frappe.sys_defaults.time_zone) {\n\t\t\treturn moment().tz(frappe.sys_defaults.time_zone).utcOffset() === moment().utcOffset();\n\t\t} else {\n\t\t\treturn true;\n\t\t}\n\t},\n\n\tstr_to_obj: function(d) {\n\t\treturn moment(d, frappe.defaultDatetimeFormat)._d;\n\t},\n\n\tobj_to_str: function(d) {\n\t\treturn moment(d).locale(\"en\").format();\n\t},\n\n\tobj_to_user: function(d) {\n\t\treturn moment(d).format(frappe.datetime.get_user_date_fmt().toUpperCase());\n\t},\n\n\tget_diff: function(d1, d2) {\n\t\treturn moment(d1).diff(d2, \"days\");\n\t},\n\n\tget_hour_diff: function(d1, d2) {\n\t\treturn moment(d1).diff(d2, \"hours\");\n\t},\n\n\tget_day_diff: function(d1, d2) {\n\t\treturn moment(d1).diff(d2, \"days\");\n\t},\n\n\tadd_days: function(d, days) {\n\t\treturn moment(d).add(days, \"days\").format();\n\t},\n\n\tadd_months: function(d, months) {\n\t\treturn moment(d).add(months, \"months\").format();\n\t},\n\n\tweek_start: function() {\n\t\treturn moment().startOf(\"week\").format();\n\t},\n\n\tweek_end: function() {\n\t\treturn moment().endOf(\"week\").format();\n\t},\n\n\tmonth_start: function() {\n\t\treturn moment().startOf(\"month\").format();\n\t},\n\n\tmonth_end: function() {\n\t\treturn moment().endOf(\"month\").format();\n\t},\n\n\tquarter_start: function() {\n\t\treturn moment().startOf(\"quarter\").format();\n\t},\n\n\tquarter_end: function() {\n\t\treturn moment().endOf(\"quarter\").format();\n\t},\n\n\tyear_start: function(){\n\t\treturn moment().startOf(\"year\").format();\n\t},\n\n\tyear_end: function(){\n\t\treturn moment().endOf(\"year\").format();\n\t},\n\n\tget_user_time_fmt: function() {\n\t\treturn frappe.sys_defaults && frappe.sys_defaults.time_format || \"HH:mm:ss\";\n\t},\n\n\tget_user_date_fmt: function() {\n\t\treturn frappe.sys_defaults && frappe.sys_defaults.date_format || \"yyyy-mm-dd\";\n\t},\n\n\tget_user_fmt: function() { // For backwards compatibility only\n\t\treturn frappe.sys_defaults && frappe.sys_defaults.date_format || \"yyyy-mm-dd\";\n\t},\n\n\tstr_to_user: function(val, only_time = false) {\n\t\tif(!val) return \"\";\n\n\t\tvar user_time_fmt = frappe.datetime.get_user_time_fmt();\n\t\tif(only_time) {\n\t\t\treturn moment(val, frappe.defaultTimeFormat)\n\t\t\t\t.format(user_time_fmt);\n\t\t}\n\n\t\tvar user_date_fmt = frappe.datetime.get_user_date_fmt().toUpperCase();\n\t\tif(typeof val !== \"string\" || val.indexOf(\" \")===-1) {\n\t\t\treturn moment(val).format(user_date_fmt);\n\t\t} else {\n\t\t\treturn moment(val, \"YYYY-MM-DD HH:mm:ss\").format(user_date_fmt + \" \" + user_time_fmt);\n\t\t}\n\t},\n\n\tget_datetime_as_string: function(d) {\n\t\treturn moment(d).format(\"YYYY-MM-DD HH:mm:ss\");\n\t},\n\n\tuser_to_str: function(val, only_time = false) {\n\n\t\tvar user_time_fmt = frappe.datetime.get_user_time_fmt();\n\t\tif(only_time) {\n\t\t\treturn moment(val, user_time_fmt)\n\t\t\t\t.format(frappe.defaultTimeFormat);\n\t\t}\n\n\t\tvar user_fmt = frappe.datetime.get_user_date_fmt().toUpperCase();\n\t\tvar system_fmt = \"YYYY-MM-DD\";\n\n\t\tif(val.indexOf(\" \")!==-1) {\n\t\t\tuser_fmt += \" \" + user_time_fmt;\n\t\t\tsystem_fmt += \" HH:mm:ss\";\n\t\t}\n\n\t\t// user_fmt.replace(\"YYYY\", \"YY\")? user might only input 2 digits of the year, which should also be parsed\n\t\treturn moment(val, [user_fmt.replace(\"YYYY\", \"YY\"),\n\t\t\tuser_fmt]).locale(\"en\").format(system_fmt);\n\t},\n\n\tuser_to_obj: function(d) {\n\t\treturn frappe.datetime.str_to_obj(frappe.datetime.user_to_str(d));\n\t},\n\n\tglobal_date_format: function(d) {\n\t\tvar m = moment(d);\n\t\tif(m._f && m._f.indexOf(\"HH\")!== -1) {\n\t\t\treturn m.format(\"Do MMMM YYYY, h:mma\")\n\t\t} else {\n\t\t\treturn m.format('Do MMMM YYYY');\n\t\t}\n\t},\n\n\tnow_date: function(as_obj = false) {\n\t\treturn frappe.datetime._date(frappe.defaultDateFormat, as_obj);\n\t},\n\n\tnow_time: function(as_obj = false) {\n\t\treturn frappe.datetime._date(frappe.defaultTimeFormat, as_obj);\n\t},\n\n\tnow_datetime: function(as_obj = false) {\n\t\treturn frappe.datetime._date(frappe.defaultDatetimeFormat, as_obj);\n\t},\n\n\t_date: function(format, as_obj = false) {\n\t\tconst time_zone = frappe.sys_defaults && frappe.sys_defaults.time_zone;\n\t\tlet date;\n\t\tif (time_zone) {\n\t\t\tdate = moment.tz(time_zone);\n\t\t} else {\n\t\t\tdate = moment();\n\t\t}\n\t\tif (as_obj) {\n\t\t\treturn frappe.datetime.moment_to_date_obj(date);\n\t\t} else {\n\t\t\treturn date.format(format);\n\t\t}\n\t},\n\n\tmoment_to_date_obj: function(moment) {\n\t\tconst date_obj = new Date();\n\t\tconst date_array = moment.toArray();\n\t\tdate_obj.setFullYear(date_array[0]);\n\t\tdate_obj.setMonth(date_array[1]);\n\t\tdate_obj.setDate(date_array[2]);\n\t\tdate_obj.setHours(date_array[3]);\n\t\tdate_obj.setMinutes(date_array[4]);\n\t\tdate_obj.setSeconds(date_array[5]);\n\t\tdate_obj.setMilliseconds(date_array[6]);\n\t\treturn date_obj;\n\t},\n\n\tnowdate: function() {\n\t\treturn frappe.datetime.now_date();\n\t},\n\n\tget_today: function() {\n\t\treturn frappe.datetime.now_date();\n\t},\n\n\tget_time: (timestamp) => {\n\t\t// return time with AM/PM\n\t\treturn moment(timestamp).format('hh:mm A');\n\t},\n\n\tvalidate: function(d) {\n\t\treturn moment(d, [\n\t\t\tfrappe.defaultDateFormat,\n\t\t\tfrappe.defaultDatetimeFormat,\n\t\t\tfrappe.defaultTimeFormat\n\t\t], true).isValid();\n\t},\n\n\tget_first_day_of_the_week_index() {\n\t\tconst first_day_of_the_week = frappe.sys_defaults.first_day_of_the_week || \"Sunday\";\n\t\treturn moment.weekdays().indexOf(first_day_of_the_week);\n\t}\n\n});\n\n// Proxy for dateutil and get_today\nObject.defineProperties(window, {\n\t'dateutil': {\n\t\tget: function() {\n\t\t\tconsole.warn('Please use `frappe.datetime` instead of `dateutil`. It will be deprecated soon.');\n\t\t\treturn frappe.datetime;\n\t\t},\n\t\tconfigurable: true\n\t},\n\t'date': {\n\t\tget: function() {\n\t\t\tconsole.warn('Please use `frappe.datetime` instead of `date`. It will be deprecated soon.');\n\t\t\treturn frappe.datetime;\n\t\t},\n\t\tconfigurable: true\n\t},\n\t'get_today': {\n\t\tget: function() {\n\t\t\tconsole.warn('Please use `frappe.datetime.get_today` instead of `get_today`. It will be deprecated soon.');\n\t\t\treturn frappe.datetime.get_today;\n\t\t},\n\t\tconfigurable: true\n\t}\n});\n","frappe.provide(\"frappe.ui\");\nfrappe.provide(\"frappe.views\");\nfrappe.provide(\"frappe.web_form_list\");\n\nexport default class WebFormList {\n\tconstructor(opts) {\n\t\tObject.assign(this, opts);\n\t\tfrappe.web_form_list = this;\n\t\tthis.wrapper = document.getElementById(\"datatable\");\n\t\tthis.make_actions();\n\t\tthis.make_filters();\n\t\t$('.link-btn').remove();\n\t}\n\n\trefresh() {\n\t\tif (this.table) {\n\t\t\tArray.from(this.table.tBodies).forEach(tbody => tbody.remove());\n\t\t\tlet check = document.getElementById('select-all');\n\t\t\tcheck.checked = false;\n\t\t}\n\t\tthis.rows = [];\n\t\tthis.page_length = 20;\n\t\tthis.web_list_start = 0;\n\n\t\tfrappe.run_serially([\n\t\t\t() => this.get_list_view_fields(),\n\t\t\t() => this.get_data(),\n\t\t\t() => this.make_table(),\n\t\t\t() => this.create_more()\n\t\t]);\n\t}\n\n\tmake_filters() {\n\t\tthis.filters = {};\n\t\tthis.filter_input = [];\n\t\tconst filter_area = document.getElementById('list-filters');\n\n\t\tfrappe.call('frappe.website.doctype.web_form.web_form.get_web_form_filters', {\n\t\t\tweb_form_name: this.web_form_name\n\t\t}).then(response => {\n\t\t\tlet fields = response.message;\n\t\t\tfields.forEach(field => {\n\t\t\t\tlet col = document.createElement('div.col-sm-4');\n\t\t\t\tcol.classList.add('col', 'col-sm-3');\n\t\t\t\tfilter_area.appendChild(col);\n\t\t\t\tif (field.default) this.add_filter(field.fieldname, field.default, field.fieldtype);\n\n\t\t\t\tlet input = frappe.ui.form.make_control({\n\t\t\t\t\tdf: {\n\t\t\t\t\t\tfieldtype: field.fieldtype,\n\t\t\t\t\t\tfieldname: field.fieldname,\n\t\t\t\t\t\toptions: field.options,\n\t\t\t\t\t\tonly_select: true,\n\t\t\t\t\t\tlabel: __(field.label),\n\t\t\t\t\t\tonchange: (event) => {\n\t\t\t\t\t\t\t$('#more').remove();\n\t\t\t\t\t\t\tthis.add_filter(field.fieldname, input.value, field.fieldtype);\n\t\t\t\t\t\t\tthis.refresh();\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tparent: col,\n\t\t\t\t\tvalue: field.default,\n\t\t\t\t\trender_input: 1,\n\t\t\t\t});\n\t\t\t\tthis.filter_input.push(input);\n\t\t\t});\n\t\t\tthis.refresh();\n\t\t});\n\t}\n\n\tadd_filter(field, value, fieldtype) {\n\t\tif (!value) {\n\t\t\tdelete this.filters[field];\n\t\t} else {\n\t\t\tif (fieldtype === 'Data') value = ['like', value + '%'];\n\t\t\tObject.assign(this.filters, Object.fromEntries([[field, value]]));\n\t\t}\n\t}\n\n\tget_list_view_fields() {\n\t\treturn frappe\n\t\t\t.call({\n\t\t\t\tmethod:\n\t\t\t\t\t\"frappe.website.doctype.web_form.web_form.get_in_list_view_fields\",\n\t\t\t\targs: { doctype: this.doctype }\n\t\t\t})\n\t\t\t.then(response => (this.fields_list = response.message));\n\t}\n\n\tfetch_data() {\n\t\treturn frappe.call({\n\t\t\tmethod: \"frappe.www.list.get_list_data\",\n\t\t\targs: {\n\t\t\t\tdoctype: this.doctype,\n\t\t\t\tfields: this.fields_list.map(df => df.fieldname),\n\t\t\t\tlimit_start: this.web_list_start,\n\t\t\t\tweb_form_name: this.web_form_name,\n\t\t\t\t...this.filters\n\t\t\t}\n\t\t});\n\t}\n\n\tasync get_data() {\n\t\tlet response = await this.fetch_data();\n\t\tthis.data = await response.message;\n\t}\n\n\tmore() {\n\t\tthis.web_list_start += this.page_length;\n\t\tthis.fetch_data().then((res) => {\n\t\t\tif (res.message.length === 0) {\n\t\t\t\tfrappe.msgprint(__(\"No more items to display\"));\n\t\t\t}\n\t\t\tthis.append_rows(res.message);\n\t\t});\n\n\t}\n\n\tmake_table() {\n\t\tthis.columns = this.fields_list.map(df => {\n\t\t\treturn {\n\t\t\t\tlabel: df.label,\n\t\t\t\tfieldname: df.fieldname,\n\t\t\t\tfieldtype: df.fieldtype\n\t\t\t};\n\t\t});\n\n\t\tif (!this.table) {\n\t\t\tthis.table = document.createElement(\"table\");\n\t\t\tthis.table.classList.add(\"table\");\n\t\t\tthis.make_table_head();\n\t\t}\n\n\t\tthis.append_rows(this.data);\n\n\t\tthis.wrapper.appendChild(this.table);\n\t}\n\n\tmake_table_head() {\n\t\t// Create Heading\n\t\tlet thead = this.table.createTHead();\n\t\tthead.style.backgroundColor = \"#f7fafc\";\n\t\tthead.style.color = \"#8d99a6\";\n\t\tlet row = thead.insertRow();\n\n\t\tlet th = document.createElement(\"th\");\n\n\t\tlet checkbox = document.createElement(\"input\");\n\t\tcheckbox.type = \"checkbox\";\n\t\tcheckbox.id = \"select-all\";\n\t\tcheckbox.onclick = event =>\n\t\t\tthis.toggle_select_all(event.target.checked);\n\n\t\tth.appendChild(checkbox);\n\t\trow.appendChild(th);\n\n\t\tadd_heading(row, __(\"Sr\"));\n\t\tthis.columns.forEach(col => {\n\t\t\tadd_heading(row, __(col.label));\n\t\t});\n\n\t\tfunction add_heading(row, label) {\n\t\t\tlet th = document.createElement(\"th\");\n\t\t\tth.innerText = label;\n\t\t\trow.appendChild(th);\n\t\t}\n\t}\n\n\tappend_rows(row_data) {\n\t\tconst tbody = this.table.childNodes[1] || this.table.createTBody();\n\t\trow_data.forEach((data_item) => {\n\t\t\tlet row_element = tbody.insertRow();\n\t\t\trow_element.setAttribute(\"id\", data_item.name);\n\n\t\t\tlet row = new frappe.ui.WebFormListRow({\n\t\t\t\trow: row_element,\n\t\t\t\tdoc: data_item,\n\t\t\t\tcolumns: this.columns,\n\t\t\t\tserial_number: this.rows.length + 1,\n\t\t\t\tevents: {\n\t\t\t\t\tonEdit: () => this.open_form(data_item.name),\n\t\t\t\t\tonSelect: () => this.toggle_delete()\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.rows.push(row);\n\t\t});\n\t}\n\n\tmake_actions() {\n\t\tconst actions = document.querySelector(\".list-view-actions\");\n\n\t\tfrappe.has_permission(this.doctype, \"\", \"delete\", () => {\n\t\t\tthis.addButton(actions, \"delete-rows\", \"danger\", true, \"Delete\", () =>\n\t\t\t\tthis.delete_rows()\n\t\t\t);\n\t\t});\n\n\t\tthis.addButton(\n\t\t\tactions,\n\t\t\t\"new\",\n\t\t\t\"primary\",\n\t\t\tfalse,\n\t\t\t\"New\",\n\t\t\t() => (window.location.href = window.location.pathname + \"?new=1\")\n\t\t);\n\t}\n\n\taddButton(wrapper, id, type, hidden, name, action) {\n\t\tif (document.getElementById(id)) return;\n\t\tconst button = document.createElement(\"button\");\n\t\tif (type == \"secondary\") {\n\t\t\tbutton.classList.add(\n\t\t\t\t\"btn\",\n\t\t\t\t\"btn-secondary\",\n\t\t\t\t\"btn-sm\",\n\t\t\t\t\"ml-2\",\n\t\t\t\t\"text-white\"\n\t\t\t);\n\t\t}\n\t\telse if (type == \"danger\") {\n\t\t\tbutton.classList.add(\n\t\t\t\t\"btn\",\n\t\t\t\t\"btn-danger\",\n\t\t\t\t\"button-delete\",\n\t\t\t\t\"btn-sm\",\n\t\t\t\t\"ml-2\"\n\t\t\t);\n\t\t}\n\t\telse {\n\t\t\tbutton.classList.add(\"btn\", \"btn-primary\", \"btn-sm\", \"ml-2\");\n\t\t}\n\n\t\tbutton.id = id;\n\t\tbutton.innerText = name;\n\t\tbutton.hidden = hidden;\n\n\t\tbutton.onclick = action;\n\t\twrapper.appendChild(button);\n\t}\n\n\tcreate_more() {\n\t\tif (this.rows.length >= this.page_length) {\n\t\t\tconst footer = document.querySelector(\".list-view-footer\");\n\t\t\tthis.addButton(footer, \"more\", \"secondary\", false, \"More\", () => this.more());\n\t\t}\n\t}\n\n\ttoggle_select_all(checked) {\n\t\tthis.rows.forEach(row => row.toggle_select(checked));\n\t}\n\n\topen_form(name) {\n\t\twindow.location.href = window.location.pathname + \"?name=\" + name;\n\t}\n\n\tget_selected() {\n\t\treturn this.rows.filter(row => row.is_selected());\n\t}\n\n\ttoggle_delete() {\n\t\tif (!this.settings.allow_delete) return\n\t\tlet btn = document.getElementById(\"delete-rows\");\n\t\tbtn.hidden = !this.get_selected().length;\n\t}\n\n\tdelete_rows() {\n\t\tif (!this.settings.allow_delete) return\n\t\tfrappe\n\t\t\t.call({\n\t\t\t\ttype: \"POST\",\n\t\t\t\tmethod:\n\t\t\t\t\t\"frappe.website.doctype.web_form.web_form.delete_multiple\",\n\t\t\t\targs: {\n\t\t\t\t\tweb_form_name: this.web_form_name,\n\t\t\t\t\tdocnames: this.get_selected().map(row => row.doc.name)\n\t\t\t\t}\n\t\t\t})\n\t\t\t.then(() => {\n\t\t\t\tthis.refresh()\n\t\t\t\tthis.toggle_delete()\n\t\t\t});\n\t}\n};\n\nfrappe.ui.WebFormListRow = class WebFormListRow {\n\tconstructor({ row, doc, columns, serial_number, events, options }) {\n\t\tObject.assign(this, { row, doc, columns, serial_number, events });\n\t\tthis.make_row();\n\t}\n\n\tmake_row() {\n\t\t// Add Checkboxes\n\t\tlet cell = this.row.insertCell();\n\n\t\tthis.checkbox = document.createElement(\"input\");\n\t\tthis.checkbox.type = \"checkbox\";\n\t\tthis.checkbox.onclick = event => {\n\t\t\tthis.toggle_select(event.target.checked);\n\t\t\tevent.stopImmediatePropagation();\n\t\t}\n\n\t\tcell.appendChild(this.checkbox);\n\n\t\t// Add Serial Number\n\t\tlet serialNo = this.row.insertCell();\n\t\tserialNo.innerText = this.serial_number;\n\n\t\tthis.columns.forEach(field => {\n\t\t\tlet cell = this.row.insertCell();\n\t\t\tlet formatter = frappe.form.get_formatter(field.fieldtype);\n\t\t\tcell.innerHTML = this.doc[field.fieldname] &&\n\t\t\t\t__(formatter(this.doc[field.fieldname], field, {only_value: 1}, this.doc)) || \"\";\n\t\t});\n\n\t\tthis.row.onclick = () => this.events.onEdit();\n\t\tthis.row.style.cursor = \"pointer\";\n\t}\n\n\ttoggle_select(checked) {\n\t\tthis.checkbox.checked = checked;\n\t\tthis.events.onSelect(checked);\n\t}\n\n\tis_selected() {\n\t\treturn this.checkbox.checked;\n\t}\n};\n","frappe.provide('frappe.utils');\n/**\n * Simple EventEmitterMixin which uses jQuery's event system\n */\nconst EventEmitterMixin = {\n\tinit() {\n\t\tthis.jq = jQuery({});\n\t},\n\n\ttrigger(evt, data) {\n\t\t!this.jq && this.init();\n\t\tthis.jq.trigger(evt, data);\n\t},\n\n\tonce(evt, handler) {\n\t\t!this.jq && this.init();\n\t\tthis.jq.one(evt, (e, data) => handler(data));\n\t},\n\n\ton(evt, handler) {\n\t\t!this.jq && this.init();\n\t\tthis.jq.bind(evt, (e, data) => handler(data));\n\t},\n\n\toff(evt, handler) {\n\t\t!this.jq && this.init();\n\t\tthis.jq.unbind(evt, (e, data) => handler(data));\n\t}\n}\n\nfrappe.utils.make_event_emitter = function(object) {\n\tObject.assign(object, EventEmitterMixin);\n\treturn object;\n};\n\nexport default EventEmitterMixin;\n","frappe.provide(\"frappe.ui\");\nfrappe.provide(\"frappe.web_form\");\nimport EventEmitterMixin from '../../frappe/event_emitter';\n\nexport default class WebForm extends frappe.ui.FieldGroup {\n\tconstructor(opts) {\n\t\tsuper();\n\t\tObject.assign(this, opts);\n\t\tfrappe.web_form = this;\n\t\tfrappe.web_form.events = {};\n\t\tObject.assign(frappe.web_form.events, EventEmitterMixin);\n\t\tthis.current_section = 0;\n\t}\n\n\tprepare(web_form_doc, doc) {\n\t\tObject.assign(this, web_form_doc);\n\t\tthis.fields = web_form_doc.web_form_fields;\n\t\tthis.doc = doc;\n\t}\n\n\tmake() {\n\t\tsuper.make();\n\t\tthis.set_sections();\n\t\tthis.set_field_values();\n\t\tthis.setup_listeners();\n\t\tif (this.introduction_text) this.set_form_description(this.introduction_text);\n\t\tif (this.allow_print && !this.is_new) this.setup_print_button();\n\t\tif (this.allow_delete && !this.is_new) this.setup_delete_button();\n\t\tif (this.is_new) this.setup_cancel_button();\n\t\tthis.setup_primary_action();\n\t\tthis.setup_previous_next_button();\n\t\tthis.toggle_section();\n\t\t$(\".link-btn\").remove();\n\n\t\t// webform client script\n\t\tfrappe.init_client_script && frappe.init_client_script();\n\t\tfrappe.web_form.events.trigger('after_load');\n\t\tthis.after_load && this.after_load();\n\t}\n\n\ton(fieldname, handler) {\n\t\tlet field = this.fields_dict[fieldname];\n\t\tfield.df.change = () => {\n\t\t\thandler(field, field.value);\n\t\t};\n\t}\n\n\tsetup_listeners() {\n\t\t// Event listener for triggering Save/Next button for Multi Step Forms\n\t\t// Do not use `on` event here since that can be used by user which will render this function useless\n\t\t// setTimeout has 200ms delay so that all the base_control triggers for the fields have been run\n\t\tlet me = this;\n\n\t\tif (!me.is_multi_step_form) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (let field of $(\".input-with-feedback\")) {\n\t\t\t$(field).change((e) => {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tme.toggle_buttons();\n\t\t\t\t}, 200);\n\t\t\t});\n\t\t}\n\t}\n\n\tset_sections() {\n\t\tif (this.sections.length) return;\n\n\t\tthis.sections = $(`.form-section`);\n\t}\n\n\tsetup_previous_next_button() {\n\t\tlet me = this;\n\n\t\tif (!me.is_multi_step_form) {\n\t\t\treturn;\n\t\t}\n\n\t\t$('.web-form-footer').after(`\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t`);\n\n\t\t$('.btn-previous').on('click', function () {\n\t\t\tlet is_validated = me.validate_section();\n\n\t\t\tif (!is_validated) return;\n\n\t\t\t/**\n\t\t\t\tThe eslint utility cannot figure out if this is an infinite loop in backwards and\n\t\t\t\tthrows an error. Disabling for-direction just for this section.\n\t\t\t\tfor-direction doesnt throw an error if the values are hardcoded in the\n\t\t\t\treverse for-loop, but in this case its a dynamic loop.\n\t\t\t\thttps://eslint.org/docs/rules/for-direction\n\t\t\t*/\n\t\t\t/* eslint-disable for-direction */\n\t\t\tfor (let idx = me.current_section; idx < me.sections.length; idx--) {\n\t\t\t\tlet is_empty = me.is_previous_section_empty(idx);\n\t\t\t\tme.current_section = me.current_section > 0 ? me.current_section - 1 : me.current_section;\n\n\t\t\t\tif (!is_empty) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\t/* eslint-enable for-direction */\n\t\t\tme.toggle_section();\n\t\t});\n\n\t\t$('.btn-next').on('click', function () {\n\t\t\tlet is_validated = me.validate_section();\n\n\t\t\tif (!is_validated) return;\n\n\t\t\tfor (let idx = me.current_section; idx < me.sections.length; idx++) {\n\t\t\t\tlet is_empty = me.is_next_section_empty(idx);\n\t\t\t\tme.current_section = me.current_section < me.sections.length ? me.current_section + 1 : me.current_section;\n\n\t\t\t\tif (!is_empty) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tme.toggle_section();\n\t\t});\n\t}\n\n\tset_field_values() {\n\t\tif (this.doc.name) this.set_values(this.doc);\n\t\telse return;\n\t}\n\n\tset_default_values() {\n\t\tlet values = frappe.utils.get_query_params();\n\t\tdelete values.new;\n\t\tthis.set_values(values);\n\t}\n\n\tset_form_description(intro) {\n\t\tlet intro_wrapper = document.getElementById('introduction');\n\t\tintro_wrapper.innerHTML = intro;\n\t}\n\n\tadd_button(name, type, action, wrapper_class=\".web-form-actions\") {\n\t\tconst button = document.createElement(\"button\");\n\t\tbutton.classList.add(\"btn\", \"btn-\" + type, \"btn-sm\", \"ml-2\");\n\t\tbutton.innerHTML = name;\n\t\tbutton.onclick = action;\n\t\tdocument.querySelector(wrapper_class).appendChild(button);\n\t}\n\n\tadd_button_to_footer(name, type, action) {\n\t\tthis.add_button(name, type, action, '.web-form-footer');\n\t}\n\n\tadd_button_to_header(name, type, action) {\n\t\tthis.add_button(name, type, action, '.web-form-actions');\n\t}\n\n\tsetup_primary_action() {\n\t\tthis.add_button_to_header(this.button_label || __(\"Save\", null, \"Button in web form\"), \"primary\", () =>\n\t\t\tthis.save()\n\t\t);\n\n\t\tthis.add_button_to_footer(this.button_label || __(\"Save\", null, \"Button in web form\"), \"primary\", () =>\n\t\t\tthis.save()\n\t\t);\n\t}\n\n\tsetup_cancel_button() {\n\t\tthis.add_button_to_header(__(\"Cancel\", null, \"Button in web form\"), \"light\", () => this.cancel());\n\t}\n\n\tsetup_delete_button() {\n\t\tfrappe.has_permission(this.doc_type, \"\", \"delete\", () => {\n\t\t\tthis.add_button_to_header(\n\t\t\t\tfrappe.utils.icon('delete'),\n\t\t\t\t\"danger\",\n\t\t\t\t() => this.delete()\n\t\t\t);\n\t\t});\n\t}\n\n\tsetup_print_button() {\n\t\tthis.add_button_to_header(\n\t\t\tfrappe.utils.icon('print'),\n\t\t\t\"light\",\n\t\t\t() => this.print()\n\t\t);\n\t}\n\n\tvalidate_section() {\n\t\tif (this.allow_incomplete) return true;\n\n\t\tlet fields = $(`.form-section:eq(${this.current_section}) .form-control`);\n\t\tlet errors = [];\n\t\tlet invalid_values = [];\n\n\t\tfor (let field of fields) {\n\t\t\tlet fieldname = $(field).attr(\"data-fieldname\");\n\t\t\tif (!fieldname) continue;\n\n\t\t\tfield = this.fields_dict[fieldname];\n\n\t\t\tif (field.get_value) {\n\t\t\t\tlet value = field.get_value();\n\t\t\t\tif (field.df.reqd && is_null(typeof value === 'string' ? strip_html(value) : value)) errors.push(__(field.df.label));\n\n\t\t\t\tif (field.df.reqd && field.df.fieldtype === 'Text Editor' && is_null(strip_html(cstr(value)))) errors.push(__(field.df.label));\n\n\t\t\t\tif (field.df.invalid) invalid_values.push(__(field.df.label));\n\t\t\t}\n\t\t}\n\n\t\tlet message = '';\n\t\tif (invalid_values.length) {\n\t\t\tmessage += __('Invalid values for fields:') + '

';\n\t\t}\n\n\t\tif (errors.length) {\n\t\t\tmessage += __('Mandatory fields required:') + '

';\n\t\t}\n\n\t\tif (invalid_values.length || errors.length) {\n\t\t\tfrappe.msgprint({\n\t\t\t\ttitle: __('Error'),\n\t\t\t\tmessage: message,\n\t\t\t\tindicator: 'orange'\n\t\t\t});\n\t\t}\n\n\t\treturn !(errors.length || invalid_values.length);\n\t}\n\n\ttoggle_section() {\n\t\tif (!this.is_multi_step_form) return;\n\n\t\tthis.toggle_previous_button();\n\t\tthis.hide_sections();\n\t\tthis.show_section();\n\t\tthis.toggle_buttons();\n\t}\n\n\ttoggle_buttons() {\n\t\tfor (let idx = this.current_section; idx < this.sections.length; idx++) {\n\t\t\tif (this.is_next_section_empty(idx)) {\n\t\t\t\tthis.show_save_and_hide_next_button();\n\t\t\t} else {\n\t\t\t\tthis.show_next_and_hide_save_button();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tis_next_section_empty(section) {\n\t\tif (section + 1 > this.sections.length) return true;\n\n\t\tlet _section = $(`.form-section:eq(${section + 1})`);\n\t\tlet visible_controls = _section.find(\".frappe-control:not(.hide-control)\");\n\n\t\treturn !visible_controls.length ? true : false;\n\t}\n\n\tis_previous_section_empty(section) {\n\t\tif (section - 1 > this.sections.length) return true;\n\n\t\tlet _section = $(`.form-section:eq(${section - 1})`);\n\t\tlet visible_controls = _section.find(\".frappe-control:not(.hide-control)\");\n\n\t\treturn !visible_controls.length ? true : false;\n\t}\n\n\tshow_save_and_hide_next_button() {\n\t\t$('.btn-next').hide();\n\t\t$('.web-form-footer').show();\n\t}\n\n\tshow_next_and_hide_save_button() {\n\t\t$('.btn-next').show();\n\t\t$('.web-form-footer').hide();\n\t}\n\n\ttoggle_previous_button() {\n\t\tthis.current_section == 0 ? $('.btn-previous').hide() : $('.btn-previous').show();\n\t}\n\n\tshow_section() {\n\t\t$(`.form-section:eq(${this.current_section})`).show();\n\t}\n\n\thide_sections() {\n\t\tfor (let idx=0; idx < this.sections.length; idx++) {\n\t\t\tif (idx !== this.current_section) {\n\t\t\t\t$(`.form-section:eq(${idx})`).hide();\n\t\t\t}\n\t\t}\n\t}\n\n\tsave() {\n\t\tlet is_new = this.is_new;\n\t\tif (this.validate && !this.validate()) {\n\t\t\tfrappe.throw(__(\"Couldn't save, please check the data you have entered\"), __(\"Validation Error\"));\n\t\t}\n\n\t\t// validation hack: get_values will check for missing data\n\t\tlet doc_values = super.get_values(this.allow_incomplete);\n\n\t\tif (!doc_values) return;\n\n\t\tif (window.saving) return;\n\t\tlet for_payment = Boolean(this.accept_payment && !this.doc.paid);\n\n\t\tObject.assign(this.doc, doc_values);\n\t\tthis.doc.doctype = this.doc_type;\n\t\tthis.doc.web_form_name = this.name;\n\n\t\t// Save\n\t\twindow.saving = true;\n\t\tfrappe.form_dirty = false;\n\n\t\tfrappe.call({\n\t\t\ttype: \"POST\",\n\t\t\tmethod: \"frappe.website.doctype.web_form.web_form.accept\",\n\t\t\targs: {\n\t\t\t\tdata: this.doc,\n\t\t\t\tweb_form: this.name,\n\t\t\t\tfor_payment,\n\t\t\t},\n\t\t\tcallback: response => {\n\t\t\t\t// Check for any exception in response\n\t\t\t\tif (!response.exc) {\n\t\t\t\t\t// Success\n\t\t\t\t\tthis.handle_success(response.message);\n\t\t\t\t\tfrappe.web_form.events.trigger('after_save');\n\t\t\t\t\tthis.after_save && this.after_save();\n\t\t\t\t\t// args doctype and docname added to link doctype in file manager\n\t\t\t\t\tif (is_new && (response.message.attachment || response.message.file)) {\n\t\t\t\t\t\tfrappe.call({\n\t\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\t\tmethod: \"frappe.handler.upload_file\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tfile_url: response.message.attachment || response.message.file,\n\t\t\t\t\t\t\t\tdoctype: response.message.doctype,\n\t\t\t\t\t\t\t\tdocname: response.message.name\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\talways: function() {\n\t\t\t\twindow.saving = false;\n\t\t\t}\n\t\t});\n\t\treturn true;\n\t}\n\n\tdelete() {\n\t\tfrappe.call({\n\t\t\ttype: \"POST\",\n\t\t\tmethod: \"frappe.website.doctype.web_form.web_form.delete\",\n\t\t\targs: {\n\t\t\t\tweb_form_name: this.name,\n\t\t\t\tdocname: this.doc.name\n\t\t\t}\n\t\t});\n\t}\n\n\tprint() {\n\t\twindow.open(`/printview?\n\t\t\tdoctype=${this.doc_type}\n\t\t\t&name=${this.doc.name}\n\t\t\t&format=${this.print_format || \"Standard\"}`, '_blank');\n\t}\n\n\tcancel() {\n\t\twindow.location.href = window.location.pathname;\n\t}\n\n\thandle_success(data) {\n\t\tif (this.accept_payment && !this.doc.paid) {\n\t\t\twindow.location.href = data;\n\t\t}\n\n\t\tconst success_dialog = new frappe.ui.Dialog({\n\t\t\ttitle: __(\"Saved Successfully\"),\n\t\t\tsecondary_action: () => {\n\t\t\t\tif (this.success_url) {\n\t\t\t\t\twindow.location.href = this.success_url;\n\t\t\t\t} else if(this.login_required) {\n\t\t\t\t\twindow.location.href =\n\t\t\t\t\t\twindow.location.pathname + \"?name=\" + data.name;\n\t\t\t\t}\n\t\t\t},\n\t\t\ton_hide: () => {\n\t\t\t\twindow.location.href = window.location.pathname;\n\t\t\t}\n\t\t});\n\n\t\tsuccess_dialog.show();\n\t\tconst success_message =\n\t\t\t__(this.success_message) || __(\"Your information has been submitted\");\n\t\tsuccess_dialog.set_message(success_message);\n\t}\n}\n","import WebFormList from './web_form_list'\nimport WebForm from './web_form'\n\nfrappe.ready(function() {\n\tlet query_params = frappe.utils.get_query_params();\n\tlet wrapper = $(\".web-form-wrapper\");\n\tlet is_list = parseInt(wrapper.data('is-list')) || query_params.is_list;\n\tlet webform_doctype = wrapper.data('web-form-doctype');\n\tlet webform_name = wrapper.data('web-form');\n\tlet login_required = parseInt(wrapper.data('login-required'));\n\tlet allow_delete = parseInt(wrapper.data('allow-delete'));\n\tlet doc_name = query_params.name || '';\n\tlet is_new = query_params.new;\n\n\tif (login_required) show_login_prompt();\n\telse if (is_list) show_grid();\n\telse show_form(webform_doctype, webform_name, is_new);\n\n\tdocument.querySelector(\"body\").style.display = \"block\";\n\n\tfunction show_login_prompt() {\n\t\tconst login_required = new frappe.ui.Dialog({\n\t\t\ttitle: __(\"Not Permitted\"),\n\t\t\tprimary_action_label: __(\"Login\"),\n\t\t\tprimary_action: () => {\n\t\t\t\twindow.location.replace('/login?redirect-to=' + window.location.pathname);\n\t\t\t}\n\t\t});\n\t\tlogin_required.set_message(__(\"You are not permitted to access this page.\"));\n\t\tlogin_required.show();\n\t}\n\n\tfunction show_grid() {\n\t\tnew WebFormList({\n\t\t\tparent: wrapper,\n\t\t\tdoctype: webform_doctype,\n\t\t\tweb_form_name: webform_name,\n\t\t\tsettings: {\n\t\t\t\tallow_delete\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction show_form() {\n\t\tlet web_form = new WebForm({\n\t\t\tparent: wrapper,\n\t\t\tis_new,\n\t\t\tweb_form_name: webform_name,\n\t\t});\n\n\t\tget_data().then(r => {\n\t\t\tconst data = setup_fields(r.message);\n\t\t\tlet web_form_doc = data.web_form;\n\n\t\t\tif (web_form_doc.name && web_form_doc.allow_edit === 0) {\n\t\t\t\tif (!window.location.href.includes(\"?new=1\")) {\n\t\t\t\t\twindow.location.replace(window.location.pathname + \"?new=1\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet doc = r.message.doc || build_doc(r.message);\n\t\t\tweb_form.prepare(web_form_doc, r.message.doc && web_form_doc.allow_edit === 1 ? r.message.doc : {});\n\t\t\tweb_form.make();\n\t\t\tweb_form.set_default_values();\n\t\t})\n\n\t\tfunction build_doc(form_data) {\n\t\t\tlet doc = {};\n\t\t\tform_data.web_form.web_form_fields.forEach(df => {\n\t\t\t\tif (df.default) return doc[df.fieldname] = df.default;\n\t\t\t});\n\t\t\treturn doc;\n\t\t}\n\n\t\tfunction get_data() {\n\t\t\treturn frappe.call({\n\t\t\t\tmethod: \"frappe.website.doctype.web_form.web_form.get_form_data\",\n\t\t\t\targs: {\n\t\t\t\t\tdoctype: webform_doctype,\n\t\t\t\t\tdocname: doc_name,\n\t\t\t\t\tweb_form_name: webform_name\n\t\t\t\t},\n\t\t\t\tfreeze: true\n\t\t\t});\n\t\t}\n\n\t\tfunction setup_fields(form_data) {\n\t\t\tform_data.web_form.web_form_fields.map(df => {\n\t\t\t\tdf.is_web_form = true;\n\t\t\t\tif (df.fieldtype === \"Table\") {\n\t\t\t\t\tdf.get_data = () => {\n\t\t\t\t\t\tlet data = [];\n\t\t\t\t\t\tif (form_data.doc) {\n\t\t\t\t\t\t\tdata = form_data.doc[df.fieldname];\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn data;\n\t\t\t\t\t};\n\n\t\t\t\t\tdf.fields = form_data[df.fieldname];\n\t\t\t\t\t$.each(df.fields || [], function(_i, field) {\n\t\t\t\t\t\tif (field.fieldtype === \"Link\") {\n\t\t\t\t\t\t\tfield.only_select = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfield.is_web_form = true;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (df.fieldtype === \"Attach\") {\n\t\t\t\t\t\tdf.is_private = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete df.parent;\n\t\t\t\t\tdelete df.parentfield;\n\t\t\t\t\tdelete df.parenttype;\n\t\t\t\t\tdelete df.doctype;\n\n\t\t\t\t\treturn df;\n\t\t\t\t}\n\t\t\t\tif (df.fieldtype === \"Link\") {\n\t\t\t\t\tdf.only_select = true;\n\t\t\t\t}\n\t\t\t\tif ([\"Attach\", \"Attach Image\"].includes(df.fieldtype)) {\n\t\t\t\t\tif (typeof df.options !== \"object\") {\n\t\t\t\t\t\tdf.options = {};\n\t\t\t\t\t}\n\t\t\t\t\tdf.options.disable_file_browser = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn form_data;\n\t\t}\n\t}\n});\n"],"names":["frappe","provide","defaultDateFormat","defaultTimeFormat","defaultDatetimeFormat","moment","defaultFormat","$","extend","datetime","convert_to_user_tz","date","format","sys_defaults","time_zone","date_obj","tz","local","convert_to_system_tz","is_timezone_same","utcOffset","str_to_obj","d","_d","obj_to_str","locale","obj_to_user","get_user_date_fmt","toUpperCase","get_diff","d1","d2","diff","get_hour_diff","get_day_diff","add_days","days","add","add_months","months","week_start","startOf","week_end","endOf","month_start","month_end","quarter_start","quarter_end","year_start","year_end","get_user_time_fmt","time_format","date_format","get_user_fmt","str_to_user","val","only_time","user_time_fmt","user_date_fmt","indexOf","get_datetime_as_string","user_to_str","user_fmt","system_fmt","replace","user_to_obj","global_date_format","m","_f","now_date","as_obj","_date","now_time","now_datetime","const","moment_to_date_obj","Date","date_array","toArray","setFullYear","setMonth","setDate","setHours","setMinutes","setSeconds","setMilliseconds","nowdate","get_today","get_time","timestamp","validate","isValid","get_first_day_of_the_week_index","first_day_of_the_week","weekdays","Object","defineProperties","window","dateutil","get","console","warn","configurable","WebFormList","[object Object]","opts","assign","this","web_form_list","wrapper","document","getElementById","make_actions","make_filters","remove","table","Array","from","tBodies","forEach","tbody","checked","rows","page_length","web_list_start","run_serially","get_list_view_fields","get_data","make_table","create_more","filters","filter_input","filter_area","call","web_form_name","then","response","message","field","let","col","createElement","classList","appendChild","default","add_filter","fieldname","fieldtype","input","ui","form","make_control","df","options","only_select","label","__","onchange","event","value","refresh","parent","render_input","push","fromEntries","method","args","doctype","fields_list","fields","map","limit_start","fetch_data","data","res","length","msgprint","append_rows","columns","make_table_head","thead","createTHead","style","backgroundColor","color","row","insertRow","th","checkbox","add_heading","innerText","type","id","onclick","toggle_select_all","target","row_data","childNodes","createTBody","data_item","row_element","setAttribute","name","WebFormListRow","doc","serial_number","events","onEdit","open_form","onSelect","toggle_delete","actions","querySelector","has_permission","addButton","delete_rows","location","href","pathname","hidden","action","button","footer","more","toggle_select","filter","is_selected","settings","allow_delete","get_selected","docnames","ref","make_row","cell","insertCell","stopImmediatePropagation","formatter","get_formatter","innerHTML","only_value","cursor","EventEmitterMixin","init","jq","jQuery","trigger","evt","once","handler","one","e","on","bind","off","unbind","utils","make_event_emitter","object","WebForm","FieldGroup","super","web_form","current_section","web_form_doc","web_form_fields","make","set_sections","set_field_values","setup_listeners","introduction_text","set_form_description","allow_print","is_new","setup_print_button","setup_delete_button","setup_cancel_button","setup_primary_action","setup_previous_next_button","toggle_section","init_client_script","after_load","fields_dict","change","me","is_multi_step_form","setTimeout","stopPropagation","toggle_buttons","sections","after","validate_section","idx","is_empty","is_previous_section_empty","is_next_section_empty","set_values","values","get_query_params","new","intro","wrapper_class","add_button","add_button_to_header","button_label","save","add_button_to_footer","cancel","doc_type","icon","delete","print","allow_incomplete","errors","invalid_values","attr","get_value","reqd","is_null","strip_html","cstr","invalid","join","title","indicator","toggle_previous_button","hide_sections","show_section","show_next_and_hide_save_button","show_save_and_hide_next_button","section","find","hide","show","throw","doc_values","get_values","saving","for_payment","Boolean","accept_payment","paid","form_dirty","callback","exc","handle_success","after_save","attachment","file","file_url","docname","always","open","print_format","success_dialog","Dialog","secondary_action","success_url","login_required","on_hide","success_message","set_message","ready","query_params","is_list","parseInt","webform_doctype","webform_name","doc_name","primary_action_label","primary_action","show_login_prompt","freeze","r","form_data","is_web_form","each","_i","is_private","parentfield","parenttype","includes","disable_file_browser","allow_edit","build_doc","prepare","set_default_values","show_form","display"],"mappings":"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"}