وحدة:Large category TOC
مراجعة 04:02، 11 مايو 2021 بواسطة Ahmad A Najar (نقاش | مساهمات) (حمى "وحدة:Large category TOC" ([تعديل=السماح للإداريين فقط] (غير محدد) [النقل=السماح للإداريين فقط] (غير محدد)) [مضمنة])
يمكن إنشاء صفحة توثيق الوحدة في وحدة:Large category TOC/شرح
local p = {} local ArabicLetters = 'أإآبتثجحخدذرزسشصضطظعغفقكلمنهوي' local Arabic_aejot = 'إيجوت' local ArabicNumbers = '0123456789' 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=۰ 0-9]' for i=1,30 do local letter = mw.ustring.sub(ArabicLetters,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 Arabic_atoz(letter) local azlist local letterlist local maxind if toc_type == 'aejot' then letterlist = Arabic_aejot maxind = 5 else letterlist = ArabicLetters maxind = 30 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(ArabicNumbers,i,i) body_content = body_content..' ['..pageurl..'?from='..letter..' '..letter..']' end for i=1,30 do local letter = mw.ustring.sub(ArabicLetters,i,i) body_content = body_content..Arabic_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