
![]() | Dieses Modul ist getestet und für den projektweiten Gebrauch geeignet. Es kann in Vorlagen benutzt und auf Hilfeseiten erläutert werden. Entwicklungen an dem Modul sollten auf Scroll Gallery/Test und die Anwendung auf der Spielwiese getestet werden, da wiederholte Trial-and-Error-Edits die Resourcen stark belasten können. |
Anwendung
Das Modul wird direkt von der Vorlage {{Scroll Gallery}} aufgerufen. Parameterbeschreibung siehe dort. Die Modulbeschreibung befindet sich in Wikivoyage:Scroll Gallery, die Stilanweisungen in Vorlage:Scroll Gallery/styles.css.
Versionsbezeichnung auf Wikidata: 2024-07-05
Globale Funktionen
function sg.gallery( frame )
- Vorgaben:
frame
tabelle
: Parametertabelle, die vom#invoke
-Aufruf übergeben wird.
- Zurückgelieferter Wert:
string
: MediaWiki-Quellcode der Bildergalerie (Scroll Gallery).
Benötigte weitere Module
Hinweise
- Die obige Dokumentation wurde aus der Seite Modul:Scroll Gallery/Doku eingefügt. (bearbeiten | Versionsgeschichte) Die Kategorien für dieses Modul sollten in der Dokumentation eingetragen werden. Die Interwiki-Links sollten auf Wikidata eingepflegt werden.
- Liste der Unterseiten
-- module import local yn = require( 'Module:Yesno' ) -- module variable local sg = { -- administration moduleInterface = { suite = 'Scroll Gallery', serial = '2024-07-05', item = 87862715 }, -- miscellaneous messages texts = { badSize = '<span class="error">Fehlerhafte Größenangabe</span>[[Category:Bildergalerie: fehlerhafte Größenangabe]] ', fileNS = { '[Ff]ile', '[Ii]mage', '[Dd]atei', '[Bb]ild' }, missingFile = '<span class="error">Fehlender Dateiname</span>[[Category:Bildergalerie: fehlender Dateiname]] ', noImage = '<span class="error">Kein Bild definiert</span>[[Category:Bildergalerie: kein Bild definiert]] ', sizeUsed = '[[Category:Bildergalerie: Größenangaben verwendet]]', unknownFiles = '<span class="error">Fehlerhafte(r) Dateiname(n)</span>[[Category:Bildergalerie: fehlerhafte Dateinamen]] ', unknownParams = '<span class="error">Fehlerhafte(r) Parameter</span>[[Category:Bildergalerie: fehlerhafte Parameter]] ' }, -- possible argument identifiers params = { align = { 'align', 'Ausrichtung', default = 'right' }, background = { 'background', 'Hintergrund' }, border = { 'border', 'Rahmen' }, headerStyles = 'headerStyles', height = { 'height', 'heights', 'maxHeight', 'Höhe' }, hideUnitHeader = { 'hideUnitHeader', default = 'no' }, imageGrStyles = 'imageGrStyles', loop = { 'loop', 'Schleife', default = 'yes' }, styles = 'styles', timeDependent = { 'timeDependent', default = 'no' }, title = { 'title', 'Titel' }, width = { 'width', 'Breite', 'Größe' } }, -- possible alignment values align = { left = 'left', links = 'left', right = 'right', rechts = 'right', center = 'center', mitte = 'center', zentriert = 'center' }, -- graphics and video extensions excluding audio extensions extensions = { 'tif', 'tiff', 'png', 'gif', 'jpg', 'jpeg', 'jpe', 'webp', 'xcf', 'ogg', 'ogv', 'svg', 'pdf', 'djvu', 'stl', 'webm', 'mpg', 'mpeg' } } local errorMsgs = {} -- add error message to errorMsgs table local function addErrorMsg( msg ) table.insert( errorMsgs, msg ) end -- get errorMsgs table as string local function getErrorMsgs() local result = table.concat( errorMsgs, ' ' ) if result ~= '' then result = result .. ' ' end return result end -- check if param is set: not nil or empty local function isSet( param ) return param and param ~= ''; end -- check for possible arguments against list table local function checkParams( frameArgs, list ) local complete = {} local args = {} -- named arguments for key, value in pairs( list ) do if type( value ) == 'table' then for key2, value2 in ipairs( value ) do complete[ value2 ] = key args[ key ] = args[ key ] or frameArgs[ value2 ] end args[ key ] = args[ key ] or '' elseif value ~= '' then complete[ value ] = key args[ key ] = frameArgs[ value ] or '' else complete[ key ] = key args[ key ] = frameArgs[ key ] or '' end if args[ key ] == '' and type( value ) == 'table' and value.default then args[ key ] = value.default end end local ok = true for key, value in pairs( frameArgs ) do -- numbered arguments if tonumber( key ) then -- frameArgs[ key ] cannot be nil args[ key ] = mw.text.trim( frameArgs[ key ] ) end if not complete[ key ] and not tonumber( key ) then ok = false end end if not ok then addErrorMsg( sg.texts.unknownParams ) end return args end -- make image-size parameter string from width and height with check local function makeSize( width, height ) if width ~= '' then width = width:gsub( 'px$', '' ) end if height ~= '' then height = height:gsub( 'px$', '' ) end local at = width:find( 'x' ) if at then height = width:sub( at + 1, #width ) width = width:sub( 1, at - 1 ) end local value = tonumber( width ) if isSet( width ) and not value then addErrorMsg( sg.texts.badSize ) end local size = '' if value and value > 10 and value <= 1000 then size = width end value = tonumber( height ) if isSet( height ) and not value then addErrorMsg( sg.texts.badSize ) end if value and value > 10 and value <= 1000 then size = size .. 'x' .. height end if size ~= '' then return '|' .. size .. 'px' else return '' end end -- main function for Scroll Gallery template function sg.gallery( frame ) local args = checkParams( frame:getParent().args, sg.params ) -- generate output: outer div and title local gallery = mw.html.create( 'div' ) :addClass( 'voy-ImageGroup' ) local align = sg.align[ args.align:lower() ] or '' if align == 'left' then gallery:addClass( 'voy-ImageGroupLeft' ) elseif align == 'center' then gallery:addClass( 'voy-ImageGroupCenter' ) else -- default: right gallery:addClass( 'voy-ImageGroupRight' ) end if yn( args.timeDependent, false ) then gallery:addClass( 'voy-timeDependent' ) end if not yn( args.loop, true ) then gallery:addClass( 'voy-noLoop' ) end if yn( args.hideUnitHeader, false ) then gallery:addClass( 'voy-hideUnitHeader' ) end -- add styles local node if args.border ~= '' then gallery:css( 'border-color', args.border ) end if args.background ~= '' then -- color ist set for linter gallery:css( { ['background-color'] = args.background, color = 'inherit' } ) end gallery:cssText( args.styles ) if args.title ~= '' then node = mw.html.create( 'div' ) :addClass( 'voy-ImageGroupHeader' ) :wikitext( args.title ) if args.headerStyles ~= '' then node:cssText( args.headerStyles ) end gallery:node( node ) end -- prepare size attribute local size = makeSize( args.width, args.height ) -- add image groups and images local i = 1 local ok = true local fileOk, imNode while isSet( args[ i ] ) do -- remove LTR and RTL marks args[ i ] = mw.ustring.gsub( args[ i ], '[]+', '' ) -- delete namespace for j, ns in ipairs( sg.texts.fileNS ) do args[ i ] = mw.ustring.gsub( args[ i ], '^' .. ns .. ':', '' ) end -- check files for possible file extensions fileOk = false if ok then for j, ext in ipairs( sg.extensions ) do if args[ i ]:lower():find( '^.+%.' .. ext .. '$' ) then fileOk = true break end end end if not fileOk then ok = false end -- prepare image caption if isSet( args[ i + 1 ] ) then args[ i + 1 ] = '|' .. args[ i + 1 ] else args[ i + 1 ] = '' end -- generate image syntax and create container for additional img styles imNode = mw.html.create( 'div' ) :addClass( 'voy-ImageGrUnitInner' ) :wikitext( mw.ustring.format( '[[File:%s|thumb|center%s%s]]', args[ i ], size, args[ i + 1 ] ) ) if args.imageGrStyles ~= '' then imNode:cssText( args.imageGrStyles ) end -- create image-container div for scroll icons and image node = mw.html.create( 'div' ) :addClass( 'voy-ImageGrUnit' ) :node( imNode ) if i > 1 then node:css( 'display', 'none' ) end gallery:node( node ) i = i + 2 end -- add error and hint messages if not isSet( args[ i ] ) and isSet( args[ i + 1 ] ) then addErrorMsg( sg.texts.missingFile ) end if not isSet( args[ 1 ] ) then addErrorMsg( sg.texts.noImage ) end if not ok then addErrorMsg( sg.texts.unknownFiles ) end if args.width .. args.height ~= '' then addErrorMsg( sg.texts.sizeUsed ) end return getErrorMsgs() .. tostring( gallery ) end return sg