Модуль:Песочница/Abiyoyo/Autosorting: различия между версиями

[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 139:
--------------------------------------------------------------------------------
 
-- получает из пресета с именем presetNamepreset части имени категории и возвращает
-- таблицу с ними
local function catParts(presetNamepreset)
presetName = presetName or ''
local result = {}
result.sep = preset.sep
local defaultPreset = config.presets.default
result.innersep = currentPreset.innersep or defaultPresetpreset.innersep
result.lbracket = currentPreset.lbracket or defaultPresetpreset.lbracket
local currentPreset = config.presets[presetName]
result.rbracket = currentPreset.rbracket or defaultPresetpreset.rbracket
result.sep = currentPreset.sep or defaultPreset.sep
result.prefix = preset.prefix
result.innersep = currentPreset.innersep or defaultPreset.innersep
result.postfix = currentPreset.postfix or defaultPresetpreset.postfix
result.lbracket = currentPreset.lbracket or defaultPreset.lbracket
result.rbracket = currentPreset.rbracket or defaultPreset.rbracket
result.prefix = currentPreset.prefix or defaultPreset.prefix
result.postfix = currentPreset.postfix or defaultPreset.postfix
 
return result
Строка 191 ⟶ 187 :
-- заданому в конфиге (config.presets),
--
-- preset - таблица с пресетом
-- presetName - имя пресета, как оно задано в конфиге,
-- например 'статьи без изображений'
-- values - содержание "сортировочной" части. Формат описан в formatChain()
local function formatCategoryName( presetNamepreset, values )
presetName = presetName or ''
values = values or ''
local result = ''
 
if isEmpty( presetName ) then
deblog:write('No preset provided', 'formatCategoryName', 'error')
return ''
end
-- Получение фрагментов имени категории
local p = catParts(presetNamepreset)
local chain = formatChain(values , p.sep, p.innersep)
return table.concat{ p.prefix, p.lbracket, chain, p.rbracket, p.postfix }
Строка 224 ⟶ 214 :
 
-- Получить соответствие категории критериям
local function isValidCategory( presetNamepreset, catName, property, checkLimits )
local allowRed = false
if not isEmpty( config.presets[presetName]preset ) then
allowRed = config.presets[presetName]preset.allowred or false
or config.presets.default.allowred
or false
end
Строка 341 ⟶ 329 :
--[[ Обработчики ]]
-- Вызываются из processRule() в виде
-- pcall( p[funcName], frameArgs, preset, presetName, currentRule )
-- frameArgs - параметры фрейма
-- presetNamepreset - строкатаблица с ключом пресета из конфигапресетом. Валидность проверяется
-- на этапе препроцессинга. В обработчиках не проверяется.
-- currentRule - таблица с описанием иекущего правила из конфига. Валидируется
Строка 352 ⟶ 340 :
-- Формирует категории в разрезе указанного свойства
-- Описание используемых настроек конфига и соответствующей логики см. в коде.
function p._sortByProperty( frameArgs, preset, presetName, currentRule, entityId )
local myname = '_sortByProperty'
debLog:write('Invoked with preset: '.. presetName, myname)
 
local settingsSchema = schemas.workers._sortByProperty.configOptions
Строка 387 ⟶ 375 :
-- settings.ifNotEmptyVal = frameArgs[ configOption[ifNotEmptyPar] ] or configOption[ifNotEmpty]
-- settings.checkIfNotEmptyVal = configOption[ifNotEmptyPar] or configOption[ifNotEmpty] // effectively boolean
Строка 530 ⟶ 515 :
-- это временно и неправильно
local catName = formatCategoryName( presetNamepreset, chains )
local cat = formatCategory (catName)
local result = cat
Строка 538 ⟶ 523 :
-- рекурсивный вызов
if not isEmpty( thenBy ) and type( thenBy ) == 'table' then
p._sortByProperty(frameArgs, presetNamepreset, thenBy)
end
--]]
Строка 544 ⟶ 529 :
end
 
function p._catByProperty( frameArgs, presetNamepreset, currentRule )
return nil
end
 
function p._catLocalFileWithoutWD( frameArgs, presetNamepreset, currentRule )
return nil
end
 
function p._catNoEntity( frameArgs, presetNamepreset, currentRule )
return nil
end
 
function p._category( frameArgs, presetNamepreset, currentRule )
if currentRule.category ~= nil then
return formatCategory(currentRule.category)
Строка 688 ⟶ 673 :
-- обработка правила ruleName и вызов соответствующей функции-обработчика
-- возвращает результат, выданный обработчиком или nil
local function processRule(frameArgs, ruleName, preset, presetName )
local myname = 'processRule'
debLog:write('Invoked with: '..mw.dumpObject(ruleName)..', '..presetName, myname)
-- Проверка, что в конфиге указано имя функции-обработчика
if isEmpty( config.rules[ruleName].func ) then
debLog:write('No function in config for preset specified'..presetName, myname, 'warn')
return nil
end
Строка 708 ⟶ 693 :
-- вызов функции-обработчика
local ruleTable = config.rules[ruleName]
local success, funcResult = pcall(p[funcName], frameArgs, preset, presetName, ruleTable)
if ifError (success, funcResult, myname) then
return nil
Строка 715 ⟶ 700 :
return ''
end
debLog:write(funcName .. 'Rule() returned: nil'..funcResult, '_mainmyname', 'warn')
return funcResult
end
 
---Processes rules from array of IDs in ruleList
--@return concatenated result of rules
local function processRuleList(ruleList, frameArgs, preset)
local result = ''
for _, ruleName in ipairs(ruleList) do
local ruleResruleResult = processRule(frameArgs, ruleName, preset, presetName)
if ruleResruleResult == nil then
debLog:write('Rule returned nil', 'processRuleList', 'warn')
else
result = table.concat{result, .. ruleResruleResult}
end
end
return ''result
end
 
Строка 755 ⟶ 756 :
end
 
--- Call for debug and logs
function p.loggedCall(frame)
globals.ignoreNSChecks = true
Строка 760 ⟶ 762 :
local frameArgs = getArgs(frame)
debLog:write('Invoked with args: '.. mw.dumpObject(frameArgs), 'loggedCall')
local functionName = frameArgs['function']
local success, result = ''pcall(p[functionName], frame)
if functionNamenot == 'formatCategoryName'success then
debLog:write(result, 'loggedCall', 'error')
local presetName = frameArgs['preset']
return debLog:getAll()
local values = frameArgs['values']
local succ, out = pcall(formatCategoryName, presetName, values)
if not ifError (succ, out, 'loggedCall') then
result = result .. tostring(out)
end
else
local succ, out = pcall(p[functionName], frame)
if not ifError (succ, out, 'loggedCall') then
result = result .. tostring(out)
end
end
 
return debLog:getAll() .. mw.text.nowiki(result)
end
Строка 794 ⟶ 787 :
end
-- get preset enriched with defaults
local preset = getPreset(config.presets, presetName)
if preset == nil then
Строка 814 ⟶ 807 :
-- process rules and concat result
local rulesResult = processRuleList(ruleList, frameArgs, preset)
local result = ''
if rulesResult == nil then
for _, ruleName in ipairs(ruleList) do
return nil, 'Rules result is nil'
local ruleRes = processRule(frameArgs, ruleName, preset, presetName)
if ruleRes == nil then
debLog:write('Rule returned nil', '_main', 'warn')
else
result = result .. ruleRes
end
end
 
return true, resultrulesResult
end