Модуль:Алфавитный указатель

Материал из Кадровый состав НКВД 1935-1939
Перейти к: навигация, поиск

Для документации этого модуля может быть создана страница Модуль:Алфавитный указатель/doc

local pp = {}
local tools = require( 'Module:Tools' )
local perstools = require( 'Module:PersTools' )
local cq = mw.ext.cargo.query

local pages = {
'А', 'Ав', 'Аг', 'Ак', 'Ал', 'Алексеев', 'Али', 'Ан', 'Анд', 'Ани', 'Анс', 'Ап', 'Ар', 'Арт', 'Ас', 'Аф',
'Б', 'Баж', 'Бал', 'Бар', 'Барг', 'Бас', 'Бе', 'Бел', 'Белок', 'Бем', 'Бес', 'Бл', 'Бо', 'Бог', 'Бод',
'Бол', 'Бор', 'Борк', 'Бос', 'Бр', 'Бу', 'Бул', 'Бур', 'Бут', 'Бы', 'В', 'Вар', 'Вас', 'Васильева', 'Ват',
'Ве', 'Вес', 'Ви', 'Вис', 'Вл', 'Во', 'Вол', 'Волл', 'Вон', 'Вор', 'Воронков', 'Вос', 'Г', 'Гал', 'Гап',
'Ге', 'Ги', 'Гл', 'Гм', 'Го', 'Гол', 'Голу', 'Гом', 'Гор', 'Гори', 'Гос', 'Гр', 'Гри', 'Грид', 'Гро', 'Гу',
'Гур', 'Гус', 'Д', 'Дан', 'Дв', 'Де', 'Дем', 'Ден', 'Дж', 'Дм', 'До', 'Дом', 'Др', 'Ду', 'Дун', 'Е', 'Ег',
'Ел', 'Ер', 'Еро', 'Ж', 'Же', 'Жл', 'З', 'Зай', 'Зан', 'Зах', 'Зб', 'Зе', 'Зи', 'Зо', 'Зу', 'И', 'Ив',
'Иванов, Н', 'Иванс', 'Иве', 'Ил', 'Ио', 'Ис', 'К', 'Каз', 'Кал', 'Калм', 'Кам', 'Кап', 'Кар', 'Карл', 'Кас',
'Кач', 'Кв', 'Ки', 'Кир', 'Кис', 'Кл', 'Клу', 'Ко', 'Ков', 'Код', 'Коз', 'Козлова', 'Кой', 'Кол', 'Коло',
'Ком', 'Кон', 'Коно', 'Коп', 'Кор', 'Коро', 'Корот', 'Кос', 'Кост', 'Кот', 'Коч', 'Кр', 'Крас', 'Кре', 'Кро',
'Кры', 'Ку', 'Куз', 'Кузнецов', 'Кузнеч', 'Куи', 'Кул', 'Куликов', 'Кум', 'Кур', 'Курк', 'Кус', 'Л', 'Лао',
'Ле', 'Лев', 'Лем', 'Лес', 'Ли', 'Лит', 'Ло', 'Лок', 'Лу', 'Лун', 'Лы', 'Лю', 'М', 'Мак', 'Маки', 'Мал',
'Малы', 'Мам', 'Мар', 'Март', 'Мас', 'Мат', 'Мах', 'Ме', 'Мел', 'Мер', 'Ми', 'Мин', 'Мир', 'Мит', 'Мих',
'Михе', 'Миц', 'Мо', 'Мол', 'Мор', 'Мос', 'Му', 'Мур', 'Мух', 'Н', 'Нап', 'Не', 'Неп', 'Ник', 'Нико', 'Нил',
'Нов', 'Ног', 'О', 'Ог', 'Ок', 'Ор', 'Ос', 'От', 'П', 'Пад', 'Пан', 'Пап', 'Пах', 'Пе', 'Пер', 'Пет',
'Петров', 'Петрович', 'Пеф', 'Пи', 'Пис', 'Пл', 'По', 'Под', 'Пол', 'Полу', 'Пом', 'Поп', 'Попов', 'Пор',
'Пот', 'Пр', 'Про', 'Пру', 'Пу', 'Пч', 'Р', 'Рак', 'Ре', 'Рем', 'Рж', 'Ро', 'Роз', 'Ром', 'Рос', 'Ру', 'Рус',
'Ры', 'Ря', 'С', 'Сав', 'Саг', 'Сал', 'Сам', 'Сап', 'Саф', 'Сб', 'Се', 'Сем', 'Сен', 'Сер', 'Сере', 'Сес',
'Си', 'Сил', 'Сир', 'Ск', 'Сл', 'См', 'Сми', 'Смирнов', 'Смо', 'Со', 'Сок', 'Сол', 'Солог', 'Сом', 'Сп', 'Ст',
'Сте', 'Сто', 'Сту', 'Сум', 'Суч', 'Т', 'Тар', 'Тас', 'Те', 'Тес', 'Тит', 'Тк', 'То', 'Тор', 'Тр', 'Ту', 'Тю',
'У', 'Ур', 'Ут', 'Ф', 'Фед', 'Федос', 'Фей', 'Фил', 'Фим', 'Фо', 'Фр', 'Х', 'Хар', 'Хе', 'Хо', 'Хох', 'Ху',
'Ц', 'Ци', 'Ч', 'Че', 'Чер', 'Черног', 'Чи', 'Чу', 'Чур', 'Ш', 'Шам', 'Шар', 'Шв', 'Ше', 'Шен', 'Ши', 'Шир',
'Шк', 'Шн', 'Шт', 'Шу', 'Шус', 'Щ', 'Э', 'Ю', 'Юр', 'Я', 'Як', 'Ял', 'Ят',
}

pp[''] = function ( frame )
-- параметр: мое начало
	local arg = mw.text.trim( frame:getParent().args[1] or '' )
	if arg  == '' then
		arg = mw.ustring.match( mw.title.getCurrentTitle().text, ':([^:]+)$' ) or 'А'
	end
	local pidx
	for i, v in ipairs( pages ) do
		if v == arg then
			pidx = i
			break
		end
	end
	if not pidx then
		error( 'Указатель «' .. arg .. '» отсутствует в перечислении' )
	end
	local pager, start, finish
	-- <div style="border:1px solid blue; padding:5px; border-radius:10px; width:100%; max-width:200px; text-align:center;">[[НКВД:Именной указатель:Воронков|<i class="fa fa-chevron-left fa-lg></i> Воронков]]</div>
	if pidx ~= 1 then
		pager = '[[НКВД:Именной указатель:' .. pages[pidx-1]
			.. '|<i class="fa fa-chevron-left fa-lg></i> ' .. pages[pidx-1] .. ']]'
		start = 'lastN >= "' .. pages[pidx] .. '"'
	end
	pager = '<table width="100%" style="max-width:900px;"><tr><td width="50%">' .. (pager or '')
		.. '</td><td align="right">'
	if pidx ~= #pages then
		pager = pager .. '[[НКВД:Именной указатель:' .. pages[pidx+1]
			.. '|' .. pages[pidx+1] .. ' <i class="fa fa-chevron-right fa-lg></i>]]'
		finish = 'lastN < "' .. pages[pidx+1] .. '"'
		if start then
			finish = finish .. ' AND ' .. start
			start = nil
		end
	end
	pager = pager .. '</td></tr></table>'
--	local queryT = frame:callParserFunction{ name = '#cargo_query', args = { '',
--		tables = 'names',
--		where = (start or '') .. (finish or ''),
--		fields = 'name,disambig,CONCAT(names._pageName)=pn',
--		['order by'] = 'name',
--		limit = '999',
--		format = 'native'
--	} }
--	local query = mw.ext.cargo.get()
	local query = cq( 'names_table', 'lastN, firstN, middleN ,disambig,_pageName', {
		where = (start or '') .. (finish or ''),
		orderBy = 'lastN, firstN, middleN, disambig',
		limit = '999',
	} )
--	do
--		return mw.dumpObject( query )
--	end

	if not query then
		return 'Эта страница именного указателя пуста. Обычно это означает, что осуществляются регламентые работы с базой данных. [[Категория:Пустой именной указатель]]'
	end

	local out = { pager, '<table width="100%" style="max-width:900px;"><tr><td valign="top" width="50%">'  }
	local fio
	local half = (#query-1) * 0.5
	for  i, pers in ipairs( query ) do
		fio = '* ' .. perstools.makePersonLink( { nLast=pers.lastN, nFirst=pers.firstN, nMiddle=pers.middleN, nDisambig=pers.disambig } )
--		if pers.disambig ~= '' then
--			fio = '* [[' .. pers._pageName .. '|' .. pers.name .. ' <span class="nkvd-idx">' .. pers.disambig .. '</span>]]'
--		else
--			fio = '* [[' .. pers._pageName .. '|' .. pers.name .. ']]'
--		end
		table.insert( out, fio )
		if i > half then
			table.insert( out, '</td><td valign="top">' )
			half = 999999
		end

	end
	table.insert( out, '</td></tr></table>' )
	table.insert( out, pager )
	return table.concat( out, '\n' )
end

function pp.List ( frame )
	local out = {}
	local t
	for _, v in ipairs( pages ) do
		if mw.ustring.len( v ) == 1 then
			t = '<big><b>' .. v .. '</b></big>'
		else
			t = v
		end
		table.insert( out, '[[НКВД:Именной указатель:' .. v .. '|' .. t .. ']]' )
	end
	return table.concat( out, '&nbsp;&bull; ' )
end



return pp

--[===[

	arg = mw.text.trim( frame:getParent().args[1] )
	if mw.ustring.len( arg ) == 1 then
--		return '<big><b>' .. frame:preprocess( '{{Special:AllPages/' .. arg .. '}}' ) .. '</b></big>'
		return '<big><b>[[Special:AllPages/' .. arg .. '|' .. arg .. ']]</b></big>'
	end
	return '[[Special:AllPages/' .. arg .. '|' .. arg .. ']]'
--]===]