Predložak:Kronologija iPod modela: razlika između inačica

Izvor: Hrvatska internetska enciklopedija
Prijeđi na navigaciju Prijeđi na pretraživanje
mNema sažetka uređivanja
Oznaka: uklonjeno uređivanje
Nema sažetka uređivanja
Oznaka: uklonjeno uređivanje
Redak 1: Redak 1:
{{Timeline
local p = {}
| minYear=2001
| maxYear=2015
| scale=65
| caption=Kronologija iPod modela


| row1_label=Classic
local function esc(s)
| row1_y=60
    if not s then return "" end
| row1_color=#bfc9ff
    return s:gsub("&","&amp;"):gsub("<","&lt;"):gsub(">","&gt;")
| row1_block1_start=2001 | row1_block1_end=2002 | row1_block1_label=1G
end
| row1_block2_start=2002 | row1_block2_end=2003 | row1_block2_label=2G
| row1_block3_start=2003 | row1_block3_end=2004 | row1_block3_label=3G
| row1_block4_start=2004 | row1_block4_end=2005 | row1_block4_label=4G
| row1_block5_start=2005 | row1_block5_end=2007 | row1_block5_label=5G
| row1_block6_start=2007 | row1_block6_end=2014 | row1_block6_label=6G (zadnji)


| row2_label=Mini / Nano
local function yearToX(year, minYear, scale, startX)
| row2_y=100
    return startX + (year - minYear) * scale
| row2_color=#c9f0b5
end
| row2_block1_start=2004 | row2_block1_end=2005 | row2_block1_label=Mini 1G
| row2_block2_start=2005 | row2_block2_end=2005.9 | row2_block2_label=Mini 2G
| row2_block3_start=2005.7 | row2_block3_end=2007 | row2_block3_label=Nano 1–2G
| row2_block4_start=2007 | row2_block4_end=2009 | row2_block4_label=Nano 3–4G
| row2_block5_start=2009 | row2_block5_end=2012 | row2_block5_label=Nano 5–6G
| row2_block6_start=2012 | row2_block6_end=2015 | row2_block6_label=Nano 7G (zadnji)


| row3_label=Shuffle
local function yearToY(year, minYear, scale, startY)
| row3_y=140
    return startY + (year - minYear) * scale
| row3_color=#ffd27f
end
| row3_block1_start=2005 | row3_block1_end=2006 | row3_block1_label=Shuffle 1G
| row3_block2_start=2006 | row3_block2_end=2009 | row3_block2_label=Shuffle 2G
| row3_block3_start=2009 | row3_block3_end=2010 | row3_block3_label=Shuffle 3G
| row3_block4_start=2010 | row3_block4_end=2015 | row3_block4_label=Shuffle 4G (zadnji)


  | row4_label=Touch
function p.render(frame)
  | row4_y=180
    local args = frame:getParent().args
  | row4_color=#e0e0e0
 
  | row4_block1_start=2007 | row4_block1_end=2010 | row4_block1_label=Touch 1–3G
    -- osnovne postavke
  | row4_block2_start=2010 | row4_block2_end=2013 | row4_block2_label=Touch 4G
    local minYear = tonumber(args.minYear) or 2000
  | row4_block3_start=2012 | row4_block3_end=2015 | row4_block3_label=Touch 5–6G (zadnji)
    local maxYear = tonumber(args.maxYear) or 2030
}}
    local scale  = tonumber(args.scale)  or 60
    local orientation = (args.orientation or "horizontal"):lower()
 
    local startMain = 60
    local padding  = 80
 
    local svg = {}
 
    ---------------------------------------------------------
    -- VERTIKALNI TIMELINE
    ---------------------------------------------------------
    if orientation == "vertical" then
        local height = startMain + (maxYear - minYear) * scale + padding
        if height < 300 then height = 300 end
 
        table.insert(svg, string.format(
            '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 %d">',
            height
        ))
        table.insert(svg, '<rect x="0" y="0" width="100%" height="100%" fill="white" />')
 
        -- vremenska os
        table.insert(svg, '<g font-family="sans-serif" font-size="10" fill="#555">')
        local yEnd = yearToY(maxYear, minYear, scale, startMain)
        table.insert(svg, string.format(
            '<line x1="80" y1="%d" x2="80" y2="%d" stroke="#aaa" />',
            startMain, yEnd
        ))
 
        for y = minYear, maxYear do
            local yy = yearToY(y, minYear, scale, startMain)
            table.insert(svg, string.format('<text x="50" y="%d">%d</text>', yy + 4, y))
        end
        table.insert(svg, '</g>')
 
        -- redovi
        local rowIndex = 1
        while args["row" .. rowIndex .. "_label"] do
            local label = args["row" .. rowIndex .. "_label"]
            local x    = tonumber(args["row" .. rowIndex .. "_x"]) or (120 + (rowIndex - 1) * 120)
 
            table.insert(svg, string.format(
                '<text x="%d" y="40" font-family="sans-serif" font-size="11" fill="#333">%s</text>',
                x, esc(label)
            ))
 
            local blockIndex = 1
            while args[string.format("row%d_block%d_start", rowIndex, blockIndex)] do
                local start = tonumber(args[string.format("row%d_block%d_start", rowIndex, blockIndex)])
                local stop  = tonumber(args[string.format("row%d_block%d_end",  rowIndex, blockIndex)]) or maxYear
                local text = args[string.format("row%d_block%d_label", rowIndex, blockIndex)] or ""
                local tip  = args[string.format("row%d_block%d_tip",  rowIndex, blockIndex)]
                local icon = args[string.format("row%d_block%d_icon",  rowIndex, blockIndex)] or ""
                local col  = args[string.format("row%d_block%d_color", rowIndex, blockIndex)] or "#cccccc"
 
                if not tip or tip == "" then
                    tip = string.format("%s (%s–%s)", text, tostring(start), tostring(stop))
                end
 
                local y1 = yearToY(start, minYear, scale, startMain)
                local y2 = yearToY(stop, minYear, scale, startMain)
                local h  = y2 - y1
                if h < 6 then h = 6 end
 
                table.insert(svg, '<g font-family="sans-serif" font-size="9" fill="#000">')
                table.insert(svg, string.format(
                    '<rect x="%d" y="%d" width="90" height="%d" fill="%s"><title>%s</title></rect>',
                    x - 10, y1, h, esc(col), esc(tip)
                ))
 
                local labelText = icon ~= "" and (icon .. " " .. esc(text)) or esc(text)
 
                table.insert(svg, string.format(
                    '<text x="%d" y="%d" transform="rotate(90 %d %d)">%s</text>',
                    x + 5, y1 + h/2, x + 5, y1 + h/2, labelText
                ))
                table.insert(svg, '</g>')
 
                blockIndex = blockIndex + 1
            end
 
            rowIndex = rowIndex + 1
        end
 
        table.insert(svg, '</svg>')
        return table.concat(svg, "\n")
    end
 
    ---------------------------------------------------------
    -- HORIZONTALNI TIMELINE
    ---------------------------------------------------------
    local width = startMain + (maxYear - minYear) * scale + padding
    if width < 400 then width = 400 end
 
    table.insert(svg, string.format(
        '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 %d 300">',
        width
    ))
    table.insert(svg, '<rect x="0" y="0" width="100%" height="100%" fill="white" />')
 
    -- vremenska os
    table.insert(svg, '<g font-family="sans-serif" font-size="10" fill="#555">')
    local xEnd = yearToX(maxYear, minYear, scale, startMain)
    table.insert(svg, string.format(
        '<line x1="%d" y1="30" x2="%d" y2="30" stroke="#aaa" />',
        startMain, xEnd
    ))
 
    for y = minYear, maxYear do
        local xx = yearToX(y, minYear, scale, startMain)
        table.insert(svg, string.format('<text x="%d" y="25">%d</text>', xx, y))
    end
    table.insert(svg, '</g>')
 
    -- redovi
    local rowIndex = 1
    while args["row" .. rowIndex .. "_label"] do
        local label = args["row" .. rowIndex .. "_label"]
        local y    = tonumber(args["row" .. rowIndex .. "_y"]) or (50 + rowIndex * 40)
 
        table.insert(svg, string.format(
            '<text x="10" y="%d" font-family="sans-serif" font-size="11" fill="#333">%s</text>',
            y, esc(label)
        ))
 
        local blockIndex = 1
        while args[string.format("row%d_block%d_start", rowIndex, blockIndex)] do
            local start = tonumber(args[string.format("row%d_block%d_start", rowIndex, blockIndex)])
            local stop = tonumber(args[string.format("row%d_block%d_end",  rowIndex, blockIndex)]) or maxYear
            local text  = args[string.format("row%d_block%d_label", rowIndex, blockIndex)] or ""
            local tip  = args[string.format("row%d_block%d_tip",  rowIndex, blockIndex)]
            local icon = args[string.format("row%d_block%d_icon",  rowIndex, blockIndex)] or ""
            local col  = args[string.format("row%d_block%d_color", rowIndex, blockIndex)] or "#cccccc"
 
            if not tip or tip == "" then
                tip = string.format("%s (%s–%s)", text, tostring(start), tostring(stop))
            end
 
            local x1 = yearToX(start, minYear, scale, startMain)
            local x2 = yearToX(stop, minYear, scale, startMain)
            local w  = x2 - x1
            if w < 6 then w = 6 end
 
            table.insert(svg, '<g font-family="sans-serif" font-size="9" fill="#000">')
            table.insert(svg, string.format(
                '<rect x="%d" y="%d" width="%d" height="14" fill="%s"><title>%s</title></rect>',
                x1, y - 10, w, esc(col), esc(tip)
            ))
 
            local labelText = icon ~= "" and (icon .. " " .. esc(text)) or esc(text)
 
            table.insert(svg, string.format(
                '<text x="%d" y="%d">%s</text>',
                x1 + 3, y, labelText
            ))
            table.insert(svg, '</g>')
 
            blockIndex = blockIndex + 1
        end
 
        rowIndex = rowIndex + 1
    end
 
    table.insert(svg, '</svg>')
    return table.concat(svg, "\n")
end
 
return p

Inačica od 12. siječanj 2026. u 13:04

local p = {}

local function esc(s)

   if not s then return "" end
   return s:gsub("&","&"):gsub("<","<"):gsub(">",">")

end

local function yearToX(year, minYear, scale, startX)

   return startX + (year - minYear) * scale

end

local function yearToY(year, minYear, scale, startY)

   return startY + (year - minYear) * scale

end

function p.render(frame)

   local args = frame:getParent().args
   -- osnovne postavke
   local minYear = tonumber(args.minYear) or 2000
   local maxYear = tonumber(args.maxYear) or 2030
   local scale   = tonumber(args.scale)   or 60
   local orientation = (args.orientation or "horizontal"):lower()
   local startMain = 60
   local padding   = 80
   local svg = {}
   ---------------------------------------------------------
   -- VERTIKALNI TIMELINE
   ---------------------------------------------------------
   if orientation == "vertical" then
       local height = startMain + (maxYear - minYear) * scale + padding
       if height < 300 then height = 300 end
       table.insert(svg, string.format(
           '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 %d">',
           height
       ))
       table.insert(svg, '<rect x="0" y="0" width="100%" height="100%" fill="white" />')
       -- vremenska os
       table.insert(svg, '<g font-family="sans-serif" font-size="10" fill="#555">')
       local yEnd = yearToY(maxYear, minYear, scale, startMain)
       table.insert(svg, string.format(
           '<line x1="80" y1="%d" x2="80" y2="%d" stroke="#aaa" />',
           startMain, yEnd
       ))
       for y = minYear, maxYear do
           local yy = yearToY(y, minYear, scale, startMain)
           table.insert(svg, string.format('<text x="50" y="%d">%d</text>', yy + 4, y))
       end
       table.insert(svg, '</g>')
       -- redovi
       local rowIndex = 1
       while args["row" .. rowIndex .. "_label"] do
           local label = args["row" .. rowIndex .. "_label"]
           local x     = tonumber(args["row" .. rowIndex .. "_x"]) or (120 + (rowIndex - 1) * 120)
           table.insert(svg, string.format(
               '<text x="%d" y="40" font-family="sans-serif" font-size="11" fill="#333">%s</text>',
               x, esc(label)
           ))
           local blockIndex = 1
           while args[string.format("row%d_block%d_start", rowIndex, blockIndex)] do
               local start = tonumber(args[string.format("row%d_block%d_start", rowIndex, blockIndex)])
               local stop  = tonumber(args[string.format("row%d_block%d_end",   rowIndex, blockIndex)]) or maxYear
               local text  = args[string.format("row%d_block%d_label", rowIndex, blockIndex)] or ""
               local tip   = args[string.format("row%d_block%d_tip",   rowIndex, blockIndex)]
               local icon  = args[string.format("row%d_block%d_icon",  rowIndex, blockIndex)] or ""
               local col   = args[string.format("row%d_block%d_color", rowIndex, blockIndex)] or "#cccccc"
               if not tip or tip == "" then
                   tip = string.format("%s (%s–%s)", text, tostring(start), tostring(stop))
               end
               local y1 = yearToY(start, minYear, scale, startMain)
               local y2 = yearToY(stop,  minYear, scale, startMain)
               local h  = y2 - y1
               if h < 6 then h = 6 end
               table.insert(svg, '<g font-family="sans-serif" font-size="9" fill="#000">')
               table.insert(svg, string.format(
                   '<rect x="%d" y="%d" width="90" height="%d" fill="%s"><title>%s</title></rect>',
                   x - 10, y1, h, esc(col), esc(tip)
               ))
               local labelText = icon ~= "" and (icon .. " " .. esc(text)) or esc(text)
               table.insert(svg, string.format(
                   '<text x="%d" y="%d" transform="rotate(90 %d %d)">%s</text>',
                   x + 5, y1 + h/2, x + 5, y1 + h/2, labelText
               ))
               table.insert(svg, '</g>')
               blockIndex = blockIndex + 1
           end
           rowIndex = rowIndex + 1
       end
       table.insert(svg, '</svg>')
       return table.concat(svg, "\n")
   end
   ---------------------------------------------------------
   -- HORIZONTALNI TIMELINE
   ---------------------------------------------------------
   local width = startMain + (maxYear - minYear) * scale + padding
   if width < 400 then width = 400 end
   table.insert(svg, string.format(
       '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 %d 300">',
       width
   ))
   table.insert(svg, '<rect x="0" y="0" width="100%" height="100%" fill="white" />')
   -- vremenska os
   table.insert(svg, '<g font-family="sans-serif" font-size="10" fill="#555">')
   local xEnd = yearToX(maxYear, minYear, scale, startMain)
   table.insert(svg, string.format(
       '<line x1="%d" y1="30" x2="%d" y2="30" stroke="#aaa" />',
       startMain, xEnd
   ))
   for y = minYear, maxYear do
       local xx = yearToX(y, minYear, scale, startMain)
       table.insert(svg, string.format('<text x="%d" y="25">%d</text>', xx, y))
   end
   table.insert(svg, '</g>')
   -- redovi
   local rowIndex = 1
   while args["row" .. rowIndex .. "_label"] do
       local label = args["row" .. rowIndex .. "_label"]
       local y     = tonumber(args["row" .. rowIndex .. "_y"]) or (50 + rowIndex * 40)
       table.insert(svg, string.format(
           '<text x="10" y="%d" font-family="sans-serif" font-size="11" fill="#333">%s</text>',
           y, esc(label)
       ))
       local blockIndex = 1
       while args[string.format("row%d_block%d_start", rowIndex, blockIndex)] do
           local start = tonumber(args[string.format("row%d_block%d_start", rowIndex, blockIndex)])
           local stop  = tonumber(args[string.format("row%d_block%d_end",   rowIndex, blockIndex)]) or maxYear
           local text  = args[string.format("row%d_block%d_label", rowIndex, blockIndex)] or ""
           local tip   = args[string.format("row%d_block%d_tip",   rowIndex, blockIndex)]
           local icon  = args[string.format("row%d_block%d_icon",  rowIndex, blockIndex)] or ""
           local col   = args[string.format("row%d_block%d_color", rowIndex, blockIndex)] or "#cccccc"
           if not tip or tip == "" then
               tip = string.format("%s (%s–%s)", text, tostring(start), tostring(stop))
           end
           local x1 = yearToX(start, minYear, scale, startMain)
           local x2 = yearToX(stop,  minYear, scale, startMain)
           local w  = x2 - x1
           if w < 6 then w = 6 end
           table.insert(svg, '<g font-family="sans-serif" font-size="9" fill="#000">')
           table.insert(svg, string.format(
               '<rect x="%d" y="%d" width="%d" height="14" fill="%s"><title>%s</title></rect>',
               x1, y - 10, w, esc(col), esc(tip)
           ))
           local labelText = icon ~= "" and (icon .. " " .. esc(text)) or esc(text)
           table.insert(svg, string.format(
               '<text x="%d" y="%d">%s</text>',
               x1 + 3, y, labelText
           ))
           table.insert(svg, '</g>')
           blockIndex = blockIndex + 1
       end
       rowIndex = rowIndex + 1
   end
   table.insert(svg, '</svg>')
   return table.concat(svg, "\n")

end

return p