MediaWiki:Gadget-templating.js: Difference between revisions
Appearance
No edit summary |
No edit summary |
||
| Line 196: | Line 196: | ||
function pendingStatement(snak, prop){ | function pendingStatement(snak, prop){ | ||
let selector = snak._getPropertySelector(); | let selector = snak._getPropertySelector(); | ||
selector.element.on('entityselectorselected', (event, entityId) => { | selector.element.on('entityselectorselected', (event, entityId) => { | ||
$(snak._variation).on("afterdraw", function() { | $(snak._variation).on("afterdraw", function() { | ||
Revision as of 22:49, 14 March 2025
console.log('test');
WbTemplates = {
"person": {
"prefilledClaims": [{
"property": {id: "P1", label: "instance of", datatype: "wikibase-item"},
"value": {
"mainVal": {id: "Q78", datatype: "wikibase-item"}
}
}],
"userDefinedClaims": [
{
"property": {id: "P162", label: "has authorized access point for person [a/datatype] (RDA:P50411)"},
datatype: "string"
},
{
"property": {id: "P1087", label: "has surname [a/datatype] (RDA:P50291)"},
datatype: "string"
},
{
"property": {id: "P579", label: "has given name [a/datatype] (RDA:P50292)"},
datatype: "string"
},
{
"property": {id: "P1105", label: "has term of rank or honour or office [a/datatype] (RDA:P50110)"},
datatype: "string"
},
{
"property": {id: "P1893", label: "has place of birth [a/object] (RDA:P50119)"},
datatype: "wikibase-item"
},
{
"property": {id: "P2251", label: "has profession or occupation [a/object] (RDA:P50104)"},
datatype: "wikibase-item"
},
{
"property": {id: "P2250", label: "has language of person [a/object] (RDA:P50102)"},
datatype: "wikibase-item"
},
{
"property": {id: "P1123", label: "has variant access point for person [a/datatype] (RDA:P50412)"},
datatype: "string"
},
{
"property": {id: "P2007", label: "has related corporate body of person [a/object] (RDA:P50318)"},
datatype: "wikibase-item"
},
{
"property": {id: "P756", label: "has note on person [a/datatype] (RDA:P50395)"},
datatype: "string"
},
],
},
"corporate": {
"prefilledClaims": [
{
"property": {id: "P1", label: "instance of", datatype: "wikibase-item"},
"value": {
"mainVal": {id: "Q72", datatype: "wikibase-item"}
}
}
],
"userDefinedClaims": [
{
"property": {id: "P160", label: "has authorized access point for corporate body [a/datatype] (RDA:P50407)"},
datatype: "string"
},
{
"property": {id: "P1121", label: "has variant access point for corporate body [a/datatype] (RDA:P50408)"},
datatype: "string"
},
{
"property": {id: "P10814", label: "has longitude and latitude (P60345)"},
datatype: "globe-coordinate"
},
{
"property": {id: "P754", label: "has note on corporate body [a/datatype] (RDA:P50393)"},
datatype: "string"
},
],
},
};
function statementExists(property, value) {
items.toArray().some(item => !!$(item).data().propertyId && $(item).data().statementgroupview.options.value.getKey() === property &&
$(item).data().statementgroupview.options.value.getItemContainer().toArray().some(claimItem =>
claimItem.getClaim().getMainSnak().getValue().getSerialization() === value));
}
function getPropertyEntity(property) {
return {
"id": `${property.id}`,
"title": `Property:${property.id}`,
"datatype": property.datatype,
"label": property.label,
};
}
function prefillStatement(claim, onlyProperty) {
let statementListView = $(".wikibase-statementgrouplistview").first().data().wikibaseStatementgrouplistview;
statementListView.enterNewItem();
let items = statementListView.listview.items();
let item = items.last().data();
let sv = item.statementgroupview.statementlistview._listview.items().first().data().statementview;
let snak = sv.$mainSnak.data().snakview;
let es = getPropertyEntity(claim.property);
if(onlyProperty) {
pendingStatement(snak, claim.property);
return;
}
let selector = snak._getPropertySelector();
selector.element.val(es.label);
selector._trigger('change');
selector._select(es);
snak._variation._valueView.element.one(
snak._variation._valueView.widgetEventPrefix + 'afterstartediting',
function() {
let valSelector = snak._variation._valueView._expert.$input.data().entityselector;
let valval = getPropertyEntity(claim.value.mainVal);
valSelector.element.val(valval.label);
valSelector._trigger("change");
valSelector._select(valval);
if(!!claim.qualifiers) {
let qlistview = sv._qualifiers;
qlistview.enterNewItem();
var qsnaklistview = qlistview.value()[qlistview.value().length - 1];
qsnaklistview.enterNewItem();
let qslv = $(sv._qualifiers.items().first()).data().snaklistview;
let qsnak = qslv._listview.items().first().data().snakview;
let qsel = qsnak._getPropertySelector();
qsel.element.val(es.label);
qsel._trigger('change');
qsel._select(es);
qsnak._variation._valueView.element.one(
qsnak._variation._valueView.widgetEventPrefix + 'afterstartediting',
function() {
let qvalSelector = qsnak._variation._valueView._expert.$input.data().entityselector;
let qvalval = getPropertyEntity(claim.value.mainVal);
qvalSelector.element.val(qvalval.label);
qvalSelector._trigger("change");
valSelector._trigger("change");
qvalSelector._select(qvalval);
}
);
qsnak._variation._valueView.element.one(
qsnak._variation._valueView.widgetEventPrefix + 'change',
function() {
let toolbar = item.statementgroupview.statementlistview._listview.items().last().data().edittoolbar;
toolbar._controller.stopEditing(false);
});
}
}
);
snak._variation._valueView.element.one(
snak._variation._valueView.widgetEventPrefix + 'change',
function() {
let toolbar = item.statementgroupview.statementlistview._listview.items().last().data().edittoolbar;
toolbar._controller.stopEditing(false);
});
}
function pendingStatement(snak, prop){
let selector = snak._getPropertySelector();
selector.element.on('entityselectorselected', (event, entityId) => {
$(snak._variation).on("afterdraw", function() {
snak._variation._valueView.element.one(
snak._variation._valueView.widgetEventPrefix + 'afterstartediting',
function() {
let valSelector = snak._variation._valueView._expert.$input.data().inputautoexpand;
let jqe = snak._variation._valueView._expert.$input.data().jqueryEventSpecialEachchange;
valSelector.$input.val("aa");
jqe.handlers[0].call();
jqe.handlers[1].call()
valSelector.$input.val("");
jqe.handlers[0].call();
jqe.handlers[1].call();
});
});
});
selector.element.val(prop.label);
selector._trigger('change');
selector._select(prop);
}
function applyTemplate(templateName) {
WbTemplates[templateName].prefilledClaims.forEach(claim => {
prefillStatement(claim, false);
});
WbTemplates[templateName].userDefinedClaims.forEach(claim => {
prefillStatement(claim, true);
});
}
$(".wikibase-entitytermsview").append('<select id="wbtemplate"></select><button id="applyTemplateBtn">Apply template</button>');
Object.entries(WbTemplates).forEach(entry => {
$('#wbtemplate').append($('<option>', {
value: entry[0],
text: entry[0]
}));
});
$("#applyTemplateBtn").on("click", function() {
applyTemplate($("#wbtemplate").find(":selected").val());
});