stringtranslate.com

Módulo: manejador de categorías

-------------------------------------------------------------------------------- -- -- -- MANEJADOR DE CATEGORÍAS -- -- -- -- Este módulo implementa la plantilla {{category handler}} en Lua, -- -- con algunas mejoras: se admiten todos los espacios de nombres y todos los alias de espacios de nombres -- -- y los nombres de espacios de nombres se detectan automáticamente para -- -- el wiki local. Este módulo requiere que [[Module:Namespace detect]] -- -- y [[Module:Yesno]] estén disponibles en el wiki local. Se puede -- -- configurar para diferentes wikis modificando los valores en -- -- [[Module:Category handler/config]], y las páginas se pueden incluir en la lista negra de la categorización usando [[Module:Category handler/blacklist]]. -- -- -- -------------------------------------------------------------------------------- -- Cargar módulos requeridos local yesno = require ( 'Module:Yesno' ) -- Cargar de forma diferida cosas que no siempre necesitamos local mShared , mappings local p = {} -------------------------------------------------------------------------------- -- Funciones auxiliares -------------------------------------------------------------------------------- función local trimWhitespace ( s , removeBlanks ) if type ( s ) ~= 'string' then return s end s = s : match ( '^%s*(.-)%s*$' ) if removeBlanks then if s ~= '' then return s else return nil end else return s end end -------------------------------------------------------------------------------- -- Clase CategoryHandler -------------------------------------------------------------------------------- local CategoryHandler = {} CategoryHandler .__ index                               =  CategoryHandler función CategoryHandler . new ( data , args ) local obj = setmetatable ({ _data = data , _args = args }, CategoryHandler ) -- Establece el objeto de título do local pagename = obj : parameter ( 'demopage' ) local success , titleObj si pagename entonces success , titleObj = pcall ( mw . title . new , pagename ) fin si success y titleObj entonces obj . title = titleObj si titleObj == mw . title . getCurrentTitle () entonces obj . _usesCurrentTitle = true fin de lo contrario obj . title = mw . title . getCurrentTitle () obj . _usesCurrentTitle = true end end -- Establecer valores de parámetros de supresión para _ , clave en ipairs { 'nocat' , 'categories' } do local value = obj : parameter ( key ) value = trimWhitespace ( value , true ) obj [ '_' .. key ] = yesno ( value ) end do local subpage = obj : parameter ( 'subpage' ) local category2 = obj : parameter ( 'category2' ) if type ( subpage ) == 'string' then subpage =                                                                    mw . ustring . lower ( subpágina ) fin si tipo ( categoría2 ) == 'cadena' entonces subpágina = mw . ustring . lower ( categoría2 ) fin obj . _subpágina = trimWhitespace ( subpágina , verdadero ) obj . _categoría2 = trimWhitespace ( categoría2 ) -- no eliminar valores en blanco fin devolver obj fin función CategoryHandler : parámetro ( clave ) local parameterNames = self . _data . parámetros [ clave ] local pntype = tipo ( parameterNames ) si pntype == 'cadena' o pntype == 'número' entonces devolver self . _args [ parameterNames ] de lo contrario si pntype == 'tabla' entonces para _ , nombre en ipairs ( parameterNames ) hacer valor local = self . _args [ nombre ] si valor ~= nulo entonces devuelve valor fin fin devuelve nulo de lo contrario error ( string.format ( 'clave de configuración no válida "%s"' , tostring ( clave ) ), 2 ) fin fin función CategoryHandler : isSuppressedByArguments () devuelve - Verifica si se ha establecido un argumento de supresión de categoría. self . _nocat == true o self . _categories == false o ( self . _category2 y self .                                                        _category2  ~=  self . _data . category2Yes y self . _category2 ~= self . _data . category2Negative ) - Verifica si estamos en una subpágina y ve si las categorías están suprimidas en función de nuestro estado de subpágina. o self . _subpage == self . _data . subpageNo y self . title . isSubpage o self . _subpage == self . _data . subpageOnly y no self . title . isSubpage fin de la función CategoryHandler : shouldSkipBlacklistCheck () - Verifica si los argumentos de supresión de categoría indican que debemos omitir la verificación de la lista negra. return self . _nocat == false o self . _categories == true o self . _category2 == self . _data . category2Yes fin de la función CategoryHandler : matchesBlacklist () si self . _usesCurrentTitle entonces devuelve self . _data . currentTitleMatchesBlacklist else mShared = mShared o require ( 'Module:Category handler/shared' ) return mShared . matchesBlacklist ( self . title . prefixedText , mw . loadData ( 'Module:Category handler/blacklist' ) ) end end function CategoryHandler : isSuppressed () -- Encuentra si las categorías están suprimidas por los argumentos o por -- que coinciden con la lista negra. return self : isSuppressedByArguments () o not self : shouldSkipBlacklistCheck () y self                                       : matchesBlacklist () fin de la función CategoryHandler : getNamespaceParameters () si self._usesCurrentTitle entonces devuelve self._data.currentTitleNamespaceParameters de lo contrario si no mappings entonces mShared = mShared o require ( 'Module:Category handler / shared' ) mappings = mShared.getParamMappings ( true ) -- obtiene los mappings con mw.loadData fin devuelve mShared.getNamespaceParameters ( self.title , mappings ) fin fin de la función CategoryHandler : namespaceParametersExist ( ) -- Encuentra si se ha especificado algún parámetro de espacio de nombres. -- Usamos el orden "all" --> namespace params --> " other " ya que esto es lo que -- hacía la plantilla anterior. si self : parámetro ( 'all' ) entonces devuelve verdadero fin si no mappings entonces mShared = mShared o require ( 'Module:Category handler/shared' ) mappings = mShared . getParamMappings ( true ) -- obtiene mappings con mw. loadData fin para ns , parámetros en pairs ( mappings ) hacer para i , parámetro en ipairs ( parámetros ) hacer si self . _args [ parámetro ] entonces devuelve verdadero fin fin fin si self : parámetro ( 'other' ) entonces devuelve verdadero fin devuelve falso fin función CategoryHandler : getCategories () local params = self :                                                  getNamespaceParameters ( ) local nsCategory para i , parámetro en ipairs ( parámetros ) hacer local valor = self._args [ parámetro ] si valor ~= nulo entonces nsCategory = valor break end end si nsCategory ~= nulo o self : namespaceParametersExist ( ) then : los parámetros del espacio de nombres existen - uso avanzado . si nsCategory == nulo entonces nsCategory = self : parámetro ( ' otro' ) end local ret = { self : parámetro ( 'todos' )} local numParam = tonumber ( nsCategory ) si numParam y numParam >= 1 y math.floor ( numParam ) == numParam entonces : nsCategory es un entero ret [ # ret + 1 ] = self . _args [ numParam ] else ret [ # ret + 1 ] = nsCategory end if # ret < 1 then return nil else return table.concat ( ret ) end elseif self . _data . defaultNamespaces [ self . title . namespace ] then -- Los parámetros de espacio de nombres no existen, uso simple. return self . _args [ 1 ] end return nil end -------------------------------------------------------------------------------- -- Exportaciones -------------------------------------------------------------------------------- local p                                                               =  {} función p . _exportClasses () - Se utiliza para fines de prueba. return { CategoryHandler = CategoryHandler } fin de la función p . _main ( args , data ) data = data o mw . loadData ( 'Módulo:Categoría manejador/datos' ) manejador local = CategoryHandler . new ( data , args ) si manejador : isSuppressed () entonces devuelve nil fin de retorno manejador : getCategories () fin de la función p . main ( frame , data ) data = data o mw . loadData ( 'Módulo:Categoría manejador/datos' ) args local = require ( 'Módulo:Argumentos' ). getArgs ( frame , { wrappers = data.wrappers , valueFunc = function ( k , v ) v = trimWhitespace ( v ) si tipo ( k ) == ' número' entonces si v ~ = ' ' entonces devuelve v de lo contrario devuelve nil fin de lo contrario devuelve v fin fin }) devuelve p._main ( args , data ) fin devuelve p