مسابقه دانش‌دخت
اسلامیکال از تاریخ ۱۵ دی تا ۲۰ بهمن، میزبان یک همایه با موضوع زنان است. شما می‌توانید در مسابقه مقاله‌نویسی دانش‌دخت، شرکت کنید و با نگارش مقاله، از جوایز آن بهره‌مند باشید. اگر به موضوعات مربوط با زنان علاقه‌مندید، این فرصت را از دست ندهید. فهرستی از مقالات پیشنهادی جهت ایجاد یا ویرایش در اینجا وجود دارد.

پودمان:Large category TOC

از اسلامیکال
نسخهٔ تاریخ ‏۲۲ ژانویهٔ ۲۰۲۳، ساعت ۰۴:۱۹ توسط Aboammar (بحث | مشارکت‌ها) (ساخت الگو)
(تفاوت) → نسخهٔ قدیمی‌تر | نمایش نسخهٔ فعلی (تفاوت) | نسخهٔ جدیدتر ← (تفاوت)
پرش به ناوبری پرش به جستجو

توضیحات این پودمان می‌تواند در پودمان:Large category TOC/توضیحات قرار گیرد.

local p = {}

local PersianLetters = 'ابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی'
local Persian_aejot = 'اجرصفم'
local PersianNumbers = '۰۱۲۳۴۵۶۷۸۹'
local azupper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
local azlower = 'abcdefghijklmnopqrstuvwxyz'
local aejot = 'aejot'

function p.scrollable(frame)
	return main('scrollable')
end

function p.collapsible(frame)
	return main('collapsible')
end

function p.aejot(frame)
	return main('aejot')
end

function main(toc_type)
	-- It should be much faster to only process these once, and just re use them as variables
	local pageurl = mw.title.getCurrentTitle():fullUrl()
	local toc = mw.message.new('Toc'):plain()
	
	-- Highest level div
	local toc_frame = mw.html.create('div')
				:addClass('plainlinks')
				:addClass('hlist')
				:addClass('toc')
				-- :attr('id','toc')
				:css('display','block !important')
				:css('background','WhiteSmoke')
				:css('clear','both')
				:css('width','98%')

	-- Contains "Content: Top 0-9 A - Z"
	local header = mw.html.create('div')
				:attr('id','toctitle')
				:attr('class','toctitle')
				:css('background','WhiteSmoke')
	
	-- Contains all the rest
	local body_wrapper
	local body = mw.html.create('div')
				:css('text-align', 'center')
	
	if toc_type == 'collapsible' then
		toc_frame:addClass('NavFrame')
		header:addClass('NavHead')
		body:addClass('NavContent')
			:css('background','white')
			:css('display','none')
	elseif toc_type == 'scrollable' then
		body:css('overflow-x','scroll')
			:css('overflow-y','hidden')
			:css('white-space','nowrap')
	end
	
	local header_content = '<strong>'..toc..':</strong>' ..
						' ['..pageurl..' بالا]' ..
						' ['..pageurl..'?from=۰ ۰-۹]'
						
	for i=1,32 do
		local letter = mw.ustring.sub(PersianLetters,i,i)
		header_content = header_content .. ' [' .. pageurl .. '?from=' .. letter .. ' ' .. letter .. ']'
	end
	
	header:wikitext(header_content)
	
	local body_content
	
	if toc_type == 'collapsible' then
		body_content = '<b>#</b> '
		body_wrapper = mw.html.create('code')
				:css('background','White')
	else
		body_content = '['..pageurl..'?from=* <b>*</b>] <b>#</b> '
		body_wrapper = mw.html.create('span')
	end
	
	local function Persian_atoz(letter)
		local azlist
		local letterlist
		local maxind
		if toc_type == 'aejot' then
			letterlist = Persian_aejot
			maxind = 6
		else
			letterlist = PersianLetters
			maxind = 32
		end
				
		if toc_type == 'aejot' or toc_type == 'scrollable' then
			azlist = ' • <b>'..letter..'</b> '
		else
			azlist = '<br /><b>'..letter..'</b> '
		end
			
		for i=1,maxind do
			local lowerletter = mw.ustring.sub(letterlist,i,i)
			azlist = azlist..' ['..pageurl..'?from='..letter..lowerletter..' '..letter..lowerletter..'] '
		end
		return azlist
	end
	
	for i=1,10 do
		local letter = mw.ustring.sub(PersianNumbers,i,i)
		body_content = body_content..' ['..pageurl..'?from='..letter..' '..letter..']'
	end
	
	for i=1,32 do
		local letter = mw.ustring.sub(PersianLetters,i,i)
		body_content = body_content..Persian_atoz(letter)
	end
	
	body_content = body_content .. '<br />'
	body_content = body_content .. '<br />'
	
	for i=1,26 do
		local letter = string.sub(azupper,i,i)
		body_content = body_content..' ['..pageurl..'?from='..letter..' '..letter..']'
	end
	
	body_content = body_content .. '<br />'
	
	local function atoz(letter)
		local azlist
		local letterlist
		local maxind
		if toc_type == 'aejot' then
			letterlist = aejot
			maxind = 5
		else
			letterlist = azlower
			maxind = 26
		end
				
		if toc_type == 'aejot' or toc_type == 'scrollable' then
			azlist = ' • <b>'..letter..'</b> '
		else
			azlist = '<br /><b>'..letter..'</b> '
		end
			
		for i=1,maxind do
			local lowerletter = string.sub(letterlist,i,i)
			azlist = azlist..' ['..pageurl..'?from='..letter..lowerletter..' '..letter..lowerletter..'] '
		end
		return azlist
	end
	
	for i=0,9 do
		body_content = body_content..' ['..pageurl..'?from='..i..' '..i..']'
	end
	
	for i=1,26 do
		local letter = string.sub(azupper,i,i)
		body_content = body_content..atoz(letter)
	end
	
	body_wrapper:wikitext(body_content)
	body:node(body_wrapper)
	toc_frame:node(header)
	toc_frame:node(body)
	
	return '__NOTOC__\n'..tostring(toc_frame)
end

return p