@livinglogic/livingapi 0.11.0 → 0.13.1
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.
- package/CHANGELOG.md +74 -1
- package/README.md +3 -3
- package/dist/esm-node/livingapi.js +1 -1
- package/dist/esm-node/livingapi.js.map +1 -1
- package/dist/esm-static/livingapi.js +1 -1
- package/dist/esm-static/livingapi.js.map +1 -1
- package/dist/umd/livingapi.js +1 -1
- package/dist/umd/livingapi.js.map +1 -1
- package/package.json +11 -11
- package/rollup.config.js +1 -1
- package/src/livingapi.js +1617 -191
|
@@ -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-2019 by LivingLogic AG, Bayreuth/Germany\n * Copyright 2017-2019 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\nexport class Base extends ul4.Proto\n{\n\tconstructor()\n\t{\n\t\tsuper();\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__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\tthrow new ul4.AttributeError(this, name);\n\t}\n\n\t__repr__()\n\t{\n\t\treturn \"<\" + this.constructor.name + \">\";\n\t}\n};\n\nexport class Handler\n{\n\tsave(record)\n\t{\n\t}\n\n\tdelete(record)\n\t{\n\t}\n};\n\nexport class Globals extends Base\n{\n\tconstructor()\n\t{\n\t\tsuper();\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.maxdbactions = null;\n\t\tthis.maxtemplateruntime = null;\n\t\tthis.flashmessages = null;\n\t\tthis.handler = new Handler();\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\tstatic geodist(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\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\t__repr__()\n\t{\n\t\treturn \"<Globals version=\" + ul4._repr(this.version) + \">\";\n\t}\n};\n\nGlobals.prototype._ul4onattrs = [\"version\", \"platform\", \"user\", \"maxdbactions\", \"maxtemplateruntime\", \"flashmessages\", \"lang\", \"datasources\", \"hostname\"];\nGlobals.prototype._ul4attrs = ul4._makeset(\"version\", \"hostname\", \"platform\", \"user\", \"lang\", \"maxdbactions\", \"maxtemplateruntime\", \"flashmessages\");\n\nexport class FlashMessage extends Base\n{\n\t__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 = ul4._makeset(\"timestamp\", \"type\", \"title\", \"message\");\n\nexport class App extends Base\n{\n\t__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.__call__(values);\n\t\tthis.globals.handler.save(this);\n\t\treturn record;\n\t}\n\n\t__call__(values={})\n\t{\n\t\tlet record = new Record(this);\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 (!record.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 = 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 (!record.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\t\treturn record;\n\t}\n\n\t__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\n\t\t\treturn super.__getattr__(name);\n\t}\n};\n\nApp.prototype._ul4onattrs = [\"id\", \"globals\", \"name\", \"description\", \"language\", \"startlink\", \"iconlarge\", \"iconsmall\", \"createdby\", \"controls\", \"records\", \"recordcount\", \"installation\", \"categories\", \"params\", \"views\", \"datamanagement_identifier\", \"basetable\", \"primarykey\", \"insertprocedure\", \"updateprocedure\", \"deleteprocedure\", \"templates\", \"createdat\", \"updatedat\", \"updatedby\"];\nApp.prototype._ul4attrs = ul4._makeset(\"id\", \"globals\", \"name\", \"description\", \"language\", \"startlink\", \"iconlarge\", \"iconsmall\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\", \"controls\", \"records\", \"recordcount\", \"installation\", \"categories\", \"params\", \"views\", \"datamanagement_identifier\", \"insert\");\nul4.expose(App.prototype.__call__, [\"**values\"], {\"needsobject\": true});\nul4.expose(App.prototype.insert, [\"**values\"], {\"needsobject\": true});\n\nexport class View extends Base\n{\n\t__repr__()\n\t{\n\t\treturn \"<View id=\" + ul4._repr(this.id) + \" name=\" + ul4._repr(this.name) + \">\";\n\t}\n};\n\nView.prototype._ul4onattrs = [\"id\", \"name\", \"app\", \"order\", \"width\", \"height\", \"start\", \"end\"];\nView.prototype._ul4attrs = ul4._makeset(\"id\", \"name\", \"app\", \"order\", \"width\", \"height\", \"start\", \"end\");\n\nexport class DataSourceData extends Base\n{\n\t__repr__()\n\t{\n\t\treturn \"<DataSource.Data id=\" + ul4._repr(this.id) + \" identifier=\" + ul4._repr(this.identifier) + \">\";\n\t}\n};\n\nDataSourceData.prototype._ul4onattrs = [\"id\", \"identifier\", \"app\", \"apps\"];\nDataSourceData.prototype._ul4attrs = ul4._makeset(\"id\", \"identifier\", \"app\", \"apps\");\n\nexport class Record extends Base\n{\n\tconstructor(app)\n\t{\n\t\tsuper();\n\t\tthis.id = null;\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.children = new Map();\n\t\tthis.attachments = null;\n\t\tthis.errors = [];\n\t\tthis._is_deleted = false;\n\t}\n\n\t__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)\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(\">\")\n\t\treturn v.join(\"\");\n\t}\n\n\tget values()\n\t{\n\t\tif (this._values === null)\n\t\t{\n\t\t\tthis._values = ul4._havemap ? new Map() : {};\n\t\t\tfor (let [identifier, control] of this.app.controls.entries())\n\t\t\t{\n\t\t\t\tlet fieldvalue = this._sparsevalues.get(identifier);\n\t\t\t\tif (typeof(fieldvalue) === \"undefined\")\n\t\t\t\t\tfieldvalue = null;\n\t\t\t\tthis._values.set(identifier, fieldvalue);\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{\n\t\t\tthis._fields = ul4._havemap ? new Map() : {};\n\t\t\tfor (let [identifier, value] of this.values.entries())\n\t\t\t{\n\t\t\t\tlet field = new Field(this.app.controls.get(identifier), this, value);\n\t\t\t\tthis._fields.set(identifier, field);\n\t\t\t}\n\t\t}\n\t\treturn this._fields;\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\treturn this.app.globals.handler.delete(this);\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\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\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__getattr__(name)\n\t{\n\t\tif (name.startsWith(\"c_\"))\n\t\t\treturn this.children.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.values.get(name.substr(2))\n\t\telse\n\t\t\treturn this[name];\n\t}\n\n\t__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\tthrow new ul4.AttributeError(this, name);\n\t}\n};\n\nRecord.prototype._ul4onattrs = [\"id\", \"app\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\", \"updatecount\", \"values\", \"attachments\", \"children\"];\nRecord.prototype._ul4attrs = ul4._makeset(\"id\", \"app\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\", \"updatecount\", \"values\", \"attachments\", \"children\");\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});\n\nexport class Control extends Base\n{\n\t__repr__()\n\t{\n\t\treturn \"<\" + this.__type__ + \" id=\" + ul4._repr(this.id) + \" identifier=\" + ul4._repr(this.identifier) + \">\";\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 = [\"id\", \"identifier\", \"field\", \"app\", \"label\", \"priority\", \"order\", \"default\", \"ininsertprocedure\", \"inupdateprocedure\"];\nControl.prototype._ul4attrs = ul4._makeset(\"id\", \"identifier\", \"field\", \"app\", \"label\", \"priority\", \"order\", \"default\", \"ininsertprocedure\", \"inupdateprocedure\");\n\nexport class BoolControl extends Control\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\";\n\nexport class IntControl extends Control\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\";\n\nexport class NumberControl extends Control\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\";\n\nexport class StringControl extends Control\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\nexport class TextControl extends StringControl\n{\n};\n\nTextControl.prototype.subtype = \"text\";\n\nexport class EmailControl extends StringControl\n{\n};\n\nEmailControl.prototype.subtype = \"email\";\n\nexport class URLControl extends StringControl\n{\n};\n\nURLControl.prototype.subtype = \"url\";\n\nexport class TelControl extends StringControl\n{\n};\n\nTelControl.prototype.subtype = \"tel\";\n\nexport class PasswordControl extends StringControl\n{\n};\n\nPasswordControl.prototype.subtype = \"password\";\n\nexport class TextAreaControl extends StringControl\n{\n};\n\nTextAreaControl.prototype.subtype = \"textarea\";\nTextAreaControl.prototype._ul4onattrs = StringControl.prototype._ul4onattrs.concat([\"encrypted\"]);\nTextAreaControl.prototype._ul4attrs = ul4._makeset(...StringControl.prototype._ul4attrs, \"encrypted\");\n\nexport class DateControl extends Control\n{\n\tformatstring(language)\n\t{\n\t\tlanguage = language || this.app.language;\n\n\t\tif (language === \"de\")\n\t\t\treturn \"%d.%m.%Y\";\n\t\telse\n\t\t\treturn \"%m/%d/%Y\";\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\";\n\nexport class DatetimeMinuteControl extends DateControl\n{\n\tformatstring(language)\n\t{\n\t\tlanguage = language || this.app.language;\n\n\t\tif (language === \"de\")\n\t\t\treturn \"%d.%m.%Y %H:%M\";\n\t\telse\n\t\t\treturn \"%m/%d/%Y %H:%M\";\n\t}\n};\n\nDatetimeMinuteControl.prototype.subtype = \"datetimeminute\";\n\nexport class DatetimeSecondControl extends DateControl\n{\n\tformatstring(language)\n\t{\n\t\tlanguage = language || this.app.language;\n\n\t\tif (language === \"de\")\n\t\t\treturn \"%d.%m.%Y %H:%M:%S\";\n\t\telse\n\t\t\treturn \"%m/%d/%Y %H:%M:%S\";\n\t}\n};\n\nDatetimeSecondControl.prototype.subtype = \"datetimesecond\";\n\nexport class LookupControl extends Control\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._ul4onattrs = Control.prototype._ul4onattrs.concat([\"lookupdata\"]);\nLookupControl.prototype._ul4attrs = ul4._makeset(...Control.prototype._ul4attrs, \"lookupdata\");\n\nexport class LookupSelectControl extends LookupControl\n{\n};\n\nLookupSelectControl.prototype.subtype = \"select\";\n\nexport class LookupRadioControl extends LookupControl\n{\n};\n\nLookupRadioControl.prototype.subtype = \"radio\";\n\nexport class LookupChoiceControl extends LookupControl\n{\n};\n\nLookupChoiceControl.prototype.subtype = \"choice\";\n\nexport class AppLookupControl extends Control\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._ul4onattrs = Control.prototype._ul4onattrs.concat([\"lookupapp\", \"lookupcontrols\"]);\nAppLookupControl.prototype._ul4attrs = ul4._makeset(...Control.prototype._ul4attrs, \"lookupapp\", \"lookupcontrols\");\n\nexport class AppLookupSelectControl extends AppLookupControl\n{\n};\n\nAppLookupSelectControl.prototype.subtype = \"select\";\n\nexport class AppLookupRadioControl extends AppLookupControl\n{\n};\n\nAppLookupRadioControl.prototype.subtype = \"radio\";\n\nexport class AppLookupChoiceControl extends AppLookupControl\n{\n};\n\nAppLookupChoiceControl.prototype.subtype = \"choice\";\n\nexport class MultipleLookupControl extends LookupControl\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.subtype = \"multiplelookup\";\n\nexport class MultipleLookupSelectControl extends MultipleLookupControl\n{\n};\n\nMultipleLookupSelectControl.prototype.subtype = \"select\";\n\nexport class MultipleLookupCheckboxControl extends MultipleLookupControl\n{\n};\n\nMultipleLookupCheckboxControl.prototype.subtype = \"checkbox\";\n\nexport class MultipleLookupChoiceControl extends MultipleLookupControl\n{\n};\n\nMultipleLookupChoiceControl.prototype.subtype = \"choice\";\n\nexport class MultipleAppLookupControl extends AppLookupControl\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\";\n\nexport class MultipleAppLookupSelectControl extends MultipleAppLookupControl\n{\n};\n\nMultipleAppLookupSelectControl.prototype.subtype = \"select\";\n\nexport class MultipleAppLookupCheckboxControl extends MultipleAppLookupControl\n{\n};\n\nMultipleAppLookupCheckboxControl.prototype.subtype = \"checkbox\";\n\nexport class MultipleAppLookupChoiceControl extends MultipleAppLookupControl\n{\n};\n\nMultipleAppLookupChoiceControl.prototype.subtype = \"choice\";\n\nexport class GeoControl extends Control\n{\n};\n\nGeoControl.prototype.type = \"geo\";\n\nexport class FileControl extends Control\n{\n};\n\nFileControl.prototype.type = \"file\";\n\nexport class ButtonControl extends Control\n{\n};\n\nButtonControl.prototype.type = \"button\";\n\nexport class Field extends Base\n{\n\tconstructor(control, record, value)\n\t{\n\t\tsuper();\n\t\tthis.control = control;\n\t\tthis.record = record;\n\t\tthis._value = value;\n\t\tthis._dirty = false;\n\t\tthis.errors = [];\n\t}\n\n\tget value()\n\t{\n\t\treturn this._value;\n\t}\n\n\tset value(value)\n\t{\n\t\tlet oldvalue = this._value;\n\n\t\tif (ul4._ne(oldvalue, value))\n\t\t{\n\t\t\tthis.record.values.set(this.control.identifier, value);\n\t\t\tthis._value = value;\n\t\t\tthis._dirty = true;\n\t\t}\n\t}\n\n\tis_empty()\n\t{\n\t\treturn this._value === null || (ul4._islist(this._value) && this._value.length === 0);\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\tsearch(searchvalue)\n\t{\n\t\treturn this.control.search(this.value, searchvalue);\n\t}\n\n\t__repr__()\n\t{\n\t\tlet s = \"<Field 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\nexport class LookupItem extends Base\n{\n\t__repr__()\n\t{\n\t\treturn \"<LookupItem key=\" + ul4._repr(this.key) + \" label=\" + ul4._repr(this.label) + \">\";\n\t}\n};\n\nLookupItem.prototype._ul4onattrs = [\"key\", \"label\"];\nLookupItem.prototype._ul4attrs = ul4._makeset(\"key\", \"label\");\n\nexport class User extends Base\n{\n\t__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\", \"id\", \"gender\", \"firstname\", \"surname\", \"initials\", \"email\", \"language\", \"avatarsmall\", \"avatarlarge\", \"keyviews\"];\nUser.prototype._ul4attrs = ul4._makeset(\"_id\", \"id\", \"gender\", \"firstname\", \"surname\", \"initials\", \"email\", \"language\", \"avatarsmall\", \"avatarlarge\", \"keyviews\");\n\nexport class File extends Base\n{\n\t__repr__()\n\t{\n\t\treturn \"<File id=\" + ul4._repr(this.id) + \" url=\" + ul4._repr(this.url) + \" filename=\" + ul4._repr(this.filename) + \">\";\n\t}\n};\n\nFile.prototype._ul4onattrs = [\"id\", \"url\", \"filename\", \"mimetype\", \"width\", \"height\", \"internalid\", \"createdat\", \"size\"];\nFile.prototype._ul4attrs = ul4._makeset(\"id\", \"url\", \"filename\", \"mimetype\", \"width\", \"height\", \"size\", \"createdat\");\n\nexport class Geo extends Base\n{\n\tconstructor(lat, long, info)\n\t{\n\t\tsuper();\n\t\tthis.lat = lat;\n\t\tthis.long = long;\n\t\tthis.info = info;\n\t}\n\n\t__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 = [\"lat\", \"long\", \"info\"];\nGeo.prototype._ul4attrs = ul4._makeset(\"lat\", \"long\", \"info\");\n\nexport class Attachment extends Base\n{\n\t__repr__()\n\t{\n\t\treturn \"<\" + this.__type__ + \" id=\" + ul4._repr(this.id) + \" label=\" + ul4._repr(this.label) + \">\";\n\t}\n};\n\nAttachment.prototype._ul4onattrs = [\"id\", \"record\", \"label\", \"active\"];\nAttachment.prototype._ul4attrs = ul4._makeset(\"id\", \"record\", \"label\", \"active\");\n\nexport class NoteAttachment extends Attachment\n{\n};\n\nNoteAttachment.prototype.type = \"noteattachment\";\nNoteAttachment.prototype._ul4onattrs = Attachment.prototype._ul4onattrs.concat([\"value\"]);\nNoteAttachment.prototype._ul4attrs = ul4._makeset(...Attachment.prototype._ul4onattrs, \"value\");\n\nexport class URLAttachment extends Attachment\n{\n};\n\nURLAttachment.prototype.type = \"urlattachment\";\nURLAttachment.prototype._ul4onattrs = Attachment.prototype._ul4onattrs.concat([\"value\"]);\nURLAttachment.prototype._ul4attrs = ul4._makeset(...Attachment.prototype._ul4onattrs, \"value\");\n\nexport class FileAttachment extends Attachment\n{\n};\n\nFileAttachment.prototype.type = \"fileattachment\";\nFileAttachment.prototype._ul4onattrs = Attachment.prototype._ul4onattrs.concat([\"value\"]);\nFileAttachment.prototype._ul4attrs = ul4._makeset(...Attachment.prototype._ul4onattrs, \"value\");\n\nexport class ImageAttachment extends Attachment\n{\n};\n\nImageAttachment.prototype.type = \"imageattachment\";\nImageAttachment.prototype._ul4onattrs = Attachment.prototype._ul4onattrs.concat([\"original\", \"thumb\", \"small\", \"medium\", \"large\"]);\nImageAttachment.prototype._ul4attrs = ul4._makeset(...Attachment.prototype._ul4onattrs, \"original\", \"thumb\", \"small\", \"medium\", \"large\");\n\nexport class JSONAttachment extends Attachment\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.concat([\"value\"]);\nJSONAttachment.prototype._ul4attrs = ul4._makeset(...Attachment.prototype._ul4onattrs, \"value\");\n\nexport class Installation extends Base\n{\n\t__repr__()\n\t{\n\t\treturn \"<Installation id=\" + ul4._repr(this.id) + \" name=\" + ul4._repr(this.name) + \">\";\n\t}\n};\n\nInstallation.prototype._ul4onattrs = [\"id\", \"name\"];\nInstallation.prototype._ul4attrs = ul4._makeset(\"id\", \"name\");\n\nexport class Category extends Base\n{\n\t__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 = [\"id\", \"identifier\", \"name\", \"order\", \"parent\", \"children\", \"apps\"];\nCategory.prototype._ul4attrs = ul4._makeset(\"id\", \"identifier\", \"name\", \"order\", \"parent\", \"children\", \"apps\");\n\nexport class KeyView extends Base\n{\n\t__repr__()\n\t{\n\t\treturn \"<KeyView id=\" + ul4._repr(this.id) + \" identifier=\" + ul4._repr(this.identifier) + \">\";\n\t}\n};\n\nKeyView.prototype._ul4onattrs = [\"id\", \"identifier\", \"name\", \"key\", \"user\"];\nKeyView.prototype._ul4attrs = ul4._makeset(\"id\", \"identifier\", \"name\", \"key\", \"user\");\n\nexport class AppParameter extends Base\n{\n\t__repr__()\n\t{\n\t\treturn \"<AppParameter id=\" + ul4._repr(this.id) + \" identifier=\" + ul4._repr(this.identifier) + \">\";\n\t}\n};\n\nAppParameter.prototype._ul4onattrs = [\"id\", \"app\", \"identifier\", \"description\", \"value\"];\nAppParameter.prototype._ul4attrs = ul4._makeset(\"id\", \"app\", \"identifier\", \"description\", \"value\");\n\nlet classes = [\n\tGlobals,\n\tFlashMessage,\n\tApp,\n\tView,\n\tDataSourceData,\n\tRecord,\n\tBoolControl,\n\tIntControl,\n\tNumberControl,\n\tTextControl,\n\tEmailControl,\n\tURLControl,\n\tTelControl,\n\tPasswordControl,\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\tButtonControl,\n\tField,\n\tLookupItem,\n\tUser,\n\tFile,\n\tGeo,\n\tNoteAttachment,\n\tURLAttachment,\n\tFileAttachment,\n\tImageAttachment,\n\tJSONAttachment,\n\tInstallation,\n\tCategory,\n\tKeyView,\n\tAppParameter\n];\n\nfor (let constructor of classes)\n{\n\tul4.register(\"de.livinglogic.livingapi.\" + constructor.name.toLowerCase(), constructor);\n}\n"],"names":["Base","ul4","encoder","i","this","_ul4onattrs","length","dump","_dumpUL4ONAttr","name","decoder","iter","loadcontent","iteritem","next","done","_loadUL4ONAttr","value","_setDefaultUL4ONAttr","_ul4attrs","has","realvalue","bind","_ul4_name","_ul4_signature","_ul4_needsobject","_ul4_needscontext","constructor","Handler","record","Globals","version","hostname","platform","user","lang","maxdbactions","maxtemplateruntime","flashmessages","handler","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","prototype","FlashMessage","type","title","App","id","values","__call__","globals","save","Record","entries","key","fields","get","startsWith","controls","substr","insert","View","DataSourceData","identifier","app","createdat","createdby","updatedat","updatedby","updatecount","_sparsevalues","Map","_values","_fields","children","attachments","errors","_is_deleted","v","field","control","priority","push","join","is_dirty","has_errors","search","fieldsearch","fieldvalue","set","Field","update","Control","__type__","subtype","BoolControl","_logsearch","operator","IntControl","NumberControl","minvalue","maxvalue","StringControl","toLowerCase","indexOf","TextControl","EmailControl","URLControl","TelControl","PasswordControl","TextAreaControl","concat","DateControl","language","searchvalue","Object","toString","call","formatstring","DatetimeMinuteControl","DatetimeSecondControl","LookupControl","LookupSelectControl","LookupRadioControl","LookupChoiceControl","AppLookupControl","AppLookupSelectControl","AppLookupRadioControl","AppLookupChoiceControl","MultipleLookupControl","MultipleLookupSelectControl","MultipleLookupCheckboxControl","MultipleLookupChoiceControl","MultipleAppLookupControl","MultipleAppLookupSelectControl","MultipleAppLookupCheckboxControl","MultipleAppLookupChoiceControl","GeoControl","FileControl","ButtonControl","_value","_dirty","s","oldvalue","LookupItem","label","User","firstname","surname","email","File","url","filename","Geo","long","info","Attachment","NoteAttachment","URLAttachment","FileAttachment","ImageAttachment","JSONAttachment","Installation","Category","category","splice","parent","KeyView","AppParameter"],"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-2019 by LivingLogic AG, Bayreuth/Germany\n * Copyright 2017-2019 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 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\tthrow new ul4.AttributeError(this, name);\n\t}\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\nexport class Globals extends Base\n{\n\tstatic classdoc = \"Global information\";\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.app = null;\n\t\tthis.record = null;\n\t\tthis.maxdbactions = null;\n\t\tthis.maxtemplateruntime = null;\n\t\tthis.flashmessages = null;\n\t\tthis.handler = new Handler();\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\tstatic geodist(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\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\tscaledURL(url, 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 (url instanceof File)\n\t\t{\n\t\t\turl = \"https://\" + this.hostname + url.url;\n\t\t\tfilename = encodeURIComponent(url.filename);\n\t\t\tif (filename != url.filename)\n\t\t\t\tfilename = null;\n\t\t}\n\n\t\tlet result = \"\";\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(url);\n\n\t\treturn result;\n\t}\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<Globals version=\" + ul4._repr(this.version) + \">\";\n\t}\n};\n\nGlobals.prototype._ul4onattrs = [\"version\", \"platform\", \"user\", \"maxdbactions\", \"maxtemplateruntime\", \"flashmessages\", \"lang\", \"datasources\", \"hostname\", \"app\", \"record\", \"google_api_key\", \"mode\", \"view_template_id\", \"email_template_id\", \"view_id\"];\nGlobals.prototype._ul4attrs = new Set([\"version\", \"hostname\", \"platform\", \"user\", \"lang\", \"app\", \"record\", \"maxdbactions\", \"maxtemplateruntime\", \"flashmessages\", \"mode\"]);\n\n\nexport class FlashMessage extends Base\n{\n\tstatic classdoc = \"A flash message in a web page\";\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\nexport class App extends Base\n{\n\tstatic classdoc = \"A LivingApps application\";\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\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\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\n\nApp.prototype._ul4onattrs = [\"globals\", \"name\", \"description\", \"lang\", \"startlink\", \"iconlarge\", \"iconsmall\", \"createdby\", \"controls\", \"records\", \"recordcount\", \"installation\", \"categories\", \"params\", \"views\", \"datamanagement_identifier\", \"basetable\", \"primarykey\", \"insertprocedure\", \"updateprocedure\", \"deleteprocedure\", \"templates\", \"createdat\", \"updatedat\", \"updatedby\", \"superid\", \"favorite\", \"_active_view\"];\nApp.prototype._ul4attrs = new Set([\"id\", \"globals\", \"name\", \"description\", \"lang\", \"startlink\", \"iconlarge\", \"iconsmall\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\", \"controls\", \"records\", \"recordcount\", \"installation\", \"categories\", \"params\", \"views\", \"datamanagement_identifier\", \"insert\", \"favorite\", \"_active_view\"]);\nul4.expose(App.prototype[ul4.symbols.call], [\"**values\"], {\"needsobject\": true});\nul4.expose(App.prototype.insert, [\"**values\"], {\"needsobject\": true});\n\n\nexport class View extends Base\n{\n\tstatic classdoc = \"An input form for a LivingApps application\";\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\"];\nView.prototype._ul4attrs = new Set([\"id\", \"name\", \"combined_type\", \"app\", \"order\", \"width\", \"height\", \"start\", \"end\", \"controls\", \"layout_controls\", \"lang\"]);\n\n\nexport class DataSourceData extends Base\n{\n\tstatic classdoc = \"The data resulting from a data source configuration\";\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<DataSource.Data id=\" + ul4._repr(this.id) + \" identifier=\" + ul4._repr(this.identifier) + \">\";\n\t}\n};\n\nDataSourceData.prototype._ul4onattrs = [\"identifier\", \"app\", \"apps\"];\nDataSourceData.prototype._ul4attrs = new Set([\"id\", \"identifier\", \"app\", \"apps\"]);\n\n\nexport class Record extends Base\n{\n\tstatic classdoc = \"A record of a LivingApp application\";\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.children = new Map();\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_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[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\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\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\treturn this.children.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.values.get(name.substr(2))\n\t\telse\n\t\t\treturn this[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\tthrow new ul4.AttributeError(this, name);\n\t}\n};\n\nRecord.prototype._ul4onattrs = [\"app\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\", \"updatecount\", \"_sparsevalues\", \"attachments\", \"children\", \"errors\", \"_sparsefielderrors\", \"_sparsefieldlookupdata\"];\nRecord.prototype._ul4attrs = new Set([\"id\", \"app\", \"createdat\", \"createdby\", \"updatedat\", \"updatedby\", \"updatecount\", \"values\", \"attachments\", \"children\", \"errors\"]);\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});\n\n\nexport class Field extends Base\n{\n\tstatic classdoc = \"Holds the value of a field of a record (and related information)\";\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._lookupdate = null;\n\t\tthis.errors = [];\n\t\tthis._value = null;\n\t\tthis.value = value;\n\t\tthis._dirty = false;\n\t}\n\n\tget value()\n\t{\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\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}\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\tget label()\n\t{\n\t\tif (this._label !== null)\n\t\t\treturn this._label;\n\t\treturn this.control.label;\n\t}\n\n\tset label(value)\n\t{\n\t\tthis._label = 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 || (ul4._islist(this._value) && this._value.length === 0);\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\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. Tou 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_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[ul4.symbols.repr]()\n\t{\n\t\tlet s = \"<Field 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\nField.prototype._ul4onattrs = [\"control\", \"record\", \"label\", \"value\", \"errors\", \"enabled\", \"writable\", \"visible\"];\nField.prototype._ul4attrs = new Set([\"control\", \"record\", \"label\", \"value\", \"errors\", \"enabled\", \"writable\", \"visible\"]);\n\n\nexport class BoolField extends Field\n{\n\tstatic classdoc = \"Holds the value of a bool field of a record (and related information)\";\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) === \"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\n\nexport class IntField extends Field\n{\n\tstatic classdoc = \"Holds the value of an int field of a record (and related information)\";\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) !== \"number\" || Math.round(change.value) !== change.value)\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(change.value));\n\t\t}\n\t}\n};\n\n\nexport class NumberField extends Field\n{\n\tstatic classdoc = \"Holds the value of a number field of a record (and related information)\";\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) !== \"number\")\n\t\t{\n\t\t\tchange.errors.push(this.msg_field_wrong_type(change.value));\n\t\t}\n\t}\n};\n\n\nexport class StringField extends Field\n{\n\tstatic classdoc = \"Holds the value of a string field of a record (and related information)\";\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\n\nexport class EmailField extends StringField\n{\n\tstatic classdoc = \"Holds the value of a string/email field of a record (and related information)\";\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\nexport class URLField extends StringField\n{\n\tstatic classdoc = \"Holds the value of a string/url field of a record (and related information)\";\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\nexport class TelField extends StringField\n{\n\tstatic classdoc = \"Holds the value of a string/tel field of a record (and related information)\";\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\nexport class TextAreaField extends StringField\n{\n\tstatic classdoc = \"Holds the value of a string/textarea field of a record (and related information)\";\n};\n\n\nexport class HTMLField extends StringField\n{\n\tstatic classdoc = \"Holds the value of a string/html field of a record (and related information)\";\n};\n\n\nexport class GeoField extends Field\n{\n\tstatic classdoc = \"Holds the value of a geo field of a record (and related information)\";\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};\n\n\nexport class FileField extends Field\n{\n\tstatic classdoc = \"Holds the value of a file field of a record (and related information)\";\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\n\nexport class FileSignatureField extends FileField\n{\n\tstatic classdoc = \"Holds the value of a file/signature field of a record (and related information)\";\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\nexport class DateFieldBase extends Field\n{\n\tstatic classdoc = \"Holds the value of a date field of a record (and related information)\";\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(new Date(change.value.getTime()));\n\t\t}\n\t\telse if (typeof(change.value) === \"string\")\n\t\t{\n\t\t\tlet value = null;\n\t\t\tif (change.value.length === 10)\n\t\t\t\tvalue = new Date(change.value + \"T00:00:00\");\n\t\t\telse if (change.value.length === 16)\n\t\t\t\tvalue = new Date(change.value + \":00\");\n\t\t\telse if (change.value.length === 19)\n\t\t\t\tvalue = new Date(change.value);\n\n\t\t\tif (value === null || Number.isNaN(value.getYear()))\n\t\t\t{\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\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tchange.value = this._convert(value);\n\t\t\t}\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\n\nexport class DateField extends DateFieldBase\n{\n\tstatic classdoc = \"Holds the value of a date/date field of a record (and related information)\";\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\nexport class DatetimeMinuteField extends DateFieldBase\n{\n\tstatic classdoc = \"Holds the value of a date/datetimeminute field of a record (and related information)\";\n\n\t_convert(date)\n\t{\n\t\t// Get rid of seconds and milliseconds\n\t\tdate.setSeconds(0);\n\t\tdate.setMilliseconds(0);\n\t\treturn date;\n\t}\n};\n\n\nexport class DatetimeSecondField extends DateFieldBase\n{\n\tstatic classdoc = \"Holds the value of a date/datetimesecond field of a record (and related information)\";\n\n\t_convert(date)\n\t{\n\t\t// Get rid of milliseconds\n\t\tdate.setMilliseconds(0);\n\t\treturn date;\n\t}\n};\n\n\nexport class LookupFieldBase extends Field\n{\n\tstatic classdoc = \"Base type of LookupField and MultipleLookupField\";\n\n\tget lookupdata()\n\t{\n\t\tif (this._lookupdate !== null)\n\t\t\treturn this._lookupdate;\n\t\telse\n\t\t\treturn this.control.lookupdata;\n\t}\n\n\tset lookupdata(value)\n\t{\n\t\tthis._lookupdate = 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 is 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.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\nexport class LookupField extends LookupFieldBase\n{\n\tstatic classdoc = \"Holds the value of a lookup field of a record (and related information)\";\n\n\t_validate(change)\n\t{\n\t\tlet v = change.value;\n\t\tif (v === null || v === \"\" || this.control.nonekey === 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\nexport class MultipleLookupField extends LookupFieldBase\n{\n\tstatic classdoc = \"Holds the value of a multiple lookup field of a record (and related information)\";\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.nonekey === 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\nexport class AppLookupFieldBase extends Field\n{\n\tstatic classdoc = \"Base type of AppLookupField and MultipleAppLookupField\";\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\tthis._lookupdata = 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.lookupdata.get(v);\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\n\nexport class AppLookupField extends AppLookupFieldBase\n{\n\tstatic classdoc = \"Holds the value of a applookup field of a record (and related information)\";\n\n\t_validate(change)\n\t{\n\t\tthis._find_record(change);\n\t}\n};\n\n\nexport class MultipleAppLookupField extends AppLookupFieldBase\n{\n\tstatic classdoc = \"Holds the value of a multiple applookup field of a record (and related information)\";\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.nonekey === 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\nexport class Control extends Base\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 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\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\", \"liveupdate\", \"tabindex\", \"required\", \"mode\", \"labelpos\", \"autoalign\", \"in_active_view\"]);\n\n\nexport class BoolControl extends Control\n{\n\tstatic classdoc = \"A LivingApps boolean field (type 'bool')\";\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\nexport class IntControl extends Control\n{\n\tstatic classdoc = \"A LivingApps integer field (type 'int')\";\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 PlaceholderControl extends Control\n{\n\tstatic classdoc = \"A LivingApps multiplelookup field (type 'multiplelookup/select')\";\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\nexport class NumberControl extends PlaceholderControl\n{\n\tstatic classdoc = \"A LivingApps number field (type 'number')\";\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;\n\n\nexport class StringControl extends PlaceholderControl\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\nexport class TextControl extends StringControl\n{\n\tstatic classdoc = \"A LivingApps text field (type 'string/text')\";\n};\n\nTextControl.prototype.subtype = \"text\";\nTextControl.prototype.fieldtype = StringField;\n\n\nexport class EmailControl extends StringControl\n{\n\tstatic classdoc = \"A LivingApps email field (type 'string/email')\";\n};\n\nEmailControl.prototype.subtype = \"email\";\nEmailControl.prototype.fieldtype = EmailField;\n\n\nexport class URLControl extends StringControl\n{\n\tstatic classdoc = \"A LivingApps URL field (type 'string/url')\";\n};\n\nURLControl.prototype.subtype = \"url\";\nURLControl.prototype.fieldtype = URLField;\n\n\nexport class TelControl extends StringControl\n{\n\tstatic classdoc = \"A LivingApps phone number field (type 'string/tel')\";\n};\n\nTelControl.prototype.subtype = \"tel\";\nTelControl.prototype.fieldtype = TelField;\n\n\nexport class TextAreaControl extends StringControl\n{\n\tstatic classdoc = \"A LivingApps textarea field (type 'string/textarea')\";\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\"]);\n\n\nexport class HTMLControl extends StringControl\n{\n\tstatic classdoc = \"A LivingApps HTML field (type 'string/html')\";\n};\n\nHTMLControl.prototype.subtype = \"html\";\nHTMLControl.prototype.fieldtype = HTMLField;\n\n\nexport class DateControl extends PlaceholderControl\n{\n\tstatic classdoc = \"A LivingApps date field (type 'date/date')\";\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(language)\n\t{\n\t\tlanguage = language || this.app.language;\n\n\t\tif (language === \"de\")\n\t\t\treturn \"%d.%m.%Y\";\n\t\telse\n\t\t\treturn \"%m/%d/%Y\";\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;\n\n\nexport class DatetimeMinuteControl extends DateControl\n{\n\tstatic classdoc = \"A LivingApps date field (type 'date/datetimeminute')\";\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\tformatstring(language)\n\t{\n\t\tlanguage = language || this.app.language;\n\n\t\tif (language === \"de\")\n\t\t\treturn \"%d.%m.%Y %H:%M\";\n\t\telse\n\t\t\treturn \"%m/%d/%Y %H:%M\";\n\t}\n};\n\nDatetimeMinuteControl.prototype.subtype = \"datetimeminute\";\nDatetimeMinuteControl.prototype.fieldtype = DatetimeMinuteField;\n\n\nexport class DatetimeSecondControl extends DateControl\n{\n\tstatic classdoc = \"A LivingApps date field (type 'date/datetimesecond')\";\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\tformatstring(language)\n\t{\n\t\tlanguage = language || this.app.language;\n\n\t\tif (language === \"de\")\n\t\t\treturn \"%d.%m.%Y %H:%M:%S\";\n\t\telse\n\t\t\treturn \"%m/%d/%Y %H:%M:%S\";\n\t}\n};\n\nDatetimeSecondControl.prototype.subtype = \"datetimesecond\";\nDatetimeSecondControl.prototype.fieldtype = DatetimeSecondField;\n\n\nexport class LookupControl extends Control\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 nonekey()\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 nonelabel()\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\nexport class LookupSelectControl extends LookupControl\n{\n\tstatic classdoc = \"A LivingApps lookup field (type 'lookup/select')\";\n\n};\n\nLookupSelectControl.prototype.subtype = \"select\";\n\n\nexport class LookupRadioControl extends LookupControl\n{\n\tstatic classdoc = \"A LivingApps lookup field (type 'lookup/radio')\";\n\n};\n\nLookupRadioControl.prototype.subtype = \"radio\";\n\n\nexport class LookupChoiceControl extends LookupControl\n{\n\tstatic classdoc = \"A LivingApps lookup field (type 'lookup/choice')\";\n\n};\n\nLookupChoiceControl.prototype.subtype = \"choice\";\n\n\nexport class AppLookupControl extends Control\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\nexport class AppLookupSelectControl extends AppLookupControl\n{\n\tstatic classdoc = \"A LivingApps applookup field (type 'applookup/select')\";\n\n};\n\nAppLookupSelectControl.prototype.subtype = \"select\";\n\n\nexport class AppLookupRadioControl extends AppLookupControl\n{\n\tstatic classdoc = \"A LivingApps applookup field (type 'applookup/radio')\";\n\n};\n\nAppLookupRadioControl.prototype.subtype = \"radio\";\n\n\nexport class AppLookupChoiceControl extends AppLookupControl\n{\n\tstatic classdoc = \"A LivingApps applookup field (type 'applookup/choice')\";\n\n};\n\nAppLookupChoiceControl.prototype.subtype = \"choice\";\n\n\nexport class MultipleLookupControl extends LookupControl\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.subtype = \"multiplelookup\";\nMultipleLookupControl.prototype.fieldtype = MultipleLookupField;\n\n\nexport class MultipleLookupSelectControl extends MultipleLookupControl\n{\n\tstatic classdoc = \"A LivingApps multiplelookup field (type 'multiplelookup/select')\";\n\n};\n\nMultipleLookupSelectControl.prototype.subtype = \"select\";\n\n\nexport class MultipleLookupCheckboxControl extends MultipleLookupControl\n{\n\tstatic classdoc = \"A LivingApps multiplelookup field (type 'multiplelookup/checkbox')\";\n\n};\n\nMultipleLookupCheckboxControl.prototype.subtype = \"checkbox\";\n\n\nexport class MultipleLookupChoiceControl extends MultipleLookupControl\n{\n\tstatic classdoc = \"A LivingApps multiplelookup field (type 'multiplelookup/choice')\";\n\n};\n\nMultipleLookupChoiceControl.prototype.subtype = \"choice\";\n\n\nexport class MultipleAppLookupControl extends AppLookupControl\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\nexport class MultipleAppLookupSelectControl extends MultipleAppLookupControl\n{\n\tstatic classdoc = \"A LivingApps multiple applookup field (type 'multipleapplookup/select')\";\n\n};\n\nMultipleAppLookupSelectControl.prototype.subtype = \"select\";\n\n\nexport class MultipleAppLookupCheckboxControl extends MultipleAppLookupControl\n{\n\tstatic classdoc = \"A LivingApps multiple applookup field (type 'multipleapplookup/checkbox')\";\n\n};\n\nMultipleAppLookupCheckboxControl.prototype.subtype = \"checkbox\";\n\n\nexport class MultipleAppLookupChoiceControl extends MultipleAppLookupControl\n{\n\tstatic classdoc = \"A LivingApps multiple applookup field (type 'multipleapplookup/choice')\";\n};\n\nMultipleAppLookupChoiceControl.prototype.subtype = \"choice\";\n\n\nexport class GeoControl extends Control\n{\n\tstatic classdoc = \"A LivingApps geo field (type 'geo')\";\n};\n\nGeoControl.prototype.type = \"geo\";\nGeoControl.prototype.fieldtype = GeoField;\n\n\nexport class FileControl extends Control\n{\n\tstatic classdoc = \"A LivingApps upload field (type 'file')\";\n};\n\nFileControl.prototype.type = \"file\";\nFileControl.prototype.fieldtype = FileField;\n\n\nexport class FileSignatureControl extends FileControl\n{\n\tstatic classdoc = \"A LivingApps signature image field (type 'file/signature')\";\n};\n\nFileSignatureControl.prototype.subtype = \"signature\";\nFileSignatureControl.prototype.fieldtype = FileSignatureField;\n\n\nexport class ButtonControl extends Control\n{\n};\n\nButtonControl.prototype.type = \"button\";\n\n\nexport class LookupItem extends Base\n{\n\tstatic classdoc = \"An option in a lookup control/field\";\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\nexport class ViewLookupItem extends Base\n{\n\tstatic classdoc = \"View specific information about a lookup item\";\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\nexport class LayoutControl extends Base\n{\n\tstatic classdoc = \"A decoration in an input form\";\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\nLayoutControl.prototype._ul4onattrs = [\"label\", \"identifier\", \"view\", \"top\", \"left\", \"width\", \"height\"];\nLayoutControl.prototype._ul4attrs = new Set([\"id\", \"label\", \"identifier\", \"view\", \"top\", \"left\", \"width\", \"height\"]);\n\n\nexport class HTMLLayoutControl extends LayoutControl\n{\n\tstatic classdoc = \"An HTML decoration in an input form\";\n};\n\nHTMLLayoutControl.prototype._ul4onattrs = [...LayoutControl.prototype._ul4onattrs, \"value\"];\nHTMLLayoutControl.prototype._ul4attrs = new Set([LayoutControl.prototype._ul4attrs, \"value\"]);\n\n\nexport class ImageLayoutControl extends LayoutControl\n{\n\tstatic classdoc = \"An image decoration in an input form\";\n};\n\nImageLayoutControl.prototype._ul4onattrs = [...LayoutControl.prototype._ul4onattrs, \"original\", \"scaled\"];\nImageLayoutControl.prototype._ul4attrs = new Set([LayoutControl.prototype._ul4attrs, \"original\", \"scaled\"]);\n\n\nexport class ViewControl extends Base\n{\n\tstatic classdoc = \"Contains view specific information aboutn a control\";\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\", \"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\", \"liveupdate\", \"default\", \"tabindex\", \"minlength\", \"maxlength\", \"required\", \"placeholder\", \"mode\", \"labelpos\", \"lookupnonekey\", \"lookupnonelabel\", \"label\", \"autoalign\", \"labelwidth\", \"lookupdata\", \"autoexpandable\"]);\n\n\nexport class User extends Base\n{\n\tstatic classdoc = \"A LivingApps user/account\";\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\", \"avatarsmall\", \"avatarlarge\", \"summary\", \"interests\", \"personalwebsite\", \"companywebsite\", \"company\", \"position\", \"department\", \"keyviews\"];\nUser.prototype._ul4attrs = new Set([\"id\", \"_id\", \"gender\", \"title\", \"firstname\", \"surname\", \"initials\", \"email\", \"streetname\", \"streetnumber\", \"zip\", \"city\", \"phone\", \"fax\", \"lang\", \"avatarsmall\", \"avatarlarge\", \"summary\", \"interests\", \"personalwebsite\", \"companywebsite\", \"company\", \"position\", \"department\", \"keyviews\"]);\n\n\nexport class File extends Base\n{\n\tstatic classdoc = \"An uploaded file\";\n\n\t[ul4.symbols.repr]()\n\t{\n\t\treturn \"<File id=\" + ul4._repr(this.id) + \" url=\" + ul4._repr(this.url) + \" filename=\" + ul4._repr(this.filename) + \">\";\n\t}\n};\n\nFile.prototype._ul4onattrs = [\"url\", \"filename\", \"mimetype\", \"width\", \"height\", \"internalid\", \"createdat\", \"size\"];\nFile.prototype._ul4attrs = new Set([\"id\", \"url\", \"filename\", \"mimetype\", \"width\", \"height\", \"size\", \"createdat\"]);\n\n\nexport class Geo extends Base\n{\n\tstatic classdoc = \"Geographical coordinates and location information\";\n\n\tconstructor(lat, long, info)\n\t{\n\t\tsuper(null);\n\t\tthis.lat = lat;\n\t\tthis.long = long;\n\t\tthis.info = info;\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 = [\"lat\", \"long\", \"info\"];\nGeo.prototype._ul4attrs = new Set([\"lat\", \"long\", \"info\"]);\n\n\nexport class Attachment extends Base\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\nexport class NoteAttachment extends Attachment\n{\n\tstatic classdoc = \"A note attachment of a record\";\n\n};\n\nNoteAttachment.prototype.type = \"noteattachment\";\nNoteAttachment.prototype._ul4onattrs = [...Attachment.prototype._ul4onattrs, \"value\"];\nNoteAttachment.prototype._ul4attrs = new Set([...Attachment.prototype._ul4onattrs, \"value\"]);\n\n\nexport class URLAttachment extends Attachment\n{\n\tstatic classdoc = \"A URL attachment of a record\";\n\n};\n\nURLAttachment.prototype.type = \"urlattachment\";\nURLAttachment.prototype._ul4onattrs = [...Attachment.prototype._ul4onattrs, \"value\"];\nURLAttachment.prototype._ul4attrs = new Set([...Attachment.prototype._ul4onattrs, \"value\"]);\n\n\nexport class FileAttachment extends Attachment\n{\n\tstatic classdoc = \"A file attachment of a record\";\n\n};\n\nFileAttachment.prototype.type = \"fileattachment\";\nFileAttachment.prototype._ul4onattrs = [...Attachment.prototype._ul4onattrs, \"value\"];\nFileAttachment.prototype._ul4attrs = new Set([...Attachment.prototype._ul4onattrs, \"value\"]);\n\n\nexport class ImageAttachment extends Attachment\n{\n\tstatic classdoc = \"An image attachment of a record\";\n\n};\n\nImageAttachment.prototype.type = \"imageattachment\";\nImageAttachment.prototype._ul4onattrs = [...Attachment.prototype._ul4onattrs, \"original\", \"thumb\", \"small\", \"medium\",\"large\"];\nImageAttachment.prototype._ul4attrs = new Set([...Attachment.prototype._ul4onattrs, \"original\", \"thumb\", \"small\", \"medium\", \"large\"]);\n\n\nexport class JSONAttachment extends Attachment\n{\n\tstatic classdoc = \"A JSON attachment of a record\";\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\nexport class Installation extends Base\n{\n\tstatic classdoc = \"The installation that created an app\";\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\nexport class Category extends Base\n{\n\tstatic classdoc = \"A navigation category\";\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\nexport class KeyView extends Base\n{\n\tstatic classdoc = \"Object granting access to a view template\";\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\nexport class AppParameter extends Base\n{\n\tstatic classdoc = \"A parameter of a LivingApps application\";\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\nAppParameter.prototype._ul4onattrs = [\"app\", \"identifier\", \"description\", \"value\"];\nAppParameter.prototype._ul4attrs = new Set([\"id\", \"app\", \"identifier\", \"description\", \"value\"]);\n\n\nlet classes = [\n\tGlobals,\n\tFlashMessage,\n\tApp,\n\tView,\n\tDataSourceData,\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\tViewControl,\n\tUser,\n\tFile,\n\tGeo,\n\tNoteAttachment,\n\tURLAttachment,\n\tFileAttachment,\n\tImageAttachment,\n\tJSONAttachment,\n\tInstallation,\n\tCategory,\n\tKeyView,\n\tAppParameter\n];\n\nfor (let constructor of classes)\n{\n\tul4.register(\"de.livinglogic.livingapi.\" + constructor.name.toLowerCase(), constructor);\n}\n"],"names":["Base","id","this","encoder","i","_ul4onattrs","length","dump","_dumpUL4ONAttr","name","decoder","iter","loadcontent","iteritem","next","done","_loadUL4ONAttr","value","_setDefaultUL4ONAttr","ul4","symbols","getattr","_ul4attrs","has","realvalue","bind","_ul4_name","_ul4_signature","_ul4_needsobject","_ul4_needscontext","AttributeError","repr","constructor","Proto","Handler","record","Globals","version","hostname","platform","user","lang","app","maxdbactions","maxtemplateruntime","flashmessages","handler","url","width","height","type","enlarge","gravity","quality","rotate","blur","sharpen","format","cache","filename","File","encodeURIComponent","result","rotatet","_repr","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","prototype","Set","FlashMessage","title","call","App","values","globals","save","active_view","Map","layout_controls","Record","_ismap","keys","identifier","fields","ArgumentError","_make_fields","_isobject","TypeError","_list","dicttype","items","startsWith","controls","substr","get","_active_view","view","views","ValueError","View","expose","insert","DataSourceData","setattr","createdat","createdby","updatedat","updatedby","updatecount","_sparsevalues","_values","_fields","children","attachments","errors","_sparsefielderrors","_sparsefieldlookupdata","_is_deleted","_is_new","defaults","lookupdata","control","field","fieldtype","set","_sparselookupdata","v","priority","is_empty","push","state","join","is_dirty","has_errors","entries","key","search","fieldsearch","_bool","update","Field","_label","_lookupdate","_value","_dirty","oldvalue","change","_validate","_ne","label","_islist","searchvalue","_type","minlength","maxlength","s","BoolField","required","msg_field_required","msg_bool_truerequired","msg_field_wrong_type","IntField","round","NumberField","StringField","msg_string_tooshort","msg_string_toolong","EmailField","test","msg_email_format","URLField","URL","exc","msg_url_format","protocol","TelField","msg_tel_format","TextAreaField","HTMLField","GeoField","Geo","FileField","FileSignatureField","DateFieldBase","Date","_convert","getTime","Number","isNaN","getYear","msg_date_format","DateField","date","Date_","getFullYear","getMonth","getDate","DatetimeMinuteField","setSeconds","setMilliseconds","DatetimeSecondField","LookupFieldBase","lookupitem","undefined","autoexpandable","search_lookupitem","msg_lookup_unknownkey","LookupItem","msg_lookup_wrongitem","LookupField","nonekey","_find_lookupitem","MultipleLookupField","islist","Object","toString","newvalue","singlechange","AppLookupFieldBase","_lookupdata","lookup_app","records","msg_applookup_unknownkey","msg_applookup_wrongrecord","AppLookupField","_find_record","MultipleAppLookupField","Control","subtype","view_control","_view_control","top","left","liveupdate","tabindex","mode","labelpos","labelwidth","autoalign","BoolControl","_logsearch","operator","IntControl","PlaceholderControl","placeholder","NumberControl","minvalue","maxvalue","StringControl","gender","firstname","surname","email","streetname","streetnumber","street","zip","phone","fax","company","city","summary","interests","personal_website","company_website","position","department","today","_user_placeholder","toLowerCase","indexOf","TextControl","EmailControl","URLControl","TelControl","TextAreaControl","encrypted","HTMLControl","DateControl","language","_format","formatstring","DatetimeMinuteControl","now","DatetimeSecondControl","LookupControl","lookupnonekey","lookupnonelabel","LookupSelectControl","LookupRadioControl","LookupChoiceControl","AppLookupControl","AppLookupSelectControl","AppLookupRadioControl","AppLookupChoiceControl","MultipleLookupControl","defaultValue","MultipleLookupSelectControl","MultipleLookupCheckboxControl","MultipleLookupChoiceControl","MultipleAppLookupControl","MultipleAppLookupSelectControl","MultipleAppLookupCheckboxControl","MultipleAppLookupChoiceControl","GeoControl","FileControl","FileSignatureControl","ButtonControl","view_lookupitem","_view_lookupitem","visible","ViewLookupItem","LayoutControl","HTMLLayoutControl","ImageLayoutControl","ViewControl","_mode","User","long","info","Attachment","NoteAttachment","URLAttachment","FileAttachment","ImageAttachment","JSONAttachment","_asjson","_fromjson","Installation","Category","category","splice","parent","KeyView","AppParameter","register"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livinglogic/livingapi",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.1",
|
|
4
4
|
"description": "Javascript version of the LivingAPI classes of LivingApps",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -18,19 +18,19 @@
|
|
|
18
18
|
"module": "dist/esm-node/livingapi.js",
|
|
19
19
|
"browser": "dist/umd/livingapi.js",
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@livinglogic/ul4": "
|
|
21
|
+
"@livinglogic/ul4": "~1.10.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@babel/core": "^7.
|
|
25
|
-
"@babel/preset-env": "^7.
|
|
26
|
-
"rollup": "^
|
|
27
|
-
"rollup-plugin-babel": "^4.
|
|
24
|
+
"@babel/core": "^7.14.6",
|
|
25
|
+
"@babel/preset-env": "^7.14.7",
|
|
26
|
+
"rollup": "^2.52.7",
|
|
27
|
+
"rollup-plugin-babel": "^4.4.0",
|
|
28
28
|
"rollup-plugin-commonjs": "^9.3.4",
|
|
29
29
|
"rollup-plugin-json": "^4.0.0",
|
|
30
|
-
"rollup-plugin-node-resolve": "^4.2.
|
|
31
|
-
"rollup-plugin-sourcemaps": "^0.
|
|
32
|
-
"rollup-plugin-terser": "^
|
|
33
|
-
"rollup-plugin-uglify": "^6.0.
|
|
34
|
-
"source-map-support": "^0.5.
|
|
30
|
+
"rollup-plugin-node-resolve": "^4.2.4",
|
|
31
|
+
"rollup-plugin-sourcemaps": "^0.6.3",
|
|
32
|
+
"rollup-plugin-terser": "^7.0.2",
|
|
33
|
+
"rollup-plugin-uglify": "^6.0.4",
|
|
34
|
+
"source-map-support": "^0.5.19"
|
|
35
35
|
}
|
|
36
36
|
}
|