@livinglogic/livingapi 1.15.0 → 1.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"livingapi.js","sources":["../../src/livingapi.js"],"sourcesContent":["/*!\n * LivingAPI JavaScript Library\n * https://my.living-apps.de/docs/LivingAPI.html\n *\n * Copyright 2017-2024 by LivingLogic AG, Bayreuth/Germany\n * Copyright 2017-2024 by Walter Dörwald\n *\n * All Rights Reserved\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n// Version of this Javascript package\nimport { version } from '../package.json';\n\nexport { version };\n\nimport * as ul4 from '@livinglogic/ul4';\n\n\nexport function element(name, ...args)\n{\n\tlet dom_node = document.createElement(name);\n\tfor (let arg of args)\n\t{\n\t\tif (typeof(arg) === \"string\")\n\t\t\tdom_node.appendChild(document.createTextNode(arg));\n\t\tlet ismap = arg instanceof Map;\n\t\tlet isobject = ul4._isobject(arg);\n\t\tif (ismap || isobject)\n\t\t{\n\t\t\tif (isobject)\n\t\t\t\targ = Object.entries(arg);\n\t\t\tfor (let [name, value] of arg)\n\t\t\t{\n\t\t\t\tif (value !== null)\n\t\t\t\t\tdom_node.setAttribute(name, value);\n\t\t\t}\n\t\t}\n\t}\n\treturn dom_node;\n}\n\n\nfunction _append_param_to_url(urlparams, name, value)\n{\n\tif (ul4._islist(value) || ul4._isset(value))\n\t{\n\t\tfor (let v of value)\n\t\t\t_append_param_to_url(urlparams, name, v);\n\t}\n\telse if (typeof(value) === \"string\")\n\t\turlparams.append(name, value);\n\telse if (value !== null)\n\t\turlparams.append(name, ul4._str(value));\n}\n\nexport function url_with_params(url, ...params)\n{\n\tlet urlparams = new URLSearchParams();\n\n\tfor (let param of params)\n\t{\n\t\tif (ul4._islist(param) && param.length == 2)\n\t\t{\n\t\t\t_append_param_to_url(urlparams, ...param);\n\t\t}\n\t\telse if (Object.prototype.toString.call(param) === \"[object Object]\" && !(param instanceof ul4.Proto))\n\t\t{\n\t\t\tfor (let name in param)\n\t\t\t\t_append_param_to_url(urlparams, name, param[name]);\n\t\t}\n\t\telse if (param !== null && typeof(param) === \"object\" && typeof(param.__proto__) === \"object\" && param.__proto__ === Map.prototype)\n\t\t{\n\t\t\tfor (let [name, value] of param)\n\t\t\t\t_append_param_to_url(urlparams, name, value);\n\t\t}\n\t}\n\turlparams = urlparams.toString().replace(\"+\", \"%20\");\n\tif (urlparams.length > 0)\n\t\turl += \"?\" + urlparams;\n\treturn url;\n}\n\nexport class Base extends ul4.Proto\n{\n\tconstructor(id)\n\t{\n\t\tsuper();\n\t\tthis.id = id;\n\t}\n\n\tget ul4onid()\n\t{\n\t\treturn this.id;\n\t}\n\n\tul4ondump(encoder)\n\t{\n\t\tfor (let i = 0; i < this._ul4onattrs.length; ++i)\n\t\t\tencoder.dump(this._dumpUL4ONAttr(this._ul4onattrs[i]));\n\t}\n\n\t_dumpUL4ONAttr(name)\n\t{\n\t\treturn this[name];\n\t}\n\n\tul4onload(decoder)\n\t{\n\t\tlet i = 0;\n\t\tfor (let iter = decoder.loadcontent(); ; ++i)\n\t\t{\n\t\t\tlet iteritem = iter.next();\n\t\t\tif (iteritem.done)\n\t\t\t\tbreak;\n\t\t\tif (i < this._ul4onattrs.length)\n\t\t\t\tthis._loadUL4ONAttr(this._ul4onattrs[i], iteritem.value);\n\t\t}\n\t\tfor (; i < this._ul4onattrs.length; ++i)\n\t\t\tthis._setDefaultUL4ONAttr(this._ul4onattrs[i]);\n\t}\n\n\t_loadUL4ONAttr(name, value)\n\t{\n\t\tthis[name] = value;\n\t}\n\n\t_setDefaultUL4ONAttr(name)\n\t{\n\t\tthis[name] = null;\n\t}\n\n\t[ul4.symbols.getattr](name)\n\t{\n\t\tif (this._ul4attrs.has(name))\n\t\t{\n\t\t\tlet value = this[name];\n\t\t\tif (typeof(value) === \"function\")\n\t\t\t{\n\t\t\t\tlet realvalue = value.bind(this);\n\t\t\t\trealvalue._ul4_name = value._ul4_name || value.name;\n\t\t\t\trealvalue._ul4_signature = value._ul4_signature;\n\t\t\t\trealvalue._ul4_needsobject = value._ul4_needsobject;\n\t\t\t\trealvalue._ul4_needscontext = value._ul4_needscontext;\n\t\t\t\treturn realvalue;\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t\telse if (name.startsWith(\"x_\"))\n\t\t{\n\t\t\treturn this.hasOwnProperty(name) ? this[name] : null;\n\t\t}\n\t\tthrow new ul4.AttributeError(this, name);\n\t}\n\n\t[ul4.symbols.setattr](name, value)\n\t{\n\t\tif (name.startsWith(\"x_\"))\n\t\t{\n\t\t\tthis[name] = value;\n\t\t}\n\t\telse\n\t\t\tthrow new ul4.AttributeError(this, name);\n\t}\n\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<\" + this.constructor.name + \">\";\n\t}\n\n\ttoString()\n\t{\n\t\treturn this[ul4.symbols.repr]();\n\t}\n};\n\n\nexport class Handler\n{\n\tsave(record)\n\t{\n\t}\n\n\tdelete(record)\n\t{\n\t}\n};\n\n\nclass GlobalsType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Globals;\n\t}\n};\n\nlet globalstype = new GlobalsType(\"la\", \"Globals\", \"Global information\");\n\n\nexport class Globals extends Base\n{\n\tconstructor(id)\n\t{\n\t\tsuper(id);\n\t\tthis.version = null;\n\t\tthis.hostname = null;\n\t\tthis.platform = null;\n\t\tthis.user = null;\n\t\tthis.lang = null;\n\t\tthis.datasources = null;\n\t\tthis.app = null;\n\t\tthis.record = null;\n\t\tthis.mode = null;\n\t\tthis.maxdbactions = null;\n\t\tthis.maxtemplateruntime = null;\n\t\tthis.flashmessages = null;\n\t\tthis.view_template_id = null;\n\t\tthis.email_template_id = null;\n\t\tthis.handler = new Handler();\n\t\tthis._log_stack = [];\n\t\tthis._current_geo = null;\n\t}\n\n\t[ul4.symbols.type]()\n\t{\n\t\treturn globalstype;\n\t}\n\n\t// distance between two geo coordinates (see https://de.wikipedia.org/wiki/Orthodrome#Genauere_Formel_zur_Abstandsberechnung_auf_der_Erde)\n\tdist(geo1, geo2)\n\t{\n\t\tlet sqsin = function sqsin(x) {x = Math.sin(x); return x*x};\n\t\tlet sqcos = function sqsos(x) {x = Math.cos(x); return x*x};\n\t\tconst deg2rad = Math.PI/180; // Conversion factor degree -> radians\n\t\tconst radius = 6378.137; // Equatorial radius of earth in km\n\t\tconst flat = 1/298.257223563; // Earth flattening\n\n\t\tconst lat1 = geo1.lat * deg2rad;\n\t\tconst long1 = geo1.long * deg2rad;\n\t\tconst lat2 = geo2.lat * deg2rad;\n\t\tconst long2 = geo2.long * deg2rad;\n\t\tconst F = (lat1 + lat2)/2;\n\t\tconst G = (lat1 - lat2)/2;\n\t\tconst l = (long1 - long2)/2;\n\t\tconst S = sqsin(G) * sqcos(l) + sqcos(F) * sqsin(l);\n\t\tconst C = sqcos(G) * sqcos(l) + sqsin(F) * sqsin(l);\n\t\tconst w = Math.atan(Math.sqrt(S/C));\n\t\tconst D = 2 * w * radius;\n\t\tif (D === 0.0)\n\t\t\t/* The \"correction\" calculation below would fail if the raw distance is 0 */\n\t\t\treturn D;\n\t\tconst T = Math.sqrt(S*C)/w;\n\t\tconst H1 = (3*T-1)/(2*C);\n\t\tconst H2 = (3*T+1)/(2*S);\n\t\tconst s = D * (1 + flat * H1 * sqsin(F) * sqcos(G) - flat * H2 * sqcos(F) * sqsin(G));\n\t\treturn s;\n\t}\n\n\tscaled_url(image, width, height, type=\"fill\", enlarge=true, gravity=\"sm\", quality=null, rotate=null, blur=null, sharpen=null, format=null, cache=true)\n\t{\n\t\tlet filename = null;\n\n\t\tif (image instanceof File)\n\t\t{\n\t\t\timage = image.archive_url;\n\t\t\tfilename = encodeURIComponent(image.filename);\n\t\t\tif (filename != image.filename)\n\t\t\t\tfilename = null;\n\t\t}\n\n\t\tlet result = \"https://\" + this.hostname;\n\n\t\tif (cache)\n\t\t\tresult += \"/imgproxycache/insecure\";\n\t\telse\n\t\t\tresult += \"/imgproxy/insecure\";\n\n\t\tif (type !== \"fit\")\n\t\t\tresult += \"/rt:\" + type;\n\n\t\tif (width !== null && width !== undefined)\n\t\t\tresult += \"/w:\" + width;\n\n\t\tif (height !== null && height !== undefined)\n\t\t\tresult += \"/h:\" + height;\n\n\t\tif (enlarge)\n\t\t\tresult += \"/el:1\";\n\n\t\tif (gravity !== null && gravity !== undefined)\n\t\t\tresult += \"/g:\" + gravity;\n\n\t\tif (quality !== null && quality !== undefined)\n\t\t\tresult += \"/q:\" + quality;\n\n\t\tif (rotate !== null && rotate % 360 != 0)\n\t\t\tresult += \"/rot:\" + rotatet;\n\n\t\tif (blur !== null && blur !== undefined)\n\t\t\tresult += \"/bl:\" + blur;\n\n\t\tif (sharpen !== null && sharpen !== undefined)\n\t\t\tresult += \"/sh:\" + sharpen;\n\n\t\tif (format !== null && format !== undefined)\n\t\t\tresult += \"/f:\" + format;\n\n\t\tif (filename !== null && filename !== undefined)\n\t\t\tresult += \"/fn:\" + filename;\n\n\t\tresult += \"/plain/\" + encodeURIComponent(image);\n\n\t\treturn result;\n\t}\n\n\tqrcode_url(data, size)\n\t{\n\t\treturn \"https://\" + this.hostname + \"/qr/generate?data=\" + encodeURIComponent(data) + \"&size=\" + encodeURIComponent(size);\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<Globals version=\" + ul4._repr(this.version) + \" mode=\" + ul4._repr(this.mode) + \">\";\n\t}\n\n\tcurrent_geo()\n\t{\n\t\treturn this._current_geo;\n\t}\n\n\tset_current_geo(position)\n\t{\n\t\tthis._current_geo = new Geo(this, position.coords.latitude, position.coords.longitude);\n\t}\n\n\t_in_form()\n\t{\n\t\treturn this.mode !== null && this.mode.startsWith(\"form/\");\n\t}\n\n\tmsg_bool(value)\n\t{\n\t\tswitch (value)\n\t\t{\n\t\t\tcase true:\n\t\t\t\treturn this.msg_bool_true();\n\t\t\tcase false:\n\t\t\t\treturn this.msg_bool_false();\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\t}\n\n\tmsg_bool_true(value)\n\t{\n\t\tswitch (this.lang)\n\t\t{\n\t\t\tcase \"de\":\n\t\t\t\treturn \"Ja\";\n\t\t\tdefault:\n\t\t\t\treturn \"Yes\";\n\t\t}\n\t}\n\n\tmsg_bool_false(value)\n\t{\n\t\tswitch (this.lang)\n\t\t{\n\t\t\tcase \"de\":\n\t\t\t\treturn \"Nein\";\n\t\t\tdefault:\n\t\t\t\treturn \"No\";\n\t\t}\n\t}\n\n\tmsg_no_fields()\n\t{\n\t\tswitch (this.lang)\n\t\t{\n\t\t\tcase \"de\":\n\t\t\t\treturn \"(Keine Felder gefunden)\";\n\t\t\tdefault:\n\t\t\t\treturn \"(No fields found)\";\n\t\t}\n\t}\n\n\tmsg_nothing_selected()\n\t{\n\t\tswitch (this.lang)\n\t\t{\n\t\t\tcase \"de\":\n\t\t\t\treturn \"(Nichts ausgewählt)\";\n\t\t\tdefault:\n\t\t\t\treturn \"(Nothing selected)\";\n\t\t}\n\t}\n\n\t_make_log_message(messages)\n\t{\n\t\treturn messages\n\t\t\t.map(m => typeof(m) !== \"string\" ? ul4._repr(m) : m)\n\t\t\t.join(\" \")\n\t\t;\n\t}\n\n\tbegin_logging(header)\n\t{\n\t\tthis._log_stack.push({header: header, output: false});\n\t}\n\n\tend_logging()\n\t{\n\t\tif (this._log_stack)\n\t\t{\n\t\t\tif (this._log_stack[this._log_stack.length-1].output && console && console.groupEnd)\n\t\t\t\tconsole.groupEnd();\n\t\t\tthis._log_stack.pop();\n\t\t}\n\t}\n\n\tgroup_logging(header, callback)\n\t{\n\t\tthis.begin_logging(header);\n\t\ttry\n\t\t{\n\t\t\tcallback();\n\t\t}\n\t\tfinally\n\t\t{\n\t\t\tthis.end_logging();\n\t\t}\n\t}\n\n\t_start_log_message()\n\t{\n\t\tfor (let level of this._log_stack)\n\t\t{\n\t\t\tif (!level.output)\n\t\t\t{\n\t\t\t\tif (console && console.group)\n\t\t\t\t\tconsole.group(level.header)\n\t\t\t\tlevel.output = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tlog_debug(message)\n\t{\n\t\tthis._start_log_message();\n\t\tif (console && console.debug)\n\t\t\tconsole.debug(this._make_log_message(message));\n\t}\n\n\tlog_info(message)\n\t{\n\t\tthis._start_log_message();\n\t\tif (console && console.info)\n\t\t\tconsole.info(this._make_log_message(message));\n\t}\n\n\tlog_warning(message)\n\t{\n\t\tthis._start_log_message();\n\t\tif (console && console.warn)\n\t\t\tconsole.warn(this._make_log_message(message));\n\t}\n\n\tlog_error(message)\n\t{\n\t\tthis._start_log_message();\n\t\tif (console && console.error)\n\t\t\tconsole.error(this._make_log_message(message));\n\t}\n\n\tmy_apps_url()\n\t{\n\t\treturn \"https://\" + this.hostname + \"/apps.htm\";\n\t}\n\n\tmy_tasks_url()\n\t{\n\t\treturn \"https://\" + this.hostname + \"/xist4c/web/aufgaben_id_393_.htm\";\n\t}\n\n\tcatalog_url()\n\t{\n\t\treturn \"https://\" + this.hostname + \"/katalog/home.htm\";\n\t}\n\n\tchats_url()\n\t{\n\t\treturn \"https://\" + this.hostname + \"/chats.htm\";\n\t}\n\n\tprofile_url()\n\t{\n\t\treturn \"https://\" + this.hostname + \"/profil/index.htm\";\n\t}\n\n\taccount_url()\n\t{\n\t\treturn \"https://\" + this.hostname + \"/account.htm\";\n\t}\n\n\tlogout_url()\n\t{\n\t\treturn \"https://\" + this.hostname + \"/login.htm?logout=standardCug\";\n\t}\n};\n\nGlobals.prototype._ul4onattrs = [\"version\", \"platform\", \"user\", \"maxdbactions\", \"maxtemplateruntime\", \"lang\", \"datasources\", \"hostname\", \"app\", \"record\", \"mode\", \"view_template_id\", \"email_template_id\", \"view_id\"];\nGlobals.prototype._ul4attrs = new Set([\"version\", \"hostname\", \"platform\", \"user\", \"lang\", \"datasources\", \"app\", \"record\", \"maxdbactions\", \"maxtemplateruntime\", \"flashmessages\", \"mode\", \"scaled_url\", \"qrcode_url\", \"dist\", \"current_geo\", \"log_debug\", \"log_info\", \"log_warning\", \"log_error\", \"my_apps_url\", \"my_tasks_url\", \"catalog_url\", \"chats_url\", \"profile_url\", \"account_url\", \"logout_url\"]);\nul4.expose(Globals.prototype.log_debug, [\"message\", \"*\"]);\nul4.expose(Globals.prototype.log_info, [\"message\", \"*\"]);\nul4.expose(Globals.prototype.log_warning, [\"message\", \"*\"]);\nul4.expose(Globals.prototype.log_error, [\"message\", \"*\"]);\nul4.expose(Globals.prototype.dist, [\"geo1\", \"pk\", \"geo2\", \"pk\"]);\nul4.expose(Globals.prototype.current_geo, []);\nul4.expose(Globals.prototype.scaled_url, [\n\t\"image\", \"p\",\n\t\"width\", \"p\",\n\t\"height\", \"p\",\n\t\"type\", \"k=\", \"fill\",\n\t\"enlarge\", \"k=\", true,\n\t\"gravity\", \"k=\", \"sm\",\n\t\"quality\", \"k=\", null,\n\t\"rotate\", \"k=\", null,\n\t\"blur\", \"k=\", null,\n\t\"sharpen\", \"k=\", null,\n\t\"format\", \"k=\", null,\n\t\"cache\", \"k=\", true\n]);\n\n\nclass FlashMessageType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof FlashMessage;\n\t}\n};\n\nlet flashmessagetype = new FlashMessageType(\"la\", \"FlashMessage\", \"A flash message in a web page\");\n\n\nexport class FlashMessage extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn flashmessagetype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<FlashMessage type=\" + ul4._repr(this.type) + \" title=\" + ul4._repr(this.title) + \">\";\n\t}\n};\n\nFlashMessage.prototype._ul4onattrs = [\"timestamp\", \"type\", \"title\", \"message\"];\nFlashMessage.prototype._ul4attrs = new Set([\"timestamp\", \"type\", \"title\", \"message\"]);\n\n\nclass AppType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof App;\n\t}\n};\n\nlet apptype = new AppType(\"la\", \"App\", \"A LivingApps application\");\n\n\nexport class App extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn apptype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<App id=\" + ul4._repr(this.id) + \" name=\" + ul4._repr(this.name) + \">\";\n\t}\n\n\tinsert(values={})\n\t{\n\t\tlet record = this[ul4.symbols.call](values);\n\t\tthis.globals.handler.save(this);\n\t\treturn record;\n\t}\n\n\ttemplate_url(identifier, record=null, params)\n\t{\n\t\tlet url = \"https://\" + this.globals.hostname + \"/gateway/apps/\" + this.id;\n\t\tif (record !== null)\n\t\t\turl += \"/\" + record.id;\n\t\treturn url_with_params(url, ['template', identifier], params);\n\t}\n\n\tnew_embedded_url(params)\n\t{\n\t\tlet url = \"https://\" + this.globals.hostname + \"/dateneingabe/\" + this.id + \"/new\";\n\t\treturn url_with_params(url, params);\n\t}\n\n\tnew_standalone_url(params)\n\t{\n\t\tlet url = \"https://\" + this.globals.hostname + \"/gateway/apps/\" + this.id + \"/new\";\n\t\treturn url_with_params(url, params);\n\t}\n\n\thome_url()\n\t{\n\t\treturn \"https://\" + this.globals.hostname + \"/apps/\" + this.id + \".htm\";\n\t}\n\n\tdatamanagement_url()\n\t{\n\t\treturn \"https://\" + this.globals.hostname + \"/_id_36_.htm?uuid=\" + this.id + \"&dId=\" + this.id + \"&resetInfo=true&templateIdentifier=created_\" + this.id;\n\t}\n\n\timport_url()\n\t{\n\t\treturn \"https://\" + this.globals.hostname + \"/import-export/\"+ this.id + \".htm\";\n\t}\n\n\ttasks_url()\n\t{\n\t\treturn \"https://\" + this.globals.hostname + \"/_id_1073_.htm?uuid=\" + this.id + \"&dId=\" + this.id + \"&p_tpl_uuid=\" + this.id + \"&resetInfo=true&templateIdentifier=created_task_\" + this.id;\n\t}\n\n\t// formbuilder_url()\n\t// {\n\t// \tlet lang = this.globals.lang\n\t// \tif (!lang)\n\t// \t\tlang = \"de\"\n\t// \tlet tpl_id = \"???\"\n\t// \tlet cl_id = \"???\"\n\t// \treturn \"https://\" + this.globals.hostname + \"/formbuilder/index.html?lang=\" + lang + \"&searchDescription=\" + tpl_id + \"&p_tpl_uuid=\" + this.id + \"&p_cl_id=\" + cl_id;\n\t// }\n\n\t// tasks_config_url()\n\t// {\n\t// \tlet tpl_id = \"???\"\n\t// \treturn \"https://\" + this.globals.hostname + \"/konfiguration/aufgaben.htm?com.livinglogic.cms.apps.search.model.SearchState.search_submit=true&searchDescription=\" + tpl_id + \"&dId=\" + this.id;\n\t// }\n\n\tdatamanagement_config_url()\n\t{\n\t\treturn \"https://\" + this.globals.hostname + \"/datenmanagement-konfigurieren/\" + this.id + \".htm\";\n\t}\n\n\tpermissions_url()\n\t{\n\t\treturn \"https://\" + this.globals.hostname + \"/_id_833_.htm?uuid=\" + this.id + \"&dId=\" + this.id + \"&resetInfo=true\";\n\t}\n\n\tdatamanageview_url(identifier)\n\t{\n\t\treturn \"https://\" + this.globals.hostname + \"/_id_36_.htm?uuid=\" + this.id + \"&dId=\" + this.id + \"&resetInfo=true&templateIdentifier=created_\" + this.id + \"_datamanage_master_\" + identifier;\n\t}\n\n\tget layout_controls()\n\t{\n\t\tif (this.active_view === null)\n\t\t\treturn new Map();\n\t\treturn this.active_view.layout_controls;\n\t}\n\n\t[ul4.symbols.call](values={})\n\t{\n\t\tlet record = new Record(null, this);\n\t\tif (ul4._ismap(values))\n\t\t{\n\t\t\tfor (let identifier of values.keys())\n\t\t\t{\n\t\t\t\tif (!record.fields.has(identifier))\n\t\t\t\t\tthrow new ul4.ArgumentError(ul4._repr(this) + \"() get an unexpected keyword argument \" + ul4._repr(identifier));\n\t\t\t}\n\t\t\trecord._make_fields(true, values, null, null);\n\t\t}\n\t\telse if (ul4._isobject(values))\n\t\t{\n\t\t\tfor (let identifier in values)\n\t\t\t{\n\t\t\t\tif (!record.fields.has(identifier))\n\t\t\t\t\tthrow new ul4.ArgumentError(ul4._repr(this) + \"() get an unexpected keyword argument \" + ul4._repr(identifier));\n\t\t\t}\n\t\t\trecord._make_fields(true, new Map(ul4._list(ul4.dicttype.items(values))), null, null);\n\t\t}\n\t\telse\n\t\t\tthrow new ul4.TypeError(\"values must be an object or a Map\");\n\t\treturn record;\n\t}\n\n\t[ul4.symbols.getattr](name)\n\t{\n\t\tif (name.startsWith(\"c_\"))\n\t\t{\n\t\t\tif (!this.controls.has(name.substr(2)))\n\t\t\t\tthrow new ul4.AttributeError(this, name);\n\t\t\treturn this.controls.get(name.substr(2));\n\t\t}\n\t\telse if (name.startsWith(\"lc_\"))\n\t\t{\n\t\t\tif (this.layout_controls === null || !this.layout_controls.has(name.substr(3)))\n\t\t\t\tthrow new ul4.AttributeError(this, name);\n\t\t\treturn this.layout_controls.get(name.substr(3));\n\t\t}\n\t\telse if (name.startsWith(\"p_\") && this.params !== null)\n\t\t{\n\t\t\tif (!this.params.has(name.substr(2)))\n\t\t\t\tthrow new ul4.AttributeError(this, name);\n\t\t\treturn this.params.get(name.substr(2));\n\t\t}\n\t\telse if (name.startsWith(\"pv_\") && this.params !== null)\n\t\t{\n\t\t\tif (!this.params.has(name.substr(3)))\n\t\t\t\tthrow new ul4.AttributeError(this, name);\n\t\t\treturn this.params.get(name.substr(3)).value;\n\t\t}\n\t\telse\n\t\t\treturn super[ul4.symbols.getattr](name);\n\t}\n\n\tget active_view()\n\t{\n\t\treturn this._active_view;\n\t}\n\n\tset active_view(view)\n\t{\n\t\tif (view === null)\n\t\t\t;\n\t\telse if (typeof(view) === \"string\")\n\t\t{\n\t\t\tif (this.views !== null && this.views.has(view))\n\t\t\t\tview = this.views.get(view);\n\t\t\telse\n\t\t\t\tthrow new ul4.ValueError(\"View \" + ul4._repr(view) + \" not found!\");\n\t\t}\n\t\telse if (view instanceof View)\n\t\t{\n\t\t\tif (view.app === this)\n\t\t\t\t;\n\t\t\telse\n\t\t\t\tthrow new ul4.ValueError(\"View \" + ul4._repr(view) + \" belongs to the wrong app!\");\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthrow new ul4.TypeError(ul4._repr(view) + \" is not a view!\");\n\t\t}\n\n\t\tthis._active_view = view;\n\t}\n\n\tget layout_controls()\n\t{\n\t\tif (this.active_views === null)\n\t\t\treturn new Map();\n\t\treturn this.active_view.layout_controls;\n\t}\n};\n\n\nApp.prototype._ul4onattrs = [\"globals\", \"name\", \"description\", \"lang\", \"gramgen\", \"typename_nom_sin\", \"typename_gen_sin\", \"typename_dat_sin\", \"typename_acc_sin\", \"typename_nom_plu\", \"typename_gen_plu\", \"typename_dat_plu\", \"typename_acc_plu\",\n\t\"startlink\", \"image\", \"createdby\", \"controls\", \"records\", \"recordcount\", \"installation\", \"categories\", \"params\", \"views\", \"datamanagement_identifier\", \"basetable\", \"primarykey\", \"insertprocedure\", \"updateprocedure\", \"deleteprocedure\", \"templates\", \"createdat\", \"updatedat\", \"updatedby\", \"superid\", \"favorite\", \"_active_view\", \"datasource\", \"menus\", \"panels\"];\nApp.prototype._ul4attrs = new Set([\"id\", \"globals\", \"name\", \"description\", \"lang\", \"gramgen\", \"typename_nom_sin\", \"typename_gen_sin\", \"typename_dat_sin\", \"typename_acc_sin\", \"typename_nom_plu\", \"typename_gen_plu\", \"typename_dat_plu\", \"typename_acc_plu\",\n\"startlink\", \"image\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\", \"controls\", \"layout_controls\", \"records\", \"recordcount\", \"installation\", \"categories\", \"params\", \"views\", \"menus\", \"panels\", \"datasource\", \"datamanagement_identifier\", \"insert\", \"favorite\", \"_active_view\", \"template_url\", \"new_embedded_url\", \"new_standalone_url\", \"home_url\", \"datamanagement_url\", \"import_url\", \"tasks_url\", /*\"formbuilder_url\", \"tasks_config_url\",*/ \"datamanagement_config_url\", \"permissions_url\", \"datamanageview_url\"]);\nul4.expose(App.prototype[ul4.symbols.call], [\"values\", \"**\"], {\"needsobject\": true});\nul4.expose(App.prototype.insert, [\"values\", \"**\"], {\"needsobject\": true});\nul4.expose(App.prototype.template_url, [\"identifier\", \"p\", \"record\", \"p=\", null, \"params\", \"**\"]);\nul4.expose(App.prototype.new_embedded_url, [\"params\", \"**\"]);\nul4.expose(App.prototype.new_standalone_url, [\"params\", \"**\"]);\n\n\nclass ViewType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof View;\n\t}\n};\n\nlet viewtype = new ViewType(\"la\", \"View\", \"An input form for a LivingViews application\");\n\n\nexport class View extends Base\n{\n\tget globals()\n\t{\n\t\treturn this.app.globals;\n\t}\n\n\t[ul4.symbols.type]()\n\t{\n\t\treturn viewtype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<View id=\" + ul4._repr(this.id) + \" name=\" + ul4._repr(this.name) + \">\";\n\t}\n};\n\nView.prototype._ul4onattrs = [\"name\", \"combined_type\", \"app\", \"order\", \"width\", \"height\", \"start\", \"end\", \"controls\", \"layout_controls\", \"lang\", \"login_required\", \"result_page\", \"use_geo\"];\nView.prototype._ul4attrs = new Set([\"id\", \"name\", \"combined_type\", \"app\", \"order\", \"width\", \"height\", \"start\", \"end\", \"controls\", \"layout_controls\", \"lang\", \"login_required\", \"result_page\", \"use_geo\"]);\n\n\nclass DataSourceType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof DataSource;\n\t}\n};\n\nlet datasourcetype = new DataSourceType(\"la\", \"DataSource\", \"The data resulting from a data source configuration\");\n\n\nexport class DataSource extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn datasourcetype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<DataSource id=\" + ul4._repr(this.id) + \" identifier=\" + ul4._repr(this.identifier) + \">\";\n\t}\n};\n\nDataSource.prototype._ul4onattrs = [\"identifier\", \"app\", \"apps\"];\nDataSource.prototype._ul4attrs = new Set([\"id\", \"identifier\", \"app\", \"apps\"]);\n\n\nclass DataSourceChildrenType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof DataSourceChildren;\n\t}\n};\n\nlet datasourcechildrentype = new DataSourceChildrenType(\"la\", \"DataSourceChildren\", \"A master/detail specification in a data source\");\n\n\nexport class DataSourceChildren extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn datasourcetypechildren;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<DataSourceChildren id=\" + ul4._repr(this.id) + \" identifier=\" + ul4._repr(this.identifier) + \">\";\n\t}\n};\n\nDataSourceChildren.prototype._ul4onattrs = [\"datasource\", \"identifier\", \"control\"];\nDataSourceChildren.prototype._ul4attrs = new Set([\"id\", \"identifier\", \"datasource\", \"control\"]);\n\n\nclass RecordChildrenType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof RecordChildren;\n\t}\n};\n\nlet recordchildrentype = new RecordChildrenType(\"la\", \"RecordChildren\", \"The child records of a master record\");\n\n\nexport class RecordChildren extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn recordtypechildren;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<RecordChildren id=\" + ul4._repr(this.id) + \">\";\n\t}\n};\n\nRecordChildren.prototype._ul4onattrs = [\"record\", \"datasourcechildren\", \"records\"];\nRecordChildren.prototype._ul4attrs = new Set([\"id\", \"record\", \"datasourcechildren\", \"records\"]);\n\n\nclass RecordType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Record;\n\t}\n};\n\nlet recordtype = new RecordType(\"la\", \"Record\", \"A record of a LivingApp application\");\n\n\nexport class Record extends Base\n{\n\tconstructor(id, app)\n\t{\n\t\tsuper(id);\n\t\tthis.app = app;\n\t\tthis.createdat = null;\n\t\tthis.createdby = null;\n\t\tthis.updatedat = null;\n\t\tthis.updatedby = null;\n\t\tthis.updatecount = 0;\n\t\tthis._sparsevalues = new Map();\n\t\tthis._values = null;\n\t\tthis._fields = null;\n\t\tthis.details = new Map();\n\t\tthis._children = null;\n\t\tthis.attachments = null;\n\t\tthis.errors = [];\n\t\tthis._sparsefielderrors = null;\n\t\tthis._sparsefieldlookupdata = null;\n\t\tthis._is_deleted = false;\n\t\tthis._is_new = true;\n\t}\n\n\t[ul4.symbols.type]()\n\t{\n\t\treturn recordtype;\n\t}\n\n\tas_text(maxlevel=3, controls=null)\n\t{\n\t\tif (maxlevel == 0)\n\t\t\treturn \"...\";\n\t\tlet fields = [];\n\t\tfor (let [identifier, control] of (controls || this.app.controls))\n\t\t{\n\t\t\tif (controls !== null || control.priority)\n\t\t\t{\n\t\t\t\tlet fieldvalue = this.fields.get(identifier).value_as_text(maxlevel-1);\n\t\t\t\tif (fieldvalue !== null)\n\t\t\t\t\tfields.push([control.label, fieldvalue]);\n\t\t\t}\n\t\t}\n\t\tif (fields.length === 0)\n\t\t\treturn this.globals.msg_no_fields();\n\t\telse if (fields.length === 1)\n\t\t\treturn fields[0][1];\n\t\tlet result = [];\n\t\tfor (let [label, fieldvalue] of fields)\n\t\t\tresult.push(label + \": \" + fieldvalue);\n\t\treturn result.join(\", \");\n\t}\n\n\t_make_fields(defaults, values, errors, lookupdata)\n\t{\n\t\tlet fields = new Map();\n\n\t\tfor (let control of this.app.controls.values())\n\t\t{\n\t\t\tlet identifier = control.identifier;\n\t\t\tlet value = null;\n\t\t\tif (values !== null)\n\t\t\t{\n\t\t\t\tif (defaults && !values.has(identifier))\n\t\t\t\t\tvalue = control.default;\n\t\t\t\telse if (values.has(identifier))\n\t\t\t\t\tvalue = values.get(identifier);\n\t\t\t}\n\t\t\tlet field = new control.fieldtype(control, this, value);\n\t\t\tfields.set(identifier, field);\n\t\t\tif (errors !== null && errors.has(identifier))\n\t\t\t\tfield.errors = errors.get(identifier);\n\t\t\tif (lookupdata !== null && lookupdata.has(identifier))\n\t\t\t\tfield.lookupdata = lookupdata.get(identifier);\n\t\t}\n\n\t\tthis._fields = fields;\n\t\tthis._sparsevalues = null;\n\t\tthis._sparsefielderrors = null;\n\t\tthis._sparselookupdata = null;\n\t}\n\n\t_in_form()\n\t{\n\t\tlet globals = this.app.globals;\n\n\t\treturn globals._in_form() && this === globals.record;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\tlet v = [\"<Record id=\", ul4._repr(this.id)];\n\t\tfor (let field of this.fields.values())\n\t\t{\n\t\t\tif (field.control.priority && !field.is_empty())\n\t\t\t{\n\t\t\t\tv.push(\" v_\");\n\t\t\t\tv.push(field.control.identifier);\n\t\t\t\tv.push(\"=\");\n\t\t\t\tv.push(ul4._repr(field.value)); // FIXME: This might lead to infinite recursions\n\t\t\t}\n\t\t}\n\t\tv.push(\" state=\");\n\t\tv.push(ul4._repr(this.state));\n\t\tv.push(\">\");\n\t\treturn v.join(\"\");\n\t}\n\n\tget state()\n\t{\n\t\tif (this._is_deleted)\n\t\t\treturn \"deleted\";\n\t\telse if (this._is_new)\n\t\t\treturn \"new\";\n\t\telse if (this.is_dirty())\n\t\t\treturn \"dirty\";\n\t\telse\n\t\t\treturn \"saved\";\n\t}\n\n\tget values()\n\t{\n\t\tif (this._values === null)\n\t\t{\n\t\t\tthis._values = new Map();\n\t\t\tfor (let field of this.fields.values())\n\t\t\t{\n\t\t\t\tthis._values.set(field.control.identifier, field.value);\n\t\t\t}\n\t\t}\n\t\treturn this._values;\n\t}\n\n\tget fields()\n\t{\n\t\tif (this._fields === null)\n\t\t\tthis._make_fields(false, this._sparsevalues, this._sparsefielderrors, this._sparsefieldlookupdata)\n\t\treturn this._fields;\n\t}\n\n\tget children()\n\t{\n\t\tif (this._children === null)\n\t\t{\n\t\t\tthis._children = new Map();\n\t\t\tfor (const recordchildren of this.details.values())\n\t\t\t{\n\t\t\t\tthis._children.set(recordchildren.datasourcechildren.identifier, recordchildren.records);\n\t\t\t}\n\t\t}\n\t\treturn this._children;\n\t}\n\n\tis_dirty()\n\t{\n\t\tif (this.id === null)\n\t\t\treturn true;\n\t\tfor (let field of this.fields.values())\n\t\t{\n\t\t\tif (field.is_dirty())\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\thas_errors()\n\t{\n\t\tif (this.errors.length !== 0)\n\t\t\treturn true;\n\t\tfor (let field of this.fields.values())\n\t\t{\n\t\t\tif (field.has_errors())\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tdelete()\n\t{\n\t\tlet result = this.app.globals.handler.delete(this);\n\t\tthis._is_deleted = true;\n\t\treturn result;\n\t}\n\n\tsave()\n\t{\n\t\tthis.app.globals.handler.save(this);\n\t}\n\n\tupdate(values={})\n\t{\n\t\tif (ul4._ismap(values))\n\t\t{\n\t\t\tfor (let [key, value] of values.entries())\n\t\t\t{\n\t\t\t\tif (!this.fields.has(key))\n\t\t\t\t\tthrow new ul4.ArgumentError(\"update() get an unexpected keyword argument \" + ul4._repr(key));\n\t\t\t\tfields.get(key).value = value;\n\t\t\t}\n\t\t}\n\t\telse if (ul4._isobject(values))\n\t\t{\n\t\t\tfor (let key in values)\n\t\t\t{\n\t\t\t\tif (!this.fields.has(key))\n\t\t\t\t\tthrow new ul4.ArgumentError(\"update() get an unexpected keyword argument \" + ul4._repr(key));\n\t\t\t\trecord.fields.get(key).value = values[key];\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tthrow new ul4.TypeError(\"values must be an object or a Map\");\n\n\t\tthis.app.globals.handler.save(this);\n\t}\n\n\ttemplate_url(identifier, params)\n\t{\n\t\tlet url = \"https://\" + this.app.globals.hostname + \"/gateway/apps/\" + this.app.id + \"/\" + this.id;\n\t\treturn url_with_params(url, ['template', identifier], params);\n\t}\n\n\tedit_embedded_url(params)\n\t{\n\t\tlet url = \"https://\" + this.app.globals.hostname + \"/dateneingabe/\" + this.app.id + \"/\" + this.id + \"/edit\";\n\t\treturn url_with_params(url, params);\n\t}\n\n\tedit_standalone_url(params)\n\t{\n\t\tlet url = \"https://\" + this.app.globals.hostname + \"/gateway/apps/\" + this.app.id + \"/\" + this.id + \"/edit\";\n\t\treturn url_with_params(url, params);\n\t}\n\n\tedit_url(params)\n\t{\n\t\treturn this.app[ul4.symbols.getattr](\"pv_la_default_form_variant\") === \"standalone\" ? this.edit_standalone_url(params) : this.edit_embedded_url(params);\n\t}\n\n\tdisplay_embedded_url(params)\n\t{\n\t\tlet url = \"https://\" + this.app.globals.hostname + \"/dateneingabe/\" + this.app.id + \"/\" + this.id + \"/display\";\n\t\treturn url_with_params(url, params);\n\t}\n\n\tdisplay_standalone_url(params)\n\t{\n\t\tlet url = \"https://\" + this.app.globals.hostname + \"/gateway/apps/\" + this.app.id + \"/\" + this.id + \"/display\";\n\t\treturn url_with_params(url, params);\n\t}\n\n\tdisplay_url(params)\n\t{\n\t\treturn this.app[ul4.symbols.getattr](\"pv_la_default_form_variant\") === \"standalone\" ? this.display_standalone_url(params) : this.display_embedded_url(params);\n\t}\n\n\tsearch(search)\n\t{\n\t\tfor (let identifier in search)\n\t\t{\n\t\t\tlet fieldsearch = search[identifier];\n\t\t\tif (ul4._bool(fieldsearch))\n\t\t\t{\n\t\t\t\tif (!this.fields.get(identifier).search(fieldsearch))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tul4onload(decoder)\n\t{\n\t\tsuper.ul4onload(decoder);\n\t\tthis._is_new = false;\n\t}\n\n\t_dumpUL4ONAttr(name)\n\t{\n\t\tif (name === \"values\")\n\t\t\treturn this._sparsevalues;\n\t\telse\n\t\t\treturn this[name];\n\t}\n\n\t_loadUL4ONAttr(name, value)\n\t{\n\t\tif (name === \"values\")\n\t\t{\n\t\t\tthis._sparsevalues = value;\n\t\t\tthis._values = null;\n\t\t\tthis._fields = null;\n\t\t}\n\t\telse\n\t\t\tthis[name] = value;\n\t}\n\n\t[ul4.symbols.getattr](name)\n\t{\n\t\tif (name.startsWith(\"c_\"))\n\t\t{\n\t\t\treturn this.children.get(name.substr(2))\n\t\t}\n\t\telse if (name.startsWith(\"d_\"))\n\t\t\treturn this.details.get(name.substr(2))\n\t\telse if (name.startsWith(\"f_\"))\n\t\t\treturn this.fields.get(name.substr(2))\n\t\telse if (name.startsWith(\"v_\"))\n\t\t\treturn this.fields.get(name.substr(2)).value\n\t\telse\n\t\t\treturn super[ul4.symbols.getattr](name);\n\t}\n\n\t[ul4.symbols.setattr](name, value)\n\t{\n\t\tif (name.startsWith(\"c_\"))\n\t\t\tthis.children[name.substr(2)] = value;\n\t\telse if (name.startsWith(\"v_\"))\n\t\t\tthis.fields.get(name.substr(2)).value = value;\n\t\telse\n\t\t\tsuper[ul4.symbols.setattr](name, value);\n\t}\n};\n\nRecord.prototype._ul4onattrs = [\"app\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\", \"updatecount\", \"_sparsevalues\", \"attachments\", \"details\", \"errors\", \"_sparsefielderrors\", \"_sparsefieldlookupdata\"];\nRecord.prototype._ul4attrs = new Set([\"id\", \"app\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\", \"updatecount\", \"values\", \"fields\", \"attachments\", \"details\", \"children\", \"errors\", \"template_url\", \"edit_embedded_url\", \"edit_standalone_url\"]);\nul4.expose(Record.prototype.is_dirty, []);\nul4.expose(Record.prototype.has_errors, []);\nul4.expose(Record.prototype.delete, []);\nul4.expose(Record.prototype.save, []);\nul4.expose(Record.prototype.update, [\"values\", \"**\"], {\"needsobject\": true});\nul4.expose(Record.prototype.template_url, [\"identifier\", \"p\", \"params\", \"**\"]);\nul4.expose(Record.prototype.edit_embedded_url, [\"params\", \"**\"]);\nul4.expose(Record.prototype.edit_standalone_url, [\"params\", \"**\"]);\n\n\nclass FieldType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Field;\n\t}\n};\n\nlet fieldtype = new FieldType(\"la\", \"Field\", \"Holds the value of a field of a record (and related information)\");\n\n\nexport class Field extends Base\n{\n\tconstructor(control, record, value)\n\t{\n\t\tsuper(null);\n\t\tthis.control = control;\n\t\tthis.record = record;\n\t\tthis._label = null;\n\t\tthis._lookupdata = null;\n\t\tthis.errors = [];\n\t\tthis._value = null;\n\t\tif (!this._in_form())\n\t\t\tthis.value = value;\n\t\tthis._dirty = false;\n\t\tthis._enabled = true;\n\t\tthis._writable = true;\n\t\tthis._visible = true;\n\t\tthis._required = null;\n\t\tthis._top = null;\n\t\tthis._left = null;\n\t}\n\n\t[ul4.symbols.type]()\n\t{\n\t\treturn fieldtype;\n\t}\n\n\tget value()\n\t{\n\t\tif (this._in_form())\n\t\t\treturn this._get_dom_value();\n\t\treturn this._value;\n\t}\n\n\tset value(value)\n\t{\n\t\tlet oldvalue = this._value;\n\n\t\tlet change = {value: value, errors: []};\n\t\tthis._validate(change);\n\n\t\tif (ul4._ne(oldvalue, change.value))\n\t\t{\n\t\t\tif (this.record._values !== null)\n\t\t\t\tthis.record._values.set(this.control.identifier, change.value);\n\t\t\tthis._value = change.value;\n\t\t\tthis._dirty = true;\n\t\t}\n\t\tthis.errors = change.errors;\n\t\tif (this._in_form())\n\t\t\tthis._set_dom_value(this._value);\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\treturn null;\n\t}\n\n\t_validate(change)\n\t{\n\t\t// Do nothing, i.e. accept the value unchanged and without errors\n\t}\n\n\t_set_dom_label()\n\t{\n\t\tif (this._in_form())\n\t\t\tthis._dom_label.textContent = this.label;\n\t}\n\n\tget mode()\n\t{\n\t\treturn this._mode ?? this.control.mode;\n\t}\n\n\tset mode(value)\n\t{\n\t\tthis._mode = value;\n\t}\n\n\tget label()\n\t{\n\t\treturn this._label ?? this.control.label;\n\t}\n\n\tset label(value)\n\t{\n\t\tthis._label = value;\n\t\tthis._set_dom_label();\n\t}\n\n\tget globals()\n\t{\n\t\treturn this.control.globals;\n\t}\n\n\tis_empty()\n\t{\n\t\treturn this._value === null;\n\t}\n\n\tis_dirty()\n\t{\n\t\treturn this._dirty;\n\t}\n\n\thas_errors()\n\t{\n\t\treturn this.errors.length !== 0;\n\t}\n\n\tadd_error(error)\n\t{\n\t\tthis.errors.push(error);\n\t}\n\n\tset_error(error)\n\t{\n\t\tif (error !== null)\n\t\t\tthis.errors = [error];\n\t\telse\n\t\t\tthis.errors = [];\n\t}\n\n\tget top()\n\t{\n\t\treturn this._top ?? this.control.top;\n\t}\n\n\tset top(value)\n\t{\n\t\tthis._top = value;\n\t\tif (this._in_form())\n\t\t\tthis._dom_root.style.top = this.top + \"px\";\n\t}\n\n\tget left()\n\t{\n\t\treturn this._left ?? this.control.left;\n\t}\n\n\tset left(value)\n\t{\n\t\tthis._left = value;\n\t\tif (this._in_form())\n\t\t\tthis._dom_root.style.left = this.left + \"px\";\n\t}\n\n\tget width()\n\t{\n\t\treturn this.control.width;\n\t}\n\n\tget height()\n\t{\n\t\treturn this.control.width;\n\t}\n\n\tsearch(searchvalue)\n\t{\n\t\treturn this.control.search(this.value, searchvalue);\n\t}\n\n\tmsg_field_required(value)\n\t{\n\t\tswitch (this.globals.lang)\n\t\t{\n\t\t\tcase \"de\":\n\t\t\t\treturn `\"${this.label}\" wird benötigt!`;\n\t\t\tdefault:\n\t\t\t\treturn `\"${this.label}\" is required!`;\n\t\t}\n\t}\n\n\tmsg_field_wrong_type(value)\n\t{\n\t\treturn `\"${this.label}\" doesn't support the type ${ul4._type(value).name}!`;\n\t}\n\n\tmsg_bool_truerequired(value)\n\t{\n\t\treturn `\"${this.label}\" only accepts \"Yes\"!`;\n\t}\n\n\tmsg_string_tooshort(value)\n\t{\n\t\treturn `\"${this.label}\" is too short. You must use at least ${this.control.minlength} characters!`;\n\t}\n\n\tmsg_string_toolong(value)\n\t{\n\t\treturn `\"${this.label}\" is too long. You may use at most ${this.control.maxlength} characters!`;\n\t}\n\n\tmsg_email_format(value)\n\t{\n\t\treturn `\"${this.label}\" must be a valid email address!`;\n\t}\n\n\tmsg_url_format(value)\n\t{\n\t\treturn `\"${this.label}\" must be a valid URL!`;\n\t}\n\n\tmsg_tel_format(value)\n\t{\n\t\treturn `\"${this.label}\" must be a valid phone number!`;\n\t}\n\n\tmsg_date_format(value)\n\t{\n\t\treturn `\"${this.label}\" doesn't support this date format!`;\n\t}\n\n\tmsg_number_format(value)\n\t{\n\t\treturn `\"${this.label}\" doesn't support this number format!`;\n\t}\n\n\tmsg_lookup_wrongitem(value)\n\t{\n\t\treturn `The option ${ul4._repr(value)} for \"${this.label}\" doesn't belong to this lookup!`;\n\t}\n\n\tmsg_lookup_unknownkey(value)\n\t{\n\t\treturn `The option ${ul4._repr(value)} for \"${this.label}\" is unknown!`;\n\t}\n\n\tmsg_applookup_wrongrecord(value)\n\t{\n\t\treturn `The record ${ul4._repr(value)} for \"${this.label}\" doesn't belong to the correct app!`;\n\t}\n\n\tmsg_applookup_unknownkey(value)\n\t{\n\t\treturn `The record ${ul4._repr(value)} for \"${this.label}\" can't be found!`;\n\t}\n\n\t/*\n\tThe following methods are used in the input form.\n\n\tI.e. they are expected to be executed inside a browser.\n\t*/\n\t_in_form()\n\t{\n\t\treturn this.record._in_form();\n\t}\n\n\tget _sel_root()\n\t{\n\t\treturn \"#livingapps-form .\" + this.control._cssclass_root + \".llft-id-\" + this.control.identifier;\n\t}\n\n\tget _sel_label()\n\t{\n\t\treturn this._sel_root + \" label span\";\n\t}\n\n\tget _sel_control()\n\t{\n\t\treturn this._sel_root + \" \" + this.control._cssclass_control;\n\t}\n\n\tget _dom_root()\n\t{\n\t\treturn document.querySelector(this._sel_root);\n\t}\n\n\tget _dom_label()\n\t{\n\t\treturn document.querySelector(this._sel_label);\n\t}\n\n\tget _dom_control()\n\t{\n\t\treturn document.querySelector(this._sel_control);\n\t}\n\n\tget _dom_controls()\n\t{\n\t\treturn document.querySelectorAll(this._sel_control);\n\t}\n\n\t_get_dom_value()\n\t{\n\t\treturn this._dom_control.value;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tthis._dom_control.value = value !== null ? value : \"\";\n\t}\n\n\tget visible()\n\t{\n\t\treturn this._visible;\n\t}\n\n\tset visible(value)\n\t{\n\t\tif (this._in_form())\n\t\t\tthis._dom_root.hidden = !value;\n\t\tthis._visible = value;\n\t}\n\n\tget required()\n\t{\n\t\treturn this._required ?? this.control.required;\n\t}\n\n\tset required(value)\n\t{\n\t\tthis._required = value;\n\t}\n\n\tget enabled()\n\t{\n\t\tif (this._in_form())\n\t\t\treturn !this._dom_root.classList.contains(\"llft-control-readonly\");\n\t\telse\n\t\t\treturn this._enabled;\n\t}\n\n\tset enabled(value)\n\t{\n\t\tif (this._in_form())\n\t\t{\n\t\t\tlet disabled = !value;\n\t\t\tfor (let node of this._dom_controls)\n\t\t\t\tnode.disabled = disabled;\n\t\t\tthis._dom_root.classList.toggle(\"llft-control-readonly\", disabled);\n\t\t}\n\t\tthis._enabled = value;\n\t}\n\n\tget writable()\n\t{\n\t\treturn this._writable;\n\t}\n\n\tset writable(value)\n\t{\n\t\tthis._writable = value;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\tlet s = \"<\" + this.constructor.name + \" identifier=\";\n\t\ts += ul4._repr(this.control.identifier)\n\t\tif (this._dirty)\n\t\t\ts += \" is_dirty()=True\";\n\t\tif (this.errors.length > 0)\n\t\t\ts += \" has_errors()=True\";\n\t\ts += \">\";\n\t\treturn s;\n\t}\n\n\t[ul4.symbols.setattr](name, value)\n\t{\n\t\tif (name === \"value\")\n\t\t\tthis.value = value;\n\t\telse if (name === \"visible\")\n\t\t\tthis.visible = ul4._bool(value);\n\t\telse if (name === \"enabled\")\n\t\t\tthis.enabled = ul4._bool(value);\n\t\telse if (name === \"writable\")\n\t\t\tthis.writable = ul4._bool(value);\n\t\telse if (name === \"required\")\n\t\t\tthis.required = ul4._bool(value);\n\t\telse if (name === \"top\")\n\t\t{\n\t\t\tif (value !== null && (typeof(value) !== \"number\"))\n\t\t\t\tthrow new ul4.ArgumentError(\"top must be None or an int\");\n\t\t\tthis.top = value;\n\t\t}\n\t\telse if (name === \"left\")\n\t\t{\n\t\t\tif (value !== null && (typeof(value) !== \"number\"))\n\t\t\t\tthrow new ul4.ArgumentError(\"left must be None or an int\");\n\t\t\tthis.left = value;\n\t\t}\n\t\telse\n\t\t\tsuper[ul4.symbols.setattr](name, value);\n\t}\n};\n\nField.prototype._ul4onattrs = [\"control\", \"record\", \"label\", \"value\", \"errors\", \"_visible\", \"_enabled\", \"_writable\", \"_required\"];\nField.prototype._ul4attrs = new Set([\"control\", \"record\", \"label\", \"value\", \"mode\", \"errors\", \"visible\", \"enabled\", \"writable\", \"required\", \"top\", \"left\", \"width\", \"height\"]);\nField.prototype._inputevent = \"input\";\n\n\nclass BoolFieldType extends FieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof BoolField;\n\t}\n};\n\nlet boolfieldtype = new BoolFieldType(\"la\", \"BoolField\", \"Holds the value of a bool field of a record (and related information)\");\n\n\nexport class BoolField extends Field\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn boolfieldtype;\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (change.value === null)\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(change.value));\n\t\t}\n\t\telse if (typeof(change.value) === \"string\")\n\t\t{\n\t\t\tif (change.value.length === 0)\n\t\t\t{\n\t\t\t\tif (this.control.required)\n\t\t\t\t\tchange.errors.push(this.msg_bool_truerequired(change.value));\n\t\t\t\tchange.value = null;\n\t\t\t}\n\t\t\telse if ([\"false\", \"no\", \"0\", \"off\"].includes(change.value.toLowerCase()))\n\t\t\t{\n\t\t\t\tchange.value = false;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tchange.value = true;\n\t\t\t}\n\t\t}\n\t\telse if (typeof(change.value) === \"boolean\")\n\t\t{\n\t\t\tif (this.control.required && !change.value)\n\t\t\t\tchange.errors.push(this.msg_bool_truerequired(change.value));\n\t\t}\n\t\telse\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t}\n\n\t_get_dom_value()\n\t{\n\t\treturn this._dom_control.checked;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tthis._dom_control.checked = value;\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\treturn this.globals.msg_bool(this.value);\n\t}\n};\n\n\nclass IntFieldType extends FieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof IntField;\n\t}\n};\n\nlet intfieldtype = new IntFieldType(\"la\", \"IntField\", \"Holds the value of an int field of a record (and related information)\");\n\n\nexport class IntField extends Field\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn intfieldtype;\n\t}\n\n\t_parse(value)\n\t{\n\t\tif (/^\\s*[-+]?\\d+\\s*$/.test(value))\n\t\t\treturn parseInt(value);\n\t\telse\n\t\t\treturn null;\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (change.value === null)\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(change.value));\n\t\t}\n\t\telse if (typeof(change.value) === \"string\")\n\t\t{\n\t\t\tlet value = this._parse(change.value);\n\t\t\tif (value !== null)\n\t\t\t\tchange.value = value;\n\t\t\telse\n\t\t\t\tchange.errors.push(this.msg_number_format(change.value));\n\t\t\t\t// Keep original invalid string\n\t\t}\n\t\telse if (typeof(change.value) === \"number\")\n\t\t{\n\t\t\tif (Math.round(change.value) !== change.value)\n\t\t\t\tchange.errors.push(this.msg_field_wrong_type(change.value));\n\t\t\t\t// Keep original floating point number\n\t\t}\n\t\telse\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t}\n\n\t_get_dom_value()\n\t{\n\t\tlet value = super._get_dom_value();\n\t\tif (value)\n\t\t{\n\t\t\tlet testvalue = this._parse(value);\n\t\t\tif (testvalue !== null)\n\t\t\t\tvalue = testvalue;\n\t\t}\n\t\treturn value;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tsuper._set_dom_value(value !== null ? value + \"\" : \"\");\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\tlet value = this.value;\n\t\treturn value != null ? value + \"\" : null;\n\t}\n\n\tget writable()\n\t{\n\t\treturn this._writable;\n\t}\n\n\tset writable(value)\n\t{\n\t\tif (this._in_form())\n\t\t{\n\t\t\tlet readonly = !value;\n\t\t\tfor (let node of this._dom_controls)\n\t\t\t\tnode.readOnly = readonly;\n\t\t}\n\t\tsuper.writable = value;\n\t}\n};\n\n\nclass NumberFieldType extends FieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof NumberField;\n\t}\n};\n\nlet numberfieldtype = new NumberFieldType(\"la\", \"NumberField\", \"Holds the value of a number field of a record (and related information)\");\n\n\nexport class NumberField extends Field\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn numberfieldtype;\n\t}\n\n\t_parse(value)\n\t{\n\t\tif (value === null)\n\t\t\treturn null;\n\n\t\t// Try to ignore thousands separators and return the value as a number\n\t\tlet testvalue = value;\n\t\t// Count decimal delimiters\n\t\tlet seps = \"\";\n\t\tlet commas = 0;\n\t\tlet dots = 0\n\t\tfor (let i = 0; i < value.length; ++i)\n\t\t{\n\t\t\tlet c = value[i];\n\t\t\tif (c == \",\")\n\t\t\t{\n\t\t\t\tcommas++;\n\t\t\t\tseps += c;\n\t\t\t}\n\t\t\telse if (c == \".\")\n\t\t\t{\n\t\t\t\tdots++;\n\t\t\t\tseps += c;\n\t\t\t}\n\t\t}\n\t\tlet convert = null;\n\t\tif (commas == 0)\n\t\t{\n\t\t\tif (dots <= 1)\n\t\t\t\t; // nothing to do\n\t\t\telse\n\t\t\t\tconvert = \"de\";\n\t\t}\n\t\telse if (commas == 1)\n\t\t{\n\t\t\tif (dots == 1)\n\t\t\t\tconvert = (seps == \".,\") ? \"de\" : \"en\";\n\t\t\telse\n\t\t\t\tconvert = \"de\";\n\t\t}\n\t\telse // commas > 1\n\t\t{\n\t\t\tif (dots <= 1)\n\t\t\t\tconvert = \"en\";\n\t\t\telse\n\t\t\t\treturn null; // We can't guess what the user meant\n\t\t}\n\n\t\tif (convert === \"de\")\n\t\t\ttestvalue = testvalue.replace(/\\./g, \"\").replace(/,/g, \".\");\n\t\telse if (convert === \"en\")\n\t\t\ttestvalue = testvalue.replace(/,/g, \"\");\n\t\tlet floatvalue = parseFloat(testvalue);\n\t\tif (isNaN(floatvalue))\n\t\t\treturn value;\n\t\treturn floatvalue;\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (change.value === null || change.value === \"\")\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t\telse if (typeof(change.value) === \"string\")\n\t\t{\n\t\t\tlet value = this._parse(change.value);\n\t\t\tif (value !== null)\n\t\t\t{\n\t\t\t\tvalue = this._bound_value(value);\n\t\t\t\tif (this.control.precision !== null)\n\t\t\t\t\tvalue = ul4._round(value, this.control.precision);\n\t\t\t\tchange.value = value;\n\t\t\t}\n\t\t\telse\n\t\t\t\tchange.errors.push(this.msg_number_format(change.value));\n\t\t\t\t// Keep original invalid string\n\t\t}\n\t\telse if (typeof(change.value) === \"number\")\n\t\t{\n\t\t\tlet value = this._bound_value(change.value);\n\t\t\tif (this.control.precision !== null)\n\t\t\t\tvalue = ul4._round(value, this.control.precision);\n\t\t\tchange.value = value;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t}\n\n\t_bound_value(value)\n\t{\n\t\tif (this.control.minimum !== null)\n\t\t{\n\t\t\tif (value < this.control.minimum)\n\t\t\t\tvalue = this.control.minimum;\n\t\t}\n\t\tif (this.control.maximum !== null)\n\t\t{\n\t\t\tif (value > this.control.maximum)\n\t\t\t\tvalue = this.control.maximum;\n\t\t}\n\t\treturn value;\n\t}\n\n\t_get_dom_value()\n\t{\n\t\tlet value = super._get_dom_value();\n\t\tif (value)\n\t\t{\n\t\t\tif (typeof(value) == \"string\")\n\t\t\t{\n\t\t\t\tlet testvalue = this._parse(value);\n\t\t\t\tif (testvalue !== null)\n\t\t\t\t\tvalue = testvalue;\n\t\t\t}\n\t\t\tif (typeof(value) === \"number\")\n\t\t\t{\n\t\t\t\tif (this.control.precision !== null)\n\t\t\t\t\tvalue = ul4._round(value, this.control.precision);\n\t\t\t\tvalue = this._bound_value(value);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tvalue = null;\n\t\treturn value;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tif (typeof(value) === \"number\")\n\t\t{\n\t\t\tvalue = this._bound_value(value);\n\t\t\tif (this.control.precision !== null)\n\t\t\t\tvalue = value.toFixed(this.control.precision);\n\t\t}\n\t\telse if (value === null)\n\t\t\tvalue = \"\";\n\t\tvalue += \"\";\n\t\tif (this.globals.lang == \"de\" && this.control.precision === null)\n\t\t\tvalue = value.replace(\".\", \",\");\n\t\tsuper._set_dom_value(value);\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\tlet value = this.value;\n\t\tif (value === null)\n\t\t\treturn null;\n\t\tif (this.control.precision !== null)\n\t\t\treturn value.toFixed(this.control.precision);\n\t\treturn value.toString();\n\t}\n\n\tget writable()\n\t{\n\t\treturn this._writable;\n\t}\n\n\tset writable(value)\n\t{\n\t\tif (this._in_form())\n\t\t{\n\t\t\tlet readonly = !value;\n\t\t\tfor (let node of this._dom_controls)\n\t\t\t\tnode.readOnly = readonly;\n\t\t}\n\t\tsuper.writable = value;\n\t}\n};\n\n\nclass StringFieldType extends FieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof StringField;\n\t}\n};\n\nlet stringfieldtype = new StringFieldType(\"la\", \"StringField\", \"Holds the value of a string field of a record (and related information)\");\n\n\nexport class StringField extends Field\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn stringfieldtype;\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (change.value === null || change.value === \"\")\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t\telse if (typeof(change.value) === \"string\")\n\t\t{\n\t\t\tlet minlength = this.control.minlength;\n\t\t\tlet maxlength = this.control.maxlength;\n\t\t\tif (minlength !== null && change.value.length < minlength)\n\t\t\t\tchange.errors.push(this.msg_string_tooshort(change.value))\n\t\t\tif (maxlength !== null && change.value.length > maxlength)\n\t\t\t\tchange.errors.push(this.msg_string_toolong(change.value))\n\t\t}\n\t\telse\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t}\n\n\tget writable()\n\t{\n\t\treturn this._writable;\n\t}\n\n\tset writable(value)\n\t{\n\t\tif (this._in_form())\n\t\t{\n\t\t\tlet readonly = !value;\n\t\t\tfor (let node of this._dom_controls)\n\t\t\t\tnode.readOnly = readonly;\n\t\t}\n\t\tsuper.writable = value;\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\treturn this.value;\n\t}\n};\n\n\nclass PasswordFieldType extends StringFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof PasswordField;\n\t}\n};\n\nlet passwordfieldtype = new PasswordFieldType(\"la\", \"PasswordField\", \"Holds the value of a string/password field of a record (and related information)\");\n\n\nexport class PasswordField extends StringField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn passwordfieldtype;\n\t}\n};\n\n\nclass EmailFieldType extends StringFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof EmailField;\n\t}\n};\n\nlet emailfieldtype = new EmailFieldType(\"la\", \"EmailField\", \"Holds the value of a string/email field of a record (and related information)\");\n\n\nexport class EmailField extends StringField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn emailfieldtype;\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (typeof(change.value) === \"string\" && change.value.length > 0)\n\t\t{\n\t\t\tconst re = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/i;\n\t\t\tif (!re.test(change.value))\n\t\t\t\tchange.errors.push(this.msg_email_format(change.value));\n\t\t}\n\t\tsuper._validate(change);\n\t}\n};\n\n\nclass URLFieldType extends StringFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof URLField;\n\t}\n};\n\nlet urlfieldtype = new URLFieldType(\"la\", \"URLField\", \"Holds the value of a string/url field of a record (and related information)\");\n\n\nexport class URLField extends StringField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn urlfieldtype;\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (typeof(change.value) === \"string\" && change.value.length > 0)\n\t\t{\n\t\t\tlet url = null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\turl = new URL(change.value);\n\t\t\t}\n\t\t\tcatch (exc)\n\t\t\t{\n\t\t\t\tchange.errors.push(this.msg_url_format(change.value));\n\t\t\t}\n\t\t\tif (url !== null && url.protocol !== \"http:\" && url.protocol !== \"https:\")\n\t\t\t{\n\t\t\t\tchange.errors.push(this.msg_url_format(change.value));\n\t\t\t}\n\t\t}\n\t\tsuper._validate(change);\n\t}\n};\n\n\nclass TelFieldType extends StringFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof TelField;\n\t}\n};\n\nlet telfieldtype = new TelFieldType(\"la\", \"TelField\", \"Holds the value of a string/tel field of a record (and related information)\");\n\n\nexport class TelField extends StringField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn telfieldtype;\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (typeof(change.value) === \"string\" && change.value.length > 0)\n\t\t{\n\t\t\tconst re = /^\\\\+?[0-9 /()-]+$/;\n\t\t\tif (!re.test(change.value))\n\t\t\t\tchange.errors.push(this.msg_tel_format(change.value));\n\t\t}\n\t\tsuper._validate(change);\n\t}\n};\n\n\nclass TextAreaFieldType extends StringFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof TextAreaField;\n\t}\n};\n\nlet textareafieldtype = new TextAreaFieldType(\"la\", \"TextAreaField\", \"Holds the value of a string/textarea field of a record (and related information)\");\n\n\nexport class TextAreaField extends StringField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn textareafieldtype;\n\t}\n};\n\n\nclass HTMLFieldType extends StringFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof HTMLField;\n\t}\n};\n\nlet htmlfieldtype = new HTMLFieldType(\"la\", \"HTMLField\", \"Holds the value of a string/html field of a record (and related information)\");\n\n\nexport class HTMLField extends StringField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn htmlfieldtype;\n\t}\n};\n\n\nclass GeoFieldType extends FieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof GeoField;\n\t}\n};\n\nlet geofieldtype = new GeoFieldType(\"la\", \"GeoField\", \"Holds the value of a geo field of a record (and related information)\");\n\n\nexport class GeoField extends Field\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn geofieldtype;\n\t}\n\n\t_get_dom_value()\n\t{\n\t\tfor (let dom_node of this._dom_controls)\n\t\t{\n\t\t\tif (dom_node.id.endsWith(\"_geoinfo\"))\n\t\t\t{\n\t\t\t\tlet value = dom_node.value;\n\t\t\t\tif (value)\n\t\t\t\t{\n\t\t\t\t\tvalue = JSON.parse(value);\n\t\t\t\t\treturn new Geo(\n\t\t\t\t\t\tthis.globals,\n\t\t\t\t\t\tvalue.geometry.coordinates[0],\n\t\t\t\t\t\tvalue.geometry.coordinates[1],\n\t\t\t\t\t\tvalue.properties.formatted_address\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tif (value === null)\n\t\t{\n\t\t\tfor (let dom_node of this._dom_controls)\n\t\t\t{\n\t\t\t\tdom_node.value = null;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor (let dom_node of this._dom_controls)\n\t\t\t{\n\t\t\t\tif (dom_node.id.endsWith(\"_geoinfo\"))\n\t\t\t\t{\n\t\t\t\t\tlet dom_value = {\n\t\t\t\t\t\t\"type\": \"Feature\",\n\t\t\t\t\t\t\"geometry\": {\n\t\t\t\t\t\t\t\"coordinates\": [\n\t\t\t\t\t\t\t\tvalue.lat,\n\t\t\t\t\t\t\t\tvalue.long\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\t\"formatted_address\": value.info\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tdom_node.value = ul4._asjson(dom_value);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tdom_node.value = value.info;\n\t\t\t}\n\t\t}\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\tlet value = this.value;\n\t\tif (this.value === null)\n\t\t\treturn null;\n\t\t// FIXME: Show N/S and W/E? Show arc minutes/seconds?\n\t\tlet result = value.lat.toFixed(5) + \", \" + value.long.toFixed(5);\n\t\tif (value.info !== null)\n\t\t\tresult += \" (\" + value.info + \")\";\n\t\treturn result;\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (change.value === null || change.value === \"\")\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t\telse if (!(change.value instanceof Geo))\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t}\n};\nGeoField.prototype._inputevent = \"llgeo\";\n\n\nclass FileFieldType extends FieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof FileField;\n\t}\n};\n\nlet filefieldtype = new FileFieldType(\"la\", \"FileField\", \"Holds the value of a file field of a record (and related information)\");\n\n\nexport class FileField extends Field\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn filefieldtype;\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (change.value === null || change.value === \"\")\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t\telse if (!(change.value instanceof File))\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t}\n\n\t_get_dom_value()\n\t{\n\t\t// Always return `null``\n\t\treturn null;\n\t}\n\n\t_set_dom_value()\n\t{\n\t\t// Do nothing\n\t}\n};\n\n\nclass FileSignatureFieldType extends FileFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof FileSignatureField;\n\t}\n};\n\nlet filesignaturefieldtype = new FileSignatureFieldType(\"la\", \"FileSignatureField\", \"Holds the value of a file/signature field of a record (and related information)\");\n\n\nexport class FileSignatureField extends FileField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn filesignaturefieldtype;\n\t}\n\n\t_validate(change)\n\t{\n\t\t// FIXME: Implement handling of data URLs.\n\t\tsuper._validate(change);\n\t}\n};\n\n\nclass DateFieldBaseType extends FieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof DateFieldBase;\n\t}\n};\n\nlet datefieldbasetype = new DateFieldBaseType(\"la\", \"DateFieldBase\", \"Holds the value of a date field of a record (and related information)\");\n\n\nexport class DateFieldBase extends Field\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn datefieldbasetype;\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\tlet value = this.value;\n\t\tif (value === null)\n\t\t\treturn null;\n\t\tif (typeof(value) === \"string\")\n\t\t\treturn value;\n\t\treturn ul4._format(value, this.control.formatstring())\n\t}\n\n\t_parse(value, format)\n\t{\n\t\tlet year = null, month = null, day = null, hour = 0, minute = 0, second = 0, ispm = null;\n\n\t\tfunction _int(v, len, min, max)\n\t\t{\n\t\t\tv = v.substring(0, len);\n\t\t\tif (v.length != len)\n\t\t\t\treturn null;\n\t\t\tv = parseInt(v, 10);\n\t\t\tif (isNaN(v) || v < min || v > max)\n\t\t\t\treturn null;\n\t\t\treturn v;\n\t\t}\n\n\t\twhile (value)\n\t\t{\n\t\t\t// Are both `value` and `format` not `null`,\n\t\t\t// i.e. neither `value` nor `format` is exhaused?\n\t\t\tif (!format)\n\t\t\t\treturn null;\n\t\t\tif (format.startsWith(\"%Y\"))\n\t\t\t{\n\t\t\t\tyear = _int(value, 4);\n\t\t\t\tif (year === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(4);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%y\"))\n\t\t\t{\n\t\t\t\tyear = _int(value, 2);\n\t\t\t\tif (year === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%m\"))\n\t\t\t{\n\t\t\t\tmonth = _int(value, 2);\n\t\t\t\tif (month === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%d\"))\n\t\t\t{\n\t\t\t\tday = _int(value, 2);\n\t\t\t\tif (day === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%H\"))\n\t\t\t{\n\t\t\t\thour = _int(value, 2);\n\t\t\t\tif (hour === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%I\"))\n\t\t\t{\n\t\t\t\thour = _int(value, 2);\n\t\t\t\tif (hour === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%M\"))\n\t\t\t{\n\t\t\t\tminute = _int(value, 2);\n\t\t\t\tif (minute === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%S\"))\n\t\t\t{\n\t\t\t\tsecond = _int(value, 2);\n\t\t\t\tif (second === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%p\"))\n\t\t\t{\n\t\t\t\tif (value.toLowerCase().startsWith(\"pm\"))\n\t\t\t\t\tispm = true;\n\t\t\t\telse if (value.toLowerCase().startsWith(\"am\"))\n\t\t\t\t\tispm = false;\n\t\t\t\telse\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%%\"))\n\t\t\t{\n\t\t\t\tif (!value.startsWith(\"%\"))\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(1);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%z\"))\n\t\t\t{\n\t\t\t\tif (!value.startsWith(\"-\") && !value.startsWith(\"+\"))\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(1);\n\t\t\t\tlet _tzhour = _int(value, 2);\n\t\t\t\tif (_tzhour === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tif (!value.startsWith(\":\"))\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(1);\n\t\t\t\tlet _tzminute = _int(value, 2);\n\t\t\t\tif (_tzminute === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (!value.startsWith(format.substring(0, 1)))\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(1);\n\t\t\t\tformat = format.substring(1);\n\t\t\t}\n\t\t}\n\t\t// Are both `value` and `format` `null`?\n\t\t// I.e. both `value` and `format` must be exhausted, otherwise ...\n\t\tif (format)\n\t\t\t// ... `format` has remaining content that the value didn't provide\n\t\t\treturn null;\n\n\t\t// Check existance of values and their range\n\t\tif (year === null)\n\t\t\treturn null;\n\t\tif (month === null || month < 1 || month > 12)\n\t\t\treturn null;\n\t\tif (day === null || day < 1 || day > 31) // FIXME: Use the actuall number of days\n\t\t\treturn null;\n\t\tif (ispm === null)\n\t\t{\n\t\t\tif (hour < 0 || hour > 23)\n\t\t\t\treturn null;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (hour < 0 || hour > 11)\n\t\t\t\treturn null;\n\t\t\tif (ispm)\n\t\t\t\thour += 12;\n\t\t}\n\t\tif (minute < 0 || minute > 59)\n\t\t\treturn null;\n\t\tif (minute < 0 || minute > 59)\n\t\t\treturn null;\n\t\tif (second < 0 || second > 60)\n\t\t\treturn null;\n\t\treturn new Date(year, month-1, day, hour, minute, second);\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (change.value === null || change.value === \"\")\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t\telse if (change.value instanceof Date)\n\t\t{\n\t\t\tchange.value = this._convert(change.value);\n\t\t}\n\t\telse if (change.value instanceof ul4.Date_)\n\t\t{\n\t\t\tchange.value = this._convert(change.value._date);\n\t\t}\n\t\telse if (typeof(change.value) === \"string\")\n\t\t{\n\t\t\tlet value = null;\n\t\t\tfor (let format of this.control.formatstrings_parse())\n\t\t\t{\n\t\t\t\tvalue = this._parse(change.value, format);\n\t\t\t\tif (value !== null)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (value !== null)\n\t\t\t\tchange.value = this._convert(value);\n\t\t\telse\n\t\t\t\tchange.errors.push(this.msg_date_format(change.value));\n\t\t\t\t// Keep original invalid string\n\t\t}\n\t\telse\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t}\n\n\t_get_dom_value()\n\t{\n\t\tlet value = super._get_dom_value();\n\t\tif (!value)\n\t\t\treturn null;\n\n\t\tfor (let format of this.control.formatstrings_parse())\n\t\t{\n\t\t\tlet date = this._parse(value, format);\n\t\t\tif (date !== null)\n\t\t\t\treturn this._convert(date);\n\t\t}\n\t\treturn null;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tif (value !== null)\n\t\t\tvalue = ul4._format(value, this.control.formatstring(), this.globals.lang);\n\t\telse\n\t\t\tvalue = \"\";\n\t\tsuper._set_dom_value(value);\n\t}\n};\n\n\nclass DateFieldType extends DateFieldBaseType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof DateField;\n\t}\n};\n\nlet datefieldtype = new DateFieldType(\"la\", \"DateField\", \"Holds the value of a date/date field of a record (and related information)\");\n\n\nexport class DateField extends DateFieldBase\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn datefieldtype;\n\t}\n\n\t_convert(date)\n\t{\n\t\treturn new ul4.Date_(date.getFullYear(), date.getMonth()+1, date.getDate());\n\t}\n};\n\n\nclass DatetimeMinuteFieldType extends DateFieldBaseType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof DatetimeMinuteField;\n\t}\n};\n\nlet datetimeminutefieldtype = new DatetimeMinuteFieldType(\"la\", \"DatetimeMinuteField\", \"Holds the value of a date/datetimeminute field of a record (and related information)\");\n\n\nexport class DatetimeMinuteField extends DateFieldBase\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn datetimeminutefieldtype;\n\t}\n\n\t_convert(date)\n\t{\n\t\t// Get rid of seconds and milliseconds, this modifies the object passed in.\n\t\tdate.setSeconds(0);\n\t\tdate.setMilliseconds(0);\n\t\treturn date;\n\t}\n};\n\n\nclass DatetimeSecondFieldType extends DateFieldBaseType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof DatetimeSecondField;\n\t}\n};\n\nlet datetimesecondfieldtype = new DatetimeSecondFieldType(\"la\", \"DatetimeSecondField\", \"Holds the value of a date/datetimesecond field of a record (and related information)\");\n\n\nexport class DatetimeSecondField extends DateFieldBase\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn datetimesecondfieldtype;\n\t}\n\n\t_convert(date)\n\t{\n\t\t// Get rid of milliseconds, this modifies the object passed in.\n\t\tdate.setMilliseconds(0);\n\t\treturn date;\n\t}\n};\n\n/*\n`ChoiceFieldBase` is used as the base class for all `lookup`, `multiplelookup`,\n`applookup` and `multipleapplookup` fields.\n\nSince the inheritance hierarchy follows the data model *not* which HTML element\nis used for editing, we would have to implement the same DOM interaction logic\nin multiple classes (i.e. we would have to handle a HTML `select` element in\n`LookupSelectField`, `MultipleLookupSelectField`, `AppLookupSelectField`\nand `MultipleAppLookupSelectField`).\n\nTo solve this problem, all methods that handle HTML elements are implemented in\nthis class. Subclasses then simply call the appropriate method.\n*/\nexport class ChoiceFieldBase extends Field\n{\n\t_make_option(selected, value, label)\n\t{\n\t\tlet option = element(\n\t\t\t\"option\",\n\t\t\tlabel,\n\t\t\t{\n\t\t\t\t\"value\": value,\n\t\t\t\t\"class\": value === this.control.none_key ? \"la-none-option\" : null,\n\t\t\t\t\"selected\": selected ? \"selected\" : null,\n\t\t\t}\n\t\t);\n\t\treturn option;\n\t}\n\n\t_set_dom_lookupdata_select(lookupdata)\n\t{\n\t\tif (lookupdata === null)\n\t\t\tlookupdata = this.control.lookup_data;\n\t\tif (ul4._isobject(lookupdata))\n\t\t\tlookupdata = new Map(Object.entries(lookupdata));\n\n\t\tlet none_selected = false;\n\t\tlet selected = new Set();\n\t\tfor (let dom_option of this._dom_control.querySelectorAll(\"option:checked\"))\n\t\t{\n\t\t\tlet value = dom_option.getAttribute(\"value\");\n\t\t\tif (lookupdata.has(value))\n\t\t\t\tselected.add(value);\n\t\t\telse if (value === this.control.none_key)\n\t\t\t\tnone_selected = true;\n\t\t}\n\n\t\tlet new_children = [];\n\t\tif (this.control.none_key !== null)\n\t\t{\n\t\t\tnew_children.push(\n\t\t\t\tthis._make_option(\n\t\t\t\t\tnone_selected,\n\t\t\t\t\tthis.control.none_key,\n\t\t\t\t\tthis.control.none_label !== null ? this.control.none_label : this.globals.msg_nothing_selected()\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tfor (let [key, value] of lookupdata)\n\t\t{\n\t\t\tnew_children.push(\n\t\t\t\tthis._make_option(\n\t\t\t\t\tselected.has(key),\n\t\t\t\t\tkey,\n\t\t\t\t\tthis._make_label(value)\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\tthis._dom_control.replaceChildren(...new_children);\n\t}\n\n\t_set_dom_lookupdata_input(lookupdata)\n\t{\n\t\tif (lookupdata === null)\n\t\t\tlookupdata = this.control.lookupdata;\n\t\telse if (ul4._isobject(lookupdata))\n\t\t\tlookupdata = new Map(Object.entries(lookupdata));\n\n\t\tlet none_selected = false;\n\t\tlet selected = new Set();\n\t\tfor (let dom_input of this._dom_controls)\n\t\t{\n\t\t\tlet value = dom_input.getAttribute(\"value\");\n\t\t\tif (dom_input.checked)\n\t\t\t{\n\t\t\t\tif (lookupdata.has(value))\n\t\t\t\t\tselected.add(value);\n\t\t\t\telse if (value === this.control.none_key)\n\t\t\t\t\tnone_selected = true;\n\n\t\t\t}\n\t\t}\n\n\t\tlet dom_none_input = this._dom_root.querySelector(\"input[value=\" + this.control.none_key + \"]\");\n\t\tif (dom_none_input !== null)\n\t\t\tdom_none_input.checked = none_selected;\n\n\t\tfor (let [key, item] of this.control.lookupdata)\n\t\t{\n\t\t\tlet dom_input = this._dom_root.querySelector(\"input[value=\" + key + \"]\");\n\t\t\tlet dom_label = this._dom_root.querySelector(\"label[for=\" + dom_input.id + \"]\")\n\n\t\t\tif (lookupdata.has(key))\n\t\t\t{\n\t\t\t\tdom_input.style.display = \"inline\";\n\t\t\t\tdom_label.style.display = \"inline\";\n\t\t\t\tdom_label.innerText = this._make_label(lookupdata.get(key));\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tdom_input.style.display = \"none\";\n\t\t\t\tdom_label.style.display = \"none\";\n\t\t\t\tdom_label.checked = false;\n\t\t\t}\n\t\t}\n\t}\n};\n\n\nclass LookupFieldBaseType extends FieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupFieldBase;\n\t}\n};\n\nlet lookupfieldbasetype = new LookupFieldBaseType(\"la\", \"LookupFieldBase\", \"Base type of LookupField and MultipleLookupField\");\n\n\nexport class LookupFieldBase extends ChoiceFieldBase\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupfieldbasetype;\n\t}\n\n\tget lookupdata()\n\t{\n\t\tif (this._lookupdata !== null)\n\t\t\treturn this._lookupdata;\n\t\telse\n\t\t\treturn this.control.lookupdata;\n\t}\n\n\tset lookupdata(value)\n\t{\n\t\tif (this._in_form())\n\t\t\tthis._set_dom_lookupdata(value);\n\t\tthis._lookupdata = value;\n\t}\n\n\t_set_dom_lookupdata(lookupdata)\n\t{\n\t}\n\n\t_make_label(value)\n\t{\n\t\tif (typeof(value) === \"string\")\n\t\t\treturn value;\n\t\telse if (value instanceof LookupItem)\n\t\t\treturn value.label;\n\t\telse\n\t\t\treturn ul4._str(value);\n\t}\n\n\t_find_lookupitem(change)\n\t{\n\t\tlet v = change.value;\n\t\tif (typeof(v) === \"string\")\n\t\t{\n\t\t\t// If `lookupdata` is `null`, this probably an interface,\n\t\t\t// so we can't validate anything (note that interfaces will however go\n\t\t\t// away in the future)\n\t\t\tif (this.lookupdata === null)\n\t\t\t\treturn;\n\t\t\tlet lookupitem = this.control.lookupdata.get(v);\n\t\t\tif (lookupitem === undefined)\n\t\t\t{\n\t\t\t\t// If the lookup control is auto expandable,\n\t\t\t\t// the user may have given us a label\n\t\t\t\tif (this.control.autoexpandable)\n\t\t\t\t{\n\t\t\t\t\t// Search for the LookupItem with that label\n\t\t\t\t\tfor (let search_lookupitem of this.lookupdata.values())\n\t\t\t\t\t{\n\t\t\t\t\t\tif (v === search_lookupitem.label)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tchange.value = search_lookupitem;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// If we couldn't find the label, keep the label as it is.\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tchange.errors.push(this.msg_lookup_unknownkey(v))\n\t\t\t\t\tchange.value = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tchange.value = lookupitem;\n\t\t\t}\n\t\t}\n\t\telse if (v instanceof LookupItem)\n\t\t{\n\t\t\tlet value = this.control.lookupdata.get(v.key);\n\t\t\tif (value !== v)\n\t\t\t{\n\t\t\t\tchange.errors.push(this.msg_lookup_wrongitem(v));\n\t\t\t\tchange.value = null;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(v));\n\t\t\tchange.value = null;\n\t\t}\n\t}\n};\n\n\nclass LookupFieldType extends LookupFieldBaseType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupField;\n\t}\n};\n\nlet lookupfieldtype = new LookupFieldType(\"la\", \"LookupField\", \"Holds the value of a lookup field of a record (and related information)\");\n\n\nexport class LookupField extends LookupFieldBase\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupfieldtype;\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\tlet value = this.value;\n\t\tif (value === null)\n\t\t\treturn null;\n\t\treturn value.label;\n\t}\n\n\t_validate(change)\n\t{\n\t\tlet v = change.value;\n\t\tif (v === null || v === \"\" || this.control.none_key === v)\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(v));\n\t\t\tchange.value = null;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._find_lookupitem(change);\n\t\t}\n\t}\n};\n\n\nclass LookupRadioFieldType extends LookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupRadioField;\n\t}\n};\n\nlet lookupradiofieldtype = new LookupRadioFieldType(\"la\", \"LookupRadioField\", \"Holds the value of a lookup/radio field of a record (and related information)\");\n\n\nexport class LookupRadioField extends LookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupradiofieldtype;\n\t}\n\n\tget _sel_label()\n\t{\n\t\treturn this._sel_root + \" label:not([for]) > span\";\n\t}\n\n\t_get_dom_value()\n\t{\n\t\tfor (let node of this._dom_controls)\n\t\t{\n\t\t\tif (node.checked)\n\t\t\t{\n\t\t\t\tlet key = node.getAttribute(\"value\");\n\t\t\t\treturn this.control.lookupdata.get(key);\n\t\t\t}\n\n\t\t}\n\t\treturn null;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tif (value instanceof LookupItem)\n\t\t\tvalue = value.key;\n\t\tif (value === null)\n\t\t\tvalue = this.control.none_key;\n\n\t\tfor (let node of this._dom_controls)\n\t\t\tnode.checked = node.getAttribute(\"value\") === value;\n\t}\n\n\t_set_dom_lookupdata(lookupdata)\n\t{\n\t\tthis._set_dom_lookupdata_input(lookupdata);\n\t}\n};\n\n\nclass LookupSelectFieldType extends LookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupSelectField;\n\t}\n};\n\nlet lookupselectfieldtype = new LookupSelectFieldType(\"la\", \"LookupSelectField\", \"Holds the value of a lookup/select field of a record (and related information)\");\n\n\nexport class LookupSelectField extends LookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupselectfieldtype;\n\t}\n\n\t_get_dom_value()\n\t{\n\t\tlet value = super._get_dom_value();\n\t\tif (value)\n\t\t{\n\t\t\tif (value === this.control.none_key)\n\t\t\t\tvalue = null;\n\t\t\telse\n\t\t\t\tvalue = this.control.lookupdata.get(value);\n\t\t}\n\t\treturn value;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tlet change = {value: value, errors: []};\n\t\tthis._validate(change);\n\t\tsuper._set_dom_value(change.value != null ? change.value.key : this.control.none_key);\n\t}\n\n\t_set_dom_lookupdata(lookupdata)\n\t{\n\t\tthis._set_dom_lookupdata_select(lookupdata);\n\t}\n};\n\n\nclass LookupChoiceFieldType extends LookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupChoiceField;\n\t}\n};\n\nlet lookupchoicefieldtype = new LookupChoiceFieldType(\"la\", \"LookupChoiceField\", \"Holds the value of a lookup/choice field of a record (and related information)\");\n\n\nexport class LookupChoiceField extends LookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupchoicefieldtype;\n\t}\n};\n\nLookupChoiceField.prototype._inputevent = \"llchoice\";\n\n\nclass MultipleLookupFieldType extends LookupFieldBaseType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleLookupField;\n\t}\n};\n\nlet multiplelookupfieldtype = new MultipleLookupFieldType(\"la\", \"MultipleLookupField\", \"Holds the value of a multiple lookup field of a record (and related information)\");\n\n\nexport class MultipleLookupField extends LookupFieldBase\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multiplelookupfieldtype;\n\t}\n\n\tis_empty()\n\t{\n\t\treturn this._value.length === 0;\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\tlet value = this.value;\n\t\tif (value === null || value.length === 0)\n\t\t\treturn null;\n\t\treturn value.map(item => item.label).join(\", \");\n\t}\n\n\t_validate(change)\n\t{\n\t\tlet v = change.value;\n\t\tlet islist = (Object.prototype.toString.call(v) === \"[object Array]\");\n\n\t\tif (v === null || v === \"\" || this.control.none_key === v || (islist && v.length === 0))\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(v));\n\t\t\tchange.value = [];\n\t\t}\n\t\telse if (islist)\n\t\t{\n\t\t\tlet newvalue = [];\n\t\t\tfor (let item of v)\n\t\t\t{\n\t\t\t\tlet singlechange = {value: item, errors: []};\n\t\t\t\tthis._find_lookupitem(singlechange);\n\t\t\t\tif (singlechange.errors.length > 0)\n\t\t\t\t\tchange.errors = [...change.errors, ...singlechange.errors];\n\t\t\t\telse\n\t\t\t\t\tnewvalue.push(singlechange.value);\n\t\t\t}\n\t\t\tchange.value = newvalue;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._find_lookupitem(change);\n\t\t\tif (change.errors.length > 0)\n\t\t\t\tchange.value = [];\n\t\t\telse\n\t\t\t\tchange.value = [change.value];\n\t\t}\n\t}\n};\n\n\nclass MultipleLookupCheckboxFieldType extends MultipleLookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleLookupCheckboxField;\n\t}\n};\n\nlet multiplelookupcheckboxfieldtype = new MultipleLookupCheckboxFieldType(\"la\", \"MultipleLookupCheckboxField\", \"Holds the value of a multiplelookup/radio field of a record (and related information)\");\n\n\nexport class MultipleLookupCheckboxField extends MultipleLookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multiplelookupcheckboxfieldtype;\n\t}\n\n\tget _sel_label()\n\t{\n\t\treturn this._sel_root + \" label:not([for]) > span\";\n\t}\n\n\t_get_dom_value()\n\t{\n\t\tlet value = [];\n\t\tfor (let node of this._dom_controls)\n\t\t{\n\t\t\tif (node.checked)\n\t\t\t{\n\t\t\t\tlet key = node.getAttribute(\"value\");\n\t\t\t\tvalue.push(this.control.lookupdata.get(key));\n\t\t\t}\n\n\t\t}\n\t\treturn value;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tlet change = {value: value, errors: []};\n\t\tthis._validate(change);\n\t\tlet values = new Set();\n\t\tfor (let value of change.value)\n\t\t\tvalues.add(value.key);\n\n\t\tfor (let node of this._dom_controls)\n\t\t\tnode.checked = values.has(node.getAttribute(\"value\"));\n\t}\n\n\t_set_dom_lookupdata(lookupdata)\n\t{\n\t\tthis._set_dom_lookupdata_input(lookupdata);\n\t}\n};\n\n\nclass MultipleLookupSelectFieldType extends MultipleLookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleLookupSelectField;\n\t}\n};\n\nlet multiplelookupselectfieldtype = new MultipleLookupSelectFieldType(\"la\", \"MultipleLookupSelectField\", \"Holds the value of a multiplelookup/select field of a record (and related information)\");\n\nexport class MultipleLookupSelectField extends MultipleLookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multiplelookupselectfieldtype;\n\t}\n\n\t_get_dom_value()\n\t{\n\t\tlet value = [];\n\t\tfor (let option of this._dom_control.querySelectorAll(\"option\"))\n\t\t{\n\t\t\tif (option.selected)\n\t\t\t\tvalue.push(this.control.lookupdata.get(option.getAttribute(\"value\")));\n\t\t}\n\t\treturn value;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tlet change = {value: value, errors: []};\n\t\tthis._validate(change);\n\t\tlet values = new Set();\n\t\tfor (let value of change.value)\n\t\t\tvalues.add(value.key);\n\t\tfor (let option of this._dom_control.querySelectorAll(\"option\"))\n\t\t\toption.selected = values.has(option.getAttribute(\"value\"));\n\t}\n\n\t_set_dom_lookupdata(lookupdata)\n\t{\n\t\tthis._set_dom_lookupdata_select(lookupdata);\n\t}\n};\n\n\nclass MultipleLookupChoiceFieldType extends MultipleLookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleLookupChoiceField;\n\t}\n};\n\nlet multiplelookupchoicefieldtype = new MultipleLookupChoiceFieldType(\"la\", \"MultipleLookupChoiceField\", \"Holds the value of a multiplelookup/choice field of a record (and related information)\");\n\n\nexport class MultipleLookupChoiceField extends MultipleLookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multiplelookupchoicefieldtype;\n\t}\n};\n\nMultipleLookupChoiceField.prototype._inputevent = \"llchoice\";\n\n\nclass AppLookupFieldBaseType extends FieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppLookupFieldBase;\n\t}\n};\n\nlet applookupfieldbasetype = new AppLookupFieldBaseType(\"la\", \"AppLookupFieldBase\", \"Base type of AppLookupField and MultipleAppLookupField\");\n\n\nexport class AppLookupFieldBase extends ChoiceFieldBase\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn applookupfieldbasetype;\n\t}\n\n\tget lookupdata()\n\t{\n\t\tif (this._lookupdata !== null)\n\t\t\treturn this._lookupdata;\n\t\telse\n\t\t{\n\t\t\tif (this.control.lookup_app.records !== null)\n\t\t\t\treturn this.control.lookup_app.records;\n\t\t}\n\t\treturn new Map();\n\t}\n\n\tset lookupdata(value)\n\t{\n\t\tif (this._in_form())\n\t\t\tthis._set_dom_lookupdata(value);\n\t\tthis._lookupdata = value;\n\t}\n\n\t_set_dom_lookupdata(lookupdata)\n\t{\n\t}\n\n\t_make_label(value)\n\t{\n\t\tif (typeof(value) === \"string\")\n\t\t\treturn value;\n\t\telse if (value instanceof Record)\n\t\t\treturn value.as_text(this.control.lookup_controls);\n\t\telse\n\t\t\treturn ul4._str(value);\n\t}\n\n\t_find_record(change)\n\t{\n\t\tlet v = change.value;\n\t\tif (typeof(v) === \"string\")\n\t\t{\n\t\t\tlet record = this.control.lookup_app.records !== null ?\n\t\t\t\tthis.control.lookup_app.records.get(v) :\n\t\t\t\tundefined\n\t\t\t;\n\n\t\t\tif (record === undefined)\n\t\t\t{\n\t\t\t\tchange.errors.push(this.msg_applookup_unknownkey(v))\n\t\t\t\tchange.value = null;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tchange.value = record;\n\t\t\t}\n\t\t}\n\t\telse if (v instanceof Record)\n\t\t{\n\t\t\tif (v.app !== this.control.lookup_app)\n\t\t\t{\n\t\t\t\tchange.errors.push(this.msg_applookup_wrongrecord(v));\n\t\t\t\tchange.value = null;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(v));\n\t\t\tchange.value = null;\n\t\t}\n\t}\n\n\t[ul4.symbols.setattr](name, value)\n\t{\n\t\tif (name === \"lookupdata\")\n\t\t\tthis.lookupdata = value;\n\t\telse\n\t\t\tsuper[ul4.symbols.setattr](name, value);\n\t}\n};\nAppLookupFieldBase.prototype._ul4attrs = new Set([...Field.prototype._ul4attrs, \"lookupdata\"]);\n\n\n\nclass AppLookupFieldType extends AppLookupFieldBaseType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppLookupField;\n\t}\n};\n\nlet applookupfieldtype = new AppLookupFieldType(\"la\", \"AppLookupField\", \"Holds the value of a applookup field of a record (and related information)\");\n\n\nexport class AppLookupField extends AppLookupFieldBase\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn applookupfieldtype;\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\tlet value = this.value;\n\t\tif (value === null)\n\t\t\treturn null;\n\t\treturn \"(\" + this.value.as_text(maxlevel) + \")\";\n\t}\n\n\t_validate(change)\n\t{\n\t\tthis._find_record(change);\n\t}\n};\n\n\nclass AppLookupSelectFieldType extends AppLookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppLookupSelectField;\n\t}\n};\n\nlet applookupselectfieldtype = new AppLookupSelectFieldType(\"la\", \"AppLookupSelectField\", \"Holds the value of a `applookup`/`select` field of a record (and related information)\");\n\n\nexport class AppLookupSelectField extends AppLookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn applookupselectfieldtype;\n\t}\n\n\t_get_dom_value()\n\t{\n\t\tlet value = super._get_dom_value();\n\n\t\tif (this.control.lookup_app.records !== null)\n\t\t{\n\t\t\tvalue = this.control.lookup_app.records.get(value);\n\t\t\tif (value === undefined)\n\t\t\t\tvalue = null;\n\t\t}\n\t\telse\n\t\t\tvalue = null;\n\t\treturn value;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tlet change = {value: value, errors: []};\n\t\tthis._validate(change);\n\t\tsuper._set_dom_value(change.value != null ? change.value.id : this.control.none_key);\n\t}\n\n\t_set_dom_lookupdata(lookupdata)\n\t{\n\t\tthis._set_dom_lookupdata_select(lookupdata);\n\t}\n};\n\n\nclass AppLookupRadioFieldType extends AppLookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppLookupRadioField;\n\t}\n};\n\nlet applookupradiofieldtype = new AppLookupRadioFieldType(\"la\", \"AppLookupRadioField\", \"Holds the value of a `applookup`/`radio` field of a record (and related information)\");\n\n\nexport class AppLookupRadioField extends AppLookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn applookupradiofieldtype;\n\t}\n};\n\n\nclass AppLookupChoiceFieldType extends AppLookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppLookupChoiceField;\n\t}\n};\n\nlet applookupchoicefieldtype = new AppLookupChoiceFieldType(\"la\", \"AppLookupChoiceField\", \"Holds the value of a `applookup`/`choice` field of a record (and related information)\");\n\n\nexport class AppLookupChoiceField extends AppLookupField\n{\n\tconstructor(control, record, value)\n\t{\n\t\tsuper(control, record, value);\n\t\tthis._search_url = null;\n\t\tthis._search_param_name = null;\n\t\tthis._target_param_name = null;\n\t}\n\n\t[ul4.symbols.type]()\n\t{\n\t\treturn applookupchoicefieldtype;\n\t}\n\n\tget search_url()\n\t{\n\t\treturn this._search_url ?? this.control.search_url;\n\t}\n\n\tset search_url(value)\n\t{\n\t\tthis._search_url = value;\n\t}\n\n\tget search_param_name()\n\t{\n\t\treturn this._search_param_name ?? this.control.search_param_name;\n\t}\n\n\tset search_param_name(value)\n\t{\n\t\tthis._search_param_name = value;\n\t}\n\n\tget target_param_name()\n\t{\n\t\treturn this._target_param_name ?? this.control.target_param_name;\n\t}\n\n\tset target_param_name(value)\n\t{\n\t\tthis._target_param_name = value;\n\t}\n};\n\nAppLookupChoiceField.prototype._inputevent = \"llchoice\";\nAppLookupChoiceField.prototype._ul4attrs = new Set([...Field.prototype._ul4attrs, \"search_url\", \"search_param_name\", \"target_param_name\"]);\n\n\nclass MultipleAppLookupFieldType extends AppLookupFieldBaseType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleAppLookupField;\n\t}\n};\n\nlet multipleapplookupfieldtype = new MultipleAppLookupFieldType(\"la\", \"MultipleAppLookupField\", \"Holds the value of a multiple applookup field of a record (and related information)\");\n\n\nexport class MultipleAppLookupField extends AppLookupFieldBase\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multipleapplookupfieldtype;\n\t}\n\n\tis_empty()\n\t{\n\t\treturn this._value.length === 0;\n\t}\n\n\t_validate(change)\n\t{\n\t\tlet v = change.value;\n\t\tlet islist = (Object.prototype.toString.call(v) === \"[object Array]\");\n\n\t\tif (v === null || v === \"\" || this.control.none_key === v || (islist && v.length === 0))\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(v));\n\t\t\tchange.value = [];\n\t\t}\n\t\telse if (islist)\n\t\t{\n\t\t\tlet newvalue = [];\n\t\t\tfor (let item of v)\n\t\t\t{\n\t\t\t\tlet singlechange = {value: item, errors: []};\n\t\t\t\tthis._find_record(singlechange);\n\t\t\t\tif (singlechange.errors.length > 0)\n\t\t\t\t\tchange.errors = [...change.errors, ...singlechange.errors];\n\t\t\t\telse\n\t\t\t\t\tnewvalue.push(singlechange.value);\n\t\t\t}\n\t\t\tchange.value = newvalue;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._find_record(change);\n\t\t\tif (change.errors.length > 0)\n\t\t\t\tchange.value = [];\n\t\t\telse\n\t\t\t\tchange.value = [change.value];\n\t\t}\n\t}\n};\n\n\nclass MultipleAppLookupCheckboxFieldType extends MultipleAppLookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleAppLookupCheckboxField;\n\t}\n};\n\nlet multipleapplookupcheckboxfieldtype = new MultipleAppLookupCheckboxFieldType(\"la\", \"MultipleAppLookupCheckboxField\", \"Holds the value of a `multipleapplookup`/`checkbox` field of a record (and related information)\");\n\n\nexport class MultipleAppLookupCheckboxField extends MultipleAppLookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multipleapplookupcheckboxfieldtype;\n\t}\n};\n\n\nclass MultipleAppLookupSelectFieldType extends MultipleAppLookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleAppLookupSelectField;\n\t}\n};\n\nlet multipleapplookupselectfieldtype = new MultipleAppLookupSelectFieldType(\"la\", \"MultipleAppLookupSelectField\", \"Holds the value of a `multipleapplookup`/`select` field of a record (and related information)\");\n\n\nexport class MultipleAppLookupSelectField extends MultipleAppLookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multipleapplookupselectfieldtype;\n\t}\n\n\t_set_dom_lookupdata(lookupdata)\n\t{\n\t\tthis._set_dom_lookupdata_select(lookupdata);\n\t}\n};\n\n\nclass MultipleAppLookupChoiceFieldType extends MultipleAppLookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleAppLookupChoiceField;\n\t}\n};\n\nlet multipleapplookupchoicefieldtype = new MultipleAppLookupChoiceFieldType(\"la\", \"MultipleAppLookupChoiceField\", \"Holds the value of a `multipleapplookup`/`choice` field of a record (and related information)\");\n\n\nexport class MultipleAppLookupChoiceField extends MultipleAppLookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multipleapplookupchoicefieldtype;\n\t}\n};\n\nMultipleAppLookupChoiceField.prototype._inputevent = \"llchoice\";\n\n\nclass ControlType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Control;\n\t}\n};\n\nlet controltype = new ControlType(\"la\", \"Control\", \"Metainformation about a field in a LivingApps application\");\n\n\nexport class Control extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn controltype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<\" + this.constructor.name + \" id=\" + ul4._repr(this.id) + \" identifier=\" + ul4._repr(this.identifier) + \">\";\n\t}\n\n\tget globals()\n\t{\n\t\treturn this.app.globals;\n\t}\n\n\tget fulltype()\n\t{\n\t\treturn this.subtype ? this.type + \"/\" + this.subtype : this.type;\n\t}\n\n\tget label()\n\t{\n\t\tlet view_control = this._view_control();\n\t\tif (view_control === null)\n\t\t\treturn this._label;\n\t\tlet label = view_control.label;\n\t\tif (label === null)\n\t\t\treturn this._label;\n\t\treturn label;\n\t}\n\n\tset label(value)\n\t{\n\t\tthis._label = value;\n\t}\n\n\tget default()\n\t{\n\t\treturn null;\n\t}\n\n\tget top()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.top : null;\n\t}\n\n\tget left()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.left : null;\n\t}\n\n\tget width()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.width : null;\n\t}\n\n\tget height()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.height : null;\n\t}\n\n\tget z_index()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.z_index : null;\n\t}\n\n\tget liveupdate()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.liveupdate : false;\n\t}\n\n\tget tabindex()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.tabindex : null;\n\t}\n\n\tget required()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.required : false;\n\t}\n\n\tget mode()\n\t{\n\t\tlet view_control = this._view_control();\n\t\tif (this.app._active_view !== null && view_control === null)\n\t\t\treturn null;\n\t\tif (this.app.globals.mode === null)\n\t\t\treturn \"display\";\n\t\treturn view_control !== null ? view_control.mode : \"edit\";\n\t}\n\n\tget labelpos()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.labelpos : \"left\";\n\t}\n\n\tget labelwidth()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.labelwidth : null;\n\t}\n\n\tget autoalign()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.autoalign : true;\n\t}\n\n\tget in_active_view()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null;\n\t}\n\n\t_view_control()\n\t{\n\t\tif (this.app._active_view === null)\n\t\t\treturn null;\n\t\tlet view_control = this.app._active_view.controls.get(this.identifier);\n\t\treturn view_control ?? null;\n\t}\n\n\t_logsearch(value, search)\n\t{\n\t\t//console.log(\"Searching for \" + ul4._repr(search.value) + \" in \" + ul4._repr(this) + \" with operator \" + search.operator + \" in value \" + ul4._repr(value));\n\t}\n\n\t// base implemntation, always returns ``false`` (i.e. \"not found\")\n\t// ``value`` is the value of the field\n\t// ``search`` is an object with information what we're searching for\n\t// keys in ``search`` are: ``operator`` (and ``value`` (if required by the operator))\n\tsearch(value, search)\n\t{\n\t\treturn false;\n\t}\n};\n\nControl.prototype.type = null;\nControl.prototype.subtype = null;\nControl.prototype._ul4onattrs = [\"identifier\", \"fieldname\", \"app\", \"_label\", \"priority\", \"order\", \"ininsertprocedure\", \"inupdateprocedure\"];\nControl.prototype._ul4attrs = new Set([\"id\", \"identifier\", \"fieldname\", \"app\", \"priority\", \"order\", \"ininsertprocedure\", \"inupdateprocedure\", \"fulltype\", \"label\", \"top\", \"left\", \"width\", \"height\", \"z_index\", \"liveupdate\", \"tabindex\", \"required\", \"mode\", \"labelpos\", \"autoalign\", \"in_active_view\"]);\nControl.prototype._cssclass_root = \"llft-control\";\nControl.prototype._cssclass_control = \"input\";\n\n\nclass BoolControlType extends ControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof BoolControl;\n\t}\n};\n\nlet boolcontroltype = new BoolControlType(\"la\", \"BoolControl\", \"A LivingApps boolean field (type 'bool')\");\n\n\nexport class BoolControl extends Control\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn boolcontroltype;\n\t}\n\n\t// ``search`` must by ``null``, ``false`` or ``true``\n\tsearch(value, search)\n\t{\n\t\tthis._logsearch(value, search);\n\t\tif (search.operator === \"equals\")\n\t\t\treturn search.value === value;\n\t\telse\n\t\t\treturn false;\n\t}\n};\n\nBoolControl.prototype.type = \"bool\";\nBoolControl.prototype.fieldtype = BoolField;\n\n\nclass IntControlType extends ControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof IntControl;\n\t}\n};\n\nlet intcontroltype = new IntControlType(\"la\", \"IntControl\", \"A LivingApps integer field (type 'int')\");\n\n\nexport class IntControl extends Control\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn intcontroltype;\n\t}\n\n\t// ``search.value`` must by ``null`` or an integer\n\tsearch(value, search)\n\t{\n\t\tthis._logsearch(value, search);\n\t\tif (search.operator === \"equals\")\n\t\t\treturn search.value === value;\n\t\telse\n\t\t\treturn false;\n\t}\n};\n\nIntControl.prototype.type = \"int\";\nIntControl.prototype.fieldtype = IntField;\n\n\nclass PlaceholderControlType extends ControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof PlaceholderControld;\n\t}\n};\n\nlet placeholdercontroltype = new PlaceholderControlType(\"la\", \"PlaceholderControl\", \"A LivingApps field that has a placeholder\");\n\n\nclass PlaceholderControl extends Control\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn placeholdercontroltype;\n\t}\n\n\tget placeholder()\n\t{\n\t\tlet view_control = this._view_control();\n\t\tif (view_control === null)\n\t\t\treturn null;\n\t\treturn view_control.placeholder;\n\t}\n};\n\nPlaceholderControl.prototype._ul4attrs = new Set([...Control.prototype._ul4attrs, \"placeholder\"]);\n\n\nclass NumberControlType extends PlaceholderControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof NumberControl;\n\t}\n};\n\nlet numbercontroltype = new NumberControlType(\"la\", \"NumberControl\", \"A LivingApps number field (type 'number')\");\n\n\nexport class NumberControl extends PlaceholderControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn numbercontroltype;\n\t}\n\n\t// ``search.value`` must by ``null`` or an integer\n\tsearch(value, search)\n\t{\n\t\tthis._logsearch(value, search);\n\t\tif (search.operator === \"equals\")\n\t\t\treturn search.value === value;\n\t\telse if (search.operator === \"range\")\n\t\t{\n\t\t\tif (value === null)\n\t\t\t\treturn false;\n\t\t\treturn (search.minvalue === null || search.minvalue <= value) && (search.maxvalue === null || value < search.maxvalue);\n\t\t}\n\t\telse\n\t\t\treturn false;\n\t}\n};\n\nNumberControl.prototype.type = \"number\";\nNumberControl.prototype.fieldtype = NumberField;\nNumberControl.prototype._ul4onattrs = [...Control.prototype._ul4onattrs, \"precision\", \"minimum\", \"maximum\"];\nNumberControl.prototype._ul4attrs = new Set([...Control.prototype._ul4attrs, \"precision\", \"minimum\", \"maximum\"]);\n\n\nclass StringControlType extends PlaceholderControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof StringControl;\n\t}\n};\n\nlet stringcontroltype = new StringControlType(\"la\", \"StringControl\", \"A LivingApps number field (type 'string')\");\n\n\nexport class StringControl extends PlaceholderControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn stringcontroltype;\n\t}\n\n\t_user_placeholder(user, placeholder)\n\t{\n\t\tif (placeholder === null)\n\t\t\treturn null;\n\t\tswitch (placeholder)\n\t\t{\n\t\t\tcase \"{gender}\":\n\t\t\t\treturn user !== null ? user.gender : null;\n\t\t\tcase \"{title}\":\n\t\t\t\treturn user !== null ? user.title : null;\n\t\t\tcase \"{firstname}\":\n\t\t\t\treturn user !== null ? user.firstname : null;\n\t\t\tcase \"{surname}\":\n\t\t\t\treturn user !== null ? user.surname : null;\n\t\t\tcase \"{account}\":\n\t\t\t\treturn user !== null ? user.email : null;\n\t\t\tcase \"{streetname}\":\n\t\t\t\treturn user !== null ? user.streetname : null;\n\t\t\tcase \"{streetnumber}\":\n\t\t\t\treturn user !== null ? user.streetnumber : null;\n\t\t\tcase \"{street}\":\n\t\t\t\tif (user === null)\n\t\t\t\t\treturn null;\n\t\t\t\telse if (user.street === null)\n\t\t\t\t\treturn user.streetnumber;\n\t\t\t\telse if (user.streetnumber === null)\n\t\t\t\t\treturn user.street;\n\t\t\t\telse\n\t\t\t\t\treturn user.street + \" \" + user.streetnumber;\n\t\t\tcase \"{zip}\":\n\t\t\t\treturn user !== null ? user.zip : null;\n\t\t\tcase \"{phone}\":\n\t\t\t\treturn user !== null ? user.phone : null;\n\t\t\tcase \"{fax}\":\n\t\t\t\treturn user !== null ? user.fax : null;\n\t\t\tcase \"{company}\":\n\t\t\t\treturn user !== null ? user.company : null;\n\t\t\tcase \"{city}\":\n\t\t\t\treturn user !== null ? user.city : null;\n\t\t\tcase \"{summary}\":\n\t\t\t\treturn user !== null ? user.summary : null;\n\t\t\tcase \"{interests}\":\n\t\t\t\treturn user !== null ? user.interests : null;\n\t\t\tcase \"{personal_website}\":\n\t\t\t\treturn user !== null ? user.personal_website : null;\n\t\t\tcase \"{company_website}\":\n\t\t\t\treturn user !== null ? user.company_website : null;\n\t\t\tcase \"{position}\":\n\t\t\t\treturn user !== null ? user.position : null;\n\t\t\tcase \"{department}\":\n\t\t\t\treturn user !== null ? user.department : null;\n\t\t\tcase \"{today}\":\n\t\t\t\treturn ul4.today();\n\t\t\tdefault:\n\t\t\t\treturn placeholder;\n\t\t}\n\t}\n\n\tget default()\n\t{\n\t\tlet view_control = this._view_control();\n\n\t\tif (view_control === null)\n\t\t\treturn null;\n\n\t\treturn this._user_placeholder(this.app.globals.user, view_control.default);\n\t}\n\n\tget minlength()\n\t{\n\t\tlet view_control = this._view_control();\n\n\t\tif (view_control === null)\n\t\t\treturn 0;\n\t\tlet minlength = view_control.minlength;\n\t\tif (minlength === null || minlength < 0)\n\t\t\treturn 0;\n\t\treturn minlength;\n\t}\n\n\tget maxlength()\n\t{\n\t\tlet view_control = this._view_control();\n\n\t\tif (view_control === null)\n\t\t\treturn 4000;\n\t\tlet maxlength = view_control.maxlength;\n\t\tif (maxlength === null || maxlength < 0 || maxlength > 4000)\n\t\t\treturn 4000;\n\t\treturn maxlength;\n\t}\n\n\tsearch(value, search)\n\t{\n\t\tthis._logsearch(value, search);\n\t\tif (search.operator === \"equals\")\n\t\t\treturn search.value === value;\n\t\telse if (search.operator === \"contains\")\n\t\t{\n\t\t\tif (search.value === null || value === null)\n\t\t\t\treturn search.value === value;\n\t\t\telse\n\t\t\t\treturn value.toLowerCase().indexOf(search.value.toLowerCase()) >= 0;\n\t\t}\n\t}\n};\n\nStringControl.prototype.type = \"string\";\n\n\nclass TextControlType extends StringControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof TextControl;\n\t}\n};\n\nlet textcontroltype = new TextControlType(\"la\", \"TextControl\", \"A LivingApps text field (type 'string/text')\");\n\n\nexport class TextControl extends StringControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn textcontroltype;\n\t}\n};\n\nTextControl.prototype.subtype = \"text\";\nTextControl.prototype.fieldtype = StringField;\n\n\nclass PasswordControlType extends StringControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof PasswordControl;\n\t}\n};\n\nlet passwordcontroltype = new PasswordControlType(\"la\", \"PasswordControl\", \"A LivingApps password field (type 'string/password')\");\n\n\nexport class PasswordControl extends StringControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn passwordcontroltype;\n\t}\n};\n\nPasswordControl.prototype.subtype = \"password\";\nPasswordControl.prototype.fieldtype = PasswordField;\n\n\nclass EmailControlType extends StringControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof EmailControl;\n\t}\n};\n\nlet emailcontroltype = new EmailControlType(\"la\", \"EmailControl\", \"A LivingApps email field (type 'string/email')\");\n\n\nexport class EmailControl extends StringControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn emailcontroltype;\n\t}\n};\n\nEmailControl.prototype.subtype = \"email\";\nEmailControl.prototype.fieldtype = EmailField;\n\n\nclass URLControlType extends StringControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof URLControl;\n\t}\n};\n\nlet urlcontroltype = new URLControlType(\"la\", \"URLControl\", \"A LivingApps URL field (type 'string/url')\");\n\n\nexport class URLControl extends StringControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn urlcontroltype;\n\t}\n};\n\nURLControl.prototype.subtype = \"url\";\nURLControl.prototype.fieldtype = URLField;\n\n\nclass TelControlType extends StringControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof TelControl;\n\t}\n};\n\nlet telcontroltype = new TelControlType(\"la\", \"TelControl\", \"A LivingApps phone number field (type 'string/tel')\");\n\n\nexport class TelControl extends StringControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn telcontroltype;\n\t}\n};\n\nTelControl.prototype.subtype = \"tel\";\nTelControl.prototype.fieldtype = TelField;\n\n\nclass TextAreaControlType extends StringControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof TextAreaControl;\n\t}\n};\n\nlet textareacontroltype = new TextAreaControlType(\"la\", \"TextAreaControl\", \"A LivingApps textarea field (type 'string/textarea')\");\n\n\nexport class TextAreaControl extends StringControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn textareacontroltype;\n\t}\n\n\tget maxlength()\n\t{\n\t\tlet view_control = this._view_control();\n\n\t\tif (view_control === null)\n\t\t\treturn null;\n\t\t// We only get the encrypted text in encryption mode, so we can't check its length\n\t\tif (this.encrypted !== null)\n\t\t\treturn null;\n\t\tlet maxlength = view_control.maxlength;\n\t\tif (maxlength < 0)\n\t\t\treturn null;\n\t\treturn maxlength;\n\t}\n};\n\nTextAreaControl.prototype.subtype = \"textarea\";\nTextAreaControl.prototype.fieldtype = TextAreaField;\nTextAreaControl.prototype._ul4onattrs = [...StringControl.prototype._ul4onattrs, \"encrypted\"];\nTextAreaControl.prototype._ul4attrs = new Set([...StringControl.prototype._ul4attrs, \"encrypted\"]);\nTextAreaControl.prototype._cssclass_control = \"textarea\";\n\n\nclass HTMLControlType extends StringControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof HTMLControl;\n\t}\n};\n\nlet htmlcontroltype = new HTMLControlType(\"la\", \"HTMLControl\", \"A LivingApps HTML field (type 'string/html')\");\n\n\nexport class HTMLControl extends StringControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn htmlcontroltype;\n\t}\n};\n\nHTMLControl.prototype.subtype = \"html\";\nHTMLControl.prototype.fieldtype = HTMLField;\n\n\nclass DateControlType extends PlaceholderControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof DateControl;\n\t}\n};\n\nlet datecontroltype = new DateControlType(\"la\", \"DateControl\", \"A LivingApps date field (type 'date/date')\");\n\n\nexport class DateControl extends PlaceholderControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn datecontroltype;\n\t}\n\n\tget default()\n\t{\n\t\tlet view_control = this._view_control();\n\n\t\tif (view_control === null)\n\t\t\treturn null;\n\n\t\treturn view_control.default === \"{today}\" ? ul4.today() : null;\n\t}\n\n\tformatstring(lang)\n\t{\n\t\tlang = lang || this.globals.lang;\n\n\t\tif (lang !== \"de\" && lang !== \"fr\" && lang !== \"it\")\n\t\t\tlang = \"en\";\n\t\treturn this._formatstrings[lang];\n\t}\n\n\tformatstrings_parse(lang)\n\t{\n\t\tlang = lang || this.globals.lang;\n\t\tif (lang !== \"de\" && lang !== \"fr\" && lang !== \"it\")\n\t\t\tlang = \"en\";\n\n\t\treturn [\n\t\t\t...this._formatstrings_parse[lang],\n\t\t\t...this._formatstrings_parse[\"intl\"]\n\t\t];\n\t}\n\n\t// searchvalue must be ``null``, a ``Date`` object or a string\n\tsearch(value, search)\n\t{\n\t\tthis._logsearch(value, search);\n\n\t\tlet searchvalue = search.value;\n\t\tif (Object.prototype.toString.call(searchvalue) == \"[object Date]\")\n\t\t\tsearchvalue = ul4._format(searchvalue, this.formatstring(), this.app.language);\n\t\tif (value !== null)\n\t\t\tvalue = ul4._format(value, this.formatstring(), this.app.language);\n\n\t\tif (search.operator === \"equals\")\n\t\t\treturn searchvalue === value;\n\t\telse if (search.operator === \"contains\")\n\t\t{\n\t\t\tif (searchvalue === null || value === null)\n\t\t\t\treturn searchvalue === value;\n\t\t\telse\n\t\t\t\treturn value.toLowerCase().indexOf(searchvalue.toLowerCase()) >= 0;\n\t\t}\n\t\telse\n\t\t\treturn false;\n\t}\n};\n\nDateControl.prototype.type = \"date\";\nDateControl.prototype.subtype = \"date\";\nDateControl.prototype.fieldtype = DateField;\nDateControl.prototype._formatstrings = {\n\t\"de\": \"%d.%m.%Y\",\n\t\"fr\": \"%d.%m.%Y\",\n\t\"it\": \"%d.%m.%Y\",\n\t\"en\": \"%m/%d/%Y\",\n\t\"intl\": \"%Y-%m-%d\"\n};\n\nlet _suffixes = [\n\t\"\",\n\t\" %H:%M\",\n\t\"T%H:%M\",\n\t\" %H:%M:%S\",\n\t\"T%H:%M:%S\",\n\t\" %H:%M:%S.%f\",\n\t\"T%H:%M:%S.%f\",\n\t\" %H:%M%z\",\n\t\"T%H:%M%z\",\n\t\" %H:%M:%S%z\",\n\t\"T%H:%M:%S%z\",\n\t\" %H:%M:%S.%f%z\",\n\t\"T%H:%M:%S.%f%z\",\n\t\" %H:%M %z\",\n\t\"T%H:%M %z\",\n\t\" %H:%M:%S %z\",\n\t\"T%H:%M:%S %z\",\n\t\" %H:%M:%S.%f %z\",\n\t\"T%H:%M:%S.%f %z\"\n]\n\nDateControl.prototype._formatstrings_parse = {\n\t\"en\": _suffixes.map(s => \"%m/%d/%Y\" + s),\n\t\"de\": _suffixes.map(s => \"%d.%m.%Y\" + s),\n\t\"fr\": _suffixes.map(s => \"%d.%m.%Y\" + s),\n\t\"it\": _suffixes.map(s => \"%d.%m.%Y\" + s),\n\t\"intl\": _suffixes.map(s => \"%Y-%m-%d\" + s)\n};\n\n\nclass DatetimeMinuteControlType extends DateControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof DatetimeMinuteControl;\n\t}\n};\n\nlet datetimeminutecontroltype = new DatetimeMinuteControlType(\"la\", \"DatetimeMinuteControl\", \"A LivingApps date field (type 'date/datetimeminute')\");\n\n\nexport class DatetimeMinuteControl extends DateControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn datetimeminutecontroltype;\n\t}\n\n\tget default()\n\t{\n\t\tlet view_control = this._view_control();\n\n\t\tif (view_control === null)\n\t\t\treturn null;\n\n\t\tif (view_control.default === \"{today}\")\n\t\t{\n\t\t\tlet now = new Date();\n\t\t\tnow.setSeconds(0);\n\t\t\tnow.setMilliseconds(0);\n\t\t\treturn now;\n\t\t}\n\t\telse\n\t\t\treturn null;\n\t}\n};\n\nDatetimeMinuteControl.prototype.subtype = \"datetimeminute\";\nDatetimeMinuteControl.prototype.fieldtype = DatetimeMinuteField;\nDatetimeMinuteControl.prototype._formatstrings = {\n\t\"de\": \"%d.%m.%Y %H:%M\",\n\t\"fr\": \"%d.%m.%Y %H:%M\",\n\t\"it\": \"%d.%m.%Y %H:%M\",\n\t\"en\": \"%m/%d/%Y %H:%M\",\n\t\"intl\": \"%Y-%m-%d %H:%M\"\n};\n\n\nclass DatetimeSecondControlType extends DateControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof DatetimeSecondControl;\n\t}\n};\n\nlet datetimesecondcontroltype = new DatetimeSecondControlType(\"la\", \"DatetimeSecondControl\", \"A LivingApps date field (type 'date/datetimesecond')\");\n\n\nexport class DatetimeSecondControl extends DateControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn datetimesecondcontroltype;\n\t}\n\n\tget default()\n\t{\n\t\tlet view_control = this._view_control();\n\n\t\tif (view_control === null)\n\t\t\treturn null;\n\n\t\tif (view_control.default === \"{today}\")\n\t\t{\n\t\t\tlet now = new Date();\n\t\t\tnow.setMilliseconds(0);\n\t\t\treturn now;\n\t\t}\n\t\telse\n\t\t\treturn null;\n\t}\n};\n\nDatetimeSecondControl.prototype.subtype = \"datetimesecond\";\nDatetimeSecondControl.prototype.fieldtype = DatetimeSecondField;\nDatetimeSecondControl.prototype._formatstrings = {\n\t\"de\": \"%d.%m.%Y %H:%M:%S\",\n\t\"fr\": \"%d.%m.%Y %H:%M:%S\",\n\t\"it\": \"%d.%m.%Y %H:%M:%S\",\n\t\"en\": \"%m/%d/%Y %H:%M:%S\",\n\t\"intl\": \"%Y-%m-%d %H:%M:%S\"\n};\n\n\nclass LookupControlType extends ControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupControl;\n\t}\n};\n\nlet lookupcontroltype = new LookupControlType(\"la\", \"LookupControl\", \"A LivingApps date field (type 'lookup')\");\n\n\nexport class LookupControl extends Control\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupcontroltype;\n\t}\n\n\tget default()\n\t{\n\t\tlet view_control = this._view_control();\n\n\t\tif (view_control === null)\n\t\t\treturn null;\n\n\t\treturn this.lookupdata.get(view_control) ?? null;\n\t}\n\n\tget autoexpandable()\n\t{\n\t\tlet view_control = this._view_control();\n\t\tif (view_control === null)\n\t\t\treturn false;\n\t\treturn view_control.autoexpandable;\n\t}\n\n\tget none_key()\n\t{\n\t\tlet view_control = this._view_control();\n\t\tif (view_control === null)\n\t\t\treturn null;\n\t\treturn view_control.lookupnonekey;\n\t}\n\n\tget none_label()\n\t{\n\t\tlet view_control = this._view_control();\n\t\tif (view_control === null)\n\t\t\treturn null;\n\t\treturn view_control.lookupnonelabel;\n\t}\n\n\t// ``search.value`` must be ``null`` or a ``LookupItem`` key\n\tsearch(value, search)\n\t{\n\t\tif (search.operator === \"equals\")\n\t\t{\n\t\t\tif (value === null)\n\t\t\t\treturn search.value === null;\n\t\t\telse\n\t\t\t\treturn value.key === search.value;\n\t\t}\n\t\telse\n\t\t\treturn false;\n\t}\n};\n\nLookupControl.prototype.type = \"lookup\";\nLookupControl.prototype.fieldtype = LookupField;\nLookupControl.prototype._ul4onattrs = [...Control.prototype._ul4onattrs, \"lookupdata\"];\nLookupControl.prototype._ul4attrs = new Set([...Control.prototype._ul4attrs, \"lookupdata\"]);\n\n\nclass LookupSelectControlType extends LookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupSelectControl;\n\t}\n};\n\nlet lookupselectcontroltype = new LookupSelectControlType(\"la\", \"LookupSelectControl\", \"A LivingApps lookup field (type 'lookup/select')\");\n\n\nexport class LookupSelectControl extends LookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupselectcontroltype;\n\t}\n};\n\nLookupSelectControl.prototype.subtype = \"select\";\nLookupSelectControl.prototype.fieldtype = LookupSelectField;\nLookupSelectControl.prototype._cssclass_control = \"select\";\n\n\nclass LookupRadioControlType extends LookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupRadioControl;\n\t}\n};\n\nlet lookupradiocontroltype = new LookupRadioControlType(\"la\", \"LookupRadioControl\", \"A LivingApps lookup field (type 'lookup/radio')\");\n\n\nexport class LookupRadioControl extends LookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupradiocontroltype;\n\t}\n};\n\nLookupRadioControl.prototype.subtype = \"radio\";\nLookupRadioControl.prototype.fieldtype = LookupRadioField;\nLookupRadioControl.prototype._cssclass_root = \"llft-element\";\n\n\nclass LookupChoiceControlType extends LookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupChoiceControl;\n\t}\n};\n\nlet lookupchoicecontroltype = new LookupChoiceControlType(\"la\", \"LookupChoiceControl\", \"A LivingApps lookup field (type 'lookup/choice')\");\n\n\nexport class LookupChoiceControl extends LookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupchoicecontroltype;\n\t}\n};\n\nLookupChoiceControl.prototype.subtype = \"choice\";\nLookupChoiceControl.prototype.fieldtype = LookupChoiceField;\nLookupChoiceControl.prototype._cssclass_control = \"select\";\n\n\nclass AppLookupControlType extends ControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppLookupControl;\n\t}\n};\n\nlet applookupcontroltype = new AppLookupControlType(\"la\", \"AppLookupControl\", \"A LivingApps lookup field (type 'applookup')\");\n\n\nexport class AppLookupControl extends Control\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn applookupcontroltype;\n\t}\n\n\tget lookupdata()\n\t{\n\t\tif (this.lookup_app !== null && this.lookup_app.records !== null)\n\t\t\treturn this.lookup_app.records;\n\t\telse\n\t\t\treturn new Map();\n\t}\n\n\tget none_key()\n\t{\n\t\tlet view_control = this._view_control();\n\t\tif (view_control === null)\n\t\t\treturn null;\n\t\treturn view_control.lookupnonekey;\n\t}\n\n\tget none_label()\n\t{\n\t\tlet view_control = this._view_control();\n\t\tif (view_control === null)\n\t\t\treturn null;\n\t\treturn view_control.lookupnonelabel;\n\t}\n\n\t// ``search.value`` must be an object containing the search criteria for the referenced record\n\tsearch(value, search)\n\t{\n\t\tif (value === null || search.value === null)\n\t\t\treturn value === search.value;\n\t\telse\n\t\t\treturn value.search(search);\n\t}\n};\n\nAppLookupControl.prototype.type = \"applookup\";\nAppLookupControl.prototype.fieldtype = AppLookupField;\nAppLookupControl.prototype._ul4onattrs = [...Control.prototype._ul4onattrs, \"lookup_app\", \"lookup_controls\", \"local_master_control\", \"local_detail_controls\", \"remote_master_control\"];\nAppLookupControl.prototype._ul4attrs = new Set([...Control.prototype._ul4attrs, \"lookup_app\", \"lookup_controls\", \"local_master_control\", \"local_detail_controls\", \"remote_master_control\"]);\n\n\nclass AppLookupSelectControlType extends AppLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppLookupSelectControl;\n\t}\n};\n\nlet applookupselectcontroltype = new AppLookupSelectControlType(\"la\", \"AppLookupSelectControl\", \"A LivingApps applookup field (type 'applookup/select')\");\n\n\nexport class AppLookupSelectControl extends AppLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn applookupselectcontroltype;\n\t}\n};\n\nAppLookupSelectControl.prototype.subtype = \"select\";\nAppLookupSelectControl.prototype.fieldtype = AppLookupSelectField;\nAppLookupSelectControl.prototype._cssclass_control = \"select\";\n\n\nclass AppLookupRadioControlType extends AppLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppLookupRadioControl;\n\t}\n};\n\nlet applookupradiocontroltype = new AppLookupRadioControlType(\"la\", \"AppLookupRadioControl\", \"A LivingApps applookup field (type 'applookup/radio')\");\n\n\nexport class AppLookupRadioControl extends AppLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn applookupradiocontroltype;\n\t}\n};\n\nAppLookupRadioControl.prototype.subtype = \"radio\";\nAppLookupRadioControl.prototype.fieldtype = AppLookupRadioField;\n\n\nclass AppLookupChoiceControlType extends AppLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppLookupChoiceControl;\n\t}\n};\n\nlet applookupchoicecontroltype = new AppLookupChoiceControlType(\"la\", \"AppLookupChoiceControl\", \"A LivingApps applookup field (type 'applookup/choice')\");\n\n\nexport class AppLookupChoiceControl extends AppLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn applookupchoicecontroltype;\n\t}\n\n\tget search_url()\n\t{\n\t\treturn \"field_\" + this.identifier + \"_search\";\n\t}\n\n\tget search_param_name()\n\t{\n\t\treturn \"q\";\n\t}\n\n\tget target_param_name()\n\t{\n\t\treturn \"target\";\n\t}\n};\n\nAppLookupChoiceControl.prototype.subtype = \"choice\";\nAppLookupChoiceControl.prototype.fieldtype = AppLookupChoiceField;\nAppLookupChoiceControl.prototype._cssclass_control = \"select\";\nAppLookupChoiceControl.prototype._ul4attrs = new Set([...AppLookupControl.prototype._ul4attrs, \"search_url\", \"search_param_name\", \"target_param_name\"]);\n\n\nclass MultipleLookupControlType extends LookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleLookupControl;\n\t}\n};\n\nlet multiplelookupcontroltype = new MultipleLookupControlType(\"la\", \"MultipleLookupControl\", \"A LivingApps multiple applookup field (type 'multipleapplookup')\");\n\n\nexport class MultipleLookupControl extends LookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multiplelookupcontroltype;\n\t}\n\n\tget default()\n\t{\n\t\tlet view_control = this._view_control();\n\n\t\tif (view_control === null)\n\t\t\treturn null;\n\n\t\tlet defaultValue = this.lookupdata.get(view_control)\n\n\t\treturn (defaultValue !== undefined) ? [defaultValue] : [];\n\t}\n\n\t// search.value must be ``null`` or a ``LookupItem`` key\n\tsearch(value, search)\n\t{\n\t\tif (search.operator === \"equals\")\n\t\t{\n\t\t\tfor (let item of value)\n\t\t\t{\n\t\t\t\tif (item.key === search.value)\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\telse\n\t\t\treturn false;\n\t}\n};\n\nMultipleLookupControl.prototype.type = \"multiplelookup\";\nMultipleLookupControl.prototype.fieldtype = MultipleLookupField;\n\n\nclass MultipleLookupCheckboxControlType extends MultipleLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleLookupCheckboxControl;\n\t}\n};\n\nlet multiplelookupcheckboxcontroltype = new MultipleLookupCheckboxControlType(\"la\", \"MultipleLookupCheckboxControl\", \"A LivingApps multiplelookup field (type 'multiplelookup/checkbox')\");\n\n\nexport class MultipleLookupCheckboxControl extends MultipleLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multiplelookupcheckboxcontroltype;\n\t}\n\n\tget _sel_label()\n\t{\n\t\treturn this._sel_root + \" label:not([for]) > span\";\n\t}\n};\n\nMultipleLookupCheckboxControl.prototype.subtype = \"checkbox\";\nMultipleLookupCheckboxControl.prototype.fieldtype = MultipleLookupCheckboxField;\nMultipleLookupCheckboxControl.prototype._cssclass_root = \"llft-element\";\n\n\nclass MultipleLookupSelectControlType extends MultipleLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleLookupSelectControl;\n\t}\n};\n\nlet multiplelookupselectcontroltype = new MultipleLookupSelectControlType(\"la\", \"MultipleLookupSelectControl\", \"A LivingApps multiplelookup field (type 'multiplelookup/select')\");\n\n\nexport class MultipleLookupSelectControl extends MultipleLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multiplelookupselectcontroltype;\n\t}\n};\n\nMultipleLookupSelectControl.prototype.subtype = \"select\";\nMultipleLookupSelectControl.prototype.fieldtype = MultipleLookupSelectField;\nMultipleLookupSelectControl.prototype._cssclass_control = \"select\";\n\n\nclass MultipleLookupChoiceControlType extends MultipleLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleLookupChoiceControl;\n\t}\n};\n\nlet multiplelookupchoicecontroltype = new MultipleLookupChoiceControlType(\"la\", \"MultipleLookupChoiceControl\", \"A LivingApps multiplelookup field (type 'multiplelookup/choice')\");\n\n\nexport class MultipleLookupChoiceControl extends MultipleLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multiplelookupchoicecontroltype;\n\t}\n};\n\nMultipleLookupChoiceControl.prototype.subtype = \"choice\";\nMultipleLookupChoiceControl.prototype.fieldtype = MultipleLookupChoiceField;\nMultipleLookupChoiceControl.prototype._cssclass_control = \"select\";\n\n\nclass MultipleAppLookupControlType extends AppLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleAppLookupControl;\n\t}\n};\n\nlet multipleapplookupcontroltype = new MultipleAppLookupControlType(\"la\", \"MultipleAppLookupControl\", \"A LivingApps multiple applookup field (type 'multipleapplookup')\");\n\n\nexport class MultipleAppLookupControl extends AppLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multipleapplookupcontroltype;\n\t}\n\n\t// ``search.value`` must be an object containing the search criteria for the referenced record\n\tsearch(value, search)\n\t{\n\t\tif (search.operator === \"equals\")\n\t\t{\n\t\t\tif (search.value === null)\n\t\t\t\treturn value.length === 0;\n\t\t\telse\n\t\t\t{\n\t\t\t\tfor (let item of value)\n\t\t\t\t{\n\t\t\t\t\tif (item.search(search.value))\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\treturn false;\n\t}\n};\n\nMultipleAppLookupControl.prototype.type = \"multipleapplookup\";\nMultipleAppLookupControl.prototype.fieldtype = MultipleAppLookupField;\n\n\nclass MultipleAppLookupSelectControlType extends MultipleAppLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleAppLookupSelectControl;\n\t}\n};\n\nlet multipleapplookupselectcontroltype = new MultipleAppLookupSelectControlType(\"la\", \"MultipleAppLookupSelectControl\", \"A LivingApps multiple applookup field (type 'multipleapplookup/select')\");\n\n\nexport class MultipleAppLookupSelectControl extends MultipleAppLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multipleapplookupselectcontroltype;\n\t}\n};\n\nMultipleAppLookupSelectControl.prototype.subtype = \"select\";\nMultipleAppLookupSelectControl.prototype.fieldtype = MultipleAppLookupSelectField;\nMultipleAppLookupSelectControl.prototype._cssclass_control = \"select\";\n\n\nclass MultipleAppLookupCheckboxControlType extends MultipleAppLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleAppLookupCheckboxControl;\n\t}\n};\n\nlet multipleapplookupcheckboxcontroltype = new MultipleAppLookupCheckboxControlType(\"la\", \"MultipleAppLookupCheckboxControl\", \"A LivingApps multiple applookup field (type 'multipleapplookup/checkbox')\");\n\n\nexport class MultipleAppLookupCheckboxControl extends MultipleAppLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multipleapplookupcheckboxcontroltype;\n\t}\n};\n\nMultipleAppLookupCheckboxControl.prototype.subtype = \"checkbox\";\nMultipleAppLookupCheckboxControl.prototype.fieldtype = MultipleAppLookupCheckboxField;\n\n\nclass MultipleAppLookupChoiceControlType extends MultipleAppLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleAppLookupChoiceControl;\n\t}\n};\n\nlet multipleapplookupchoicecontroltype = new MultipleAppLookupChoiceControlType(\"la\", \"MultipleAppLookupChoiceControl\", \"A LivingApps multiple applookup field (type 'multipleapplookup/choice')\");\n\n\nexport class MultipleAppLookupChoiceControl extends MultipleAppLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multipleapplookupchoicecontroltype;\n\t}\n};\n\nMultipleAppLookupChoiceControl.prototype.subtype = \"choice\";\nMultipleAppLookupChoiceControl.prototype.fieldtype = MultipleAppLookupChoiceField;\nMultipleAppLookupChoiceControl.prototype._cssclass_control = \"select\";\n\n\nclass GeoControlType extends ControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof GeoControl;\n\t}\n};\n\nlet geocontroltype = new GeoControlType(\"la\", \"GeoControl\", \"A LivingApps geo field (type 'geo')\");\n\n\nexport class GeoControl extends Control\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn geocontroltype;\n\t}\n};\n\nGeoControl.prototype.type = \"geo\";\nGeoControl.prototype.fieldtype = GeoField;\nGeoControl.prototype._cssclass_root = \"llft-element\";\n\n\nclass FileControlType extends ControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof FileControl;\n\t}\n};\n\nlet filecontroltype = new FileControlType(\"la\", \"FileControl\", \"A LivingApps upload field (type 'file')\");\n\n\nexport class FileControl extends Control\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn filecontroltype;\n\t}\n};\n\nFileControl.prototype.type = \"file\";\nFileControl.prototype.fieldtype = FileField;\nFileControl.prototype._cssclass_root = \"llft-element\";\n\n\nclass FileSignatureControlType extends FileControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof FileSignatureControl;\n\t}\n};\n\nlet filesignaturecontroltype = new FileSignatureControlType(\"la\", \"FileSignatureControl\", \"A LivingApps signature image field (type 'file/signature')\");\n\n\nexport class FileSignatureControl extends FileControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn filesignaturecontroltype;\n\t}\n};\n\nFileSignatureControl.prototype.subtype = \"signature\";\nFileSignatureControl.prototype.fieldtype = FileSignatureField;\n\n\nclass ButtonControlType extends ControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof ButtonControl;\n\t}\n};\n\nlet buttoncontroltype = new ButtonControlType(\"la\", \"ButtonControl\", \"A submit button\");\n\n\nexport class ButtonControl extends Control\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn buttoncontroltype;\n\t}\n};\n\nButtonControl.prototype.type = \"button\";\n\n\nclass LookupItemType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupItem;\n\t}\n};\n\nlet lookupitemtype = new LookupItemType(\"la\", \"LookupItem\", \"An option in a lookup control/field\");\n\n\nexport class LookupItem extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupitemtype;\n\t}\n\n\tget label()\n\t{\n\t\tif (this.control === null)\n\t\t\treturn this._label;\n\t\tlet view_lookupitem = this._view_lookupitem();\n\t\tif (view_lookupitem === null)\n\t\t\treturn this._label;\n\t\tlet label = view_lookupitem.label;\n\t\tif (label === null)\n\t\t\treturn this._label;\n\t\treturn label;\n\t}\n\n\tget visible()\n\t{\n\t\tif (this.control === null)\n\t\t\treturn true;\n\t\tlet view_lookupitem = this._view_lookupitem();\n\t\tif (view_lookupitem === null)\n\t\t\treturn true;\n\t\treturn view_lookupitem.visible;\n\t}\n\n\t_view_lookupitem()\n\t{\n\t\tlet identifier = this.control.identifier;\n\t\tlet active_view = this.control.app.active_view;\n\t\tif (active_view !== null && active_view.controls !== null)\n\t\t{\n\t\t\tlet view_control = active_view.controls.get(identifier);\n\t\t\tif (view_control !== undefined && view_control.lookupdata !== undefined && view_control.lookupdata !== null)\n\t\t\t{\n\t\t\t\tlet view_lookupitem = view_control.lookupdata.get(this.key);\n\t\t\t\tif (view_lookupitem !== undefined)\n\t\t\t\t\treturn view_lookupitem;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\tlet repr = \"<LookupItem key=\" + ul4._repr(this.key) + \" label=\" + ul4._repr(this.label);\n\t\tif (!this.visible)\n\t\t\trepr += \"visible=False\"\n\t\treturn repr + \">\";\n\t}\n};\n\nLookupItem.prototype._ul4onattrs = [\"control\", \"key\", \"_label\"];\nLookupItem.prototype._ul4attrs = new Set([\"id\", \"control\", \"key\", \"label\"]);\n\n\nclass ViewLookupItemType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof ViewLookupItem;\n\t}\n};\n\nlet viewlookupitemtype = new ViewLookupItemType(\"la\", \"ViewLookupItem\", \"View specific information about a lookup item\");\n\n\nexport class ViewLookupItem extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn viewlookupitemtype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\tlet repr = \"<ViewLookupItem key=\" + ul4._repr(this.key) + \" label=\" + ul4._repr(this.label);\n\t\tif (!this.visible)\n\t\t\trepr += \" visible=False\"\n\t\treturn repr + \">\";\n\t}\n};\n\nViewLookupItem.prototype._ul4onattrs = [\"key\", \"label\", \"visible\"];\nViewLookupItem.prototype._ul4attrs = new Set([\"key\", \"label\", \"visible\"]);\n\n\nclass LayoutControlType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LayoutControl;\n\t}\n};\n\nlet layoutcontroltype = new LayoutControlType(\"la\", \"LayoutControl\", \"A decoration in an input form\");\n\n\nexport class LayoutControl extends Base\n{\n\tLayoutControl()\n\t{\n\t\tthis.label = null;\n\t\tthis.identifier = null;\n\t\tthis.view = null;\n\t\tthis.top = null;\n\t\tthis.left = null;\n\t\tthis.width = null;\n\t\tthis.height = null;\n\t\tthis._visible = true;\n\t}\n\n\t[ul4.symbols.type]()\n\t{\n\t\treturn layoutcontroltype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<\" + this.constructor.name + \" id=\" + ul4._repr(this.id) + \" identifier=\" + ul4._repr(this.identifier) + \">\";\n\t}\n\n\tget globals()\n\t{\n\t\treturn this.view.globals;\n\t}\n\n\tget _sel_root()\n\t{\n\t\treturn \"#livingapps-form .llft-element.llft-id-\" + this.identifier;\n\t}\n\n\tget _dom_root()\n\t{\n\t\treturn document.querySelector(this._sel_root);\n\t}\n\n\tget visible()\n\t{\n\t\treturn this._visible ?? true;\n\t}\n\n\tset visible(value)\n\t{\n\t\tif (this.globals._in_form())\n\t\t\tthis._dom_root.hidden = !value;\n\t\tthis._visible = value;\n\t}\n\n\t[ul4.symbols.setattr](name, value)\n\t{\n\t\tif (name === \"visible\")\n\t\t\tthis.visible = ul4._bool(value);\n\t\telse\n\t\t\tsuper[ul4.symbols.setattr](name, value);\n\t}\n};\n\nLayoutControl.prototype._ul4onattrs = [\"label\", \"identifier\", \"view\", \"top\", \"left\", \"width\", \"height\"];\nLayoutControl.prototype._ul4attrs = new Set([\"id\", \"label\", \"identifier\", \"view\", \"top\", \"left\", \"width\", \"height\", \"visible\"]);\n\n\nclass HTMLLayoutControlType extends LayoutControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof HTMLLayoutControl;\n\t}\n};\n\nlet htmllayoutcontroltype = new HTMLLayoutControlType(\"la\", \"HTMLLayoutControl\", \"HTML decoration in an input form\");\n\n\nexport class HTMLLayoutControl extends LayoutControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn htmllayoutcontroltype;\n\t}\n\n\tget value()\n\t{\n\t\treturn this._value;\n\t}\n\n\tset value(value)\n\t{\n\t\tthis._value = value;\n\t\tif (this.globals._in_form())\n\t\t\tthis._set_dom_value(this._value);\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tthis._dom_root.innerHTML = value;\n\t}\n\n\t[ul4.symbols.setattr](name, value)\n\t{\n\t\tif (name === \"value\")\n\t\t\tthis.value = value;\n\t\telse\n\t\t\tsuper[ul4.symbols.setattr](name, value);\n\t}\n};\n\nHTMLLayoutControl.prototype._ul4onattrs = [...LayoutControl.prototype._ul4onattrs, \"_value\", \"_visible\"];\nHTMLLayoutControl.prototype._ul4attrs = new Set([...LayoutControl.prototype._ul4attrs, \"value\"]);\n\n\nclass ImageLayoutControlType extends LayoutControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof ImageLayoutControl;\n\t}\n};\n\nlet imagelayoutcontroltype = new ImageLayoutControlType(\"la\", \"ImageLayoutControl\", \"An image decoration in an input form\");\n\n\nexport class ImageLayoutControl extends LayoutControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn imagelayoutcontroltype;\n\t}\n\n\tget image()\n\t{\n\t\treturn this._image;\n\t}\n\n\tset image(image)\n\t{\n\t\tthis._image = image;\n\t\tif (this.globals._in_form())\n\t\t\tthis._set_dom_value(this._image);\n\t}\n\n\tget original()\n\t{\n\t\treturn this.image;\n\t}\n\n\tset original(original)\n\t{\n\t\tthis.image = image;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tlet img = this._dom_root.querySelector(\"img\");\n\t\tif (img !== null)\n\t\t{\n\t\t\tlet url = (value === null) ?\n\t\t\t\t\"data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==\" :\n\t\t\t\tthis.globals.scaled_url(value, this.width, this.height);\n\t\t\timg.setAttribute(\"src\", url);\n\t\t}\n\t}\n\n\t[ul4.symbols.setattr](name, value)\n\t{\n\t\tif (name === \"original\")\n\t\t\tthis.original = value;\n\t\telse if (name === \"image\")\n\t\t\tthis.image = value;\n\t\telse\n\t\t\tsuper[ul4.symbols.setattr](name, value);\n\t}\n};\n\nImageLayoutControl.prototype._ul4onattrs = [...LayoutControl.prototype._ul4onattrs, \"_image\", \"_visible\"];\nImageLayoutControl.prototype._ul4attrs = new Set([...LayoutControl.prototype._ul4attrs, \"image\", \"original\"]);\n\n\nclass ButtonLayoutControlType extends LayoutControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof ButtonLayoutControl;\n\t}\n};\n\nlet buttonlayoutcontroltype = new ButtonLayoutControlType(\"la\", \"ButtonLayoutControl\", \"A submit button in an input form\");\n\n\nexport class ButtonLayoutControl extends LayoutControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn buttonlayoutcontroltype;\n\t}\n};\n\nButtonLayoutControl.prototype._ul4onattrs = [...LayoutControl.prototype._ul4onattrs, \"original\", \"scaled\", \"_visible\"];\n\n\nclass ViewControlType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof ViewControl;\n\t}\n};\n\nlet viewcontroltype = new ViewControlType(\"la\", \"ViewControl\", \"Contains view specific information about a control\");\n\n\nexport class ViewControl extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn viewcontroltype;\n\t}\n\n\tget mode()\n\t{\n\t\treturn this._mode ? \"display\" : \"edit\";\n\t}\n};\n\nViewControl.prototype._ul4onattrs = [\"view\", \"control\", \"top\", \"left\", \"width\", \"height\", \"z_index\", \"liveupdate\", \"default\", \"tabindex\", \"minlength\", \"maxlength\", \"required\", \"placeholder\", \"_mode\", \"labelpos\", \"lookupnonekey\", \"lookupnonelabel\", \"label\", \"autoalign\", \"labelwidth\", \"lookupdata\", \"autoexpandable\"];\nViewControl.prototype._ul4attrs = new Set([\"id\", \"view\", \"control\", \"top\", \"left\", \"width\", \"height\", \"z_index\", \"liveupdate\", \"default\", \"tabindex\", \"minlength\", \"maxlength\", \"required\", \"placeholder\", \"mode\", \"labelpos\", \"lookupnonekey\", \"lookupnonelabel\", \"label\", \"autoalign\", \"labelwidth\", \"lookupdata\", \"autoexpandable\"]);\n\n\nclass UserType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof User;\n\t}\n};\n\nlet usertype = new UserType(\"la\", \"User\", \"A LivingApps user/account\");\n\n\nexport class User extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn usertype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<User id=\" + ul4._repr(this.id) + \" firstname=\" + ul4._repr(this.firstname) + \" surname=\" + ul4._repr(this.surname) + \" email=\" + ul4._repr(this.email) + \">\";\n\t}\n};\n\nUser.prototype._ul4onattrs = [\"_id\", \"gender\", \"title\", \"firstname\", \"surname\", \"initials\", \"email\", \"streetname\", \"streetnumber\", \"zip\", \"city\", \"phone\", \"fax\", \"lang\", \"image\", \"summary\", \"interests\", \"personalwebsite\", \"companywebsite\", \"company\", \"position\", \"department\", \"keyviews\", \"globals\"];\nUser.prototype._ul4attrs = new Set([\"id\", \"globals\", \"_id\", \"gender\", \"title\", \"firstname\", \"surname\", \"initials\", \"email\", \"streetname\", \"streetnumber\", \"zip\", \"city\", \"phone\", \"fax\", \"lang\", \"image\", \"summary\", \"interests\", \"personalwebsite\", \"companywebsite\", \"company\", \"position\", \"department\", \"keyviews\"]);\n\n\nclass FileType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof File;\n\t}\n};\n\nlet filetype = new FileType(\"la\", \"File\", \"An uploaded file\");\n\n\nexport class File extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn filetype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<File url=\" + ul4._repr(this.url) + \" filename=\" + ul4._repr(this.filename) + \">\";\n\t}\n\n\tget url()\n\t{\n\t\treturn \"https://\" + this.globals.hostname + \"/files/\" + this.contextid + \"/\" + this.id;\n\t}\n\n\tget archive_url()\n\t{\n\t\tif (this.archive === null)\n\t\t\treturn this.url;\n\t\treturn this.archive.url + \"/\" + this.filename;\n\t}\n};\n\nFile.prototype._ul4onattrs = [\"globals\", \"filename\", \"mimetype\", \"width\", \"height\", \"internal_id\", \"createdat\", \"size\", \"duration\", \"geo\", \"recordedat\", \"storagefilename\", \"archive\", \"context_id\"];\nFile.prototype._ul4attrs = new Set([\"globals\", \"id\", \"internal_id\", \"url\", \"archive_url\", \"filename\", \"mimetype\", \"width\", \"height\", \"size\", \"duration\", \"geo\", \"recordedat\", \"archive\", \"createdat\", \"context_id\"]);\n\n\nclass GeoType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Geo;\n\t}\n};\n\nlet geotype = new GeoType(\"la\", \"Geo\", \"Geographical coordinates and location information\");\n\n\nexport class Geo extends Base\n{\n\tconstructor(globals, lat, long, info=null)\n\t{\n\t\tsuper(null);\n\t\tthis.globals = globals;\n\t\tthis.lat = lat;\n\t\tthis.long = long;\n\t\tthis.info = info;\n\t}\n\n\t[ul4.symbols.type]()\n\t{\n\t\treturn geotype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<Geo lat=\" + ul4._repr(this.lat) + \" long=\" + ul4._repr(this.long) + \" info=\" + ul4._repr(this.info) + \">\";\n\t}\n};\n\nGeo.prototype._ul4onattrs = [\"globals\", \"lat\", \"long\", \"info\"];\nGeo.prototype._ul4attrs = new Set([\"globals\", \"lat\", \"long\", \"info\"]);\n\n\nclass AttachmentType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Attachment;\n\t}\n};\n\nlet attachmenttype = new AttachmentType(\"la\", \"Attachment\", \"An attachment of a record\");\n\n\nexport class Attachment extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn attachmenttype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<\" + this.constructor.name + \" id=\" + ul4._repr(this.id) + \" label=\" + ul4._repr(this.label) + \">\";\n\t}\n};\n\nAttachment.prototype._ul4onattrs = [\"record\", \"label\", \"active\"];\nAttachment.prototype._ul4attrs = new Set([\"id\", \"record\", \"label\", \"active\"]);\n\n\nclass NoteAttachmentType extends AttachmentType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof NoteAttachment;\n\t}\n};\n\nlet noteattachmenttype = new NoteAttachmentType(\"la\", \"NoteAttachment\", \"A note attachment of a record\");\n\n\nexport class NoteAttachment extends Attachment\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn noteattachmenttype;\n\t}\n};\n\nNoteAttachment.prototype.type = \"noteattachment\";\nNoteAttachment.prototype._ul4onattrs = [...Attachment.prototype._ul4onattrs, \"value\"];\nNoteAttachment.prototype._ul4attrs = new Set([...Attachment.prototype._ul4onattrs, \"value\"]);\n\n\nclass URLAttachmentType extends AttachmentType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof URLAttachment;\n\t}\n};\n\nlet urlattachmenttype = new URLAttachmentType(\"la\", \"URLAttachment\", \"A URL attachment of a record\");\n\n\nexport class URLAttachment extends Attachment\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn urlattachmenttype;\n\t}\n};\n\nURLAttachment.prototype.type = \"urlattachment\";\nURLAttachment.prototype._ul4onattrs = [...Attachment.prototype._ul4onattrs, \"value\"];\nURLAttachment.prototype._ul4attrs = new Set([...Attachment.prototype._ul4onattrs, \"value\"]);\n\n\nclass FileAttachmentType extends AttachmentType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof FileAttachment;\n\t}\n};\n\nlet fileattachmenttype = new FileAttachmentType(\"la\", \"FileAttachment\", \"A file attachment of a record\");\n\n\nexport class FileAttachment extends Attachment\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn fileattachmenttype;\n\t}\n};\n\nFileAttachment.prototype.type = \"fileattachment\";\nFileAttachment.prototype._ul4onattrs = [...Attachment.prototype._ul4onattrs, \"value\"];\nFileAttachment.prototype._ul4attrs = new Set([...Attachment.prototype._ul4onattrs, \"value\"]);\n\n\nclass JSONAttachmentType extends AttachmentType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof JSONAttachment;\n\t}\n};\n\nlet jsonattachmenttype = new JSONAttachmentType(\"la\", \"JSONAttachment\", \"A JSON attachment of a record\");\n\n\nexport class JSONAttachment extends Attachment\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn jsonattachmenttype;\n\t}\n\n\t_dumpUL4ONAttr(name)\n\t{\n\t\tif (name === \"value\")\n\t\t\treturn ul4._asjson(this.value);\n\t\telse\n\t\t\treturn this[name];\n\t}\n\n\t_loadUL4ONAttr(name, value)\n\t{\n\t\tif (name === \"value\")\n\t\t\tthis.value = ul4._fromjson(value);\n\t\telse\n\t\t\tthis[name] = value\n\t}\n};\n\nJSONAttachment.prototype.type = \"jsonattachment\";\nJSONAttachment.prototype._ul4onattrs = [...Attachment.prototype._ul4onattrs, \"value\"];\nJSONAttachment.prototype._ul4attrs = new Set([...Attachment.prototype._ul4onattrs, \"value\"]);\n\n\nclass InstallationType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Installation;\n\t}\n};\n\nlet installationtype = new InstallationType(\"la\", \"Installation\", \"The installation that created an app\");\n\n\nexport class Installation extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn installationtype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<Installation id=\" + ul4._repr(this.id) + \" name=\" + ul4._repr(this.name) + \">\";\n\t}\n};\n\nInstallation.prototype._ul4onattrs = [\"name\"];\nInstallation.prototype._ul4attrs = new Set([\"id\", \"name\"]);\n\n\nclass CategoryType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Category;\n\t}\n};\n\nlet categorytype = new CategoryType(\"la\", \"Category\", \"A navigation category\");\n\n\nexport class Category extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn categorytype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\tlet v = [];\n\t\tlet category = this;\n\t\twhile (category !== null)\n\t\t{\n\t\t\tv.splice(0, 0, category.identifier);\n\t\t\tcategory = category.parent;\n\t\t}\n\t\treturn \"<Category id=\" + ul4._repr(this.id) + \" identifierpath=\" + ul4._repr(v.join(\"/\")) + + \" name=\" + ul4._repr(this.name) + \">\";\n\t}\n};\n\nCategory.prototype._ul4onattrs = [\"identifier\", \"name\", \"order\", \"parent\", \"children\", \"apps\"];\nCategory.prototype._ul4attrs = new Set([\"id\", \"identifier\", \"name\", \"order\", \"parent\", \"children\", \"apps\"]);\n\n\nclass KeyViewType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof KeyView;\n\t}\n};\n\nlet keyviewtype = new KeyViewType(\"la\", \"KeyView\", \"Object granting access to a view template\");\n\n\nexport class KeyView extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn keyviewtype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<KeyView id=\" + ul4._repr(this.id) + \" identifier=\" + ul4._repr(this.identifier) + \">\";\n\t}\n};\n\nKeyView.prototype._ul4onattrs = [\"identifier\", \"name\", \"key\", \"user\"];\nKeyView.prototype._ul4attrs = new Set([\"id\", \"identifier\", \"name\", \"key\", \"user\"]);\n\n\nclass AppParameterType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppParameter;\n\t}\n};\n\nlet appparametertype = new AppParameterType(\"la\", \"AppParameter\", \"A parameter of a LivingApps application\");\n\n\nexport class AppParameter extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn appparametertype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<AppParameter id=\" + ul4._repr(this.id) + \" identifier=\" + ul4._repr(this.identifier) + \">\";\n\t}\n\n\tget app()\n\t{\n\t\tif (this.owner instanceof App)\n\t\t\treturn this.owner;\n\t\treturn null;\n\t}\n};\n\nAppParameter.prototype._ul4onattrs = [\"owner\", \"parent\", \"type\", \"order\", \"identifier\", \"description\", \"value\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\"];\nAppParameter.prototype._ul4attrs = new Set([\"id\", \"owner\", \"parent\", \"app\", \"type\", \"order\", \"identifier\", \"description\", \"value\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\"]);\n\n\nclass MutableAppParameterType extends AppParameterType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MutableAppParameter;\n\t}\n};\n\nlet mutableappparametertype = new MutableAppParameterType(\"la\", \"MutableAppParameter\", \"A mutable parameter of a LivingApps application\");\n\n\nexport class MutableAppParameter extends AppParameter\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn mutableappparametertype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<MutableAppParameter id=\" + ul4._repr(this.id) + \" identifier=\" + ul4._repr(this.identifier) + \">\";\n\t}\n\n\tget app()\n\t{\n\t\tif (this.owner instanceof App)\n\t\t\treturn this.owner;\n\t\treturn null;\n\t}\n};\n\nclass MenuItemType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MenuItem;\n\t}\n};\n\nlet menuitemtype = new MenuItemType(\"la\", \"MenuItem\", \"An additional menu item in an app that links to a target page.\");\n\n\nexport class MenuItem extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn menuitemtype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<MenuItem id=\" + ul4._repr(this.id) + \"identifier=\" + ul4._repr(this.identifier) + \" label=\" + ul4._repr(this.label) + \" type=\" + ul4._repr(this.type) + \">\";\n\t}\n};\n\nMenuItem.prototype._ul4onattrs = [\"app\", \"identifier\", \"label\", \"type\", \"icon\", \"title\", \"target\", \"cssclass\", \"url\", \"order\", \"start_time\", \"end_time\", \"on_app_overview_page\", \"on_app_detail_page\", \"on_form_page\", \"on_iframe_page\", \"on_view_template\", \"on_custom_overview_page\", \"accessible\", \"children\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\"];\nMenuItem.prototype._ul4attrs = new Set([\"id\", \"app\", \"identifier\", \"label\", \"type\", \"icon\", \"title\", \"target\", \"cssclass\", \"url\", \"order\", \"start_time\", \"end_time\", \"on_app_overview_page\", \"on_app_detail_page\", \"on_form_page\", \"on_iframe_page\", \"on_view_template\", \"on_custom_overview_page\", \"accessible\", \"children\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\"]);\n\n\nclass PanelType extends MenuItemType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Panel;\n\t}\n};\n\nlet paneltype = new MenuItemType(\"la\", \"Panel\", \"An additional panel in an app that is displayed on various LivingApps pages and links to a target page.\");\n\n\nexport class Panel extends MenuItem\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn paneltype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<Panel id=\" + ul4._repr(this.id) + \"identifier=\" + ul4._repr(this.identifier) + \" label=\" + ul4._repr(this.label) + \" type=\" + ul4._repr(this.type) + \">\";\n\t}\n};\n\nPanel.prototype._ul4onattrs = [...MenuItem.prototype._ul4onattrs, \"description\", \"description_url\", \"image\", \"row\", \"column\", \"width\", \"height\", \"header_type\", \"header_background\", \"text_color\", \"background_color1\", \"background_color2\"];\nPanel.prototype._ul4attrs = new Set([...MenuItem.prototype._ul4attrs, \"description\", \"description_url\", \"image\", \"row\", \"column\", \"width\", \"height\"]);\n\n\nclass FormType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Form;\n\t}\n};\n\nlet formtype = new FormType(\"la\", \"Form\", \"The input form.\");\n\nexport class Form extends ul4.Proto\n{\n\tconstructor(globals, template)\n\t{\n\t\tsuper();\n\t\tthis.globals = globals;\n\t\tthis.template = template;\n\t\tthis._geo_wired = false;\n\n\t\tfor (let field of globals.record.fields.values())\n\t\t\tthis.wire_field(field);\n\t\tthis.render_template(null);\n\t}\n\n\t[ul4.symbols.type]()\n\t{\n\t\treturn formtype;\n\t}\n\n\tget _dom_button()\n\t{\n\t\treturn document.querySelector(this._sel_form + \" \" + this._sel_button);\n\t}\n\n\tget enabled()\n\t{\n\t\treturn !this._dom_button.disabled;\n\t}\n\n\tset enabled(value)\n\t{\n\t\tthis._dom_button.disabled = !value;\n\t}\n\n\t[ul4.symbols.getattr](key)\n\t{\n\t\tif (key === \"enabled\")\n\t\t\treturn this.enabled;\n\t\telse\n\t\t\tthrow new ul4.AttributeError(this, key);\n\t}\n\n\t[ul4.symbols.setattr](key, value)\n\t{\n\t\tif (key === \"enabled\")\n\t\t\tthis.enabled = ul4._bool(value);\n\t\telse\n\t\t\tthrow new ul4.AttributeError(this, key);\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<\" + this.constructor.name + \" enabled=\" + ul4._repr(this.enabled) + \">\";\n\t}\n\n\ttoString()\n\t{\n\t\treturn this[ul4.symbols.repr]();\n\t}\n\n\trender_template(identifier)\n\t{\n\t\tlet vars = {\n\t\t\t\"datasources\": this.globals.datasources,\n\t\t\t\"record\": this.globals.record,\n\t\t\t\"app\": this.globals.app,\n\t\t\t\"fields\": this.globals.record.fields,\n\t\t\t\"identifier\": identifier\n\t\t};\n\n\t\tlet globalVars = {\n\t\t\t\"globals\": this.globals,\n\t\t\t\"form\": this,\n\t\t\t\"la\": module\n\t\t};\n\n\t\tlet msg = \"LivingApps update template: \";\n\t\tif (identifier === null)\n\t\t\tmsg += \"Initialization\";\n\t\telse\n\t\t\tmsg += \"Value change in \" + ul4._repr(identifier);\n\n\t\tthis.globals.group_logging(msg, () => {\n\t\t\ttry\n\t\t\t{\n\t\t\t\tthis.template.renders(vars, globalVars);\n\t\t\t}\n\t\t\tcatch (exc)\n\t\t\t{\n\t\t\t\tif (console && console.error)\n\t\t\t\t{\n\t\t\t\t\tthis.globals._start_log_message();\n\t\t\t\t\tif (console.group)\n\t\t\t\t\t\tconsole.group(\"UL4 stacktrace\");\n\t\t\t\t\tul4.report_exc(exc);\n\t\t\t\t\tif (console.groupEnd)\n\t\t\t\t\t\tconsole.groupEnd();\n\n\t\t\t\t\tif (console.groupCollapsed)\n\t\t\t\t\t\tconsole.groupCollapsed(\"Javascript stacktrace\");\n\t\t\t\t\tconsole.error(exc);\n\t\t\t\t\tif (console.groupEnd)\n\t\t\t\t\t\tconsole.groupEnd();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\twire_geo()\n\t{\n\t\tif (this._geo_wired)\n\t\t\treturn;\n\n\t\tif (this.globals.app.active_view !== null && navigator.geolocation)\n\t\t{\n\t\t\tlet use_geo = this.globals.app.active_view.use_geo;\n\t\t\tif (use_geo === \"once\" || use_geo === \"watch\")\n\t\t\t{\n\t\t\t\tnavigator.geolocation.getCurrentPosition((position) => {\n\t\t\t\t\tthis.globals.mode = this.globals.mode.substring(0, this.globals.mode.lastIndexOf(\"/\") + 1) + \"geo\";\n\t\t\t\t\tthis.globals.set_current_geo(position);\n\t\t\t\t\tthis.render_template(null);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (use_geo === \"watch\")\n\t\t\t{\n\t\t\t\tnavigator.geolocation.watchPosition((position) => {\n\t\t\t\t\tthis.globals.mode = this.globals.mode.substring(0, this.globals.mode.lastIndexOf(\"/\") + 1) + \"geo\";\n\t\t\t\t\tthis.globals.set_current_geo(position);\n\t\t\t\t\tthis.render_template(null);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tthis._geo_wired = true;\n\t}\n\n\twire_field(field)\n\t{\n\t\tfor (let dom_node of field._dom_controls)\n\t\t{\n\t\t\tdom_node.addEventListener(field._inputevent, (event) => {\n\t\t\t\tthis.wire_geo();\n\t\t\t\tthis.globals.mode = this.globals.mode.substring(0, this.globals.mode.lastIndexOf(\"/\") + 1) + \"input\";\n\t\t\t\tthis.render_template(field.control.identifier);\n\t\t\t});\n\t\t}\n\t}\n};\n\nForm.prototype._ul4attrs = new Set([\"enabled\"]);\nForm.prototype._sel_form = \"#livingapps-form form\";\nForm.prototype._sel_button = \"[type=submit]\";\n\n\nlet classes = [\n\tGlobals,\n\tFlashMessage,\n\tApp,\n\tView,\n\tMenuItem,\n\tPanel,\n\tDataSource,\n\tDataSourceChildren,\n\tRecordChildren,\n\tRecord,\n\tBoolControl,\n\tIntControl,\n\tNumberControl,\n\tTextControl,\n\tEmailControl,\n\tURLControl,\n\tTelControl,\n\tTextAreaControl,\n\tDateControl,\n\tDatetimeMinuteControl,\n\tDatetimeSecondControl,\n\tLookupControl,\n\tLookupSelectControl,\n\tLookupRadioControl,\n\tLookupChoiceControl,\n\tAppLookupControl,\n\tAppLookupSelectControl,\n\tAppLookupRadioControl,\n\tAppLookupChoiceControl,\n\tMultipleLookupControl,\n\tMultipleLookupSelectControl,\n\tMultipleLookupCheckboxControl,\n\tMultipleLookupChoiceControl,\n\tMultipleAppLookupControl,\n\tMultipleAppLookupSelectControl,\n\tMultipleAppLookupCheckboxControl,\n\tMultipleAppLookupChoiceControl,\n\tGeoControl,\n\tFileControl,\n\tFileSignatureControl,\n\tButtonControl,\n\tField,\n\tBoolField,\n\tStringField,\n\tEmailField,\n\tURLField,\n\tTelField,\n\tTextAreaField,\n\tHTMLField,\n\tIntField,\n\tNumberField,\n\tGeoField,\n\tFileField,\n\tFileSignatureField,\n\tDateFieldBase,\n\tDateField,\n\tDatetimeMinuteField,\n\tDatetimeSecondField,\n\tLookupFieldBase,\n\tLookupField,\n\tMultipleLookupField,\n\tAppLookupFieldBase,\n\tAppLookupField,\n\tMultipleAppLookupField,\n\tLookupItem,\n\tViewLookupItem,\n\tLayoutControl,\n\tHTMLLayoutControl,\n\tImageLayoutControl,\n\tButtonLayoutControl,\n\tViewControl,\n\tUser,\n\tFile,\n\tGeo,\n\tNoteAttachment,\n\tURLAttachment,\n\tFileAttachment,\n\tJSONAttachment,\n\tInstallation,\n\tCategory,\n\tKeyView,\n\tAppParameter,\n\tMutableAppParameter\n];\n\nfor (let constructor of classes)\n{\n\tul4.register(\"de.livinglogic.livingapi.\" + constructor.name.toLowerCase(), constructor);\n}\n\nexport const module = new ul4.Module(\n\t\"la\",\n\t\"LivingAPI types\",\n\t{\n\t\tFlashMessage: FlashMessage,\n\t\tFile: File,\n\t\tGeo: Geo,\n\t\tUser: User,\n\t\tKeyView: KeyView,\n\t\tGlobals: Globals,\n\t\tApp: App,\n\t\tTextControl: TextControl,\n\t\tURLControl: URLControl,\n\t\tEmailControl: EmailControl,\n\t\tPasswordControl: PasswordControl,\n\t\tTelControl: TelControl,\n\t\tTextAreaControl: TextAreaControl,\n\t\tHTMLControl: HTMLControl,\n\t\tIntControl: IntControl,\n\t\tNumberControl: NumberControl,\n\t\tDateControl: DateControl,\n\t\tDatetimeMinuteControl: DatetimeMinuteControl,\n\t\tDatetimeSecondControl: DatetimeSecondControl,\n\t\tBoolControl: BoolControl,\n\t\tLookupSelectControl: LookupSelectControl,\n\t\tLookupRadioControl: LookupRadioControl,\n\t\tLookupChoiceControl: LookupChoiceControl,\n\t\tAppLookupSelectControl: AppLookupSelectControl,\n\t\tAppLookupRadioControl: AppLookupRadioControl,\n\t\tAppLookupChoiceControl: AppLookupChoiceControl,\n\t\tMultipleLookupSelectControl: MultipleLookupSelectControl,\n\t\tMultipleLookupCheckboxControl: MultipleLookupCheckboxControl,\n\t\tMultipleLookupChoiceControl: MultipleLookupChoiceControl,\n\t\tMultipleAppLookupSelectControl: MultipleAppLookupSelectControl,\n\t\tMultipleAppLookupCheckboxControl: MultipleAppLookupCheckboxControl,\n\t\tMultipleAppLookupChoiceControl: MultipleAppLookupChoiceControl,\n\t\tFileControl: FileControl,\n\t\tFileSignatureControl: FileSignatureControl,\n\t\tGeoControl: GeoControl,\n\t\tViewControl: ViewControl,\n\t\tRecordChildren: RecordChildren,\n\t\tRecord: Record,\n\t\tFileAttachment: FileAttachment,\n\t\tURLAttachment: URLAttachment,\n\t\tNoteAttachment: NoteAttachment,\n\t\tJSONAttachment: JSONAttachment,\n\t\tInstallation: Installation,\n\t\tHTMLLayoutControl: HTMLLayoutControl,\n\t\tImageLayoutControl: ImageLayoutControl,\n\t\tButtonLayoutControl: ButtonLayoutControl,\n\t\tView: View,\n\t\tDataSource: DataSource,\n\t\tDataSourceChildren: DataSourceChildren,\n\t\tLookupItem: LookupItem,\n\t\tViewLookupItem: ViewLookupItem,\n\t\tCategory: Category,\n\t\tAppParameter: AppParameter,\n\t\tMutableAppParameter: MutableAppParameter,\n\t\tMenuItem: MenuItem,\n\t\tPanel: Panel,\n\t}\n);\n"],"names":["element","name","dom_node","document","createElement","args","arg","appendChild","createTextNode","ismap","Map","isobject","ul4","_isobject","Object","entries","value","setAttribute","_append_param_to_url","urlparams","_islist","_isset","append","_str","url_with_params","url","URLSearchParams","params","param","length","prototype","toString","call","Proto","_typeof","__proto__","replace","Base","id","this","encoder","i","_ul4onattrs","dump","_dumpUL4ONAttr","decoder","iter","loadcontent","iteritem","next","done","_loadUL4ONAttr","_setDefaultUL4ONAttr","symbols","getattr","_ul4attrs","has","realvalue","bind","_ul4_name","_ul4_signature","_ul4_needsobject","_ul4_needscontext","startsWith","hasOwnProperty","AttributeError","setattr","repr","constructor","Handler","record","globalstype","Type","obj","Globals","version","hostname","platform","user","lang","datasources","app","mode","maxdbactions","maxtemplateruntime","flashmessages","view_template_id","email_template_id","handler","_log_stack","_current_geo","type","geo1","geo2","sqsin","x","Math","sin","sqcos","sqsos","cos","deg2rad","PI","flat","lat1","lat","long1","lat2","F","G","l","S","C","w","atan","sqrt","D","T","H2","image","width","height","enlarge","gravity","quality","rotate","blur","sharpen","format","cache","filename","File","archive_url","encodeURIComponent","result","rotatet","data","size","_repr","position","Geo","coords","latitude","longitude","msg_bool_true","msg_bool_false","messages","map","m","join","header","push","output","console","groupEnd","pop","callback","begin_logging","end_logging","level","group","message","_start_log_message","debug","_make_log_message","info","warn","error","Set","expose","log_debug","log_info","log_warning","log_error","dist","current_geo","scaled_url","flashmessagetype","FlashMessage","title","apptype","App","values","globals","save","identifier","active_view","layout_controls","Record","_ismap","keys","fields","ArgumentError","_make_fields","TypeError","_list","dicttype","items","controls","substr","get","_active_view","view","views","ValueError","View","active_views","insert","template_url","new_embedded_url","new_standalone_url","viewtype","datasourcetype","DataSource","DataSourceChildren","datasourcetypechildren","RecordChildren","recordtypechildren","recordtype","createdat","createdby","updatedat","updatedby","updatecount","_sparsevalues","_values","_fields","details","_children","attachments","errors","_sparsefielderrors","_sparsefieldlookupdata","_is_deleted","_is_new","maxlevel","control","priority","fieldvalue","value_as_text","label","msg_no_fields","defaults","lookupdata","field","fieldtype","set","_sparselookupdata","_in_form","v","is_empty","state","is_dirty","recordchildren","datasourcechildren","records","has_errors","key","edit_standalone_url","edit_embedded_url","display_standalone_url","display_embedded_url","search","fieldsearch","_bool","children","_get","update","FieldType","Field","_label","_lookupdata","_value","_this4","_dirty","_enabled","_writable","_visible","_required","_top","_left","_get_dom_value","oldvalue","change","_validate","_ne","_set_dom_value","_dom_label","textContent","_mode","_set_dom_label","top","_dom_root","style","left","searchvalue","_type","minlength","maxlength","_cssclass_root","_sel_root","_cssclass_control","querySelector","_sel_label","_sel_control","querySelectorAll","_dom_control","hidden","required","classList","contains","disabled","_dom_controls","toggle","s","visible","enabled","writable","_inputevent","boolfieldtype","BoolField","msg_field_required","msg_bool_truerequired","includes","toLowerCase","msg_field_wrong_type","checked","msg_bool","intfieldtype","IntField","test","parseInt","_parse","msg_number_format","round","testvalue","readonly","readOnly","numberfieldtype","NumberField","seps","commas","dots","c","convert","floatvalue","parseFloat","isNaN","_bound_value","precision","_round","minimum","maximum","toFixed","StringFieldType","StringField","stringfieldtype","msg_string_tooshort","msg_string_toolong","passwordfieldtype","PasswordField","emailfieldtype","EmailField","msg_email_format","urlfieldtype","URLField","URL","exc","msg_url_format","protocol","telfieldtype","TelField","msg_tel_format","textareafieldtype","TextAreaField","htmlfieldtype","HTMLField","geofieldtype","GeoField","endsWith","JSON","parse","geometry","coordinates","properties","formatted_address","dom_value","_asjson","FileFieldType","FileField","filefieldtype","filesignaturefieldtype","FileSignatureField","DateFieldBaseType","DateFieldBase","datefieldbasetype","_format","formatstring","year","month","day","hour","minute","second","ispm","_int","len","min","max","substring","Date","_convert","Date_","_date","formatstrings_parse","msg_date_format","date","datefieldtype","DateField","getFullYear","getMonth","getDate","datetimeminutefieldtype","DatetimeMinuteField","setSeconds","setMilliseconds","datetimesecondfieldtype","DatetimeSecondField","ChoiceFieldBase","selected","none_key","lookup_data","none_selected","getAttribute","add","new_children","_make_option","none_label","msg_nothing_selected","_make_label","replaceChildren","dom_input","dom_none_input","dom_label","display","innerText","LookupFieldBaseType","LookupFieldBase","lookupfieldbasetype","_set_dom_lookupdata","LookupItem","lookupitem","undefined","autoexpandable","search_lookupitem","msg_lookup_unknownkey","msg_lookup_wrongitem","LookupFieldType","LookupField","lookupfieldtype","_find_lookupitem","lookupradiofieldtype","LookupRadioField","node","_set_dom_lookupdata_input","lookupselectfieldtype","LookupSelectField","_set_dom_lookupdata_select","lookupchoicefieldtype","LookupChoiceField","MultipleLookupFieldType","MultipleLookupField","multiplelookupfieldtype","item","islist","newvalue","singlechange","multiplelookupcheckboxfieldtype","MultipleLookupCheckboxField","multiplelookupselectfieldtype","MultipleLookupSelectField","option","multiplelookupchoicefieldtype","MultipleLookupChoiceField","AppLookupFieldBaseType","AppLookupFieldBase","applookupfieldbasetype","lookup_app","as_text","lookup_controls","msg_applookup_unknownkey","msg_applookup_wrongrecord","AppLookupFieldType","AppLookupField","applookupfieldtype","_find_record","applookupselectfieldtype","AppLookupSelectField","applookupradiofieldtype","AppLookupRadioField","applookupchoicefieldtype","AppLookupChoiceField","_search_url","_search_param_name","_target_param_name","search_url","search_param_name","target_param_name","MultipleAppLookupFieldType","MultipleAppLookupField","multipleapplookupfieldtype","multipleapplookupcheckboxfieldtype","MultipleAppLookupCheckboxField","multipleapplookupselectfieldtype","MultipleAppLookupSelectField","multipleapplookupchoicefieldtype","MultipleAppLookupChoiceField","ControlType","Control","controltype","subtype","view_control","_view_control","z_index","liveupdate","tabindex","labelpos","labelwidth","autoalign","boolcontroltype","BoolControl","_logsearch","operator","intcontroltype","IntControl","PlaceholderControlType","PlaceholderControld","placeholdercontroltype","PlaceholderControl","placeholder","numbercontroltype","NumberControl","minvalue","maxvalue","StringControlType","StringControl","stringcontroltype","gender","firstname","surname","email","streetname","streetnumber","street","zip","phone","fax","company","city","summary","interests","personal_website","company_website","department","today","_user_placeholder","indexOf","textcontroltype","TextControl","passwordcontroltype","PasswordControl","emailcontroltype","EmailControl","urlcontroltype","URLControl","telcontroltype","TelControl","textareacontroltype","TextAreaControl","encrypted","htmlcontroltype","HTMLControl","DateControlType","DateControl","datecontroltype","_formatstrings","_formatstrings_parse","language","_suffixes","datetimeminutecontroltype","DatetimeMinuteControl","now","datetimesecondcontroltype","DatetimeSecondControl","LookupControlType","LookupControl","lookupcontroltype","lookupnonekey","lookupnonelabel","lookupselectcontroltype","LookupSelectControl","lookupradiocontroltype","LookupRadioControl","lookupchoicecontroltype","LookupChoiceControl","AppLookupControlType","AppLookupControl","applookupcontroltype","applookupselectcontroltype","AppLookupSelectControl","applookupradiocontroltype","AppLookupRadioControl","applookupchoicecontroltype","AppLookupChoiceControl","MultipleLookupControlType","MultipleLookupControl","multiplelookupcontroltype","defaultValue","multiplelookupcheckboxcontroltype","MultipleLookupCheckboxControl","multiplelookupselectcontroltype","MultipleLookupSelectControl","multiplelookupchoicecontroltype","MultipleLookupChoiceControl","MultipleAppLookupControlType","MultipleAppLookupControl","multipleapplookupcontroltype","multipleapplookupselectcontroltype","MultipleAppLookupSelectControl","multipleapplookupcheckboxcontroltype","MultipleAppLookupCheckboxControl","multipleapplookupchoicecontroltype","MultipleAppLookupChoiceControl","geocontroltype","GeoControl","FileControlType","FileControl","filecontroltype","filesignaturecontroltype","FileSignatureControl","buttoncontroltype","ButtonControl","lookupitemtype","view_lookupitem","_view_lookupitem","viewlookupitemtype","ViewLookupItem","LayoutControlType","LayoutControl","layoutcontroltype","htmllayoutcontroltype","HTMLLayoutControl","innerHTML","imagelayoutcontroltype","ImageLayoutControl","_image","original","img","buttonlayoutcontroltype","ButtonLayoutControl","viewcontroltype","ViewControl","usertype","User","filetype","contextid","archive","geotype","long","AttachmentType","Attachment","attachmenttype","noteattachmenttype","NoteAttachment","urlattachmenttype","URLAttachment","fileattachmenttype","FileAttachment","jsonattachmenttype","JSONAttachment","_fromjson","installationtype","Installation","categorytype","Category","category","splice","parent","keyviewtype","KeyView","AppParameterType","AppParameter","appparametertype","owner","mutableappparametertype","MutableAppParameter","MenuItemType","MenuItem","menuitemtype","paneltype","Panel","formtype","Form","template","_geo_wired","wire_field","render_template","_sel_form","_sel_button","_dom_button","vars","globalVars","module","msg","group_logging","_this8","renders","report_exc","groupCollapsed","navigator","geolocation","use_geo","getCurrentPosition","_this9","lastIndexOf","set_current_geo","watchPosition","addEventListener","event","_this10","wire_geo","register","Module"],"mappings":"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"}
1
+ {"version":3,"file":"livingapi.js","sources":["../../src/livingapi.js"],"sourcesContent":["/*!\n * LivingAPI JavaScript Library\n * https://my.living-apps.de/docs/LivingAPI.html\n *\n * Copyright 2017-2024 by LivingLogic AG, Bayreuth/Germany\n * Copyright 2017-2024 by Walter Dörwald\n *\n * All Rights Reserved\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n// Version of this Javascript package\nimport { version } from '../package.json';\n\nexport { version };\n\nimport * as ul4 from '@livinglogic/ul4';\n\n\nexport function element(name, ...args)\n{\n\tlet dom_node = document.createElement(name);\n\tfor (let arg of args)\n\t{\n\t\tif (typeof(arg) === \"string\")\n\t\t\tdom_node.appendChild(document.createTextNode(arg));\n\t\tlet ismap = arg instanceof Map;\n\t\tlet isobject = ul4._isobject(arg);\n\t\tif (ismap || isobject)\n\t\t{\n\t\t\tif (isobject)\n\t\t\t\targ = Object.entries(arg);\n\t\t\tfor (let [name, value] of arg)\n\t\t\t{\n\t\t\t\tif (value !== null)\n\t\t\t\t\tdom_node.setAttribute(name, value);\n\t\t\t}\n\t\t}\n\t}\n\treturn dom_node;\n}\n\n\nfunction _append_param_to_url(urlparams, name, value)\n{\n\tif (ul4._islist(value) || ul4._isset(value))\n\t{\n\t\tfor (let v of value)\n\t\t\t_append_param_to_url(urlparams, name, v);\n\t}\n\telse if (typeof(value) === \"string\")\n\t\turlparams.append(name, value);\n\telse if (value !== null)\n\t\turlparams.append(name, ul4._str(value));\n}\n\nexport function url_with_params(url, ...params)\n{\n\tlet urlparams = new URLSearchParams();\n\n\tfor (let param of params)\n\t{\n\t\tif (ul4._islist(param) && param.length == 2)\n\t\t{\n\t\t\t_append_param_to_url(urlparams, ...param);\n\t\t}\n\t\telse if (Object.prototype.toString.call(param) === \"[object Object]\" && !(param instanceof ul4.Proto))\n\t\t{\n\t\t\tfor (let name in param)\n\t\t\t\t_append_param_to_url(urlparams, name, param[name]);\n\t\t}\n\t\telse if (param !== null && typeof(param) === \"object\" && typeof(param.__proto__) === \"object\" && param.__proto__ === Map.prototype)\n\t\t{\n\t\t\tfor (let [name, value] of param)\n\t\t\t\t_append_param_to_url(urlparams, name, value);\n\t\t}\n\t}\n\turlparams = urlparams.toString().replace(\"+\", \"%20\");\n\tif (urlparams.length > 0)\n\t\turl += \"?\" + urlparams;\n\treturn url;\n}\n\nexport class Base extends ul4.Proto\n{\n\tconstructor(id)\n\t{\n\t\tsuper();\n\t\tthis.id = id;\n\t}\n\n\tget ul4onid()\n\t{\n\t\treturn this.id;\n\t}\n\n\tul4ondump(encoder)\n\t{\n\t\tfor (let i = 0; i < this._ul4onattrs.length; ++i)\n\t\t\tencoder.dump(this._dumpUL4ONAttr(this._ul4onattrs[i]));\n\t}\n\n\t_dumpUL4ONAttr(name)\n\t{\n\t\treturn this[name];\n\t}\n\n\tul4onload(decoder)\n\t{\n\t\tlet i = 0;\n\t\tfor (let iter = decoder.loadcontent(); ; ++i)\n\t\t{\n\t\t\tlet iteritem = iter.next();\n\t\t\tif (iteritem.done)\n\t\t\t\tbreak;\n\t\t\tif (i < this._ul4onattrs.length)\n\t\t\t\tthis._loadUL4ONAttr(this._ul4onattrs[i], iteritem.value);\n\t\t}\n\t\tfor (; i < this._ul4onattrs.length; ++i)\n\t\t\tthis._setDefaultUL4ONAttr(this._ul4onattrs[i]);\n\t}\n\n\t_loadUL4ONAttr(name, value)\n\t{\n\t\tthis[name] = value;\n\t}\n\n\t_setDefaultUL4ONAttr(name)\n\t{\n\t\tthis[name] = null;\n\t}\n\n\t[ul4.symbols.getattr](name)\n\t{\n\t\tif (this._ul4attrs.has(name))\n\t\t{\n\t\t\tlet value = this[name];\n\t\t\tif (typeof(value) === \"function\")\n\t\t\t{\n\t\t\t\tlet realvalue = value.bind(this);\n\t\t\t\trealvalue._ul4_name = value._ul4_name || value.name;\n\t\t\t\trealvalue._ul4_signature = value._ul4_signature;\n\t\t\t\trealvalue._ul4_needsobject = value._ul4_needsobject;\n\t\t\t\trealvalue._ul4_needscontext = value._ul4_needscontext;\n\t\t\t\treturn realvalue;\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t\telse if (name.startsWith(\"x_\"))\n\t\t{\n\t\t\treturn this.hasOwnProperty(name) ? this[name] : null;\n\t\t}\n\t\tthrow new ul4.AttributeError(this, name);\n\t}\n\n\t[ul4.symbols.setattr](name, value)\n\t{\n\t\tif (name.startsWith(\"x_\"))\n\t\t{\n\t\t\tthis[name] = value;\n\t\t}\n\t\telse\n\t\t\tthrow new ul4.AttributeError(this, name);\n\t}\n\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<\" + this.constructor.name + \">\";\n\t}\n\n\ttoString()\n\t{\n\t\treturn this[ul4.symbols.repr]();\n\t}\n};\n\n\nexport class Handler\n{\n\tsave(record)\n\t{\n\t}\n\n\tdelete(record)\n\t{\n\t}\n};\n\n\nclass GlobalsType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Globals;\n\t}\n};\n\nlet globalstype = new GlobalsType(\"la\", \"Globals\", \"Global information\");\n\n\nexport class Globals extends Base\n{\n\tconstructor(id)\n\t{\n\t\tsuper(id);\n\t\tthis.version = null;\n\t\tthis.hostname = null;\n\t\tthis.platform = null;\n\t\tthis.user = null;\n\t\tthis.lang = null;\n\t\tthis.datasources = null;\n\t\tthis.app = null;\n\t\tthis.record = null;\n\t\tthis.mode = null;\n\t\tthis.maxdbactions = null;\n\t\tthis.maxtemplateruntime = null;\n\t\tthis.flashmessages = null;\n\t\tthis.view_template_id = null;\n\t\tthis.email_template_id = null;\n\t\tthis.handler = new Handler();\n\t\tthis._log_stack = [];\n\t\tthis._current_geo = null;\n\t}\n\n\t[ul4.symbols.type]()\n\t{\n\t\treturn globalstype;\n\t}\n\n\t// distance between two geo coordinates (see https://de.wikipedia.org/wiki/Orthodrome#Genauere_Formel_zur_Abstandsberechnung_auf_der_Erde)\n\tdist(geo1, geo2)\n\t{\n\t\tlet sqsin = function sqsin(x) {x = Math.sin(x); return x*x};\n\t\tlet sqcos = function sqsos(x) {x = Math.cos(x); return x*x};\n\t\tconst deg2rad = Math.PI/180; // Conversion factor degree -> radians\n\t\tconst radius = 6378.137; // Equatorial radius of earth in km\n\t\tconst flat = 1/298.257223563; // Earth flattening\n\n\t\tconst lat1 = geo1.lat * deg2rad;\n\t\tconst long1 = geo1.long * deg2rad;\n\t\tconst lat2 = geo2.lat * deg2rad;\n\t\tconst long2 = geo2.long * deg2rad;\n\t\tconst F = (lat1 + lat2)/2;\n\t\tconst G = (lat1 - lat2)/2;\n\t\tconst l = (long1 - long2)/2;\n\t\tconst S = sqsin(G) * sqcos(l) + sqcos(F) * sqsin(l);\n\t\tconst C = sqcos(G) * sqcos(l) + sqsin(F) * sqsin(l);\n\t\tconst w = Math.atan(Math.sqrt(S/C));\n\t\tconst D = 2 * w * radius;\n\t\tif (D === 0.0)\n\t\t\t/* The \"correction\" calculation below would fail if the raw distance is 0 */\n\t\t\treturn D;\n\t\tconst T = Math.sqrt(S*C)/w;\n\t\tconst H1 = (3*T-1)/(2*C);\n\t\tconst H2 = (3*T+1)/(2*S);\n\t\tconst s = D * (1 + flat * H1 * sqsin(F) * sqcos(G) - flat * H2 * sqcos(F) * sqsin(G));\n\t\treturn s;\n\t}\n\n\tscaled_url(image, width, height, type=\"fill\", enlarge=true, gravity=\"sm\", quality=null, rotate=null, blur=null, sharpen=null, format=null, cache=true)\n\t{\n\t\tlet filename = null;\n\n\t\tif (image instanceof File)\n\t\t{\n\t\t\timage = image.archive_url;\n\t\t\tfilename = encodeURIComponent(image.filename);\n\t\t\tif (filename != image.filename)\n\t\t\t\tfilename = null;\n\t\t}\n\n\t\tlet result = \"https://\" + this.hostname;\n\n\t\tif (cache)\n\t\t\tresult += \"/imgproxycache/insecure\";\n\t\telse\n\t\t\tresult += \"/imgproxy/insecure\";\n\n\t\tif (type !== \"fit\")\n\t\t\tresult += \"/rt:\" + type;\n\n\t\tif (width !== null && width !== undefined)\n\t\t\tresult += \"/w:\" + width;\n\n\t\tif (height !== null && height !== undefined)\n\t\t\tresult += \"/h:\" + height;\n\n\t\tif (enlarge)\n\t\t\tresult += \"/el:1\";\n\n\t\tif (gravity !== null && gravity !== undefined)\n\t\t\tresult += \"/g:\" + gravity;\n\n\t\tif (quality !== null && quality !== undefined)\n\t\t\tresult += \"/q:\" + quality;\n\n\t\tif (rotate !== null && rotate % 360 != 0)\n\t\t\tresult += \"/rot:\" + rotatet;\n\n\t\tif (blur !== null && blur !== undefined)\n\t\t\tresult += \"/bl:\" + blur;\n\n\t\tif (sharpen !== null && sharpen !== undefined)\n\t\t\tresult += \"/sh:\" + sharpen;\n\n\t\tif (format !== null && format !== undefined)\n\t\t\tresult += \"/f:\" + format;\n\n\t\tif (filename !== null && filename !== undefined)\n\t\t\tresult += \"/fn:\" + filename;\n\n\t\tresult += \"/plain/\" + encodeURIComponent(image);\n\n\t\treturn result;\n\t}\n\n\tqrcode_url(data, size)\n\t{\n\t\treturn \"https://\" + this.hostname + \"/qr/generate?data=\" + encodeURIComponent(data) + \"&size=\" + encodeURIComponent(size);\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<Globals version=\" + ul4._repr(this.version) + \" mode=\" + ul4._repr(this.mode) + \">\";\n\t}\n\n\tcurrent_geo()\n\t{\n\t\treturn this._current_geo;\n\t}\n\n\tset_current_geo(position)\n\t{\n\t\tthis._current_geo = new Geo(this, position.coords.latitude, position.coords.longitude);\n\t}\n\n\t_in_form()\n\t{\n\t\treturn this.mode !== null && this.mode.startsWith(\"form/\");\n\t}\n\n\tmsg_bool(value)\n\t{\n\t\tswitch (value)\n\t\t{\n\t\t\tcase true:\n\t\t\t\treturn this.msg_bool_true();\n\t\t\tcase false:\n\t\t\t\treturn this.msg_bool_false();\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\t}\n\n\tmsg_bool_true(value)\n\t{\n\t\tswitch (this.lang)\n\t\t{\n\t\t\tcase \"de\":\n\t\t\t\treturn \"Ja\";\n\t\t\tdefault:\n\t\t\t\treturn \"Yes\";\n\t\t}\n\t}\n\n\tmsg_bool_false(value)\n\t{\n\t\tswitch (this.lang)\n\t\t{\n\t\t\tcase \"de\":\n\t\t\t\treturn \"Nein\";\n\t\t\tdefault:\n\t\t\t\treturn \"No\";\n\t\t}\n\t}\n\n\tmsg_no_fields()\n\t{\n\t\tswitch (this.lang)\n\t\t{\n\t\t\tcase \"de\":\n\t\t\t\treturn \"(Keine Felder gefunden)\";\n\t\t\tdefault:\n\t\t\t\treturn \"(No fields found)\";\n\t\t}\n\t}\n\n\tmsg_nothing_selected()\n\t{\n\t\tswitch (this.lang)\n\t\t{\n\t\t\tcase \"de\":\n\t\t\t\treturn \"(Nichts ausgewählt)\";\n\t\t\tdefault:\n\t\t\t\treturn \"(Nothing selected)\";\n\t\t}\n\t}\n\n\t_make_log_message(messages)\n\t{\n\t\treturn messages\n\t\t\t.map(m => typeof(m) !== \"string\" ? ul4._repr(m) : m)\n\t\t\t.join(\" \")\n\t\t;\n\t}\n\n\tbegin_logging(header)\n\t{\n\t\tthis._log_stack.push({header: header, output: false});\n\t}\n\n\tend_logging()\n\t{\n\t\tif (this._log_stack)\n\t\t{\n\t\t\tif (this._log_stack[this._log_stack.length-1].output && console && console.groupEnd)\n\t\t\t\tconsole.groupEnd();\n\t\t\tthis._log_stack.pop();\n\t\t}\n\t}\n\n\tgroup_logging(header, callback)\n\t{\n\t\tthis.begin_logging(header);\n\t\ttry\n\t\t{\n\t\t\tcallback();\n\t\t}\n\t\tfinally\n\t\t{\n\t\t\tthis.end_logging();\n\t\t}\n\t}\n\n\t_start_log_message()\n\t{\n\t\tfor (let level of this._log_stack)\n\t\t{\n\t\t\tif (!level.output)\n\t\t\t{\n\t\t\t\tif (console && console.group)\n\t\t\t\t\tconsole.group(level.header)\n\t\t\t\tlevel.output = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tlog_debug(message)\n\t{\n\t\tthis._start_log_message();\n\t\tif (console && console.debug)\n\t\t\tconsole.debug(this._make_log_message(message));\n\t}\n\n\tlog_info(message)\n\t{\n\t\tthis._start_log_message();\n\t\tif (console && console.info)\n\t\t\tconsole.info(this._make_log_message(message));\n\t}\n\n\tlog_warning(message)\n\t{\n\t\tthis._start_log_message();\n\t\tif (console && console.warn)\n\t\t\tconsole.warn(this._make_log_message(message));\n\t}\n\n\tlog_error(message)\n\t{\n\t\tthis._start_log_message();\n\t\tif (console && console.error)\n\t\t\tconsole.error(this._make_log_message(message));\n\t}\n\n\tmy_apps_url()\n\t{\n\t\treturn \"https://\" + this.hostname + \"/apps.htm\";\n\t}\n\n\tmy_tasks_url()\n\t{\n\t\treturn \"https://\" + this.hostname + \"/xist4c/web/aufgaben_id_393_.htm\";\n\t}\n\n\tcatalog_url()\n\t{\n\t\treturn \"https://\" + this.hostname + \"/katalog/home.htm\";\n\t}\n\n\tchats_url()\n\t{\n\t\treturn \"https://\" + this.hostname + \"/chats.htm\";\n\t}\n\n\tprofile_url()\n\t{\n\t\treturn \"https://\" + this.hostname + \"/profil/index.htm\";\n\t}\n\n\taccount_url()\n\t{\n\t\treturn \"https://\" + this.hostname + \"/account.htm\";\n\t}\n\n\tlogout_url()\n\t{\n\t\treturn \"https://\" + this.hostname + \"/login.htm?logout=standardCug\";\n\t}\n};\n\nGlobals.prototype._ul4onattrs = [\"version\", \"platform\", \"user\", \"maxdbactions\", \"maxtemplateruntime\", \"lang\", \"datasources\", \"hostname\", \"app\", \"record\", \"mode\", \"view_template_id\", \"email_template_id\", \"view_id\"];\nGlobals.prototype._ul4attrs = new Set([\"version\", \"hostname\", \"platform\", \"user\", \"lang\", \"datasources\", \"app\", \"record\", \"maxdbactions\", \"maxtemplateruntime\", \"flashmessages\", \"mode\", \"scaled_url\", \"qrcode_url\", \"dist\", \"current_geo\", \"log_debug\", \"log_info\", \"log_warning\", \"log_error\", \"my_apps_url\", \"my_tasks_url\", \"catalog_url\", \"chats_url\", \"profile_url\", \"account_url\", \"logout_url\"]);\nul4.expose(Globals.prototype.log_debug, [\"message\", \"*\"]);\nul4.expose(Globals.prototype.log_info, [\"message\", \"*\"]);\nul4.expose(Globals.prototype.log_warning, [\"message\", \"*\"]);\nul4.expose(Globals.prototype.log_error, [\"message\", \"*\"]);\nul4.expose(Globals.prototype.dist, [\"geo1\", \"pk\", \"geo2\", \"pk\"]);\nul4.expose(Globals.prototype.current_geo, []);\nul4.expose(Globals.prototype.scaled_url, [\n\t\"image\", \"p\",\n\t\"width\", \"p\",\n\t\"height\", \"p\",\n\t\"type\", \"k=\", \"fill\",\n\t\"enlarge\", \"k=\", true,\n\t\"gravity\", \"k=\", \"sm\",\n\t\"quality\", \"k=\", null,\n\t\"rotate\", \"k=\", null,\n\t\"blur\", \"k=\", null,\n\t\"sharpen\", \"k=\", null,\n\t\"format\", \"k=\", null,\n\t\"cache\", \"k=\", true\n]);\n\n\nclass FlashMessageType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof FlashMessage;\n\t}\n};\n\nlet flashmessagetype = new FlashMessageType(\"la\", \"FlashMessage\", \"A flash message in a web page\");\n\n\nexport class FlashMessage extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn flashmessagetype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<FlashMessage type=\" + ul4._repr(this.type) + \" title=\" + ul4._repr(this.title) + \">\";\n\t}\n};\n\nFlashMessage.prototype._ul4onattrs = [\"timestamp\", \"type\", \"title\", \"message\"];\nFlashMessage.prototype._ul4attrs = new Set([\"timestamp\", \"type\", \"title\", \"message\"]);\n\n\nclass AppType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof App;\n\t}\n};\n\nlet apptype = new AppType(\"la\", \"App\", \"A LivingApps application\");\n\n\nexport class App extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn apptype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<App id=\" + ul4._repr(this.id) + \" name=\" + ul4._repr(this.name) + \">\";\n\t}\n\n\tinsert(values={})\n\t{\n\t\tlet record = this[ul4.symbols.call](values);\n\t\tthis.globals.handler.save(this);\n\t\treturn record;\n\t}\n\n\ttemplate_url(identifier, record=null, params)\n\t{\n\t\tlet url = \"https://\" + this.globals.hostname + \"/gateway/apps/\" + this.id;\n\t\tif (record !== null)\n\t\t\turl += \"/\" + record.id;\n\t\treturn url_with_params(url, ['template', identifier], params);\n\t}\n\n\tnew_embedded_url(params)\n\t{\n\t\tlet url = \"https://\" + this.globals.hostname + \"/dateneingabe/\" + this.id + \"/new\";\n\t\treturn url_with_params(url, params);\n\t}\n\n\tnew_standalone_url(params)\n\t{\n\t\tlet url = \"https://\" + this.globals.hostname + \"/gateway/apps/\" + this.id + \"/new\";\n\t\treturn url_with_params(url, params);\n\t}\n\n\thome_url()\n\t{\n\t\treturn \"https://\" + this.globals.hostname + \"/apps/\" + this.id + \".htm\";\n\t}\n\n\tdatamanagement_url()\n\t{\n\t\treturn \"https://\" + this.globals.hostname + \"/_id_36_.htm?uuid=\" + this.id + \"&dId=\" + this.id + \"&resetInfo=true&templateIdentifier=created_\" + this.id;\n\t}\n\n\timport_url()\n\t{\n\t\treturn \"https://\" + this.globals.hostname + \"/import-export/\"+ this.id + \".htm\";\n\t}\n\n\ttasks_url()\n\t{\n\t\treturn \"https://\" + this.globals.hostname + \"/_id_1073_.htm?uuid=\" + this.id + \"&dId=\" + this.id + \"&p_tpl_uuid=\" + this.id + \"&resetInfo=true&templateIdentifier=created_task_\" + this.id;\n\t}\n\n\t// formbuilder_url()\n\t// {\n\t// \tlet lang = this.globals.lang\n\t// \tif (!lang)\n\t// \t\tlang = \"de\"\n\t// \tlet tpl_id = \"???\"\n\t// \tlet cl_id = \"???\"\n\t// \treturn \"https://\" + this.globals.hostname + \"/formbuilder/index.html?lang=\" + lang + \"&searchDescription=\" + tpl_id + \"&p_tpl_uuid=\" + this.id + \"&p_cl_id=\" + cl_id;\n\t// }\n\n\t// tasks_config_url()\n\t// {\n\t// \tlet tpl_id = \"???\"\n\t// \treturn \"https://\" + this.globals.hostname + \"/konfiguration/aufgaben.htm?com.livinglogic.cms.apps.search.model.SearchState.search_submit=true&searchDescription=\" + tpl_id + \"&dId=\" + this.id;\n\t// }\n\n\tdatamanagement_config_url()\n\t{\n\t\treturn \"https://\" + this.globals.hostname + \"/datenmanagement-konfigurieren/\" + this.id + \".htm\";\n\t}\n\n\tpermissions_url()\n\t{\n\t\treturn \"https://\" + this.globals.hostname + \"/_id_833_.htm?uuid=\" + this.id + \"&dId=\" + this.id + \"&resetInfo=true\";\n\t}\n\n\tdatamanageview_url(identifier)\n\t{\n\t\treturn \"https://\" + this.globals.hostname + \"/_id_36_.htm?uuid=\" + this.id + \"&dId=\" + this.id + \"&resetInfo=true&templateIdentifier=created_\" + this.id + \"_datamanage_master_\" + identifier;\n\t}\n\n\tget layout_controls()\n\t{\n\t\tif (this.active_view === null)\n\t\t\treturn new Map();\n\t\treturn this.active_view.layout_controls;\n\t}\n\n\t[ul4.symbols.call](values={})\n\t{\n\t\tlet record = new Record(null, this);\n\t\tif (ul4._ismap(values))\n\t\t{\n\t\t\tfor (let identifier of values.keys())\n\t\t\t{\n\t\t\t\tif (!record.fields.has(identifier))\n\t\t\t\t\tthrow new ul4.ArgumentError(ul4._repr(this) + \"() get an unexpected keyword argument \" + ul4._repr(identifier));\n\t\t\t}\n\t\t\trecord._make_fields(true, values, null, null);\n\t\t}\n\t\telse if (ul4._isobject(values))\n\t\t{\n\t\t\tfor (let identifier in values)\n\t\t\t{\n\t\t\t\tif (!record.fields.has(identifier))\n\t\t\t\t\tthrow new ul4.ArgumentError(ul4._repr(this) + \"() get an unexpected keyword argument \" + ul4._repr(identifier));\n\t\t\t}\n\t\t\trecord._make_fields(true, new Map(ul4._list(ul4.dicttype.items(values))), null, null);\n\t\t}\n\t\telse\n\t\t\tthrow new ul4.TypeError(\"values must be an object or a Map\");\n\t\treturn record;\n\t}\n\n\t[ul4.symbols.getattr](name)\n\t{\n\t\tif (name.startsWith(\"c_\"))\n\t\t{\n\t\t\tif (!this.controls.has(name.substr(2)))\n\t\t\t\tthrow new ul4.AttributeError(this, name);\n\t\t\treturn this.controls.get(name.substr(2));\n\t\t}\n\t\telse if (name.startsWith(\"lc_\"))\n\t\t{\n\t\t\tif (this.layout_controls === null || !this.layout_controls.has(name.substr(3)))\n\t\t\t\tthrow new ul4.AttributeError(this, name);\n\t\t\treturn this.layout_controls.get(name.substr(3));\n\t\t}\n\t\telse if (name.startsWith(\"p_\") && this.params !== null)\n\t\t{\n\t\t\tif (!this.params.has(name.substr(2)))\n\t\t\t\tthrow new ul4.AttributeError(this, name);\n\t\t\treturn this.params.get(name.substr(2));\n\t\t}\n\t\telse if (name.startsWith(\"pv_\") && this.params !== null)\n\t\t{\n\t\t\tif (!this.params.has(name.substr(3)))\n\t\t\t\tthrow new ul4.AttributeError(this, name);\n\t\t\treturn this.params.get(name.substr(3)).value;\n\t\t}\n\t\telse\n\t\t\treturn super[ul4.symbols.getattr](name);\n\t}\n\n\tget active_view()\n\t{\n\t\treturn this._active_view;\n\t}\n\n\tset active_view(view)\n\t{\n\t\tif (view === null)\n\t\t\t;\n\t\telse if (typeof(view) === \"string\")\n\t\t{\n\t\t\tif (this.views !== null && this.views.has(view))\n\t\t\t\tview = this.views.get(view);\n\t\t\telse\n\t\t\t\tthrow new ul4.ValueError(\"View \" + ul4._repr(view) + \" not found!\");\n\t\t}\n\t\telse if (view instanceof View)\n\t\t{\n\t\t\tif (view.app === this)\n\t\t\t\t;\n\t\t\telse\n\t\t\t\tthrow new ul4.ValueError(\"View \" + ul4._repr(view) + \" belongs to the wrong app!\");\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthrow new ul4.TypeError(ul4._repr(view) + \" is not a view!\");\n\t\t}\n\n\t\tthis._active_view = view;\n\t}\n\n\tget layout_controls()\n\t{\n\t\tif (this.active_views === null)\n\t\t\treturn new Map();\n\t\treturn this.active_view.layout_controls;\n\t}\n};\n\n\nApp.prototype._ul4onattrs = [\"globals\", \"name\", \"description\", \"lang\", \"gramgen\", \"typename_nom_sin\", \"typename_gen_sin\", \"typename_dat_sin\", \"typename_acc_sin\", \"typename_nom_plu\", \"typename_gen_plu\", \"typename_dat_plu\", \"typename_acc_plu\",\n\t\"startlink\", \"image\", \"createdby\", \"controls\", \"records\", \"recordcount\", \"installation\", \"categories\", \"params\", \"views\", \"datamanagement_identifier\", \"basetable\", \"primarykey\", \"insertprocedure\", \"updateprocedure\", \"deleteprocedure\", \"templates\", \"createdat\", \"updatedat\", \"updatedby\", \"superid\", \"favorite\", \"_active_view\", \"datasource\", \"menus\", \"panels\"];\nApp.prototype._ul4attrs = new Set([\"id\", \"globals\", \"name\", \"description\", \"lang\", \"gramgen\", \"typename_nom_sin\", \"typename_gen_sin\", \"typename_dat_sin\", \"typename_acc_sin\", \"typename_nom_plu\", \"typename_gen_plu\", \"typename_dat_plu\", \"typename_acc_plu\",\n\"startlink\", \"image\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\", \"controls\", \"layout_controls\", \"records\", \"recordcount\", \"installation\", \"categories\", \"params\", \"views\", \"menus\", \"panels\", \"datasource\", \"datamanagement_identifier\", \"insert\", \"favorite\", \"_active_view\", \"template_url\", \"new_embedded_url\", \"new_standalone_url\", \"home_url\", \"datamanagement_url\", \"import_url\", \"tasks_url\", /*\"formbuilder_url\", \"tasks_config_url\",*/ \"datamanagement_config_url\", \"permissions_url\", \"datamanageview_url\"]);\nul4.expose(App.prototype[ul4.symbols.call], [\"values\", \"**\"], {\"needsobject\": true});\nul4.expose(App.prototype.insert, [\"values\", \"**\"], {\"needsobject\": true});\nul4.expose(App.prototype.template_url, [\"identifier\", \"p\", \"record\", \"p=\", null, \"params\", \"**\"]);\nul4.expose(App.prototype.new_embedded_url, [\"params\", \"**\"]);\nul4.expose(App.prototype.new_standalone_url, [\"params\", \"**\"]);\n\n\nclass ViewType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof View;\n\t}\n};\n\nlet viewtype = new ViewType(\"la\", \"View\", \"An input form for a LivingViews application\");\n\n\nexport class View extends Base\n{\n\tget globals()\n\t{\n\t\treturn this.app.globals;\n\t}\n\n\t[ul4.symbols.type]()\n\t{\n\t\treturn viewtype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<View id=\" + ul4._repr(this.id) + \" name=\" + ul4._repr(this.name) + \">\";\n\t}\n};\n\nView.prototype._ul4onattrs = [\"name\", \"combined_type\", \"app\", \"order\", \"width\", \"height\", \"start\", \"end\", \"controls\", \"layout_controls\", \"lang\", \"login_required\", \"result_page\", \"use_geo\"];\nView.prototype._ul4attrs = new Set([\"id\", \"name\", \"combined_type\", \"app\", \"order\", \"width\", \"height\", \"start\", \"end\", \"controls\", \"layout_controls\", \"lang\", \"login_required\", \"result_page\", \"use_geo\"]);\n\n\nclass DataSourceType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof DataSource;\n\t}\n};\n\nlet datasourcetype = new DataSourceType(\"la\", \"DataSource\", \"The data resulting from a data source configuration\");\n\n\nexport class DataSource extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn datasourcetype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<DataSource id=\" + ul4._repr(this.id) + \" identifier=\" + ul4._repr(this.identifier) + \">\";\n\t}\n};\n\nDataSource.prototype._ul4onattrs = [\"identifier\", \"app\", \"apps\"];\nDataSource.prototype._ul4attrs = new Set([\"id\", \"identifier\", \"app\", \"apps\"]);\n\n\nclass DataSourceChildrenType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof DataSourceChildren;\n\t}\n};\n\nlet datasourcechildrentype = new DataSourceChildrenType(\"la\", \"DataSourceChildren\", \"A master/detail specification in a data source\");\n\n\nexport class DataSourceChildren extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn datasourcetypechildren;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<DataSourceChildren id=\" + ul4._repr(this.id) + \" identifier=\" + ul4._repr(this.identifier) + \">\";\n\t}\n};\n\nDataSourceChildren.prototype._ul4onattrs = [\"datasource\", \"identifier\", \"control\"];\nDataSourceChildren.prototype._ul4attrs = new Set([\"id\", \"identifier\", \"datasource\", \"control\"]);\n\n\nclass RecordChildrenType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof RecordChildren;\n\t}\n};\n\nlet recordchildrentype = new RecordChildrenType(\"la\", \"RecordChildren\", \"The child records of a master record\");\n\n\nexport class RecordChildren extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn recordtypechildren;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<RecordChildren id=\" + ul4._repr(this.id) + \">\";\n\t}\n};\n\nRecordChildren.prototype._ul4onattrs = [\"record\", \"datasourcechildren\", \"records\"];\nRecordChildren.prototype._ul4attrs = new Set([\"id\", \"record\", \"datasourcechildren\", \"records\"]);\n\n\nclass RecordType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Record;\n\t}\n};\n\nlet recordtype = new RecordType(\"la\", \"Record\", \"A record of a LivingApp application\");\n\n\nexport class Record extends Base\n{\n\tconstructor(id, app)\n\t{\n\t\tsuper(id);\n\t\tthis.app = app;\n\t\tthis.createdat = null;\n\t\tthis.createdby = null;\n\t\tthis.updatedat = null;\n\t\tthis.updatedby = null;\n\t\tthis.updatecount = 0;\n\t\tthis._sparsevalues = new Map();\n\t\tthis._values = null;\n\t\tthis._fields = null;\n\t\tthis.details = new Map();\n\t\tthis._children = null;\n\t\tthis.attachments = null;\n\t\tthis.errors = [];\n\t\tthis._sparsefielderrors = null;\n\t\tthis._sparsefieldlookupdata = null;\n\t\tthis._is_deleted = false;\n\t\tthis._is_new = true;\n\t}\n\n\t[ul4.symbols.type]()\n\t{\n\t\treturn recordtype;\n\t}\n\n\tas_text(maxlevel=3, controls=null)\n\t{\n\t\tif (maxlevel == 0)\n\t\t\treturn \"...\";\n\t\tlet fields = [];\n\t\tfor (let [identifier, control] of (controls || this.app.controls))\n\t\t{\n\t\t\tif (controls !== null || control.priority)\n\t\t\t{\n\t\t\t\tlet fieldvalue = this.fields.get(identifier).value_as_text(maxlevel-1);\n\t\t\t\tif (fieldvalue !== null)\n\t\t\t\t\tfields.push([control.label, fieldvalue]);\n\t\t\t}\n\t\t}\n\t\tif (fields.length === 0)\n\t\t\treturn this.globals.msg_no_fields();\n\t\telse if (fields.length === 1)\n\t\t\treturn fields[0][1];\n\t\tlet result = [];\n\t\tfor (let [label, fieldvalue] of fields)\n\t\t\tresult.push(label + \": \" + fieldvalue);\n\t\treturn result.join(\", \");\n\t}\n\n\t_make_fields(defaults, values, errors, lookupdata)\n\t{\n\t\tlet fields = new Map();\n\n\t\tfor (let control of this.app.controls.values())\n\t\t{\n\t\t\tlet identifier = control.identifier;\n\t\t\tlet value = null;\n\t\t\tif (values !== null)\n\t\t\t{\n\t\t\t\tif (defaults && !values.has(identifier))\n\t\t\t\t\tvalue = control.default;\n\t\t\t\telse if (values.has(identifier))\n\t\t\t\t\tvalue = values.get(identifier);\n\t\t\t}\n\t\t\tlet field = new control.fieldtype(control, this, value);\n\t\t\tfields.set(identifier, field);\n\t\t\tif (errors !== null && errors.has(identifier))\n\t\t\t\tfield.errors = errors.get(identifier);\n\t\t\tif (lookupdata !== null && lookupdata.has(identifier))\n\t\t\t\tfield.lookupdata = lookupdata.get(identifier);\n\t\t}\n\n\t\tthis._fields = fields;\n\t\tthis._sparsevalues = null;\n\t\tthis._sparsefielderrors = null;\n\t\tthis._sparselookupdata = null;\n\t}\n\n\t_in_form()\n\t{\n\t\tlet globals = this.app.globals;\n\n\t\treturn globals._in_form() && this === globals.record;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\tlet v = [\"<Record id=\", ul4._repr(this.id)];\n\t\tfor (let field of this.fields.values())\n\t\t{\n\t\t\tif (field.control.priority && !field.is_empty())\n\t\t\t{\n\t\t\t\tv.push(\" v_\");\n\t\t\t\tv.push(field.control.identifier);\n\t\t\t\tv.push(\"=\");\n\t\t\t\tv.push(ul4._repr(field.value)); // FIXME: This might lead to infinite recursions\n\t\t\t}\n\t\t}\n\t\tv.push(\" state=\");\n\t\tv.push(ul4._repr(this.state));\n\t\tv.push(\">\");\n\t\treturn v.join(\"\");\n\t}\n\n\tget state()\n\t{\n\t\tif (this._is_deleted)\n\t\t\treturn \"deleted\";\n\t\telse if (this._is_new)\n\t\t\treturn \"new\";\n\t\telse if (this.is_dirty())\n\t\t\treturn \"dirty\";\n\t\telse\n\t\t\treturn \"saved\";\n\t}\n\n\tget values()\n\t{\n\t\tif (this._values === null)\n\t\t{\n\t\t\tthis._values = new Map();\n\t\t\tfor (let field of this.fields.values())\n\t\t\t{\n\t\t\t\tthis._values.set(field.control.identifier, field.value);\n\t\t\t}\n\t\t}\n\t\treturn this._values;\n\t}\n\n\tget fields()\n\t{\n\t\tif (this._fields === null)\n\t\t\tthis._make_fields(false, this._sparsevalues, this._sparsefielderrors, this._sparsefieldlookupdata)\n\t\treturn this._fields;\n\t}\n\n\tget children()\n\t{\n\t\tif (this._children === null)\n\t\t{\n\t\t\tthis._children = new Map();\n\t\t\tfor (const recordchildren of this.details.values())\n\t\t\t{\n\t\t\t\tthis._children.set(recordchildren.datasourcechildren.identifier, recordchildren.records);\n\t\t\t}\n\t\t}\n\t\treturn this._children;\n\t}\n\n\tis_dirty()\n\t{\n\t\tif (this.id === null)\n\t\t\treturn true;\n\t\tfor (let field of this.fields.values())\n\t\t{\n\t\t\tif (field.is_dirty())\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\thas_errors()\n\t{\n\t\tif (this.errors.length !== 0)\n\t\t\treturn true;\n\t\tfor (let field of this.fields.values())\n\t\t{\n\t\t\tif (field.has_errors())\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tdelete()\n\t{\n\t\tlet result = this.app.globals.handler.delete(this);\n\t\tthis._is_deleted = true;\n\t\treturn result;\n\t}\n\n\tsave()\n\t{\n\t\tthis.app.globals.handler.save(this);\n\t}\n\n\tupdate(values={})\n\t{\n\t\tif (ul4._ismap(values))\n\t\t{\n\t\t\tfor (let [key, value] of values.entries())\n\t\t\t{\n\t\t\t\tif (!this.fields.has(key))\n\t\t\t\t\tthrow new ul4.ArgumentError(\"update() get an unexpected keyword argument \" + ul4._repr(key));\n\t\t\t\tfields.get(key).value = value;\n\t\t\t}\n\t\t}\n\t\telse if (ul4._isobject(values))\n\t\t{\n\t\t\tfor (let key in values)\n\t\t\t{\n\t\t\t\tif (!this.fields.has(key))\n\t\t\t\t\tthrow new ul4.ArgumentError(\"update() get an unexpected keyword argument \" + ul4._repr(key));\n\t\t\t\trecord.fields.get(key).value = values[key];\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tthrow new ul4.TypeError(\"values must be an object or a Map\");\n\n\t\tthis.app.globals.handler.save(this);\n\t}\n\n\ttemplate_url(identifier, params)\n\t{\n\t\tlet url = \"https://\" + this.app.globals.hostname + \"/gateway/apps/\" + this.app.id + \"/\" + this.id;\n\t\treturn url_with_params(url, ['template', identifier], params);\n\t}\n\n\tedit_embedded_url(params)\n\t{\n\t\tlet url = \"https://\" + this.app.globals.hostname + \"/dateneingabe/\" + this.app.id + \"/\" + this.id + \"/edit\";\n\t\treturn url_with_params(url, params);\n\t}\n\n\tedit_standalone_url(params)\n\t{\n\t\tlet url = \"https://\" + this.app.globals.hostname + \"/gateway/apps/\" + this.app.id + \"/\" + this.id + \"/edit\";\n\t\treturn url_with_params(url, params);\n\t}\n\n\tedit_url(params)\n\t{\n\t\treturn this.app[ul4.symbols.getattr](\"pv_la_default_form_variant\") === \"standalone\" ? this.edit_standalone_url(params) : this.edit_embedded_url(params);\n\t}\n\n\tdisplay_embedded_url(params)\n\t{\n\t\tlet url = \"https://\" + this.app.globals.hostname + \"/dateneingabe/\" + this.app.id + \"/\" + this.id + \"/display\";\n\t\treturn url_with_params(url, params);\n\t}\n\n\tdisplay_standalone_url(params)\n\t{\n\t\tlet url = \"https://\" + this.app.globals.hostname + \"/gateway/apps/\" + this.app.id + \"/\" + this.id + \"/display\";\n\t\treturn url_with_params(url, params);\n\t}\n\n\tdisplay_url(params)\n\t{\n\t\treturn this.app[ul4.symbols.getattr](\"pv_la_default_form_variant\") === \"standalone\" ? this.display_standalone_url(params) : this.display_embedded_url(params);\n\t}\n\n\tsearch(search)\n\t{\n\t\tfor (let identifier in search)\n\t\t{\n\t\t\tlet fieldsearch = search[identifier];\n\t\t\tif (ul4._bool(fieldsearch))\n\t\t\t{\n\t\t\t\tif (!this.fields.get(identifier).search(fieldsearch))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tul4onload(decoder)\n\t{\n\t\tsuper.ul4onload(decoder);\n\t\tthis._is_new = false;\n\t}\n\n\t_dumpUL4ONAttr(name)\n\t{\n\t\tif (name === \"values\")\n\t\t\treturn this._sparsevalues;\n\t\telse\n\t\t\treturn this[name];\n\t}\n\n\t_loadUL4ONAttr(name, value)\n\t{\n\t\tif (name === \"values\")\n\t\t{\n\t\t\tthis._sparsevalues = value;\n\t\t\tthis._values = null;\n\t\t\tthis._fields = null;\n\t\t}\n\t\telse\n\t\t\tthis[name] = value;\n\t}\n\n\t[ul4.symbols.getattr](name)\n\t{\n\t\tif (name.startsWith(\"c_\"))\n\t\t{\n\t\t\treturn this.children.get(name.substr(2))\n\t\t}\n\t\telse if (name.startsWith(\"d_\"))\n\t\t\treturn this.details.get(name.substr(2))\n\t\telse if (name.startsWith(\"f_\"))\n\t\t\treturn this.fields.get(name.substr(2))\n\t\telse if (name.startsWith(\"v_\"))\n\t\t\treturn this.fields.get(name.substr(2)).value\n\t\telse\n\t\t\treturn super[ul4.symbols.getattr](name);\n\t}\n\n\t[ul4.symbols.setattr](name, value)\n\t{\n\t\tif (name.startsWith(\"c_\"))\n\t\t\tthis.children[name.substr(2)] = value;\n\t\telse if (name.startsWith(\"v_\"))\n\t\t\tthis.fields.get(name.substr(2)).value = value;\n\t\telse\n\t\t\tsuper[ul4.symbols.setattr](name, value);\n\t}\n};\n\nRecord.prototype._ul4onattrs = [\"app\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\", \"updatecount\", \"_sparsevalues\", \"attachments\", \"details\", \"errors\", \"_sparsefielderrors\", \"_sparsefieldlookupdata\"];\nRecord.prototype._ul4attrs = new Set([\"id\", \"app\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\", \"updatecount\", \"values\", \"fields\", \"attachments\", \"details\", \"children\", \"errors\", \"template_url\", \"edit_embedded_url\", \"edit_standalone_url\"]);\nul4.expose(Record.prototype.is_dirty, []);\nul4.expose(Record.prototype.has_errors, []);\nul4.expose(Record.prototype.delete, []);\nul4.expose(Record.prototype.save, []);\nul4.expose(Record.prototype.update, [\"values\", \"**\"], {\"needsobject\": true});\nul4.expose(Record.prototype.template_url, [\"identifier\", \"p\", \"params\", \"**\"]);\nul4.expose(Record.prototype.edit_embedded_url, [\"params\", \"**\"]);\nul4.expose(Record.prototype.edit_standalone_url, [\"params\", \"**\"]);\n\n\nclass FieldType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Field;\n\t}\n};\n\nlet fieldtype = new FieldType(\"la\", \"Field\", \"Holds the value of a field of a record (and related information)\");\n\n\nexport class Field extends Base\n{\n\tconstructor(control, record, value)\n\t{\n\t\tsuper(null);\n\t\tthis.control = control;\n\t\tthis.record = record;\n\t\tthis._label = null;\n\t\tthis._description = null;\n\t\tthis._lookupdata = null;\n\t\tthis.errors = [];\n\t\tthis._value = null;\n\t\tif (!this._in_form())\n\t\t\tthis.value = value;\n\t\tthis._dirty = false;\n\t\tthis._enabled = true;\n\t\tthis._writable = true;\n\t\tthis._visible = true;\n\t\tthis._required = null;\n\t\tthis._in_text = null;\n\t\tthis._top = null;\n\t\tthis._left = null;\n\t}\n\n\t[ul4.symbols.type]()\n\t{\n\t\treturn fieldtype;\n\t}\n\n\tget value()\n\t{\n\t\tif (this._in_form())\n\t\t\treturn this._get_dom_value();\n\t\treturn this._value;\n\t}\n\n\tset value(value)\n\t{\n\t\tlet oldvalue = this._value;\n\n\t\tlet change = {value: value, errors: []};\n\t\tthis._validate(change);\n\n\t\tif (ul4._ne(oldvalue, change.value))\n\t\t{\n\t\t\tif (this.record._values !== null)\n\t\t\t\tthis.record._values.set(this.control.identifier, change.value);\n\t\t\tthis._value = change.value;\n\t\t\tthis._dirty = true;\n\t\t}\n\t\tthis.errors = change.errors;\n\t\tif (this._in_form())\n\t\t\tthis._set_dom_value(this._value);\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\treturn null;\n\t}\n\n\t_validate(change)\n\t{\n\t\t// Do nothing, i.e. accept the value unchanged and without errors\n\t}\n\n\t_set_dom_label()\n\t{\n\t\tif (this._in_form())\n\t\t\tthis._dom_label.textContent = this.label;\n\t}\n\n\tget mode()\n\t{\n\t\treturn this._mode ?? this.control.mode;\n\t}\n\n\tset mode(value)\n\t{\n\t\tthis._mode = value;\n\t}\n\n\tget label()\n\t{\n\t\treturn this._label ?? this.control.label;\n\t}\n\n\tset label(value)\n\t{\n\t\tthis._label = value;\n\t\tthis._set_dom_label();\n\t}\n\n\tget description()\n\t{\n\t\treturn this._description ?? this.control.description;\n\t}\n\n\tset description(value)\n\t{\n\t\tthis._description = value;\n\t}\n\n\tget globals()\n\t{\n\t\treturn this.control.globals;\n\t}\n\n\tis_empty()\n\t{\n\t\treturn this._value === null;\n\t}\n\n\tis_dirty()\n\t{\n\t\treturn this._dirty;\n\t}\n\n\thas_errors()\n\t{\n\t\treturn this.errors.length !== 0;\n\t}\n\n\tadd_error(error)\n\t{\n\t\tthis.errors.push(error);\n\t}\n\n\tset_error(error)\n\t{\n\t\tif (error !== null)\n\t\t\tthis.errors = [error];\n\t\telse\n\t\t\tthis.errors = [];\n\t}\n\n\tget top()\n\t{\n\t\treturn this._top ?? this.control.top;\n\t}\n\n\tset top(value)\n\t{\n\t\tthis._top = value;\n\t\tif (this._in_form())\n\t\t\tthis._dom_root.style.top = this.top + \"px\";\n\t}\n\n\tget left()\n\t{\n\t\treturn this._left ?? this.control.left;\n\t}\n\n\tset left(value)\n\t{\n\t\tthis._left = value;\n\t\tif (this._in_form())\n\t\t\tthis._dom_root.style.left = this.left + \"px\";\n\t}\n\n\tget width()\n\t{\n\t\treturn this.control.width;\n\t}\n\n\tget height()\n\t{\n\t\treturn this.control.width;\n\t}\n\n\tsearch(searchvalue)\n\t{\n\t\treturn this.control.search(this.value, searchvalue);\n\t}\n\n\tmsg_field_required(value)\n\t{\n\t\tswitch (this.globals.lang)\n\t\t{\n\t\t\tcase \"de\":\n\t\t\t\treturn `\"${this.label}\" wird benötigt!`;\n\t\t\tdefault:\n\t\t\t\treturn `\"${this.label}\" is required!`;\n\t\t}\n\t}\n\n\tmsg_field_wrong_type(value)\n\t{\n\t\treturn `\"${this.label}\" doesn't support the type ${ul4._type(value).name}!`;\n\t}\n\n\tmsg_bool_truerequired(value)\n\t{\n\t\treturn `\"${this.label}\" only accepts \"Yes\"!`;\n\t}\n\n\tmsg_string_tooshort(value)\n\t{\n\t\treturn `\"${this.label}\" is too short. You must use at least ${this.control.minlength} characters!`;\n\t}\n\n\tmsg_string_toolong(value)\n\t{\n\t\treturn `\"${this.label}\" is too long. You may use at most ${this.control.maxlength} characters!`;\n\t}\n\n\tmsg_email_format(value)\n\t{\n\t\treturn `\"${this.label}\" must be a valid email address!`;\n\t}\n\n\tmsg_url_format(value)\n\t{\n\t\treturn `\"${this.label}\" must be a valid URL!`;\n\t}\n\n\tmsg_tel_format(value)\n\t{\n\t\treturn `\"${this.label}\" must be a valid phone number!`;\n\t}\n\n\tmsg_date_format(value)\n\t{\n\t\treturn `\"${this.label}\" doesn't support this date format!`;\n\t}\n\n\tmsg_number_format(value)\n\t{\n\t\treturn `\"${this.label}\" doesn't support this number format!`;\n\t}\n\n\tmsg_lookup_wrongitem(value)\n\t{\n\t\treturn `The option ${ul4._repr(value)} for \"${this.label}\" doesn't belong to this lookup!`;\n\t}\n\n\tmsg_lookup_unknownkey(value)\n\t{\n\t\treturn `The option ${ul4._repr(value)} for \"${this.label}\" is unknown!`;\n\t}\n\n\tmsg_applookup_wrongrecord(value)\n\t{\n\t\treturn `The record ${ul4._repr(value)} for \"${this.label}\" doesn't belong to the correct app!`;\n\t}\n\n\tmsg_applookup_unknownkey(value)\n\t{\n\t\treturn `The record ${ul4._repr(value)} for \"${this.label}\" can't be found!`;\n\t}\n\n\t/*\n\tThe following methods are used in the input form.\n\n\tI.e. they are expected to be executed inside a browser.\n\t*/\n\t_in_form()\n\t{\n\t\treturn this.record._in_form();\n\t}\n\n\tget _sel_root()\n\t{\n\t\treturn \"#livingapps-form .\" + this.control._cssclass_root + \".llft-id-\" + this.control.identifier;\n\t}\n\n\tget _sel_label()\n\t{\n\t\treturn this._sel_root + \" label span\";\n\t}\n\n\tget _sel_control()\n\t{\n\t\treturn this._sel_root + \" \" + this.control._cssclass_control;\n\t}\n\n\tget _dom_root()\n\t{\n\t\treturn document.querySelector(this._sel_root);\n\t}\n\n\tget _dom_label()\n\t{\n\t\treturn document.querySelector(this._sel_label);\n\t}\n\n\tget _dom_control()\n\t{\n\t\treturn document.querySelector(this._sel_control);\n\t}\n\n\tget _dom_controls()\n\t{\n\t\treturn document.querySelectorAll(this._sel_control);\n\t}\n\n\t_get_dom_value()\n\t{\n\t\treturn this._dom_control.value;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tthis._dom_control.value = value !== null ? value : \"\";\n\t}\n\n\tget visible()\n\t{\n\t\treturn this._visible;\n\t}\n\n\tset visible(value)\n\t{\n\t\tif (this._in_form())\n\t\t\tthis._dom_root.hidden = !value;\n\t\tthis._visible = value;\n\t}\n\n\tget required()\n\t{\n\t\treturn this._required ?? this.control.required;\n\t}\n\n\tset required(value)\n\t{\n\t\tthis._required = value;\n\t}\n\n\tget in_list()\n\t{\n\t\treturn this.control.in_list;\n\t}\n\n\tget in_mobile_list()\n\t{\n\t\treturn this.control.in_mobile_list;\n\t}\n\n\tget in_text()\n\t{\n\t\treturn this._in_text ?? this.control.in_text;\n\t}\n\n\tset in_text(value)\n\t{\n\t\tthis._in_text = value;\n\t}\n\n\tget enabled()\n\t{\n\t\tif (this._in_form())\n\t\t\treturn !this._dom_root.classList.contains(\"llft-control-readonly\");\n\t\telse\n\t\t\treturn this._enabled;\n\t}\n\n\tset enabled(value)\n\t{\n\t\tif (this._in_form())\n\t\t{\n\t\t\tlet disabled = !value;\n\t\t\tfor (let node of this._dom_controls)\n\t\t\t\tnode.disabled = disabled;\n\t\t\tthis._dom_root.classList.toggle(\"llft-control-readonly\", disabled);\n\t\t}\n\t\tthis._enabled = value;\n\t}\n\n\tget writable()\n\t{\n\t\treturn this._writable;\n\t}\n\n\tset writable(value)\n\t{\n\t\tthis._writable = value;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\tlet s = \"<\" + this.constructor.name + \" identifier=\";\n\t\ts += ul4._repr(this.control.identifier)\n\t\tif (this._dirty)\n\t\t\ts += \" is_dirty()=True\";\n\t\tif (this.errors.length > 0)\n\t\t\ts += \" has_errors()=True\";\n\t\ts += \">\";\n\t\treturn s;\n\t}\n\n\t[ul4.symbols.setattr](name, value)\n\t{\n\t\tif (name === \"value\")\n\t\t\tthis.value = value;\n\t\telse if (name === \"visible\")\n\t\t\tthis.visible = ul4._bool(value);\n\t\telse if (name === \"enabled\")\n\t\t\tthis.enabled = ul4._bool(value);\n\t\telse if (name === \"writable\")\n\t\t\tthis.writable = ul4._bool(value);\n\t\telse if (name === \"required\")\n\t\t\tthis.required = ul4._bool(value);\n\t\telse if (name === \"top\")\n\t\t{\n\t\t\tif (value !== null && (typeof(value) !== \"number\"))\n\t\t\t\tthrow new ul4.ArgumentError(\"top must be None or an int\");\n\t\t\tthis.top = value;\n\t\t}\n\t\telse if (name === \"left\")\n\t\t{\n\t\t\tif (value !== null && (typeof(value) !== \"number\"))\n\t\t\t\tthrow new ul4.ArgumentError(\"left must be None or an int\");\n\t\t\tthis.left = value;\n\t\t}\n\t\telse\n\t\t\tsuper[ul4.symbols.setattr](name, value);\n\t}\n};\n\nField.prototype._ul4onattrs = [\"control\", \"record\", \"label\", \"value\", \"errors\", \"_visible\", \"_enabled\", \"_writable\", \"_required\"];\nField.prototype._ul4attrs = new Set([\"control\", \"record\", \"label\", \"description\", \"value\", \"mode\", \"errors\", \"visible\", \"enabled\", \"writable\", \"required\", \"in_text\", \"top\", \"left\", \"width\", \"height\"]);\nField.prototype._inputevent = \"input\";\n\n\nclass BoolFieldType extends FieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof BoolField;\n\t}\n};\n\nlet boolfieldtype = new BoolFieldType(\"la\", \"BoolField\", \"Holds the value of a bool field of a record (and related information)\");\n\n\nexport class BoolField extends Field\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn boolfieldtype;\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (change.value === null)\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(change.value));\n\t\t}\n\t\telse if (typeof(change.value) === \"string\")\n\t\t{\n\t\t\tif (change.value.length === 0)\n\t\t\t{\n\t\t\t\tif (this.control.required)\n\t\t\t\t\tchange.errors.push(this.msg_bool_truerequired(change.value));\n\t\t\t\tchange.value = null;\n\t\t\t}\n\t\t\telse if ([\"false\", \"no\", \"0\", \"off\"].includes(change.value.toLowerCase()))\n\t\t\t{\n\t\t\t\tchange.value = false;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tchange.value = true;\n\t\t\t}\n\t\t}\n\t\telse if (typeof(change.value) === \"boolean\")\n\t\t{\n\t\t\tif (this.control.required && !change.value)\n\t\t\t\tchange.errors.push(this.msg_bool_truerequired(change.value));\n\t\t}\n\t\telse\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t}\n\n\t_get_dom_value()\n\t{\n\t\treturn this._dom_control.checked;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tthis._dom_control.checked = value;\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\treturn this.globals.msg_bool(this.value);\n\t}\n};\n\n\nclass IntFieldType extends FieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof IntField;\n\t}\n};\n\nlet intfieldtype = new IntFieldType(\"la\", \"IntField\", \"Holds the value of an int field of a record (and related information)\");\n\n\nexport class IntField extends Field\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn intfieldtype;\n\t}\n\n\t_parse(value)\n\t{\n\t\tif (/^\\s*[-+]?\\d+\\s*$/.test(value))\n\t\t\treturn parseInt(value);\n\t\telse\n\t\t\treturn null;\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (change.value === null)\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(change.value));\n\t\t}\n\t\telse if (typeof(change.value) === \"string\")\n\t\t{\n\t\t\tlet value = this._parse(change.value);\n\t\t\tif (value !== null)\n\t\t\t\tchange.value = value;\n\t\t\telse\n\t\t\t\tchange.errors.push(this.msg_number_format(change.value));\n\t\t\t\t// Keep original invalid string\n\t\t}\n\t\telse if (typeof(change.value) === \"number\")\n\t\t{\n\t\t\tif (Math.round(change.value) !== change.value)\n\t\t\t\tchange.errors.push(this.msg_field_wrong_type(change.value));\n\t\t\t\t// Keep original floating point number\n\t\t}\n\t\telse\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t}\n\n\t_get_dom_value()\n\t{\n\t\tlet value = super._get_dom_value();\n\t\tif (value)\n\t\t{\n\t\t\tlet testvalue = this._parse(value);\n\t\t\tif (testvalue !== null)\n\t\t\t\tvalue = testvalue;\n\t\t}\n\t\treturn value;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tsuper._set_dom_value(value !== null ? value + \"\" : \"\");\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\tlet value = this.value;\n\t\treturn value != null ? value + \"\" : null;\n\t}\n\n\tget writable()\n\t{\n\t\treturn this._writable;\n\t}\n\n\tset writable(value)\n\t{\n\t\tif (this._in_form())\n\t\t{\n\t\t\tlet readonly = !value;\n\t\t\tfor (let node of this._dom_controls)\n\t\t\t\tnode.readOnly = readonly;\n\t\t}\n\t\tsuper.writable = value;\n\t}\n};\n\n\nclass NumberFieldType extends FieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof NumberField;\n\t}\n};\n\nlet numberfieldtype = new NumberFieldType(\"la\", \"NumberField\", \"Holds the value of a number field of a record (and related information)\");\n\n\nexport class NumberField extends Field\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn numberfieldtype;\n\t}\n\n\t_parse(value)\n\t{\n\t\tif (value === null)\n\t\t\treturn null;\n\n\t\t// Try to ignore thousands separators and return the value as a number\n\t\tlet testvalue = value;\n\t\t// Count decimal delimiters\n\t\tlet seps = \"\";\n\t\tlet commas = 0;\n\t\tlet dots = 0\n\t\tfor (let i = 0; i < value.length; ++i)\n\t\t{\n\t\t\tlet c = value[i];\n\t\t\tif (c == \",\")\n\t\t\t{\n\t\t\t\tcommas++;\n\t\t\t\tseps += c;\n\t\t\t}\n\t\t\telse if (c == \".\")\n\t\t\t{\n\t\t\t\tdots++;\n\t\t\t\tseps += c;\n\t\t\t}\n\t\t}\n\t\tlet convert = null;\n\t\tif (commas == 0)\n\t\t{\n\t\t\tif (dots <= 1)\n\t\t\t\t; // nothing to do\n\t\t\telse\n\t\t\t\tconvert = \"de\";\n\t\t}\n\t\telse if (commas == 1)\n\t\t{\n\t\t\tif (dots == 1)\n\t\t\t\tconvert = (seps == \".,\") ? \"de\" : \"en\";\n\t\t\telse\n\t\t\t\tconvert = \"de\";\n\t\t}\n\t\telse // commas > 1\n\t\t{\n\t\t\tif (dots <= 1)\n\t\t\t\tconvert = \"en\";\n\t\t\telse\n\t\t\t\treturn null; // We can't guess what the user meant\n\t\t}\n\n\t\tif (convert === \"de\")\n\t\t\ttestvalue = testvalue.replace(/\\./g, \"\").replace(/,/g, \".\");\n\t\telse if (convert === \"en\")\n\t\t\ttestvalue = testvalue.replace(/,/g, \"\");\n\t\tlet floatvalue = parseFloat(testvalue);\n\t\tif (isNaN(floatvalue))\n\t\t\treturn value;\n\t\treturn floatvalue;\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (change.value === null || change.value === \"\")\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t\telse if (typeof(change.value) === \"string\")\n\t\t{\n\t\t\tlet value = this._parse(change.value);\n\t\t\tif (value !== null)\n\t\t\t{\n\t\t\t\tvalue = this._bound_value(value);\n\t\t\t\tif (this.control.precision !== null)\n\t\t\t\t\tvalue = ul4._round(value, this.control.precision);\n\t\t\t\tchange.value = value;\n\t\t\t}\n\t\t\telse\n\t\t\t\tchange.errors.push(this.msg_number_format(change.value));\n\t\t\t\t// Keep original invalid string\n\t\t}\n\t\telse if (typeof(change.value) === \"number\")\n\t\t{\n\t\t\tlet value = this._bound_value(change.value);\n\t\t\tif (this.control.precision !== null)\n\t\t\t\tvalue = ul4._round(value, this.control.precision);\n\t\t\tchange.value = value;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t}\n\n\t_bound_value(value)\n\t{\n\t\tif (this.control.minimum !== null)\n\t\t{\n\t\t\tif (value < this.control.minimum)\n\t\t\t\tvalue = this.control.minimum;\n\t\t}\n\t\tif (this.control.maximum !== null)\n\t\t{\n\t\t\tif (value > this.control.maximum)\n\t\t\t\tvalue = this.control.maximum;\n\t\t}\n\t\treturn value;\n\t}\n\n\t_get_dom_value()\n\t{\n\t\tlet value = super._get_dom_value();\n\t\tif (value)\n\t\t{\n\t\t\tif (typeof(value) == \"string\")\n\t\t\t{\n\t\t\t\tlet testvalue = this._parse(value);\n\t\t\t\tif (testvalue !== null)\n\t\t\t\t\tvalue = testvalue;\n\t\t\t}\n\t\t\tif (typeof(value) === \"number\")\n\t\t\t{\n\t\t\t\tif (this.control.precision !== null)\n\t\t\t\t\tvalue = ul4._round(value, this.control.precision);\n\t\t\t\tvalue = this._bound_value(value);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tvalue = null;\n\t\treturn value;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tif (typeof(value) === \"number\")\n\t\t{\n\t\t\tvalue = this._bound_value(value);\n\t\t\tif (this.control.precision !== null)\n\t\t\t\tvalue = value.toFixed(this.control.precision);\n\t\t}\n\t\telse if (value === null)\n\t\t\tvalue = \"\";\n\t\tvalue += \"\";\n\t\tif (this.globals.lang == \"de\" && this.control.precision === null)\n\t\t\tvalue = value.replace(\".\", \",\");\n\t\tsuper._set_dom_value(value);\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\tlet value = this.value;\n\t\tif (value === null)\n\t\t\treturn null;\n\t\tif (this.control.precision !== null)\n\t\t\treturn value.toFixed(this.control.precision);\n\t\treturn value.toString();\n\t}\n\n\tget writable()\n\t{\n\t\treturn this._writable;\n\t}\n\n\tset writable(value)\n\t{\n\t\tif (this._in_form())\n\t\t{\n\t\t\tlet readonly = !value;\n\t\t\tfor (let node of this._dom_controls)\n\t\t\t\tnode.readOnly = readonly;\n\t\t}\n\t\tsuper.writable = value;\n\t}\n};\n\n\nclass StringFieldType extends FieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof StringField;\n\t}\n};\n\nlet stringfieldtype = new StringFieldType(\"la\", \"StringField\", \"Holds the value of a string field of a record (and related information)\");\n\n\nexport class StringField extends Field\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn stringfieldtype;\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (change.value === null || change.value === \"\")\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t\telse if (typeof(change.value) === \"string\")\n\t\t{\n\t\t\tlet minlength = this.control.minlength;\n\t\t\tlet maxlength = this.control.maxlength;\n\t\t\tif (minlength !== null && change.value.length < minlength)\n\t\t\t\tchange.errors.push(this.msg_string_tooshort(change.value))\n\t\t\tif (maxlength !== null && change.value.length > maxlength)\n\t\t\t\tchange.errors.push(this.msg_string_toolong(change.value))\n\t\t}\n\t\telse\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t}\n\n\tget writable()\n\t{\n\t\treturn this._writable;\n\t}\n\n\tset writable(value)\n\t{\n\t\tif (this._in_form())\n\t\t{\n\t\t\tlet readonly = !value;\n\t\t\tfor (let node of this._dom_controls)\n\t\t\t\tnode.readOnly = readonly;\n\t\t}\n\t\tsuper.writable = value;\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\treturn this.value;\n\t}\n};\n\n\nclass PasswordFieldType extends StringFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof PasswordField;\n\t}\n};\n\nlet passwordfieldtype = new PasswordFieldType(\"la\", \"PasswordField\", \"Holds the value of a string/password field of a record (and related information)\");\n\n\nexport class PasswordField extends StringField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn passwordfieldtype;\n\t}\n};\n\n\nclass EmailFieldType extends StringFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof EmailField;\n\t}\n};\n\nlet emailfieldtype = new EmailFieldType(\"la\", \"EmailField\", \"Holds the value of a string/email field of a record (and related information)\");\n\n\nexport class EmailField extends StringField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn emailfieldtype;\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (typeof(change.value) === \"string\" && change.value.length > 0)\n\t\t{\n\t\t\tconst re = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/i;\n\t\t\tif (!re.test(change.value))\n\t\t\t\tchange.errors.push(this.msg_email_format(change.value));\n\t\t}\n\t\tsuper._validate(change);\n\t}\n};\n\n\nclass URLFieldType extends StringFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof URLField;\n\t}\n};\n\nlet urlfieldtype = new URLFieldType(\"la\", \"URLField\", \"Holds the value of a string/url field of a record (and related information)\");\n\n\nexport class URLField extends StringField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn urlfieldtype;\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (typeof(change.value) === \"string\" && change.value.length > 0)\n\t\t{\n\t\t\tlet url = null;\n\t\t\ttry\n\t\t\t{\n\t\t\t\turl = new URL(change.value);\n\t\t\t}\n\t\t\tcatch (exc)\n\t\t\t{\n\t\t\t\tchange.errors.push(this.msg_url_format(change.value));\n\t\t\t}\n\t\t\tif (url !== null && url.protocol !== \"http:\" && url.protocol !== \"https:\")\n\t\t\t{\n\t\t\t\tchange.errors.push(this.msg_url_format(change.value));\n\t\t\t}\n\t\t}\n\t\tsuper._validate(change);\n\t}\n};\n\n\nclass TelFieldType extends StringFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof TelField;\n\t}\n};\n\nlet telfieldtype = new TelFieldType(\"la\", \"TelField\", \"Holds the value of a string/tel field of a record (and related information)\");\n\n\nexport class TelField extends StringField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn telfieldtype;\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (typeof(change.value) === \"string\" && change.value.length > 0)\n\t\t{\n\t\t\tconst re = /^\\\\+?[0-9 /()-]+$/;\n\t\t\tif (!re.test(change.value))\n\t\t\t\tchange.errors.push(this.msg_tel_format(change.value));\n\t\t}\n\t\tsuper._validate(change);\n\t}\n};\n\n\nclass TextAreaFieldType extends StringFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof TextAreaField;\n\t}\n};\n\nlet textareafieldtype = new TextAreaFieldType(\"la\", \"TextAreaField\", \"Holds the value of a string/textarea field of a record (and related information)\");\n\n\nexport class TextAreaField extends StringField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn textareafieldtype;\n\t}\n};\n\n\nclass HTMLFieldType extends StringFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof HTMLField;\n\t}\n};\n\nlet htmlfieldtype = new HTMLFieldType(\"la\", \"HTMLField\", \"Holds the value of a string/html field of a record (and related information)\");\n\n\nexport class HTMLField extends StringField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn htmlfieldtype;\n\t}\n};\n\n\nclass GeoFieldType extends FieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof GeoField;\n\t}\n};\n\nlet geofieldtype = new GeoFieldType(\"la\", \"GeoField\", \"Holds the value of a geo field of a record (and related information)\");\n\n\nexport class GeoField extends Field\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn geofieldtype;\n\t}\n\n\t_get_dom_value()\n\t{\n\t\tfor (let dom_node of this._dom_controls)\n\t\t{\n\t\t\tif (dom_node.id.endsWith(\"_geoinfo\"))\n\t\t\t{\n\t\t\t\tlet value = dom_node.value;\n\t\t\t\tif (value)\n\t\t\t\t{\n\t\t\t\t\tvalue = JSON.parse(value);\n\t\t\t\t\treturn new Geo(\n\t\t\t\t\t\tthis.globals,\n\t\t\t\t\t\tvalue.geometry.coordinates[0],\n\t\t\t\t\t\tvalue.geometry.coordinates[1],\n\t\t\t\t\t\tvalue.properties.formatted_address\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tif (value === null)\n\t\t{\n\t\t\tfor (let dom_node of this._dom_controls)\n\t\t\t{\n\t\t\t\tdom_node.value = null;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfor (let dom_node of this._dom_controls)\n\t\t\t{\n\t\t\t\tif (dom_node.id.endsWith(\"_geoinfo\"))\n\t\t\t\t{\n\t\t\t\t\tlet dom_value = {\n\t\t\t\t\t\t\"type\": \"Feature\",\n\t\t\t\t\t\t\"geometry\": {\n\t\t\t\t\t\t\t\"coordinates\": [\n\t\t\t\t\t\t\t\tvalue.lat,\n\t\t\t\t\t\t\t\tvalue.long\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\t\"formatted_address\": value.info\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\tdom_node.value = ul4._asjson(dom_value);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tdom_node.value = value.info;\n\t\t\t}\n\t\t}\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\tlet value = this.value;\n\t\tif (this.value === null)\n\t\t\treturn null;\n\t\t// FIXME: Show N/S and W/E? Show arc minutes/seconds?\n\t\tlet result = value.lat.toFixed(5) + \", \" + value.long.toFixed(5);\n\t\tif (value.info !== null)\n\t\t\tresult += \" (\" + value.info + \")\";\n\t\treturn result;\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (change.value === null || change.value === \"\")\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t\telse if (!(change.value instanceof Geo))\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t}\n};\nGeoField.prototype._inputevent = \"llgeo\";\n\n\nclass FileFieldType extends FieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof FileField;\n\t}\n};\n\nlet filefieldtype = new FileFieldType(\"la\", \"FileField\", \"Holds the value of a file field of a record (and related information)\");\n\n\nexport class FileField extends Field\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn filefieldtype;\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (change.value === null || change.value === \"\")\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t\telse if (!(change.value instanceof File))\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t}\n\n\t_get_dom_value()\n\t{\n\t\t// Always return `null``\n\t\treturn null;\n\t}\n\n\t_set_dom_value()\n\t{\n\t\t// Do nothing\n\t}\n};\n\n\nclass FileSignatureFieldType extends FileFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof FileSignatureField;\n\t}\n};\n\nlet filesignaturefieldtype = new FileSignatureFieldType(\"la\", \"FileSignatureField\", \"Holds the value of a file/signature field of a record (and related information)\");\n\n\nexport class FileSignatureField extends FileField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn filesignaturefieldtype;\n\t}\n\n\t_validate(change)\n\t{\n\t\t// FIXME: Implement handling of data URLs.\n\t\tsuper._validate(change);\n\t}\n};\n\n\nclass DateFieldBaseType extends FieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof DateFieldBase;\n\t}\n};\n\nlet datefieldbasetype = new DateFieldBaseType(\"la\", \"DateFieldBase\", \"Holds the value of a date field of a record (and related information)\");\n\n\nexport class DateFieldBase extends Field\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn datefieldbasetype;\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\tlet value = this.value;\n\t\tif (value === null)\n\t\t\treturn null;\n\t\tif (typeof(value) === \"string\")\n\t\t\treturn value;\n\t\treturn ul4._format(value, this.control.formatstring())\n\t}\n\n\t_parse(value, format)\n\t{\n\t\tlet year = null, month = null, day = null, hour = 0, minute = 0, second = 0, ispm = null;\n\n\t\tfunction _int(v, len, min, max)\n\t\t{\n\t\t\tv = v.substring(0, len);\n\t\t\tif (v.length != len)\n\t\t\t\treturn null;\n\t\t\tv = parseInt(v, 10);\n\t\t\tif (isNaN(v) || v < min || v > max)\n\t\t\t\treturn null;\n\t\t\treturn v;\n\t\t}\n\n\t\twhile (value)\n\t\t{\n\t\t\t// Are both `value` and `format` not `null`,\n\t\t\t// i.e. neither `value` nor `format` is exhaused?\n\t\t\tif (!format)\n\t\t\t\treturn null;\n\t\t\tif (format.startsWith(\"%Y\"))\n\t\t\t{\n\t\t\t\tyear = _int(value, 4);\n\t\t\t\tif (year === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(4);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%y\"))\n\t\t\t{\n\t\t\t\tyear = _int(value, 2);\n\t\t\t\tif (year === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%m\"))\n\t\t\t{\n\t\t\t\tmonth = _int(value, 2);\n\t\t\t\tif (month === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%d\"))\n\t\t\t{\n\t\t\t\tday = _int(value, 2);\n\t\t\t\tif (day === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%H\"))\n\t\t\t{\n\t\t\t\thour = _int(value, 2);\n\t\t\t\tif (hour === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%I\"))\n\t\t\t{\n\t\t\t\thour = _int(value, 2);\n\t\t\t\tif (hour === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%M\"))\n\t\t\t{\n\t\t\t\tminute = _int(value, 2);\n\t\t\t\tif (minute === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%S\"))\n\t\t\t{\n\t\t\t\tsecond = _int(value, 2);\n\t\t\t\tif (second === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%p\"))\n\t\t\t{\n\t\t\t\tif (value.toLowerCase().startsWith(\"pm\"))\n\t\t\t\t\tispm = true;\n\t\t\t\telse if (value.toLowerCase().startsWith(\"am\"))\n\t\t\t\t\tispm = false;\n\t\t\t\telse\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%%\"))\n\t\t\t{\n\t\t\t\tif (!value.startsWith(\"%\"))\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(1);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse if (format.startsWith(\"%z\"))\n\t\t\t{\n\t\t\t\tif (!value.startsWith(\"-\") && !value.startsWith(\"+\"))\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(1);\n\t\t\t\tlet _tzhour = _int(value, 2);\n\t\t\t\tif (_tzhour === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tif (!value.startsWith(\":\"))\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(1);\n\t\t\t\tlet _tzminute = _int(value, 2);\n\t\t\t\tif (_tzminute === null)\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(2);\n\t\t\t\tformat = format.substring(2);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (!value.startsWith(format.substring(0, 1)))\n\t\t\t\t\treturn null;\n\t\t\t\tvalue = value.substring(1);\n\t\t\t\tformat = format.substring(1);\n\t\t\t}\n\t\t}\n\t\t// Are both `value` and `format` `null`?\n\t\t// I.e. both `value` and `format` must be exhausted, otherwise ...\n\t\tif (format)\n\t\t\t// ... `format` has remaining content that the value didn't provide\n\t\t\treturn null;\n\n\t\t// Check existance of values and their range\n\t\tif (year === null)\n\t\t\treturn null;\n\t\tif (month === null || month < 1 || month > 12)\n\t\t\treturn null;\n\t\tif (day === null || day < 1 || day > 31) // FIXME: Use the actuall number of days\n\t\t\treturn null;\n\t\tif (ispm === null)\n\t\t{\n\t\t\tif (hour < 0 || hour > 23)\n\t\t\t\treturn null;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tif (hour < 0 || hour > 11)\n\t\t\t\treturn null;\n\t\t\tif (ispm)\n\t\t\t\thour += 12;\n\t\t}\n\t\tif (minute < 0 || minute > 59)\n\t\t\treturn null;\n\t\tif (minute < 0 || minute > 59)\n\t\t\treturn null;\n\t\tif (second < 0 || second > 60)\n\t\t\treturn null;\n\t\treturn new Date(year, month-1, day, hour, minute, second);\n\t}\n\n\t_validate(change)\n\t{\n\t\tif (change.value === null || change.value === \"\")\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t\telse if (change.value instanceof Date)\n\t\t{\n\t\t\tchange.value = this._convert(change.value);\n\t\t}\n\t\telse if (change.value instanceof ul4.Date_)\n\t\t{\n\t\t\tchange.value = this._convert(change.value._date);\n\t\t}\n\t\telse if (typeof(change.value) === \"string\")\n\t\t{\n\t\t\tlet value = null;\n\t\t\tfor (let format of this.control.formatstrings_parse())\n\t\t\t{\n\t\t\t\tvalue = this._parse(change.value, format);\n\t\t\t\tif (value !== null)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (value !== null)\n\t\t\t\tchange.value = this._convert(value);\n\t\t\telse\n\t\t\t\tchange.errors.push(this.msg_date_format(change.value));\n\t\t\t\t// Keep original invalid string\n\t\t}\n\t\telse\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(change.value));\n\t\t\tchange.value = null;\n\t\t}\n\t}\n\n\t_get_dom_value()\n\t{\n\t\tlet value = super._get_dom_value();\n\t\tif (!value)\n\t\t\treturn null;\n\n\t\tfor (let format of this.control.formatstrings_parse())\n\t\t{\n\t\t\tlet date = this._parse(value, format);\n\t\t\tif (date !== null)\n\t\t\t\treturn this._convert(date);\n\t\t}\n\t\treturn null;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tif (value !== null)\n\t\t\tvalue = ul4._format(value, this.control.formatstring(), this.globals.lang);\n\t\telse\n\t\t\tvalue = \"\";\n\t\tsuper._set_dom_value(value);\n\t}\n};\n\n\nclass DateFieldType extends DateFieldBaseType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof DateField;\n\t}\n};\n\nlet datefieldtype = new DateFieldType(\"la\", \"DateField\", \"Holds the value of a date/date field of a record (and related information)\");\n\n\nexport class DateField extends DateFieldBase\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn datefieldtype;\n\t}\n\n\t_convert(date)\n\t{\n\t\treturn new ul4.Date_(date.getFullYear(), date.getMonth()+1, date.getDate());\n\t}\n};\n\n\nclass DatetimeMinuteFieldType extends DateFieldBaseType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof DatetimeMinuteField;\n\t}\n};\n\nlet datetimeminutefieldtype = new DatetimeMinuteFieldType(\"la\", \"DatetimeMinuteField\", \"Holds the value of a date/datetimeminute field of a record (and related information)\");\n\n\nexport class DatetimeMinuteField extends DateFieldBase\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn datetimeminutefieldtype;\n\t}\n\n\t_convert(date)\n\t{\n\t\t// Get rid of seconds and milliseconds, this modifies the object passed in.\n\t\tdate.setSeconds(0);\n\t\tdate.setMilliseconds(0);\n\t\treturn date;\n\t}\n};\n\n\nclass DatetimeSecondFieldType extends DateFieldBaseType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof DatetimeSecondField;\n\t}\n};\n\nlet datetimesecondfieldtype = new DatetimeSecondFieldType(\"la\", \"DatetimeSecondField\", \"Holds the value of a date/datetimesecond field of a record (and related information)\");\n\n\nexport class DatetimeSecondField extends DateFieldBase\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn datetimesecondfieldtype;\n\t}\n\n\t_convert(date)\n\t{\n\t\t// Get rid of milliseconds, this modifies the object passed in.\n\t\tdate.setMilliseconds(0);\n\t\treturn date;\n\t}\n};\n\n/*\n`ChoiceFieldBase` is used as the base class for all `lookup`, `multiplelookup`,\n`applookup` and `multipleapplookup` fields.\n\nSince the inheritance hierarchy follows the data model *not* which HTML element\nis used for editing, we would have to implement the same DOM interaction logic\nin multiple classes (i.e. we would have to handle a HTML `select` element in\n`LookupSelectField`, `MultipleLookupSelectField`, `AppLookupSelectField`\nand `MultipleAppLookupSelectField`).\n\nTo solve this problem, all methods that handle HTML elements are implemented in\nthis class. Subclasses then simply call the appropriate method.\n*/\nexport class ChoiceFieldBase extends Field\n{\n\t_make_option(selected, value, label)\n\t{\n\t\tlet option = element(\n\t\t\t\"option\",\n\t\t\tlabel,\n\t\t\t{\n\t\t\t\t\"value\": value,\n\t\t\t\t\"class\": value === this.control.none_key ? \"la-none-option\" : null,\n\t\t\t\t\"selected\": selected ? \"selected\" : null,\n\t\t\t}\n\t\t);\n\t\treturn option;\n\t}\n\n\t_set_dom_lookupdata_select(lookupdata)\n\t{\n\t\tif (lookupdata === null)\n\t\t\tlookupdata = this.control.lookup_data;\n\t\tif (ul4._isobject(lookupdata))\n\t\t\tlookupdata = new Map(Object.entries(lookupdata));\n\n\t\tlet none_selected = false;\n\t\tlet selected = new Set();\n\t\tfor (let dom_option of this._dom_control.querySelectorAll(\"option:checked\"))\n\t\t{\n\t\t\tlet value = dom_option.getAttribute(\"value\");\n\t\t\tif (lookupdata.has(value))\n\t\t\t\tselected.add(value);\n\t\t\telse if (value === this.control.none_key)\n\t\t\t\tnone_selected = true;\n\t\t}\n\n\t\tlet new_children = [];\n\t\tif (this.control.none_key !== null)\n\t\t{\n\t\t\tnew_children.push(\n\t\t\t\tthis._make_option(\n\t\t\t\t\tnone_selected,\n\t\t\t\t\tthis.control.none_key,\n\t\t\t\t\tthis.control.none_label !== null ? this.control.none_label : this.globals.msg_nothing_selected()\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tfor (let [key, value] of lookupdata)\n\t\t{\n\t\t\tnew_children.push(\n\t\t\t\tthis._make_option(\n\t\t\t\t\tselected.has(key),\n\t\t\t\t\tkey,\n\t\t\t\t\tthis._make_label(value)\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\tthis._dom_control.replaceChildren(...new_children);\n\t}\n\n\t_set_dom_lookupdata_input(lookupdata)\n\t{\n\t\tif (lookupdata === null)\n\t\t\tlookupdata = this.control.lookupdata;\n\t\telse if (ul4._isobject(lookupdata))\n\t\t\tlookupdata = new Map(Object.entries(lookupdata));\n\n\t\tlet none_selected = false;\n\t\tlet selected = new Set();\n\t\tfor (let dom_input of this._dom_controls)\n\t\t{\n\t\t\tlet value = dom_input.getAttribute(\"value\");\n\t\t\tif (dom_input.checked)\n\t\t\t{\n\t\t\t\tif (lookupdata.has(value))\n\t\t\t\t\tselected.add(value);\n\t\t\t\telse if (value === this.control.none_key)\n\t\t\t\t\tnone_selected = true;\n\n\t\t\t}\n\t\t}\n\n\t\tlet dom_none_input = this._dom_root.querySelector(\"input[value=\" + this.control.none_key + \"]\");\n\t\tif (dom_none_input !== null)\n\t\t\tdom_none_input.checked = none_selected;\n\n\t\tfor (let [key, item] of this.control.lookupdata)\n\t\t{\n\t\t\tlet dom_input = this._dom_root.querySelector(\"input[value=\" + key + \"]\");\n\t\t\tlet dom_label = this._dom_root.querySelector(\"label[for=\" + dom_input.id + \"]\")\n\n\t\t\tif (lookupdata.has(key))\n\t\t\t{\n\t\t\t\tdom_input.style.display = \"inline\";\n\t\t\t\tdom_label.style.display = \"inline\";\n\t\t\t\tdom_label.innerText = this._make_label(lookupdata.get(key));\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tdom_input.style.display = \"none\";\n\t\t\t\tdom_label.style.display = \"none\";\n\t\t\t\tdom_label.checked = false;\n\t\t\t}\n\t\t}\n\t}\n};\n\n\nclass LookupFieldBaseType extends FieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupFieldBase;\n\t}\n};\n\nlet lookupfieldbasetype = new LookupFieldBaseType(\"la\", \"LookupFieldBase\", \"Base type of LookupField and MultipleLookupField\");\n\n\nexport class LookupFieldBase extends ChoiceFieldBase\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupfieldbasetype;\n\t}\n\n\tget lookupdata()\n\t{\n\t\tif (this._lookupdata !== null)\n\t\t\treturn this._lookupdata;\n\t\telse\n\t\t\treturn this.control.lookupdata;\n\t}\n\n\tset lookupdata(value)\n\t{\n\t\tif (this._in_form())\n\t\t\tthis._set_dom_lookupdata(value);\n\t\tthis._lookupdata = value;\n\t}\n\n\t_set_dom_lookupdata(lookupdata)\n\t{\n\t}\n\n\t_make_label(value)\n\t{\n\t\tif (typeof(value) === \"string\")\n\t\t\treturn value;\n\t\telse if (value instanceof LookupItem)\n\t\t\treturn value.label;\n\t\telse\n\t\t\treturn ul4._str(value);\n\t}\n\n\t_find_lookupitem(change)\n\t{\n\t\tlet v = change.value;\n\t\tif (typeof(v) === \"string\")\n\t\t{\n\t\t\t// If `lookupdata` is `null`, this probably an interface,\n\t\t\t// so we can't validate anything (note that interfaces will however go\n\t\t\t// away in the future)\n\t\t\tif (this.lookupdata === null)\n\t\t\t\treturn;\n\t\t\tlet lookupitem = this.control.lookupdata.get(v);\n\t\t\tif (lookupitem === undefined)\n\t\t\t{\n\t\t\t\t// If the lookup control is auto expandable,\n\t\t\t\t// the user may have given us a label\n\t\t\t\tif (this.control.autoexpandable)\n\t\t\t\t{\n\t\t\t\t\t// Search for the LookupItem with that label\n\t\t\t\t\tfor (let search_lookupitem of this.lookupdata.values())\n\t\t\t\t\t{\n\t\t\t\t\t\tif (v === search_lookupitem.label)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tchange.value = search_lookupitem;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// If we couldn't find the label, keep the label as it is.\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tchange.errors.push(this.msg_lookup_unknownkey(v))\n\t\t\t\t\tchange.value = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tchange.value = lookupitem;\n\t\t\t}\n\t\t}\n\t\telse if (v instanceof LookupItem)\n\t\t{\n\t\t\tlet value = this.control.lookupdata.get(v.key);\n\t\t\tif (value !== v)\n\t\t\t{\n\t\t\t\tchange.errors.push(this.msg_lookup_wrongitem(v));\n\t\t\t\tchange.value = null;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(v));\n\t\t\tchange.value = null;\n\t\t}\n\t}\n};\n\n\nclass LookupFieldType extends LookupFieldBaseType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupField;\n\t}\n};\n\nlet lookupfieldtype = new LookupFieldType(\"la\", \"LookupField\", \"Holds the value of a lookup field of a record (and related information)\");\n\n\nexport class LookupField extends LookupFieldBase\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupfieldtype;\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\tlet value = this.value;\n\t\tif (value === null)\n\t\t\treturn null;\n\t\treturn value.label;\n\t}\n\n\t_validate(change)\n\t{\n\t\tlet v = change.value;\n\t\tif (v === null || v === \"\" || this.control.none_key === v)\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(v));\n\t\t\tchange.value = null;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._find_lookupitem(change);\n\t\t}\n\t}\n};\n\n\nclass LookupRadioFieldType extends LookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupRadioField;\n\t}\n};\n\nlet lookupradiofieldtype = new LookupRadioFieldType(\"la\", \"LookupRadioField\", \"Holds the value of a lookup/radio field of a record (and related information)\");\n\n\nexport class LookupRadioField extends LookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupradiofieldtype;\n\t}\n\n\tget _sel_label()\n\t{\n\t\treturn this._sel_root + \" label:not([for]) > span\";\n\t}\n\n\t_get_dom_value()\n\t{\n\t\tfor (let node of this._dom_controls)\n\t\t{\n\t\t\tif (node.checked)\n\t\t\t{\n\t\t\t\tlet key = node.getAttribute(\"value\");\n\t\t\t\treturn this.control.lookupdata.get(key);\n\t\t\t}\n\n\t\t}\n\t\treturn null;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tif (value instanceof LookupItem)\n\t\t\tvalue = value.key;\n\t\tif (value === null)\n\t\t\tvalue = this.control.none_key;\n\n\t\tfor (let node of this._dom_controls)\n\t\t\tnode.checked = node.getAttribute(\"value\") === value;\n\t}\n\n\t_set_dom_lookupdata(lookupdata)\n\t{\n\t\tthis._set_dom_lookupdata_input(lookupdata);\n\t}\n};\n\n\nclass LookupSelectFieldType extends LookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupSelectField;\n\t}\n};\n\nlet lookupselectfieldtype = new LookupSelectFieldType(\"la\", \"LookupSelectField\", \"Holds the value of a lookup/select field of a record (and related information)\");\n\n\nexport class LookupSelectField extends LookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupselectfieldtype;\n\t}\n\n\t_get_dom_value()\n\t{\n\t\tlet value = super._get_dom_value();\n\t\tif (value)\n\t\t{\n\t\t\tif (value === this.control.none_key)\n\t\t\t\tvalue = null;\n\t\t\telse\n\t\t\t\tvalue = this.control.lookupdata.get(value);\n\t\t}\n\t\treturn value;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tlet change = {value: value, errors: []};\n\t\tthis._validate(change);\n\t\tsuper._set_dom_value(change.value != null ? change.value.key : this.control.none_key);\n\t}\n\n\t_set_dom_lookupdata(lookupdata)\n\t{\n\t\tthis._set_dom_lookupdata_select(lookupdata);\n\t}\n};\n\n\nclass LookupChoiceFieldType extends LookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupChoiceField;\n\t}\n};\n\nlet lookupchoicefieldtype = new LookupChoiceFieldType(\"la\", \"LookupChoiceField\", \"Holds the value of a lookup/choice field of a record (and related information)\");\n\n\nexport class LookupChoiceField extends LookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupchoicefieldtype;\n\t}\n};\n\nLookupChoiceField.prototype._inputevent = \"llchoice\";\n\n\nclass MultipleLookupFieldType extends LookupFieldBaseType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleLookupField;\n\t}\n};\n\nlet multiplelookupfieldtype = new MultipleLookupFieldType(\"la\", \"MultipleLookupField\", \"Holds the value of a multiple lookup field of a record (and related information)\");\n\n\nexport class MultipleLookupField extends LookupFieldBase\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multiplelookupfieldtype;\n\t}\n\n\tis_empty()\n\t{\n\t\treturn this._value.length === 0;\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\tlet value = this.value;\n\t\tif (value === null || value.length === 0)\n\t\t\treturn null;\n\t\treturn value.map(item => item.label).join(\", \");\n\t}\n\n\t_validate(change)\n\t{\n\t\tlet v = change.value;\n\t\tlet islist = (Object.prototype.toString.call(v) === \"[object Array]\");\n\n\t\tif (v === null || v === \"\" || this.control.none_key === v || (islist && v.length === 0))\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(v));\n\t\t\tchange.value = [];\n\t\t}\n\t\telse if (islist)\n\t\t{\n\t\t\tlet newvalue = [];\n\t\t\tfor (let item of v)\n\t\t\t{\n\t\t\t\tlet singlechange = {value: item, errors: []};\n\t\t\t\tthis._find_lookupitem(singlechange);\n\t\t\t\tif (singlechange.errors.length > 0)\n\t\t\t\t\tchange.errors = [...change.errors, ...singlechange.errors];\n\t\t\t\telse\n\t\t\t\t\tnewvalue.push(singlechange.value);\n\t\t\t}\n\t\t\tchange.value = newvalue;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._find_lookupitem(change);\n\t\t\tif (change.errors.length > 0)\n\t\t\t\tchange.value = [];\n\t\t\telse\n\t\t\t\tchange.value = [change.value];\n\t\t}\n\t}\n};\n\n\nclass MultipleLookupCheckboxFieldType extends MultipleLookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleLookupCheckboxField;\n\t}\n};\n\nlet multiplelookupcheckboxfieldtype = new MultipleLookupCheckboxFieldType(\"la\", \"MultipleLookupCheckboxField\", \"Holds the value of a multiplelookup/radio field of a record (and related information)\");\n\n\nexport class MultipleLookupCheckboxField extends MultipleLookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multiplelookupcheckboxfieldtype;\n\t}\n\n\tget _sel_label()\n\t{\n\t\treturn this._sel_root + \" label:not([for]) > span\";\n\t}\n\n\t_get_dom_value()\n\t{\n\t\tlet value = [];\n\t\tfor (let node of this._dom_controls)\n\t\t{\n\t\t\tif (node.checked)\n\t\t\t{\n\t\t\t\tlet key = node.getAttribute(\"value\");\n\t\t\t\tvalue.push(this.control.lookupdata.get(key));\n\t\t\t}\n\n\t\t}\n\t\treturn value;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tlet change = {value: value, errors: []};\n\t\tthis._validate(change);\n\t\tlet values = new Set();\n\t\tfor (let value of change.value)\n\t\t\tvalues.add(value.key);\n\n\t\tfor (let node of this._dom_controls)\n\t\t\tnode.checked = values.has(node.getAttribute(\"value\"));\n\t}\n\n\t_set_dom_lookupdata(lookupdata)\n\t{\n\t\tthis._set_dom_lookupdata_input(lookupdata);\n\t}\n};\n\n\nclass MultipleLookupSelectFieldType extends MultipleLookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleLookupSelectField;\n\t}\n};\n\nlet multiplelookupselectfieldtype = new MultipleLookupSelectFieldType(\"la\", \"MultipleLookupSelectField\", \"Holds the value of a multiplelookup/select field of a record (and related information)\");\n\nexport class MultipleLookupSelectField extends MultipleLookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multiplelookupselectfieldtype;\n\t}\n\n\t_get_dom_value()\n\t{\n\t\tlet value = [];\n\t\tfor (let option of this._dom_control.querySelectorAll(\"option\"))\n\t\t{\n\t\t\tif (option.selected)\n\t\t\t\tvalue.push(this.control.lookupdata.get(option.getAttribute(\"value\")));\n\t\t}\n\t\treturn value;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tlet change = {value: value, errors: []};\n\t\tthis._validate(change);\n\t\tlet values = new Set();\n\t\tfor (let value of change.value)\n\t\t\tvalues.add(value.key);\n\t\tfor (let option of this._dom_control.querySelectorAll(\"option\"))\n\t\t\toption.selected = values.has(option.getAttribute(\"value\"));\n\t}\n\n\t_set_dom_lookupdata(lookupdata)\n\t{\n\t\tthis._set_dom_lookupdata_select(lookupdata);\n\t}\n};\n\n\nclass MultipleLookupChoiceFieldType extends MultipleLookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleLookupChoiceField;\n\t}\n};\n\nlet multiplelookupchoicefieldtype = new MultipleLookupChoiceFieldType(\"la\", \"MultipleLookupChoiceField\", \"Holds the value of a multiplelookup/choice field of a record (and related information)\");\n\n\nexport class MultipleLookupChoiceField extends MultipleLookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multiplelookupchoicefieldtype;\n\t}\n};\n\nMultipleLookupChoiceField.prototype._inputevent = \"llchoice\";\n\n\nclass AppLookupFieldBaseType extends FieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppLookupFieldBase;\n\t}\n};\n\nlet applookupfieldbasetype = new AppLookupFieldBaseType(\"la\", \"AppLookupFieldBase\", \"Base type of AppLookupField and MultipleAppLookupField\");\n\n\nexport class AppLookupFieldBase extends ChoiceFieldBase\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn applookupfieldbasetype;\n\t}\n\n\tget lookupdata()\n\t{\n\t\tif (this._lookupdata !== null)\n\t\t\treturn this._lookupdata;\n\t\telse\n\t\t{\n\t\t\tif (this.control.lookup_app.records !== null)\n\t\t\t\treturn this.control.lookup_app.records;\n\t\t}\n\t\treturn new Map();\n\t}\n\n\tset lookupdata(value)\n\t{\n\t\tif (this._in_form())\n\t\t\tthis._set_dom_lookupdata(value);\n\t\tthis._lookupdata = value;\n\t}\n\n\t_set_dom_lookupdata(lookupdata)\n\t{\n\t}\n\n\t_make_label(value)\n\t{\n\t\tif (typeof(value) === \"string\")\n\t\t\treturn value;\n\t\telse if (value instanceof Record)\n\t\t\treturn value.as_text(this.control.lookup_controls);\n\t\telse\n\t\t\treturn ul4._str(value);\n\t}\n\n\t_find_record(change)\n\t{\n\t\tlet v = change.value;\n\t\tif (typeof(v) === \"string\")\n\t\t{\n\t\t\tlet record = this.control.lookup_app.records !== null ?\n\t\t\t\tthis.control.lookup_app.records.get(v) :\n\t\t\t\tundefined\n\t\t\t;\n\n\t\t\tif (record === undefined)\n\t\t\t{\n\t\t\t\tchange.errors.push(this.msg_applookup_unknownkey(v))\n\t\t\t\tchange.value = null;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tchange.value = record;\n\t\t\t}\n\t\t}\n\t\telse if (v instanceof Record)\n\t\t{\n\t\t\tif (v.app !== this.control.lookup_app)\n\t\t\t{\n\t\t\t\tchange.errors.push(this.msg_applookup_wrongrecord(v));\n\t\t\t\tchange.value = null;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(v));\n\t\t\tchange.value = null;\n\t\t}\n\t}\n\n\t[ul4.symbols.setattr](name, value)\n\t{\n\t\tif (name === \"lookupdata\")\n\t\t\tthis.lookupdata = value;\n\t\telse\n\t\t\tsuper[ul4.symbols.setattr](name, value);\n\t}\n};\nAppLookupFieldBase.prototype._ul4attrs = new Set([...Field.prototype._ul4attrs, \"lookupdata\"]);\n\n\n\nclass AppLookupFieldType extends AppLookupFieldBaseType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppLookupField;\n\t}\n};\n\nlet applookupfieldtype = new AppLookupFieldType(\"la\", \"AppLookupField\", \"Holds the value of a applookup field of a record (and related information)\");\n\n\nexport class AppLookupField extends AppLookupFieldBase\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn applookupfieldtype;\n\t}\n\n\tvalue_as_text(maxlevel=3)\n\t{\n\t\tlet value = this.value;\n\t\tif (value === null)\n\t\t\treturn null;\n\t\treturn \"(\" + this.value.as_text(maxlevel) + \")\";\n\t}\n\n\t_validate(change)\n\t{\n\t\tthis._find_record(change);\n\t}\n};\n\n\nclass AppLookupSelectFieldType extends AppLookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppLookupSelectField;\n\t}\n};\n\nlet applookupselectfieldtype = new AppLookupSelectFieldType(\"la\", \"AppLookupSelectField\", \"Holds the value of a `applookup`/`select` field of a record (and related information)\");\n\n\nexport class AppLookupSelectField extends AppLookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn applookupselectfieldtype;\n\t}\n\n\t_get_dom_value()\n\t{\n\t\tlet value = super._get_dom_value();\n\n\t\tif (this.control.lookup_app.records !== null)\n\t\t{\n\t\t\tvalue = this.control.lookup_app.records.get(value);\n\t\t\tif (value === undefined)\n\t\t\t\tvalue = null;\n\t\t}\n\t\telse\n\t\t\tvalue = null;\n\t\treturn value;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tlet change = {value: value, errors: []};\n\t\tthis._validate(change);\n\t\tsuper._set_dom_value(change.value != null ? change.value.id : this.control.none_key);\n\t}\n\n\t_set_dom_lookupdata(lookupdata)\n\t{\n\t\tthis._set_dom_lookupdata_select(lookupdata);\n\t}\n};\n\n\nclass AppLookupRadioFieldType extends AppLookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppLookupRadioField;\n\t}\n};\n\nlet applookupradiofieldtype = new AppLookupRadioFieldType(\"la\", \"AppLookupRadioField\", \"Holds the value of a `applookup`/`radio` field of a record (and related information)\");\n\n\nexport class AppLookupRadioField extends AppLookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn applookupradiofieldtype;\n\t}\n};\n\n\nclass AppLookupChoiceFieldType extends AppLookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppLookupChoiceField;\n\t}\n};\n\nlet applookupchoicefieldtype = new AppLookupChoiceFieldType(\"la\", \"AppLookupChoiceField\", \"Holds the value of a `applookup`/`choice` field of a record (and related information)\");\n\n\nexport class AppLookupChoiceField extends AppLookupField\n{\n\tconstructor(control, record, value)\n\t{\n\t\tsuper(control, record, value);\n\t\tthis._search_url = null;\n\t\tthis._search_param_name = null;\n\t\tthis._target_param_name = null;\n\t}\n\n\t[ul4.symbols.type]()\n\t{\n\t\treturn applookupchoicefieldtype;\n\t}\n\n\tget search_url()\n\t{\n\t\treturn this._search_url ?? this.control.search_url;\n\t}\n\n\tset search_url(value)\n\t{\n\t\tthis._search_url = value;\n\t}\n\n\tget search_param_name()\n\t{\n\t\treturn this._search_param_name ?? this.control.search_param_name;\n\t}\n\n\tset search_param_name(value)\n\t{\n\t\tthis._search_param_name = value;\n\t}\n\n\tget target_param_name()\n\t{\n\t\treturn this._target_param_name ?? this.control.target_param_name;\n\t}\n\n\tset target_param_name(value)\n\t{\n\t\tthis._target_param_name = value;\n\t}\n};\n\nAppLookupChoiceField.prototype._inputevent = \"llchoice\";\nAppLookupChoiceField.prototype._ul4attrs = new Set([...Field.prototype._ul4attrs, \"search_url\", \"search_param_name\", \"target_param_name\"]);\n\n\nclass MultipleAppLookupFieldType extends AppLookupFieldBaseType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleAppLookupField;\n\t}\n};\n\nlet multipleapplookupfieldtype = new MultipleAppLookupFieldType(\"la\", \"MultipleAppLookupField\", \"Holds the value of a multiple applookup field of a record (and related information)\");\n\n\nexport class MultipleAppLookupField extends AppLookupFieldBase\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multipleapplookupfieldtype;\n\t}\n\n\tis_empty()\n\t{\n\t\treturn this._value.length === 0;\n\t}\n\n\t_validate(change)\n\t{\n\t\tlet v = change.value;\n\t\tlet islist = (Object.prototype.toString.call(v) === \"[object Array]\");\n\n\t\tif (v === null || v === \"\" || this.control.none_key === v || (islist && v.length === 0))\n\t\t{\n\t\t\tif (this.control.required)\n\t\t\t\tchange.errors.push(this.msg_field_required(v));\n\t\t\tchange.value = [];\n\t\t}\n\t\telse if (islist)\n\t\t{\n\t\t\tlet newvalue = [];\n\t\t\tfor (let item of v)\n\t\t\t{\n\t\t\t\tlet singlechange = {value: item, errors: []};\n\t\t\t\tthis._find_record(singlechange);\n\t\t\t\tif (singlechange.errors.length > 0)\n\t\t\t\t\tchange.errors = [...change.errors, ...singlechange.errors];\n\t\t\t\telse\n\t\t\t\t\tnewvalue.push(singlechange.value);\n\t\t\t}\n\t\t\tchange.value = newvalue;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis._find_record(change);\n\t\t\tif (change.errors.length > 0)\n\t\t\t\tchange.value = [];\n\t\t\telse\n\t\t\t\tchange.value = [change.value];\n\t\t}\n\t}\n};\n\n\nclass MultipleAppLookupCheckboxFieldType extends MultipleAppLookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleAppLookupCheckboxField;\n\t}\n};\n\nlet multipleapplookupcheckboxfieldtype = new MultipleAppLookupCheckboxFieldType(\"la\", \"MultipleAppLookupCheckboxField\", \"Holds the value of a `multipleapplookup`/`checkbox` field of a record (and related information)\");\n\n\nexport class MultipleAppLookupCheckboxField extends MultipleAppLookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multipleapplookupcheckboxfieldtype;\n\t}\n};\n\n\nclass MultipleAppLookupSelectFieldType extends MultipleAppLookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleAppLookupSelectField;\n\t}\n};\n\nlet multipleapplookupselectfieldtype = new MultipleAppLookupSelectFieldType(\"la\", \"MultipleAppLookupSelectField\", \"Holds the value of a `multipleapplookup`/`select` field of a record (and related information)\");\n\n\nexport class MultipleAppLookupSelectField extends MultipleAppLookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multipleapplookupselectfieldtype;\n\t}\n\n\t_set_dom_lookupdata(lookupdata)\n\t{\n\t\tthis._set_dom_lookupdata_select(lookupdata);\n\t}\n};\n\n\nclass MultipleAppLookupChoiceFieldType extends MultipleAppLookupFieldType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleAppLookupChoiceField;\n\t}\n};\n\nlet multipleapplookupchoicefieldtype = new MultipleAppLookupChoiceFieldType(\"la\", \"MultipleAppLookupChoiceField\", \"Holds the value of a `multipleapplookup`/`choice` field of a record (and related information)\");\n\n\nexport class MultipleAppLookupChoiceField extends MultipleAppLookupField\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multipleapplookupchoicefieldtype;\n\t}\n};\n\nMultipleAppLookupChoiceField.prototype._inputevent = \"llchoice\";\n\n\nclass ControlType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Control;\n\t}\n};\n\nlet controltype = new ControlType(\"la\", \"Control\", \"Metainformation about a field in a LivingApps application\");\n\n\nexport class Control extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn controltype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<\" + this.constructor.name + \" id=\" + ul4._repr(this.id) + \" identifier=\" + ul4._repr(this.identifier) + \">\";\n\t}\n\n\tget globals()\n\t{\n\t\treturn this.app.globals;\n\t}\n\n\tget fulltype()\n\t{\n\t\treturn this.subtype ? this.type + \"/\" + this.subtype : this.type;\n\t}\n\n\tget label()\n\t{\n\t\tlet view_control = this._view_control();\n\t\tif (view_control === null)\n\t\t\treturn this._label;\n\t\tlet label = view_control.label;\n\t\tif (label === null)\n\t\t\treturn this._label;\n\t\treturn label;\n\t}\n\n\tset label(value)\n\t{\n\t\tthis._label = value;\n\t}\n\n\tget description()\n\t{\n\t\treturn this._description;\n\t}\n\n\tset description(value)\n\t{\n\t\tthis._description = value;\n\t}\n\n\tget priority()\n\t{\n\t\treturn this._priority;\n\t}\n\n\tset priority(value)\n\t{\n\t\tthis._priority = value;\n\t}\n\n\tget in_list()\n\t{\n\t\treturn this._priority;\n\t}\n\n\tset in_list(value)\n\t{\n\t\tthis._priority = value;\n\t}\n\n\tget in_mobile_list()\n\t{\n\t\treturn this._in_mobile_list;\n\t}\n\n\tset in_mobile_list(value)\n\t{\n\t\tthis._in_mobile_list = value;\n\t}\n\n\tget in_text()\n\t{\n\t\treturn this._in_text;\n\t}\n\n\tset in_text(value)\n\t{\n\t\tthis._in_text = value;\n\t}\n\n\tget default()\n\t{\n\t\treturn null;\n\t}\n\n\tget top()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.top : null;\n\t}\n\n\tget left()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.left : null;\n\t}\n\n\tget width()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.width : null;\n\t}\n\n\tget height()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.height : null;\n\t}\n\n\tget z_index()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.z_index : null;\n\t}\n\n\tget liveupdate()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.liveupdate : false;\n\t}\n\n\tget tabindex()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.tabindex : null;\n\t}\n\n\tget required()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.required : this._required;\n\t}\n\n\tset required(value)\n\t{\n\t\tthis._required = value;\n\t}\n\n\tget mode()\n\t{\n\t\tlet view_control = this._view_control();\n\t\tif (this.app._active_view !== null && view_control === null)\n\t\t\treturn null;\n\t\tif (this.app.globals.mode === null)\n\t\t\treturn \"display\";\n\t\treturn view_control !== null ? view_control.mode : \"edit\";\n\t}\n\n\tget labelpos()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.labelpos : \"left\";\n\t}\n\n\tget labelwidth()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.labelwidth : null;\n\t}\n\n\tget autoalign()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null ? view_control.autoalign : true;\n\t}\n\n\tget in_active_view()\n\t{\n\t\tlet view_control = this._view_control();\n\t\treturn view_control !== null;\n\t}\n\n\t_view_control()\n\t{\n\t\tif (this.app._active_view === null)\n\t\t\treturn null;\n\t\tlet view_control = this.app._active_view.controls.get(this.identifier);\n\t\treturn view_control ?? null;\n\t}\n\n\t_logsearch(value, search)\n\t{\n\t\t//console.log(\"Searching for \" + ul4._repr(search.value) + \" in \" + ul4._repr(this) + \" with operator \" + search.operator + \" in value \" + ul4._repr(value));\n\t}\n\n\t// base implemntation, always returns ``false`` (i.e. \"not found\")\n\t// ``value`` is the value of the field\n\t// ``search`` is an object with information what we're searching for\n\t// keys in ``search`` are: ``operator`` (and ``value`` (if required by the operator))\n\tsearch(value, search)\n\t{\n\t\treturn false;\n\t}\n};\n\nControl.prototype.type = null;\nControl.prototype.subtype = null;\nControl.prototype._ul4onattrs = [\"identifier\", \"fieldname\", \"app\", \"_label\", \"_description\", \"_priority\", \"_in_mobile_list\", \"_in_text\", \"_required\", \"order\", \"ininsertprocedure\", \"inupdateprocedure\"];\nControl.prototype._ul4attrs = new Set([\"id\", \"identifier\", \"fieldname\", \"app\", \"priority\", \"in_list\", \"in_mobile_list\", \"in_text\", \"order\", \"ininsertprocedure\", \"inupdateprocedure\", \"fulltype\", \"label\", \"description\", \"top\", \"left\", \"width\", \"height\", \"z_index\", \"liveupdate\", \"tabindex\", \"required\", \"mode\", \"labelpos\", \"autoalign\", \"in_active_view\"]);\nControl.prototype._cssclass_root = \"llft-control\";\nControl.prototype._cssclass_control = \"input\";\n\n\nclass BoolControlType extends ControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof BoolControl;\n\t}\n};\n\nlet boolcontroltype = new BoolControlType(\"la\", \"BoolControl\", \"A LivingApps boolean field (type 'bool')\");\n\n\nexport class BoolControl extends Control\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn boolcontroltype;\n\t}\n\n\t// ``search`` must by ``null``, ``false`` or ``true``\n\tsearch(value, search)\n\t{\n\t\tthis._logsearch(value, search);\n\t\tif (search.operator === \"equals\")\n\t\t\treturn search.value === value;\n\t\telse\n\t\t\treturn false;\n\t}\n};\n\nBoolControl.prototype.type = \"bool\";\nBoolControl.prototype.fieldtype = BoolField;\n\n\nclass IntControlType extends ControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof IntControl;\n\t}\n};\n\nlet intcontroltype = new IntControlType(\"la\", \"IntControl\", \"A LivingApps integer field (type 'int')\");\n\n\nexport class IntControl extends Control\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn intcontroltype;\n\t}\n\n\t// ``search.value`` must by ``null`` or an integer\n\tsearch(value, search)\n\t{\n\t\tthis._logsearch(value, search);\n\t\tif (search.operator === \"equals\")\n\t\t\treturn search.value === value;\n\t\telse\n\t\t\treturn false;\n\t}\n};\n\nIntControl.prototype.type = \"int\";\nIntControl.prototype.fieldtype = IntField;\n\n\nclass PlaceholderControlType extends ControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof PlaceholderControld;\n\t}\n};\n\nlet placeholdercontroltype = new PlaceholderControlType(\"la\", \"PlaceholderControl\", \"A LivingApps field that has a placeholder\");\n\n\nclass PlaceholderControl extends Control\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn placeholdercontroltype;\n\t}\n\n\tget placeholder()\n\t{\n\t\tlet view_control = this._view_control();\n\t\tif (view_control === null)\n\t\t\treturn null;\n\t\treturn view_control.placeholder;\n\t}\n};\n\nPlaceholderControl.prototype._ul4attrs = new Set([...Control.prototype._ul4attrs, \"placeholder\"]);\n\n\nclass NumberControlType extends PlaceholderControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof NumberControl;\n\t}\n};\n\nlet numbercontroltype = new NumberControlType(\"la\", \"NumberControl\", \"A LivingApps number field (type 'number')\");\n\n\nexport class NumberControl extends PlaceholderControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn numbercontroltype;\n\t}\n\n\t// ``search.value`` must by ``null`` or an integer\n\tsearch(value, search)\n\t{\n\t\tthis._logsearch(value, search);\n\t\tif (search.operator === \"equals\")\n\t\t\treturn search.value === value;\n\t\telse if (search.operator === \"range\")\n\t\t{\n\t\t\tif (value === null)\n\t\t\t\treturn false;\n\t\t\treturn (search.minvalue === null || search.minvalue <= value) && (search.maxvalue === null || value < search.maxvalue);\n\t\t}\n\t\telse\n\t\t\treturn false;\n\t}\n};\n\nNumberControl.prototype.type = \"number\";\nNumberControl.prototype.fieldtype = NumberField;\nNumberControl.prototype._ul4onattrs = [...Control.prototype._ul4onattrs, \"precision\", \"minimum\", \"maximum\"];\nNumberControl.prototype._ul4attrs = new Set([...Control.prototype._ul4attrs, \"precision\", \"minimum\", \"maximum\"]);\n\n\nclass StringControlType extends PlaceholderControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof StringControl;\n\t}\n};\n\nlet stringcontroltype = new StringControlType(\"la\", \"StringControl\", \"A LivingApps number field (type 'string')\");\n\n\nexport class StringControl extends PlaceholderControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn stringcontroltype;\n\t}\n\n\t_user_placeholder(user, placeholder)\n\t{\n\t\tif (placeholder === null)\n\t\t\treturn null;\n\t\tswitch (placeholder)\n\t\t{\n\t\t\tcase \"{gender}\":\n\t\t\t\treturn user !== null ? user.gender : null;\n\t\t\tcase \"{title}\":\n\t\t\t\treturn user !== null ? user.title : null;\n\t\t\tcase \"{firstname}\":\n\t\t\t\treturn user !== null ? user.firstname : null;\n\t\t\tcase \"{surname}\":\n\t\t\t\treturn user !== null ? user.surname : null;\n\t\t\tcase \"{account}\":\n\t\t\t\treturn user !== null ? user.email : null;\n\t\t\tcase \"{streetname}\":\n\t\t\t\treturn user !== null ? user.streetname : null;\n\t\t\tcase \"{streetnumber}\":\n\t\t\t\treturn user !== null ? user.streetnumber : null;\n\t\t\tcase \"{street}\":\n\t\t\t\tif (user === null)\n\t\t\t\t\treturn null;\n\t\t\t\telse if (user.street === null)\n\t\t\t\t\treturn user.streetnumber;\n\t\t\t\telse if (user.streetnumber === null)\n\t\t\t\t\treturn user.street;\n\t\t\t\telse\n\t\t\t\t\treturn user.street + \" \" + user.streetnumber;\n\t\t\tcase \"{zip}\":\n\t\t\t\treturn user !== null ? user.zip : null;\n\t\t\tcase \"{phone}\":\n\t\t\t\treturn user !== null ? user.phone : null;\n\t\t\tcase \"{fax}\":\n\t\t\t\treturn user !== null ? user.fax : null;\n\t\t\tcase \"{company}\":\n\t\t\t\treturn user !== null ? user.company : null;\n\t\t\tcase \"{city}\":\n\t\t\t\treturn user !== null ? user.city : null;\n\t\t\tcase \"{summary}\":\n\t\t\t\treturn user !== null ? user.summary : null;\n\t\t\tcase \"{interests}\":\n\t\t\t\treturn user !== null ? user.interests : null;\n\t\t\tcase \"{personal_website}\":\n\t\t\t\treturn user !== null ? user.personal_website : null;\n\t\t\tcase \"{company_website}\":\n\t\t\t\treturn user !== null ? user.company_website : null;\n\t\t\tcase \"{position}\":\n\t\t\t\treturn user !== null ? user.position : null;\n\t\t\tcase \"{department}\":\n\t\t\t\treturn user !== null ? user.department : null;\n\t\t\tcase \"{today}\":\n\t\t\t\treturn ul4.today();\n\t\t\tdefault:\n\t\t\t\treturn placeholder;\n\t\t}\n\t}\n\n\tget default()\n\t{\n\t\tlet view_control = this._view_control();\n\n\t\tif (view_control === null)\n\t\t\treturn null;\n\n\t\treturn this._user_placeholder(this.app.globals.user, view_control.default);\n\t}\n\n\tget minlength()\n\t{\n\t\tlet view_control = this._view_control();\n\n\t\tif (view_control === null)\n\t\t\treturn 0;\n\t\tlet minlength = view_control.minlength;\n\t\tif (minlength === null || minlength < 0)\n\t\t\treturn 0;\n\t\treturn minlength;\n\t}\n\n\tget maxlength()\n\t{\n\t\tlet view_control = this._view_control();\n\n\t\tif (view_control === null)\n\t\t\treturn 4000;\n\t\tlet maxlength = view_control.maxlength;\n\t\tif (maxlength === null || maxlength < 0 || maxlength > 4000)\n\t\t\treturn 4000;\n\t\treturn maxlength;\n\t}\n\n\tsearch(value, search)\n\t{\n\t\tthis._logsearch(value, search);\n\t\tif (search.operator === \"equals\")\n\t\t\treturn search.value === value;\n\t\telse if (search.operator === \"contains\")\n\t\t{\n\t\t\tif (search.value === null || value === null)\n\t\t\t\treturn search.value === value;\n\t\t\telse\n\t\t\t\treturn value.toLowerCase().indexOf(search.value.toLowerCase()) >= 0;\n\t\t}\n\t}\n};\n\nStringControl.prototype.type = \"string\";\n\n\nclass TextControlType extends StringControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof TextControl;\n\t}\n};\n\nlet textcontroltype = new TextControlType(\"la\", \"TextControl\", \"A LivingApps text field (type 'string/text')\");\n\n\nexport class TextControl extends StringControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn textcontroltype;\n\t}\n};\n\nTextControl.prototype.subtype = \"text\";\nTextControl.prototype.fieldtype = StringField;\n\n\nclass PasswordControlType extends StringControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof PasswordControl;\n\t}\n};\n\nlet passwordcontroltype = new PasswordControlType(\"la\", \"PasswordControl\", \"A LivingApps password field (type 'string/password')\");\n\n\nexport class PasswordControl extends StringControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn passwordcontroltype;\n\t}\n};\n\nPasswordControl.prototype.subtype = \"password\";\nPasswordControl.prototype.fieldtype = PasswordField;\n\n\nclass EmailControlType extends StringControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof EmailControl;\n\t}\n};\n\nlet emailcontroltype = new EmailControlType(\"la\", \"EmailControl\", \"A LivingApps email field (type 'string/email')\");\n\n\nexport class EmailControl extends StringControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn emailcontroltype;\n\t}\n};\n\nEmailControl.prototype.subtype = \"email\";\nEmailControl.prototype.fieldtype = EmailField;\n\n\nclass URLControlType extends StringControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof URLControl;\n\t}\n};\n\nlet urlcontroltype = new URLControlType(\"la\", \"URLControl\", \"A LivingApps URL field (type 'string/url')\");\n\n\nexport class URLControl extends StringControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn urlcontroltype;\n\t}\n};\n\nURLControl.prototype.subtype = \"url\";\nURLControl.prototype.fieldtype = URLField;\n\n\nclass TelControlType extends StringControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof TelControl;\n\t}\n};\n\nlet telcontroltype = new TelControlType(\"la\", \"TelControl\", \"A LivingApps phone number field (type 'string/tel')\");\n\n\nexport class TelControl extends StringControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn telcontroltype;\n\t}\n};\n\nTelControl.prototype.subtype = \"tel\";\nTelControl.prototype.fieldtype = TelField;\n\n\nclass TextAreaControlType extends StringControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof TextAreaControl;\n\t}\n};\n\nlet textareacontroltype = new TextAreaControlType(\"la\", \"TextAreaControl\", \"A LivingApps textarea field (type 'string/textarea')\");\n\n\nexport class TextAreaControl extends StringControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn textareacontroltype;\n\t}\n\n\tget maxlength()\n\t{\n\t\tlet view_control = this._view_control();\n\n\t\tif (view_control === null)\n\t\t\treturn null;\n\t\t// We only get the encrypted text in encryption mode, so we can't check its length\n\t\tif (this.encrypted !== null)\n\t\t\treturn null;\n\t\tlet maxlength = view_control.maxlength;\n\t\tif (maxlength < 0)\n\t\t\treturn null;\n\t\treturn maxlength;\n\t}\n};\n\nTextAreaControl.prototype.subtype = \"textarea\";\nTextAreaControl.prototype.fieldtype = TextAreaField;\nTextAreaControl.prototype._ul4onattrs = [...StringControl.prototype._ul4onattrs, \"encrypted\"];\nTextAreaControl.prototype._ul4attrs = new Set([...StringControl.prototype._ul4attrs, \"encrypted\"]);\nTextAreaControl.prototype._cssclass_control = \"textarea\";\n\n\nclass HTMLControlType extends StringControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof HTMLControl;\n\t}\n};\n\nlet htmlcontroltype = new HTMLControlType(\"la\", \"HTMLControl\", \"A LivingApps HTML field (type 'string/html')\");\n\n\nexport class HTMLControl extends StringControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn htmlcontroltype;\n\t}\n};\n\nHTMLControl.prototype.subtype = \"html\";\nHTMLControl.prototype.fieldtype = HTMLField;\n\n\nclass DateControlType extends PlaceholderControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof DateControl;\n\t}\n};\n\nlet datecontroltype = new DateControlType(\"la\", \"DateControl\", \"A LivingApps date field (type 'date/date')\");\n\n\nexport class DateControl extends PlaceholderControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn datecontroltype;\n\t}\n\n\tget default()\n\t{\n\t\tlet view_control = this._view_control();\n\n\t\tif (view_control === null)\n\t\t\treturn null;\n\n\t\treturn view_control.default === \"{today}\" ? ul4.today() : null;\n\t}\n\n\tformatstring(lang)\n\t{\n\t\tlang = lang || this.globals.lang;\n\n\t\tif (lang !== \"de\" && lang !== \"fr\" && lang !== \"it\")\n\t\t\tlang = \"en\";\n\t\treturn this._formatstrings[lang];\n\t}\n\n\tformatstrings_parse(lang)\n\t{\n\t\tlang = lang || this.globals.lang;\n\t\tif (lang !== \"de\" && lang !== \"fr\" && lang !== \"it\")\n\t\t\tlang = \"en\";\n\n\t\treturn [\n\t\t\t...this._formatstrings_parse[lang],\n\t\t\t...this._formatstrings_parse[\"intl\"]\n\t\t];\n\t}\n\n\t// searchvalue must be ``null``, a ``Date`` object or a string\n\tsearch(value, search)\n\t{\n\t\tthis._logsearch(value, search);\n\n\t\tlet searchvalue = search.value;\n\t\tif (Object.prototype.toString.call(searchvalue) == \"[object Date]\")\n\t\t\tsearchvalue = ul4._format(searchvalue, this.formatstring(), this.app.language);\n\t\tif (value !== null)\n\t\t\tvalue = ul4._format(value, this.formatstring(), this.app.language);\n\n\t\tif (search.operator === \"equals\")\n\t\t\treturn searchvalue === value;\n\t\telse if (search.operator === \"contains\")\n\t\t{\n\t\t\tif (searchvalue === null || value === null)\n\t\t\t\treturn searchvalue === value;\n\t\t\telse\n\t\t\t\treturn value.toLowerCase().indexOf(searchvalue.toLowerCase()) >= 0;\n\t\t}\n\t\telse\n\t\t\treturn false;\n\t}\n};\n\nDateControl.prototype.type = \"date\";\nDateControl.prototype.subtype = \"date\";\nDateControl.prototype.fieldtype = DateField;\nDateControl.prototype._formatstrings = {\n\t\"de\": \"%d.%m.%Y\",\n\t\"fr\": \"%d.%m.%Y\",\n\t\"it\": \"%d.%m.%Y\",\n\t\"en\": \"%m/%d/%Y\",\n\t\"intl\": \"%Y-%m-%d\"\n};\n\nlet _suffixes = [\n\t\"\",\n\t\" %H:%M\",\n\t\"T%H:%M\",\n\t\" %H:%M:%S\",\n\t\"T%H:%M:%S\",\n\t\" %H:%M:%S.%f\",\n\t\"T%H:%M:%S.%f\",\n\t\" %H:%M%z\",\n\t\"T%H:%M%z\",\n\t\" %H:%M:%S%z\",\n\t\"T%H:%M:%S%z\",\n\t\" %H:%M:%S.%f%z\",\n\t\"T%H:%M:%S.%f%z\",\n\t\" %H:%M %z\",\n\t\"T%H:%M %z\",\n\t\" %H:%M:%S %z\",\n\t\"T%H:%M:%S %z\",\n\t\" %H:%M:%S.%f %z\",\n\t\"T%H:%M:%S.%f %z\"\n]\n\nDateControl.prototype._formatstrings_parse = {\n\t\"en\": _suffixes.map(s => \"%m/%d/%Y\" + s),\n\t\"de\": _suffixes.map(s => \"%d.%m.%Y\" + s),\n\t\"fr\": _suffixes.map(s => \"%d.%m.%Y\" + s),\n\t\"it\": _suffixes.map(s => \"%d.%m.%Y\" + s),\n\t\"intl\": _suffixes.map(s => \"%Y-%m-%d\" + s)\n};\n\n\nclass DatetimeMinuteControlType extends DateControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof DatetimeMinuteControl;\n\t}\n};\n\nlet datetimeminutecontroltype = new DatetimeMinuteControlType(\"la\", \"DatetimeMinuteControl\", \"A LivingApps date field (type 'date/datetimeminute')\");\n\n\nexport class DatetimeMinuteControl extends DateControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn datetimeminutecontroltype;\n\t}\n\n\tget default()\n\t{\n\t\tlet view_control = this._view_control();\n\n\t\tif (view_control === null)\n\t\t\treturn null;\n\n\t\tif (view_control.default === \"{today}\")\n\t\t{\n\t\t\tlet now = new Date();\n\t\t\tnow.setSeconds(0);\n\t\t\tnow.setMilliseconds(0);\n\t\t\treturn now;\n\t\t}\n\t\telse\n\t\t\treturn null;\n\t}\n};\n\nDatetimeMinuteControl.prototype.subtype = \"datetimeminute\";\nDatetimeMinuteControl.prototype.fieldtype = DatetimeMinuteField;\nDatetimeMinuteControl.prototype._formatstrings = {\n\t\"de\": \"%d.%m.%Y %H:%M\",\n\t\"fr\": \"%d.%m.%Y %H:%M\",\n\t\"it\": \"%d.%m.%Y %H:%M\",\n\t\"en\": \"%m/%d/%Y %H:%M\",\n\t\"intl\": \"%Y-%m-%d %H:%M\"\n};\n\n\nclass DatetimeSecondControlType extends DateControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof DatetimeSecondControl;\n\t}\n};\n\nlet datetimesecondcontroltype = new DatetimeSecondControlType(\"la\", \"DatetimeSecondControl\", \"A LivingApps date field (type 'date/datetimesecond')\");\n\n\nexport class DatetimeSecondControl extends DateControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn datetimesecondcontroltype;\n\t}\n\n\tget default()\n\t{\n\t\tlet view_control = this._view_control();\n\n\t\tif (view_control === null)\n\t\t\treturn null;\n\n\t\tif (view_control.default === \"{today}\")\n\t\t{\n\t\t\tlet now = new Date();\n\t\t\tnow.setMilliseconds(0);\n\t\t\treturn now;\n\t\t}\n\t\telse\n\t\t\treturn null;\n\t}\n};\n\nDatetimeSecondControl.prototype.subtype = \"datetimesecond\";\nDatetimeSecondControl.prototype.fieldtype = DatetimeSecondField;\nDatetimeSecondControl.prototype._formatstrings = {\n\t\"de\": \"%d.%m.%Y %H:%M:%S\",\n\t\"fr\": \"%d.%m.%Y %H:%M:%S\",\n\t\"it\": \"%d.%m.%Y %H:%M:%S\",\n\t\"en\": \"%m/%d/%Y %H:%M:%S\",\n\t\"intl\": \"%Y-%m-%d %H:%M:%S\"\n};\n\n\nclass LookupControlType extends ControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupControl;\n\t}\n};\n\nlet lookupcontroltype = new LookupControlType(\"la\", \"LookupControl\", \"A LivingApps date field (type 'lookup')\");\n\n\nexport class LookupControl extends Control\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupcontroltype;\n\t}\n\n\tget default()\n\t{\n\t\tlet view_control = this._view_control();\n\n\t\tif (view_control === null)\n\t\t\treturn null;\n\n\t\treturn this.lookupdata.get(view_control) ?? null;\n\t}\n\n\tget autoexpandable()\n\t{\n\t\tlet view_control = this._view_control();\n\t\tif (view_control === null)\n\t\t\treturn false;\n\t\treturn view_control.autoexpandable;\n\t}\n\n\tget none_key()\n\t{\n\t\tlet view_control = this._view_control();\n\t\tif (view_control === null)\n\t\t\treturn null;\n\t\treturn view_control.lookupnonekey;\n\t}\n\n\tget none_label()\n\t{\n\t\tlet view_control = this._view_control();\n\t\tif (view_control === null)\n\t\t\treturn null;\n\t\treturn view_control.lookupnonelabel;\n\t}\n\n\t// ``search.value`` must be ``null`` or a ``LookupItem`` key\n\tsearch(value, search)\n\t{\n\t\tif (search.operator === \"equals\")\n\t\t{\n\t\t\tif (value === null)\n\t\t\t\treturn search.value === null;\n\t\t\telse\n\t\t\t\treturn value.key === search.value;\n\t\t}\n\t\telse\n\t\t\treturn false;\n\t}\n};\n\nLookupControl.prototype.type = \"lookup\";\nLookupControl.prototype.fieldtype = LookupField;\nLookupControl.prototype._ul4onattrs = [...Control.prototype._ul4onattrs, \"lookupdata\"];\nLookupControl.prototype._ul4attrs = new Set([...Control.prototype._ul4attrs, \"lookupdata\"]);\n\n\nclass LookupSelectControlType extends LookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupSelectControl;\n\t}\n};\n\nlet lookupselectcontroltype = new LookupSelectControlType(\"la\", \"LookupSelectControl\", \"A LivingApps lookup field (type 'lookup/select')\");\n\n\nexport class LookupSelectControl extends LookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupselectcontroltype;\n\t}\n};\n\nLookupSelectControl.prototype.subtype = \"select\";\nLookupSelectControl.prototype.fieldtype = LookupSelectField;\nLookupSelectControl.prototype._cssclass_control = \"select\";\n\n\nclass LookupRadioControlType extends LookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupRadioControl;\n\t}\n};\n\nlet lookupradiocontroltype = new LookupRadioControlType(\"la\", \"LookupRadioControl\", \"A LivingApps lookup field (type 'lookup/radio')\");\n\n\nexport class LookupRadioControl extends LookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupradiocontroltype;\n\t}\n};\n\nLookupRadioControl.prototype.subtype = \"radio\";\nLookupRadioControl.prototype.fieldtype = LookupRadioField;\nLookupRadioControl.prototype._cssclass_root = \"llft-element\";\n\n\nclass LookupChoiceControlType extends LookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupChoiceControl;\n\t}\n};\n\nlet lookupchoicecontroltype = new LookupChoiceControlType(\"la\", \"LookupChoiceControl\", \"A LivingApps lookup field (type 'lookup/choice')\");\n\n\nexport class LookupChoiceControl extends LookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupchoicecontroltype;\n\t}\n};\n\nLookupChoiceControl.prototype.subtype = \"choice\";\nLookupChoiceControl.prototype.fieldtype = LookupChoiceField;\nLookupChoiceControl.prototype._cssclass_control = \"select\";\n\n\nclass AppLookupControlType extends ControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppLookupControl;\n\t}\n};\n\nlet applookupcontroltype = new AppLookupControlType(\"la\", \"AppLookupControl\", \"A LivingApps lookup field (type 'applookup')\");\n\n\nexport class AppLookupControl extends Control\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn applookupcontroltype;\n\t}\n\n\tget lookupdata()\n\t{\n\t\tif (this.lookup_app !== null && this.lookup_app.records !== null)\n\t\t\treturn this.lookup_app.records;\n\t\telse\n\t\t\treturn new Map();\n\t}\n\n\tget none_key()\n\t{\n\t\tlet view_control = this._view_control();\n\t\tif (view_control === null)\n\t\t\treturn null;\n\t\treturn view_control.lookupnonekey;\n\t}\n\n\tget none_label()\n\t{\n\t\tlet view_control = this._view_control();\n\t\tif (view_control === null)\n\t\t\treturn null;\n\t\treturn view_control.lookupnonelabel;\n\t}\n\n\t// ``search.value`` must be an object containing the search criteria for the referenced record\n\tsearch(value, search)\n\t{\n\t\tif (value === null || search.value === null)\n\t\t\treturn value === search.value;\n\t\telse\n\t\t\treturn value.search(search);\n\t}\n};\n\nAppLookupControl.prototype.type = \"applookup\";\nAppLookupControl.prototype.fieldtype = AppLookupField;\nAppLookupControl.prototype._ul4onattrs = [...Control.prototype._ul4onattrs, \"lookup_app\", \"lookup_controls\", \"local_master_control\", \"local_detail_controls\", \"remote_master_control\"];\nAppLookupControl.prototype._ul4attrs = new Set([...Control.prototype._ul4attrs, \"lookup_app\", \"lookup_controls\", \"local_master_control\", \"local_detail_controls\", \"remote_master_control\"]);\n\n\nclass AppLookupSelectControlType extends AppLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppLookupSelectControl;\n\t}\n};\n\nlet applookupselectcontroltype = new AppLookupSelectControlType(\"la\", \"AppLookupSelectControl\", \"A LivingApps applookup field (type 'applookup/select')\");\n\n\nexport class AppLookupSelectControl extends AppLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn applookupselectcontroltype;\n\t}\n};\n\nAppLookupSelectControl.prototype.subtype = \"select\";\nAppLookupSelectControl.prototype.fieldtype = AppLookupSelectField;\nAppLookupSelectControl.prototype._cssclass_control = \"select\";\n\n\nclass AppLookupRadioControlType extends AppLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppLookupRadioControl;\n\t}\n};\n\nlet applookupradiocontroltype = new AppLookupRadioControlType(\"la\", \"AppLookupRadioControl\", \"A LivingApps applookup field (type 'applookup/radio')\");\n\n\nexport class AppLookupRadioControl extends AppLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn applookupradiocontroltype;\n\t}\n};\n\nAppLookupRadioControl.prototype.subtype = \"radio\";\nAppLookupRadioControl.prototype.fieldtype = AppLookupRadioField;\n\n\nclass AppLookupChoiceControlType extends AppLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppLookupChoiceControl;\n\t}\n};\n\nlet applookupchoicecontroltype = new AppLookupChoiceControlType(\"la\", \"AppLookupChoiceControl\", \"A LivingApps applookup field (type 'applookup/choice')\");\n\n\nexport class AppLookupChoiceControl extends AppLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn applookupchoicecontroltype;\n\t}\n\n\tget search_url()\n\t{\n\t\treturn \"field_\" + this.identifier + \"_search\";\n\t}\n\n\tget search_param_name()\n\t{\n\t\treturn \"q\";\n\t}\n\n\tget target_param_name()\n\t{\n\t\treturn \"target\";\n\t}\n};\n\nAppLookupChoiceControl.prototype.subtype = \"choice\";\nAppLookupChoiceControl.prototype.fieldtype = AppLookupChoiceField;\nAppLookupChoiceControl.prototype._cssclass_control = \"select\";\nAppLookupChoiceControl.prototype._ul4attrs = new Set([...AppLookupControl.prototype._ul4attrs, \"search_url\", \"search_param_name\", \"target_param_name\"]);\n\n\nclass MultipleLookupControlType extends LookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleLookupControl;\n\t}\n};\n\nlet multiplelookupcontroltype = new MultipleLookupControlType(\"la\", \"MultipleLookupControl\", \"A LivingApps multiple applookup field (type 'multipleapplookup')\");\n\n\nexport class MultipleLookupControl extends LookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multiplelookupcontroltype;\n\t}\n\n\tget default()\n\t{\n\t\tlet view_control = this._view_control();\n\n\t\tif (view_control === null)\n\t\t\treturn null;\n\n\t\tlet defaultValue = this.lookupdata.get(view_control)\n\n\t\treturn (defaultValue !== undefined) ? [defaultValue] : [];\n\t}\n\n\t// search.value must be ``null`` or a ``LookupItem`` key\n\tsearch(value, search)\n\t{\n\t\tif (search.operator === \"equals\")\n\t\t{\n\t\t\tfor (let item of value)\n\t\t\t{\n\t\t\t\tif (item.key === search.value)\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\telse\n\t\t\treturn false;\n\t}\n};\n\nMultipleLookupControl.prototype.type = \"multiplelookup\";\nMultipleLookupControl.prototype.fieldtype = MultipleLookupField;\n\n\nclass MultipleLookupCheckboxControlType extends MultipleLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleLookupCheckboxControl;\n\t}\n};\n\nlet multiplelookupcheckboxcontroltype = new MultipleLookupCheckboxControlType(\"la\", \"MultipleLookupCheckboxControl\", \"A LivingApps multiplelookup field (type 'multiplelookup/checkbox')\");\n\n\nexport class MultipleLookupCheckboxControl extends MultipleLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multiplelookupcheckboxcontroltype;\n\t}\n\n\tget _sel_label()\n\t{\n\t\treturn this._sel_root + \" label:not([for]) > span\";\n\t}\n};\n\nMultipleLookupCheckboxControl.prototype.subtype = \"checkbox\";\nMultipleLookupCheckboxControl.prototype.fieldtype = MultipleLookupCheckboxField;\nMultipleLookupCheckboxControl.prototype._cssclass_root = \"llft-element\";\n\n\nclass MultipleLookupSelectControlType extends MultipleLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleLookupSelectControl;\n\t}\n};\n\nlet multiplelookupselectcontroltype = new MultipleLookupSelectControlType(\"la\", \"MultipleLookupSelectControl\", \"A LivingApps multiplelookup field (type 'multiplelookup/select')\");\n\n\nexport class MultipleLookupSelectControl extends MultipleLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multiplelookupselectcontroltype;\n\t}\n};\n\nMultipleLookupSelectControl.prototype.subtype = \"select\";\nMultipleLookupSelectControl.prototype.fieldtype = MultipleLookupSelectField;\nMultipleLookupSelectControl.prototype._cssclass_control = \"select\";\n\n\nclass MultipleLookupChoiceControlType extends MultipleLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleLookupChoiceControl;\n\t}\n};\n\nlet multiplelookupchoicecontroltype = new MultipleLookupChoiceControlType(\"la\", \"MultipleLookupChoiceControl\", \"A LivingApps multiplelookup field (type 'multiplelookup/choice')\");\n\n\nexport class MultipleLookupChoiceControl extends MultipleLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multiplelookupchoicecontroltype;\n\t}\n};\n\nMultipleLookupChoiceControl.prototype.subtype = \"choice\";\nMultipleLookupChoiceControl.prototype.fieldtype = MultipleLookupChoiceField;\nMultipleLookupChoiceControl.prototype._cssclass_control = \"select\";\n\n\nclass MultipleAppLookupControlType extends AppLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleAppLookupControl;\n\t}\n};\n\nlet multipleapplookupcontroltype = new MultipleAppLookupControlType(\"la\", \"MultipleAppLookupControl\", \"A LivingApps multiple applookup field (type 'multipleapplookup')\");\n\n\nexport class MultipleAppLookupControl extends AppLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multipleapplookupcontroltype;\n\t}\n\n\t// ``search.value`` must be an object containing the search criteria for the referenced record\n\tsearch(value, search)\n\t{\n\t\tif (search.operator === \"equals\")\n\t\t{\n\t\t\tif (search.value === null)\n\t\t\t\treturn value.length === 0;\n\t\t\telse\n\t\t\t{\n\t\t\t\tfor (let item of value)\n\t\t\t\t{\n\t\t\t\t\tif (item.search(search.value))\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\treturn false;\n\t}\n};\n\nMultipleAppLookupControl.prototype.type = \"multipleapplookup\";\nMultipleAppLookupControl.prototype.fieldtype = MultipleAppLookupField;\n\n\nclass MultipleAppLookupSelectControlType extends MultipleAppLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleAppLookupSelectControl;\n\t}\n};\n\nlet multipleapplookupselectcontroltype = new MultipleAppLookupSelectControlType(\"la\", \"MultipleAppLookupSelectControl\", \"A LivingApps multiple applookup field (type 'multipleapplookup/select')\");\n\n\nexport class MultipleAppLookupSelectControl extends MultipleAppLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multipleapplookupselectcontroltype;\n\t}\n};\n\nMultipleAppLookupSelectControl.prototype.subtype = \"select\";\nMultipleAppLookupSelectControl.prototype.fieldtype = MultipleAppLookupSelectField;\nMultipleAppLookupSelectControl.prototype._cssclass_control = \"select\";\n\n\nclass MultipleAppLookupCheckboxControlType extends MultipleAppLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleAppLookupCheckboxControl;\n\t}\n};\n\nlet multipleapplookupcheckboxcontroltype = new MultipleAppLookupCheckboxControlType(\"la\", \"MultipleAppLookupCheckboxControl\", \"A LivingApps multiple applookup field (type 'multipleapplookup/checkbox')\");\n\n\nexport class MultipleAppLookupCheckboxControl extends MultipleAppLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multipleapplookupcheckboxcontroltype;\n\t}\n};\n\nMultipleAppLookupCheckboxControl.prototype.subtype = \"checkbox\";\nMultipleAppLookupCheckboxControl.prototype.fieldtype = MultipleAppLookupCheckboxField;\n\n\nclass MultipleAppLookupChoiceControlType extends MultipleAppLookupControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MultipleAppLookupChoiceControl;\n\t}\n};\n\nlet multipleapplookupchoicecontroltype = new MultipleAppLookupChoiceControlType(\"la\", \"MultipleAppLookupChoiceControl\", \"A LivingApps multiple applookup field (type 'multipleapplookup/choice')\");\n\n\nexport class MultipleAppLookupChoiceControl extends MultipleAppLookupControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn multipleapplookupchoicecontroltype;\n\t}\n};\n\nMultipleAppLookupChoiceControl.prototype.subtype = \"choice\";\nMultipleAppLookupChoiceControl.prototype.fieldtype = MultipleAppLookupChoiceField;\nMultipleAppLookupChoiceControl.prototype._cssclass_control = \"select\";\n\n\nclass GeoControlType extends ControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof GeoControl;\n\t}\n};\n\nlet geocontroltype = new GeoControlType(\"la\", \"GeoControl\", \"A LivingApps geo field (type 'geo')\");\n\n\nexport class GeoControl extends Control\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn geocontroltype;\n\t}\n};\n\nGeoControl.prototype.type = \"geo\";\nGeoControl.prototype.fieldtype = GeoField;\nGeoControl.prototype._cssclass_root = \"llft-element\";\n\n\nclass FileControlType extends ControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof FileControl;\n\t}\n};\n\nlet filecontroltype = new FileControlType(\"la\", \"FileControl\", \"A LivingApps upload field (type 'file')\");\n\n\nexport class FileControl extends Control\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn filecontroltype;\n\t}\n};\n\nFileControl.prototype.type = \"file\";\nFileControl.prototype.fieldtype = FileField;\nFileControl.prototype._cssclass_root = \"llft-element\";\n\n\nclass FileSignatureControlType extends FileControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof FileSignatureControl;\n\t}\n};\n\nlet filesignaturecontroltype = new FileSignatureControlType(\"la\", \"FileSignatureControl\", \"A LivingApps signature image field (type 'file/signature')\");\n\n\nexport class FileSignatureControl extends FileControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn filesignaturecontroltype;\n\t}\n};\n\nFileSignatureControl.prototype.subtype = \"signature\";\nFileSignatureControl.prototype.fieldtype = FileSignatureField;\n\n\nclass ButtonControlType extends ControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof ButtonControl;\n\t}\n};\n\nlet buttoncontroltype = new ButtonControlType(\"la\", \"ButtonControl\", \"A submit button\");\n\n\nexport class ButtonControl extends Control\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn buttoncontroltype;\n\t}\n};\n\nButtonControl.prototype.type = \"button\";\n\n\nclass LookupItemType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LookupItem;\n\t}\n};\n\nlet lookupitemtype = new LookupItemType(\"la\", \"LookupItem\", \"An option in a lookup control/field\");\n\n\nexport class LookupItem extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn lookupitemtype;\n\t}\n\n\tget label()\n\t{\n\t\tif (this.control === null)\n\t\t\treturn this._label;\n\t\tlet view_lookupitem = this._view_lookupitem();\n\t\tif (view_lookupitem === null)\n\t\t\treturn this._label;\n\t\tlet label = view_lookupitem.label;\n\t\tif (label === null)\n\t\t\treturn this._label;\n\t\treturn label;\n\t}\n\n\tget visible()\n\t{\n\t\tif (this.control === null)\n\t\t\treturn true;\n\t\tlet view_lookupitem = this._view_lookupitem();\n\t\tif (view_lookupitem === null)\n\t\t\treturn true;\n\t\treturn view_lookupitem.visible;\n\t}\n\n\t_view_lookupitem()\n\t{\n\t\tlet identifier = this.control.identifier;\n\t\tlet active_view = this.control.app.active_view;\n\t\tif (active_view !== null && active_view.controls !== null)\n\t\t{\n\t\t\tlet view_control = active_view.controls.get(identifier);\n\t\t\tif (view_control !== undefined && view_control.lookupdata !== undefined && view_control.lookupdata !== null)\n\t\t\t{\n\t\t\t\tlet view_lookupitem = view_control.lookupdata.get(this.key);\n\t\t\t\tif (view_lookupitem !== undefined)\n\t\t\t\t\treturn view_lookupitem;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\tlet repr = \"<LookupItem key=\" + ul4._repr(this.key) + \" label=\" + ul4._repr(this.label);\n\t\tif (!this.visible)\n\t\t\trepr += \"visible=False\"\n\t\treturn repr + \">\";\n\t}\n};\n\nLookupItem.prototype._ul4onattrs = [\"control\", \"key\", \"_label\"];\nLookupItem.prototype._ul4attrs = new Set([\"id\", \"control\", \"key\", \"label\"]);\n\n\nclass ViewLookupItemType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof ViewLookupItem;\n\t}\n};\n\nlet viewlookupitemtype = new ViewLookupItemType(\"la\", \"ViewLookupItem\", \"View specific information about a lookup item\");\n\n\nexport class ViewLookupItem extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn viewlookupitemtype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\tlet repr = \"<ViewLookupItem key=\" + ul4._repr(this.key) + \" label=\" + ul4._repr(this.label);\n\t\tif (!this.visible)\n\t\t\trepr += \" visible=False\"\n\t\treturn repr + \">\";\n\t}\n};\n\nViewLookupItem.prototype._ul4onattrs = [\"key\", \"label\", \"visible\"];\nViewLookupItem.prototype._ul4attrs = new Set([\"key\", \"label\", \"visible\"]);\n\n\nclass LayoutControlType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof LayoutControl;\n\t}\n};\n\nlet layoutcontroltype = new LayoutControlType(\"la\", \"LayoutControl\", \"A decoration in an input form\");\n\n\nexport class LayoutControl extends Base\n{\n\tLayoutControl()\n\t{\n\t\tthis.label = null;\n\t\tthis.identifier = null;\n\t\tthis.view = null;\n\t\tthis.top = null;\n\t\tthis.left = null;\n\t\tthis.width = null;\n\t\tthis.height = null;\n\t\tthis._visible = true;\n\t}\n\n\t[ul4.symbols.type]()\n\t{\n\t\treturn layoutcontroltype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<\" + this.constructor.name + \" id=\" + ul4._repr(this.id) + \" identifier=\" + ul4._repr(this.identifier) + \">\";\n\t}\n\n\tget globals()\n\t{\n\t\treturn this.view.globals;\n\t}\n\n\tget _sel_root()\n\t{\n\t\treturn \"#livingapps-form .llft-element.llft-id-\" + this.identifier;\n\t}\n\n\tget _dom_root()\n\t{\n\t\treturn document.querySelector(this._sel_root);\n\t}\n\n\tget visible()\n\t{\n\t\treturn this._visible ?? true;\n\t}\n\n\tset visible(value)\n\t{\n\t\tif (this.globals._in_form())\n\t\t\tthis._dom_root.hidden = !value;\n\t\tthis._visible = value;\n\t}\n\n\t[ul4.symbols.setattr](name, value)\n\t{\n\t\tif (name === \"visible\")\n\t\t\tthis.visible = ul4._bool(value);\n\t\telse\n\t\t\tsuper[ul4.symbols.setattr](name, value);\n\t}\n};\n\nLayoutControl.prototype._ul4onattrs = [\"label\", \"identifier\", \"view\", \"top\", \"left\", \"width\", \"height\"];\nLayoutControl.prototype._ul4attrs = new Set([\"id\", \"label\", \"identifier\", \"view\", \"top\", \"left\", \"width\", \"height\", \"visible\"]);\n\n\nclass HTMLLayoutControlType extends LayoutControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof HTMLLayoutControl;\n\t}\n};\n\nlet htmllayoutcontroltype = new HTMLLayoutControlType(\"la\", \"HTMLLayoutControl\", \"HTML decoration in an input form\");\n\n\nexport class HTMLLayoutControl extends LayoutControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn htmllayoutcontroltype;\n\t}\n\n\tget value()\n\t{\n\t\treturn this._value;\n\t}\n\n\tset value(value)\n\t{\n\t\tthis._value = value;\n\t\tif (this.globals._in_form())\n\t\t\tthis._set_dom_value(this._value);\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tthis._dom_root.innerHTML = value;\n\t}\n\n\t[ul4.symbols.setattr](name, value)\n\t{\n\t\tif (name === \"value\")\n\t\t\tthis.value = value;\n\t\telse\n\t\t\tsuper[ul4.symbols.setattr](name, value);\n\t}\n};\n\nHTMLLayoutControl.prototype._ul4onattrs = [...LayoutControl.prototype._ul4onattrs, \"_value\", \"_visible\"];\nHTMLLayoutControl.prototype._ul4attrs = new Set([...LayoutControl.prototype._ul4attrs, \"value\"]);\n\n\nclass ImageLayoutControlType extends LayoutControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof ImageLayoutControl;\n\t}\n};\n\nlet imagelayoutcontroltype = new ImageLayoutControlType(\"la\", \"ImageLayoutControl\", \"An image decoration in an input form\");\n\n\nexport class ImageLayoutControl extends LayoutControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn imagelayoutcontroltype;\n\t}\n\n\tget image()\n\t{\n\t\treturn this._image;\n\t}\n\n\tset image(image)\n\t{\n\t\tthis._image = image;\n\t\tif (this.globals._in_form())\n\t\t\tthis._set_dom_value(this._image);\n\t}\n\n\tget original()\n\t{\n\t\treturn this.image;\n\t}\n\n\tset original(original)\n\t{\n\t\tthis.image = image;\n\t}\n\n\t_set_dom_value(value)\n\t{\n\t\tlet img = this._dom_root.querySelector(\"img\");\n\t\tif (img !== null)\n\t\t{\n\t\t\tlet url = (value === null) ?\n\t\t\t\t\"data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==\" :\n\t\t\t\tthis.globals.scaled_url(value, this.width, this.height);\n\t\t\timg.setAttribute(\"src\", url);\n\t\t}\n\t}\n\n\t[ul4.symbols.setattr](name, value)\n\t{\n\t\tif (name === \"original\")\n\t\t\tthis.original = value;\n\t\telse if (name === \"image\")\n\t\t\tthis.image = value;\n\t\telse\n\t\t\tsuper[ul4.symbols.setattr](name, value);\n\t}\n};\n\nImageLayoutControl.prototype._ul4onattrs = [...LayoutControl.prototype._ul4onattrs, \"_image\", \"_visible\"];\nImageLayoutControl.prototype._ul4attrs = new Set([...LayoutControl.prototype._ul4attrs, \"image\", \"original\"]);\n\n\nclass ButtonLayoutControlType extends LayoutControlType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof ButtonLayoutControl;\n\t}\n};\n\nlet buttonlayoutcontroltype = new ButtonLayoutControlType(\"la\", \"ButtonLayoutControl\", \"A submit button in an input form\");\n\n\nexport class ButtonLayoutControl extends LayoutControl\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn buttonlayoutcontroltype;\n\t}\n};\n\nButtonLayoutControl.prototype._ul4onattrs = [...LayoutControl.prototype._ul4onattrs, \"original\", \"scaled\", \"_visible\"];\n\n\nclass ViewControlType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof ViewControl;\n\t}\n};\n\nlet viewcontroltype = new ViewControlType(\"la\", \"ViewControl\", \"Contains view specific information about a control\");\n\n\nexport class ViewControl extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn viewcontroltype;\n\t}\n\n\tget mode()\n\t{\n\t\treturn this._mode ? \"display\" : \"edit\";\n\t}\n};\n\nViewControl.prototype._ul4onattrs = [\"view\", \"control\", \"top\", \"left\", \"width\", \"height\", \"z_index\", \"liveupdate\", \"default\", \"tabindex\", \"minlength\", \"maxlength\", \"required\", \"placeholder\", \"_mode\", \"labelpos\", \"lookupnonekey\", \"lookupnonelabel\", \"label\", \"autoalign\", \"labelwidth\", \"lookupdata\", \"autoexpandable\"];\nViewControl.prototype._ul4attrs = new Set([\"id\", \"view\", \"control\", \"top\", \"left\", \"width\", \"height\", \"z_index\", \"liveupdate\", \"default\", \"tabindex\", \"minlength\", \"maxlength\", \"required\", \"placeholder\", \"mode\", \"labelpos\", \"lookupnonekey\", \"lookupnonelabel\", \"label\", \"autoalign\", \"labelwidth\", \"lookupdata\", \"autoexpandable\"]);\n\n\nclass UserType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof User;\n\t}\n};\n\nlet usertype = new UserType(\"la\", \"User\", \"A LivingApps user/account\");\n\n\nexport class User extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn usertype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<User id=\" + ul4._repr(this.id) + \" firstname=\" + ul4._repr(this.firstname) + \" surname=\" + ul4._repr(this.surname) + \" email=\" + ul4._repr(this.email) + \">\";\n\t}\n};\n\nUser.prototype._ul4onattrs = [\"_id\", \"gender\", \"title\", \"firstname\", \"surname\", \"initials\", \"email\", \"streetname\", \"streetnumber\", \"zip\", \"city\", \"phone\", \"fax\", \"lang\", \"image\", \"summary\", \"interests\", \"personalwebsite\", \"companywebsite\", \"company\", \"position\", \"department\", \"keyviews\", \"globals\"];\nUser.prototype._ul4attrs = new Set([\"id\", \"globals\", \"_id\", \"gender\", \"title\", \"firstname\", \"surname\", \"initials\", \"email\", \"streetname\", \"streetnumber\", \"zip\", \"city\", \"phone\", \"fax\", \"lang\", \"image\", \"summary\", \"interests\", \"personalwebsite\", \"companywebsite\", \"company\", \"position\", \"department\", \"keyviews\"]);\n\n\nclass FileType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof File;\n\t}\n};\n\nlet filetype = new FileType(\"la\", \"File\", \"An uploaded file\");\n\n\nexport class File extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn filetype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<File url=\" + ul4._repr(this.url) + \" filename=\" + ul4._repr(this.filename) + \">\";\n\t}\n\n\tget url()\n\t{\n\t\treturn \"https://\" + this.globals.hostname + \"/files/\" + this.contextid + \"/\" + this.id;\n\t}\n\n\tget archive_url()\n\t{\n\t\tif (this.archive === null)\n\t\t\treturn this.url;\n\t\treturn this.archive.url + \"/\" + this.filename;\n\t}\n};\n\nFile.prototype._ul4onattrs = [\"globals\", \"filename\", \"mimetype\", \"width\", \"height\", \"internal_id\", \"createdat\", \"size\", \"duration\", \"geo\", \"recordedat\", \"storagefilename\", \"archive\", \"context_id\"];\nFile.prototype._ul4attrs = new Set([\"globals\", \"id\", \"internal_id\", \"url\", \"archive_url\", \"filename\", \"mimetype\", \"width\", \"height\", \"size\", \"duration\", \"geo\", \"recordedat\", \"archive\", \"createdat\", \"context_id\"]);\n\n\nclass GeoType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Geo;\n\t}\n};\n\nlet geotype = new GeoType(\"la\", \"Geo\", \"Geographical coordinates and location information\");\n\n\nexport class Geo extends Base\n{\n\tconstructor(globals, lat, long, info=null)\n\t{\n\t\tsuper(null);\n\t\tthis.globals = globals;\n\t\tthis.lat = lat;\n\t\tthis.long = long;\n\t\tthis.info = info;\n\t}\n\n\t[ul4.symbols.type]()\n\t{\n\t\treturn geotype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<Geo lat=\" + ul4._repr(this.lat) + \" long=\" + ul4._repr(this.long) + \" info=\" + ul4._repr(this.info) + \">\";\n\t}\n};\n\nGeo.prototype._ul4onattrs = [\"globals\", \"lat\", \"long\", \"info\"];\nGeo.prototype._ul4attrs = new Set([\"globals\", \"lat\", \"long\", \"info\"]);\n\n\nclass AttachmentType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Attachment;\n\t}\n};\n\nlet attachmenttype = new AttachmentType(\"la\", \"Attachment\", \"An attachment of a record\");\n\n\nexport class Attachment extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn attachmenttype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<\" + this.constructor.name + \" id=\" + ul4._repr(this.id) + \" label=\" + ul4._repr(this.label) + \">\";\n\t}\n};\n\nAttachment.prototype._ul4onattrs = [\"record\", \"label\", \"active\"];\nAttachment.prototype._ul4attrs = new Set([\"id\", \"record\", \"label\", \"active\"]);\n\n\nclass NoteAttachmentType extends AttachmentType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof NoteAttachment;\n\t}\n};\n\nlet noteattachmenttype = new NoteAttachmentType(\"la\", \"NoteAttachment\", \"A note attachment of a record\");\n\n\nexport class NoteAttachment extends Attachment\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn noteattachmenttype;\n\t}\n};\n\nNoteAttachment.prototype.type = \"noteattachment\";\nNoteAttachment.prototype._ul4onattrs = [...Attachment.prototype._ul4onattrs, \"value\"];\nNoteAttachment.prototype._ul4attrs = new Set([...Attachment.prototype._ul4onattrs, \"value\"]);\n\n\nclass URLAttachmentType extends AttachmentType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof URLAttachment;\n\t}\n};\n\nlet urlattachmenttype = new URLAttachmentType(\"la\", \"URLAttachment\", \"A URL attachment of a record\");\n\n\nexport class URLAttachment extends Attachment\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn urlattachmenttype;\n\t}\n};\n\nURLAttachment.prototype.type = \"urlattachment\";\nURLAttachment.prototype._ul4onattrs = [...Attachment.prototype._ul4onattrs, \"value\"];\nURLAttachment.prototype._ul4attrs = new Set([...Attachment.prototype._ul4onattrs, \"value\"]);\n\n\nclass FileAttachmentType extends AttachmentType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof FileAttachment;\n\t}\n};\n\nlet fileattachmenttype = new FileAttachmentType(\"la\", \"FileAttachment\", \"A file attachment of a record\");\n\n\nexport class FileAttachment extends Attachment\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn fileattachmenttype;\n\t}\n};\n\nFileAttachment.prototype.type = \"fileattachment\";\nFileAttachment.prototype._ul4onattrs = [...Attachment.prototype._ul4onattrs, \"value\"];\nFileAttachment.prototype._ul4attrs = new Set([...Attachment.prototype._ul4onattrs, \"value\"]);\n\n\nclass JSONAttachmentType extends AttachmentType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof JSONAttachment;\n\t}\n};\n\nlet jsonattachmenttype = new JSONAttachmentType(\"la\", \"JSONAttachment\", \"A JSON attachment of a record\");\n\n\nexport class JSONAttachment extends Attachment\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn jsonattachmenttype;\n\t}\n\n\t_dumpUL4ONAttr(name)\n\t{\n\t\tif (name === \"value\")\n\t\t\treturn ul4._asjson(this.value);\n\t\telse\n\t\t\treturn this[name];\n\t}\n\n\t_loadUL4ONAttr(name, value)\n\t{\n\t\tif (name === \"value\")\n\t\t\tthis.value = ul4._fromjson(value);\n\t\telse\n\t\t\tthis[name] = value\n\t}\n};\n\nJSONAttachment.prototype.type = \"jsonattachment\";\nJSONAttachment.prototype._ul4onattrs = [...Attachment.prototype._ul4onattrs, \"value\"];\nJSONAttachment.prototype._ul4attrs = new Set([...Attachment.prototype._ul4onattrs, \"value\"]);\n\n\nclass InstallationType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Installation;\n\t}\n};\n\nlet installationtype = new InstallationType(\"la\", \"Installation\", \"The installation that created an app\");\n\n\nexport class Installation extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn installationtype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<Installation id=\" + ul4._repr(this.id) + \" name=\" + ul4._repr(this.name) + \">\";\n\t}\n};\n\nInstallation.prototype._ul4onattrs = [\"name\"];\nInstallation.prototype._ul4attrs = new Set([\"id\", \"name\"]);\n\n\nclass CategoryType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Category;\n\t}\n};\n\nlet categorytype = new CategoryType(\"la\", \"Category\", \"A navigation category\");\n\n\nexport class Category extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn categorytype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\tlet v = [];\n\t\tlet category = this;\n\t\twhile (category !== null)\n\t\t{\n\t\t\tv.splice(0, 0, category.identifier);\n\t\t\tcategory = category.parent;\n\t\t}\n\t\treturn \"<Category id=\" + ul4._repr(this.id) + \" identifierpath=\" + ul4._repr(v.join(\"/\")) + + \" name=\" + ul4._repr(this.name) + \">\";\n\t}\n};\n\nCategory.prototype._ul4onattrs = [\"identifier\", \"name\", \"order\", \"parent\", \"children\", \"apps\"];\nCategory.prototype._ul4attrs = new Set([\"id\", \"identifier\", \"name\", \"order\", \"parent\", \"children\", \"apps\"]);\n\n\nclass KeyViewType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof KeyView;\n\t}\n};\n\nlet keyviewtype = new KeyViewType(\"la\", \"KeyView\", \"Object granting access to a view template\");\n\n\nexport class KeyView extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn keyviewtype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<KeyView id=\" + ul4._repr(this.id) + \" identifier=\" + ul4._repr(this.identifier) + \">\";\n\t}\n};\n\nKeyView.prototype._ul4onattrs = [\"identifier\", \"name\", \"key\", \"user\"];\nKeyView.prototype._ul4attrs = new Set([\"id\", \"identifier\", \"name\", \"key\", \"user\"]);\n\n\nclass AppParameterType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof AppParameter;\n\t}\n};\n\nlet appparametertype = new AppParameterType(\"la\", \"AppParameter\", \"A parameter of a LivingApps application\");\n\n\nexport class AppParameter extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn appparametertype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<AppParameter id=\" + ul4._repr(this.id) + \" identifier=\" + ul4._repr(this.identifier) + \">\";\n\t}\n\n\tget app()\n\t{\n\t\tif (this.owner instanceof App)\n\t\t\treturn this.owner;\n\t\treturn null;\n\t}\n};\n\nAppParameter.prototype._ul4onattrs = [\"owner\", \"parent\", \"type\", \"order\", \"identifier\", \"description\", \"value\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\"];\nAppParameter.prototype._ul4attrs = new Set([\"id\", \"owner\", \"parent\", \"app\", \"type\", \"order\", \"identifier\", \"description\", \"value\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\"]);\n\n\nclass MutableAppParameterType extends AppParameterType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MutableAppParameter;\n\t}\n};\n\nlet mutableappparametertype = new MutableAppParameterType(\"la\", \"MutableAppParameter\", \"A mutable parameter of a LivingApps application\");\n\n\nexport class MutableAppParameter extends AppParameter\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn mutableappparametertype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<MutableAppParameter id=\" + ul4._repr(this.id) + \" identifier=\" + ul4._repr(this.identifier) + \">\";\n\t}\n\n\tget app()\n\t{\n\t\tif (this.owner instanceof App)\n\t\t\treturn this.owner;\n\t\treturn null;\n\t}\n};\n\nclass MenuItemType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof MenuItem;\n\t}\n};\n\nlet menuitemtype = new MenuItemType(\"la\", \"MenuItem\", \"An additional menu item in an app that links to a target page.\");\n\n\nexport class MenuItem extends Base\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn menuitemtype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<MenuItem id=\" + ul4._repr(this.id) + \"identifier=\" + ul4._repr(this.identifier) + \" label=\" + ul4._repr(this.label) + \" type=\" + ul4._repr(this.type) + \">\";\n\t}\n};\n\nMenuItem.prototype._ul4onattrs = [\"app\", \"identifier\", \"label\", \"type\", \"icon\", \"title\", \"target\", \"cssclass\", \"url\", \"order\", \"start_time\", \"end_time\", \"on_app_overview_page\", \"on_app_detail_page\", \"on_form_page\", \"on_iframe_page\", \"on_view_template\", \"on_custom_overview_page\", \"accessible\", \"children\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\"];\nMenuItem.prototype._ul4attrs = new Set([\"id\", \"app\", \"identifier\", \"label\", \"type\", \"icon\", \"title\", \"target\", \"cssclass\", \"url\", \"order\", \"start_time\", \"end_time\", \"on_app_overview_page\", \"on_app_detail_page\", \"on_form_page\", \"on_iframe_page\", \"on_view_template\", \"on_custom_overview_page\", \"accessible\", \"children\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\"]);\n\n\nclass PanelType extends MenuItemType\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Panel;\n\t}\n};\n\nlet paneltype = new MenuItemType(\"la\", \"Panel\", \"An additional panel in an app that is displayed on various LivingApps pages and links to a target page.\");\n\n\nexport class Panel extends MenuItem\n{\n\t[ul4.symbols.type]()\n\t{\n\t\treturn paneltype;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<Panel id=\" + ul4._repr(this.id) + \"identifier=\" + ul4._repr(this.identifier) + \" label=\" + ul4._repr(this.label) + \" type=\" + ul4._repr(this.type) + \">\";\n\t}\n};\n\nPanel.prototype._ul4onattrs = [...MenuItem.prototype._ul4onattrs, \"description\", \"description_url\", \"image\", \"row\", \"column\", \"width\", \"height\", \"header_type\", \"header_background\", \"text_color\", \"background_color1\", \"background_color2\"];\nPanel.prototype._ul4attrs = new Set([...MenuItem.prototype._ul4attrs, \"description\", \"description_url\", \"image\", \"row\", \"column\", \"width\", \"height\"]);\n\n\nclass FormType extends ul4.Type\n{\n\tinstancecheck(obj)\n\t{\n\t\treturn obj instanceof Form;\n\t}\n};\n\nlet formtype = new FormType(\"la\", \"Form\", \"The input form.\");\n\nexport class Form extends ul4.Proto\n{\n\tconstructor(globals, template)\n\t{\n\t\tsuper();\n\t\tthis.globals = globals;\n\t\tthis.template = template;\n\t\tthis._geo_wired = false;\n\n\t\tfor (let field of globals.record.fields.values())\n\t\t\tthis.wire_field(field);\n\t\tthis.render_template(null);\n\t}\n\n\t[ul4.symbols.type]()\n\t{\n\t\treturn formtype;\n\t}\n\n\tget _dom_button()\n\t{\n\t\treturn document.querySelector(this._sel_form + \" \" + this._sel_button);\n\t}\n\n\tget enabled()\n\t{\n\t\treturn !this._dom_button.disabled;\n\t}\n\n\tset enabled(value)\n\t{\n\t\tthis._dom_button.disabled = !value;\n\t}\n\n\t[ul4.symbols.getattr](key)\n\t{\n\t\tif (key === \"enabled\")\n\t\t\treturn this.enabled;\n\t\telse\n\t\t\tthrow new ul4.AttributeError(this, key);\n\t}\n\n\t[ul4.symbols.setattr](key, value)\n\t{\n\t\tif (key === \"enabled\")\n\t\t\tthis.enabled = ul4._bool(value);\n\t\telse\n\t\t\tthrow new ul4.AttributeError(this, key);\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<\" + this.constructor.name + \" enabled=\" + ul4._repr(this.enabled) + \">\";\n\t}\n\n\ttoString()\n\t{\n\t\treturn this[ul4.symbols.repr]();\n\t}\n\n\trender_template(identifier)\n\t{\n\t\tlet vars = {\n\t\t\t\"datasources\": this.globals.datasources,\n\t\t\t\"record\": this.globals.record,\n\t\t\t\"app\": this.globals.app,\n\t\t\t\"fields\": this.globals.record.fields,\n\t\t\t\"identifier\": identifier\n\t\t};\n\n\t\tlet globalVars = {\n\t\t\t\"globals\": this.globals,\n\t\t\t\"form\": this,\n\t\t\t\"la\": module\n\t\t};\n\n\t\tlet msg = \"LivingApps update template: \";\n\t\tif (identifier === null)\n\t\t\tmsg += \"Initialization\";\n\t\telse\n\t\t\tmsg += \"Value change in \" + ul4._repr(identifier);\n\n\t\tthis.globals.group_logging(msg, () => {\n\t\t\ttry\n\t\t\t{\n\t\t\t\tthis.template.renders(vars, globalVars);\n\t\t\t}\n\t\t\tcatch (exc)\n\t\t\t{\n\t\t\t\tif (console && console.error)\n\t\t\t\t{\n\t\t\t\t\tthis.globals._start_log_message();\n\t\t\t\t\tif (console.group)\n\t\t\t\t\t\tconsole.group(\"UL4 stacktrace\");\n\t\t\t\t\tul4.report_exc(exc);\n\t\t\t\t\tif (console.groupEnd)\n\t\t\t\t\t\tconsole.groupEnd();\n\n\t\t\t\t\tif (console.groupCollapsed)\n\t\t\t\t\t\tconsole.groupCollapsed(\"Javascript stacktrace\");\n\t\t\t\t\tconsole.error(exc);\n\t\t\t\t\tif (console.groupEnd)\n\t\t\t\t\t\tconsole.groupEnd();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\twire_geo()\n\t{\n\t\tif (this._geo_wired)\n\t\t\treturn;\n\n\t\tif (this.globals.app.active_view !== null && navigator.geolocation)\n\t\t{\n\t\t\tlet use_geo = this.globals.app.active_view.use_geo;\n\t\t\tif (use_geo === \"once\" || use_geo === \"watch\")\n\t\t\t{\n\t\t\t\tnavigator.geolocation.getCurrentPosition((position) => {\n\t\t\t\t\tthis.globals.mode = this.globals.mode.substring(0, this.globals.mode.lastIndexOf(\"/\") + 1) + \"geo\";\n\t\t\t\t\tthis.globals.set_current_geo(position);\n\t\t\t\t\tthis.render_template(null);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (use_geo === \"watch\")\n\t\t\t{\n\t\t\t\tnavigator.geolocation.watchPosition((position) => {\n\t\t\t\t\tthis.globals.mode = this.globals.mode.substring(0, this.globals.mode.lastIndexOf(\"/\") + 1) + \"geo\";\n\t\t\t\t\tthis.globals.set_current_geo(position);\n\t\t\t\t\tthis.render_template(null);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tthis._geo_wired = true;\n\t}\n\n\twire_field(field)\n\t{\n\t\tfor (let dom_node of field._dom_controls)\n\t\t{\n\t\t\tdom_node.addEventListener(field._inputevent, (event) => {\n\t\t\t\tthis.wire_geo();\n\t\t\t\tthis.globals.mode = this.globals.mode.substring(0, this.globals.mode.lastIndexOf(\"/\") + 1) + \"input\";\n\t\t\t\tthis.render_template(field.control.identifier);\n\t\t\t});\n\t\t}\n\t}\n};\n\nForm.prototype._ul4attrs = new Set([\"enabled\"]);\nForm.prototype._sel_form = \"#livingapps-form form\";\nForm.prototype._sel_button = \"[type=submit]\";\n\n\nlet classes = [\n\tGlobals,\n\tFlashMessage,\n\tApp,\n\tView,\n\tMenuItem,\n\tPanel,\n\tDataSource,\n\tDataSourceChildren,\n\tRecordChildren,\n\tRecord,\n\tBoolControl,\n\tIntControl,\n\tNumberControl,\n\tTextControl,\n\tEmailControl,\n\tURLControl,\n\tTelControl,\n\tTextAreaControl,\n\tDateControl,\n\tDatetimeMinuteControl,\n\tDatetimeSecondControl,\n\tLookupControl,\n\tLookupSelectControl,\n\tLookupRadioControl,\n\tLookupChoiceControl,\n\tAppLookupControl,\n\tAppLookupSelectControl,\n\tAppLookupRadioControl,\n\tAppLookupChoiceControl,\n\tMultipleLookupControl,\n\tMultipleLookupSelectControl,\n\tMultipleLookupCheckboxControl,\n\tMultipleLookupChoiceControl,\n\tMultipleAppLookupControl,\n\tMultipleAppLookupSelectControl,\n\tMultipleAppLookupCheckboxControl,\n\tMultipleAppLookupChoiceControl,\n\tGeoControl,\n\tFileControl,\n\tFileSignatureControl,\n\tButtonControl,\n\tField,\n\tBoolField,\n\tStringField,\n\tEmailField,\n\tURLField,\n\tTelField,\n\tTextAreaField,\n\tHTMLField,\n\tIntField,\n\tNumberField,\n\tGeoField,\n\tFileField,\n\tFileSignatureField,\n\tDateFieldBase,\n\tDateField,\n\tDatetimeMinuteField,\n\tDatetimeSecondField,\n\tLookupFieldBase,\n\tLookupField,\n\tMultipleLookupField,\n\tAppLookupFieldBase,\n\tAppLookupField,\n\tMultipleAppLookupField,\n\tLookupItem,\n\tViewLookupItem,\n\tLayoutControl,\n\tHTMLLayoutControl,\n\tImageLayoutControl,\n\tButtonLayoutControl,\n\tViewControl,\n\tUser,\n\tFile,\n\tGeo,\n\tNoteAttachment,\n\tURLAttachment,\n\tFileAttachment,\n\tJSONAttachment,\n\tInstallation,\n\tCategory,\n\tKeyView,\n\tAppParameter,\n\tMutableAppParameter\n];\n\nfor (let constructor of classes)\n{\n\tul4.register(\"de.livinglogic.livingapi.\" + constructor.name.toLowerCase(), constructor);\n}\n\nexport const module = new ul4.Module(\n\t\"la\",\n\t\"LivingAPI types\",\n\t{\n\t\tFlashMessage: FlashMessage,\n\t\tFile: File,\n\t\tGeo: Geo,\n\t\tUser: User,\n\t\tKeyView: KeyView,\n\t\tGlobals: Globals,\n\t\tApp: App,\n\t\tTextControl: TextControl,\n\t\tURLControl: URLControl,\n\t\tEmailControl: EmailControl,\n\t\tPasswordControl: PasswordControl,\n\t\tTelControl: TelControl,\n\t\tTextAreaControl: TextAreaControl,\n\t\tHTMLControl: HTMLControl,\n\t\tIntControl: IntControl,\n\t\tNumberControl: NumberControl,\n\t\tDateControl: DateControl,\n\t\tDatetimeMinuteControl: DatetimeMinuteControl,\n\t\tDatetimeSecondControl: DatetimeSecondControl,\n\t\tBoolControl: BoolControl,\n\t\tLookupSelectControl: LookupSelectControl,\n\t\tLookupRadioControl: LookupRadioControl,\n\t\tLookupChoiceControl: LookupChoiceControl,\n\t\tAppLookupSelectControl: AppLookupSelectControl,\n\t\tAppLookupRadioControl: AppLookupRadioControl,\n\t\tAppLookupChoiceControl: AppLookupChoiceControl,\n\t\tMultipleLookupSelectControl: MultipleLookupSelectControl,\n\t\tMultipleLookupCheckboxControl: MultipleLookupCheckboxControl,\n\t\tMultipleLookupChoiceControl: MultipleLookupChoiceControl,\n\t\tMultipleAppLookupSelectControl: MultipleAppLookupSelectControl,\n\t\tMultipleAppLookupCheckboxControl: MultipleAppLookupCheckboxControl,\n\t\tMultipleAppLookupChoiceControl: MultipleAppLookupChoiceControl,\n\t\tFileControl: FileControl,\n\t\tFileSignatureControl: FileSignatureControl,\n\t\tGeoControl: GeoControl,\n\t\tViewControl: ViewControl,\n\t\tRecordChildren: RecordChildren,\n\t\tRecord: Record,\n\t\tFileAttachment: FileAttachment,\n\t\tURLAttachment: URLAttachment,\n\t\tNoteAttachment: NoteAttachment,\n\t\tJSONAttachment: JSONAttachment,\n\t\tInstallation: Installation,\n\t\tHTMLLayoutControl: HTMLLayoutControl,\n\t\tImageLayoutControl: ImageLayoutControl,\n\t\tButtonLayoutControl: ButtonLayoutControl,\n\t\tView: View,\n\t\tDataSource: DataSource,\n\t\tDataSourceChildren: DataSourceChildren,\n\t\tLookupItem: LookupItem,\n\t\tViewLookupItem: ViewLookupItem,\n\t\tCategory: Category,\n\t\tAppParameter: AppParameter,\n\t\tMutableAppParameter: MutableAppParameter,\n\t\tMenuItem: MenuItem,\n\t\tPanel: Panel,\n\t}\n);\n"],"names":["element","name","dom_node","document","createElement","args","arg","appendChild","createTextNode","ismap","Map","isobject","ul4","_isobject","Object","entries","value","setAttribute","_append_param_to_url","urlparams","_islist","_isset","append","_str","url_with_params","url","URLSearchParams","params","param","length","prototype","toString","call","Proto","_typeof","__proto__","replace","Base","id","this","encoder","i","_ul4onattrs","dump","_dumpUL4ONAttr","decoder","iter","loadcontent","iteritem","next","done","_loadUL4ONAttr","_setDefaultUL4ONAttr","symbols","getattr","_ul4attrs","has","realvalue","bind","_ul4_name","_ul4_signature","_ul4_needsobject","_ul4_needscontext","startsWith","hasOwnProperty","AttributeError","setattr","repr","constructor","Handler","record","globalstype","Type","obj","Globals","version","hostname","platform","user","lang","datasources","app","mode","maxdbactions","maxtemplateruntime","flashmessages","view_template_id","email_template_id","handler","_log_stack","_current_geo","type","geo1","geo2","sqsin","x","Math","sin","sqcos","sqsos","cos","deg2rad","PI","flat","lat1","lat","long1","lat2","F","G","l","S","C","w","atan","sqrt","D","T","H2","image","width","height","enlarge","gravity","quality","rotate","blur","sharpen","format","cache","filename","File","archive_url","encodeURIComponent","result","rotatet","data","size","_repr","position","Geo","coords","latitude","longitude","msg_bool_true","msg_bool_false","messages","map","m","join","header","push","output","console","groupEnd","pop","callback","begin_logging","end_logging","level","group","message","_start_log_message","debug","_make_log_message","info","warn","error","Set","expose","log_debug","log_info","log_warning","log_error","dist","current_geo","scaled_url","flashmessagetype","FlashMessage","title","apptype","App","values","globals","save","identifier","active_view","layout_controls","Record","_ismap","keys","fields","ArgumentError","_make_fields","TypeError","_list","dicttype","items","controls","substr","get","_active_view","view","views","ValueError","View","active_views","insert","template_url","new_embedded_url","new_standalone_url","viewtype","datasourcetype","DataSource","DataSourceChildren","datasourcetypechildren","RecordChildren","recordtypechildren","recordtype","createdat","createdby","updatedat","updatedby","updatecount","_sparsevalues","_values","_fields","details","_children","attachments","errors","_sparsefielderrors","_sparsefieldlookupdata","_is_deleted","_is_new","maxlevel","control","priority","fieldvalue","value_as_text","label","msg_no_fields","defaults","lookupdata","field","fieldtype","set","_sparselookupdata","_in_form","v","is_empty","state","is_dirty","recordchildren","datasourcechildren","records","has_errors","key","edit_standalone_url","edit_embedded_url","display_standalone_url","display_embedded_url","search","fieldsearch","_bool","children","_get","update","FieldType","Field","_label","_description","_lookupdata","_value","_this4","_dirty","_enabled","_writable","_visible","_required","_in_text","_top","_left","_get_dom_value","oldvalue","change","_validate","_ne","_set_dom_value","_dom_label","textContent","_mode","_set_dom_label","description","top","_dom_root","style","left","searchvalue","_type","minlength","maxlength","_cssclass_root","_sel_root","_cssclass_control","querySelector","_sel_label","_sel_control","querySelectorAll","_dom_control","hidden","required","in_list","in_mobile_list","in_text","classList","contains","disabled","_dom_controls","toggle","s","visible","enabled","writable","_inputevent","boolfieldtype","BoolField","msg_field_required","msg_bool_truerequired","includes","toLowerCase","msg_field_wrong_type","checked","msg_bool","intfieldtype","IntField","test","parseInt","_parse","msg_number_format","round","testvalue","readonly","readOnly","numberfieldtype","NumberField","seps","commas","dots","c","convert","floatvalue","parseFloat","isNaN","_bound_value","precision","_round","minimum","maximum","toFixed","StringFieldType","StringField","stringfieldtype","msg_string_tooshort","msg_string_toolong","passwordfieldtype","PasswordField","emailfieldtype","EmailField","msg_email_format","urlfieldtype","URLField","URL","exc","msg_url_format","protocol","telfieldtype","TelField","msg_tel_format","textareafieldtype","TextAreaField","htmlfieldtype","HTMLField","geofieldtype","GeoField","endsWith","JSON","parse","geometry","coordinates","properties","formatted_address","dom_value","_asjson","FileFieldType","FileField","filefieldtype","filesignaturefieldtype","FileSignatureField","DateFieldBaseType","DateFieldBase","datefieldbasetype","_format","formatstring","year","month","day","hour","minute","second","ispm","_int","len","min","max","substring","Date","_convert","Date_","_date","formatstrings_parse","msg_date_format","date","datefieldtype","DateField","getFullYear","getMonth","getDate","datetimeminutefieldtype","DatetimeMinuteField","setSeconds","setMilliseconds","datetimesecondfieldtype","DatetimeSecondField","ChoiceFieldBase","selected","none_key","lookup_data","none_selected","getAttribute","add","new_children","_make_option","none_label","msg_nothing_selected","_make_label","replaceChildren","dom_input","dom_none_input","dom_label","display","innerText","LookupFieldBaseType","LookupFieldBase","lookupfieldbasetype","_set_dom_lookupdata","LookupItem","lookupitem","undefined","autoexpandable","search_lookupitem","msg_lookup_unknownkey","msg_lookup_wrongitem","LookupFieldType","LookupField","lookupfieldtype","_find_lookupitem","lookupradiofieldtype","LookupRadioField","node","_set_dom_lookupdata_input","lookupselectfieldtype","LookupSelectField","_set_dom_lookupdata_select","lookupchoicefieldtype","LookupChoiceField","MultipleLookupFieldType","MultipleLookupField","multiplelookupfieldtype","item","islist","newvalue","singlechange","multiplelookupcheckboxfieldtype","MultipleLookupCheckboxField","multiplelookupselectfieldtype","MultipleLookupSelectField","option","multiplelookupchoicefieldtype","MultipleLookupChoiceField","AppLookupFieldBaseType","AppLookupFieldBase","applookupfieldbasetype","lookup_app","as_text","lookup_controls","msg_applookup_unknownkey","msg_applookup_wrongrecord","AppLookupFieldType","AppLookupField","applookupfieldtype","_find_record","applookupselectfieldtype","AppLookupSelectField","applookupradiofieldtype","AppLookupRadioField","applookupchoicefieldtype","AppLookupChoiceField","_search_url","_search_param_name","_target_param_name","search_url","search_param_name","target_param_name","MultipleAppLookupFieldType","MultipleAppLookupField","multipleapplookupfieldtype","multipleapplookupcheckboxfieldtype","MultipleAppLookupCheckboxField","multipleapplookupselectfieldtype","MultipleAppLookupSelectField","multipleapplookupchoicefieldtype","MultipleAppLookupChoiceField","ControlType","Control","controltype","subtype","view_control","_view_control","_priority","_in_mobile_list","z_index","liveupdate","tabindex","labelpos","labelwidth","autoalign","boolcontroltype","BoolControl","_logsearch","operator","intcontroltype","IntControl","PlaceholderControlType","PlaceholderControld","placeholdercontroltype","PlaceholderControl","placeholder","numbercontroltype","NumberControl","minvalue","maxvalue","StringControlType","StringControl","stringcontroltype","gender","firstname","surname","email","streetname","streetnumber","street","zip","phone","fax","company","city","summary","interests","personal_website","company_website","department","today","_user_placeholder","indexOf","textcontroltype","TextControl","passwordcontroltype","PasswordControl","emailcontroltype","EmailControl","urlcontroltype","URLControl","telcontroltype","TelControl","textareacontroltype","TextAreaControl","encrypted","htmlcontroltype","HTMLControl","DateControlType","DateControl","datecontroltype","_formatstrings","_formatstrings_parse","language","_suffixes","datetimeminutecontroltype","DatetimeMinuteControl","now","datetimesecondcontroltype","DatetimeSecondControl","LookupControlType","LookupControl","lookupcontroltype","lookupnonekey","lookupnonelabel","lookupselectcontroltype","LookupSelectControl","lookupradiocontroltype","LookupRadioControl","lookupchoicecontroltype","LookupChoiceControl","AppLookupControlType","AppLookupControl","applookupcontroltype","applookupselectcontroltype","AppLookupSelectControl","applookupradiocontroltype","AppLookupRadioControl","applookupchoicecontroltype","AppLookupChoiceControl","MultipleLookupControlType","MultipleLookupControl","multiplelookupcontroltype","defaultValue","multiplelookupcheckboxcontroltype","MultipleLookupCheckboxControl","multiplelookupselectcontroltype","MultipleLookupSelectControl","multiplelookupchoicecontroltype","MultipleLookupChoiceControl","MultipleAppLookupControlType","MultipleAppLookupControl","multipleapplookupcontroltype","multipleapplookupselectcontroltype","MultipleAppLookupSelectControl","multipleapplookupcheckboxcontroltype","MultipleAppLookupCheckboxControl","multipleapplookupchoicecontroltype","MultipleAppLookupChoiceControl","geocontroltype","GeoControl","FileControlType","FileControl","filecontroltype","filesignaturecontroltype","FileSignatureControl","buttoncontroltype","ButtonControl","lookupitemtype","view_lookupitem","_view_lookupitem","viewlookupitemtype","ViewLookupItem","LayoutControlType","LayoutControl","layoutcontroltype","htmllayoutcontroltype","HTMLLayoutControl","innerHTML","imagelayoutcontroltype","ImageLayoutControl","_image","original","img","buttonlayoutcontroltype","ButtonLayoutControl","viewcontroltype","ViewControl","usertype","User","filetype","contextid","archive","geotype","long","AttachmentType","Attachment","attachmenttype","noteattachmenttype","NoteAttachment","urlattachmenttype","URLAttachment","fileattachmenttype","FileAttachment","jsonattachmenttype","JSONAttachment","_fromjson","installationtype","Installation","categorytype","Category","category","splice","parent","keyviewtype","KeyView","AppParameterType","AppParameter","appparametertype","owner","mutableappparametertype","MutableAppParameter","MenuItemType","MenuItem","menuitemtype","paneltype","Panel","formtype","Form","template","_geo_wired","wire_field","render_template","_sel_form","_sel_button","_dom_button","vars","globalVars","module","msg","group_logging","_this8","renders","report_exc","groupCollapsed","navigator","geolocation","use_geo","getCurrentPosition","_this9","lastIndexOf","set_current_geo","watchPosition","addEventListener","event","_this10","wire_geo","register","Module"],"mappings":"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AMR,QAAQnD,2DAMvC6gB,GAAKxqB,UAAUyB,UAAY,IAAIiH,IAAI,CAAC,YACpC8hB,GAAKxqB,UAAU6qB,UAAY,wBAC3BL,GAAKxqB,UAAU8qB,YAAc,gBAyF7B,IAtFA,YAAc,CACbloB,EACAwG,EACAG,EACAwB,EACAof,GACAG,GACA/e,EACAC,EACAE,EACA5B,EACA8V,GACAI,GACAO,GACA2B,GACAI,GACAE,GACAE,GACAE,GACAK,GACAO,GACAG,GACAE,GACAK,GACAE,GACAE,GACAE,GACAG,GACAE,GACAE,GACAE,GACAM,GACAF,GACAI,GACAE,GACAG,GACAE,GACAE,GACAE,GACAE,GACAG,GACAE,GACA5X,EACAyD,EACAmC,EACAO,EACAG,EACAM,EACAG,EACAE,EACA/C,EACAU,EACAuC,EACAW,EACAG,EACAE,EACAwB,GACAK,GACAI,GACAoB,GACAW,GACAa,GACAc,GACAQ,GACAgB,GACA3D,GACAsM,GACAE,GACAG,GACAG,GACAK,GACAE,GACAE,GACA5hB,GACAS,GACA6hB,GACAE,GACAE,GACAE,GACAG,GACAE,GACAK,GACAE,GACAI,sBAID,KADS3nB,UAERxD,EAAIutB,SAAS,4BAA8B/pB,GAAYnE,KAAKyU,cAAetQ,QAG/D4oB,GAAS,IAAIpsB,EAAIwtB,OAC7B,KACA,kBACA,CACCljB,aAAcA,EACd/C,KAAMA,GACNS,IAAKA,GACLmhB,KAAMA,GACN0B,QAASA,GACT/mB,QAASA,EACT2G,IAAKA,EACL2Y,YAAaA,GACbM,WAAYA,GACZF,aAAcA,GACdF,gBAAiBA,GACjBM,WAAYA,GACZE,gBAAiBA,GACjBG,YAAaA,GACb/C,WAAYA,GACZO,cAAeA,GACf0C,YAAaA,GACbO,sBAAuBA,GACvBG,sBAAuBA,GACvB/D,YAAaA,GACbsE,oBAAqBA,GACrBE,mBAAoBA,GACpBE,oBAAqBA,GACrBK,uBAAwBA,GACxBE,sBAAuBA,GACvBE,uBAAwBA,GACxBQ,4BAA6BA,GAC7BF,8BAA+BA,GAC/BI,4BAA6BA,GAC7BK,+BAAgCA,GAChCE,iCAAkCA,GAClCE,+BAAgCA,GAChCI,YAAaA,GACbG,qBAAsBA,GACtBL,WAAYA,GACZ2B,YAAaA,GACbrc,eAAgBA,EAChB5B,OAAQA,EACRif,eAAgBA,GAChBF,cAAeA,GACfF,eAAgBA,GAChBM,eAAgBA,GAChBG,aAAcA,GACd/B,kBAAmBA,GACnBG,mBAAoBA,GACpBK,oBAAqBA,GACrB9c,KAAMA,EACNQ,WAAYA,EACZC,mBAAoBA,EACpBkP,WAAYA,GACZsM,eAAgBA,GAChBsC,SAAUA,GACVO,aAAcA,GACdI,oBAAqBA,GACrBE,SAAUA,GACVG,MAAOA"}