Thành viên:Lê Song Vĩ/nháp module

Bách khoa toàn thư mở Wikipedia
local p = {};

local prefix = "";

local function olGen (params)
    return mw.getCurrentFrame():expandTemplate{
            title = 'Ordered list',
            args = params
        }
end

local function checkFirstCharIsUpperCase ( name )
    if mw.ustring.match( name, "^[a-z]" ) then
        return prefix .. "Tên mới phải bắt đầu bằng chữ hoa vì lý do kỹ thuật\n";
    end
    return "";
end

local function checkEmptyName( name, identify )
    if name == nil or name == "" then
        return prefix .. "Tên " .. identify .. " không được để trống\n";
    end
    return "";
end

local function checkNewNameEqualOldName ( new, old )
    if mw.ustring.lower( mw.ustring.gsub( new, "_", " " ) ) == mw.ustring.lower( mw.ustring.gsub( old, "_", " " ) ) then
        return prefix .. "Tên mới giống với tên cũ\n";
    end
    return "";
end

local function checkNameContainsInvalidCharacters ( name )
    if mw.ustring.find( name, "[@#<>%[%]{}|]" ) then
        return prefix .. "Tên mới chứa (các) ký tự không hợp lệ\n";
    end
    return "";
end

function p.checkValidName ( frame )
    local args = frame.args;
    local oldname = args[1];
    local name = args[2];
    local errOutput = "";
    local params = {}

    local errObject = {
        checkEmptyName( name, "mới" ),
        checkEmptyName( oldname, "cũ" ),
        checkFirstCharIsUpperCase( name ),
        checkNewNameEqualOldName( name, oldname ),
        checkNameContainsInvalidCharacters( name )
    }
    
    for i = 1, #errObject do
        if errObject[i] ~= "" then
            params[#params + 1] = errObject[i]
        end
    end

    if #params > 0 then
        errOutput = "Các lỗi đã phát hiện:" .. olGen( params );
    end
    
    return errOutput;
end

return p;