<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.personaldata.io/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Stenli+karanxha</id>
	<title>Wikibase Personal data - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.personaldata.io/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Stenli+karanxha"/>
	<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/wiki/Special:Contributions/Stenli_karanxha"/>
	<updated>2026-05-24T23:34:09Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=MediaWiki:Gadget-QuickPresets.js&amp;diff=74610</id>
		<title>MediaWiki:Gadget-QuickPresets.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=MediaWiki:Gadget-QuickPresets.js&amp;diff=74610"/>
		<updated>2020-01-12T12:13:20Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// taken from https://www.wikidata.org/wiki/User:MichaelSchoenitzer/quickpresets.js&lt;br /&gt;
// non exhaustive list of modifications:&lt;br /&gt;
// P31 and P(subclass) ---&amp;gt; P3 and P4   (see #P31, pid == 3)&lt;br /&gt;
// wd, wdt --&amp;gt; pdio, pdiot&lt;br /&gt;
// importScript and importStyleSheet replaced&lt;br /&gt;
// turned into a common script&lt;br /&gt;
// see doc at [[Gadget-QuickPresets/doc]]&lt;br /&gt;
&lt;br /&gt;
// mw.notify(&amp;quot;QuickPresets&amp;quot;)&lt;br /&gt;
function debug(alert){&lt;br /&gt;
	// mw.notify(alert)&lt;br /&gt;
}&lt;br /&gt;
mw.loader.load( '/w/index.php?title=MediaWiki:Gadget-QuickPresets/defaultconf.css&amp;amp;action=raw&amp;amp;ctype=text/css', 'text/css' );&lt;br /&gt;
&lt;br /&gt;
if( typeof(quick_props)==&amp;quot;undefined&amp;quot; ) {&lt;br /&gt;
    mw.loader.load( '/w/index.php?title=MediaWiki:Gadget-QuickPresets/defaultconf.js&amp;amp;action=raw&amp;amp;ctype=text/javascript' );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Load the entityselector-plugin, try until it works&lt;br /&gt;
 * See: https://stackoverflow.com/questions/47985370/&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_loadentityselector(){&lt;br /&gt;
    try {&lt;br /&gt;
	$( &amp;quot;.quickpresetsiteminput input&amp;quot; ).entityselector( {&lt;br /&gt;
	    url: 'https://wiki.personaldata.io/w/api.php',&lt;br /&gt;
	    language: mw.config.get('wgUserLanguage')&lt;br /&gt;
	} );&lt;br /&gt;
    }&lt;br /&gt;
    catch(err) {&lt;br /&gt;
	setTimeout(quickpresets_loadentityselector, 100);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add the interface wich alows to quickly add statements&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addinterface(qid, prop) {&lt;br /&gt;
    // compose and intert fieldset.&lt;br /&gt;
    var $fieldset = $(&amp;quot;&amp;lt;fieldset id=\&amp;quot;quickpresets\&amp;quot;&amp;gt;&amp;lt;legend&amp;gt;Quick Presets (&amp;quot; + prop.name + &amp;quot;)&amp;lt;/legend&amp;gt;&amp;lt;/fieldset&amp;gt;&amp;quot;)&lt;br /&gt;
	.insertAfter($('.wikibase-statementgrouplistview').first());&lt;br /&gt;
&lt;br /&gt;
    prop.defaults.forEach(function(dflt) {&lt;br /&gt;
	if(typeof dflt.type == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	    dflt.type = &amp;quot;item&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	var $line = $(&amp;quot;&amp;lt;div&amp;gt;&amp;lt;p class='addstatement'&amp;gt;Add &amp;quot;+dflt.name+&amp;quot;:&amp;lt;span class='links'&amp;gt;&amp;lt;/span&amp;gt;&amp;quot; + &lt;br /&gt;
	    &amp;quot;&amp;lt;span class='quickpresets&amp;quot; + dflt.type + &amp;quot;input'&amp;gt;&amp;amp;nbsp;&amp;lt;input/&amp;gt;&amp;amp;nbsp;&amp;quot; +&lt;br /&gt;
	    &amp;quot;&amp;lt;a href=\'#\'&amp;gt;✔&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
	).appendTo($fieldset);&lt;br /&gt;
	if($('#P'+dflt.pid).find(&amp;quot;.wikibase-snakview-value a&amp;quot;).length !== 0) {&lt;br /&gt;
	    $line.addClass('disabled');&lt;br /&gt;
	}&lt;br /&gt;
	if(dflt.values.length === 0) {&lt;br /&gt;
	    $line.addClass('compact');&lt;br /&gt;
	}&lt;br /&gt;
	$line.find('.quickpresets' + dflt.type + 'input a')&lt;br /&gt;
	    .on('click', function(e) {&lt;br /&gt;
		e.preventDefault();&lt;br /&gt;
		if(dflt.type == &amp;quot;item&amp;quot;) {&lt;br /&gt;
		    var selection = $(this).prev('input').data('entityselector').selectedEntity();&lt;br /&gt;
		    quickpresets_additemstatement(qid, dflt.pid, dflt.name, selection.id.substring(1), selection.label);&lt;br /&gt;
		}&lt;br /&gt;
		else if(dflt.type == &amp;quot;string&amp;quot;) {&lt;br /&gt;
			quickpresets_addstringstatement(qid, dflt.pid, dflt.name, $(this).prev('input')[0].value);&lt;br /&gt;
		}&lt;br /&gt;
	    });&lt;br /&gt;
&lt;br /&gt;
	// Add links for all preset-values…&lt;br /&gt;
	dflt.values.forEach(function(val) {&lt;br /&gt;
	    $(&amp;quot;&amp;lt;span&amp;gt;&amp;amp;nbsp;&amp;lt;a href='#'&amp;gt;&amp;lt;/a&amp;gt;&amp;amp;nbsp;∙&amp;lt;/span&amp;gt;&amp;quot;)&lt;br /&gt;
		.appendTo($line.find('span.links'))&lt;br /&gt;
		.find('a')&lt;br /&gt;
		.text(val.name)&lt;br /&gt;
		.on('click', function(e) {&lt;br /&gt;
		    e.preventDefault();&lt;br /&gt;
		    if(dflt.type == &amp;quot;item&amp;quot;) {&lt;br /&gt;
			quickpresets_additemstatement(qid, dflt.pid, dflt.name, val.qid, val.name);&lt;br /&gt;
		    }&lt;br /&gt;
		    else if(dflt.type == &amp;quot;string&amp;quot;) {&lt;br /&gt;
			quickpresets_addstringstatement(qid, dflt.pid, dflt.name, val.text);&lt;br /&gt;
		    }&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    setTimeout(quickpresets_loadentityselector, 100);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a formated claim and in case of success show succtext&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addclaim(claim, succtext) {&lt;br /&gt;
    var api = new mw.Api();&lt;br /&gt;
    var token = mw.user.tokens.values.csrfToken;&lt;br /&gt;
    api.post( { &lt;br /&gt;
	action: 'wbsetclaim',&lt;br /&gt;
	summary: &amp;quot;Added with [[MediaWiki:Gadget-QuickPresets.js|Quickpresets]]&amp;quot;,&lt;br /&gt;
	claim: JSON.stringify(claim),&lt;br /&gt;
	token: token&lt;br /&gt;
    }).then(&lt;br /&gt;
	function(aw){&lt;br /&gt;
	    if(aw.success == 1)&lt;br /&gt;
		//$('.wikibase-statementgrouplistview').first().after( succtext );&lt;br /&gt;
		mw.notify(succtext);&lt;br /&gt;
	}); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a statement with datatype 'item'&lt;br /&gt;
 * qid: the qid of the item wich should get the statment&lt;br /&gt;
 * pid: the property to add&lt;br /&gt;
 * pname: the name of the property for showing a success-note&lt;br /&gt;
 * toqid: the qid of the item that is used as value&lt;br /&gt;
 * toname: the name of the value-item property for showing a success-note&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_additemstatement(qid, pid, pname, toqid, toname) {&lt;br /&gt;
	var claim = {&lt;br /&gt;
	id: (new wb.utilities.ClaimGuidGenerator(&amp;quot;q&amp;quot; + qid)).newGuid(),&lt;br /&gt;
	type: &amp;quot;claim&amp;quot;,&lt;br /&gt;
	mainsnak: {&lt;br /&gt;
	    snaktype: &amp;quot;value&amp;quot;,&lt;br /&gt;
	    property: &amp;quot;P&amp;quot; + pid,&lt;br /&gt;
	    datavalue: {&lt;br /&gt;
		value: {&lt;br /&gt;
		    &amp;quot;entity-type&amp;quot;: &amp;quot;item&amp;quot;,&lt;br /&gt;
		    &amp;quot;numeric-id&amp;quot;: toqid&lt;br /&gt;
		},&lt;br /&gt;
		type: &amp;quot;wikibase-entityid&amp;quot;&lt;br /&gt;
	    },&lt;br /&gt;
	    datatype: &amp;quot;wikibase-item&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
    };&lt;br /&gt;
    quickpresets_addclaim(claim,  &amp;quot;Added &amp;quot;+pname+&amp;quot; &amp;quot;+toname+&amp;quot;&amp;quot;);&lt;br /&gt;
    // Check if we now support it with another element of the config&lt;br /&gt;
    if(pid == 3) {&lt;br /&gt;
	$('#quickpresets').remove();&lt;br /&gt;
	for( var t = 0; t&amp;lt;quick_props.length; t++) {&lt;br /&gt;
	    if(quick_props[t].qid == toqid) {&lt;br /&gt;
		quickpresets_addinterface(qid, quick_props[t]);&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a statement with datatype 'string'&lt;br /&gt;
 * qid: the qid of the item wich should get the statment&lt;br /&gt;
 * pid: the property to add&lt;br /&gt;
 * pname: the name of the property for showing a success-note&lt;br /&gt;
 * str: the value of the statement&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addstringstatement(qid, pid, pname, str) {&lt;br /&gt;
	var claim = {&lt;br /&gt;
	id: (new wb.utilities.ClaimGuidGenerator(&amp;quot;q&amp;quot; + qid)).newGuid(),&lt;br /&gt;
	type: &amp;quot;claim&amp;quot;,&lt;br /&gt;
	mainsnak: {&lt;br /&gt;
	    snaktype: &amp;quot;value&amp;quot;,&lt;br /&gt;
	    property: &amp;quot;P&amp;quot; + pid,&lt;br /&gt;
	    datatype: &amp;quot;string&amp;quot;,&lt;br /&gt;
	    datavalue: {&lt;br /&gt;
		value: str,&lt;br /&gt;
		type: &amp;quot;string&amp;quot;&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    };&lt;br /&gt;
    quickpresets_addclaim(claim,  &amp;quot;Added &amp;quot;+pname+&amp;quot; &amp;quot;+str+&amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * check if an item is of a type, if so add options&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_checktype(qid, prop) {&lt;br /&gt;
  var typeqid = prop.qid;&lt;br /&gt;
  // Search in HTML-DOM&lt;br /&gt;
  // for each &amp;quot;instance of&amp;quot; value, run this function&lt;br /&gt;
  var typefromdom = $.map($(&amp;quot;#P3&amp;quot;).find(&amp;quot;.wikibase-snakview-value a&amp;quot;), function(&lt;br /&gt;
    value,&lt;br /&gt;
    index&lt;br /&gt;
  ) {&lt;br /&gt;
    if (typeof value.attributes.href === &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
      return [];&lt;br /&gt;
    } else {&lt;br /&gt;
      return [value.attributes.href.value.substring(6)];&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
  // typefromdom is now a list of Item:Qxxx, possibly empty&lt;br /&gt;
  if (typefromdom.length === 0) {&lt;br /&gt;
    if (typeqid === null) {&lt;br /&gt;
      // the null prescription for when there is no &amp;quot;instance of&amp;quot;&lt;br /&gt;
      quickpresets_addinterface(qid, prop);&lt;br /&gt;
    }&lt;br /&gt;
  } else {&lt;br /&gt;
    if (typeqid === 0) {&lt;br /&gt;
      // the 0 prescription, applicable to all items which are instance of something&lt;br /&gt;
      quickpresets_addinterface(qid, prop);&lt;br /&gt;
    } else if (typefromdom.includes(&amp;quot;Item:Q&amp;quot; + typeqid)) {&lt;br /&gt;
      // direct relevance&lt;br /&gt;
      quickpresets_addinterface(qid, prop);&lt;br /&gt;
    } else {&lt;br /&gt;
      // indirect relevance, through subclassing&lt;br /&gt;
      // Now check via sparql (much slower but includes subtypes)&lt;br /&gt;
      const endpointUrl = &amp;quot;https://query.personaldata.io/proxy/wdqs/bigdata/namespace/wdq/sparql&amp;quot;;&lt;br /&gt;
      const sparqlQuery = &amp;quot;Ask { pdio:Q&amp;quot; + qid + &amp;quot; pdiot:P3/pdiot:P4* pdio:Q&amp;quot; + typeqid + '. hint:Prior hint:gearing &amp;quot;forwards&amp;quot; }';&lt;br /&gt;
      const fullUrl = endpointUrl + &amp;quot;?query=&amp;quot; + encodeURIComponent(sparqlQuery);&lt;br /&gt;
      const myHeaders = { Accept: &amp;quot;application/sparql-results+json&amp;quot; };&lt;br /&gt;
      debug(&amp;quot;qid: &amp;quot; + qid + &amp;quot;\ntypeqid: &amp;quot; + typeqid + &amp;quot;\n&amp;quot; + fullUrl + &amp;quot;\n&amp;quot; + sparqlQuery );&lt;br /&gt;
      fetch(fullUrl, { headers: myHeaders })&lt;br /&gt;
        .then(function(body) {body.json();})&lt;br /&gt;
        .then(function(json) {if (json &amp;amp;&amp;amp; json.boolean) {quickpresets_addinterface(qid, prop);}});&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * wait for config to be loaded, then execute func&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_waitForConfig(func){&lt;br /&gt;
    if(typeof quick_props !== &amp;quot;undefined&amp;quot;){&lt;br /&gt;
	func();&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
	setTimeout(quickpresets_waitForConfig, 100, func);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$( function($) {&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Check if we're viewing an item&lt;br /&gt;
     */&lt;br /&gt;
    var qid = mw.config.get( 'wbEntityId' );&lt;br /&gt;
    if ( !qid ) {&lt;br /&gt;
	    return;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
	qid = qid.substring(1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * check if item is a of right kind&lt;br /&gt;
     */&lt;br /&gt;
    quickpresets_waitForConfig(function() {&lt;br /&gt;
	for( var t = 0; t&amp;lt;quick_props.length; t++) {&lt;br /&gt;
	    quickpresets_checktype(qid, quick_props[t]);&lt;br /&gt;
	}&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
} );&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=MediaWiki:Gadget-QuickPresets.js&amp;diff=74609</id>
		<title>MediaWiki:Gadget-QuickPresets.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=MediaWiki:Gadget-QuickPresets.js&amp;diff=74609"/>
		<updated>2020-01-12T12:09:35Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// taken from https://www.wikidata.org/wiki/User:MichaelSchoenitzer/quickpresets.js&lt;br /&gt;
// non exhaustive list of modifications:&lt;br /&gt;
// P31 and P(subclass) ---&amp;gt; P3 and P4   (see #P31, pid == 3)&lt;br /&gt;
// wd, wdt --&amp;gt; pdio, pdiot&lt;br /&gt;
// importScript and importStyleSheet replaced&lt;br /&gt;
// turned into a common script&lt;br /&gt;
// see doc at [[Gadget-QuickPresets/doc]]&lt;br /&gt;
&lt;br /&gt;
// mw.notify(&amp;quot;QuickPresets&amp;quot;)&lt;br /&gt;
function debug(alert){&lt;br /&gt;
	// mw.notify(alert)&lt;br /&gt;
}&lt;br /&gt;
mw.loader.load( '/w/index.php?title=MediaWiki:Gadget-QuickPresets/defaultconf.css&amp;amp;action=raw&amp;amp;ctype=text/css', 'text/css' );&lt;br /&gt;
&lt;br /&gt;
if( typeof(quick_props)==&amp;quot;undefined&amp;quot; ) {&lt;br /&gt;
    mw.loader.load( '/w/index.php?title=MediaWiki:Gadget-QuickPresets/defaultconf.js&amp;amp;action=raw&amp;amp;ctype=text/javascript' );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Load the entityselector-plugin, try until it works&lt;br /&gt;
 * See: https://stackoverflow.com/questions/47985370/&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_loadentityselector(){&lt;br /&gt;
    try {&lt;br /&gt;
	$( &amp;quot;.quickpresetsiteminput input&amp;quot; ).entityselector( {&lt;br /&gt;
	    url: 'https://wiki.personaldata.io/w/api.php',&lt;br /&gt;
	    language: mw.config.get('wgUserLanguage')&lt;br /&gt;
	} );&lt;br /&gt;
    }&lt;br /&gt;
    catch(err) {&lt;br /&gt;
	setTimeout(quickpresets_loadentityselector, 100);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add the interface wich alows to quickly add statements&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addinterface(qid, prop) {&lt;br /&gt;
    // compose and intert fieldset.&lt;br /&gt;
    var $fieldset = $(&amp;quot;&amp;lt;fieldset id=\&amp;quot;quickpresets\&amp;quot;&amp;gt;&amp;lt;legend&amp;gt;Quick Presets (&amp;quot; + prop.name + &amp;quot;)&amp;lt;/legend&amp;gt;&amp;lt;/fieldset&amp;gt;&amp;quot;)&lt;br /&gt;
	.insertAfter($('.wikibase-statementgrouplistview').first());&lt;br /&gt;
&lt;br /&gt;
    prop.defaults.forEach(function(dflt) {&lt;br /&gt;
	if(typeof dflt.type == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	    dflt.type = &amp;quot;item&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	var $line = $(&amp;quot;&amp;lt;div&amp;gt;&amp;lt;p class='addstatement'&amp;gt;Add &amp;quot;+dflt.name+&amp;quot;:&amp;lt;span class='links'&amp;gt;&amp;lt;/span&amp;gt;&amp;quot; + &lt;br /&gt;
	    &amp;quot;&amp;lt;span class='quickpresets&amp;quot; + dflt.type + &amp;quot;input'&amp;gt;&amp;amp;nbsp;&amp;lt;input/&amp;gt;&amp;amp;nbsp;&amp;quot; +&lt;br /&gt;
	    &amp;quot;&amp;lt;a href=\'#\'&amp;gt;✔&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
	).appendTo($fieldset);&lt;br /&gt;
	if($('#P'+dflt.pid).find(&amp;quot;.wikibase-snakview-value a&amp;quot;).length !== 0) {&lt;br /&gt;
	    $line.addClass('disabled');&lt;br /&gt;
	}&lt;br /&gt;
	if(dflt.values.length === 0) {&lt;br /&gt;
	    $line.addClass('compact');&lt;br /&gt;
	}&lt;br /&gt;
	$line.find('.quickpresets' + dflt.type + 'input a')&lt;br /&gt;
	    .on('click', function(e) {&lt;br /&gt;
		e.preventDefault();&lt;br /&gt;
		if(dflt.type == &amp;quot;item&amp;quot;) {&lt;br /&gt;
		    var selection = $(this).prev('input').data('entityselector').selectedEntity();&lt;br /&gt;
		    quickpresets_additemstatement(qid, dflt.pid, dflt.name, selection.id.substring(1), selection.label);&lt;br /&gt;
		}&lt;br /&gt;
		else if(dflt.type == &amp;quot;string&amp;quot;) {&lt;br /&gt;
			quickpresets_addstringstatement(qid, dflt.pid, dflt.name, $(this).prev('input')[0].value);&lt;br /&gt;
		}&lt;br /&gt;
	    });&lt;br /&gt;
&lt;br /&gt;
	// Add links for all preset-values…&lt;br /&gt;
	dflt.values.forEach(function(val) {&lt;br /&gt;
	    $(&amp;quot;&amp;lt;span&amp;gt;&amp;amp;nbsp;&amp;lt;a href='#'&amp;gt;&amp;lt;/a&amp;gt;&amp;amp;nbsp;∙&amp;lt;/span&amp;gt;&amp;quot;)&lt;br /&gt;
		.appendTo($line.find('span.links'))&lt;br /&gt;
		.find('a')&lt;br /&gt;
		.text(val.name)&lt;br /&gt;
		.on('click', function(e) {&lt;br /&gt;
		    e.preventDefault();&lt;br /&gt;
		    if(dflt.type == &amp;quot;item&amp;quot;) {&lt;br /&gt;
			quickpresets_additemstatement(qid, dflt.pid, dflt.name, val.qid, val.name);&lt;br /&gt;
		    }&lt;br /&gt;
		    else if(dflt.type == &amp;quot;string&amp;quot;) {&lt;br /&gt;
			quickpresets_addstringstatement(qid, dflt.pid, dflt.name, val.text);&lt;br /&gt;
		    }&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    setTimeout(quickpresets_loadentityselector, 100);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a formated claim and in case of success show succtext&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addclaim(claim, succtext) {&lt;br /&gt;
    var api = new mw.Api();&lt;br /&gt;
    var token = mw.user.tokens.values.csrfToken;&lt;br /&gt;
    api.post( { &lt;br /&gt;
	action: 'wbsetclaim',&lt;br /&gt;
	summary: &amp;quot;Added with [[MediaWiki:Gadget-QuickPresets.js|Quickpresets]]&amp;quot;,&lt;br /&gt;
	claim: JSON.stringify(claim),&lt;br /&gt;
	token: token&lt;br /&gt;
    }).then(&lt;br /&gt;
	function(aw){&lt;br /&gt;
	    if(aw.success == 1)&lt;br /&gt;
		//$('.wikibase-statementgrouplistview').first().after( succtext );&lt;br /&gt;
		mw.notify(succtext);&lt;br /&gt;
	}); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a statement with datatype 'item'&lt;br /&gt;
 * qid: the qid of the item wich should get the statment&lt;br /&gt;
 * pid: the property to add&lt;br /&gt;
 * pname: the name of the property for showing a success-note&lt;br /&gt;
 * toqid: the qid of the item that is used as value&lt;br /&gt;
 * toname: the name of the value-item property for showing a success-note&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_additemstatement(qid, pid, pname, toqid, toname) {&lt;br /&gt;
	var claim = {&lt;br /&gt;
	id: (new wb.utilities.ClaimGuidGenerator(&amp;quot;q&amp;quot; + qid)).newGuid(),&lt;br /&gt;
	type: &amp;quot;claim&amp;quot;,&lt;br /&gt;
	mainsnak: {&lt;br /&gt;
	    snaktype: &amp;quot;value&amp;quot;,&lt;br /&gt;
	    property: &amp;quot;P&amp;quot; + pid,&lt;br /&gt;
	    datavalue: {&lt;br /&gt;
		value: {&lt;br /&gt;
		    &amp;quot;entity-type&amp;quot;: &amp;quot;item&amp;quot;,&lt;br /&gt;
		    &amp;quot;numeric-id&amp;quot;: toqid&lt;br /&gt;
		},&lt;br /&gt;
		type: &amp;quot;wikibase-entityid&amp;quot;&lt;br /&gt;
	    },&lt;br /&gt;
	    datatype: &amp;quot;wikibase-item&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
    };&lt;br /&gt;
    quickpresets_addclaim(claim,  &amp;quot;Added &amp;quot;+pname+&amp;quot; &amp;quot;+toname+&amp;quot;&amp;quot;);&lt;br /&gt;
    // Check if we now support it with another element of the config&lt;br /&gt;
    if(pid == 3) {&lt;br /&gt;
	$('#quickpresets').remove();&lt;br /&gt;
	for( var t = 0; t&amp;lt;quick_props.length; t++) {&lt;br /&gt;
	    if(quick_props[t].qid == toqid) {&lt;br /&gt;
		quickpresets_addinterface(qid, quick_props[t]);&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a statement with datatype 'string'&lt;br /&gt;
 * qid: the qid of the item wich should get the statment&lt;br /&gt;
 * pid: the property to add&lt;br /&gt;
 * pname: the name of the property for showing a success-note&lt;br /&gt;
 * str: the value of the statement&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addstringstatement(qid, pid, pname, str) {&lt;br /&gt;
	var claim = {&lt;br /&gt;
	id: (new wb.utilities.ClaimGuidGenerator(&amp;quot;q&amp;quot; + qid)).newGuid(),&lt;br /&gt;
	type: &amp;quot;claim&amp;quot;,&lt;br /&gt;
	mainsnak: {&lt;br /&gt;
	    snaktype: &amp;quot;value&amp;quot;,&lt;br /&gt;
	    property: &amp;quot;P&amp;quot; + pid,&lt;br /&gt;
	    datatype: &amp;quot;string&amp;quot;,&lt;br /&gt;
	    datavalue: {&lt;br /&gt;
		value: str,&lt;br /&gt;
		type: &amp;quot;string&amp;quot;&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    };&lt;br /&gt;
    quickpresets_addclaim(claim,  &amp;quot;Added &amp;quot;+pname+&amp;quot; &amp;quot;+str+&amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * check if an item is of a type, if so add options&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_checktype(qid, prop) {&lt;br /&gt;
  var typeqid = prop.qid;&lt;br /&gt;
  // Search in HTML-DOM&lt;br /&gt;
  // for each &amp;quot;instance of&amp;quot; value, run this function&lt;br /&gt;
  var typefromdom = $.map($(&amp;quot;#P3&amp;quot;).find(&amp;quot;.wikibase-snakview-value a&amp;quot;), function(&lt;br /&gt;
    value,&lt;br /&gt;
    index&lt;br /&gt;
  ) {&lt;br /&gt;
    if (typeof value.attributes.href === &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
      return [];&lt;br /&gt;
    } else {&lt;br /&gt;
      return [value.attributes.href.value.substring(6)];&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
  // typefromdom is now a list of Item:Qxxx, possibly empty&lt;br /&gt;
  if (typefromdom.length === 0) {&lt;br /&gt;
    if (typeqid === null) {&lt;br /&gt;
      // the null prescription for when there is no &amp;quot;instance of&amp;quot;&lt;br /&gt;
      quickpresets_addinterface(qid, prop);&lt;br /&gt;
    }&lt;br /&gt;
  } else {&lt;br /&gt;
    if (typeqid === 0) {&lt;br /&gt;
      // the 0 prescription, applicable to all items which are instance of something&lt;br /&gt;
      quickpresets_addinterface(qid, prop);&lt;br /&gt;
    } else if (typefromdom.includes(&amp;quot;Item:Q&amp;quot; + typeqid)) {&lt;br /&gt;
      // direct relevance&lt;br /&gt;
      quickpresets_addinterface(qid, prop);&lt;br /&gt;
    } else {&lt;br /&gt;
      // indirect relevance, through subclassing&lt;br /&gt;
      // Now check via sparql (much slower but includes subtypes)&lt;br /&gt;
      const endpointUrl = &amp;quot;https://query.personaldata.io/proxy/wdqs/bigdata/namespace/wdq/sparql&amp;quot;;&lt;br /&gt;
      const sparqlQuery = &amp;quot;Ask { pdio:Q&amp;quot; + qid + &amp;quot; pdiot:P3/pdiot:P4* pdio:Q&amp;quot; + typeqid + '. hint:Prior hint:gearing &amp;quot;forwards&amp;quot; }';&lt;br /&gt;
      const fullUrl = endpointUrl + &amp;quot;?query=&amp;quot; + encodeURIComponent(sparqlQuery);&lt;br /&gt;
      const myHeaders = { Accept: &amp;quot;application/sparql-results+json&amp;quot; };&lt;br /&gt;
      debug(&amp;quot;qid: &amp;quot; + qid + &amp;quot;\ntypeqid: &amp;quot; + typeqid + &amp;quot;\n&amp;quot; + fullUrl + &amp;quot;\n&amp;quot; + sparqlQuery );&lt;br /&gt;
      fetch(fullUrl, { headers: myHeaders })&lt;br /&gt;
        .then(function(body) {body.json();})&lt;br /&gt;
        .then(function(json) {if (json.boolean) {quickpresets_addinterface(qid, prop);}});&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * wait for config to be loaded, then execute func&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_waitForConfig(func){&lt;br /&gt;
    if(typeof quick_props !== &amp;quot;undefined&amp;quot;){&lt;br /&gt;
	func();&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
	setTimeout(quickpresets_waitForConfig, 100, func);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$( function($) {&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Check if we're viewing an item&lt;br /&gt;
     */&lt;br /&gt;
    var qid = mw.config.get( 'wbEntityId' );&lt;br /&gt;
    if ( !qid ) {&lt;br /&gt;
	    return;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
	qid = qid.substring(1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * check if item is a of right kind&lt;br /&gt;
     */&lt;br /&gt;
    quickpresets_waitForConfig(function() {&lt;br /&gt;
	for( var t = 0; t&amp;lt;quick_props.length; t++) {&lt;br /&gt;
	    quickpresets_checktype(qid, quick_props[t]);&lt;br /&gt;
	}&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
} );&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=MediaWiki:Gadget-QuickPresets.js&amp;diff=74600</id>
		<title>MediaWiki:Gadget-QuickPresets.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=MediaWiki:Gadget-QuickPresets.js&amp;diff=74600"/>
		<updated>2020-01-12T11:36:31Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// taken from https://www.wikidata.org/wiki/User:MichaelSchoenitzer/quickpresets.js&lt;br /&gt;
// non exhaustive list of modifications:&lt;br /&gt;
// P31 and P(subclass) ---&amp;gt; P3 and P4   (see #P31, pid == 3)&lt;br /&gt;
// wd, wdt --&amp;gt; pdio, pdiot&lt;br /&gt;
// importScript and importStyleSheet replaced&lt;br /&gt;
// turned into a common script&lt;br /&gt;
// see doc at [[Gadget-QuickPresets/doc]]&lt;br /&gt;
&lt;br /&gt;
// mw.notify(&amp;quot;QuickPresets&amp;quot;)&lt;br /&gt;
function debug(alert){&lt;br /&gt;
	// mw.notify(alert)&lt;br /&gt;
}&lt;br /&gt;
mw.loader.load( '/w/index.php?title=MediaWiki:Gadget-QuickPresets/defaultconf.css&amp;amp;action=raw&amp;amp;ctype=text/css', 'text/css' );&lt;br /&gt;
&lt;br /&gt;
if( typeof(quick_props)==&amp;quot;undefined&amp;quot; ) {&lt;br /&gt;
    mw.loader.load( '/w/index.php?title=MediaWiki:Gadget-QuickPresets/defaultconf.js&amp;amp;action=raw&amp;amp;ctype=text/javascript' );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Load the entityselector-plugin, try until it works&lt;br /&gt;
 * See: https://stackoverflow.com/questions/47985370/&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_loadentityselector(){&lt;br /&gt;
    try {&lt;br /&gt;
	$( &amp;quot;.quickpresetsiteminput input&amp;quot; ).entityselector( {&lt;br /&gt;
	    url: 'https://wiki.personaldata.io/w/api.php',&lt;br /&gt;
	    language: mw.config.get('wgUserLanguage')&lt;br /&gt;
	} );&lt;br /&gt;
    }&lt;br /&gt;
    catch(err) {&lt;br /&gt;
	setTimeout(quickpresets_loadentityselector, 100);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add the interface wich alows to quickly add statements&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addinterface(qid, prop) {&lt;br /&gt;
    // compose and intert fieldset.&lt;br /&gt;
    var $fieldset = $(&amp;quot;&amp;lt;fieldset id=\&amp;quot;quickpresets\&amp;quot;&amp;gt;&amp;lt;legend&amp;gt;Quick Presets (&amp;quot; + prop.name + &amp;quot;)&amp;lt;/legend&amp;gt;&amp;lt;/fieldset&amp;gt;&amp;quot;)&lt;br /&gt;
	.insertAfter($('.wikibase-statementgrouplistview').first());&lt;br /&gt;
&lt;br /&gt;
    prop.defaults.forEach(function(dflt) {&lt;br /&gt;
	if(typeof dflt.type == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	    dflt.type = &amp;quot;item&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	var $line = $(&amp;quot;&amp;lt;div&amp;gt;&amp;lt;p class='addstatement'&amp;gt;Add &amp;quot;+dflt.name+&amp;quot;:&amp;lt;span class='links'&amp;gt;&amp;lt;/span&amp;gt;&amp;quot; + &lt;br /&gt;
	    &amp;quot;&amp;lt;span class='quickpresets&amp;quot; + dflt.type + &amp;quot;input'&amp;gt;&amp;amp;nbsp;&amp;lt;input/&amp;gt;&amp;amp;nbsp;&amp;quot; +&lt;br /&gt;
	    &amp;quot;&amp;lt;a href=\'#\'&amp;gt;✔&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
	).appendTo($fieldset);&lt;br /&gt;
	if($('#P'+dflt.pid).find(&amp;quot;.wikibase-snakview-value a&amp;quot;).length !== 0) {&lt;br /&gt;
	    $line.addClass('disabled');&lt;br /&gt;
	}&lt;br /&gt;
	if(dflt.values.length === 0) {&lt;br /&gt;
	    $line.addClass('compact');&lt;br /&gt;
	}&lt;br /&gt;
	$line.find('.quickpresets' + dflt.type + 'input a')&lt;br /&gt;
	    .on('click', function(e) {&lt;br /&gt;
		e.preventDefault();&lt;br /&gt;
		if(dflt.type == &amp;quot;item&amp;quot;) {&lt;br /&gt;
		    var selection = $(this).prev('input').data('entityselector').selectedEntity();&lt;br /&gt;
		    quickpresets_additemstatement(qid, dflt.pid, dflt.name, selection.id.substring(1), selection.label);&lt;br /&gt;
		}&lt;br /&gt;
		else if(dflt.type == &amp;quot;string&amp;quot;) {&lt;br /&gt;
			quickpresets_addstringstatement(qid, dflt.pid, dflt.name, $(this).prev('input')[0].value);&lt;br /&gt;
		}&lt;br /&gt;
	    });&lt;br /&gt;
&lt;br /&gt;
	// Add links for all preset-values…&lt;br /&gt;
	dflt.values.forEach(function(val) {&lt;br /&gt;
	    $(&amp;quot;&amp;lt;span&amp;gt;&amp;amp;nbsp;&amp;lt;a href='#'&amp;gt;&amp;lt;/a&amp;gt;&amp;amp;nbsp;∙&amp;lt;/span&amp;gt;&amp;quot;)&lt;br /&gt;
		.appendTo($line.find('span.links'))&lt;br /&gt;
		.find('a')&lt;br /&gt;
		.text(val.name)&lt;br /&gt;
		.on('click', function(e) {&lt;br /&gt;
		    e.preventDefault();&lt;br /&gt;
		    if(dflt.type == &amp;quot;item&amp;quot;) {&lt;br /&gt;
			quickpresets_additemstatement(qid, dflt.pid, dflt.name, val.qid, val.name);&lt;br /&gt;
		    }&lt;br /&gt;
		    else if(dflt.type == &amp;quot;string&amp;quot;) {&lt;br /&gt;
			quickpresets_addstringstatement(qid, dflt.pid, dflt.name, val.text);&lt;br /&gt;
		    }&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    setTimeout(quickpresets_loadentityselector, 100);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a formated claim and in case of success show succtext&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addclaim(claim, succtext) {&lt;br /&gt;
    var api = new mw.Api();&lt;br /&gt;
    var token = mw.user.tokens.values.csrfToken;&lt;br /&gt;
    api.post( { &lt;br /&gt;
	action: 'wbsetclaim',&lt;br /&gt;
	summary: &amp;quot;Added with [[MediaWiki:Gadget-QuickPresets.js|Quickpresets]]&amp;quot;,&lt;br /&gt;
	claim: JSON.stringify(claim),&lt;br /&gt;
	token: token&lt;br /&gt;
    }).then(&lt;br /&gt;
	function(aw){&lt;br /&gt;
	    if(aw.success == 1)&lt;br /&gt;
		//$('.wikibase-statementgrouplistview').first().after( succtext );&lt;br /&gt;
		mw.notify(succtext);&lt;br /&gt;
	}); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a statement with datatype 'item'&lt;br /&gt;
 * qid: the qid of the item wich should get the statment&lt;br /&gt;
 * pid: the property to add&lt;br /&gt;
 * pname: the name of the property for showing a success-note&lt;br /&gt;
 * toqid: the qid of the item that is used as value&lt;br /&gt;
 * toname: the name of the value-item property for showing a success-note&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_additemstatement(qid, pid, pname, toqid, toname) {&lt;br /&gt;
	var claim = {&lt;br /&gt;
	id: (new wb.utilities.ClaimGuidGenerator(&amp;quot;q&amp;quot; + qid)).newGuid(),&lt;br /&gt;
	type: &amp;quot;claim&amp;quot;,&lt;br /&gt;
	mainsnak: {&lt;br /&gt;
	    snaktype: &amp;quot;value&amp;quot;,&lt;br /&gt;
	    property: &amp;quot;P&amp;quot; + pid,&lt;br /&gt;
	    datavalue: {&lt;br /&gt;
		value: {&lt;br /&gt;
		    &amp;quot;entity-type&amp;quot;: &amp;quot;item&amp;quot;,&lt;br /&gt;
		    &amp;quot;numeric-id&amp;quot;: toqid&lt;br /&gt;
		},&lt;br /&gt;
		type: &amp;quot;wikibase-entityid&amp;quot;&lt;br /&gt;
	    },&lt;br /&gt;
	    datatype: &amp;quot;wikibase-item&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
    };&lt;br /&gt;
    quickpresets_addclaim(claim,  &amp;quot;Added &amp;quot;+pname+&amp;quot; &amp;quot;+toname+&amp;quot;&amp;quot;);&lt;br /&gt;
    // Check if we now support it with another element of the config&lt;br /&gt;
    if(pid == 3) {&lt;br /&gt;
	$('#quickpresets').remove();&lt;br /&gt;
	for( var t = 0; t&amp;lt;quick_props.length; t++) {&lt;br /&gt;
	    if(quick_props[t].qid == toqid) {&lt;br /&gt;
		quickpresets_addinterface(qid, quick_props[t]);&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a statement with datatype 'string'&lt;br /&gt;
 * qid: the qid of the item wich should get the statment&lt;br /&gt;
 * pid: the property to add&lt;br /&gt;
 * pname: the name of the property for showing a success-note&lt;br /&gt;
 * str: the value of the statement&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addstringstatement(qid, pid, pname, str) {&lt;br /&gt;
	var claim = {&lt;br /&gt;
	id: (new wb.utilities.ClaimGuidGenerator(&amp;quot;q&amp;quot; + qid)).newGuid(),&lt;br /&gt;
	type: &amp;quot;claim&amp;quot;,&lt;br /&gt;
	mainsnak: {&lt;br /&gt;
	    snaktype: &amp;quot;value&amp;quot;,&lt;br /&gt;
	    property: &amp;quot;P&amp;quot; + pid,&lt;br /&gt;
	    datatype: &amp;quot;string&amp;quot;,&lt;br /&gt;
	    datavalue: {&lt;br /&gt;
		value: str,&lt;br /&gt;
		type: &amp;quot;string&amp;quot;&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    };&lt;br /&gt;
    quickpresets_addclaim(claim,  &amp;quot;Added &amp;quot;+pname+&amp;quot; &amp;quot;+str+&amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * check if an item is of a type, if so add options&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_checktype(qid, prop) {&lt;br /&gt;
	var typeqid=prop.qid;&lt;br /&gt;
    // Search in HTML-DOM&lt;br /&gt;
    // for each &amp;quot;instance of&amp;quot; value, run this function&lt;br /&gt;
    var typefromdom=$.map($('#P3').find(&amp;quot;.wikibase-snakview-value a&amp;quot;), function(value, index) {&lt;br /&gt;
	if(typeof value.attributes.href === &amp;quot;undefined&amp;quot;)&lt;br /&gt;
	    {&lt;br /&gt;
	        return [];  &lt;br /&gt;
	    }&lt;br /&gt;
	else&lt;br /&gt;
	    {&lt;br /&gt;
	        return [value.attributes.href.value.substring(6)];&lt;br /&gt;
	    }&lt;br /&gt;
    });&lt;br /&gt;
    // typefromdom is now a list of Item:Qxxx, possibly empty&lt;br /&gt;
    if ( typefromdom.length === 0) {&lt;br /&gt;
	    if(typeqid === null) // the null prescription for when there is no &amp;quot;instance of&amp;quot;&lt;br /&gt;
	        {&lt;br /&gt;
	            quickpresets_addinterface(qid, prop);&lt;br /&gt;
	        }&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
	     if ( typeqid === 0 ) {&lt;br /&gt;
	     	// the 0 prescription, applicable to all items which are instance of something&lt;br /&gt;
		    quickpresets_addinterface(qid, prop);&lt;br /&gt;
	     }&lt;br /&gt;
	    else if ( typefromdom.includes(&amp;quot;Item:Q&amp;quot;+typeqid) ) {&lt;br /&gt;
	    	// direct relevance&lt;br /&gt;
		    quickpresets_addinterface(qid, prop);&lt;br /&gt;
	    }&lt;br /&gt;
	    else {&lt;br /&gt;
	    	// indirect relevance, through subclassing&lt;br /&gt;
	        // Now check via sparql (much slower but includes subtypes)&lt;br /&gt;
	        const endpointUrl = 'https://query.personaldata.io/proxy/wdqs/bigdata/namespace/wdq/sparql',&lt;br /&gt;
		    sparqlQuery = 'Ask { pdio:Q' + qid + ' pdiot:P3/pdiot:P4* pdio:Q' + typeqid + '. hint:Prior hint:gearing &amp;quot;forwards&amp;quot; }',&lt;br /&gt;
		    fullUrl = endpointUrl + '?query=' + encodeURIComponent( sparqlQuery ),&lt;br /&gt;
		    headers = { 'Accept': 'application/sparql-results+json' };&lt;br /&gt;
		    debug(&amp;quot;qid: &amp;quot;+ qid + &amp;quot;\ntypeqid: &amp;quot; + typeqid + &amp;quot;\n&amp;quot; + fullUrl + &amp;quot;\n&amp;quot; + sparqlQuery);&lt;br /&gt;
	        fetch( fullUrl, { headers: { 'Accept': 'application/sparql-results+json' }, } )&lt;br /&gt;
	        	.then( body =&amp;gt; { body.json() } )&lt;br /&gt;
	        	.then( json =&amp;gt; { if ( json.boolean ) quickpresets_addinterface(qid, prop); } );&lt;br /&gt;
	    }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * wait for config to be loaded, then execute func&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_waitForConfig(func){&lt;br /&gt;
    if(typeof quick_props !== &amp;quot;undefined&amp;quot;){&lt;br /&gt;
	func();&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
	setTimeout(quickpresets_waitForConfig, 100, func);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$( function($) {&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Check if we're viewing an item&lt;br /&gt;
     */&lt;br /&gt;
    var qid = mw.config.get( 'wbEntityId' );&lt;br /&gt;
    if ( !qid ) {&lt;br /&gt;
	    return;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
	qid = qid.substring(1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * check if item is a of right kind&lt;br /&gt;
     */&lt;br /&gt;
    quickpresets_waitForConfig(function() {&lt;br /&gt;
	for( var t = 0; t&amp;lt;quick_props.length; t++) {&lt;br /&gt;
	    quickpresets_checktype(qid, quick_props[t]);&lt;br /&gt;
	}&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
} );&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=MediaWiki:Gadget-QuickPresets.js&amp;diff=74599</id>
		<title>MediaWiki:Gadget-QuickPresets.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=MediaWiki:Gadget-QuickPresets.js&amp;diff=74599"/>
		<updated>2020-01-12T11:34:17Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// taken from https://www.wikidata.org/wiki/User:MichaelSchoenitzer/quickpresets.js&lt;br /&gt;
// non exhaustive list of modifications:&lt;br /&gt;
// P31 and P(subclass) ---&amp;gt; P3 and P4   (see #P31, pid == 3)&lt;br /&gt;
// wd, wdt --&amp;gt; pdio, pdiot&lt;br /&gt;
// importScript and importStyleSheet replaced&lt;br /&gt;
// turned into a common script&lt;br /&gt;
// see doc at [[Gadget-QuickPresets/doc]]&lt;br /&gt;
&lt;br /&gt;
// mw.notify(&amp;quot;QuickPresets&amp;quot;)&lt;br /&gt;
function debug(alert){&lt;br /&gt;
	// mw.notify(alert)&lt;br /&gt;
}&lt;br /&gt;
mw.loader.load( '/w/index.php?title=MediaWiki:Gadget-QuickPresets/defaultconf.css&amp;amp;action=raw&amp;amp;ctype=text/css', 'text/css' );&lt;br /&gt;
&lt;br /&gt;
if( typeof(quick_props)==&amp;quot;undefined&amp;quot; ) {&lt;br /&gt;
    mw.loader.load( '/w/index.php?title=MediaWiki:Gadget-QuickPresets/defaultconf.js&amp;amp;action=raw&amp;amp;ctype=text/javascript' );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Load the entityselector-plugin, try until it works&lt;br /&gt;
 * See: https://stackoverflow.com/questions/47985370/&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_loadentityselector(){&lt;br /&gt;
    try {&lt;br /&gt;
	$( &amp;quot;.quickpresetsiteminput input&amp;quot; ).entityselector( {&lt;br /&gt;
	    url: 'https://wiki.personaldata.io/w/api.php',&lt;br /&gt;
	    language: mw.config.get('wgUserLanguage')&lt;br /&gt;
	} );&lt;br /&gt;
    }&lt;br /&gt;
    catch(err) {&lt;br /&gt;
	setTimeout(quickpresets_loadentityselector, 100);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add the interface wich alows to quickly add statements&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addinterface(qid, prop) {&lt;br /&gt;
    // compose and intert fieldset.&lt;br /&gt;
    var $fieldset = $(&amp;quot;&amp;lt;fieldset id=\&amp;quot;quickpresets\&amp;quot;&amp;gt;&amp;lt;legend&amp;gt;Quick Presets (&amp;quot; + prop.name + &amp;quot;)&amp;lt;/legend&amp;gt;&amp;lt;/fieldset&amp;gt;&amp;quot;)&lt;br /&gt;
	.insertAfter($('.wikibase-statementgrouplistview').first());&lt;br /&gt;
&lt;br /&gt;
    prop.defaults.forEach(function(dflt) {&lt;br /&gt;
	if(typeof dflt.type == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	    dflt.type = &amp;quot;item&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	var $line = $(&amp;quot;&amp;lt;div&amp;gt;&amp;lt;p class='addstatement'&amp;gt;Add &amp;quot;+dflt.name+&amp;quot;:&amp;lt;span class='links'&amp;gt;&amp;lt;/span&amp;gt;&amp;quot; + &lt;br /&gt;
	    &amp;quot;&amp;lt;span class='quickpresets&amp;quot; + dflt.type + &amp;quot;input'&amp;gt;&amp;amp;nbsp;&amp;lt;input/&amp;gt;&amp;amp;nbsp;&amp;quot; +&lt;br /&gt;
	    &amp;quot;&amp;lt;a href=\'#\'&amp;gt;✔&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
	).appendTo($fieldset);&lt;br /&gt;
	if($('#P'+dflt.pid).find(&amp;quot;.wikibase-snakview-value a&amp;quot;).length !== 0) {&lt;br /&gt;
	    $line.addClass('disabled');&lt;br /&gt;
	}&lt;br /&gt;
	if(dflt.values.length === 0) {&lt;br /&gt;
	    $line.addClass('compact');&lt;br /&gt;
	}&lt;br /&gt;
	$line.find('.quickpresets' + dflt.type + 'input a')&lt;br /&gt;
	    .on('click', function(e) {&lt;br /&gt;
		e.preventDefault();&lt;br /&gt;
		if(dflt.type == &amp;quot;item&amp;quot;) {&lt;br /&gt;
		    var selection = $(this).prev('input').data('entityselector').selectedEntity();&lt;br /&gt;
		    quickpresets_additemstatement(qid, dflt.pid, dflt.name, selection.id.substring(1), selection.label);&lt;br /&gt;
		}&lt;br /&gt;
		else if(dflt.type == &amp;quot;string&amp;quot;) {&lt;br /&gt;
			quickpresets_addstringstatement(qid, dflt.pid, dflt.name, $(this).prev('input')[0].value);&lt;br /&gt;
		}&lt;br /&gt;
	    });&lt;br /&gt;
&lt;br /&gt;
	// Add links for all preset-values…&lt;br /&gt;
	dflt.values.forEach(function(val) {&lt;br /&gt;
	    $(&amp;quot;&amp;lt;span&amp;gt;&amp;amp;nbsp;&amp;lt;a href='#'&amp;gt;&amp;lt;/a&amp;gt;&amp;amp;nbsp;∙&amp;lt;/span&amp;gt;&amp;quot;)&lt;br /&gt;
		.appendTo($line.find('span.links'))&lt;br /&gt;
		.find('a')&lt;br /&gt;
		.text(val.name)&lt;br /&gt;
		.on('click', function(e) {&lt;br /&gt;
		    e.preventDefault();&lt;br /&gt;
		    if(dflt.type == &amp;quot;item&amp;quot;) {&lt;br /&gt;
			quickpresets_additemstatement(qid, dflt.pid, dflt.name, val.qid, val.name);&lt;br /&gt;
		    }&lt;br /&gt;
		    else if(dflt.type == &amp;quot;string&amp;quot;) {&lt;br /&gt;
			quickpresets_addstringstatement(qid, dflt.pid, dflt.name, val.text);&lt;br /&gt;
		    }&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    setTimeout(quickpresets_loadentityselector, 100);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a formated claim and in case of success show succtext&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addclaim(claim, succtext) {&lt;br /&gt;
    var api = new mw.Api();&lt;br /&gt;
    var token = mw.user.tokens.values.csrfToken;&lt;br /&gt;
    api.post( { &lt;br /&gt;
	action: 'wbsetclaim',&lt;br /&gt;
	summary: &amp;quot;Added with [[MediaWiki:Gadget-QuickPresets.js|Quickpresets]]&amp;quot;,&lt;br /&gt;
	claim: JSON.stringify(claim),&lt;br /&gt;
	token: token&lt;br /&gt;
    }).then(&lt;br /&gt;
	function(aw){&lt;br /&gt;
	    if(aw.success == 1)&lt;br /&gt;
		//$('.wikibase-statementgrouplistview').first().after( succtext );&lt;br /&gt;
		mw.notify(succtext);&lt;br /&gt;
	}); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a statement with datatype 'item'&lt;br /&gt;
 * qid: the qid of the item wich should get the statment&lt;br /&gt;
 * pid: the property to add&lt;br /&gt;
 * pname: the name of the property for showing a success-note&lt;br /&gt;
 * toqid: the qid of the item that is used as value&lt;br /&gt;
 * toname: the name of the value-item property for showing a success-note&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_additemstatement(qid, pid, pname, toqid, toname) {&lt;br /&gt;
	var claim = {&lt;br /&gt;
	id: (new wb.utilities.ClaimGuidGenerator(&amp;quot;q&amp;quot; + qid)).newGuid(),&lt;br /&gt;
	type: &amp;quot;claim&amp;quot;,&lt;br /&gt;
	mainsnak: {&lt;br /&gt;
	    snaktype: &amp;quot;value&amp;quot;,&lt;br /&gt;
	    property: &amp;quot;P&amp;quot; + pid,&lt;br /&gt;
	    datavalue: {&lt;br /&gt;
		value: {&lt;br /&gt;
		    &amp;quot;entity-type&amp;quot;: &amp;quot;item&amp;quot;,&lt;br /&gt;
		    &amp;quot;numeric-id&amp;quot;: toqid&lt;br /&gt;
		},&lt;br /&gt;
		type: &amp;quot;wikibase-entityid&amp;quot;&lt;br /&gt;
	    },&lt;br /&gt;
	    datatype: &amp;quot;wikibase-item&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
    };&lt;br /&gt;
    quickpresets_addclaim(claim,  &amp;quot;Added &amp;quot;+pname+&amp;quot; &amp;quot;+toname+&amp;quot;&amp;quot;);&lt;br /&gt;
    // Check if we now support it with another element of the config&lt;br /&gt;
    if(pid == 3) {&lt;br /&gt;
	$('#quickpresets').remove();&lt;br /&gt;
	for( var t = 0; t&amp;lt;quick_props.length; t++) {&lt;br /&gt;
	    if(quick_props[t].qid == toqid) {&lt;br /&gt;
		quickpresets_addinterface(qid, quick_props[t]);&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a statement with datatype 'string'&lt;br /&gt;
 * qid: the qid of the item wich should get the statment&lt;br /&gt;
 * pid: the property to add&lt;br /&gt;
 * pname: the name of the property for showing a success-note&lt;br /&gt;
 * str: the value of the statement&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addstringstatement(qid, pid, pname, str) {&lt;br /&gt;
	var claim = {&lt;br /&gt;
	id: (new wb.utilities.ClaimGuidGenerator(&amp;quot;q&amp;quot; + qid)).newGuid(),&lt;br /&gt;
	type: &amp;quot;claim&amp;quot;,&lt;br /&gt;
	mainsnak: {&lt;br /&gt;
	    snaktype: &amp;quot;value&amp;quot;,&lt;br /&gt;
	    property: &amp;quot;P&amp;quot; + pid,&lt;br /&gt;
	    datatype: &amp;quot;string&amp;quot;,&lt;br /&gt;
	    datavalue: {&lt;br /&gt;
		value: str,&lt;br /&gt;
		type: &amp;quot;string&amp;quot;&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    };&lt;br /&gt;
    quickpresets_addclaim(claim,  &amp;quot;Added &amp;quot;+pname+&amp;quot; &amp;quot;+str+&amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * check if an item is of a type, if so add options&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_checktype(qid, prop) {&lt;br /&gt;
	var typeqid=prop.qid;&lt;br /&gt;
    // Search in HTML-DOM&lt;br /&gt;
    // for each &amp;quot;instance of&amp;quot; value, run this function&lt;br /&gt;
    var typefromdom=$.map($('#P3').find(&amp;quot;.wikibase-snakview-value a&amp;quot;), function(value, index) {&lt;br /&gt;
	if(typeof value.attributes.href === &amp;quot;undefined&amp;quot;)&lt;br /&gt;
	    {&lt;br /&gt;
	        return [];  &lt;br /&gt;
	    }&lt;br /&gt;
	else&lt;br /&gt;
	    {&lt;br /&gt;
	        return [value.attributes.href.value.substring(6)];&lt;br /&gt;
	    }&lt;br /&gt;
    });&lt;br /&gt;
    // typefromdom is now a list of Item:Qxxx, possibly empty&lt;br /&gt;
    if ( typefromdom.length === 0) {&lt;br /&gt;
	    if(typeqid === null) // the null prescription for when there is no &amp;quot;instance of&amp;quot;&lt;br /&gt;
	        {&lt;br /&gt;
	            quickpresets_addinterface(qid, prop);&lt;br /&gt;
	        }&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
	     if ( typeqid === 0 ) {&lt;br /&gt;
	     	// the 0 prescription, applicable to all items which are instance of something&lt;br /&gt;
		    quickpresets_addinterface(qid, prop);&lt;br /&gt;
	     }&lt;br /&gt;
	    else if ( typefromdom.includes(&amp;quot;Item:Q&amp;quot;+typeqid) ) {&lt;br /&gt;
	    	// direct relevance&lt;br /&gt;
		    quickpresets_addinterface(qid, prop);&lt;br /&gt;
	    }&lt;br /&gt;
	    else {&lt;br /&gt;
	    	// indirect relevance, through subclassing&lt;br /&gt;
	        // Now check via sparql (much slower but includes subtypes)&lt;br /&gt;
	        const endpointUrl = 'https://query.personaldata.io/proxy/wdqs/bigdata/namespace/wdq/sparql',&lt;br /&gt;
		    sparqlQuery = 'Ask { pdio:Q' + qid + ' pdiot:P3/pdiot:P4* pdio:Q' + typeqid + '. hint:Prior hint:gearing &amp;quot;forwards&amp;quot; }',&lt;br /&gt;
		    fullUrl = endpointUrl + '?query=' + encodeURIComponent( sparqlQuery ),&lt;br /&gt;
		    headers = { 'Accept': 'application/sparql-results+json' };&lt;br /&gt;
		    debug(&amp;quot;qid: &amp;quot;+ qid + &amp;quot;\ntypeqid: &amp;quot; + typeqid + &amp;quot;\n&amp;quot; + fullUrl + &amp;quot;\n&amp;quot; + sparqlQuery);&lt;br /&gt;
	        fetch( fullUrl, { headers: { 'Accept': 'application/sparql-results+json' } } )&lt;br /&gt;
	        	.then( body =&amp;gt; body.json() )&lt;br /&gt;
	        	.then( json =&amp;gt; { if ( json.boolean ) quickpresets_addinterface(qid, prop); } );&lt;br /&gt;
	    }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * wait for config to be loaded, then execute func&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_waitForConfig(func){&lt;br /&gt;
    if(typeof quick_props !== &amp;quot;undefined&amp;quot;){&lt;br /&gt;
	func();&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
	setTimeout(quickpresets_waitForConfig, 100, func);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$( function($) {&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Check if we're viewing an item&lt;br /&gt;
     */&lt;br /&gt;
    var qid = mw.config.get( 'wbEntityId' );&lt;br /&gt;
    if ( !qid ) {&lt;br /&gt;
	    return;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
	qid = qid.substring(1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * check if item is a of right kind&lt;br /&gt;
     */&lt;br /&gt;
    quickpresets_waitForConfig(function() {&lt;br /&gt;
	for( var t = 0; t&amp;lt;quick_props.length; t++) {&lt;br /&gt;
	    quickpresets_checktype(qid, quick_props[t]);&lt;br /&gt;
	}&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
} );&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=MediaWiki:Gadget-QuickPresets.js&amp;diff=74598</id>
		<title>MediaWiki:Gadget-QuickPresets.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=MediaWiki:Gadget-QuickPresets.js&amp;diff=74598"/>
		<updated>2020-01-12T11:19:42Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: Undo revision 74593 by Stenli karanxha (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// taken from https://www.wikidata.org/wiki/User:MichaelSchoenitzer/quickpresets.js&lt;br /&gt;
// non exhaustive list of modifications:&lt;br /&gt;
// P31 and P(subclass) ---&amp;gt; P3 and P4   (see #P31, pid == 3)&lt;br /&gt;
// wd, wdt --&amp;gt; pdio, pdiot&lt;br /&gt;
// importScript and importStyleSheet replaced&lt;br /&gt;
// turned into a common script&lt;br /&gt;
// see doc at [[Gadget-QuickPresets/doc]]&lt;br /&gt;
&lt;br /&gt;
// mw.notify(&amp;quot;QuickPresets&amp;quot;)&lt;br /&gt;
function debug(alert){&lt;br /&gt;
	// mw.notify(alert)&lt;br /&gt;
}&lt;br /&gt;
mw.loader.load( '/w/index.php?title=MediaWiki:Gadget-QuickPresets/defaultconf.css&amp;amp;action=raw&amp;amp;ctype=text/css', 'text/css' );&lt;br /&gt;
&lt;br /&gt;
if( typeof(quick_props)==&amp;quot;undefined&amp;quot; ) {&lt;br /&gt;
    mw.loader.load( '/w/index.php?title=MediaWiki:Gadget-QuickPresets/defaultconf.js&amp;amp;action=raw&amp;amp;ctype=text/javascript' );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Load the entityselector-plugin, try until it works&lt;br /&gt;
 * See: https://stackoverflow.com/questions/47985370/&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_loadentityselector(){&lt;br /&gt;
    try {&lt;br /&gt;
	$( &amp;quot;.quickpresetsiteminput input&amp;quot; ).entityselector( {&lt;br /&gt;
	    url: 'https://wiki.personaldata.io/w/api.php',&lt;br /&gt;
	    language: mw.config.get('wgUserLanguage')&lt;br /&gt;
	} );&lt;br /&gt;
    }&lt;br /&gt;
    catch(err) {&lt;br /&gt;
	setTimeout(quickpresets_loadentityselector, 100);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add the interface wich alows to quickly add statements&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addinterface(qid, prop) {&lt;br /&gt;
    // compose and intert fieldset.&lt;br /&gt;
    var $fieldset = $(&amp;quot;&amp;lt;fieldset id=\&amp;quot;quickpresets\&amp;quot;&amp;gt;&amp;lt;legend&amp;gt;Quick Presets (&amp;quot; + prop.name + &amp;quot;)&amp;lt;/legend&amp;gt;&amp;lt;/fieldset&amp;gt;&amp;quot;)&lt;br /&gt;
	.insertAfter($('.wikibase-statementgrouplistview').first());&lt;br /&gt;
&lt;br /&gt;
    prop.defaults.forEach(function(dflt) {&lt;br /&gt;
	if(typeof dflt.type == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	    dflt.type = &amp;quot;item&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	var $line = $(&amp;quot;&amp;lt;div&amp;gt;&amp;lt;p class='addstatement'&amp;gt;Add &amp;quot;+dflt.name+&amp;quot;:&amp;lt;span class='links'&amp;gt;&amp;lt;/span&amp;gt;&amp;quot; + &lt;br /&gt;
	    &amp;quot;&amp;lt;span class='quickpresets&amp;quot; + dflt.type + &amp;quot;input'&amp;gt;&amp;amp;nbsp;&amp;lt;input/&amp;gt;&amp;amp;nbsp;&amp;quot; +&lt;br /&gt;
	    &amp;quot;&amp;lt;a href=\'#\'&amp;gt;✔&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
	).appendTo($fieldset);&lt;br /&gt;
	if($('#P'+dflt.pid).find(&amp;quot;.wikibase-snakview-value a&amp;quot;).length !== 0) {&lt;br /&gt;
	    $line.addClass('disabled');&lt;br /&gt;
	}&lt;br /&gt;
	if(dflt.values.length === 0) {&lt;br /&gt;
	    $line.addClass('compact');&lt;br /&gt;
	}&lt;br /&gt;
	$line.find('.quickpresets' + dflt.type + 'input a')&lt;br /&gt;
	    .on('click', function(e) {&lt;br /&gt;
		e.preventDefault();&lt;br /&gt;
		if(dflt.type == &amp;quot;item&amp;quot;) {&lt;br /&gt;
		    var selection = $(this).prev('input').data('entityselector').selectedEntity();&lt;br /&gt;
		    quickpresets_additemstatement(qid, dflt.pid, dflt.name, selection.id.substring(1), selection.label);&lt;br /&gt;
		}&lt;br /&gt;
		else if(dflt.type == &amp;quot;string&amp;quot;) {&lt;br /&gt;
			quickpresets_addstringstatement(qid, dflt.pid, dflt.name, $(this).prev('input')[0].value);&lt;br /&gt;
		}&lt;br /&gt;
	    });&lt;br /&gt;
&lt;br /&gt;
	// Add links for all preset-values…&lt;br /&gt;
	dflt.values.forEach(function(val) {&lt;br /&gt;
	    $(&amp;quot;&amp;lt;span&amp;gt;&amp;amp;nbsp;&amp;lt;a href='#'&amp;gt;&amp;lt;/a&amp;gt;&amp;amp;nbsp;∙&amp;lt;/span&amp;gt;&amp;quot;)&lt;br /&gt;
		.appendTo($line.find('span.links'))&lt;br /&gt;
		.find('a')&lt;br /&gt;
		.text(val.name)&lt;br /&gt;
		.on('click', function(e) {&lt;br /&gt;
		    e.preventDefault();&lt;br /&gt;
		    if(dflt.type == &amp;quot;item&amp;quot;) {&lt;br /&gt;
			quickpresets_additemstatement(qid, dflt.pid, dflt.name, val.qid, val.name);&lt;br /&gt;
		    }&lt;br /&gt;
		    else if(dflt.type == &amp;quot;string&amp;quot;) {&lt;br /&gt;
			quickpresets_addstringstatement(qid, dflt.pid, dflt.name, val.text);&lt;br /&gt;
		    }&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    setTimeout(quickpresets_loadentityselector, 100);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a formated claim and in case of success show succtext&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addclaim(claim, succtext) {&lt;br /&gt;
    var api = new mw.Api();&lt;br /&gt;
    var token = mw.user.tokens.values.csrfToken;&lt;br /&gt;
    api.post( { &lt;br /&gt;
	action: 'wbsetclaim',&lt;br /&gt;
	summary: &amp;quot;Added with [[MediaWiki:Gadget-QuickPresets.js|Quickpresets]]&amp;quot;,&lt;br /&gt;
	claim: JSON.stringify(claim),&lt;br /&gt;
	token: token&lt;br /&gt;
    }).then(&lt;br /&gt;
	function(aw){&lt;br /&gt;
	    if(aw.success == 1)&lt;br /&gt;
		//$('.wikibase-statementgrouplistview').first().after( succtext );&lt;br /&gt;
		mw.notify(succtext);&lt;br /&gt;
	}); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a statement with datatype 'item'&lt;br /&gt;
 * qid: the qid of the item wich should get the statment&lt;br /&gt;
 * pid: the property to add&lt;br /&gt;
 * pname: the name of the property for showing a success-note&lt;br /&gt;
 * toqid: the qid of the item that is used as value&lt;br /&gt;
 * toname: the name of the value-item property for showing a success-note&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_additemstatement(qid, pid, pname, toqid, toname) {&lt;br /&gt;
	var claim = {&lt;br /&gt;
	id: (new wb.utilities.ClaimGuidGenerator(&amp;quot;q&amp;quot; + qid)).newGuid(),&lt;br /&gt;
	type: &amp;quot;claim&amp;quot;,&lt;br /&gt;
	mainsnak: {&lt;br /&gt;
	    snaktype: &amp;quot;value&amp;quot;,&lt;br /&gt;
	    property: &amp;quot;P&amp;quot; + pid,&lt;br /&gt;
	    datavalue: {&lt;br /&gt;
		value: {&lt;br /&gt;
		    &amp;quot;entity-type&amp;quot;: &amp;quot;item&amp;quot;,&lt;br /&gt;
		    &amp;quot;numeric-id&amp;quot;: toqid&lt;br /&gt;
		},&lt;br /&gt;
		type: &amp;quot;wikibase-entityid&amp;quot;&lt;br /&gt;
	    },&lt;br /&gt;
	    datatype: &amp;quot;wikibase-item&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
    };&lt;br /&gt;
    quickpresets_addclaim(claim,  &amp;quot;Added &amp;quot;+pname+&amp;quot; &amp;quot;+toname+&amp;quot;&amp;quot;);&lt;br /&gt;
    // Check if we now support it with another element of the config&lt;br /&gt;
    if(pid == 3) {&lt;br /&gt;
	$('#quickpresets').remove();&lt;br /&gt;
	for( var t = 0; t&amp;lt;quick_props.length; t++) {&lt;br /&gt;
	    if(quick_props[t].qid == toqid) {&lt;br /&gt;
		quickpresets_addinterface(qid, quick_props[t]);&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a statement with datatype 'string'&lt;br /&gt;
 * qid: the qid of the item wich should get the statment&lt;br /&gt;
 * pid: the property to add&lt;br /&gt;
 * pname: the name of the property for showing a success-note&lt;br /&gt;
 * str: the value of the statement&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addstringstatement(qid, pid, pname, str) {&lt;br /&gt;
	var claim = {&lt;br /&gt;
	id: (new wb.utilities.ClaimGuidGenerator(&amp;quot;q&amp;quot; + qid)).newGuid(),&lt;br /&gt;
	type: &amp;quot;claim&amp;quot;,&lt;br /&gt;
	mainsnak: {&lt;br /&gt;
	    snaktype: &amp;quot;value&amp;quot;,&lt;br /&gt;
	    property: &amp;quot;P&amp;quot; + pid,&lt;br /&gt;
	    datatype: &amp;quot;string&amp;quot;,&lt;br /&gt;
	    datavalue: {&lt;br /&gt;
		value: str,&lt;br /&gt;
		type: &amp;quot;string&amp;quot;&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    };&lt;br /&gt;
    quickpresets_addclaim(claim,  &amp;quot;Added &amp;quot;+pname+&amp;quot; &amp;quot;+str+&amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * check if an item is of a type, if so add options&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_checktype(qid, prop) {&lt;br /&gt;
	var typeqid=prop.qid;&lt;br /&gt;
    // Search in HTML-DOM&lt;br /&gt;
    // for each &amp;quot;instance of&amp;quot; value, run this function&lt;br /&gt;
    var typefromdom=$.map($('#P3').find(&amp;quot;.wikibase-snakview-value a&amp;quot;), function(value, index) {&lt;br /&gt;
	if(typeof value.attributes.href === &amp;quot;undefined&amp;quot;)&lt;br /&gt;
	    {&lt;br /&gt;
	        return [];  &lt;br /&gt;
	    }&lt;br /&gt;
	else&lt;br /&gt;
	    {&lt;br /&gt;
	        return [value.attributes.href.value.substring(6)];&lt;br /&gt;
	    }&lt;br /&gt;
    });&lt;br /&gt;
    // typefromdom is now a list of Item:Qxxx, possibly empty&lt;br /&gt;
    if ( typefromdom.length === 0) {&lt;br /&gt;
	    if(typeqid === null) // the null prescription for when there is no &amp;quot;instance of&amp;quot;&lt;br /&gt;
	        {&lt;br /&gt;
	            quickpresets_addinterface(qid, prop);&lt;br /&gt;
	        }&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
	     if ( typeqid === 0 ) {&lt;br /&gt;
	     	// the 0 prescription, applicable to all items which are instance of something&lt;br /&gt;
		    quickpresets_addinterface(qid, prop);&lt;br /&gt;
	     }&lt;br /&gt;
	    else if ( typefromdom.includes(&amp;quot;Item:Q&amp;quot;+typeqid) ) {&lt;br /&gt;
	    	// direct relevance&lt;br /&gt;
		    quickpresets_addinterface(qid, prop);&lt;br /&gt;
	    }&lt;br /&gt;
	    else {&lt;br /&gt;
	    	// indirect relevance, through subclassing&lt;br /&gt;
	        // Now check via sparql (much slower but includes subtypes)&lt;br /&gt;
	        const endpointUrl = 'https://query.personaldata.io/proxy/wdqs/bigdata/namespace/wdq/sparql',&lt;br /&gt;
		    sparqlQuery = 'Ask { pdio:Q' + qid + ' pdiot:P3/pdiot:P4* pdio:Q' + typeqid + '. hint:Prior hint:gearing &amp;quot;forwards&amp;quot; }',&lt;br /&gt;
		    fullUrl = endpointUrl + '?query=' + encodeURIComponent( sparqlQuery ),&lt;br /&gt;
		    headers = { 'Accept': 'application/sparql-results+json' };&lt;br /&gt;
		    debug(&amp;quot;qid: &amp;quot;+ qid + &amp;quot;\ntypeqid: &amp;quot; + typeqid + &amp;quot;\n&amp;quot; + fullUrl + &amp;quot;\n&amp;quot; + sparqlQuery);&lt;br /&gt;
	        fetch( fullUrl, { headers } ).then( body =&amp;gt; body.json() ).then( json =&amp;gt; {&lt;br /&gt;
		    if ( json.boolean )&lt;br /&gt;
		        quickpresets_addinterface(qid, prop);&lt;br /&gt;
	       } );&lt;br /&gt;
	    }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * wait for config to be loaded, then execute func&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_waitForConfig(func){&lt;br /&gt;
    if(typeof quick_props !== &amp;quot;undefined&amp;quot;){&lt;br /&gt;
	func();&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
	setTimeout(quickpresets_waitForConfig, 100, func);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$( function($) {&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Check if we're viewing an item&lt;br /&gt;
     */&lt;br /&gt;
    var qid = mw.config.get( 'wbEntityId' );&lt;br /&gt;
    if ( !qid ) {&lt;br /&gt;
	    return;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
	qid = qid.substring(1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * check if item is a of right kind&lt;br /&gt;
     */&lt;br /&gt;
    quickpresets_waitForConfig(function() {&lt;br /&gt;
	for( var t = 0; t&amp;lt;quick_props.length; t++) {&lt;br /&gt;
	    quickpresets_checktype(qid, quick_props[t]);&lt;br /&gt;
	}&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
} );&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=MediaWiki:Gadget-QuickPresets.js&amp;diff=74597</id>
		<title>MediaWiki:Gadget-QuickPresets.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=MediaWiki:Gadget-QuickPresets.js&amp;diff=74597"/>
		<updated>2020-01-12T11:19:15Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: Undo revision 74596 by Stenli karanxha (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// taken from https://www.wikidata.org/wiki/User:MichaelSchoenitzer/quickpresets.js&lt;br /&gt;
// non exhaustive list of modifications:&lt;br /&gt;
// P31 and P(subclass) ---&amp;gt; P3 and P4   (see #P31, pid == 3)&lt;br /&gt;
// wd, wdt --&amp;gt; pdio, pdiot&lt;br /&gt;
// importScript and importStyleSheet replaced&lt;br /&gt;
// turned into a common script&lt;br /&gt;
// see doc at [[Gadget-QuickPresets/doc]]&lt;br /&gt;
&lt;br /&gt;
// mw.notify(&amp;quot;QuickPresets&amp;quot;)&lt;br /&gt;
function debug(alert){&lt;br /&gt;
	// mw.notify(alert)&lt;br /&gt;
}&lt;br /&gt;
mw.loader.load( '/w/index.php?title=MediaWiki:Gadget-QuickPresets/defaultconf.css&amp;amp;action=raw&amp;amp;ctype=text/css', 'text/css' );&lt;br /&gt;
&lt;br /&gt;
if( typeof(quick_props)==&amp;quot;undefined&amp;quot; ) {&lt;br /&gt;
    mw.loader.load( '/w/index.php?title=MediaWiki:Gadget-QuickPresets/defaultconf.js&amp;amp;action=raw&amp;amp;ctype=text/javascript' );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Load the entityselector-plugin, try until it works&lt;br /&gt;
 * See: https://stackoverflow.com/questions/47985370/&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_loadentityselector(){&lt;br /&gt;
    try {&lt;br /&gt;
	$( &amp;quot;.quickpresetsiteminput input&amp;quot; ).entityselector( {&lt;br /&gt;
	    url: 'https://wiki.personaldata.io/w/api.php',&lt;br /&gt;
	    language: mw.config.get('wgUserLanguage')&lt;br /&gt;
	} );&lt;br /&gt;
    }&lt;br /&gt;
    catch(err) {&lt;br /&gt;
	setTimeout(quickpresets_loadentityselector, 100);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add the interface wich alows to quickly add statements&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addinterface(qid, prop) {&lt;br /&gt;
    // compose and intert fieldset.&lt;br /&gt;
    var $fieldset = $(&amp;quot;&amp;lt;fieldset id=\&amp;quot;quickpresets\&amp;quot;&amp;gt;&amp;lt;legend&amp;gt;Quick Presets (&amp;quot; + prop.name + &amp;quot;)&amp;lt;/legend&amp;gt;&amp;lt;/fieldset&amp;gt;&amp;quot;)&lt;br /&gt;
	.insertAfter($('.wikibase-statementgrouplistview').first());&lt;br /&gt;
&lt;br /&gt;
    prop.defaults.forEach(function(dflt) {&lt;br /&gt;
	if(typeof dflt.type == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	    dflt.type = &amp;quot;item&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	var $line = $(&amp;quot;&amp;lt;div&amp;gt;&amp;lt;p class='addstatement'&amp;gt;Add &amp;quot;+dflt.name+&amp;quot;:&amp;lt;span class='links'&amp;gt;&amp;lt;/span&amp;gt;&amp;quot; + &lt;br /&gt;
	    &amp;quot;&amp;lt;span class='quickpresets&amp;quot; + dflt.type + &amp;quot;input'&amp;gt;&amp;amp;nbsp;&amp;lt;input/&amp;gt;&amp;amp;nbsp;&amp;quot; +&lt;br /&gt;
	    &amp;quot;&amp;lt;a href=\'#\'&amp;gt;✔&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
	).appendTo($fieldset);&lt;br /&gt;
	if($('#P'+dflt.pid).find(&amp;quot;.wikibase-snakview-value a&amp;quot;).length !== 0) {&lt;br /&gt;
	    $line.addClass('disabled');&lt;br /&gt;
	}&lt;br /&gt;
	if(dflt.values.length === 0) {&lt;br /&gt;
	    $line.addClass('compact');&lt;br /&gt;
	}&lt;br /&gt;
	$line.find('.quickpresets' + dflt.type + 'input a')&lt;br /&gt;
	    .on('click', function(e) {&lt;br /&gt;
		e.preventDefault();&lt;br /&gt;
		if(dflt.type == &amp;quot;item&amp;quot;) {&lt;br /&gt;
		    var selection = $(this).prev('input').data('entityselector').selectedEntity();&lt;br /&gt;
		    quickpresets_additemstatement(qid, dflt.pid, dflt.name, selection.id.substring(1), selection.label);&lt;br /&gt;
		}&lt;br /&gt;
		else if(dflt.type == &amp;quot;string&amp;quot;) {&lt;br /&gt;
			quickpresets_addstringstatement(qid, dflt.pid, dflt.name, $(this).prev('input')[0].value);&lt;br /&gt;
		}&lt;br /&gt;
	    });&lt;br /&gt;
&lt;br /&gt;
	// Add links for all preset-values…&lt;br /&gt;
	dflt.values.forEach(function(val) {&lt;br /&gt;
	    $(&amp;quot;&amp;lt;span&amp;gt;&amp;amp;nbsp;&amp;lt;a href='#'&amp;gt;&amp;lt;/a&amp;gt;&amp;amp;nbsp;∙&amp;lt;/span&amp;gt;&amp;quot;)&lt;br /&gt;
		.appendTo($line.find('span.links'))&lt;br /&gt;
		.find('a')&lt;br /&gt;
		.text(val.name)&lt;br /&gt;
		.on('click', function(e) {&lt;br /&gt;
		    e.preventDefault();&lt;br /&gt;
		    if(dflt.type == &amp;quot;item&amp;quot;) {&lt;br /&gt;
			quickpresets_additemstatement(qid, dflt.pid, dflt.name, val.qid, val.name);&lt;br /&gt;
		    }&lt;br /&gt;
		    else if(dflt.type == &amp;quot;string&amp;quot;) {&lt;br /&gt;
			quickpresets_addstringstatement(qid, dflt.pid, dflt.name, val.text);&lt;br /&gt;
		    }&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    setTimeout(quickpresets_loadentityselector, 100);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a formated claim and in case of success show succtext&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addclaim(claim, succtext) {&lt;br /&gt;
    var api = new mw.Api();&lt;br /&gt;
    var token = mw.user.tokens.values.csrfToken;&lt;br /&gt;
    api.post( { &lt;br /&gt;
	action: 'wbsetclaim',&lt;br /&gt;
	summary: &amp;quot;Added with [[MediaWiki:Gadget-QuickPresets.js|Quickpresets]]&amp;quot;,&lt;br /&gt;
	claim: JSON.stringify(claim),&lt;br /&gt;
	token: token&lt;br /&gt;
    }).then(&lt;br /&gt;
	function(aw){&lt;br /&gt;
	    if(aw.success == 1)&lt;br /&gt;
		//$('.wikibase-statementgrouplistview').first().after( succtext );&lt;br /&gt;
		mw.notify(succtext);&lt;br /&gt;
	}); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a statement with datatype 'item'&lt;br /&gt;
 * qid: the qid of the item wich should get the statment&lt;br /&gt;
 * pid: the property to add&lt;br /&gt;
 * pname: the name of the property for showing a success-note&lt;br /&gt;
 * toqid: the qid of the item that is used as value&lt;br /&gt;
 * toname: the name of the value-item property for showing a success-note&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_additemstatement(qid, pid, pname, toqid, toname) {&lt;br /&gt;
	var claim = {&lt;br /&gt;
	id: (new wb.utilities.ClaimGuidGenerator(&amp;quot;q&amp;quot; + qid)).newGuid(),&lt;br /&gt;
	type: &amp;quot;claim&amp;quot;,&lt;br /&gt;
	mainsnak: {&lt;br /&gt;
	    snaktype: &amp;quot;value&amp;quot;,&lt;br /&gt;
	    property: &amp;quot;P&amp;quot; + pid,&lt;br /&gt;
	    datavalue: {&lt;br /&gt;
		value: {&lt;br /&gt;
		    &amp;quot;entity-type&amp;quot;: &amp;quot;item&amp;quot;,&lt;br /&gt;
		    &amp;quot;numeric-id&amp;quot;: toqid&lt;br /&gt;
		},&lt;br /&gt;
		type: &amp;quot;wikibase-entityid&amp;quot;&lt;br /&gt;
	    },&lt;br /&gt;
	    datatype: &amp;quot;wikibase-item&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
    };&lt;br /&gt;
    quickpresets_addclaim(claim,  &amp;quot;Added &amp;quot;+pname+&amp;quot; &amp;quot;+toname+&amp;quot;&amp;quot;);&lt;br /&gt;
    // Check if we now support it with another element of the config&lt;br /&gt;
    if(pid == 3) {&lt;br /&gt;
	$('#quickpresets').remove();&lt;br /&gt;
	for( var t = 0; t&amp;lt;quick_props.length; t++) {&lt;br /&gt;
	    if(quick_props[t].qid == toqid) {&lt;br /&gt;
		quickpresets_addinterface(qid, quick_props[t]);&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a statement with datatype 'string'&lt;br /&gt;
 * qid: the qid of the item wich should get the statment&lt;br /&gt;
 * pid: the property to add&lt;br /&gt;
 * pname: the name of the property for showing a success-note&lt;br /&gt;
 * str: the value of the statement&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addstringstatement(qid, pid, pname, str) {&lt;br /&gt;
	var claim = {&lt;br /&gt;
	id: (new wb.utilities.ClaimGuidGenerator(&amp;quot;q&amp;quot; + qid)).newGuid(),&lt;br /&gt;
	type: &amp;quot;claim&amp;quot;,&lt;br /&gt;
	mainsnak: {&lt;br /&gt;
	    snaktype: &amp;quot;value&amp;quot;,&lt;br /&gt;
	    property: &amp;quot;P&amp;quot; + pid,&lt;br /&gt;
	    datatype: &amp;quot;string&amp;quot;,&lt;br /&gt;
	    datavalue: {&lt;br /&gt;
		value: str,&lt;br /&gt;
		type: &amp;quot;string&amp;quot;&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    };&lt;br /&gt;
    quickpresets_addclaim(claim,  &amp;quot;Added &amp;quot;+pname+&amp;quot; &amp;quot;+str+&amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * check if an item is of a type, if so add options&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_checktype(qid, prop) {&lt;br /&gt;
	var typeqid=prop.qid;&lt;br /&gt;
    // Search in HTML-DOM&lt;br /&gt;
    // for each &amp;quot;instance of&amp;quot; value, run this function&lt;br /&gt;
    var typefromdom=$.map($('#P3').find(&amp;quot;.wikibase-snakview-value a&amp;quot;), function(value, index) {&lt;br /&gt;
	if(typeof value.attributes.href === &amp;quot;undefined&amp;quot;)&lt;br /&gt;
	    {&lt;br /&gt;
	        return [];  &lt;br /&gt;
	    }&lt;br /&gt;
	else&lt;br /&gt;
	    {&lt;br /&gt;
	        return [value.attributes.href.value.substring(6)];&lt;br /&gt;
	    }&lt;br /&gt;
    });&lt;br /&gt;
    // typefromdom is now a list of Item:Qxxx, possibly empty&lt;br /&gt;
    if ( typefromdom.length === 0) {&lt;br /&gt;
	    if(typeqid === null) // the null prescription for when there is no &amp;quot;instance of&amp;quot;&lt;br /&gt;
	        {&lt;br /&gt;
	            quickpresets_addinterface(qid, prop);&lt;br /&gt;
	        }&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
	     if ( typeqid === 0 ) {&lt;br /&gt;
	     	// the 0 prescription, applicable to all items which are instance of something&lt;br /&gt;
		    quickpresets_addinterface(qid, prop);&lt;br /&gt;
	     }&lt;br /&gt;
	    else if ( typefromdom.includes(&amp;quot;Item:Q&amp;quot;+typeqid) ) {&lt;br /&gt;
	    	// direct relevance&lt;br /&gt;
		    quickpresets_addinterface(qid, prop);&lt;br /&gt;
	    }&lt;br /&gt;
	    else {&lt;br /&gt;
	    	// indirect relevance, through subclassing&lt;br /&gt;
	        // Now check via sparql (much slower but includes subtypes)&lt;br /&gt;
	        const endpointUrl = 'https://query.personaldata.io/proxy/wdqs/bigdata/namespace/wdq/sparql',&lt;br /&gt;
		    sparqlQuery = 'Ask { pdio:Q' + qid + ' pdiot:P3/pdiot:P4* pdio:Q' + typeqid + '. hint:Prior hint:gearing &amp;quot;forwards&amp;quot; }',&lt;br /&gt;
		    fullUrl = endpointUrl + '?query=' + encodeURIComponent( sparqlQuery ),&lt;br /&gt;
		    myHeaders = { 'Accept': 'application/sparql-results+json' };&lt;br /&gt;
		    debug(&amp;quot;qid: &amp;quot;+ qid + &amp;quot;\ntypeqid: &amp;quot; + typeqid + &amp;quot;\n&amp;quot; + fullUrl + &amp;quot;\n&amp;quot; + sparqlQuery);&lt;br /&gt;
	        fetch( fullUrl, { headers:myHeaders } ).then( body =&amp;gt; body.json() ).then( json =&amp;gt; {&lt;br /&gt;
		    if ( json.boolean )&lt;br /&gt;
		        quickpresets_addinterface(qid, prop);&lt;br /&gt;
	       } );&lt;br /&gt;
	    }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * wait for config to be loaded, then execute func&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_waitForConfig(func){&lt;br /&gt;
    if(typeof quick_props !== &amp;quot;undefined&amp;quot;){&lt;br /&gt;
	func();&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
	setTimeout(quickpresets_waitForConfig, 100, func);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$( function($) {&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Check if we're viewing an item&lt;br /&gt;
     */&lt;br /&gt;
    var qid = mw.config.get( 'wbEntityId' );&lt;br /&gt;
    if ( !qid ) {&lt;br /&gt;
	    return;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
	qid = qid.substring(1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * check if item is a of right kind&lt;br /&gt;
     */&lt;br /&gt;
    quickpresets_waitForConfig(function() {&lt;br /&gt;
	for( var t = 0; t&amp;lt;quick_props.length; t++) {&lt;br /&gt;
	    quickpresets_checktype(qid, quick_props[t]);&lt;br /&gt;
	}&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
} );&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=MediaWiki:Gadget-QuickPresets.js&amp;diff=74596</id>
		<title>MediaWiki:Gadget-QuickPresets.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=MediaWiki:Gadget-QuickPresets.js&amp;diff=74596"/>
		<updated>2020-01-12T11:18:42Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// taken from https://www.wikidata.org/wiki/User:MichaelSchoenitzer/quickpresets.js&lt;br /&gt;
// non exhaustive list of modifications:&lt;br /&gt;
// P31 and P(subclass) ---&amp;gt; P3 and P4   (see #P31, pid == 3)&lt;br /&gt;
// wd, wdt --&amp;gt; pdio, pdiot&lt;br /&gt;
// importScript and importStyleSheet replaced&lt;br /&gt;
// turned into a common script&lt;br /&gt;
// see doc at [[Gadget-QuickPresets/doc]]&lt;br /&gt;
&lt;br /&gt;
// mw.notify(&amp;quot;QuickPresets&amp;quot;)&lt;br /&gt;
function debug(alert){&lt;br /&gt;
	// mw.notify(alert)&lt;br /&gt;
}&lt;br /&gt;
mw.loader.load( '/w/index.php?title=MediaWiki:Gadget-QuickPresets/defaultconf.css&amp;amp;action=raw&amp;amp;ctype=text/css', 'text/css' );&lt;br /&gt;
&lt;br /&gt;
if( typeof(quick_props)==&amp;quot;undefined&amp;quot; ) {&lt;br /&gt;
    mw.loader.load( '/w/index.php?title=MediaWiki:Gadget-QuickPresets/defaultconf.js&amp;amp;action=raw&amp;amp;ctype=text/javascript' );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Load the entityselector-plugin, try until it works&lt;br /&gt;
 * See: https://stackoverflow.com/questions/47985370/&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_loadentityselector(){&lt;br /&gt;
    try {&lt;br /&gt;
	$( &amp;quot;.quickpresetsiteminput input&amp;quot; ).entityselector( {&lt;br /&gt;
	    url: 'https://wiki.personaldata.io/w/api.php',&lt;br /&gt;
	    language: mw.config.get('wgUserLanguage')&lt;br /&gt;
	} );&lt;br /&gt;
    }&lt;br /&gt;
    catch(err) {&lt;br /&gt;
	setTimeout(quickpresets_loadentityselector, 100);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add the interface wich alows to quickly add statements&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addinterface(qid, prop) {&lt;br /&gt;
    // compose and intert fieldset.&lt;br /&gt;
    var $fieldset = $(&amp;quot;&amp;lt;fieldset id=\&amp;quot;quickpresets\&amp;quot;&amp;gt;&amp;lt;legend&amp;gt;Quick Presets (&amp;quot; + prop.name + &amp;quot;)&amp;lt;/legend&amp;gt;&amp;lt;/fieldset&amp;gt;&amp;quot;)&lt;br /&gt;
	.insertAfter($('.wikibase-statementgrouplistview').first());&lt;br /&gt;
&lt;br /&gt;
    prop.defaults.forEach(function(dflt) {&lt;br /&gt;
	if(typeof dflt.type == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	    dflt.type = &amp;quot;item&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	var $line = $(&amp;quot;&amp;lt;div&amp;gt;&amp;lt;p class='addstatement'&amp;gt;Add &amp;quot;+dflt.name+&amp;quot;:&amp;lt;span class='links'&amp;gt;&amp;lt;/span&amp;gt;&amp;quot; + &lt;br /&gt;
	    &amp;quot;&amp;lt;span class='quickpresets&amp;quot; + dflt.type + &amp;quot;input'&amp;gt;&amp;amp;nbsp;&amp;lt;input/&amp;gt;&amp;amp;nbsp;&amp;quot; +&lt;br /&gt;
	    &amp;quot;&amp;lt;a href=\'#\'&amp;gt;✔&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
	).appendTo($fieldset);&lt;br /&gt;
	if($('#P'+dflt.pid).find(&amp;quot;.wikibase-snakview-value a&amp;quot;).length !== 0) {&lt;br /&gt;
	    $line.addClass('disabled');&lt;br /&gt;
	}&lt;br /&gt;
	if(dflt.values.length === 0) {&lt;br /&gt;
	    $line.addClass('compact');&lt;br /&gt;
	}&lt;br /&gt;
	$line.find('.quickpresets' + dflt.type + 'input a')&lt;br /&gt;
	    .on('click', function(e) {&lt;br /&gt;
		e.preventDefault();&lt;br /&gt;
		if(dflt.type == &amp;quot;item&amp;quot;) {&lt;br /&gt;
		    var selection = $(this).prev('input').data('entityselector').selectedEntity();&lt;br /&gt;
		    quickpresets_additemstatement(qid, dflt.pid, dflt.name, selection.id.substring(1), selection.label);&lt;br /&gt;
		}&lt;br /&gt;
		else if(dflt.type == &amp;quot;string&amp;quot;) {&lt;br /&gt;
			quickpresets_addstringstatement(qid, dflt.pid, dflt.name, $(this).prev('input')[0].value);&lt;br /&gt;
		}&lt;br /&gt;
	    });&lt;br /&gt;
&lt;br /&gt;
	// Add links for all preset-values…&lt;br /&gt;
	dflt.values.forEach(function(val) {&lt;br /&gt;
	    $(&amp;quot;&amp;lt;span&amp;gt;&amp;amp;nbsp;&amp;lt;a href='#'&amp;gt;&amp;lt;/a&amp;gt;&amp;amp;nbsp;∙&amp;lt;/span&amp;gt;&amp;quot;)&lt;br /&gt;
		.appendTo($line.find('span.links'))&lt;br /&gt;
		.find('a')&lt;br /&gt;
		.text(val.name)&lt;br /&gt;
		.on('click', function(e) {&lt;br /&gt;
		    e.preventDefault();&lt;br /&gt;
		    if(dflt.type == &amp;quot;item&amp;quot;) {&lt;br /&gt;
			quickpresets_additemstatement(qid, dflt.pid, dflt.name, val.qid, val.name);&lt;br /&gt;
		    }&lt;br /&gt;
		    else if(dflt.type == &amp;quot;string&amp;quot;) {&lt;br /&gt;
			quickpresets_addstringstatement(qid, dflt.pid, dflt.name, val.text);&lt;br /&gt;
		    }&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    setTimeout(quickpresets_loadentityselector, 100);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a formated claim and in case of success show succtext&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addclaim(claim, succtext) {&lt;br /&gt;
    var api = new mw.Api();&lt;br /&gt;
    var token = mw.user.tokens.values.csrfToken;&lt;br /&gt;
    api.post( { &lt;br /&gt;
	action: 'wbsetclaim',&lt;br /&gt;
	summary: &amp;quot;Added with [[MediaWiki:Gadget-QuickPresets.js|Quickpresets]]&amp;quot;,&lt;br /&gt;
	claim: JSON.stringify(claim),&lt;br /&gt;
	token: token&lt;br /&gt;
    }).then(&lt;br /&gt;
	function(aw){&lt;br /&gt;
	    if(aw.success == 1)&lt;br /&gt;
		//$('.wikibase-statementgrouplistview').first().after( succtext );&lt;br /&gt;
		mw.notify(succtext);&lt;br /&gt;
	}); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a statement with datatype 'item'&lt;br /&gt;
 * qid: the qid of the item wich should get the statment&lt;br /&gt;
 * pid: the property to add&lt;br /&gt;
 * pname: the name of the property for showing a success-note&lt;br /&gt;
 * toqid: the qid of the item that is used as value&lt;br /&gt;
 * toname: the name of the value-item property for showing a success-note&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_additemstatement(qid, pid, pname, toqid, toname) {&lt;br /&gt;
	var claim = {&lt;br /&gt;
	id: (new wb.utilities.ClaimGuidGenerator(&amp;quot;q&amp;quot; + qid)).newGuid(),&lt;br /&gt;
	type: &amp;quot;claim&amp;quot;,&lt;br /&gt;
	mainsnak: {&lt;br /&gt;
	    snaktype: &amp;quot;value&amp;quot;,&lt;br /&gt;
	    property: &amp;quot;P&amp;quot; + pid,&lt;br /&gt;
	    datavalue: {&lt;br /&gt;
		value: {&lt;br /&gt;
		    &amp;quot;entity-type&amp;quot;: &amp;quot;item&amp;quot;,&lt;br /&gt;
		    &amp;quot;numeric-id&amp;quot;: toqid&lt;br /&gt;
		},&lt;br /&gt;
		type: &amp;quot;wikibase-entityid&amp;quot;&lt;br /&gt;
	    },&lt;br /&gt;
	    datatype: &amp;quot;wikibase-item&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
    };&lt;br /&gt;
    quickpresets_addclaim(claim,  &amp;quot;Added &amp;quot;+pname+&amp;quot; &amp;quot;+toname+&amp;quot;&amp;quot;);&lt;br /&gt;
    // Check if we now support it with another element of the config&lt;br /&gt;
    if(pid == 3) {&lt;br /&gt;
	$('#quickpresets').remove();&lt;br /&gt;
	for( var t = 0; t&amp;lt;quick_props.length; t++) {&lt;br /&gt;
	    if(quick_props[t].qid == toqid) {&lt;br /&gt;
		quickpresets_addinterface(qid, quick_props[t]);&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a statement with datatype 'string'&lt;br /&gt;
 * qid: the qid of the item wich should get the statment&lt;br /&gt;
 * pid: the property to add&lt;br /&gt;
 * pname: the name of the property for showing a success-note&lt;br /&gt;
 * str: the value of the statement&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addstringstatement(qid, pid, pname, str) {&lt;br /&gt;
	var claim = {&lt;br /&gt;
	id: (new wb.utilities.ClaimGuidGenerator(&amp;quot;q&amp;quot; + qid)).newGuid(),&lt;br /&gt;
	type: &amp;quot;claim&amp;quot;,&lt;br /&gt;
	mainsnak: {&lt;br /&gt;
	    snaktype: &amp;quot;value&amp;quot;,&lt;br /&gt;
	    property: &amp;quot;P&amp;quot; + pid,&lt;br /&gt;
	    datatype: &amp;quot;string&amp;quot;,&lt;br /&gt;
	    datavalue: {&lt;br /&gt;
		value: str,&lt;br /&gt;
		type: &amp;quot;string&amp;quot;&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    };&lt;br /&gt;
    quickpresets_addclaim(claim,  &amp;quot;Added &amp;quot;+pname+&amp;quot; &amp;quot;+str+&amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * check if an item is of a type, if so add options&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_checktype(qid, prop) {&lt;br /&gt;
	var typeqid=prop.qid;&lt;br /&gt;
    // Search in HTML-DOM&lt;br /&gt;
    // for each &amp;quot;instance of&amp;quot; value, run this function&lt;br /&gt;
    var typefromdom=$.map($('#P3').find(&amp;quot;.wikibase-snakview-value a&amp;quot;), function(value, index) {&lt;br /&gt;
	if(typeof value.attributes.href === &amp;quot;undefined&amp;quot;)&lt;br /&gt;
	    {&lt;br /&gt;
	        return [];  &lt;br /&gt;
	    }&lt;br /&gt;
	else&lt;br /&gt;
	    {&lt;br /&gt;
	        return [value.attributes.href.value.substring(6)];&lt;br /&gt;
	    }&lt;br /&gt;
    });&lt;br /&gt;
    // typefromdom is now a list of Item:Qxxx, possibly empty&lt;br /&gt;
    if ( typefromdom.length === 0) {&lt;br /&gt;
	    if(typeqid === null) // the null prescription for when there is no &amp;quot;instance of&amp;quot;&lt;br /&gt;
	        {&lt;br /&gt;
	            quickpresets_addinterface(qid, prop);&lt;br /&gt;
	        }&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
	     if ( typeqid === 0 ) {&lt;br /&gt;
	     	// the 0 prescription, applicable to all items which are instance of something&lt;br /&gt;
		    quickpresets_addinterface(qid, prop);&lt;br /&gt;
	     }&lt;br /&gt;
	    else if ( typefromdom.includes(&amp;quot;Item:Q&amp;quot;+typeqid) ) {&lt;br /&gt;
	    	// direct relevance&lt;br /&gt;
		    quickpresets_addinterface(qid, prop);&lt;br /&gt;
	    }&lt;br /&gt;
	    else {&lt;br /&gt;
	    	// indirect relevance, through subclassing&lt;br /&gt;
	        // Now check via sparql (much slower but includes subtypes)&lt;br /&gt;
	        const endpointUrl = 'https://query.personaldata.io/proxy/wdqs/bigdata/namespace/wdq/sparql',&lt;br /&gt;
		    sparqlQuery = 'Ask { pdio:Q' + qid + ' pdiot:P3/pdiot:P4* pdio:Q' + typeqid + '. hint:Prior hint:gearing &amp;quot;forwards&amp;quot; }',&lt;br /&gt;
		    fullUrl = endpointUrl + '?query=' + encodeURIComponent( sparqlQuery ),&lt;br /&gt;
		    headers = { 'Accept': 'application/sparql-results+json' };&lt;br /&gt;
		    debug(&amp;quot;qid: &amp;quot;+ qid + &amp;quot;\ntypeqid: &amp;quot; + typeqid + &amp;quot;\n&amp;quot; + fullUrl + &amp;quot;\n&amp;quot; + sparqlQuery);&lt;br /&gt;
	        fetch( fullUrl, headers ).then( body =&amp;gt; body.json() ).then( json =&amp;gt; {&lt;br /&gt;
		    if ( json.boolean )&lt;br /&gt;
		        quickpresets_addinterface(qid, prop);&lt;br /&gt;
	       } );&lt;br /&gt;
	    }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * wait for config to be loaded, then execute func&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_waitForConfig(func){&lt;br /&gt;
    if(typeof quick_props !== &amp;quot;undefined&amp;quot;){&lt;br /&gt;
	func();&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
	setTimeout(quickpresets_waitForConfig, 100, func);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$( function($) {&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Check if we're viewing an item&lt;br /&gt;
     */&lt;br /&gt;
    var qid = mw.config.get( 'wbEntityId' );&lt;br /&gt;
    if ( !qid ) {&lt;br /&gt;
	    return;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
	qid = qid.substring(1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * check if item is a of right kind&lt;br /&gt;
     */&lt;br /&gt;
    quickpresets_waitForConfig(function() {&lt;br /&gt;
	for( var t = 0; t&amp;lt;quick_props.length; t++) {&lt;br /&gt;
	    quickpresets_checktype(qid, quick_props[t]);&lt;br /&gt;
	}&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
} );&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=MediaWiki:Gadget-QuickPresets.js&amp;diff=74593</id>
		<title>MediaWiki:Gadget-QuickPresets.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=MediaWiki:Gadget-QuickPresets.js&amp;diff=74593"/>
		<updated>2020-01-12T11:16:42Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: Removed a bug at passing headers to the fetch request&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// taken from https://www.wikidata.org/wiki/User:MichaelSchoenitzer/quickpresets.js&lt;br /&gt;
// non exhaustive list of modifications:&lt;br /&gt;
// P31 and P(subclass) ---&amp;gt; P3 and P4   (see #P31, pid == 3)&lt;br /&gt;
// wd, wdt --&amp;gt; pdio, pdiot&lt;br /&gt;
// importScript and importStyleSheet replaced&lt;br /&gt;
// turned into a common script&lt;br /&gt;
// see doc at [[Gadget-QuickPresets/doc]]&lt;br /&gt;
&lt;br /&gt;
// mw.notify(&amp;quot;QuickPresets&amp;quot;)&lt;br /&gt;
function debug(alert){&lt;br /&gt;
	// mw.notify(alert)&lt;br /&gt;
}&lt;br /&gt;
mw.loader.load( '/w/index.php?title=MediaWiki:Gadget-QuickPresets/defaultconf.css&amp;amp;action=raw&amp;amp;ctype=text/css', 'text/css' );&lt;br /&gt;
&lt;br /&gt;
if( typeof(quick_props)==&amp;quot;undefined&amp;quot; ) {&lt;br /&gt;
    mw.loader.load( '/w/index.php?title=MediaWiki:Gadget-QuickPresets/defaultconf.js&amp;amp;action=raw&amp;amp;ctype=text/javascript' );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Load the entityselector-plugin, try until it works&lt;br /&gt;
 * See: https://stackoverflow.com/questions/47985370/&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_loadentityselector(){&lt;br /&gt;
    try {&lt;br /&gt;
	$( &amp;quot;.quickpresetsiteminput input&amp;quot; ).entityselector( {&lt;br /&gt;
	    url: 'https://wiki.personaldata.io/w/api.php',&lt;br /&gt;
	    language: mw.config.get('wgUserLanguage')&lt;br /&gt;
	} );&lt;br /&gt;
    }&lt;br /&gt;
    catch(err) {&lt;br /&gt;
	setTimeout(quickpresets_loadentityselector, 100);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add the interface wich alows to quickly add statements&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addinterface(qid, prop) {&lt;br /&gt;
    // compose and intert fieldset.&lt;br /&gt;
    var $fieldset = $(&amp;quot;&amp;lt;fieldset id=\&amp;quot;quickpresets\&amp;quot;&amp;gt;&amp;lt;legend&amp;gt;Quick Presets (&amp;quot; + prop.name + &amp;quot;)&amp;lt;/legend&amp;gt;&amp;lt;/fieldset&amp;gt;&amp;quot;)&lt;br /&gt;
	.insertAfter($('.wikibase-statementgrouplistview').first());&lt;br /&gt;
&lt;br /&gt;
    prop.defaults.forEach(function(dflt) {&lt;br /&gt;
	if(typeof dflt.type == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	    dflt.type = &amp;quot;item&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	var $line = $(&amp;quot;&amp;lt;div&amp;gt;&amp;lt;p class='addstatement'&amp;gt;Add &amp;quot;+dflt.name+&amp;quot;:&amp;lt;span class='links'&amp;gt;&amp;lt;/span&amp;gt;&amp;quot; + &lt;br /&gt;
	    &amp;quot;&amp;lt;span class='quickpresets&amp;quot; + dflt.type + &amp;quot;input'&amp;gt;&amp;amp;nbsp;&amp;lt;input/&amp;gt;&amp;amp;nbsp;&amp;quot; +&lt;br /&gt;
	    &amp;quot;&amp;lt;a href=\'#\'&amp;gt;✔&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
	).appendTo($fieldset);&lt;br /&gt;
	if($('#P'+dflt.pid).find(&amp;quot;.wikibase-snakview-value a&amp;quot;).length !== 0) {&lt;br /&gt;
	    $line.addClass('disabled');&lt;br /&gt;
	}&lt;br /&gt;
	if(dflt.values.length === 0) {&lt;br /&gt;
	    $line.addClass('compact');&lt;br /&gt;
	}&lt;br /&gt;
	$line.find('.quickpresets' + dflt.type + 'input a')&lt;br /&gt;
	    .on('click', function(e) {&lt;br /&gt;
		e.preventDefault();&lt;br /&gt;
		if(dflt.type == &amp;quot;item&amp;quot;) {&lt;br /&gt;
		    var selection = $(this).prev('input').data('entityselector').selectedEntity();&lt;br /&gt;
		    quickpresets_additemstatement(qid, dflt.pid, dflt.name, selection.id.substring(1), selection.label);&lt;br /&gt;
		}&lt;br /&gt;
		else if(dflt.type == &amp;quot;string&amp;quot;) {&lt;br /&gt;
			quickpresets_addstringstatement(qid, dflt.pid, dflt.name, $(this).prev('input')[0].value);&lt;br /&gt;
		}&lt;br /&gt;
	    });&lt;br /&gt;
&lt;br /&gt;
	// Add links for all preset-values…&lt;br /&gt;
	dflt.values.forEach(function(val) {&lt;br /&gt;
	    $(&amp;quot;&amp;lt;span&amp;gt;&amp;amp;nbsp;&amp;lt;a href='#'&amp;gt;&amp;lt;/a&amp;gt;&amp;amp;nbsp;∙&amp;lt;/span&amp;gt;&amp;quot;)&lt;br /&gt;
		.appendTo($line.find('span.links'))&lt;br /&gt;
		.find('a')&lt;br /&gt;
		.text(val.name)&lt;br /&gt;
		.on('click', function(e) {&lt;br /&gt;
		    e.preventDefault();&lt;br /&gt;
		    if(dflt.type == &amp;quot;item&amp;quot;) {&lt;br /&gt;
			quickpresets_additemstatement(qid, dflt.pid, dflt.name, val.qid, val.name);&lt;br /&gt;
		    }&lt;br /&gt;
		    else if(dflt.type == &amp;quot;string&amp;quot;) {&lt;br /&gt;
			quickpresets_addstringstatement(qid, dflt.pid, dflt.name, val.text);&lt;br /&gt;
		    }&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    setTimeout(quickpresets_loadentityselector, 100);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a formated claim and in case of success show succtext&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addclaim(claim, succtext) {&lt;br /&gt;
    var api = new mw.Api();&lt;br /&gt;
    var token = mw.user.tokens.values.csrfToken;&lt;br /&gt;
    api.post( { &lt;br /&gt;
	action: 'wbsetclaim',&lt;br /&gt;
	summary: &amp;quot;Added with [[MediaWiki:Gadget-QuickPresets.js|Quickpresets]]&amp;quot;,&lt;br /&gt;
	claim: JSON.stringify(claim),&lt;br /&gt;
	token: token&lt;br /&gt;
    }).then(&lt;br /&gt;
	function(aw){&lt;br /&gt;
	    if(aw.success == 1)&lt;br /&gt;
		//$('.wikibase-statementgrouplistview').first().after( succtext );&lt;br /&gt;
		mw.notify(succtext);&lt;br /&gt;
	}); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a statement with datatype 'item'&lt;br /&gt;
 * qid: the qid of the item wich should get the statment&lt;br /&gt;
 * pid: the property to add&lt;br /&gt;
 * pname: the name of the property for showing a success-note&lt;br /&gt;
 * toqid: the qid of the item that is used as value&lt;br /&gt;
 * toname: the name of the value-item property for showing a success-note&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_additemstatement(qid, pid, pname, toqid, toname) {&lt;br /&gt;
	var claim = {&lt;br /&gt;
	id: (new wb.utilities.ClaimGuidGenerator(&amp;quot;q&amp;quot; + qid)).newGuid(),&lt;br /&gt;
	type: &amp;quot;claim&amp;quot;,&lt;br /&gt;
	mainsnak: {&lt;br /&gt;
	    snaktype: &amp;quot;value&amp;quot;,&lt;br /&gt;
	    property: &amp;quot;P&amp;quot; + pid,&lt;br /&gt;
	    datavalue: {&lt;br /&gt;
		value: {&lt;br /&gt;
		    &amp;quot;entity-type&amp;quot;: &amp;quot;item&amp;quot;,&lt;br /&gt;
		    &amp;quot;numeric-id&amp;quot;: toqid&lt;br /&gt;
		},&lt;br /&gt;
		type: &amp;quot;wikibase-entityid&amp;quot;&lt;br /&gt;
	    },&lt;br /&gt;
	    datatype: &amp;quot;wikibase-item&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
    };&lt;br /&gt;
    quickpresets_addclaim(claim,  &amp;quot;Added &amp;quot;+pname+&amp;quot; &amp;quot;+toname+&amp;quot;&amp;quot;);&lt;br /&gt;
    // Check if we now support it with another element of the config&lt;br /&gt;
    if(pid == 3) {&lt;br /&gt;
	$('#quickpresets').remove();&lt;br /&gt;
	for( var t = 0; t&amp;lt;quick_props.length; t++) {&lt;br /&gt;
	    if(quick_props[t].qid == toqid) {&lt;br /&gt;
		quickpresets_addinterface(qid, quick_props[t]);&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a statement with datatype 'string'&lt;br /&gt;
 * qid: the qid of the item wich should get the statment&lt;br /&gt;
 * pid: the property to add&lt;br /&gt;
 * pname: the name of the property for showing a success-note&lt;br /&gt;
 * str: the value of the statement&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addstringstatement(qid, pid, pname, str) {&lt;br /&gt;
	var claim = {&lt;br /&gt;
	id: (new wb.utilities.ClaimGuidGenerator(&amp;quot;q&amp;quot; + qid)).newGuid(),&lt;br /&gt;
	type: &amp;quot;claim&amp;quot;,&lt;br /&gt;
	mainsnak: {&lt;br /&gt;
	    snaktype: &amp;quot;value&amp;quot;,&lt;br /&gt;
	    property: &amp;quot;P&amp;quot; + pid,&lt;br /&gt;
	    datatype: &amp;quot;string&amp;quot;,&lt;br /&gt;
	    datavalue: {&lt;br /&gt;
		value: str,&lt;br /&gt;
		type: &amp;quot;string&amp;quot;&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    };&lt;br /&gt;
    quickpresets_addclaim(claim,  &amp;quot;Added &amp;quot;+pname+&amp;quot; &amp;quot;+str+&amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * check if an item is of a type, if so add options&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_checktype(qid, prop) {&lt;br /&gt;
	var typeqid=prop.qid;&lt;br /&gt;
    // Search in HTML-DOM&lt;br /&gt;
    // for each &amp;quot;instance of&amp;quot; value, run this function&lt;br /&gt;
    var typefromdom=$.map($('#P3').find(&amp;quot;.wikibase-snakview-value a&amp;quot;), function(value, index) {&lt;br /&gt;
	if(typeof value.attributes.href === &amp;quot;undefined&amp;quot;)&lt;br /&gt;
	    {&lt;br /&gt;
	        return [];  &lt;br /&gt;
	    }&lt;br /&gt;
	else&lt;br /&gt;
	    {&lt;br /&gt;
	        return [value.attributes.href.value.substring(6)];&lt;br /&gt;
	    }&lt;br /&gt;
    });&lt;br /&gt;
    // typefromdom is now a list of Item:Qxxx, possibly empty&lt;br /&gt;
    if ( typefromdom.length === 0) {&lt;br /&gt;
	    if(typeqid === null) // the null prescription for when there is no &amp;quot;instance of&amp;quot;&lt;br /&gt;
	        {&lt;br /&gt;
	            quickpresets_addinterface(qid, prop);&lt;br /&gt;
	        }&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
	     if ( typeqid === 0 ) {&lt;br /&gt;
	     	// the 0 prescription, applicable to all items which are instance of something&lt;br /&gt;
		    quickpresets_addinterface(qid, prop);&lt;br /&gt;
	     }&lt;br /&gt;
	    else if ( typefromdom.includes(&amp;quot;Item:Q&amp;quot;+typeqid) ) {&lt;br /&gt;
	    	// direct relevance&lt;br /&gt;
		    quickpresets_addinterface(qid, prop);&lt;br /&gt;
	    }&lt;br /&gt;
	    else {&lt;br /&gt;
	    	// indirect relevance, through subclassing&lt;br /&gt;
	        // Now check via sparql (much slower but includes subtypes)&lt;br /&gt;
	        const endpointUrl = 'https://query.personaldata.io/proxy/wdqs/bigdata/namespace/wdq/sparql',&lt;br /&gt;
		    sparqlQuery = 'Ask { pdio:Q' + qid + ' pdiot:P3/pdiot:P4* pdio:Q' + typeqid + '. hint:Prior hint:gearing &amp;quot;forwards&amp;quot; }',&lt;br /&gt;
		    fullUrl = endpointUrl + '?query=' + encodeURIComponent( sparqlQuery ),&lt;br /&gt;
		    myHeaders = { 'Accept': 'application/sparql-results+json' };&lt;br /&gt;
		    debug(&amp;quot;qid: &amp;quot;+ qid + &amp;quot;\ntypeqid: &amp;quot; + typeqid + &amp;quot;\n&amp;quot; + fullUrl + &amp;quot;\n&amp;quot; + sparqlQuery);&lt;br /&gt;
	        fetch( fullUrl, { headers:myHeaders } ).then( body =&amp;gt; body.json() ).then( json =&amp;gt; {&lt;br /&gt;
		    if ( json.boolean )&lt;br /&gt;
		        quickpresets_addinterface(qid, prop);&lt;br /&gt;
	       } );&lt;br /&gt;
	    }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * wait for config to be loaded, then execute func&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_waitForConfig(func){&lt;br /&gt;
    if(typeof quick_props !== &amp;quot;undefined&amp;quot;){&lt;br /&gt;
	func();&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
	setTimeout(quickpresets_waitForConfig, 100, func);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$( function($) {&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Check if we're viewing an item&lt;br /&gt;
     */&lt;br /&gt;
    var qid = mw.config.get( 'wbEntityId' );&lt;br /&gt;
    if ( !qid ) {&lt;br /&gt;
	    return;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
	qid = qid.substring(1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * check if item is a of right kind&lt;br /&gt;
     */&lt;br /&gt;
    quickpresets_waitForConfig(function() {&lt;br /&gt;
	for( var t = 0; t&amp;lt;quick_props.length; t++) {&lt;br /&gt;
	    quickpresets_checktype(qid, quick_props[t]);&lt;br /&gt;
	}&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
} );&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=MediaWiki:Gadget-QuickPresets.js&amp;diff=74592</id>
		<title>MediaWiki:Gadget-QuickPresets.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=MediaWiki:Gadget-QuickPresets.js&amp;diff=74592"/>
		<updated>2020-01-12T11:07:54Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: Added 2 semicolons, removed a line feed.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// taken from https://www.wikidata.org/wiki/User:MichaelSchoenitzer/quickpresets.js&lt;br /&gt;
// non exhaustive list of modifications:&lt;br /&gt;
// P31 and P(subclass) ---&amp;gt; P3 and P4   (see #P31, pid == 3)&lt;br /&gt;
// wd, wdt --&amp;gt; pdio, pdiot&lt;br /&gt;
// importScript and importStyleSheet replaced&lt;br /&gt;
// turned into a common script&lt;br /&gt;
// see doc at [[Gadget-QuickPresets/doc]]&lt;br /&gt;
&lt;br /&gt;
// mw.notify(&amp;quot;QuickPresets&amp;quot;)&lt;br /&gt;
function debug(alert){&lt;br /&gt;
	// mw.notify(alert)&lt;br /&gt;
}&lt;br /&gt;
mw.loader.load( '/w/index.php?title=MediaWiki:Gadget-QuickPresets/defaultconf.css&amp;amp;action=raw&amp;amp;ctype=text/css', 'text/css' );&lt;br /&gt;
&lt;br /&gt;
if( typeof(quick_props)==&amp;quot;undefined&amp;quot; ) {&lt;br /&gt;
    mw.loader.load( '/w/index.php?title=MediaWiki:Gadget-QuickPresets/defaultconf.js&amp;amp;action=raw&amp;amp;ctype=text/javascript' );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Load the entityselector-plugin, try until it works&lt;br /&gt;
 * See: https://stackoverflow.com/questions/47985370/&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_loadentityselector(){&lt;br /&gt;
    try {&lt;br /&gt;
	$( &amp;quot;.quickpresetsiteminput input&amp;quot; ).entityselector( {&lt;br /&gt;
	    url: 'https://wiki.personaldata.io/w/api.php',&lt;br /&gt;
	    language: mw.config.get('wgUserLanguage')&lt;br /&gt;
	} );&lt;br /&gt;
    }&lt;br /&gt;
    catch(err) {&lt;br /&gt;
	setTimeout(quickpresets_loadentityselector, 100);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add the interface wich alows to quickly add statements&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addinterface(qid, prop) {&lt;br /&gt;
    // compose and intert fieldset.&lt;br /&gt;
    var $fieldset = $(&amp;quot;&amp;lt;fieldset id=\&amp;quot;quickpresets\&amp;quot;&amp;gt;&amp;lt;legend&amp;gt;Quick Presets (&amp;quot; + prop.name + &amp;quot;)&amp;lt;/legend&amp;gt;&amp;lt;/fieldset&amp;gt;&amp;quot;)&lt;br /&gt;
	.insertAfter($('.wikibase-statementgrouplistview').first());&lt;br /&gt;
&lt;br /&gt;
    prop.defaults.forEach(function(dflt) {&lt;br /&gt;
	if(typeof dflt.type == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
	    dflt.type = &amp;quot;item&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	var $line = $(&amp;quot;&amp;lt;div&amp;gt;&amp;lt;p class='addstatement'&amp;gt;Add &amp;quot;+dflt.name+&amp;quot;:&amp;lt;span class='links'&amp;gt;&amp;lt;/span&amp;gt;&amp;quot; + &lt;br /&gt;
	    &amp;quot;&amp;lt;span class='quickpresets&amp;quot; + dflt.type + &amp;quot;input'&amp;gt;&amp;amp;nbsp;&amp;lt;input/&amp;gt;&amp;amp;nbsp;&amp;quot; +&lt;br /&gt;
	    &amp;quot;&amp;lt;a href=\'#\'&amp;gt;✔&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
	).appendTo($fieldset);&lt;br /&gt;
	if($('#P'+dflt.pid).find(&amp;quot;.wikibase-snakview-value a&amp;quot;).length !== 0) {&lt;br /&gt;
	    $line.addClass('disabled');&lt;br /&gt;
	}&lt;br /&gt;
	if(dflt.values.length === 0) {&lt;br /&gt;
	    $line.addClass('compact');&lt;br /&gt;
	}&lt;br /&gt;
	$line.find('.quickpresets' + dflt.type + 'input a')&lt;br /&gt;
	    .on('click', function(e) {&lt;br /&gt;
		e.preventDefault();&lt;br /&gt;
		if(dflt.type == &amp;quot;item&amp;quot;) {&lt;br /&gt;
		    var selection = $(this).prev('input').data('entityselector').selectedEntity();&lt;br /&gt;
		    quickpresets_additemstatement(qid, dflt.pid, dflt.name, selection.id.substring(1), selection.label);&lt;br /&gt;
		}&lt;br /&gt;
		else if(dflt.type == &amp;quot;string&amp;quot;) {&lt;br /&gt;
			quickpresets_addstringstatement(qid, dflt.pid, dflt.name, $(this).prev('input')[0].value);&lt;br /&gt;
		}&lt;br /&gt;
	    });&lt;br /&gt;
&lt;br /&gt;
	// Add links for all preset-values…&lt;br /&gt;
	dflt.values.forEach(function(val) {&lt;br /&gt;
	    $(&amp;quot;&amp;lt;span&amp;gt;&amp;amp;nbsp;&amp;lt;a href='#'&amp;gt;&amp;lt;/a&amp;gt;&amp;amp;nbsp;∙&amp;lt;/span&amp;gt;&amp;quot;)&lt;br /&gt;
		.appendTo($line.find('span.links'))&lt;br /&gt;
		.find('a')&lt;br /&gt;
		.text(val.name)&lt;br /&gt;
		.on('click', function(e) {&lt;br /&gt;
		    e.preventDefault();&lt;br /&gt;
		    if(dflt.type == &amp;quot;item&amp;quot;) {&lt;br /&gt;
			quickpresets_additemstatement(qid, dflt.pid, dflt.name, val.qid, val.name);&lt;br /&gt;
		    }&lt;br /&gt;
		    else if(dflt.type == &amp;quot;string&amp;quot;) {&lt;br /&gt;
			quickpresets_addstringstatement(qid, dflt.pid, dflt.name, val.text);&lt;br /&gt;
		    }&lt;br /&gt;
		});&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    setTimeout(quickpresets_loadentityselector, 100);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a formated claim and in case of success show succtext&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addclaim(claim, succtext) {&lt;br /&gt;
    var api = new mw.Api();&lt;br /&gt;
    var token = mw.user.tokens.values.csrfToken;&lt;br /&gt;
    api.post( { &lt;br /&gt;
	action: 'wbsetclaim',&lt;br /&gt;
	summary: &amp;quot;Added with [[MediaWiki:Gadget-QuickPresets.js|Quickpresets]]&amp;quot;,&lt;br /&gt;
	claim: JSON.stringify(claim),&lt;br /&gt;
	token: token&lt;br /&gt;
    }).then(&lt;br /&gt;
	function(aw){&lt;br /&gt;
	    if(aw.success == 1)&lt;br /&gt;
		//$('.wikibase-statementgrouplistview').first().after( succtext );&lt;br /&gt;
		mw.notify(succtext);&lt;br /&gt;
	}); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a statement with datatype 'item'&lt;br /&gt;
 * qid: the qid of the item wich should get the statment&lt;br /&gt;
 * pid: the property to add&lt;br /&gt;
 * pname: the name of the property for showing a success-note&lt;br /&gt;
 * toqid: the qid of the item that is used as value&lt;br /&gt;
 * toname: the name of the value-item property for showing a success-note&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_additemstatement(qid, pid, pname, toqid, toname) {&lt;br /&gt;
	var claim = {&lt;br /&gt;
	id: (new wb.utilities.ClaimGuidGenerator(&amp;quot;q&amp;quot; + qid)).newGuid(),&lt;br /&gt;
	type: &amp;quot;claim&amp;quot;,&lt;br /&gt;
	mainsnak: {&lt;br /&gt;
	    snaktype: &amp;quot;value&amp;quot;,&lt;br /&gt;
	    property: &amp;quot;P&amp;quot; + pid,&lt;br /&gt;
	    datavalue: {&lt;br /&gt;
		value: {&lt;br /&gt;
		    &amp;quot;entity-type&amp;quot;: &amp;quot;item&amp;quot;,&lt;br /&gt;
		    &amp;quot;numeric-id&amp;quot;: toqid&lt;br /&gt;
		},&lt;br /&gt;
		type: &amp;quot;wikibase-entityid&amp;quot;&lt;br /&gt;
	    },&lt;br /&gt;
	    datatype: &amp;quot;wikibase-item&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
    };&lt;br /&gt;
    quickpresets_addclaim(claim,  &amp;quot;Added &amp;quot;+pname+&amp;quot; &amp;quot;+toname+&amp;quot;&amp;quot;);&lt;br /&gt;
    // Check if we now support it with another element of the config&lt;br /&gt;
    if(pid == 3) {&lt;br /&gt;
	$('#quickpresets').remove();&lt;br /&gt;
	for( var t = 0; t&amp;lt;quick_props.length; t++) {&lt;br /&gt;
	    if(quick_props[t].qid == toqid) {&lt;br /&gt;
		quickpresets_addinterface(qid, quick_props[t]);&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Add a statement with datatype 'string'&lt;br /&gt;
 * qid: the qid of the item wich should get the statment&lt;br /&gt;
 * pid: the property to add&lt;br /&gt;
 * pname: the name of the property for showing a success-note&lt;br /&gt;
 * str: the value of the statement&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_addstringstatement(qid, pid, pname, str) {&lt;br /&gt;
	var claim = {&lt;br /&gt;
	id: (new wb.utilities.ClaimGuidGenerator(&amp;quot;q&amp;quot; + qid)).newGuid(),&lt;br /&gt;
	type: &amp;quot;claim&amp;quot;,&lt;br /&gt;
	mainsnak: {&lt;br /&gt;
	    snaktype: &amp;quot;value&amp;quot;,&lt;br /&gt;
	    property: &amp;quot;P&amp;quot; + pid,&lt;br /&gt;
	    datatype: &amp;quot;string&amp;quot;,&lt;br /&gt;
	    datavalue: {&lt;br /&gt;
		value: str,&lt;br /&gt;
		type: &amp;quot;string&amp;quot;&lt;br /&gt;
	    }&lt;br /&gt;
	}&lt;br /&gt;
    };&lt;br /&gt;
    quickpresets_addclaim(claim,  &amp;quot;Added &amp;quot;+pname+&amp;quot; &amp;quot;+str+&amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * check if an item is of a type, if so add options&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_checktype(qid, prop) {&lt;br /&gt;
	var typeqid=prop.qid;&lt;br /&gt;
    // Search in HTML-DOM&lt;br /&gt;
    // for each &amp;quot;instance of&amp;quot; value, run this function&lt;br /&gt;
    var typefromdom=$.map($('#P3').find(&amp;quot;.wikibase-snakview-value a&amp;quot;), function(value, index) {&lt;br /&gt;
	if(typeof value.attributes.href === &amp;quot;undefined&amp;quot;)&lt;br /&gt;
	    {&lt;br /&gt;
	        return [];  &lt;br /&gt;
	    }&lt;br /&gt;
	else&lt;br /&gt;
	    {&lt;br /&gt;
	        return [value.attributes.href.value.substring(6)];&lt;br /&gt;
	    }&lt;br /&gt;
    });&lt;br /&gt;
    // typefromdom is now a list of Item:Qxxx, possibly empty&lt;br /&gt;
    if ( typefromdom.length === 0) {&lt;br /&gt;
	    if(typeqid === null) // the null prescription for when there is no &amp;quot;instance of&amp;quot;&lt;br /&gt;
	        {&lt;br /&gt;
	            quickpresets_addinterface(qid, prop);&lt;br /&gt;
	        }&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
	     if ( typeqid === 0 ) {&lt;br /&gt;
	     	// the 0 prescription, applicable to all items which are instance of something&lt;br /&gt;
		    quickpresets_addinterface(qid, prop);&lt;br /&gt;
	     }&lt;br /&gt;
	    else if ( typefromdom.includes(&amp;quot;Item:Q&amp;quot;+typeqid) ) {&lt;br /&gt;
	    	// direct relevance&lt;br /&gt;
		    quickpresets_addinterface(qid, prop);&lt;br /&gt;
	    }&lt;br /&gt;
	    else {&lt;br /&gt;
	    	// indirect relevance, through subclassing&lt;br /&gt;
	        // Now check via sparql (much slower but includes subtypes)&lt;br /&gt;
	        const endpointUrl = 'https://query.personaldata.io/proxy/wdqs/bigdata/namespace/wdq/sparql',&lt;br /&gt;
		    sparqlQuery = 'Ask { pdio:Q' + qid + ' pdiot:P3/pdiot:P4* pdio:Q' + typeqid + '. hint:Prior hint:gearing &amp;quot;forwards&amp;quot; }',&lt;br /&gt;
		    fullUrl = endpointUrl + '?query=' + encodeURIComponent( sparqlQuery ),&lt;br /&gt;
		    headers = { 'Accept': 'application/sparql-results+json' };&lt;br /&gt;
		    debug(&amp;quot;qid: &amp;quot;+ qid + &amp;quot;\ntypeqid: &amp;quot; + typeqid + &amp;quot;\n&amp;quot; + fullUrl + &amp;quot;\n&amp;quot; + sparqlQuery);&lt;br /&gt;
	        fetch( fullUrl, { headers } ).then( body =&amp;gt; body.json() ).then( json =&amp;gt; {&lt;br /&gt;
		    if ( json.boolean )&lt;br /&gt;
		        quickpresets_addinterface(qid, prop);&lt;br /&gt;
	       } );&lt;br /&gt;
	    }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * wait for config to be loaded, then execute func&lt;br /&gt;
 */&lt;br /&gt;
function quickpresets_waitForConfig(func){&lt;br /&gt;
    if(typeof quick_props !== &amp;quot;undefined&amp;quot;){&lt;br /&gt;
	func();&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
	setTimeout(quickpresets_waitForConfig, 100, func);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$( function($) {&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Check if we're viewing an item&lt;br /&gt;
     */&lt;br /&gt;
    var qid = mw.config.get( 'wbEntityId' );&lt;br /&gt;
    if ( !qid ) {&lt;br /&gt;
	    return;&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
	qid = qid.substring(1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * check if item is a of right kind&lt;br /&gt;
     */&lt;br /&gt;
    quickpresets_waitForConfig(function() {&lt;br /&gt;
	for( var t = 0; t&amp;lt;quick_props.length; t++) {&lt;br /&gt;
	    quickpresets_checktype(qid, quick_props[t]);&lt;br /&gt;
	}&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
} );&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=User:Stenli_karanxha&amp;diff=74591</id>
		<title>User:Stenli karanxha</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=User:Stenli_karanxha&amp;diff=74591"/>
		<updated>2020-01-12T10:40:58Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: /* Template test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
I am here to contribute to the effort of taking back control of your own personal data, which means being aware of how your data is being used, educated on what your rights are, empowered to hold the companies accountable for their use of the data, and with the opportunity to participate in profits derived from your data. &lt;br /&gt;
&lt;br /&gt;
A few interesting pages to understand the scope of the problem: &lt;br /&gt;
[https://gdpr.report/news/2017/11/20/gdpr-subject-access-requests/ GDPR and SAR] and &lt;br /&gt;
[https://ico.org.uk/for-organisations/guide-to-data-protection/guide-to-the-general-data-protection-regulation-gdpr/individual-rights/right-of-access/ Right of access].&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
My contribution is described in [[MediaWiki:Stenli]]: it will contain a definition of state, goals, tasks, implementation and documentation (of the process and the final result).&lt;br /&gt;
&lt;br /&gt;
== Sandbox ==&lt;br /&gt;
&lt;br /&gt;
This area is a sandbox to test implementation details. Please ignore its content.&lt;br /&gt;
&lt;br /&gt;
===== Test using templates =====&lt;br /&gt;
&lt;br /&gt;
{{Access}}&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=Template:Access&amp;diff=74590</id>
		<title>Template:Access</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=Template:Access&amp;diff=74590"/>
		<updated>2020-01-12T10:40:10Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: Added the documentation to the bottom of the template.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dear {{wikidata|label|{{{1}}}}},&lt;br /&gt;
&lt;br /&gt;
This is a transparency request under the General Data Protection Regulation, including a subject access request, a portability request, and other specific provisions. **Please note that it is not legal to require data subjects to use an  in-house form**. (see for instance UK Information Commissioner’s Office, ‘Subject Access Code of Practice’ (9 June 2017) p 13; Information Commissioner’s Office, ‘Guide to the GDPR: Right to access’ (22 May 2019), stating that 'even if you have a form, you should note that a subject access request is valid if it is submitted by any means, so you will still need to comply with any requests you receive in a letter, a standard email or verbally [..] although you may invite individuals to use a form, you must make it clear that it is not compulsory')&lt;br /&gt;
&lt;br /&gt;
I would like to request a copy of all my personal data held and/or undergoing processing. This is both a subject access request and a portability request.&lt;br /&gt;
&lt;br /&gt;
Copies of my personal data&lt;br /&gt;
==========================&lt;br /&gt;
This request covers all my personal data {{#if: {{#invoke:wd|properties|{{{1}}}|P10|}} |and in particular:&lt;br /&gt;
{{#invoke:wd|properties|qualifier|{{{1}}}|P10|P126|format=&amp;lt;nowiki /&amp;gt;&lt;br /&gt;
  - %p [(%q)]&lt;br /&gt;
|sep=;}}.|}}&lt;br /&gt;
&lt;br /&gt;
Article 20&lt;br /&gt;
----------&lt;br /&gt;
For data falling within the right to data portability (GDPR, art 20), which includes all data I have provided *and* which have been indirectly observed about me (Article 29 Working Party, *Guidelines on the Right to Data Portability (WP 242)*, 13 December 2016, 8) and where lawful bases for processing include consent or contract, I wish to have that data:&lt;br /&gt;
&lt;br /&gt;
-   **sent to me in commonly used, structured, machine-readable format**, such as a CSV file. A PDF is not a machine-readable format (Article 29 Working Party, ‘Guidelines on Transparency under Regulation 2016/679’ WP260 rev.01, 11 April 2018).&lt;br /&gt;
&lt;br /&gt;
-   accompanied with an **intelligible description of all variables.**&lt;br /&gt;
&lt;br /&gt;
Article 15&lt;br /&gt;
----------&lt;br /&gt;
For all personal data not falling within portability, I would like to request, under the right to access (GDPR, art 15):&lt;br /&gt;
&lt;br /&gt;
-   **a copy sent to me in electronic format**. This includes any data derived about me, such as opinions, inferences, settings and preferences. (Note that opinions, inferences and the like are considered personal data. See Case C‑434/16 *Peter Nowak v Data Protection Commissioner* [2017] ECLI:EU:C:2017:994, 34.)  For data that is available to the controller in machine readable format, it must be provided to me in that form in accordance with the principle of fairness and provision of data protection by design.&lt;br /&gt;
&lt;br /&gt;
If your organisation considers me a controller for whom you process&lt;br /&gt;
-------------------------------------------------------------------&lt;br /&gt;
Furthermore, if your business considers me the controller of any personal data for which your business acts as processor, please provide me **with all the data you process on my behalf in machine readable format** in accordance with your obligation to respect my to determination of the means and purposes of processing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Metadata on processing&lt;br /&gt;
======================&lt;br /&gt;
This request also includes the metadata I am entitled to under the GDPR.&lt;br /&gt;
&lt;br /&gt;
Information on controllers, processors, source and transfers&lt;br /&gt;
------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
- The **identity of all joint controllers** of my personal data, as well as the essence of you contracts with them (Article 26).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- Any **third parties to whom data has been disclosed**, named with contact details in accordance with Article 15(1)(c). Please note that the European data protection regulators have stated that by default, controllers should name precise recipients and not &amp;quot;categories&amp;quot; of recipients. If they do choose to name categories, they must justify why this is fair, and be specific, naming &amp;quot;the type of recipient (i.e. by reference to the activities it carries out), the industry, sector and sub-sector and the location of the recipients. ( Article 29 Working Party, ‘Guidelines on Transparency under Regulation 2016/679’ WP260 rev.01, 11 April 2018 ) Please note that in the case of any transferred data processed on the basis of consent, there is no option to just name categories of recipients without invalidating that legal basis (Article 29 Working Party, ‘Guidelines on Consent under Regulation 2016/679’ (WP259 rev.01, 10 April 2018) 13).&lt;br /&gt;
&lt;br /&gt;
- If any data was not collected, observed or inferred from me directly, please provide precise information about **the source of that data**, including the name and contact email of the data controller(s) in question (&amp;quot;from which source the personal data originate&amp;quot;, Article 14(2)(f)/15(1)(g)).&lt;br /&gt;
&lt;br /&gt;
- Please confirm where my personal data is physically stored (including backups) and at the very least **whether it has exited the EU at any stage (if so, please also detail the legal grounds and safeguards for such data transfers)**.&lt;br /&gt;
&lt;br /&gt;
Information on purposes and legal basis&lt;br /&gt;
---------------------------------------&lt;br /&gt;
&lt;br /&gt;
- All **processing purposes and the lawful basis for those purposes by category of personal data**. This list must be broken down by purpose, lawful basis aligned to purposes, and categories of data concerned aligned to purposes and lawful bases. Separate lists where these three factors do not correspond are not acceptable (Article 29 Working Party, ‘Guidelines on Transparency under Regulation 2016/679’ (WP260 rev.01, 11 April 2018), page 35.&lt;br /&gt;
). A table may be the best way to display this information.&lt;br /&gt;
&lt;br /&gt;
- The **specified legitimate interest** where legitimate interest is relied upon (Article 14(2)(b)).&lt;br /&gt;
&lt;br /&gt;
Information on automated decision-making &lt;br /&gt;
----------------------------------------&lt;br /&gt;
- Please confirm whether or not you make any automated decisions (within the meaning of Article 22, GDPR). If the answer is yes, please provide meaningful information about the logic involved, as well as the significance and the envisaged consequences of such processing for me. (Article 15(1)(h))&lt;br /&gt;
&lt;br /&gt;
Information on storage&lt;br /&gt;
----------------------&lt;br /&gt;
- Please confirm for how long each category of personal data is stored, or the criteria used to make this decision, in accordance with the storage limitation principle and Article 15(1)(d).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#if: {{#invoke:wd|properties|{{{1}}}|P122}}|{{Access/Required/Items|id={{{1}}}}}|}}&lt;br /&gt;
&lt;br /&gt;
If you do not normally deal with these requests, please pass this email to your Data Protection Officer. If you need advice on dealing with this request, any European Data Protection Authority should be able to provide you with assistance. &lt;br /&gt;
&lt;br /&gt;
In accordance with the law, I look forward to hearing from you within one month of receipt.&lt;br /&gt;
&lt;br /&gt;
Regards,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt; FIRST_NAME LAST_NAME &amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}} &lt;br /&gt;
&amp;lt;!-- PLEASE ADD CATEGORIES TO THE /doc SUBPAGE, AND INTERWIKIS TO WIKIDATA, THANKS --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=User:Stenli_karanxha&amp;diff=74589</id>
		<title>User:Stenli karanxha</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=User:Stenli_karanxha&amp;diff=74589"/>
		<updated>2020-01-12T10:35:51Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: Test transcluding a template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
I am here to contribute to the effort of taking back control of your own personal data, which means being aware of how your data is being used, educated on what your rights are, empowered to hold the companies accountable for their use of the data, and with the opportunity to participate in profits derived from your data. &lt;br /&gt;
&lt;br /&gt;
A few interesting pages to understand the scope of the problem: &lt;br /&gt;
[https://gdpr.report/news/2017/11/20/gdpr-subject-access-requests/ GDPR and SAR] and &lt;br /&gt;
[https://ico.org.uk/for-organisations/guide-to-data-protection/guide-to-the-general-data-protection-regulation-gdpr/individual-rights/right-of-access/ Right of access].&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
My contribution is described in [[MediaWiki:Stenli]]: it will contain a definition of state, goals, tasks, implementation and documentation (of the process and the final result).&lt;br /&gt;
&lt;br /&gt;
== Sandbox ==&lt;br /&gt;
&lt;br /&gt;
This area is a sandbox to test implementation details. Please ignore its content.&lt;br /&gt;
&lt;br /&gt;
===== Template test =====&lt;br /&gt;
&lt;br /&gt;
{{Access}}&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=MediaWiki:Stenli&amp;diff=74588</id>
		<title>MediaWiki:Stenli</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=MediaWiki:Stenli&amp;diff=74588"/>
		<updated>2020-01-12T10:19:21Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: Small formatting changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Status ==&lt;br /&gt;
Currently all {{P|3}}-{{Q|96}} have a popup that appears with text &amp;quot;Do a GDPR SAR to this controller!&amp;quot;. This is not flexible enough, as:&lt;br /&gt;
* it is dependent on {{Q|449}} and we can't add more logic for {{Q|2720}} or {{Q|412}}; &lt;br /&gt;
* the text is generated by a template that is not very modular, preventing us from adding well secondary logic;&lt;br /&gt;
* the popup generates a mailto link, but it should really generate a form. &lt;br /&gt;
&lt;br /&gt;
For more information on how this is achieved, see [[Architecture of SAR service]].&lt;br /&gt;
&lt;br /&gt;
== Goal ==&lt;br /&gt;
Instead of a one-link popup with `mw.notify`, aim for introducing a form just below the name of a company (where [[User:Podehaye/mwhtml.js]] introduces material). This form will lead to several buttons, generated according to user characteristics (where they live, for instance). The form should rely on autocompletion client-side based on data stored in LocalStorage. &lt;br /&gt;
&lt;br /&gt;
=== Intermediate goals ===&lt;br /&gt;
# Replace the popup to instead introduce content in the DOM where [[User:Podehaye/mwhtml.js]] does. &lt;br /&gt;
# Replace the mailto link by a basic form asking to enter first name, last name. &lt;br /&gt;
# Improve the (auto generated) form to ask also for the data specified in the page through {{P|122}}.&lt;br /&gt;
# Rely on data stored somewhere in protected user script space to autocomplete.&lt;br /&gt;
# Rely on LocalStorage. &lt;br /&gt;
&lt;br /&gt;
There have been some initial efforts at using LocalStorage, detailed in [[Development of SAR service]]. However, this relied on some initial fairly nasty code. I think the code behind [[MediaWiki:Gadget-QuickPresets.js]] is much more neatly structured and helpful for the non-LocalStorage parts. &lt;br /&gt;
&lt;br /&gt;
== Instructions ==&lt;br /&gt;
The goal of the work is not only to achieve the objectives, but also to catalyze a community of developers helping towards those goals. Therefore documentation is crucial. &lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* Read through [[User:Podehaye/mwhtml.js]], [[MediaWiki:Gadget-QuickPresets.js]], [[Architecture of SAR service]], [[Development of SAR service]] (and scripts documented therein) to see all the different ways already used to implement at the interface of Javascript, SPARQL and Wikibase. This *needs* to happen on the wiki, ideally in the MediaWiki namespace (but we can easily start here and then cannibalize). Link heavily to Wikidata/Wikipedia/WikiMedia Foundation properties wherever possible. There should be two layers to this doc: the different ways one can use (atomic techniques), and how these ways are bundled to create specific solutions (e.g. described at [[MediaWiki:Gadget-QuickPresets/doc]]). Currently the doc mixes both layers often, which reduces modularity. &lt;br /&gt;
* Get started on intermediate goals.&lt;br /&gt;
&lt;br /&gt;
== Process documentation ==&lt;br /&gt;
&lt;br /&gt;
The development process for each task will be documented, to be used as a blueprint / todo list for future implementations.&lt;br /&gt;
&lt;br /&gt;
===== Replace pop-up with DOM modification ===== &lt;br /&gt;
&lt;br /&gt;
===== Replace mailto link with a form =====&lt;br /&gt;
&lt;br /&gt;
===== Integrate in the form data specified in the page =====&lt;br /&gt;
&lt;br /&gt;
===== Use data stored in a protected script to autocomplete  =====&lt;br /&gt;
&lt;br /&gt;
===== Use LocalStorage =====&lt;br /&gt;
&lt;br /&gt;
== Product documentation ==&lt;br /&gt;
&lt;br /&gt;
The finished products (templates, gadgets) will be documented in their own pages, with links included here for completeness.&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=MediaWiki:Stenli&amp;diff=74587</id>
		<title>MediaWiki:Stenli</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=MediaWiki:Stenli&amp;diff=74587"/>
		<updated>2020-01-12T10:16:38Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: Initialized the documentation of the tasks.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Status ==&lt;br /&gt;
Currently all {{P|3}}-{{Q|96}} have a popup that appears with text &amp;quot;Do a GDPR SAR to this controller!&amp;quot;. This is not flexible enough, as:&lt;br /&gt;
* it is dependent on {{Q|449}} and we can't add more logic for {{Q|2720}} or {{Q|412}}; &lt;br /&gt;
* the text is generated by a template that is not very modular, preventing us from adding well secondary logic;&lt;br /&gt;
* the popup generates a mailto link, but it should really generate a form. &lt;br /&gt;
&lt;br /&gt;
For more information on how this is achieved, see [[Architecture of SAR service]].&lt;br /&gt;
&lt;br /&gt;
== Goal ==&lt;br /&gt;
Instead of a one-link popup with `mw.notify`, aim for introducing a form just below the name of a company (where [[User:Podehaye/mwhtml.js]] introduces material). This form will lead to several buttons, generated according to user characteristics (where they live, for instance). The form should rely on autocompletion client-side based on data stored in LocalStorage. &lt;br /&gt;
&lt;br /&gt;
=== Intermediate goals ===&lt;br /&gt;
# Replace the popup to instead introduce content in the DOM where [[User:Podehaye/mwhtml.js]] does. &lt;br /&gt;
# Replace the mailto link by a basic form asking to enter first name, last name. &lt;br /&gt;
# Improve the (auto generated) form to ask also for the data specified in the page through {{P|122}}.&lt;br /&gt;
# Rely on data stored somewhere in protected user script space to autocomplete.&lt;br /&gt;
# Rely on LocalStorage. &lt;br /&gt;
&lt;br /&gt;
There have been some initial efforts at using LocalStorage, detailed in [[Development of SAR service]]. However, this relied on some initial fairly nasty code. I think the code behind [[MediaWiki:Gadget-QuickPresets.js]] is much more neatly structured and helpful for the non-LocalStorage parts. &lt;br /&gt;
&lt;br /&gt;
== Instructions ==&lt;br /&gt;
The goal of the work is not only to achieve the objectives, but also to catalyze a community of developers helping towards those goals. Therefore documentation is crucial. &lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
* Read through [[User:Podehaye/mwhtml.js]], [[MediaWiki:Gadget-QuickPresets.js]], [[Architecture of SAR service]], [[Development of SAR service]] (and scripts documented therein) to see all the different ways already used to implement at the interface of Javascript, SPARQL and Wikibase. This *needs* to happen on the wiki, ideally in the MediaWiki namespace (but we can easily start here and then cannibalize). Link heavily to Wikidata/Wikipedia/WikiMedia Foundation properties wherever possible. There should be two layers to this doc: the different ways one can use (atomic techniques), and how these ways are bundled to create specific solutions (e.g. described at [[MediaWiki:Gadget-QuickPresets/doc]]). Currently the doc mixes both layers often, which reduces modularity. &lt;br /&gt;
* Get started on intermediate goals.&lt;br /&gt;
&lt;br /&gt;
== Process documentation ==&lt;br /&gt;
&lt;br /&gt;
The development process for each task will be documented, to be used as a blueprint / todo list for future implementations.&lt;br /&gt;
&lt;br /&gt;
=== Replace pop-up with DOM modification === &lt;br /&gt;
&lt;br /&gt;
=== Replace mailto link with a form ===&lt;br /&gt;
&lt;br /&gt;
=== Integrate in the form data specified in the page ===&lt;br /&gt;
&lt;br /&gt;
=== Use data stored in a protected script to autocomplete  ===&lt;br /&gt;
&lt;br /&gt;
=== Use LocalStorage ===&lt;br /&gt;
&lt;br /&gt;
== Product documentation ==&lt;br /&gt;
&lt;br /&gt;
The finished products (templates, gadgets) will be documented in their own pages, with links included here for completeness.&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=Item:Q122&amp;diff=74586</id>
		<title>Item:Q122</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=Item:Q122&amp;diff=74586"/>
		<updated>2020-01-12T10:11:37Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: /* wbsetclaim-create:2||1 */ Property:P3: Item:Q96, Added with Quickpresets&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=User:Stenli_karanxha&amp;diff=74585</id>
		<title>User:Stenli karanxha</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=User:Stenli_karanxha&amp;diff=74585"/>
		<updated>2020-01-12T10:07:06Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
I am here to contribute to the effort of taking back control of your own personal data, which means being aware of how your data is being used, educated on what your rights are, empowered to hold the companies accountable for their use of the data, and with the opportunity to participate in profits derived from your data. &lt;br /&gt;
&lt;br /&gt;
A few interesting pages to understand the scope of the problem: &lt;br /&gt;
[https://gdpr.report/news/2017/11/20/gdpr-subject-access-requests/ GDPR and SAR] and &lt;br /&gt;
[https://ico.org.uk/for-organisations/guide-to-data-protection/guide-to-the-general-data-protection-regulation-gdpr/individual-rights/right-of-access/ Right of access].&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
My contribution is described in [[MediaWiki:Stenli]]: it will contain a definition of state, goals, tasks, implementation and documentation (of the process and the final result).&lt;br /&gt;
&lt;br /&gt;
== Sandbox ==&lt;br /&gt;
&lt;br /&gt;
This area is a sandbox to test implementation details. Please ignore its content.&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=User:Stenli_karanxha&amp;diff=74584</id>
		<title>User:Stenli karanxha</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=User:Stenli_karanxha&amp;diff=74584"/>
		<updated>2020-01-12T10:06:50Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
I am here to contribute to the effort of taking back control of your own personal data, which means being aware of how your data is being used, educated on what your rights are, empowered to hold the companies accountable for their use of the data, and with the opportunity to participate in profits derived from your data. [[User:Stenli karanxha|Stenli Karanxha]] ([[User talk:Stenli karanxha|talk]]) 10:06, 12 January 2020 (UTC)&lt;br /&gt;
&lt;br /&gt;
A few interesting pages to understand the scope of the problem: &lt;br /&gt;
[https://gdpr.report/news/2017/11/20/gdpr-subject-access-requests/ GDPR and SAR] and &lt;br /&gt;
[https://ico.org.uk/for-organisations/guide-to-data-protection/guide-to-the-general-data-protection-regulation-gdpr/individual-rights/right-of-access/ Right of access].&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
My contribution is described in [[MediaWiki:Stenli]]: it will contain a definition of state, goals, tasks, implementation and documentation (of the process and the final result).&lt;br /&gt;
&lt;br /&gt;
== Sandbox ==&lt;br /&gt;
&lt;br /&gt;
This area is a sandbox to test implementation details. Please ignore its content.&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=User:Stenli_karanxha&amp;diff=74583</id>
		<title>User:Stenli karanxha</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=User:Stenli_karanxha&amp;diff=74583"/>
		<updated>2020-01-12T09:56:18Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
I am here to contribute to the effort of taking back control of your own personal data, which means being aware of how your data is being used, educated on what your rights are, empowered to hold the companies accountable for their use of the data, and with the opportunity to participate in profits derived from your data.&lt;br /&gt;
&lt;br /&gt;
A few interesting pages to understand the scope of the problem: &lt;br /&gt;
[https://gdpr.report/news/2017/11/20/gdpr-subject-access-requests/ GDPR and SAR] and &lt;br /&gt;
[https://ico.org.uk/for-organisations/guide-to-data-protection/guide-to-the-general-data-protection-regulation-gdpr/individual-rights/right-of-access/ Right of access].&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
My contribution is described in [[MediaWiki:Stenli]]: it will contain a definition of state, goals, tasks, implementation and documentation (of the process and the final result).&lt;br /&gt;
&lt;br /&gt;
== Sandbox ==&lt;br /&gt;
&lt;br /&gt;
This area is a sandbox to test implementation details. Please ignore its content.&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=User:Stenli_karanxha&amp;diff=74582</id>
		<title>User:Stenli karanxha</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=User:Stenli_karanxha&amp;diff=74582"/>
		<updated>2020-01-12T09:55:55Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: Initialization of the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
I am here to contribute to the effort of taking back control of your own personal data, which means being aware of how your data is being used, educated on what your rights are, empowered to hold the companies accountable for their use of the data, and with the opportunity to participate in profits derived from your data.&lt;br /&gt;
&lt;br /&gt;
A few interesting pages to understand the scope of the problem.&lt;br /&gt;
[https://gdpr.report/news/2017/11/20/gdpr-subject-access-requests/ GDPR and SAR]&lt;br /&gt;
[https://ico.org.uk/for-organisations/guide-to-data-protection/guide-to-the-general-data-protection-regulation-gdpr/individual-rights/right-of-access/ Right of access]&lt;br /&gt;
&lt;br /&gt;
== Contribution ==&lt;br /&gt;
&lt;br /&gt;
My contribution is described in [[MediaWiki:Stenli]]: it will contain a definition of state, goals, tasks, implementation and documentation (of the process and the final result).&lt;br /&gt;
&lt;br /&gt;
== Sandbox ==&lt;br /&gt;
&lt;br /&gt;
This area is a sandbox to test implementation details. Please ignore its content.&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=User:Stenli_karanxha&amp;diff=74290</id>
		<title>User:Stenli karanxha</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=User:Stenli_karanxha&amp;diff=74290"/>
		<updated>2020-01-10T21:35:28Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome Stenli.&lt;br /&gt;
Feel free to present yourself here, and to keep this space as a notetaking space. [[User:Podehaye|Podehaye]] ([[User talk:Podehaye|talk]]) 15:20, 3 January 2020 (UTC)&lt;br /&gt;
&lt;br /&gt;
* [[MediaWiki:Stenli]]&lt;br /&gt;
&lt;br /&gt;
* [[Special:AllPages]]&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=User:Stenli_karanxha&amp;diff=74289</id>
		<title>User:Stenli karanxha</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=User:Stenli_karanxha&amp;diff=74289"/>
		<updated>2020-01-10T21:33:36Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: Added the link to the templates&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome Stenli.&lt;br /&gt;
Feel free to present yourself here, and to keep this space as a notetaking space. [[User:Podehaye|Podehaye]] ([[User talk:Podehaye|talk]]) 15:20, 3 January 2020 (UTC)&lt;br /&gt;
&lt;br /&gt;
* [[MediaWiki:Stenli]]&lt;br /&gt;
&lt;br /&gt;
* [[Special:AllPages?from=&amp;amp;to=&amp;amp;namespace=10]]&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
	<entry>
		<id>https://wiki.personaldata.io/w/index.php?title=Campaigns&amp;diff=74288</id>
		<title>Campaigns</title>
		<link rel="alternate" type="text/html" href="https://wiki.personaldata.io/w/index.php?title=Campaigns&amp;diff=74288"/>
		<updated>2020-01-10T19:15:09Z</updated>

		<summary type="html">&lt;p&gt;Stenli karanxha: Logical correction of a sentence.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Campaigns==&lt;br /&gt;
To bridge the ecosystem (top-down) and individual (bottom-up) level, we build awareness campaigns. &lt;br /&gt;
&lt;br /&gt;
===Addiction===&lt;br /&gt;
Investigate how digital services create addiction, through transparency on the data collection component of the addiction feedback loop.&lt;br /&gt;
&lt;br /&gt;
* [[Addiction|Digital services and addiction]]&lt;br /&gt;
&lt;br /&gt;
===Adtech===&lt;br /&gt;
See [[Item:Q397]]&lt;br /&gt;
&lt;br /&gt;
===Feminism===&lt;br /&gt;
This is not formal yet, but [[feminism and data protection|data protection could learn a lot from femminism]].&lt;/div&gt;</summary>
		<author><name>Stenli karanxha</name></author>
	</entry>
</feed>