20.708
Bearbeitungen
K (Entfernte den Schutz von „Modul:Wiki“) |
(+ InsertFullpage(), InsertSubpage()) |
||
| (12 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 16: | Zeile 16: | ||
local split = str.split2(pagename, "/") | local split = str.split2(pagename, "/") | ||
return split[#split] -- letztes Element in der table nach letztem Slash | return split[#split] -- letztes Element in der table nach letztem Slash | ||
end | |||
function p.namespace() | |||
local fullpagename = p.fullpagename() | |||
local split = str.split2(fullpagename, ":") | |||
if #split == 1 then | |||
return "" | |||
end | |||
return split[1] | |||
end | end | ||
| Zeile 24: | Zeile 33: | ||
-- fullpagename | -- fullpagename | ||
pagesnames.fullpagename = tostring(mw.title.getCurrentTitle()) | pagesnames.fullpagename = tostring(mw.title.getCurrentTitle()) | ||
-- namespace | |||
local split = str.split2(pagesnames.fullpagename, ":") | |||
if #split == 2 then | |||
pagesnames.namespace = split[1] | |||
else | |||
pagesnames.namespace = "" | |||
end | |||
-- pagename | -- pagename | ||
pagesnames.pagename = split[#split] -- letztes Element in der table nach Doppelpunkt | pagesnames.pagename = split[#split] -- letztes Element in der table nach Doppelpunkt | ||
-- subpagename | -- subpagename | ||
| Zeile 33: | Zeile 48: | ||
if type(table) == "table" then | if type(table) == "table" then | ||
table.fullpagename = pagesnames.fullpagename | table.fullpagename = pagesnames.fullpagename | ||
table.namespace = pagesnames.namespace | |||
table.pagename = pagesnames.pagename | table.pagename = pagesnames.pagename | ||
table.subpagename = pagesnames.subpagename | table.subpagename = pagesnames.subpagename | ||
| Zeile 41: | Zeile 57: | ||
end | end | ||
function p. | function p.pageExists(page) | ||
return page ~= nil and page ~= "" and string.find(page, "[#<>%[%]%|%{%}]") == nil and mw.title.new(tostring(page)).exists | return page ~= nil and page ~= "" and string.find(page, "[#<>%[%]%|%{%}]") == nil and mw.title.new(tostring(page)).exists | ||
end | |||
function p.getArgs(args, argslist) | |||
-- liefert entweder die in argslist angegebenen Agrumente zurück | |||
-- oder ohne argslist werden alle Argumente rückgeliefert | |||
-- dabei werden leere ("") Argumente entfernt und ein empty-Flag rückgeliefert | |||
local result, empty = {}, true | |||
if type(argslist) == "table" then -- mit argslist | |||
for _, a in ipairs(argslist) do | |||
local v = args[a] or "" | |||
if v ~= "" then | |||
result[a] = v | |||
empty = false | |||
end | |||
end | |||
else -- ohne argslist | |||
for a, v in pairs(args) do -- erstmal komplett kopieren | |||
result[a] = v | |||
end | |||
for i = 1, #result do -- dann leere indizierte Einträge entfernen | |||
if result[i] == "" then -- es dürfen keine Lücken entstehen | |||
table.remove(result, i) | |||
end | |||
end | |||
for a, v in pairs(result) do -- und sonstige leere Einträge entfernen | |||
if v == "" then -- jetzt auch die nicht-indizierten | |||
result[a] = nil | |||
else | |||
empty = false | |||
end | |||
end | |||
end | |||
return result, empty | |||
end | |||
function p.wikiTextLimit(text, limit) | |||
-- liefert längenbegrenzten Wikitext zurück | |||
-- schneidet bei Leerzeichen ab | |||
-- beachtet dabei Links [http:/... linktext] [[page|linktext]] | |||
-- ab fett/kursiv wird immer begrenzt | |||
-- Kommandozeile zum Debuggen: =p.wikiTextLimit("12345 7890", 9) | |||
local text_limited = "" | |||
local text_cumul = "" | |||
local text_cumul_len = 0 | |||
local text_cumul_predelim_len = 0 | |||
local bracket_count = 0 | |||
local link_text = false | |||
local link_delim_found = false | |||
local last_char = "" | |||
local fett_kursiv = false | |||
local text_len = mw.ustring.len(text) | |||
if text_len <= limit then | |||
text_limited = text | |||
else | |||
for i = 1, text_len do | |||
local char = mw.ustring.sub(text, i, i) | |||
fett_kursiv = (char == "'" and last_char == "'") | |||
if char == "[" and bracket_count < 2 then -- Klammer auf | |||
bracket_count = bracket_count + 1 | |||
text_cumul_predelim_len = text_cumul_len | |||
elseif char == "]" and bracket_count > 0 then -- Klammer zu | |||
bracket_count = bracket_count - 1 | |||
link_text = false | |||
if not link_delim_found then -- bis dahin Leerzeichen bzw. Pipe nicht gefunden? | |||
text_cumul_len = text_cumul_predelim_len -- dann Text hinzuzählen | |||
elseif bracket_count == 0 then | |||
link_delim_found = false | |||
end | |||
elseif (char == " " and bracket_count == 1) or -- [http:/... linktext] Leerzeichen-Erkennung | |||
(char == "|" and bracket_count == 2) then -- [[page|linktext]] Pipe-Erkennung | |||
link_text = true -- ab hier wieder Text | |||
link_delim_found = true | |||
else | |||
if bracket_count == 0 or link_text then -- normaler Text | |||
text_cumul_len = text_cumul_len + 1 | |||
if char == " " then -- Auf Leerzeichen getroffen | |||
text_limited = text_cumul | |||
end | |||
end | |||
text_cumul_predelim_len = text_cumul_predelim_len + 1 -- Auf Verdacht Link mitzählen | |||
end | |||
--[[ mw.log( | |||
"i=" .. i .. " char=" .. char .. " last_char=" .. last_char .. | |||
" fett_kursiv=" .. tostring(fett_kursiv) .. | |||
" bracket=" .. bracket_count .. | |||
" link_text=" .. tostring(link_text) .. | |||
" link_delim_found=" .. tostring(link_delim_found) .. | |||
" text_cumul_len=" .. text_cumul_len .. | |||
" text_cumul_predelim_len=" .. text_cumul_predelim_len .. | |||
" text_limited=" .. text_limited) ]] | |||
if text_cumul_len > limit or fett_kursiv then | |||
break | |||
end | |||
text_cumul = text_cumul .. char | |||
last_char = char | |||
-- mw.log("text_cumul=" .. text_cumul) | |||
end | |||
if text_cumul_len <= limit and not fett_kursiv then | |||
text_limited = text | |||
end | |||
end | |||
-- mw.log("textLimit(\"" .. text .. "\", " .. limit .. ")=\"" .. text_limited .. "\"") | |||
return text_limited | |||
end | |||
function p.InsertFullpage(frame) | |||
local page = frame:getParent().args[1] or "" | |||
return insertPage(frame, page) | |||
end | |||
function p.InsertSubpage(frame) | |||
local page = frame:getParent().args[1] or "" | |||
if page ~= "" then | |||
page = p.fullpagename() .. "/" .. page | |||
return insertPage(frame, page) | |||
end | |||
end | |||
function insertPage(frame, page) | |||
local t = "" | |||
if page ~= "" then | |||
if p.pageExists(page) then | |||
-- Abschnitt-Überschrift | |||
local abschnittueberschrift = frame:getParent().args[2] or "" | |||
abschnittueberschrift = tonumber(abschnittueberschrift) or "" | |||
if abschnittueberschrift ~= "" then | |||
abschnittueberschrift = string.rep("=", abschnittueberschrift) | |||
t = t .. abschnittueberschrift .. | |||
"[[" .. page .. "|" .. page .. "]]" .. | |||
abschnittueberschrift .. "\n" | |||
end | |||
-- Seite einfügen | |||
local template_page = page | |||
if string.find(template_page, ":") == nil then | |||
template_page = ":" .. template_page | |||
end | |||
t = t .. "{{" .. template_page .. "}}" | |||
-- Bearbeiten-Link | |||
if abschnittueberschrift == "" then | |||
t = t .. "<div style=\"float:right\"><small>" .. | |||
"<nowiki>[</nowiki>[[" .. page .. | |||
"|Bearbeiten]]<nowiki>]</nowiki>" .. | |||
"</small></div>" | |||
end | |||
else | |||
t = t .. "<nowiki>[</nowiki>[[" .. page .. | |||
"|" .. page .. " erstellen]]<nowiki>]</nowiki>" | |||
end | |||
t = frame:preprocess(t) | |||
end | |||
return t | |||
end | end | ||
return p | return p | ||