模块:Phrases/Query:修订间差异

来自「荏苒之境」
无编辑摘要
无编辑摘要
 
(未显示同一用户的4个中间版本)
第19行: 第19行:
      
      
     local r = {}
     local r = {}
     for _, entry in pairs(phrase_query) do
     for _, entry in ipairs(phrase_query) do
         r[#r+1] = {
         r[#r+1] = {
         phrase = entry.Phrase,
         phrase = entry.Phrase,
第75行: 第75行:


query.get = get
query.get = get
query.get_uncategorized = get_uncategorized
query.get_flatten = get_flatten


query.show_ul = function(frame)
query.show_ul = function(frame)
第83行: 第83行:


local result = get(table_name, language, args)
local result = get(table_name, language, args)
     local t = {"<ul>"}
     local t = {}
      
      
for i = 1, #result do
    if #result == 0 then
local phrases = result[i].phrases
    t[#t+1] = "<p>"
for j = 1, #phrases do
t[#t+1] = args.no_result_text
t[#t+1] = "<li>"
t[#t+1] = "</p>"
t[#t+1] = phrases[j]
    else
t[#t+1] = "</li>"
    t[#t+1] = "<ul>"
for i = 1, #result do
local phrases = result[i].phrases
for j = 1, #phrases do
t[#t+1] = "<li>"
t[#t+1] = phrases[j]
t[#t+1] = "</li>"
end
end
end
t[#t+1] = "</ul>"
end
end
t[#t+1] = "</ul>"
     return table.concat(t)
     return table.concat(t)
end
end
第104行: 第111行:


local phrases = get_flatten(table_name, language, args)
local phrases = get_flatten(table_name, language, args)
     local t = {"<ul>"}
     local t = {}
      
      
for j = 1, #phrases do
    if #phrases == 0 then
t[#t+1] = "<li>"
    t[#t+1] = "<p>"
t[#t+1] = phrases[j].phrase
t[#t+1] = args.no_result_text
t[#t+1] = "</li>"
t[#t+1] = "</p>"
    else
    t[#t+1] = "<ul>"
for j = 1, #phrases do
t[#t+1] = "<li>"
t[#t+1] = phrases[j].phrase
t[#t+1] = "</li>"
end
t[#t+1] = "</ul>"
end
end
 
t[#t+1] = "</ul>"
     return table.concat(t)
     return table.concat(t)
end
end
第149行: 第163行:
end
end
t[#t+1] = "</ul>"
if #t == 1 then
    t[#t] = "<p>"
t[#t+1] = args.no_result_text
t[#t+1] = "</p>"
else
t[#t+1] = "</ul>"
end
     return table.concat(t)
     return table.concat(t)
end
end
第169行: 第190行:
t[#t+1] = translation and translation or entry.theme
t[#t+1] = translation and translation or entry.theme
t[#t+1] = "</b><ul>"
t[#t+1] = "</b><ul>"
for j = 1, #phrases do
for j = 1, #phrases do
local entry = phrases[i]
local entry = phrases[i]
第176行: 第198行:
t[#t+1] = "</li>"
t[#t+1] = "</li>"
end
end
t[#t+1] = "</ul>"
t[#t+1] = "</ul>"
end
if #t == 0 then
t[#t+1] = "<p>"
t[#t+1] = args.no_result_text
t[#t+1] = "</p>"
end
end

2025年8月24日 (日) 04:44的最新版本

此模块的文档可以在模块:Phrases/Query/doc创建

local translation = require("Module:Template translation")
local utils_str = require("Module:Utils/String")

local cargo = mw.ext.cargo
local escape_sql = utils_str.escape_sql

local query = {}

local function get_flatten(table_name, language, config)
	config = config or {}
	local phrase_order_by = config.phrase_order_by and escape_sql(config.phrase_order_by)
    local phrase_limit = config.phrase_limit

    local phrase_query = cargo.query(table_name, "Phrase,Theme", {
        where = "Language='"..language.."'"..(config.where or ""),
        orderBy = phrase_order_by,
        limit = phrase_limit
    })
    
    local r = {}
    for _, entry in ipairs(phrase_query) do
        r[#r+1] = {
        	phrase = entry.Phrase,
        	theme = entry.Theme
        }
    end
    return r
end

local function get(table_name, language, config)
	config = config or {}
    local theme_order_by = config.theme_order_by and escape_sql(config.theme_order_by)
    local phrase_order_by = config.phrase_order_by and escape_sql(config.phrase_order_by)
    local theme_limit = config.theme_limit
    local phrase_limit_per_theme = config.phrase_limit_per_theme

    local themes = cargo.query("PhraseThemes", "Theme,Translation", {
        where = "PhraseTable='"..table_name.."' AND Language='"..language.."'"..(config.where or ""),
        orderBy = theme_order_by,
        groupBy = "Theme",
        limit = theme_limit
    })

    local r = {}
    for _, theme_entry in ipairs(themes) do
    	local theme = theme_entry.Theme
        local phrase_query = cargo.query(table_name, "Phrase", {
            where = "Theme='"..escape_sql(theme).."' AND Language='"..language.."'",
            orderBy = phrase_order_by,
            limit = phrase_limit_per_theme,
        })
        
        local phrases = {}
        for i, entry in ipairs(phrase_query) do
            phrases[i] = entry.Phrase
        end
        
        local translation = theme_entry.Translation
        if translation == "" then translations = nil end
        
        r[#r+1] = {
        	theme = theme,
        	phrases = phrases,
        	translation = translation
        }
    end
    return r
end

local function get_language(frame)
	local parent_frame = frame:getParent()
	local language = translation.getCurrentLanguageSubpage()
	return (language == nil or language == "") and "zh-cn" or language
end

query.get = get
query.get_flatten = get_flatten

query.show_ul = function(frame)
    local args = frame.args
    local table_name = args.table
    local language = get_language(frame)

	local result = get(table_name, language, args)
    local t = {}
    
    if #result == 0 then
    	t[#t+1] = "<p>"
		t[#t+1] = args.no_result_text
		t[#t+1] = "</p>"
    else
    	t[#t+1] = "<ul>"
		for i = 1, #result do
			local phrases = result[i].phrases
			for j = 1, #phrases do
				t[#t+1] = "<li>"
				t[#t+1] = phrases[j]
				t[#t+1] = "</li>"
			end
		end
		t[#t+1] = "</ul>"
	end
	
    return table.concat(t)
end

query.show_ul_flatten = function(frame)
    local args = frame.args
    local table_name = args.table
    local language = get_language(frame)

	local phrases = get_flatten(table_name, language, args)
    local t = {}
    
    if #phrases == 0 then
    	t[#t+1] = "<p>"
		t[#t+1] = args.no_result_text
		t[#t+1] = "</p>"
    else
    	t[#t+1] = "<ul>"
		for j = 1, #phrases do
			t[#t+1] = "<li>"
			t[#t+1] = phrases[j].phrase
			t[#t+1] = "</li>"
		end
		t[#t+1] = "</ul>"
	end

    return table.concat(t)
end

query.show_ul_compond = function(frame)
    local args = frame.args
    local table_name = args.table
    local language = get_language(frame)
	
	args.phrase_order_by = args.flatten_phrase_order_by
	local phrases_flatten = get_flatten(table_name, language, args)
	args.phrase_order_by = args.themed_phrase_order_by
	local phrases_themed = get(table_name, language, args)
	local phrase_map = {}
	
    local t = {"<ul>"}
    
	for i = 1, #phrases_flatten do
		local phrase = phrases_flatten[i].phrase
		phrase_map[phrase] = true
		t[#t+1] = "<li>"
		t[#t+1] = phrase
		t[#t+1] = "</li>"
	end
	
	for i = 1, #phrases_themed do
		local phrases = phrases_themed[i].phrases
		for j = 1, #phrases do
			local phrase = phrases[j]
			if phrase_map[phrase] == nil then
				t[#t+1] = "<li>"
				t[#t+1] = phrases
				t[#t+1] = "</li>"
			end
		end
	end
	
	if #t == 1 then
    	t[#t] = "<p>"
		t[#t+1] = args.no_result_text
		t[#t+1] = "</p>"
	else
		t[#t+1] = "</ul>"
	end
	
    return table.concat(t)
end

query.show_ul_sections = function(frame)
	local args = frame.args
    local table_name = args.table
    local language = get_language(frame)

	local result = get(table_name, language, args)
    local t = {}
    
	for i = 1, #result do
		local entry = result[i]
		local phrases = entry.phrases
		local translation = entry.translation
		
		t[#t+1] = "<b>"
		t[#t+1] = translation and translation or entry.theme
		t[#t+1] = "</b><ul>"
		
		for j = 1, #phrases do
			local entry = phrases[i]
			t[#t+1] = "<li>"
			t[#t+1] = entry.theme
			t[#t+1] = entry.phrase
			t[#t+1] = "</li>"
		end
		
		t[#t+1] = "</ul>"
	end
	
	if #t == 0 then
		t[#t+1] = "<p>"
		t[#t+1] = args.no_result_text
		t[#t+1] = "</p>"
	end
	
    return table.concat(t)
end

return query