ФЭНДОМ


-- Модуль для функционала Викиданных
local M={};
 
local function tabletostr(t,fmt,s,o,c)--не для использования на страницах
    if type(t)=="table" then
            local f={};
            for k,v in pairs(t) do
                table.insert(f,string.format(fmt or '%s = %s',k,tabletostr(v,fmt,s,o,c)))
            end;
            table.sort(f);
            return (o or '')..table.concat(f, s or '')..(c or '')
        else return tostring(t)
        end
end
 
function M.wbview(ref,id)--вспом. функция для подписи из Викиданных
    local l=mw.wikibase.label(id);
    return l and ( l==ref and l or ref..'|'..l..(mw.ustring.lower(l)==mw.ustring.lower(ref) and '' or '<sup>*</sup>') ) or ref
end
 
function M.id(f)-- Элемент текущей страницы в Викиданных
    --Если вызван с параметром, достаёт id значения данного свойства, иначе возвращает id страницы
    --Второй параметр - разделитель, если значений несколько ("; " по умолчанию),
    -- либо можно указать номер параметром n. Третий параметр - формат для строкового свойства,
    -- по умолчанию "%s"
    local function try()
	    local e = mw.wikibase.getEntityObject();        
	    if f.args[1] then
			local function gv(i)
				local z=e.claims[f.args[1]][i].mainsnak.datavalue;
				if z.type == 'wikibase-entityid' then
					return 'Q'..z.value['numeric-id']
				else
					return string.format(f.args[3] or '%s',tabletostr(z.value,"%s",'; ','{','}'))
				end
			end
			if f.args['n'] then
				return gv(tonumber(f.args['n']))
			end
			local p,h = e.claims[f.args[1]],{}
	        for n,v in pairs(p) do
				h[n] = gv(n)
			end
			return table.concat(h,f.args[2] or "; ")
		else 
			return e.id
		end
	end
	local r, result = pcall(try);
    if r then
    	return result;
    else
    	return '<strong class="error">В Викиданных нет записей для текущей страницы</strong>';
    end
end
 
function M.struc(f)-- Отладочная функция, будет перенесена в отдельный модуль
    --Структуру см. [[mw:Extension:WikibaseClient/Lua#Entity table and data structure]]
    local function try()
    	local i,e = 1,mw.wikibase.getEntityObject();
	    while f.args[i] do
	        e = e[ f.args[i] ] or e[ tonumber(f.args[i]) ];
	        i = i+1
	    end
		return tabletostr(e,f.args['f'],f.args['s'] or '; ','{','}')
	end
	local r, result = pcall(try);
    if r then
    	return result;
    else
    	return '<strong class="error">В Викиданных нет записей для текущей страницы</strong>';
    end
end
 
function M.label(f)--Комментарий к элементу Викиданных в 1-м параметре
    local function try()
	    local id = f.args[1];
	    if not id or id == '' then
	    	id = mw.wikibase.getEntityObject().id; -- error, если нет элемента
    	end
	    return mw.wikibase.label(id);
    end
	local r, result = pcall(try);
    if r then
    	return result;
    else
    	return '<strong class="error">В Викиданных нет записей для текущей страницы</strong>';
    end
end
 
function M.description(f)
    local function try()
	    local id = f.args[1];
	    if not id or id == '' then
	    	id = mw.wikibase.getEntityObject().id; -- error, если нет элемента
    	end
	    return mw.wikibase.description(id)
    end
	local r, result = pcall(try);
    if r then
    	return result;
    else
    	return '<strong class="error">В Викиданных нет записей для указанной страницы</strong>';
    end
end
 
function M.iwiki(f)-- Интервики для указанного языка (только с ВД)
    local function try()
	    if f.args[1] then
	        return mw.wikibase.getEntityObject().sitelinks[f.args[1]..'wiki'].title
	    else-- список интервик
	        local r={};
	        for k,v in pairs( mw.wikibase.getEntityObject().sitelinks ) do
	            table.insert( r, string.format(f.args['f'] or "* [[:%s:%s]]\n", v.language, v.title) )
	        end
	        return table.concat(r)
	    end
	end
	local r, result = pcall(try);
    if r then
    	return result;
    else
    	return '<strong class="error">В Викиданных нет записей для текущей страницы</strong>';
    end
end
 
function M.iwikiall(f)-- Все ссылки, привязанные к элементу на ВД, в т.ч. викигид и склад
    local function try()
	    if f.args[1] then
	        return mw.wikibase.getEntityObject().sitelinks[f.args[1]].title
	    else-- список интервик
	        local r={};
	        for k,v in pairs( mw.wikibase.getEntityObject().sitelinks ) do
	            table.insert( r, string.format(f.args['f'] or "* [[:%s:%s]]\n", v.language, v.title) )
	        end
	        return table.concat(r)
	    end
	end
	local r, result = pcall(try);
    if r then
    	return result;
    else
    	return '';
    end
end
 
function M.page(f)-- страница Рувики для данного элемента
    local function try()
		return mw.wikibase.sitelink(f.args[1])
	end
	local r, result = pcall(try);
    if r then
    	return result;
    else
    	return '<strong class="error">В Викиданных нет записей для текущей страницы</strong>';
    end
end
 
function M.wdprops(f)-- список всех свойств с ВД в человеко-читаемом виде
    local function try()
	    local e,r = mw.wikibase.getEntityObject(),{};
	    for p,a in pairs(e.claims) do
	        local label = mw.wikibase.label(p) or string.format([[d:%s]],p);
	        local vals = {};
	        for n,v in pairs(a) do
	            local w=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']
	                )..']]' or M.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
    	return table.concat(r)
    end
	local r, result = pcall(try);
    if r then
    	return result;
    else
    	return '<strong class="error">В Викиданных нет записей для текущей страницы</strong>';
    end
end
 
return M

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.

Также на ФЭНДОМЕ

Случайная вики