Modul:Mathe für Nicht-Freaks/Seite


Informationen zu dieser Dokumentation
Modul Mathe für Nicht-Freaks

Es existiert keine Dokumentation. Wenn du eine anlegen willst, solltest du keine „/Doku“-Unteseite benutzen, sondern LuaDokumentation.


Information


local Modul = {}

local de_prefix = "Mathe für Nicht-Freaks"
local en_prefix = "Serlo: EN: "

local sitemap = require("Modul:Mathe für Nicht-Freaks/Sitemap").parse()
local Liste = require("Modul:Liste")
local utils = require("Modul:Utils")

function books()
    local child = nils
    local children, state, index = ipairs(sitemap.children)
    
    function iter()
        index, child = children(state, index)
        
        if child then return child:to_link() else return nil end
    end
    
    return iter
end

function Modul.oben(frame)
    local title = mw.title.getCurrentTitle().text

    if utils.starts(title, de_prefix) then
        frame:callParserFunction("DISPLAYTITLE", string.sub(title, #de_prefix + 3) .. " – Serlo „Mathe für Nicht-Freaks“")
    elseif utils.starts(title, en_prefix) then
    	frame:callParserFunction("DISPLAYTITLE", string.sub(title, #en_prefix + 1) .. " – Serlo")
    end
 
    return Modul.erzeugeSeite(frame, ':Mathe für Nicht-Freaks: Vorlage:Header')
end

function Modul.buecher(frame)
    local next_book = books()

    local function iter_books()
        book = next_book()

        if book ~= nil then
            book = "'''" .. book .. "'''"
        end

        return book
    end

    return Liste.createListOutput(iter_books, { icon = "Office-book.svg", icon_size = "x20px", abstand = "0.5em", kein_icon_verweis = true })
end

function Modul.unten(frame)
    return Modul.erzeugeSeite(frame, ':Mathe für Nicht-Freaks: Vorlage:Footer')
end

function Modul.navigation(frame)
    return Modul.erzeugeSeite(frame, ':Mathe für Nicht-Freaks: Vorlage:Footer')
end

function Modul.erzeugeSeite(frame, template)
    local args = { }
    local current_page = mw.title.getCurrentTitle()
    local current_page_text = current_page:getContent()
    local current_title = current_page.fullText
    
    -- Do not show navigation on Unterseiten
    if string.find(current_title, "/", 1, true) then return "" end
    
    local current_node = sitemap:find(function(n) return n.link == current_title end)
    if current_node == nil then return "<b>Fehler: Aktuelle Seite wurde in der Sitemap nicht gefunden. Deswegen kann keine Navigation angezeigt werden</b>" end
    local book = current_node:find_parent(function(n) return n.level == 1 end)

    args.buch = book.name
    args.buchlink = book.link
    args.quellen = frame.args.quellen
    args.weblinks = frame.args.weblinks

    if book.name == "Informationen zum Projekt" then
        args.typ = "meta"
    else
        args.typ = "main"
    end

    if string.find(current_page_text, "%<ref") then
        args.einzelnachweise = "true"
    end

    if current_node.progress and current_node.progress >= 75 then
        args['überprüft'] = frame.args['überprüft']
    end
    
    args.info = frame.args.info

    if current_node.level == 1 and #current_node.children > 0 then
        args.kategorien = "[[Kategorie:Buch]]\n[[Kategorie:Studium]]"
        
        local inhalt = "__NOTOC__\n"
        
        function add_inhalt_link(node)
            if node.level > 1 then
                if node.char == "=" then
                    tmp = string.rep("=", node.nr-1)
                    inhalt = inhalt .. tmp .. node.name .. tmp .. "\n"
                else
                    inhalt = inhalt .. "* " .. node:to_link() .. "\n"
                end
            end
            
            for _, child in ipairs(node.children) do
                add_inhalt_link(child)
            end
        end
        
        add_inhalt_link(book)
        
        args.inhalt = inhalt
    else
        args.kapitel = 1

        if current_node.progress and current_node.progress <= 25 then
            args.inhalt = frame:expandTemplate{ title = "Baustelle" }
        end
    end
    
    args.books = Liste.createListOutput(books(), { icon = "Office-book.svg", icon_size = "x14px", kein_icon_verweis = true, abstand = "0.3em" })

    local navigation = ""

    function add_navigation_link(node)
        if node.level > 1 then
            navigation = navigation .. string.rep("*", node.level-1) .. " " .. node:to_link() .. "\n"
        end
            
        if node:is_over(current_node) then
            for _, child in ipairs(node.children) do
                add_navigation_link(child)
            end
        end
    end
        
    add_navigation_link(book)
    
    args.navigation = navigation

    local next_site = current_node:next_site()
        
    if current_node.level ~= 1 and next_site ~= nil then
        args.next_link = next_site:site_link()
        args.next_link_name = next_site.name
    end

    return frame:expandTemplate{ title = template, args = args } 
end

return Modul