Modul:Kemijski identifikatori


local p = {}

local entityID = mw.wikibase.getEntityIdForCurrentPage()

local identifikatori = {
	[0] = { ime = "CAS", WDprop = "P231", lokalnaval = "",  WDval = "", link = "CAS registarski broj", vp = "https://commonchemistry.cas.org/detail?cas_rn=$1"},
	[1] = { ime = "EC", WDprop = "P232", lokalnaval = "",  WDval = "", link = "EC registarski broj", vp = "https://echa.europa.eu/information-on-chemicals/"},
	[2] = { ime = "UN", WDprop = "P695", lokalnaval = "",  WDval = "", link = "UN broj", vp = "http://www.unece.org/fileadmin/DAM/trans/danger/publi/adr/adr2011/English/VolumeI.pdf"},
	[3] = { ime = "RTECS", WDprop = "P657", lokalnaval = "",  WDval = "", link = "RTECS broj", vp = "https://www.cdc.gov/niosh/npg/npgdrtec.html"},
	[4] = { ime = "PubChem", WDprop = "P662", lokalnaval = "",  WDval = "", link = "PubChem", vp = "https://pubchem.ncbi.nlm.nih.gov/compound/$1"},
	
}

function dohvatiLokalneID(frame)
	local args = mw.getCurrentFrame():getParent().args
	for i,v in pairs(identifikatori) do
		identifikatori[i].lokalnaval = args[identifikatori[i].ime] or ''
	end
end

function dohvatiWikidataID(frame, entityID)
	if (entityID) then
	--ako je trenutna stranica povezana s wikidatom
		local entity = mw.wikibase.getEntity( entityID )
		for i,v in pairs(identifikatori) do
			identifikatori[i].WDval = entity:formatPropertyValues( identifikatori[i].WDprop )["value"]
		end
	end
end

function p.dohvatiIdentifikatore(frame)
	dohvatiLokalneID(frame)
	dohvatiWikidataID(frame, entityID)
	local retval = ''
	local catbase = "Kemijski identifikatori"
	for i,v in pairs(identifikatori) do
		if (identifikatori[i].lokalnaval ~= '' and identifikatori[i].lokalnaval ~= '-' ) and identifikatori[i].WDval ~= '' then
			-- obje vrijednosti postoje
			if identifikatori[i].lokalnaval == identifikatori[i].WDval then
				--obje vrijednosti postoje i iste su
				retval = retval.. "\n|-\n| <b>[[" .. identifikatori[i].link ..'|'.. identifikatori[i].ime .. ' broj]]</b>'
				.. '\n| ['.. identifikatori[i].vp:gsub("$1", identifikatori[i].lokalnaval) .. ' ' .. identifikatori[i].lokalnaval .. ']' 
				.. ' <abbr style="color:limegreen;" title="Podatak je isti kao na Wikipodatcima"><b>✓</b></abbr>'
				.. "[[Kategorija:" .. catbase .. " isti kao na Wikipodatcima]]"
			else -- obje vrijednosti postoje no nisu iste
				retval = retval.. "\n|-\n| <b>[[" .. identifikatori[i].link ..'|'.. identifikatori[i].ime .. ' broj]]</b>'
				.. '\n| ['.. identifikatori[i].vp:gsub("$1", identifikatori[i].WDval) .. " " .. identifikatori[i].WDval .. "]" 
				.. ' <abbr style="color:red;" title="Podatak je različit od Wikipodataka (lokalni navodi '.. mw.text.encode(identifikatori[i].lokalnaval) ..')"><b>X</b></abbr>'
				.. "[[Kategorija:" .. catbase .. " različiti od Wikipodataka]]"
			end --obje jednake
		
		else -- ako jedan od podataka ne postoji
			if identifikatori[i].WDval ~= '' then
				-- WD postoji a lokalna ne postoji
				retval = retval.. "\n|-\n| <b>[[" .. identifikatori[i].link ..'|'.. identifikatori[i].ime .. ' broj]]</b>'
				.. '\n| ['.. identifikatori[i].vp:gsub("$1", identifikatori[i].WDval) .. " " .. identifikatori[i].WDval .. "]"
				.. ' <abbr style="color:darkgreen;" title="Podatak je dohvaćen s Wikipodataka"><b>✓</b></abbr>'
				.. "[[Kategorija:" .. catbase .. " dohvaćeni s Wikipodataka]]"
				else
			if identifikatori[i].lokalnaval ~= '' and identifikatori[i].lokalnaval ~= '-' then
				-- lokalna postoji a WD ne postoji
				retval = retval.. "\n|-\n| <b>[[" .. identifikatori[i].link ..'|'.. identifikatori[i].ime .. ' broj]]</b>'
				.. '\n| ['.. identifikatori[i].vp:gsub("$1", identifikatori[i].lokalnaval) .. " " .. identifikatori[i].lokalnaval .. "]" 
				.. ' <abbr style="color:darkgrey;" title="Nije moguće potvrditi; podatak nije prisutan na Wikipodatcima"><b>?</b></abbr>'
				.. "[[Kategorija:" .. catbase .. " koji nisu prisutni na Wikipodatcima]]"
				
				else 
					retval = retval..''
				end --WD postoji
			end --lokalna postoji
		end -- obje postoje
	end -- end do
	return retval
end

function p.dohvatiFormulu(frame)
	if (entityID) then
	--ako je trenutna stranica povezana s wikidatom
		return mw.wikibase
			.getEntity(entityID)
			:formatPropertyValues( 'P274')['value']
			.. ' <abbr style="color:darkgreen; position: absolute;" title="Podatak je dohvaćen s Wikipodataka"><b>✓</b></abbr>'
			.. '[[Kategorija:Kemijske formule dohvaćene s Wikipodataka]]'
	end
end

function p.dohvatiNFPA(frame)
	local ret = '\n|-\n| <b>[[NFPA 704]]</b>\n|'
	if (frame:getParent().args['NFPA 704'] ~= nil 
		and frame:getParent().args['NFPA 704'] ~= '' ) then
		
		-- provjera - baza
		-- TODO dodati logiku usporedbe
		--mw.log(frame:getParent().args['NFPA 704'])
		local check = {}
		for capture in frame:getParent().args['NFPA 704']:gmatch('%a+ [012345]%.') do
			table.insert(check, capture)
		end
		
		mw.logObject(check)

		ret = ret .. frame:getParent().args['NFPA 704']
		return ret
	else
		local WDprop = {
			['property'] = 'P4952',
			['pval'] = 'Q51139288',
			['props'] = {
				['H'] = { p = 'P993', val = '', wdval = ''},
				['F'] = { p = 'P994', val = '', wdval = ''},
				['R'] = { p = 'P995', val = '', wdval = ''},
				['O'] = { p = 'P877', val = '', wdval = ''},
			}
		}
		
		if (entityID and mw.wikibase.getEntity( entityID )['claims'][WDprop['property']] ~= nil) then
		--ako je trenutna stranica povezana s wikidatom
			local entity = mw.wikibase.getEntity( entityID )['claims'][WDprop['property']][1]
			-- provjera valjanosti
			if (entity['mainsnak']['datavalue']['value']['id'] == WDprop.pval 
				and entity['mainsnak']['property'] == WDprop.property) then
				mw.log('Provjera prolaz')
				
				for k, v in pairs(WDprop['props']) do
					if entity['qualifiers'][v['p']][1]['datavalue'] == nil then
							v['wdval'] = "0"	
						else
							v['wdval'] = entity['qualifiers'][v['p']][1]['datavalue']['value']
					end
				end

				ret = ret .. '\n'.. frame:expandTemplate{ title = 'NFPA 704', args = { 
					H = WDprop['props']['H']['wdval'],
					F = WDprop['props']['F']['wdval'],
					R = WDprop['props']['R']['wdval'],
					O = WDprop['props']['O']['wdval'],
				} } 
				ret = ret ..' <abbr style="color:darkgreen; position: absolute; line-height: 110px; padding-left: 10px;" title="Podatak je dohvaćen s Wikipodataka"><b>✓</b></abbr>'
					.. '[[Kategorija:Kemijski identifikator NFPA 704 dohvaćen s Wikipodataka]]'
			end
			else ret = ''
		end
	end
	return ret
end

return p