Модуль:Песочница/Pok: различия между версиями
Pok (обсуждение | вклад) Нет описания правки |
Pok (обсуждение | вклад) Нет описания правки |
||
| Строка 3: | Строка 3: | ||
local CURRENT_PROJECT | local CURRENT_PROJECT | ||
local function | local function normalize_value(v) | ||
if type(v) == "string" then | |||
return v | |||
elseif type(v) == "table" then | |||
-- если таблица, попробуем взять первый элемент либо первый named value | |||
if v[1] and v[1] ~= "" then return v[1] end | |||
for _, val in pairs(v) do | |||
if type(val) == "string" and val ~= "" then return val end | |||
end | |||
return nil | |||
elseif v ~= nil then | |||
return tostring(v) | |||
end | |||
return nil | |||
end | end | ||
function p.set_path(frame) | function p.set_path(frame) | ||
local arg | |||
if frame then | |||
-- стандартный путь: позиционный первый аргумент | |||
if frame.args and frame.args[1] then arg = frame.args[1] end | |||
-- если не получилось — пробуем getArgument | |||
if (not arg or arg == "") then arg = frame:getArgument(1) or frame:getArgument("path") or frame:getArgument("GetFieldPath") end | |||
else | |||
arg = nil | |||
end | |||
local val = normalize_value(arg) | |||
if val and val ~= "" then | |||
CURRENT_PROJECT = val | |||
return "" | |||
end | |||
return "" | |||
end | end | ||
function p._debug_get_cached(frame) | function p._debug_get_cached(frame) | ||
local v = CURRENT_PROJECT | |||
if not v then | |||
-- попробуем получить через frame (на случай #vardefine/var) | |||
if frame and frame.callParserFunction then | |||
local ok, res = pcall(function() return frame:callParserFunction{ name = "var", args = { "GetFieldPath" } } end) | |||
if ok and res and res ~= "" then v = res end | |||
end | |||
end | |||
if type(v) == "table" then | |||
local parts = {} | |||
for k, val in pairs(v) do | |||
table.insert(parts, tostring(k) .. "=" .. tostring(val)) | |||
end | |||
return "table: {" .. table.concat(parts, ", ") .. "}" | |||
end | |||
return tostring(v or "(nil)") | |||
end | end | ||
function p.get_module_name(frame, pagePath) | function p.get_module_name(frame, pagePath) | ||
local fp, pp = frame, pagePath | |||
if type(frame) == "string" and (not pagePath) then | |||
pp = frame | |||
fp = nil | |||
end | |||
local project = pp and normalize_value(pp) or CURRENT_PROJECT | |||
if (not project or project == "") and fp then | |||
-- попытка через #var | |||
local ok, res = pcall(function() return fp:callParserFunction{ name = "var", args = { "GetFieldPath" } } end) | |||
if ok and res and res ~= "" then project = res end | |||
end | |||
if not project or project == "" then project = "default" end | |||
return "Module:" .. BASE_USER .. project .. "/data" | |||
end | end | ||