Selasa, 06 Oktober 2026
02:53 WIB
TERKINI
Hukum Pengiriman 1,68 Juta Batang Rokok Ilegal Terbongkar di Tol Tulang Bawang Hiburan No Na Kibarkan Merah Putih: Video Musik 'Work' Tembus UK Music Video Awards 2026 Regional Duel Sengit Barito Putera dan Tira Persikabo Ramaikan Panggung Liga 1 Regional Barito Putera Taklukkan Persebaya Surabaya dengan Skor Tipis 1-0 Regional Evakuasi Korban Tabrakan Speedboat Paspampres di Palangkaraya Dilakukan Teknologi Waspada! Trojan Perbankan Seluler Melonjak, Keamanan HP Jadi Krusial Otomotif Kiat Cerdas Memilih Mobil Listrik Bekas: Prioritaskan Kondisi Baterai dan Biaya Jangka Panjang Lampung Prakiraan Cuaca Lampung 5 Oktober 2026: Cerah Berawan Disertai Hujan Lokal Lampung Musim Hujan Lampung 2026/2027: BMKG Prediksi Puncak Januari, Awalnya Mundur Cuaca Prakiraan Cuaca Lampung 4 Oktober 2026: Cerah Berawan dengan Potensi Hujan Ringan Hukum Pengiriman 1,68 Juta Batang Rokok Ilegal Terbongkar di Tol Tulang Bawang Hiburan No Na Kibarkan Merah Putih: Video Musik 'Work' Tembus UK Music Video Awards 2026 Regional Duel Sengit Barito Putera dan Tira Persikabo Ramaikan Panggung Liga 1 Regional Barito Putera Taklukkan Persebaya Surabaya dengan Skor Tipis 1-0 Regional Evakuasi Korban Tabrakan Speedboat Paspampres di Palangkaraya Dilakukan Teknologi Waspada! Trojan Perbankan Seluler Melonjak, Keamanan HP Jadi Krusial Otomotif Kiat Cerdas Memilih Mobil Listrik Bekas: Prioritaskan Kondisi Baterai dan Biaya Jangka Panjang Lampung Prakiraan Cuaca Lampung 5 Oktober 2026: Cerah Berawan Disertai Hujan Lokal Lampung Musim Hujan Lampung 2026/2027: BMKG Prediksi Puncak Januari, Awalnya Mundur Cuaca Prakiraan Cuaca Lampung 4 Oktober 2026: Cerah Berawan dengan Potensi Hujan Ringan

Modul:Excerpt slideshow

Wikimedia module

Bagikan:
Dokumentasi modulbuatsegarkan
Anda dapat membuat halaman dokumentasi untuk buat pada modul Scribunto ini.
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
localp={}
localexcerptModule=require('Module:Excerpt/portals')
localslideshowModule=require('Module:Random slideshow')
localrandomModule=require('Module:Random')
localDEFAULT_LIMIT=25-- max number of excerpts to be shown in the slideshow
localSOURCE_PAGES_LIMIT=10-- max number of pages to check for links / list items
-- begin BHG addition for tracking source pages
localsourcepgagesused={};
localsourcepgagesusedcounter=0;
localarticlelistcount=-1;
localusesEmbeddedList=false;
-- end BHG addition for tracking source pages
functioncleanupArgs(argsTable)
localcleanArgs={}
forkey,valinpairs(argsTable)do
iftype(val)=='string'then
val=val:match('^%s*(.-)%s*$')
ifval~=''then
cleanArgs[key]=val
end
else
cleanArgs[key]=val
end
end
returncleanArgs
end
functionisDeclined(val)
ifnotvalthenreturnfalseend
localdeclinedWords=" decline declined exclude excluded false none not no n off omit omitted remove removed "
returnstring.find(declinedWords,' '..val..' ',1,true)andtrueorfalse
end
--[[
	@param {String} wikitext: Wikitext of just the list (i.e. each line is a list item)
	@param {String} symbol:   Special character used in the wikitext markup for the list, e.g. '*' or '#'
	@param {String} outerTag: Text portion of the tag for each list or sublist, e.g. 'ul' or 'ol'
	@param {String} innerTag: Text portion of the tag for each list item, e.g. 'li'
]]
localwikitextToHtmlList=function(wikitext,symbol,outerTag,innerTag)
locallistParts={}
forlevel,iteminmw.ustring.gmatch('\n'..wikitext..'\n','\n(%'..symbol..'+)(.-)%f[\n]')do
table.insert(listParts,{level=level,item=item})
end
table.insert(listParts,{level='',item=''})
localhtmlList={}
fori,thisinipairs(listParts)do
localisFirstItem=(i==1)
localisLastItem=(i==#listParts)
locallastLevel=isFirstItemand''orlistParts[i-1]['level']
localtags
if#lastLevel==#this.levelthen
tags='</'..innerTag..'><'..innerTag..'>'
elseif#this.level>#lastLevelthen
tags=string.rep('<'..outerTag..'><'..innerTag..'>',#this.level-#lastLevel)
elseifisLastItemthen
tags=string.rep('</'..innerTag..'></'..outerTag..'>',#lastLevel)
else-- ( #this.level < #lastLevel ) and not last item
tags=string.rep('</'..innerTag..'></'..outerTag..'>',#lastLevel-#this.level)..'</'..innerTag..'><'..innerTag..'>'
end
table.insert(htmlList,tags..this.item)
end
returntable.concat(htmlList)
end
--[[
	@param {String} wikitext: Wikitext excertp containg zero or more lists
	@param {String} symbol:   Special character used in the wikitext markup for the list, e.g. '*' or '#'
	@param {String} outerTag: Text portion of the tag for each list or sublist, e.g. 'ul' or 'ol'
	@param {String} innerTag: Text portion of the tag for each list item, e.g. 'li'
]]
localgsubWikitextLists=function(wikitext,symbol,outerTag,innerTag)
-- temporarily remove list linebreaks... 
wikitext=mw.ustring.gsub(wikitext..'\n','\n%'..symbol,'¿¿¿'..symbol)
-- ...so we can grab the whole list (and just the list)...
returnmw.ustring.gsub(
wikitext,
'¿¿¿%'..symbol..'[^\n]+',
function(listWikitext)
-- ...and then reinstate linebreaks...
listWikitext=mw.ustring.gsub(listWikitext,'¿¿¿%'..symbol,'\n'..symbol)
-- ...and finally do the conversion
returnwikitextToHtmlList(listWikitext,symbol,outerTag,innerTag)
end
)
end
--[[ help gsub strip tables and templates that aren't part of the prose,
     and remove linebreaks from within other templates,
     and preprocess parser functions ]]
localprocessBraces=function(t)
localisTable=mw.ustring.sub(mw.text.trim(t),2,2)=='|'
ifisTablethen
return''
end
-- else it's a template or parser function
localfirst=mw.ustring.sub(t,1,1)
locallast=mw.ustring.sub(t,-1)
localisNotPartOfProse=first=='\n'andlast=='\n'
ifisNotPartOfProsethen
return''
end
localisParserFunction=mw.ustring.sub(mw.text.trim(t),3,3)=='#'
ifisParserFunctionthen
localframe=mw.getCurrentFrame()
returnframe:preprocess(t)
end
-- else remove internal linebreaks
returnmw.ustring.gsub(t,'\n*','')
end
localcleanUpExcerpt=function(excerpt)
-- strip galleries
excerpt=mw.ustring.gsub(excerpt,"<%s*[Gg]allery.->.-<%s*/%s*[Gg]allery%s*>","")
-- strip tables and block templates; strip newlines
excerpt=mw.ustring.gsub(excerpt..'\n','\n?%b{}\n?',processBraces)
-- replace wikitext bulleted lists with html bulleted lists
excerpt=gsubWikitextLists(excerpt,'*','ul','li')
-- replace wikitext numbered lists with html numbered lists
excerpt=gsubWikitextLists(excerpt,'#','ol','li')
excerpt=mw.text.trim(excerpt)
returnexcerpt
end
functionmakeGalleryArgs(titles,options,limit,nonRandom)
localgalleryArgs={}
localtitlesSequence={}
locali=1
whiletitles[i]do
titlesSequence[i]=titles[i]
i=i+1
end
localsortedTitles=nonRandomandtitlesSequenceorrandomModule.main('array',{t=titlesSequence,limit=limit})
for_i,titleinipairs(sortedTitles)do
if(#galleryArgs/2)<limitthen
localsuccess,excerpt=pcall(excerptModule.get,title,options)
ifnotsuccessthen
mw.log("require('Module:Excerpt').get failed: "..excerpt)-- probably got a redlink
excerpt=nil
end
ifexcerptandexcerpt~=''and#excerpt>10then-- check again in case we had a few characters plus (Full article...)
excerpt=cleanUpExcerpt(excerpt)
ifoptions.morethen
excerpt=excerpt.." ('''[["..title.."|"..options.more.."]]''')"
end
localtext='<div style="text-align:left;">'..mw.ustring.gsub(excerpt,'%c','<br>')..'</div>'
table.insert(galleryArgs,'File:Blank.png')
table.insert(galleryArgs,text)
end
end
end
ifnonRandomthen
galleryArgs.random='false'
end
if#galleryArgs==0andoptions.nostubsthen
-- try again, this time including stubs
options.nostubs=false
returnmakeGalleryArgs(titles,options,limit,nonRandom)
else
returngalleryArgs
end
end
localmakeOptions=function(args)
localoptions=args-- pick up miscellaneous options: more, errors, fileargs
options.paraflags=excerptModule.numberFlags(args.paragraphsor"")-- parse paragraphs, e.g. "1,3-5" → {"1","3-5"}
options.fileflags=excerptModule.numberFlags(args.filesor"")-- parse file numbers
options.ignoreOnlyincludes=options.ignoreOnlyincludes==nilandtrueoroptions.ignoreOnlyincludes-- default to true
ifargs.nostubsandisDeclined(args.nostubs)then
options.nostubs=false
else
options.nostubs=true
end
returnoptions
end
localisArticle=function(pagetitle)
localtitleObject=mw.title.new(pagetitle)
return(titleObjectandtitleObject.namespace==0)andtrueorfalse
end
localgetLinkedTitles=function(args,method,limit)
localpagenames={}
localii=1
localisNotCategory
whileargs[ii]andii<limitdo
localpageContent=excerptModule.getContent(args[ii])
ifpageContentthen
localpageSection=args["section"..ii]orargs["section"]
localsectionOnly=args["sectiononly"..ii]orargs["sectiononly"]
localtext=pageContent
ifpageSectionthen-- check relevant section only
localsuccess,result=pcall(excerptModule.getSection,pageContent,pageSection,sectionOnly)
ifnotsuccessthen
mw.log("require('Module:Excerpt').getSection failed on the content of "..args[ii]..": "..result)
result=nil
end
text=resultorpageContent
end
-- begin BHG addition for tracking source pages
localthisPage=mw.title.getCurrentTitle().nsText..":"..mw.title.getCurrentTitle().text
thisPage=thisPage:gsub('_',' ')-- fix the nsText part, until [[phab:T369784]] is resolved
localthisBareParam=mw.ustring.gsub(args[ii],"^([^#]+).*$","%1",1)-- strip any section anchor from the parameter's page name
thisBareParam=thisBareParam:gsub('_',' ')-- support underscores in parameter's page name
if(thisPage==thisBareParam)then
usesEmbeddedList=true;
end
-- end BHG addition for tracking source pages
-- replace annotated links with real links
text=mw.ustring.gsub(text,"{{%s*[Aa]nnotated[ _]link%s*|%s*(.-)%s*}}","[[%1]]")
ifmethod=="linked"then
forpinmw.ustring.gmatch(text,"%[%[%s*([^%]|\n]*)")do
ifisArticle(p)then
table.insert(pagenames,p)
end
end
else
-- listitem: first wikilink on a line beginning *, :#, etc. except in "See also" or later section
text=mw.ustring.gsub(text,"\n== *See also.*","")
forpinmw.ustring.gmatch(text,"\n:*[%*#][^\n]-%[%[%s*([^%]|\n]*)")do
ifisArticle(p)then
table.insert(pagenames,p)
end
end
end
-- begin BHG addition for tracking source pages
if((method=="listitem")or(method=="linked"))then
table.insert(sourcepgagesused,args[ii])
sourcepgagesusedcounter=sourcepgagesusedcounter+1
end
-- end BHG addition for tracking source pages
end
ii=ii+1
end
-- begin BHG addition for tracking
articlelistcount=#pagenames
-- end BHG addition for tracking
returnpagenames
end
-- Template entry points:
-- randomExcerpt: Titles specified in template parameters (equivalent to {{Transclude random excerpt}})
p.randomExcerpt=function(frame)
localparent=frame.getParent(frame)
localoutput=p._excerpt(parent.args,'random')
returnframe:extensionTag{name='templatestyles',args={src='Module:Random slideshow/styles.css'}}
..frame:preprocess(output)
end
-- linkedExcerpt: Titles from links on one or more pages (similar to {{Transclude linked excerpt}})
p.linkedExcerpt=function(frame)
localparent=frame.getParent(frame)
localoutput=p._excerpt(parent.args,'linked')
returnframe:extensionTag{name='templatestyles',args={src='Module:Random slideshow/styles.css'}}
..frame:preprocess(output)
end
-- listItemExcerpt: Titles from linked list items one one or more pages (similar to {{Transclude list item excerpt}})
p.listItemExcerpt=function(frame)
localparent=frame.getParent(frame)
localoutput=p._excerpt(parent.args,'listitem')
returnframe:extensionTag{name='templatestyles',args={src='Module:Random slideshow/styles.css'}}
..frame:preprocess(output)
end
-- Module entry point:
p._excerpt=function(_args,method)
localargs=cleanupArgs(_args)
args.more=excerptModule.getMoreLinkText(_args.more)
localoptions=makeOptions(args)
locallimit=args.limitandtonumber(args.limit)orDEFAULT_LIMIT
localtitles
ifmethod=='linked'ormethod=='listitem'then
titles=getLinkedTitles(args,method,SOURCE_PAGES_LIMIT)
else
titles=args
end
localgalleryArgs=makeGalleryArgs(titles,options,limit,isDeclined(_args.random))
returnslideshowModule._main(galleryArgs,false,'excerptSlideshow-container')..checksourcepages()
end
p._cleanUpExcerpt=cleanUpExcerpt
-- begin BHG addition for tracking source pages
functionchecksourcepages()
-- no tracking unless we are in Portal namespace
if(mw.title.getCurrentTitle().nsText~="Portal")then
return""
end
localpagecounter=0;
localtemplatecount=0;
localoutlinecount=0;
localretval="";
localusesEponymousArticle=false;
localdebugging=false;
localthisPageBareName=mw.title.getCurrentTitle().text;
ifdebuggingthen
retval='<div style="display:block; border:10px solid green; background-color:#efe; padding:1em; margin:1em">\n----\n'
retval=retval.."sourcepgagesusedcounter: "..sourcepgagesusedcounter.."\n----\n"
retval=retval.."pages used:"
end
localapage
forapageinarrayvalues(sourcepgagesused)do
ifdebuggingthen
retval=retval.."\n# [[:"..apage.."]]"
retval=retval.." — ".."First 999 = /"..string.sub(apage,1,999).."/"
end
if(string.find(apage,"^[tT]emplate ?:")==1)then
templatecount=templatecount+1;
end
if(string.find(apage,"^[oO]utline +of ")==1)then
outlinecount=outlinecount+1;
end
if(apage==thisPageBareName)then
usesEponymousArticle=true;
end
pagecounter=pagecounter+1
end
ifdebuggingthen
retval=retval.."\nTotal pages: "..pagecounter
retval=retval.."\ntemplatecount: "..templatecount
retval=retval.."</div>"
end
-- first do a sanity check that both counting methods have produced the same result
if(sourcepgagesusedcounter==pagecounter)then
-- if all pages are templates, then populate tracking categories
if(pagecounter==templatecount)then
if(templatecount==1)then
retval=retval.."[[Category:Automated article-slideshow portals with article list built solely from one template]]"
elseif(templatecount==2)then
retval=retval.."[[Category:Automated article-slideshow portals with article list built solely from two templates]]"
elseif(templatecount==3)then
retval=retval.."[[Category:Automated article-slideshow portals with article list built solely from three templates]]"
elseif(templatecount>3)then
retval=retval.."[[Category:Automated article-slideshow portals with article list built solely from four or more templates]]"
end
elseif(templatecount>0)then
retval=retval.."[[Category:Automated article-slideshow portals with article list built using one or more templates, and other sources]]"
end
end
if(outlinecount>=1)then
retval=retval.."[[Category:Automated article-slideshow portals with article list built using one or more outline pages]]"
end
if(articlelistcount<2)then
retval=retval.."[[Category:Automated article-slideshow portals with less than 2 articles in article list]]"
elseif(articlelistcount<=5)then
retval=retval.."[[Category:Automated article-slideshow portals with 2–5 articles in article list]]"
elseif(articlelistcount<=10)then
retval=retval.."[[Category:Automated article-slideshow portals with 6–10 articles in article list]]"
elseif(articlelistcount<=15)then
retval=retval.."[[Category:Automated article-slideshow portals with 11–15 articles in article list]]"
elseif(articlelistcount<=20)then
retval=retval.."[[Category:Automated article-slideshow portals with 16–20 articles in article list]]"
elseif(articlelistcount<=25)then
retval=retval.."[[Category:Automated article-slideshow portals with 21–25 articles in article list]]"
elseif(articlelistcount<=30)then
retval=retval.."[[Category:Automated article-slideshow portals with 26–30 articles in article list]]"
elseif(articlelistcount<=40)then
retval=retval.."[[Category:Automated article-slideshow portals with 31–40 articles in article list]]"
elseif(articlelistcount<=50)then
retval=retval.."[[Category:Automated article-slideshow portals with 41–50 articles in article list]]"
elseif(articlelistcount<=100)then
retval=retval.."[[Category:Automated article-slideshow portals with 51–100 articles in article list]]"
elseif(articlelistcount<=200)then
retval=retval.."[[Category:Automated article-slideshow portals with 101–200 articles in article list]]"
elseif(articlelistcount<=500)then
retval=retval.."[[Category:Automated article-slideshow portals with 201–500 articles in article list]]"
elseif(articlelistcount<=1000)then
retval=retval.."[[Category:Automated article-slideshow portals with 501–1000 articles in article list]]"
elseif(articlelistcount>1000)then
retval=retval.."[[Category:Automated article-slideshow portals with over 1000 articles in article list]]"
end
ifusesEmbeddedListthen
retval=retval.."[[Category:Automated article-slideshow portals with embedded list]]"
end
ifusesEponymousArticlethen
retval=retval.."[[Category:Automated article-slideshow portals with article list built using eponymous article]]"
end
returnretval
end
functionarrayvalues(t)
locali=0
returnfunction()i=i+1;returnt[i]end
end
-- end BHG addition for tracking source pages
returnp
Konten disalin dari Wikipedia Bahasa Indonesia (lisensi CC BY-SA) Lihat versi asli di Wikipedia

Rekomendasi Pilihan