Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
//<nowiki> /** vCard-Assistant * Source code: https://gitlab.com/muekoeff/vcard-assistant * Please report issues and requests preferably at https://gitlab.com/muekoeff/vcard-assistant/-/issues */ "use strict"; mw.VcardAssistantConfig = {}; mw.VcardAssistantConfig.config = { config: { disableeditlinksifpresent: [ "#Orte", "#Weitere_Ziele", "#Städte", "#Regionen", "#Inseln", "#print-districts" ], editlinkcontainer: "span.listing-metadata-items", helpurl: "https://de.wikivoyage.org/wiki/Benutzer:Nw520/vCardAssistant.js", outdatedwarning: true, submitLegal: 'Mit dem Speichern von Änderungen erklärst du dich mit den <a class="external" target="_blank" rel="noopener" href="//wikimediafoundation.org/wiki/Terms_of_Use/de">Nutzungsbedingungen</a> einverstanden und lizenzierst deine Bearbeitung unwiderruflich unter der Lizenz <a class="external" target="_blank" rel="noopener" href="https://creativecommons.org/licenses/by-sa/3.0/deed.de"><i>Creative-Commons</i> „Namensnennung – Weitergabe unter gleichen Bedingungen 3.0“</a> und der <a class="external" target="_blank" rel="noopener" href="https://de.wikipedia.org/wiki/Wikipedia:GNU_Free_Documentation_License">GFDL</a>. Du stimmst einer Autorennennung mindestens durch URL oder Verweis auf den Artikel zu. Wenn du nicht möchtest, dass dein Text weiterbearbeitet und weiterverbreitet wird, dann veröffentliche die Änderungen nicht.', templateToType: { vCard: "" }, title: "vCard-Assistant", togglevalue_off: "n", togglevalue_on: "y" }, special_parameters: { lastupdate: "lastedit", name: "name", wikidata: "wikidata" }, parameters: { order: [ "name", "name-extra", "name-local", "name-latin", "alt", "wikidata", "auto", "type", "subtype", "comment", "address", "address-local", "directions", "directions-local", "lat", "long", "zoom", "url", "email", "phone", "fax", "tollfree", "mobile", "image", "commonscat", "facebook", "instagram", "twitter", "youtube", "flickr", "skype", "hours", "checkin", "checkout", "payment", "price", "before", "description", "lastedit", "show", "group", "map-group" ], categories: [ { category: { id: "basic", label: "Grundlegende Informationen" }, params: { name: { label: "Name", description: "Genaue und vorzugsweise offizielle Bezeichnung der Einrichtung.", type: "string", required: true, neverOmit: true }, "name-extra": { label: "Namensergänzung", description: "Namensergänzung, die nicht Namensbestandteil ist. Dies können z.B. auch Symbolbilder sein.", type: "string", hidden: true }, "name-local": { label: "Name in Landessprache", description: "Genaue Bezeichnung der Einrichtung in der Landessprache. Zusätzlich zum Namen.", type: "string", hidden: true, wikidata: "P1705" }, "name-latin": { label: "Name in Umschrift", description: "Genaue Bezeichnung der Einrichtung in der Umschrift der Landessprache.", type: "string", hidden: true }, alt: { label: "Alternativname", description: "Alternative Bezeichnung der Einrichtung.", type: "string" }, comment: { label: "Anmerkung", description: "Anmerkung zum Namen oder zur Einrichtung, die nicht Namensbestandteil ist.", type: "string", hidden: true }, wikidata: { label: "Wikidata-Datenobjekt", description: "Kennung des entsprechenden Wikidata-Datenobjekts.", type: "wikidata-item-id", example: "Q82425", neverOmit: true }, auto: { label: "Automatischer Datenbezug von Wikidata", description: 'Aktiviert den automatischen Datenbezug aus Wikidata, soweit kein Wert für einen Parameter angegeben wird. Unterstützte Parameter sind im vCard-Assistenten mit einem entsprechenden Symbol gekennzeichnet. Durch Eingabe von "n" bei diesen Parametern kann ein automatischer Datenbezug von Wikidata für dieses Feld unterbunden werden.', type: "toggle", format: [ { regexp: "^(j|ja|y|yes|n|no|nein)$", message: 'Bitte gib entweder "y" für ja, oder "n" für nein ein.' } ], triggers: [ { conditions: [ { sender: "wikidata", value: "^$" } ], action: { value: 0 } }, { conditions: [ { sender: "wikidata", value: "^$" } ], action: { visible: false } }, { conditions: [ { sender: "wikidata", value: ".+" } ], action: { visible: true } }, { conditions: [ { sender: "wikidata", value: "^$" } ], action: { excluded: true } }, { conditions: [ { sender: "$this", value: "^n$" } ], action: { excluded: true } }, { conditions: [ { sender: "wikidata", value: ".+" }, { sender: "$this", value: "^y$" } ], action: { excluded: false } } ] }, type: { label: "Typen", description: "Die Typen sind von links nach rechts hierarchisch absteigend geordnet. Der erste Typ ist die Hauptkategorie.", type: "enum", enum: "type", required: true, multiple: true, neverOmit: true }, subtype: { label: "Features/Untertypen", description: "Weitere Spezifikation der Einrichtung. Die Reihenfolge der Features ist irrelevant.", type: "enum", enum: "subtype", multiple: true }, description: { label: "Beschreibung", type: "string", multiline: 5 }, before: { label: "Vorsatz", description: "Beschreibung der Einrichtung, welche vor dem Namen angezeigt werden soll.", type: "string", hidden: true } } }, { category: { id: "location", label: "Ort und Lage" }, params: { address: { label: "Anschrift", type: "string", wikidata: "P6375" }, "address-local": { label: "Anschrift in Landessprache", description: "Anschrift der Einrichtung in der Landessprache. Zusätzlich zur Anschrift.", type: "string", hidden: true }, directions: { label: "Lage/Beschreibung zur Anfahrt und zum Auffinden", type: "string" }, "directions-local": { label: "Lage in Landessprache", description: "Angaben zur Lage der Einrichtung in der Landessprache. Zusätzlich zur Lage.", type: "string", hidden: true }, lat: { label: "Geografische Breite", description: "Geografische Breite der Position der Einrichtung.", type: "string", example: "52.516272", format: [ { regexp: "^-?[0-9]+(.[0-9]+)?$" } ], wikidata: { property: "P625", value: "latitude" }, neverOmit: true }, long: { label: "Geografische Länge", description: "Geografische Länge der Position der Einrichtung.", type: "string", example: "13.377722", format: [ { regexp: "^-?[0-9]+(.[0-9]+)?$" } ], preview: { type: "coordinates", lat: "lat", long: "$this" }, wikidata: { property: "P625", value: "longitude" }, neverOmit: true }, zoom: { label: "Zoom-Level", default: 17, description: "Zoom-Level der darzustellen Karte zwischen 0 und 19. Standard ist 17. Eine Angabe ist normalerweise nicht notwendig.", type: "number", hidden: true, max: 20, min: 0 } } }, { category: { id: "contact", label: "Kontaktinformationen" }, params: { url: { label: "URL", type: "url", example: "https://example.com/", wikidata: "P856" }, email: { label: "E-Mail", type: "string", example: "[email protected]", wikidata: { property: "P968", filter: { regexp: "mailto:(.+)", group: 1 } } }, phone: { label: "Telefon", type: "phone", example: "+55 555 555-5555", wikidata: "P1329" }, fax: { label: "Fax", type: "phone", example: "+55 555 555-5555", hidden: true, wikidata: "P2900" }, tollfree: { label: "Gebührenfreie Telefonnummern", type: "string", example: "+49 800 100-1000", hidden: true }, mobile: { label: "Mobil-Telefonnummer", type: "string", example: "+55 123 555-5555", hidden: true } } }, { category: { id: "networks", label: "Netzwerke" }, params: { commonscat: { label: "Commons-Kategorie", description: "Die Commons-Kategorie mit Medien zur Einrichtung sollte nur angegeben werden, wenn es keinen Wikidata-Eintrag gibt.", type: "commons-category", hidden: true, wikidata: "P373" }, facebook: { label: "Facebook", type: "string", wikidata: "P2013", preview: { type: "url", url: [ { conditions: [ { sender: "$this", value: "^http(s)?:" } ], url: "{parameter}" }, { url: "https://facebook.com/{parameter}" } ] } }, flickr: { label: "Flickr", type: "string", hidden: true, wikidata: "P3267", preview: { type: "url", url: [ { conditions: [ { sender: "$this", value: "^http(s)?:" } ], url: "{parameter}" }, { url: "https://flickr.com/photos/{parameter}" } ] } }, instagram: { label: "Instagram", type: "string", wikidata: "P2003", preview: { type: "url", url: [ { conditions: [ { sender: "$this", value: "^http(s)?:" } ], url: "{parameter}" }, { url: "https://instagram.com/{parameter}" } ] } }, twitter: { label: "Twitter", type: "string", wikidata: "P2002", preview: { type: "url", url: [ { conditions: [ { sender: "$this", value: "^http(s)?:" } ], url: "{parameter}" }, { url: "https://twitter.com/{parameter}" } ] } }, youtube: { label: "YouTube", type: "string", hidden: true, wikidata: "P2397", preview: { type: "url", url: [ { conditions: [ { sender: "$this", value: "^http(s)?:" } ], url: "{parameter}" }, { url: "https://youtube.com/channel/{parameter}" } ] } }, skype: { label: "Skype", type: "string", hidden: true, wikidata: "P2893" } } }, { category: { id: "details", label: "Details" }, params: { hours: { label: "Öffnungszeiten", type: "string", example: "Mo-Fr 9-18 Uhr" }, price: { label: "Preise", description: "Eintritts- oder Übernachtungspreise der Einrichtung.", type: "string" }, payment: { label: "Zahlungsarten", description: "Von der Einrichtung akzeptierte Zahlungsarten.", type: "string", example: "Mastercard, Visa, Amex" }, checkin: { label: "Check-in", description: "Frühester Check-in der Einrichtung.", type: "string", hidden: true }, checkout: { label: "Check-out", description: "Spätester Check-out der Einrichtung.", type: "string", hidden: true }, image: { label: "Bild zum POI", type: "commons-file", wikidata: "P18" } } }, { category: { id: "advanced", label: "Erweitert" }, params: { lastedit: { label: "Letzte Aktualisierung", description: "Datum der letzten Aktualisierung in der Form jjjj-mm-tt.", type: "lastedit" }, show: { label: "Anzeigemodus", description: "Legt fest, ob POIs und Koordinaten angezeigt werden sollen.", type: "enum", enum: [ { data: "all", label: "POI und Koordinaten" }, { data: "poi", label: "POI (Standard)" }, { data: "coordinates", label: "Koordinaten" }, { data: "none", label: "keine Koordinate" }, { data: "subtype", label: "Merkmale anzeigen" }, { data: "nosubtye", label: "Merkmale nicht anzeigen" }, { data: "inline", label: "hängender Einzug" }, { data: "indent", label: "innerhalb der Zeile" } ], hidden: true, multiple: true }, group: { label: "POI-Gruppe", description: "Wert überschreibt die automatische ermittelte Gruppenzugehörigkeit z. B. mit buy, do, drink, eat, go, see oder sleep", type: "enum", enum: "group", hidden: true }, "map-group": { label: "Kartengruppe", description: "Die Angabe wird nur gebraucht, wenn Marker auf unterschiedliche Karten verteilt werden sollen.", type: "string", hidden: true } } } ] } }; "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) { return typeof obj; } : function(obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _wrapRegExp() { _wrapRegExp = function _wrapRegExp(re, groups) { return new BabelRegExp(re, void 0, groups); }; var _super = RegExp.prototype, _groups = new WeakMap(); function BabelRegExp(re, flags, groups) { var _this = new RegExp(re, flags); return _groups.set(_this, groups || _groups.get(re)), _setPrototypeOf(_this, BabelRegExp.prototype); } function buildGroups(result, re) { var g = _groups.get(re); return Object.keys(g).reduce(function(groups, name) { return groups[name] = result[g[name]], groups; }, Object.create(null)); } return _inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function(str) { var result = _super.exec.call(this, str); return result && (result.groups = buildGroups(result, this)), result; }, BabelRegExp.prototype[Symbol.replace] = function(str, substitution) { if ("string" == typeof substitution) { var groups = _groups.get(this); return _super[Symbol.replace].call(this, str, substitution.replace(/\$<([^>]+)>/g, function(_, name) { return "$" + groups[name]; })); } if ("function" == typeof substitution) { var _this = this; return _super[Symbol.replace].call(this, str, function() { var args = arguments; return "object" != _typeof(args[args.length - 1]) && (args = [].slice.call(args)).push(buildGroups(args, _this)), substitution.apply(this, args); }); } return _super[Symbol.replace].call(this, str, substitution); }, _wrapRegExp.apply(this, arguments); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _regeneratorRuntime() { "use strict"; _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return generator._invoke = function(innerFn, self, context) { var state = "suspendedStart"; return function(method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg; ;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg; else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; }(innerFn, self, context), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function() { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { [ "next", "throw", "return" ].forEach(function(method) { define(prototype, method, function(arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function(value) { invoke("next", value, resolve, reject); }, function(err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function(unwrapped) { result.value = unwrapped, resolve(result); }, function(error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; this._invoke = function(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function(resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [ { tryLoc: "root" } ], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (;++i < iterable.length; ) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function(genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function(genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function(arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function() { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function(result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function() { return this; }), define(Gp, "toString", function() { return "[object Generator]"; }), exports.keys = function(object) { var keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (;keys.length; ) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, catch: function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function() { var self = this, args = arguments; return new Promise(function(resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } mw.VcardAssistantConfig.Adaptations = function() { function _class() { _classCallCheck(this, _class); } _createClass(_class, [ { key: "queryEnum", value: function() { var _queryEnum = _asyncToGenerator(_regeneratorRuntime().mark(function _callee(key) { var groups, _yield$this$getSubtyp, groupMeanings, subtypes, sortedSubtypeNames, outList, lastGroup, _iterator, _step, subtypeName, subtype, data, _yield$Promise$all, _yield$Promise$all2, types, _groups, formatSubtype; return _regeneratorRuntime().wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: formatSubtype = function _formatSubtype(subtypeName) { return subtypeName.replace(/\[(?:[^[\]]*)\|([^[\]]*)\]/gi, "$1").replace(/\[([^[\]]*)\]/gi, ""); }; _context.t0 = key; _context.next = _context.t0 === "group" ? 4 : _context.t0 === "subtype" ? 8 : _context.t0 === "type" ? 19 : 26; break; case 4: _context.next = 6; return this.getGroups(); case 6: groups = _context.sent; return _context.abrupt("return", Object.keys(groups).map(function(groupName) { var group = groups[groupName]; var data = { color: group.color, data: groupName, label: group.label || group.group }; return data; })); case 8: _context.next = 10; return this.getSubtypes(); case 10: _yield$this$getSubtyp = _context.sent; groupMeanings = _yield$this$getSubtyp.groupMeanings; subtypes = _yield$this$getSubtyp.subtypes; sortedSubtypeNames = Object.keys(subtypes).sort(function(a, b) { var left = subtypes[a]; var right = subtypes[b]; return left.groupNumber - right.groupNumber !== 0 ? left.groupNumber - right.groupNumber : left.label.localeCompare(right.label); }); outList = []; lastGroup = -1; _iterator = _createForOfIteratorHelper(sortedSubtypeNames); try { for (_iterator.s(); !(_step = _iterator.n()).done; ) { subtypeName = _step.value; subtype = subtypes[subtypeName]; if (lastGroup !== subtype.groupNumber) { outList.push({ optgroup: groupMeanings[subtype.groupNumber] || subtype.groupNumber }); lastGroup = subtype.groupNumber; } data = { data: subtypeName, label: subtype.label !== null ? formatSubtype(subtype.label) : subtypeName }; outList.push(data); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } return _context.abrupt("return", outList); case 19: _context.next = 21; return Promise.all([ this.getTypes(), this.getGroups() ]); case 21: _yield$Promise$all = _context.sent; _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2); types = _yield$Promise$all2[0]; _groups = _yield$Promise$all2[1]; return _context.abrupt("return", Object.keys(types).sort(function(a, b) { return types[a].label.localeCompare(types[b].label); }).map(function(typeName) { var _groups$type$group$co, _type$label; var type = types[typeName]; var data = { color: (_groups$type$group$co = _groups[type.group].color) !== null && _groups$type$group$co !== void 0 ? _groups$type$group$co : null, data: typeName, label: (_type$label = type.label) !== null && _type$label !== void 0 ? _type$label : typeName }; return data; })); case 26: throw new Error("Illegal key"); case 27: case "end": return _context.stop(); } } }, _callee, this); })); function queryEnum(_x) { return _queryEnum.apply(this, arguments); } return queryEnum; }() }, { key: "getEditButton", value: function getEditButton(sectionIndex, vcardIndex, clickCallback) { var $editButton = $("<a href=\"javascript:void('editvcard-".concat(sectionIndex, "-").concat(vcardIndex, '\')" title="Diese vCard bearbeiten">Bearbeiten</a>')).on("click", clickCallback); $editButton = $("<span>").append($editButton); $editButton = $("<span>").addClass("listing-metadata-item").addClass("listing-edit-button").addClass("noprint").append($editButton); return $editButton[0]; } }, { key: "getGroups", value: function() { var _getGroups = _asyncToGenerator(_regeneratorRuntime().mark(function _callee2() { var e, lineRegexp, match, jsonLines, parameterName, definition; return _regeneratorRuntime().wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return $.ajax({ data: { title: "Modul:Marker utilities/Groups", action: "raw", ctype: "text/plain" }, method: "GET", url: mw.util.wikiScript("") }); case 2: e = _context2.sent; lineRegexp = /[ \t]+(([a-zA-Z0-9 _]+?)|'([a-zA-Z0-9 _]+)'|"([a-zA-Z0-9 _]+)"|\['([a-zA-Z0-9 _]+)'\]|\["([a-zA-Z0-9 _]+)"\]) *= *{(.+?)}/g; jsonLines = []; do { match = lineRegexp.exec(e); if (match) { parameterName = match[2] || match[3] || match[4] || match[5] || match[6]; definition = match[7]; definition = definition.replace(/(^|,) ([^ ]+) = /g, '$1"$2":'); jsonLines.push('"'.concat(parameterName.replace(/_/g, " "), '": {').concat(definition, "}")); } } while (match); return _context2.abrupt("return", JSON.parse("{".concat(jsonLines.join(","), "}"))); case 7: case "end": return _context2.stop(); } } }, _callee2); })); function getGroups() { return _getGroups.apply(this, arguments); } return getGroups; }() }, { key: "getOutdatedThreshold", value: function getOutdatedThreshold(prefill) { return 2 * 365 * 24 * 60; } }, { key: "getSubtypes", value: function() { var _getSubtypes = _asyncToGenerator(_regeneratorRuntime().mark(function _callee3() { var e, lines, declarationRegex, groupRegex, labelRegex, subtypes, _iterator2, _step2, _line, declarationEval, _declarationEval$grou, name, body, groupEval, group, labelEval, label, meaningBodyRegex, meaningDeclarationRegex, groupNumberMeanings, meaningBodyEval, _iterator3, _step3, line, meaningDeclarationEval, _meaningDeclarationEv; return _regeneratorRuntime().wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.next = 2; return $.ajax({ data: { title: "Modul:VCard/Subtypes", action: "raw", ctype: "text/plain" }, method: "GET", url: mw.util.wikiScript("") }); case 2: e = _context3.sent; lines = e.split("\n"); declarationRegex = _wrapRegExp(/(?:\["([^"]+)"\]|([\w]+)) *= *\{([^\n]+)\}/, { nameBrackted: 1, nameNonBracketed: 2, body: 3 }); groupRegex = _wrapRegExp(/g[\s\t]*=[\s\t]*(\d+)/, { group: 1 }); labelRegex = _wrapRegExp(/n[\s\t]*=[\s\t]*"([^"]+)"/, { label: 1 }); subtypes = {}; _iterator2 = _createForOfIteratorHelper(lines); try { for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) { _line = _step2.value; declarationEval = declarationRegex.exec(_line); if (declarationEval) { name = (_declarationEval$grou = declarationEval.groups.nameBracketed) !== null && _declarationEval$grou !== void 0 ? _declarationEval$grou : declarationEval.groups.nameNonBracketed; body = declarationEval.groups.body; groupEval = groupRegex.exec(body); group = groupEval ? groupEval.groups.group : null; labelEval = labelRegex.exec(body); label = labelEval ? labelEval.groups.label : null; subtypes[name] = { groupNumber: parseInt(group), label: label }; } } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } meaningBodyRegex = _wrapRegExp(/[\s\S]*[\t ]g = \{([^}]+)\}/gm, { body: 1 }); meaningDeclarationRegex = _wrapRegExp(/(?:\["([^"]+)"\]|([\w]+))[\s\t]*=[\s\t]*"([^"]+)"/, { nameBracketed: 1, nameNonBracketed: 2, label: 3 }); groupNumberMeanings = {}; meaningBodyEval = meaningBodyRegex.exec(e); if (meaningBodyEval) { _iterator3 = _createForOfIteratorHelper(meaningBodyEval.groups.body.split("\n")); try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) { line = _step3.value; meaningDeclarationEval = meaningDeclarationRegex.exec(line); if (meaningDeclarationEval) { groupNumberMeanings[(_meaningDeclarationEv = meaningDeclarationEval.groups.nameBracketed) !== null && _meaningDeclarationEv !== void 0 ? _meaningDeclarationEv : meaningDeclarationEval.groups.nameNonBracketed] = meaningDeclarationEval.groups.label; } } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } } return _context3.abrupt("return", { groupMeanings: groupNumberMeanings, subtypes: subtypes }); case 16: case "end": return _context3.stop(); } } }, _callee3); })); function getSubtypes() { return _getSubtypes.apply(this, arguments); } return getSubtypes; }() }, { key: "getTypes", value: function() { var _getTypes = _asyncToGenerator(_regeneratorRuntime().mark(function _callee4() { var e, lines, declarationRegex, groupRegex, labelRegex, groups, _iterator4, _step4, line, declarationEval, _declarationEval$grou2, name, body, groupEval, group, labelEval, label; return _regeneratorRuntime().wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: _context4.next = 2; return $.ajax({ data: { title: "Modul:Marker utilities/Types", action: "raw", ctype: "text/plain" }, method: "GET", url: mw.util.wikiScript("") }); case 2: e = _context4.sent; lines = e.split("\n"); declarationRegex = _wrapRegExp(/(?:\["([^"]+)"\]|([\w]+))[\s\t]*=[\s\t]*\{([^\n]+)\}/, { nameBracketed: 1, nameNonBracketed: 2, body: 3 }); groupRegex = _wrapRegExp(/group[\s\t]*=[\s\t]*"([^"]+)"/, { group: 1 }); labelRegex = _wrapRegExp(/label[\s\t]*=[\s\t]*"([^"]+)"/, { label: 1 }); groups = {}; _iterator4 = _createForOfIteratorHelper(lines); try { for (_iterator4.s(); !(_step4 = _iterator4.n()).done; ) { line = _step4.value; declarationEval = declarationRegex.exec(line); if (declarationEval) { name = (_declarationEval$grou2 = declarationEval.groups.nameBracketed) !== null && _declarationEval$grou2 !== void 0 ? _declarationEval$grou2 : declarationEval.groups.nameNonBracketed; body = declarationEval.groups.body; groupEval = groupRegex.exec(body); group = groupEval ? groupEval.groups.group : null; labelEval = labelRegex.exec(body); label = labelEval ? labelEval.groups.label : null; if (group !== null && label !== null) { groups[name] = { group: group, label: label }; } } } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } return _context4.abrupt("return", groups); case 11: case "end": return _context4.stop(); } } }, _callee4); })); function getTypes() { return _getTypes.apply(this, arguments); } return getTypes; }() }, { key: "parseTimestamp", value: function parseTimestamp(parameterName, timestamp) { return new Date(timestamp); } } ]); return _class; }(); "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj) { return typeof obj; } : function(obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _regeneratorRuntime() { "use strict"; _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return generator._invoke = function(innerFn, self, context) { var state = "suspendedStart"; return function(method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg; ;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg; else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; }(innerFn, self, context), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function() { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { [ "next", "throw", "return" ].forEach(function(method) { define(prototype, method, function(arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function(value) { invoke("next", value, resolve, reject); }, function(err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function(unwrapped) { result.value = unwrapped, resolve(result); }, function(error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; this._invoke = function(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function(resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [ { tryLoc: "root" } ], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (;++i < iterable.length; ) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function(genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function(genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function(arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function() { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function(result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function() {