Jump to content

MediaWiki:Gadget-templating.js: Difference between revisions

From National Library of Greece
No edit summary
No edit summary
Line 58: Line 58:
function prefillStatement(claim, onlyProperty) {
function prefillStatement(claim, onlyProperty) {


     statementListView = $(".wikibase-statementgrouplistview").first().data().wikibaseStatementgrouplistview;
     let statementListView = $(".wikibase-statementgrouplistview").first().data().wikibaseStatementgrouplistview;
     statementListView.enterNewItem();
     statementListView.enterNewItem();


     items = statementListView.listview.items();
     let items = statementListView.listview.items();
     item = items.last().data();
     let item = items.last().data();
     sv = item.statementgroupview.statementlistview._listview.items().first().data().statementview;
     let sv = item.statementgroupview.statementlistview._listview.items().first().data().statementview;
     snak = sv.$mainSnak.data().snakview;
     let snak = sv.$mainSnak.data().snakview;




     es = getPropertyEntity(claim.property);
     let es = getPropertyEntity(claim.property);


     selector = snak._getPropertySelector();
     let selector = snak._getPropertySelector();
     selector.element.val(es.label);
     selector.element.val(es.label);
     selector._trigger('change');
     selector._trigger('change');
Line 78: Line 78:
         snak._variation._valueView.widgetEventPrefix + 'afterstartediting',
         snak._variation._valueView.widgetEventPrefix + 'afterstartediting',
         function() {
         function() {
             valSelector = snak._variation._valueView._expert.$input.data().entityselector;
             let valSelector = snak._variation._valueView._expert.$input.data().entityselector;
             valval = getPropertyEntity(claim.value.mainVal);
             let valval = getPropertyEntity(claim.value.mainVal);
              
              
             valSelector.element.val(valval.label);
             valSelector.element.val(valval.label);
Line 87: Line 87:
             if(!!claim.qualifiers) {
             if(!!claim.qualifiers) {
            
            
             qlistview = sv._qualifiers;
             let qlistview = sv._qualifiers;
            qlistview.enterNewItem();
            qlistview.enterNewItem();
             
             
            var qsnaklistview = qlistview.value()[qlistview.value().length - 1];
            var qsnaklistview = qlistview.value()[qlistview.value().length - 1];
            qsnaklistview.enterNewItem();
            qsnaklistview.enterNewItem();
            qslv = $(sv._qualifiers.items().first()).data().snaklistview;
            let qslv = $(sv._qualifiers.items().first()).data().snaklistview;
            qsnak = qslv._listview.items().first().data().snakview;
            let qsnak = qslv._listview.items().first().data().snakview;
            qsel = qsnak._getPropertySelector();
            let qsel = qsnak._getPropertySelector();
            qsel.element.val(es.label);
            qsel.element.val(es.label);
            qsel._trigger('change');
            qsel._trigger('change');
Line 103: Line 103:
                qsnak._variation._valueView.widgetEventPrefix + 'afterstartediting',
                qsnak._variation._valueView.widgetEventPrefix + 'afterstartediting',
                function() {
                function() {
                    qvalSelector = qsnak._variation._valueView._expert.$input.data().entityselector;
                    let qvalSelector = qsnak._variation._valueView._expert.$input.data().entityselector;
                    qvalval = getPropertyEntity(claim.value.mainVal);
                    let qvalval = getPropertyEntity(claim.value.mainVal);
                    qvalSelector.element.val(qvalval.label);
                    qvalSelector.element.val(qvalval.label);
Line 118: Line 118:
                qsnak._variation._valueView.widgetEventPrefix + 'change',
                qsnak._variation._valueView.widgetEventPrefix + 'change',
                function() {
                function() {
                    toolbar = item.statementgroupview.statementlistview._listview.items().last().data().edittoolbar;
                    let toolbar = item.statementgroupview.statementlistview._listview.items().last().data().edittoolbar;
                    toolbar._controller.stopEditing(false);
                    toolbar._controller.stopEditing(false);
            });
            });
Line 132: Line 132:
         function() {
         function() {
         debugger;
         debugger;
             toolbar = item.statementgroupview.statementlistview._listview.items().last().data().edittoolbar;
             let toolbar = item.statementgroupview.statementlistview._listview.items().last().data().edittoolbar;
             toolbar._controller.stopEditing(false);
             toolbar._controller.stopEditing(false);
         });
         });

Revision as of 09:04, 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"
        	}
        ],
    },
    "corporate": {
        "prefilledClaims": [{
            "property": "P1",
            "value": {
                "mainVal": "Q72"
            }

        }]
    },
};


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);

    let selector = snak._getPropertySelector();
    selector.element.val(es.label);
    selector._trigger('change');
    selector._select(es);

    if(onlyProperty) return;
    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() {
        	debugger;
            let toolbar = item.statementgroupview.statementlistview._listview.items().last().data().edittoolbar;
            toolbar._controller.stopEditing(false);
        });


}


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());
});