

<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fa">
	<id>https://fa.imamatpedia.com/w/index.php?action=history&amp;feed=atom&amp;title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86%3AHorizontal_timeline</id>
	<title>پودمان:Horizontal timeline - تاریخچهٔ نسخه‌ها</title>
	<link rel="self" type="application/atom+xml" href="https://fa.imamatpedia.com/w/index.php?action=history&amp;feed=atom&amp;title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86%3AHorizontal_timeline"/>
	<link rel="alternate" type="text/html" href="https://fa.imamatpedia.com/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Horizontal_timeline&amp;action=history"/>
	<updated>2026-04-21T00:41:07Z</updated>
	<subtitle>تاریخچهٔ نسخه‌ها برای این صفحه در ویکی</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://fa.imamatpedia.com/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Horizontal_timeline&amp;diff=479&amp;oldid=prev</id>
		<title>Admin: ۱ نسخه واردشده</title>
		<link rel="alternate" type="text/html" href="https://fa.imamatpedia.com/w/index.php?title=%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Horizontal_timeline&amp;diff=479&amp;oldid=prev"/>
		<updated>2016-01-25T11:23:48Z</updated>

		<summary type="html">&lt;p&gt;۱ نسخه واردشده&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحهٔ تازه&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local horizontal_timeline = {};&lt;br /&gt;
&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local builder = mw.html.create()&lt;br /&gt;
&lt;br /&gt;
local function defaultInvokeFunc(funcName)&lt;br /&gt;
	return function (frame)&lt;br /&gt;
		args = getArgs(frame, {&lt;br /&gt;
                       trim = true,&lt;br /&gt;
                       removeBlanks = true,&lt;br /&gt;
                       parentFirst = true&lt;br /&gt;
                    })&lt;br /&gt;
&lt;br /&gt;
        local from = getNotNilValue(tonumber(args[&amp;#039;from&amp;#039;]))&lt;br /&gt;
        local to =  getNotNilValue(tonumber(args[&amp;#039;to&amp;#039;]))&lt;br /&gt;
&lt;br /&gt;
        if not from or not to or from == to then&lt;br /&gt;
            return (&amp;quot;&amp;lt;strong class=&amp;#039;error&amp;#039;&amp;gt;&amp;lt;code&amp;gt;از&amp;lt;/code&amp;gt; و &amp;lt;code&amp;gt;به&amp;lt;/code&amp;gt; نمی‌توانند &amp;lt;code&amp;gt;هیچ&amp;lt;/code&amp;gt; یا مساوی باشند.&amp;lt;/strong&amp;gt;&amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
        	return horizontal_timeline[funcName](args)&lt;br /&gt;
        end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
horizontal_timeline.showTimeLine = defaultInvokeFunc(&amp;#039;_showTimeLine&amp;#039;)&lt;br /&gt;
function horizontal_timeline._showTimeLine(args)&lt;br /&gt;
    local wdth = getNotNilValue(args[&amp;#039;width&amp;#039;], &amp;#039;100%&amp;#039; )&lt;br /&gt;
    local bordr = getNotNilValue(args[&amp;#039;border&amp;#039;], &amp;#039;1px solid rgb(170, 170, 170)&amp;#039; )&lt;br /&gt;
    local bgCol = getNotNilValue(args[&amp;#039;plot-color&amp;#039;], args[&amp;#039;plot-colour&amp;#039;], &amp;#039;transparent&amp;#039;)&lt;br /&gt;
    local mrgn = getNotNilValue(args[&amp;#039;margin&amp;#039;], &amp;#039;1em&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    local div_root = builder&lt;br /&gt;
        :tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
        :cssText(&amp;#039;float:right;border:&amp;#039;..bordr .. &amp;#039;;width:&amp;#039;..wdth)&lt;br /&gt;
&lt;br /&gt;
    local cntnt = div_root&lt;br /&gt;
        :tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
        :cssText(&amp;#039;text-align:right; padding:1em; font-size:95%; margin:&amp;#039; ..mrgn.. &amp;#039;; background:&amp;#039;..bgCol)&lt;br /&gt;
           &lt;br /&gt;
    local rowNums = affixNums(args, &amp;#039;row&amp;#039;) -- Gets numbers for row1, row2, etc. with nil arguments removed.&lt;br /&gt;
    for _, num in ipairs(rowNums) do&lt;br /&gt;
        local rowType = args[&amp;#039;row&amp;#039; .. num] -- Gets args.rowtype1, args.rowtype2, etc. with nil arguments removed.&lt;br /&gt;
        if rowType == &amp;#039;scale&amp;#039; then&lt;br /&gt;
            cntnt:wikitext(horizontal_timeline.scaleRow(args))&lt;br /&gt;
        elseif rowType == &amp;#039;note&amp;#039; then&lt;br /&gt;
            cntnt:wikitext(horizontal_timeline.noteRow(num, args))&lt;br /&gt;
        elseif rowType == &amp;#039;timeline&amp;#039; then&lt;br /&gt;
            cntnt:wikitext(horizontal_timeline.timelineRow(num, args))&lt;br /&gt;
        else&lt;br /&gt;
            cntnt:wikitext(rowType)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    if args.caption then&lt;br /&gt;
        cntnt:tag(&amp;#039;p&amp;#039;)&lt;br /&gt;
            :cssText(&amp;#039;clear:both; text-align:center&amp;#039;)&lt;br /&gt;
            :wikitext(args.caption)&lt;br /&gt;
            :done()&lt;br /&gt;
    end&lt;br /&gt;
    return tostring(div_root) .. &amp;quot;&amp;lt;div style=&amp;#039;clear:right;&amp;#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
horizontal_timeline.showOneRow = defaultInvokeFunc(&amp;#039;_showOneRow&amp;#039;)&lt;br /&gt;
function horizontal_timeline._showOneRow(args)&lt;br /&gt;
    local rowNums = affixNums(args, &amp;#039;row&amp;#039;) -- Gets numbers for row1, row2, etc. with nil arguments removed.&lt;br /&gt;
    for _, num in ipairs(rowNums) do&lt;br /&gt;
        local rowType = args[&amp;#039;row&amp;#039; .. num] -- Gets args.rowtype1, args.rowtype2, etc. with nil arguments removed.&lt;br /&gt;
        if rowType == &amp;#039;scale&amp;#039; then&lt;br /&gt;
            return horizontal_timeline.scaleRow(args)&lt;br /&gt;
        elseif rowType == &amp;#039;note&amp;#039; then&lt;br /&gt;
            return horizontal_timeline.noteRow(num, args)&lt;br /&gt;
        elseif rowType == &amp;#039;timeline&amp;#039; then&lt;br /&gt;
            return horizontal_timeline.timelineRow(num, args)&lt;br /&gt;
        else&lt;br /&gt;
            return wikitext(rowType)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return &amp;quot;?&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function horizontal_timeline.timelineRow(num, args)&lt;br /&gt;
    local root = mw.html.create()&lt;br /&gt;
    &lt;br /&gt;
    local from = getNotNilValue(tonumber(args[&amp;#039;from&amp;#039;]))&lt;br /&gt;
    local to =  getNotNilValue(tonumber(args[&amp;#039;to&amp;#039;]))&lt;br /&gt;
    &lt;br /&gt;
    local style    = getNotNilValue(args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-style&amp;#039;], &amp;#039;&amp;#039;)&lt;br /&gt;
    local hght     = getNotNilValue (args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-height&amp;#039;],&lt;br /&gt;
									 args[style .. &amp;#039;-height&amp;#039;],&lt;br /&gt;
									 &amp;#039;2.5em&amp;#039;)&lt;br /&gt;
    local bordrTop = getNotNilValue (args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-bordertop&amp;#039;],&lt;br /&gt;
									 args[style .. &amp;#039;-bordertop&amp;#039;],&lt;br /&gt;
									 &amp;#039;none&amp;#039;)&lt;br /&gt;
    local bordrBtm = getNotNilValue (args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-borderbottom&amp;#039;],&lt;br /&gt;
									 args[style .. &amp;#039;-borderbottom&amp;#039;],&lt;br /&gt;
									 &amp;#039;none&amp;#039;)&lt;br /&gt;
    local txtTop   = getNotNilValue (args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-texttop&amp;#039;],&lt;br /&gt;
									 args[style .. &amp;#039;-texttop&amp;#039;],&lt;br /&gt;
									 &amp;#039;0em&amp;#039;)&lt;br /&gt;
    local colr     = getNotNilValue (args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-colour&amp;#039;],&lt;br /&gt;
    	                             args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-color&amp;#039;],&lt;br /&gt;
    	                             args[style .. &amp;#039;-colour&amp;#039;],&lt;br /&gt;
    	                             args[style .. &amp;#039;-color&amp;#039;],&lt;br /&gt;
    	                             &amp;#039;transparent&amp;#039;)&lt;br /&gt;
    	                             &lt;br /&gt;
    if bordrTop ~= &amp;#039;none&amp;#039; then&lt;br /&gt;
    	bordrTop = &amp;#039;border-top:&amp;#039; .. bordrTop .. &amp;#039;;&amp;#039;&lt;br /&gt;
    else&lt;br /&gt;
    	bordrTop = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if bordrBtm ~= &amp;#039;none&amp;#039; then&lt;br /&gt;
    	bordrBtm = &amp;#039;border-bottom:&amp;#039; .. bordrBtm .. &amp;#039;;&amp;#039;&lt;br /&gt;
    else&lt;br /&gt;
    	bordrBtm = &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    local p = root&lt;br /&gt;
         :tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
            :cssText(&amp;quot;clear:both;width:100%; padding:0px; height:&amp;quot;.. hght)&lt;br /&gt;
            :cssText(bordrTop.. bordrBtm .. &amp;quot;background-color:&amp;quot;..colr)&lt;br /&gt;
&lt;br /&gt;
    local rowDat = affixNums(args, &amp;#039;row&amp;#039;..num..&amp;#039;%-&amp;#039;, &amp;#039;%-[a-zA-Z]*&amp;#039;)&lt;br /&gt;
    local lastTo = from&lt;br /&gt;
    local firstNode = true&lt;br /&gt;
    for _, vals in ipairs(rowDat) do&lt;br /&gt;
&lt;br /&gt;
    	local styleL    = getNotNilValue(args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-&amp;#039;.. vals ..  &amp;#039;-style&amp;#039;], style)&lt;br /&gt;
&lt;br /&gt;
        --These vars should be initialized every iteration. Do not move outside of loop&lt;br /&gt;
        local bar_to = tonumber(getNotNilValue(args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-&amp;#039;.. vals .. &amp;#039;-to&amp;#039;],&lt;br /&gt;
                                        args[styleL .. &amp;#039;-to&amp;#039;],&lt;br /&gt;
                                        args[style.. &amp;#039;-&amp;#039;.. vals .. &amp;#039;-to&amp;#039;], to  ) )&lt;br /&gt;
        local bar_fontsize =getNotNilValue(args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-&amp;#039;.. vals .. &amp;#039;-fontsize&amp;#039;],&lt;br /&gt;
        								args[styleL .. &amp;#039;-fontsize&amp;#039;],&lt;br /&gt;
                                        args[style..&amp;#039;-&amp;#039;.. vals .. &amp;#039;-fontsize&amp;#039;], &amp;#039;0.9em&amp;#039; )&lt;br /&gt;
        local bar_bordr= getNotNilValue(args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-&amp;#039;.. vals .. &amp;#039;-border&amp;#039;],&lt;br /&gt;
        								args[styleL .. &amp;#039;-border&amp;#039;],&lt;br /&gt;
                                        args[style..&amp;#039;-&amp;#039;.. vals .. &amp;#039;-border&amp;#039;],&lt;br /&gt;
                                        &amp;#039;none&amp;#039;)&lt;br /&gt;
        local bar_txtTop= getNotNilValue(args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-&amp;#039;.. vals .. &amp;#039;-texttop&amp;#039;],&lt;br /&gt;
        								args[styleL .. &amp;#039;-texttop&amp;#039;],&lt;br /&gt;
                                        args[style..&amp;#039;-&amp;#039;.. vals .. &amp;#039;-texttop&amp;#039;], txtTop )&lt;br /&gt;
        local bar_text = getNotNilValue(args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-&amp;#039;.. vals .. &amp;#039;-text&amp;#039;],&lt;br /&gt;
        								args[styleL .. &amp;#039;-text&amp;#039;],&lt;br /&gt;
                                        args[style..&amp;#039;-&amp;#039;.. vals .. &amp;#039;-text&amp;#039;], &amp;#039;&amp;#039;)&lt;br /&gt;
        local bar_colour = getNotNilValue(args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-&amp;#039;.. vals .. &amp;#039;-colour&amp;#039;],&lt;br /&gt;
                                        args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-&amp;#039;.. vals .. &amp;#039;-color&amp;#039;],&lt;br /&gt;
                                        args[styleL .. &amp;#039;-boxcolour&amp;#039;],&lt;br /&gt;
                                        args[styleL .. &amp;#039;-boxcolor&amp;#039;],&lt;br /&gt;
                                        args[style..&amp;#039;-&amp;#039;.. vals .. &amp;#039;-colour&amp;#039;],&lt;br /&gt;
                                        args[style..&amp;#039;-&amp;#039;.. vals .. &amp;#039;-color&amp;#039;],&lt;br /&gt;
                                        &amp;#039;transparent&amp;#039; )&lt;br /&gt;
                                        &lt;br /&gt;
        if from &amp;lt; to then&lt;br /&gt;
            if bar_to &amp;gt; to then bar_to = to end&lt;br /&gt;
            if lastTo &amp;lt; from then lastTo = from end&lt;br /&gt;
        else&lt;br /&gt;
            if bar_to &amp;lt; to then bar_to = to end&lt;br /&gt;
            if lastTo &amp;gt; from then lastTo = from end&lt;br /&gt;
    	end&lt;br /&gt;
&lt;br /&gt;
        local width =( (bar_to-lastTo)*100 / (to-from) ) --math.abs&lt;br /&gt;
&lt;br /&gt;
        if width &amp;gt; 0 and width &amp;lt;= 100 then&lt;br /&gt;
            if bar_bordr == &amp;#039;none&amp;#039; then&lt;br /&gt;
                if firstNode then -- for first box both left and right border needed&lt;br /&gt;
                    bar_bordr = &amp;quot;1px solid #000; border-right:1px solid #000&amp;quot;&lt;br /&gt;
                    firstNode = false&lt;br /&gt;
                else&lt;br /&gt;
                    bar_bordr = &amp;quot;1px solid #000&amp;quot;&lt;br /&gt;
    	        end&lt;br /&gt;
		    end&lt;br /&gt;
            p:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
                :cssText(&amp;quot;float:right; height:100%; text-align:center; overflow: hidden; background-color:&amp;quot;..bar_colour)&lt;br /&gt;
                :cssText(&amp;quot;width:&amp;quot;..width ..&amp;quot;%&amp;quot;)&lt;br /&gt;
                    :tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
                    :cssText(&amp;quot;-moz-box-sizing: border-box; -webkit-box-sizing: border-box;box-sizing: border-box;&amp;quot;)&lt;br /&gt;
                    :cssText(&amp;quot;float:left; height:100%; width:100%; border-left:&amp;quot;..bar_bordr)&lt;br /&gt;
                        :tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
                            :cssText(&amp;#039;position: relative; top:&amp;#039;..bar_txtTop .. &amp;#039;; font-size:&amp;#039;.. bar_fontsize)&lt;br /&gt;
                            :wikitext(bar_text)&lt;br /&gt;
                        :done()&lt;br /&gt;
                    :done()&lt;br /&gt;
                :done()&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        lastTo = bar_to&lt;br /&gt;
    end&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function horizontal_timeline.noteRow(num, args)&lt;br /&gt;
    local root = mw.html.create()&lt;br /&gt;
    &lt;br /&gt;
    local from = getNotNilValue(tonumber(args[&amp;#039;from&amp;#039;]))&lt;br /&gt;
    local to =  getNotNilValue(tonumber(args[&amp;#039;to&amp;#039;]))&lt;br /&gt;
    &lt;br /&gt;
    local hght = getNotNilValue(args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-height&amp;#039;], &amp;#039;2.5em&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    local p = root&lt;br /&gt;
         :tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
            :cssText(&amp;quot;width:100%; position:relative; right:-0.2em; top:0.8em; clear:both; height:&amp;quot;.. hght)&lt;br /&gt;
&lt;br /&gt;
    local rowDat = affixNums(args, &amp;#039;row&amp;#039;..num..&amp;#039;%-&amp;#039;, &amp;#039;%-at&amp;#039;)&lt;br /&gt;
    if not rowDat then&lt;br /&gt;
        return (&amp;quot;&amp;lt;strong class=&amp;#039;error&amp;#039;&amp;gt;لطفاً موقعیت را برای یادداشت در پارامتر &amp;lt;code&amp;gt;&amp;quot;..&amp;#039;row&amp;#039; .. num .. &amp;#039;-&amp;#039;.. vals .. &amp;#039;-at&amp;#039;..&amp;quot;&amp;lt;/code&amp;gt; مشخص کنید.&amp;lt;/strong&amp;gt;&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
    for _, vals in ipairs(rowDat) do&lt;br /&gt;
        local note_at   =args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-&amp;#039;.. vals .. &amp;#039;-at&amp;#039;] --will never be nil as it is what is sued to recieve rowDat&lt;br /&gt;
        local note_text =getNotNilValue(args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-&amp;#039;.. vals .. &amp;#039;-text&amp;#039;], &amp;#039;&amp;#039; )&lt;br /&gt;
        local note_shift=getNotNilValue(args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-&amp;#039;.. vals .. &amp;#039;-shift&amp;#039;], &amp;#039;0em&amp;#039; )&lt;br /&gt;
        local note_lift =getNotNilValue(args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-&amp;#039;.. vals .. &amp;#039;-lift&amp;#039;], &amp;#039;0em&amp;#039; )&lt;br /&gt;
        local note_arrow=getNotNilValue(args[&amp;#039;row&amp;#039; .. num .. &amp;#039;-&amp;#039;.. vals .. &amp;#039;-arrow&amp;#039;], &amp;#039;↓&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
		local note_sft = 100*(note_at - from) / (to-from)&lt;br /&gt;
        &lt;br /&gt;
        p:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
            :cssText(&amp;quot;position:absolute; top:0px; width:100%&amp;quot;)&lt;br /&gt;
                :tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
                    :cssText(&amp;quot;margin-right:&amp;quot;.. note_sft ..&amp;quot;%; margin-top:0; position:relative&amp;quot;)&lt;br /&gt;
                    :tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
                        :cssText(&amp;quot;position:relative; top:0.25em; right:-1.5px&amp;quot;)&lt;br /&gt;
                        :wikitext(note_arrow)&lt;br /&gt;
                        :done()&lt;br /&gt;
                    :tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
                        :cssText(&amp;quot;font-size:smaller; position:relative; line-height:3px; overflow:visible&amp;quot;)&lt;br /&gt;
                        :cssText(&amp;quot;right:&amp;quot;..note_shift..&amp;quot;; top:&amp;quot;..note_lift..&amp;quot;; z-index:&amp;quot;.. (1000- tonumber(num)))&lt;br /&gt;
                        :wikitext(note_text)&lt;br /&gt;
                        :done()&lt;br /&gt;
                    :done()&lt;br /&gt;
                :done()&lt;br /&gt;
            :done()&lt;br /&gt;
    end&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function horizontal_timeline.scaleRow(args)&lt;br /&gt;
	local from = getNotNilValue(tonumber(args[&amp;#039;from&amp;#039;]))&lt;br /&gt;
    local to =  getNotNilValue(tonumber(args[&amp;#039;to&amp;#039;]))&lt;br /&gt;
    local inc = getNotNilValue( tonumber(args[&amp;#039;inc&amp;#039;]), (math.floor( (from - to) / 5 ) * -1) )&lt;br /&gt;
    local negativeFmt = getNotNilValue(args[&amp;#039;axis-negativeFmt&amp;#039;], &amp;#039;-%s&amp;#039;)&lt;br /&gt;
    local positiveFmt = getNotNilValue(args[&amp;#039;axis-positiveFmt&amp;#039;], &amp;#039;%s&amp;#039;)&lt;br /&gt;
    local zeroFmt     = getNotNilValue(args[&amp;#039;axis-zeroFmt&amp;#039;], &amp;#039;%s&amp;#039;)&lt;br /&gt;
    local nudge       = getNotNilValue(args[&amp;#039;axis-nudge&amp;#039;], &amp;#039;-1.8em&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    local wdth = math.abs ( (100 * inc) / (from - to) )&lt;br /&gt;
    local root = mw.html.create()&lt;br /&gt;
&lt;br /&gt;
    local p = root&lt;br /&gt;
        :wikitext(&amp;quot;&amp;lt;div name=&amp;#039;line&amp;#039; style=&amp;#039;clear:both;width:100%;max-width:100%;border-top:0.1em solid black;height:1em;&amp;#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;quot;)&lt;br /&gt;
        :tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
            :attr(&amp;#039;id&amp;#039;, &amp;#039;Scale&amp;#039;)&lt;br /&gt;
            :cssText(&amp;#039;clear:both;position:relative;top:-1.4em;right:-0.2em;width:100%;padding:0;height:2.5em&amp;#039;)&lt;br /&gt;
            &lt;br /&gt;
    for var=from, to, inc do&lt;br /&gt;
        if from &amp;lt; to then&lt;br /&gt;
            if var+inc &amp;gt; to then wdth = 0 end&lt;br /&gt;
        else&lt;br /&gt;
            if var+inc &amp;lt; to then wdth = 0 end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        local lbl&lt;br /&gt;
        if var &amp;lt; 0 then&lt;br /&gt;
            lbl = string.format( negativeFmt, math.abs(var) )&lt;br /&gt;
        elseif var &amp;gt; 0 then&lt;br /&gt;
            lbl = string.format( positiveFmt, math.abs(var) )&lt;br /&gt;
        else&lt;br /&gt;
            lbl = string.format( zeroFmt, math.abs(var) )&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        p:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
            :cssText(&amp;#039;float:right;overflow:visible;width:&amp;#039;.. wdth .. &amp;#039;%&amp;#039;)&lt;br /&gt;
            :wikitext(&amp;#039;|&amp;#039;)&lt;br /&gt;
            :tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
                :cssText(&amp;#039;font-size:86%; position:relative; right:&amp;#039;..nudge..&amp;#039;; overflow:visible; white-space:nowrap&amp;#039;)&lt;br /&gt;
                :wikitext(lbl)&lt;br /&gt;
                :done()&lt;br /&gt;
        :done()&lt;br /&gt;
    end&lt;br /&gt;
    p:done()&lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Returns the first non nil value from the list of parameters.&lt;br /&gt;
function getNotNilValue(...)&lt;br /&gt;
    for _,v in pairs(arg) do --Do not use ipairs. Will stop at first nil&lt;br /&gt;
        if v then return v end&lt;br /&gt;
    end&lt;br /&gt;
    return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function affixNums(t, prefix, suffix)&lt;br /&gt;
    prefix = prefix or &amp;#039;&amp;#039;&lt;br /&gt;
    suffix = suffix or &amp;#039;&amp;#039;&lt;br /&gt;
    &lt;br /&gt;
    local pattern = &amp;#039;^&amp;#039; .. prefix .. &amp;#039;([1-9]%d*)&amp;#039; .. suffix .. &amp;#039;$&amp;#039;&lt;br /&gt;
    local nums = {}&lt;br /&gt;
    for k, v in pairs(t) do&lt;br /&gt;
        if type(k) == &amp;#039;string&amp;#039; then            &lt;br /&gt;
            local num = mw.ustring.match(k, pattern)&lt;br /&gt;
            if num then&lt;br /&gt;
                nums[#nums + 1] = tonumber(num)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    table.sort(nums)&lt;br /&gt;
    return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return horizontal_timeline&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>