模块:Phrases/Query:修订间差异
来自「荏苒之境」
无编辑摘要 |
无编辑摘要 |
||
(未显示同一用户的3个中间版本) | |||
第9行: | 第9行: | ||
local function get_flatten(table_name, language, config) | local function get_flatten(table_name, language, config) | ||
config = config or {} | config = config or {} | ||
local phrase_order_by = config.phrase_order_by | local phrase_order_by = config.phrase_order_by and escape_sql(config.phrase_order_by) | ||
local phrase_limit = config.phrase_limit | local phrase_limit = config.phrase_limit | ||
第19行: | 第19行: | ||
local r = {} | local r = {} | ||
for _, entry in | 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. | 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 = { | 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 | end | ||
t[#t+1] = "</ul>" | |||
end | end | ||
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 = { | local t = {} | ||
if #phrases == 0 then | |||
t[#t+1] = "<p>" | |||
t[#t+1] = args.no_result_text | |||
t[#t+1] = "</ | 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 | ||
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