const WikibaseDialog = {}; WikibaseDialog.launch = function () { const frame = $(DOM.loadHTML("wikidata", "scripts/dialogs/wikibase-dialog.html")); const elmts = this.elmts = DOM.bind(frame); elmts.dialogHeader.text($.i18n("wikibase-management/dialog-header")); elmts.explainSelectWikibase.text($.i18n("wikibase-management/explain-select-wikibase")); elmts.currentSelectedWikibase.html($.i18n("wikibase-management/current-selected-wikibase", WikibaseManager.getSelectedWikibaseMainPage(), WikibaseManager.getSelectedWikibaseName())); elmts.closeButton.text($.i18n("wikibase-management/close")); elmts.addButton.text($.i18n("wikibase-management/add-wikibase")); WikibaseDialog.populateDialog(); let level = DialogSystem.showDialog(frame); elmts.closeButton.click(function () { DialogSystem.dismissUntil(level - 1); }); elmts.addButton.click(function () { WikibaseDialog.addWikibaseManifest(); }); }; WikibaseDialog.populateDialog = function () { let wikibases = WikibaseManager.getAllWikibases(); WikibaseDialog.elmts.wikibaseList.empty(); for (let wikibaseName in wikibases) { if (wikibases.hasOwnProperty(wikibaseName)) { let item = ""; item += "" + wikibaseName + ""; if (wikibaseName.toLowerCase() === WikibaseManager.getSelectedWikibaseName().toLowerCase()) { item += ""; } else { item += ""; } item += ""; WikibaseDialog.elmts.wikibaseList.append(item); } } }; WikibaseDialog.selectWikibase = function (wikibaseName) { if (wikibaseName !== WikibaseManager.getSelectedWikibaseName()) { WikibaseManager.selectWikibase(wikibaseName); WikibaseDialog.elmts.currentSelectedWikibase.html($.i18n("wikibase-management/current-selected-wikibase", WikibaseManager.getSelectedWikibaseMainPage(), WikibaseManager.getSelectedWikibaseName())); WikibaseDialog.populateDialog(); SchemaAlignment.onWikibaseChange(); } }; WikibaseDialog.removeWikibase = function (e, wikibaseName) { e.stopPropagation(); // must stop, otherwise the removed Wikibase will be selected WikibaseManager.removeWikibase(wikibaseName); WikibaseDialog.populateDialog(); }; WikibaseDialog.addWikibaseManifest = function () { const frame = $(DOM.loadHTML("wikidata", "scripts/dialogs/add-wikibase-dialog.html")); const elmts = DOM.bind(frame); elmts.dialogHeader.text($.i18n("wikibase-addition/dialog-header")); elmts.explainAddManifest.text($.i18n("wikibase-addition/explain-add-manifest")); elmts.explainAddManifestViaURL.text($.i18n("wikibase-addition/explain-add-manifest-via-url")); elmts.explainPasteManifest.html($.i18n("wikibase-addition/explain-paste-manifest")); elmts.cancelButton.text($.i18n("wikibase-addition/cancel")); elmts.addButton.text($.i18n("wikibase-addition/add-wikibase")); elmts.invalidManifest.hide(); elmts.invalidManifest.text($.i18n("wikibase-addition/invalid-manifest")); let level = DialogSystem.showDialog(frame); elmts.cancelButton.click(function () { DialogSystem.dismissUntil(level - 1); }); elmts.addButton.click(function () { let addManifest = function (manifest) { if (!WikibaseDialog.validateManifest(manifest)) { return; } WikibaseManager.addWikibase(manifest); let lang = $.i18n('core-recon/wd-recon-lang'); let reconEndpoint = manifest.reconciliation.endpoint.replace("${lang}", lang); ReconciliationManager.getOrRegisterServiceFromUrl(reconEndpoint, function () {}, true); DialogSystem.dismissUntil(level - 1); WikibaseDialog.populateDialog(); }; let manifestURL = $.trim(elmts.manifestURLInput.val()); if (manifestURL.length) { WikibaseManager.fetchManifestFromURL(manifestURL, addManifest); } else { try { let manifest = JSON.parse(elmts.manifestTextarea.val()); addManifest(manifest); } catch (e) { console.error(e); elmts.invalidManifest.show(); } } }); }; WikibaseDialog.validateManifest = function (manifest) { if (!WikibaseDialog.ajv) { WikibaseDialog.ajv = new Ajv(); WikibaseDialog.validateWikibaseManifestV1 = WikibaseDialog.ajv.compile(WikibaseManifestSchemaV1); } if (WikibaseDialog.validateWikibaseManifestV1(manifest)) { return true; } else { let errMsg = WikibaseDialog.ajv.errorsText(WikibaseDialog.validateWikibaseManifestV1.errors, { dataVar: "manifest" }); alert(errMsg); return false; } };