User:Frettie/ico.js
Jump to navigation
Jump to search
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
if ( typeof ( $ ) === 'undefined' ) $ = jQuery;
var ico_add = {
_entity: null,
running: false,
init: function ( entity ) {
var self = this;
if ( ( mw.config.get( 'wgNamespaceNumber' ) !== 0 && mw.config.get( 'wgNamespaceNumber' ) !== 120 ) ||
!mw.config.exists( 'wbEntityId' ) ||
!mw.config.get( 'wbIsEditView' )
) {
return;
}
self._entity = entity;
self.pageName = mw.config.get( 'wgPageName' );
self.repoApi = new wb.api.RepoApi( new mw.Api() );
var portletLink = mw.util.addPortletLink( 'p-tb', '#', 'ICO', 't-ico', 'IČO', 'i' );
$( portletLink ).on( 'click', function ( e ) {
e.preventDefault();
self.run();
return false;
} );
},
s4: function () {
return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
},
generateGUID: function (self) {
return self._entity.id + '$' + self.s4() + self.s4() + '-' + self.s4() + '-' + self.s4() + '-' + self.s4() + '-' + self.s4() + self.s4() + self.s4();
},
getIC: function () {
var self = this;
//if ( self._entity !== null ) {
// if (undefined === self._entity.claims['P4156']) {
// return false;
// } else {
// return self._entity.claims['P4156'][0].mainsnak.datavalue.value;
// }
//
//} else {
return self.repoApi.getEntities( [ self.pageName ] );
//}
},
sidlo: function(){
var self = this;
//rev = self.getLastrevid();
var revid = self.lastrevid;
if (self._entity.claims['P159']) {
id = self._entity.claims['P159'][0].id;
if (self._entity.claims['P159'][0].qualifiers) {
if (self._entity.claims['P159'][0].qualifiers['P625']) {
souradnice = self._entity.claims['P159'][0].qualifiers['P625'][0];
} else {
souradnice = '';
}
} else {
souradnice = '';
}
} else {
id = self.generateGUID(self);
souradnice = '';
}
if (self.mesto == '') {
self.mesto = 'Q213'
}
text = {
"id":id,
"type":"claim",
"mainsnak":{
"snaktype":"value",
"property":"P159",
"datavalue":{"value":{"entity-type":"item","numeric-id":1085,"id":self.mesto},"type":"wikibase-entityid"},
"datatype":"wikibase-item"
},
"qualifiers":{
},
"qualifiers-order":["P281","P669","P4856","P670"],
"references":[{
"snaks":{
"P248":[{"snaktype":"value","property":"P248","datavalue":{"type":"wikibase-entityid","value":{"id":"Q8182488"}}}]
},
"snaks-order":["P248"]}],
"rank":"normal"};
if (self.co != "") {
text["qualifiers"]["P670"] = [{"snaktype":"value","property":"P670","datavalue":{"value":self.co,"type":"string"},"datatype":"string"}];
}
if (self.ulice != "") {
text["qualifiers"]["P669"] = [{"snaktype":"value","property":"P669","datavalue":{"value":{"entity-type":"item","numeric-id":43051784,"id":self.ulice},"type":"wikibase-entityid"},"datatype":"wikibase-item"}];
}
if (self.psc != "") {
text["qualifiers"]["P281"] = [{"snaktype":"value","property":"P281","datavalue":{"value":self.psc,"type":"string"},"datatype":"string"}];
}
if (souradnice != '') {
text["qualifiers"]["P625"] = [{"snaktype":"value","property":"P625","datavalue":{"value":{"altitude":souradnice.datavalue.value.altitude,"globe":"http://www.wikidata.org/entity/Q2","latitude":souradnice.datavalue.value.latitude,"longitude":souradnice.datavalue.value.longitude,"precision":souradnice.datavalue.value.precision},"type":"globecoordinate"},"datatype":"wikibase-item"}];
}
if (self.cp != "") {
text["qualifiers"]["P4856"] = [{"snaktype":"value","property":"P4856","datavalue":{"value":self.cp,"type":"string"},"datatype":"string"}];
}
var api = '/w/api.php';
var myJSON = JSON.stringify(text);
return self.repoApi.post ( {
action : 'wbsetclaim' ,
claim : myJSON ,
baserevid : self.lastrevid,
format : 'json'});
//claim = deserializer.deserialize(text);
//console.log(claim);
//
//self.repoApi.setClaim(claim,data_ent.entities[ self._entity.id ].lastrevid).done(function(e,f){console.log(e,f)}).fail(function(f,g){console.log(f,g)});
},
getLastrevid: function(){
var self = this;
return self.repoApi.getEntities(self._entity.id,'info');
//.done(function(data_ent){
// self.lastrevid = data_ent.entities[ self._entity.id ].lastrevid;
// });
//self
},
decide: function(data) {
$('.percent_ico').text('10');
var self = this.ico_add;
self.lastrevid = data.entities[ self._entity.id ].lastrevid;
if (self._entity.claims['P1454']) {
//nepridavat
self.createPravniForma = false;
return self.sidlo();
} else {
self.createPravniForma = true;
return self.sidlo();
}
},
pravniForma: function(data) {
$('.percent_ico').text('20');
var self = ico_add;
if (self.createPravniForma) {
self.lastrevid = data.pageinfo.lastrevid;
return self.createClaim(
self._entity.id,
self.lastrevid,
'value',
'P1454',
{ id: self.forma }
)
} else {
return self.getLastrevid();
}
},
label: function(data) {
$('.percent_ico').text('30');
self = ico_add;
if (self.createPravniForma) {
self.lastrevid = data.pageinfo.lastrevid;
} else {
self.lastrevid = data.entities[ self._entity.id ].lastrevid;
};
if (self._entity.labels.cs == undefined) {
return self.repoApi.setLabel( self._entity.id, self.lastrevid, self.name, 'cs' );
} else {
if (self._entity.labels.cs.value.length != 0) {
self.createAlias = true;
self.createLabel = false;
return self.repoApi.setAliases( self._entity.id, self.lastrevid, [self.name], [], 'cs' );
} else {
self.createAlias = false;
self.createLabel = true;
return self.repoApi.setLabel( self._entity.id, self.lastrevid, self.name, 'cs' );
}
}
},
instance: function(data) {
$('.percent_ico').text('40');
self = ico_add;
self.lastrevid = data.entity.lastrevid;
if (self._entity.claims['P31']) {
self.createdInstance = false;
return self.getLastrevid();
} else {
self.createdInstance = true;
return self.createClaim(
self._entity.id,
self.lastrevid,
'value',
'P31',
{ id: 'Q4830453' }
)
}
},
country: function(data) {
$('.percent_ico').text('50');
self = ico_add;
if (self.createdInstance) {
self.lastrevid = data.pageinfo.lastrevid;
} else {
self.lastrevid = data.entities[ self._entity.id ].lastrevid;
};
if (self._entity.claims['P17']) {
self.createdCountry = false;
return self.getLastrevid();
} else {
self.createdCountry = true;
return self.createClaim(
self._entity.id,
self.lastrevid,
'value',
'P17',
{ id: 'Q213' }
)
}
},
dateCreated: function(data) {
$('.percent_ico').text('60');
self = ico_add;
if (self.createdCountry) {
self.lastrevid = data.pageinfo.lastrevid;
} else {
self.lastrevid = data.entities[ self._entity.id ].lastrevid;
};
if (self._entity.claims['P571']) {
self.createdDate = false;
return self.getLastrevid();
} else {
self.createdDate = true;
return self.createClaim(
self._entity.id,
self.lastrevid,
'value',
'P571',
{"after":0,"before":0,"calendarmodel":"http://www.wikidata.org/entity/Q1985727","precision":11,"time":self.datum_vzniku,"timezone":0}
)
}
},
oficnazev: function(data) {
$('.percent_ico').text('70');
self = ico_add;
if (self.createdDate) {
self.lastrevid = data.pageinfo.lastrevid;
} else {
self.lastrevid = data.entities[ self._entity.id ].lastrevid;
};
if (self._entity.claims['P1448']) {
self.createdNazev = false;
return self.getLastrevid();
} else {
self.createdNazev = true;
return self.createClaim(
self._entity.id,
self.lastrevid,
'value',
'P1448',
{"text":self.name,"language":"cs"}
)
}
},
info: function(){
$('.percent_ico').text('80');
var self = ico_add;
var text = ''
if (self.createdNazev) {
text += 'Pridan Oficialni nazev<br />'
}
if (self.createdInstance) {
text += 'Pridana instance<br />'
}
if (self.createdDate) {
text += 'Pridano Datum vytvoreni<br />'
}
if (self.createdCountry) {
text += 'Pridan Stat<br />'
}
if (self.createPravniForma) {
text += 'Pridana Pravni forma<br />'
}
if (self.createAlias) {
text += 'Pridana Alias<br />'
}
if (self.createLabel) {
text += 'Pridana Label<br />'
}
text += "Sidlo upraveno<br />";
$('.percent_ico').text('90');
$( '<div>' )
.addClass( 'ico_add' )
.html( text )
.insertBefore( $( 'div.wikibase-listview' ).get( 0 ) );
$('.percent_ico').text('100');
},
run: function(){
var self = this;
if ( self.running ) return;
self.running = true;
$( '<div>' )
.addClass( 'ico_add' )
.html( '<strong>Přidávání dat může trvat. Vyčkejte, prosím. <span class="percent_ico">0</span> %</strong>' )
.insertBefore( $( 'div.wikibase-listview' ).get( 0 ) );
$('.percent_ico').text('1');
self.getIC().done(function(data){
self._entity = data.entities[ self.pageName ];
if (undefined === self._entity.claims['P4156']) {
return;
} else {
var ic = self._entity.claims['P4156'][0].mainsnak.datavalue.value;
}
if (ic === false) {return;}
$.get( "https://csfd.toolforge.org/ico/"+ic, function( data ) {
if (data.err == '') {
$('.percent_ico').text('2');
//okej
self.forma = data.forma_wd;
self.mesto = data.wd_mesto;
self.psc = data.psc;
self.cp = data.cp;
self.co = data.co;
self.ulice = data.wd_ulice;
self.name = data.name;
self.datum_vzniku = data.datum_vzniku;
self.quazi_data = null;
self.lastrevid = '';
self.getLastrevid().then(self.decide).then(self.pravniForma).then(self.label).then(self.instance).then(self.country).then(self.dateCreated).then(self.oficnazev).then(self.info);
} else {
$( '<div>' )
.addClass( 'ico_add' )
.html( data.err )
.insertBefore( $( 'div.wikibase-listview' ).get( 0 ) );
}
});
} );
},
createClaim: function ( entityId, baseRevId, snakType, propertyId, value ) {
var self = ico_add;
if (
typeof entityId !== 'string'
|| typeof baseRevId !== 'number'
|| typeof snakType !== 'string'
|| typeof propertyId !== 'string'
|| value && typeof value !== 'string' && typeof value !== 'object'
) {
throw new Error( 'Parameter not specified properly' );
}
var params = {
action: 'wbcreateclaim',
entity: entityId,
baserevid: baseRevId,
snaktype: snakType,
property: propertyId
};
if ( value ) {
params.value = JSON.stringify( value );
}
return self.repoApi.post( params );
},
addStatement: function ( el ) {
var $this = $( el ),
self = this;
self.createClaim(
$this.data( 'target' ),
$this.data( 'lastrevid' ),
'value',
$this.data( 'prop' ),
{ id: self.pageName }
)
.then( function ( data ) {
var color;
if ( data.success ) {
$this
.html( '↔' )
.css( 'color', 'green' )
.siblings( 'span' ).remove();
color = '#baffc9';
} else {
color = '#ffb3ba';
}
$this.parent().parent().css( 'background-color', color );
} );
},
reciprocityAdder: function ( statement ) {
var target, prop,
self = this;
self._entity = null;
self.repoApi_.get( {
action: 'wbgetclaims',
claim: statement
} )
.done( function ( data ) {
$.each( data.claims, function ( _prop, value ) {
prop = _prop;
target = value[0].mainsnak.datavalue.value.id;
return false;
} );
if ( ( self.reciproke[ prop ] || [] ).length !== 1 ) {
return;
}
self.repoApi.getEntities(
[ target ],
[ 'claims', 'info' ]
)
.done( function ( data ) {
var found = false;
$.each( data.entities[ target ].claims[ prop ] || {}, function ( _, value ) {
if ( !value.mainsnak.datavalue ) return;
var q = value.mainsnak.datavalue.value.id;
found = ( q == self.pageName );
return !found;
} );
if ( found ) {
return;
}
self.createClaim(
target,
data.entities[ target ].lastrevid,
'value',
self.reciproke[ prop ][ 0 ],
{ id: self.pageName }
)
.done( function ( data ) {
var selector = $.escapeSelector( '.wikibase-statement-' + statement );
if ( data.success ) {
$( selector ).css( 'background-color', '#baffc9' );
} else {
$( selector ).css( 'background-color', '#ffb3ba' );
}
} );
} );
} );
},
the_end: ''
};
$( function () {
mw.hook( 'wikibase.entityPage.entityLoaded' ).add( function ( entity ) {
ico_add.init( entity );
} );
} );