Star Citizen Wiki Modul:Quelle
Wir laden dich herzlich auf den Star Citizen Wiki Discord Server ein! Du kannst uns auch auf unserem neuen YouTube-Chanel finden!

Modul:Quelle

Aus Star Citizen Wiki

Diese Vorlage dient der einheitlichen Darstellung von Quellen im Fußbereich.

Kopiervorlage

Hinzufügen einer einfachen Quelle:

<ref>
{{Quelle
|url=
|title=
|date=
|access_date=
|url_internal=
}}
</ref>

Beispiele

Quelle mit Datum, Abrufdatum und Wiki Link

<ref>
{{Quelle
|url=https://robertsspaceindustries.com/comm-link/transmission/12663-Welcome-To-The-Comm-Link
|title=Welcome to the Comm-Link
|date=04.09.2012
|url_internal=Comm-Link:12663
|access_date=22.10.2020
}}
</ref>

Ausgabe

Roberts Space Industries.svg "Welcome to the Comm-Link" (Im Wiki) vom 04.09.2012. Roberts Space Industries Comm-Links. Abgerufen am 22.10.2020.

Hinzufügen einer Quelle in der Gruppe "RSI"

<ref>
{{Quelle
|url=https://robertsspaceindustries.com/pledge/ships/terrapin/Terrapin
|title=Schiffsdaten der Tarrapin
|access_date=22.10.2020
}}
</ref>

Ausgabe

Roberts Space Industries.svg "Schiffsdaten auf RSI". Roberts Space Industries Pledge Store. Abgerufen am 22.10.2020.

Das Attribut group aus <ref> erlaubt Quellen zu gruppieren. So können viele Quellen übersichtlich zu Gruppen zusammengefasst werden.

Der Gruppenname ist frei wählbar. Das Auslassen des Namens fügt Quellen automatisch einer namenlosen Gruppe hinzu. Quellen von Roberts Space Industries sollten der Gruppe RSI hinzugefügt werden.

Quelle mit Autor, Datum, Abrufdatum und Wiki Link

<ref>{{Quelle
|url=https://robertsspaceindustries.com/comm-link/serialized-fiction/17794-Drifters-Part-One
|title=Drifters Part One
|date=23.09.2020
|url_internal=Comm-Link:17794
|access_date=22.10.2020
|author=Dave Haddock
}}</ref>

Ausgabe

Roberts Space Industries.svg Dave Haddock. "Drifters Part One" (Im Wiki) vom 23.09.2020. Roberts Space Industries Comm-Links. Abgerufen am 22.10.2020.

Hinzufügen einer Quelle ohne Angabe einer Gruppe

<ref>
{{Quelle
|url=https://star-citizen.wiki
|title=Das Star Citizen Wiki
}}
</ref>

Ausgabe der Vorlage mit <ref> tags

Der Parameter |ref=true erzeugt automatisch <ref> Tags. Somit muss nur noch die Vorlage selbst eingebunden werden.

{{Quelle
|url=https://robertsspaceindustries.com/pledge/ships/terrapin/Terrapin
|title=Schiffsdaten der Tarrapin
|access_date=22.10.2020
|ref=true
}}

Ausgabe

<ref>Roberts Space Industries.svg "Schiffsdaten der Tarrapin". Roberts Space Industries Pledge Store. Abgerufen am 22.10.2020.</ref>

Ausgabe der Vorlage mit <ref> tags und Attributen

Zusätzlich können die Paramter |ref_name= und |ref_group= angegeben werden.

{{Quelle
|url=https://robertsspaceindustries.com/pledge/ships/terrapin/Terrapin
|title=Schiffsdaten der Tarrapin
|access_date=22.10.2020
|ref=true
|ref_name=Terrapin

}}

Ausgabe

<ref name="Terrapin">Roberts Space Industries.svg "Schiffsdaten der Tarrapin". Roberts Space Industries Pledge Store. Abgerufen am 22.10.2020.</ref>

Hinzufügen eines Archive.org Links

Ist die Originalseite der Quelle nicht mehr erreichbar, kann unter Umständen eine Kopie auf Archive.org verfügbar sein.

Falls eine solche Kopie existiert verlinke diese bitte wie in dem folgenden Beispiel in der Vorlage.

{{Quelle
|url=http://citizencon.de/2016/07/19/brian-chambers-confirmed/
|title=Brian Chambers, Studioleiter von Foundry 42.
|date=19.07.2016
|access_date=27.10.2020
|website=CitizenCon
|archive_url=http://web.archive.org/web/20170201162657/http://citizencon.de/2016/07/19/brian-chambers-confirmed/
|archive_date=01.02.2017
}}

Ausgabe

"Brian Chambers, Studioleiter von Foundry 42." vom 19.07.2016. Archiviert vom Original am 01.02.2017. CitizenCon. Abgerufen am 27.10.2020.

Für zusätzliche Informationen siehe auch unsere Hilfeseite zu Bearbeiten von Seiten.


local Quelle = {}

local metatable = {}
local methodtable = {}

metatable.__index = methodtable

--[[

Generates references in the following format

"[url title]" vom date. _website_. Abgerufen am access_date.
"Comm-Link:12345 - Lorem Ipsum" vom 11.01.2020. _Roberts Space Industries_. Abgerufen am 12.01.2020.

"[url title]". _website_.
"Comm-Link:12345 - Lorem Ipsum". _Roberts Space Industries_.

"[url]". _website_.
"https://robertsspaceindustries.com/comm-links/12345-lorem-ipsum". _Roberts Space Industries_.

author. "[url title]" vom date. _website_. Abgerufen am access_date.
Dave Haddock. "Comm-Link:12345 - Lorem Ipsum" vom 11.01.2020. _Roberts Space Industries_. Abgerufen am 12.01.2020.

"[url title]" _([url_internal])_ vom date. _website_. Abgerufen am access_date.
"Comm-Link:12345 - Lorem Ipsum" _(Im Wiki)_ vom 11.01.2020. _Roberts Space Industries_. Abgerufen am 12.01.2020.

"[url title]" _([url_internal title_internal])_ vom date. _website_. Abgerufen am access_date.
"Comm-Link:12345 - Lorem Ipsum" _(Comm-Link:12345)_ vom 11.01.2020. _Roberts Space Industries_. Abgerufen am 12.01.2020.

"[url title]" vom date. _website_. Seite page.
"Broschüre der 300i" vom 11.01.2020. _Roberts Space Industries_. Seite 18, ff..

"[url title]" vom date. _website_. Abschnitt section. Abgerufen am access_date.
"10 for the Chairman: 24.12.2013" vom 11.01.2020. _YouTube_. Abschnitt 4:12 - 5:50. Abgerufen am 12.01.2020.

"[url]" vom date. _website_. Abschnitt ab section. Abgerufen am access_date.
"https://youtube.com/?v=th1Si54nUr7" vom 11.01.2020. _YouTube_. Abschnitt ab 5:50. Abgerufen am 12.01.2020.

]]

--- Helper function checking if a substring is in a string
---
--- @param needle string - Value to search for
--- @param haystack string - String to search in
---
--- @return bool - True if found
local function stringContains( needle, haystack )
    return mw.ustring.find( mw.ustring.lower( haystack ), needle, 1, true )
end


--- Returns wikitext linkparts for a link
---
--- @param link string -
---
--- @return table - Table containing 'linkStart', 'linkEnd', 'separator'
local function getWikiLinkParts( link )
    if stringContains( 'http', link ) then
        return {
            linkStart = '[',
            linkEnd = ']',
            separator = ' ',
        }
    else
        return {
            linkStart = '[[',
            linkEnd = ']]',
            separator = '|',
        }
    end
end

--- Builds a wikitext link
---
--- @param link string - The link
--- @param text string - The text to show instead of the link
--- @param quote bool - True to wrap link in '"'
---
--- @return string
local function makeLinkText( link, text, quote )
    local linkParts = getWikiLinkParts( link )

    if quote == nil then
        quote = false
    end

    if text == nil and quote == false then
        text = ''
        linkParts.separator = ''
    elseif quote == true then
        if text == nil then
            text = link
        end

        text = string.format( '"%s"', text )
    end

    return linkParts.linkStart .. link .. linkParts.separator .. text .. linkParts.linkEnd
end

---
--- Parts
---

--- Source URL Part
--- "[url title]"
--- Tries to guess the website part based on the url
--- Adds a icon for known urls
---
--- Template arguments used in this method:
--- @arg url | link
--- @arg archive_url
--- @arg title | link_text | 1
--- @arg extra_text - DEPRECATED
---
--- @return string - Usable wikitext
local function buildSourceUrlPart( instance )
    local websiteName
    local logoFileName
    local url = instance.args.url or instance.args.link
    local title = instance.args.title or instance.args.link_text or instance.args[ 1 ]

    --- Add a maintenance category for sources without an url
    if url == nil then
        table.insert( instance.categories, '[[Kategorie:Seite mit fehlerhafter Quelle]]' )

        return ''
    end

    --- If the url does not contain 'http' also add a maintenance url
    if not stringContains( 'http', url ) then
        table.insert( instance.categories, '[[Kategorie:Seite mit fehlerhafter Quelle]]' )
    else
        mw.smw.set({
            Quelle = url
        })
    end

    if stringContains( 'youtube', url ) then
        logoFileName = 'YouTube_Logo.svg'
        websiteName = 'YouTube'
    elseif stringContains( 'robertsspaceindustries', url ) then
        logoFileName = 'Roberts Space Industries.svg'

        websiteName = 'Roberts Space Industries'

        if stringContains( '/comm-link', url ) then
            websiteName = websiteName .. ' Comm-Links'
        elseif stringContains( '/galactapedia', url ) then
            websiteName = websiteName .. ' Galactapedia'
        elseif stringContains( '/spectrum', url ) then
            websiteName = websiteName .. ' Spectrum'
        elseif stringContains( '/pledge', url ) then
            websiteName = websiteName .. ' Pledge Store'
        elseif stringContains( '/starmap', url ) then
            websiteName = websiteName .. ' Starmap'
        elseif stringContains( '/issue-council', url ) then
            websiteName = websiteName .. ' Issue Council'
        else
            websiteName = websiteName .. ' Webseite'
        end
    elseif stringContains( 'starcitizenbase', url ) then
        logoFileName = 'Star_Citizen_Base_Logo.svg'
        websiteName = 'Star Citizen Base'
    elseif stringContains( 'starcitizenblog', url ) then
        websiteName = 'Star Citizen Blog'
    elseif stringContains( 'star-citizen-news-radio', url ) then
        logoFileName = 'Star_Citizen_News_Radio_Logo.png'
        websiteName = 'Star Citizen News Radio'
    elseif stringContains( 'star-citizen.wiki', url ) then
        logoFileName = 'Star_Citizen_Wiki_Stern.png'
        websiteName = 'Star Citizen Wiki'
    end

    instance.website = websiteName

    if logoFileName then
        table.insert( instance.parts, 1, string.format( '[[Datei:%s|x15px|link=|class=noviewer]]', logoFileName ) )
    end

    if instance.args.archive_url ~= nil then
        return makeLinkText( instance.args.archive_url, title, true )
    end

    return makeLinkText( url, title, true )
end

--- Internal URL Part
--- ''([url_internal title_internal])''
---
--- Template arguments used in this method:
--- @arg url_internal
--- @arg title_internal
---
--- @return string - Usable wikitext
local function buildInternalUrlPart( instance )
    if instance.args.url_internal == nil then
        return ''
    end

    local linkText = instance.args.title_internal or 'Im Wiki'

    return string.format( " ''(%s)''", makeLinkText( instance.args.url_internal, linkText ) )
end

--- Source Date Part, the date the source was published
--- vom date
---
--- Template arguments used in this method:
--- @arg date
---
--- @return string - Date text
local function buildSourceDatePart( instance )
    local date = instance.args.date

    if date == nil then
        return ''
    end

    --- TODO: Format date?
    return string.format( ' vom %s', date )
end

--- Author Part
--- author.
---
--- Template arguments used in this method:
--- @arg author
---
--- @return string - Author text
local function buildAuthorPart( instance )
    local author = instance.args.author

    if author == nil then
        return
    end

    table.insert( instance.parts, string.format( '%s.', author ) )
end

--- URL Part
--- "[url title]" ''([url_internal title_internal])'' vom date.
---
--- @return string - The url part
local function buildUrlPart( instance )
    local sourceUrl = buildSourceUrlPart( instance )
    local internalUrl = buildInternalUrlPart( instance )
    local sourceUrlDate = buildSourceDatePart( instance )

    table.insert( instance.parts, string.format( '%s%s%s.', sourceUrl, internalUrl, sourceUrlDate ) )
end

--- Archive URL Part
--- Adds an "Archiviert vom [Original] am [archive_date]." part
---
--- Template arguments used in this method:
--- @arg archive_url
--- @arg archive_date
---
--- @return string - Usable wikitext
local function buildArchiveUrlPart( instance )
    --- adds the original url to the [Original] part
    if instance.args.archive_url == nil or ( instance.args.archive_url ~= nil and (instance.args.url == nil or not stringContains( 'http', instance.args.url ))) then
        return ''
    end

    local date = ''

    if instance.args.archive_date ~= nil then
        date = string.format( ' am %s', instance.args.archive_date )
    end

    table.insert( instance.parts, string.format( 'Archiviert vom %s%s.', makeLinkText( instance.args.url, 'Original' ), date ) )
end

--- Website Part
--- ''website.''
---
--- Template arguments used in this method:
--- @arg website
---
--- @return string - The website part
local function buildWebsitePart( instance )
    local websiteName = instance.args.website or instance.website

    if websiteName ~= nil then
        table.insert( instance.parts, string.format( "''%s''.", websiteName ) )
    end
end

--- Page Part, allow to specify a specific page e.g. in a pdf
--- Seite page.
---
--- Template arguments used in this method:
--- @arg page
---
--- @return string - The page part
local function buildPagePart( instance )
    if instance.args.page == nil then
        return
    end

    table.insert( instance.parts, string.format( 'Seite %s.', instance.args.page ) )
end

--- Section Part, allow to specify a specific section somewhere
--- Abschnitt section.
---
--- Template arguments used in this method:
--- @arg section
---
--- @return string - The section part
local function buildSectionPart( instance )
    if instance.args.section == nil then
        return
    end

    table.insert( instance.parts, string.format( 'Abschnitt %s.', instance.args.section ) )
end

--- Accessed Date Part, the date the source was accessed
--- Abgerufen am access_date.
---
--- Template arguments used in this method:
--- @arg access_date
---
--- @return string - The accessed date part
local function buildAccessedDatePart( instance )
    local date = instance.args.access_date

    if date == nil then
        return
    end

    -- TODO Format date?
    table.insert( instance.parts, string.format( 'Abgerufen am %s.', date ) )
end

--- Wraps the text in <ref> tags
---
--- @param text string The whole inner ref output
---
--- Template arguments used in this method:
--- @arg ref_name string - The optional reference name
--- @arg ref_group - The optional reference group
---
--- @return string The wrapped text
local function wrapInRef( instance, text )
    local options = {}

    if instance.args.ref_name ~= nil then
        options.name = tostring( instance.args.ref_name )
    end

    if instance.args.ref_group ~= nil then
        options.group = tostring( instance.args.ref_group )
    end

    return mw.getCurrentFrame():extensionTag( 'ref', text, options )
end

--- Build all parts of the reference
--- This defines the order of the outputted parts
---
--- @return string Ref output
local function buildParts( instance )
    buildAuthorPart( instance )
    buildUrlPart( instance )
    buildArchiveUrlPart( instance )
    buildWebsitePart( instance )
    buildPagePart( instance )
    buildSectionPart( instance )
    buildAccessedDatePart( instance )

    local text = table.concat( instance.parts, ' ' )

    if instance.args.wrap or instance.args.ref then
        return wrapInRef( instance, text )
    end

    return text
end

--- Checks if a deprecated template argument was used, sets a maintenance category
--- We'll only check 'extra_text' for now
local function checkOldArgumentNames( instance )
    if instance.args.extra_text ~= nil then
        table.insert( instance.categories, '[[Kategorie:Seite mit veraltetem Vorlagenparameter]]')
    end
end

--- Set the current frame for this instance
--- Automatically parses args
--- @param frame table - The current frame
function methodtable.setFrame( self, frame )
    self.args = require( 'Module:Arguments' ).getArgs( frame )
end

--- Format the arguments to text
---
--- @param arguments table|nil If param is set, overwrites the frame args
--- @return string
function methodtable.format( instance, arguments )
    if type( arguments ) == 'table' then
        instance.args = arguments
    end

    local text = buildParts( instance )

    if #instance.categories > 1 then
        return table.concat( instance.categories )
    end

    checkOldArgumentNames( instance )

    return text .. table.concat( instance.categories )
end

--- DEPRECATED
function Quelle.setArgs()

end

--- Entry point for template calls
--- @return string
function Quelle.format( frame )
    if frame == nil then
        return '[[Kategorie:Seite mit veraltetem Vorlagenaufruf]]'
    end

    local instance = Quelle:new()
    instance:setFrame( frame )

    return instance:format()
end

--- New Instance
--- Library entrance
function Quelle.new( self )
    local instance = {
        args = nil,
        categories = {},
        parts = {},
        website = nil,
    }

    setmetatable( instance, metatable )

    return instance
end

return Quelle
Cookies helfen uns bei der Bereitstellung dieses Wikis. Durch die Nutzung des Star Citizen Wiki erklärst du dich damit einverstanden, dass wir Cookies speichern.