Jump to content
Wikipedia The Free Encyclopedia

Module:Excerpt slideshow/sandbox

From Wikipedia, the free encyclopedia
Module documentation[view] [edit] [history] [purge]
This module is rated as ready for general use. It has reached a mature state, is considered relatively stable and bug-free, and may be used wherever appropriate. It can be mentioned on help pages and other Wikipedia resources as an option for new users. To minimise server load and avoid disruptive output, improvements should be developed through sandbox testing rather than repeated trial-and-error editing.
This module depends on the following other modules:

This module allows article excerpt (from Module:Excerpt) to be put into a slideshow (using Module:Random slideshow). It is intended to be used in portals.

The following templates use this module:

Tracking categories

[edit ]

The following categories track use where the "Selected general articles" list is built solely from templates:

Pages where the "Selected general articles" list is built from a list embeded in the portal:

Purge this page to update the totals.


Note that the Category:Automated portals with embedded list was enabled on 19 April 2019, and it will probably take a few days for all the portal pages to update

Testcases

[edit ]

The following testcase pages are available for testing changes made to this module's sandbox:

See also

[edit ]
Portal templates
Layout and formatting
Content transclusion
Content slideshows
Content randomisation
General
Linking templates
Talk pages / Maintenance
Images
Modules
Usage
The above documentation is transcluded from Module:Excerpt slideshow/doc. (edit | history)
Editors can experiment in this module's sandbox (edit | diff) and testcases (create) pages.
Add categories to the /doc subpage. Subpages of this module.
 localp={}
 localexcerptModule=require('Module:Excerpt/portals/sandbox')
 localslideshowModule=require('Module:Random slideshow/sandbox')
 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/sandbox/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/sandbox/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/sandbox/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

AltStyle によって変換されたページ (->オリジナル) /