Модуль:Пушистость

Материал из ВикиФур
Перейти к: навигация, поиск
local p={} local s=require('Модуль:Работа со строками') local str_replace=s.str_replace p.indicators= { furry= { title = 'Статья с пушистостью «Фурри-сообщество»', syns = {'для фуррей', 'от фуррей'}, category= 'Статьи с пушистостью «Фурри-сообщество»', image = 'Paw-print.svg.png', width = 30 }, anthro= { title ='Статья с пушистостью «Антропоморфы»', syns = { 'антропоморфы', 'антропоморф', 'антро', 'sonic', 'sonic the hedgehog', 'соник', 'соники' --остались после упразднения этой пушистости }, category='Статьи с пушистостью «Антропоморфы»', image ='Furry form2.png', width = 20 }, zoo= { title ='Статья с пушистостью «Животные»', syns = { 'животные', 'животное', 'зооморф', 'зооморфы', 'зоо', 'четвероногие', 'mlp', 'my little pony', 'млп', 'зооморфная цивилизация', 'зооцив', 'зооцивилизация', 'четвероногая цивилизация', 'сказочная цивилизация' --остались после упразднения этой пушистости }, category='Статьи с пушистостью «Животные»', image ='Med ppf pic.png' }, taur= { title = 'Статья с пушистостью «Тавры»', syns = {'тавр', 'тавры'}, category= 'Статьи с пушистостью «Тавры»', image = 'Taur icon candidate3.png', width = 50, height = 50 }, humanlike= { title ='Статья с пушистостью «Почти люди»', syns ={'почти люди', 'кэмономими', 'кемономими', 'нэко', 'нэки', 'неки', 'нека', 'гидзинка', 'гидзинки'}, category='Статьи с пушистостью «Почти люди»', image ='Low ppf pic.png' }, mythic= { title ='Статья с пушистостью «Мифические существа»', syns ={'мифические существа', 'мифические', 'мифическое существо', 'мифик', 'мифологические существа', 'мифологическое существо', 'мифологические', 'дракон', 'драконы', 'грифон', 'грифоны'}, category='Статьи с пушистостью «Мифические существа»', image ='Mythologic ppf pic 4.png' }, monster= { title ='Статья с пушистостью «Монстры»', syns ={'монстры', 'монстр', 'кайдзю', 'дайкайдзю', 'моны', 'мон'}, category='Статьи с пушистостью «Монстры»', image ='Strange beast.png' }, were= { title ='Статья с пушистостью «Оборотни»', syns ={'оборотни', 'оборотень', 'полиморфы', 'полиморф', 'метаморфы', 'метаморф', 'веры', 'вер'}, category='Статьи с пушистостью «Оборотни»', image ='Were.png' }, plus_humans= { title ='Статья с пушистостью «Плюс люди»', syns ={'плюс люди', 'и люди', 'также люди', 'плюс человек', 'и человек', 'также человек', 'люди', 'человек'}, category='Статьи с пушистостью «Плюс люди»', image ='Human201510161003.png' } } p.map=false p.SPACING = 4 p.DEFAULT_WIDTH=40 p.DEFAULT_HEIGHT=40 p.indicator_template= "<div style=\"position:absolute; z-index:100; right:50px; top:15px;\" class=\"metadata\" id=\"floating_object\">\n" p.indicator_template=p.indicator_template.. "<div style=\"position: absolute; top: 0px; left:%shift%px; z-index: 2;\" title=\"%title%\">\n" p.indicator_template=p.indicator_template.. "[[Категория:%category%|{{PAGENAME}}]]<imagemap>\n" p.indicator_template=p.indicator_template.. " Image:%image%|%width%x%height%px\n" p.indicator_template=p.indicator_template.. " default [[:Категория:%category%]]\n" p.indicator_template=p.indicator_template.. " desc none\n" p.indicator_template=p.indicator_template.. "</imagemap>\n" p.indicator_template=p.indicator_template.. "</div></div>" function p.indicators_from_template(frame) return p.indicators_from_frame(frame:getParent()) end p['индикаторы для шаблона']=p.indicators_from_template function p.indicators_from_frame(frame) local result=p.indicators_from_list(frame.args) -- return result return frame:preprocess(result) end p['индикаторы для вызова']=p.indicators_from_frame function p.indicators_from_list(list) local result='' list=p.normalize_list(list) local count=table.getn(list) if count == 0 then return '' end local width, offset, expanded offset = 0 for i, v in ipairs(list) do if v.width then width = v.width else width = p.DEFAULT_WIDTH end offset = offset + width end offset = offset - width -- не считаем последний индикатор; то есть, крайний правый индикатор должен быть на 0 offset = offset + (count - 1)*p.SPACING for i, v in ipairs(list) do expanded, width = p.expand_indicator(v, offset) result = result..expanded offset = offset - width - p.SPACING end return result end function p.expand_indicator(data, offset) local result=p.indicator_template result=str_replace(result, '%image%', data.image) result=str_replace(result, '%category%', data.category) result=str_replace(result, '%title%', data.title) local width, height if data.width then width = data.width else width = p.DEFAULT_WIDTH end if data.height then height = data.height else height = p.DEFAULT_HEIGHT end result=str_replace(result, '%width%', tostring(width)) result=str_replace(result, '%height%', tostring(height)) result=str_replace(result, '%shift%', tostring(-offset)) return result, width end function p.normalize_list(list) p.map_indicators() local normal_code local normal_list={} local used_keys={} for i, v in ipairs(list) do normal_code=mw.ustring.lower(v) if p.map[normal_code] and not used_keys[normal_code] then used_keys[normal_code] = true table.insert(normal_list, p.indicators[p.map[normal_code]]) end end return normal_list end function p.map_indicators() if p.map then return end p.map={} for i, v in pairs(p.indicators) do p.map[i]=i for i2, v2 in ipairs(v.syns) do p.map[v2]=i end end end return p