Mine sisu juurde

Moodul:Wikibase

Allikas: Vikipeedia

Selle mooduli dokumentatsiooni saab kirjutada asukohtaMoodul:Wikibase/doc.

-- Модуль для функционала Викиданных
localM={};

localfunctiontabletostr(t,fmt,s,o,c)--не для использования на страницах
iftype(t)=="table"then
localf={};
fork,vinpairs(t)do
table.insert(f,string.format(fmtor'%s = %s',k,tabletostr(v,fmt,s,o,c)))
end;
table.sort(f);
return(oor'')..table.concat(f,sor'')..(cor'')
elsereturntostring(t)
end
end

functionM.wbview(ref,id)--вспом. функция для подписи с викиданных
locall=mw.wikibase.label(id);
returnland(l==refandlorref..'|'..l..(mw.ustring.lower(l)==mw.ustring.lower(ref)and''or'<sup>*</sup>'))orref
end

functionM.id(f)-- Элемент текущей страницы на Викиданных
--Если вызван с параметром, достаёт id значения данного свойства, иначе возвращает id страницы
--Второй параметр - разделитель, если значений несколько ( ";" по умолчанию),
-- либо можно указать номер параметром n. Третий параметр - формат для строкового свойства,
-- по умолчанию "%s"
localfunctiontry()
locale=mw.wikibase.getEntityObject();
iff.args[1]then
localfunctiongv(i)
localz=e.claims[f.args[1]][i].mainsnak.datavalue;
ifz.type=='wikibase-entityid'then
return'Q'..z.value['numeric-id']
else
returnstring.format(f.args[3]or'%s',tabletostr(z.value,"%s",'; ','{','}'))
end
end
iff.args['n']then
returngv(tonumber(f.args['n']))
end
localp,h=e.claims[f.args[1]],{}
forn,vinpairs(p)do
h[n+1]=gv(n)
end
returntable.concat(h,f.args[2]or";")
else
returne.id
end
end
localr,result=pcall(try);
ifrthen
returnresult;
else
return'';--'<strong class= "error" >В Викиданных нет записей для текущей страницы</strong>';
end
end

functionM.struc(f)-- Отладочная функция, будет перенесена в отдельный модуль
--Структуру см. [[mw:Extension:WikibaseClient/Lua#Entity table and data structure]]
localfunctiontry()
locali,e=1,mw.wikibase.getEntityObject();
whilef.args[i]do
e=e[f.args[i]]ore[tonumber(f.args[i])];
i=i+1
end
returntabletostr(e,f.args['f'],f.args['s']or'; ','{','}')
end
localr,result=pcall(try);
ifrthen
returnresult;
else
return'';--'<strong class= "error" >В Викиданных нет записей для текущей страницы</strong>';
end
end

functionM.label(f)--Комментарий к элементу Викиданных в 1-м параметре
localfunctiontry()
localid=f.args[1]ormw.wikibase.getEntityObject().id;-- error, если нет элемента
returnmw.wikibase.label(id)
end
localr,result=pcall(try);
ifrthen
returnresult;
else
return'';--'<strong class= "error" >В Викиданных нет записей для текущей страницы</strong>';
end
end

functionM.iwiki(f)-- Интервики для указанного языка (только с ВД)
localfunctiontry()
iff.args[1]then
returnmw.wikibase.getEntityObject().sitelinks[f.args[1]..'wiki'].title
else-- список интервик
localr={};
fork,vinpairs(mw.wikibase.getEntityObject().sitelinks)do
table.insert(r,string.format(f.args['f']or"* [[:%s:%s]]\n",v.language,v.title))
end
returntable.concat(r)
end
end
localr,result=pcall(try);
ifrthen
returnresult;
else
return'';--'<strong class= "error" >В Викиданных нет записей для текущей страницы</strong>';
end
end

functionM.iwikiall(f)-- Все ссылки, привязанные к элементу на ВД, в т.ч. викигид и склад
localfunctiontry()
iff.args[1]then
returnmw.wikibase.getEntityObject().sitelinks[f.args[1]].title
else-- список интервик
localr={};
fork,vinpairs(mw.wikibase.getEntityObject().sitelinks)do
table.insert(r,string.format(f.args['f']or"* [[:%s:%s]]\n",v.language,v.title))
end
returntable.concat(r)
end
end
localr,result=pcall(try);
ifrthen
returnresult;
else
return'';
end
end

functionM.page(f)-- страница Рувики для данного элемента
localfunctiontry()
returnmw.wikibase.sitelink(f.args[1])
end
localr,result=pcall(try);
ifrthen
returnresult;
else
return'';--'<strong class= "error" >В Викиданных нет записей для текущей страницы</strong>';
end
end

functionM.wdprops(f)-- список всех свойств с ВД в человеко-читаемом виде
localfunctiontry()
locale,r=mw.wikibase.getEntityObject(),{};
forp,ainpairs(e.claims)do
locallabel=mw.wikibase.label(p)orstring.format([[d:%s]],p);
localvals={};
forn,vinpairs(a)do
localw=v.mainsnak.datavalue;
vals[n]=(
w.type=='wikibase-entityid'
and'[['..M.wbview(
mw.wikibase.sitelink('Q'..w.value['numeric-id'])
or'd:Q'..w.value['numeric-id'],
'Q'..w.value['numeric-id']
)..']]'orM.tabletostr(w.value)
)
end
table.insert(r,string.format(
f.args['f']or'\n|-\n|rowspan=%i|%s\n|%s',
#vals,
label,
table.concat(vals,f.args['s']or'\n|-\n|')
)
)
end--for
returntable.concat(r)
end
localr,result=pcall(try);
ifrthen
returnresult;
else
return'';--'<strong class= "error" >В Викиданных нет записей для текущей страницы</strong>';
end
end

returnM