<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ar">
	<id>https://3rabica.org/index.php?action=history&amp;feed=atom&amp;title=%D9%88%D8%AD%D8%AF%D8%A9%3ACountdown</id>
	<title>وحدة:Countdown - تاريخ المراجعة</title>
	<link rel="self" type="application/atom+xml" href="https://3rabica.org/index.php?action=history&amp;feed=atom&amp;title=%D9%88%D8%AD%D8%AF%D8%A9%3ACountdown"/>
	<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Countdown&amp;action=history"/>
	<updated>2026-06-05T11:48:10Z</updated>
	<subtitle>تاريخ التعديل لهذه الصفحة في الويكي</subtitle>
	<generator>MediaWiki 1.43.7</generator>
	<entry>
		<id>https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Countdown&amp;diff=2135&amp;oldid=prev</id>
		<title>عبد العزيز: ملاحظة</title>
		<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:Countdown&amp;diff=2135&amp;oldid=prev"/>
		<updated>2023-11-18T13:55:36Z</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;--[[ Countdown&lt;br /&gt;
هذه الوحدة تعمل عبر قالب {{عد تنازلي}}&lt;br /&gt;
أصل الوحدة منقول عن الإنجليزية ولكن طورت هنا لتقوم بوظائف أحسن &lt;br /&gt;
لذا أحذر عند تحديثها من نص الإنجليزية&lt;br /&gt;
]]&lt;br /&gt;
-- هذه الوحدة مترتبط بالإضافة [[ميدياويكي:Gadget-countdown-timer.js]]&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
string=mw.ustring&lt;br /&gt;
-- Constants&lt;br /&gt;
local lang = mw.language.getContentLanguage()&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local alltimeparts = {&amp;#039;years&amp;#039;, &amp;#039;weeks&amp;#039;, &amp;#039;days&amp;#039;, &amp;#039;hours&amp;#039;, &amp;#039;minutes&amp;#039;, &amp;#039;seconds&amp;#039;}&lt;br /&gt;
local timeFormat&lt;br /&gt;
local timeparts = 2&lt;br /&gt;
local color =&amp;#039;#F00&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function formatMessage(text, secondsLeft)&lt;br /&gt;
	local maj = mw.ustring.find( text, &amp;#039;@مدة مجرورة@&amp;#039;, 1, true ) and true or false&lt;br /&gt;
&lt;br /&gt;
    local function getTableKeys(table,limit)&lt;br /&gt;
        local keyset = {}&lt;br /&gt;
        local n=0&lt;br /&gt;
        for _,v in pairs(alltimeparts) do&lt;br /&gt;
            if table[v] then&lt;br /&gt;
            	n=n+1&lt;br /&gt;
            	keyset[n] = v&lt;br /&gt;
	            if n&amp;gt;=limit then&lt;br /&gt;
	            	break&lt;br /&gt;
	        	end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        return keyset&lt;br /&gt;
    end&lt;br /&gt;
    local mytimeformat = timeFormat or (timeparts and getTableKeys(lang:getDurationIntervals(secondsLeft, alltimeparts),timeparts)) or alltimeparts&lt;br /&gt;
    local timeLeft = lang:formatDuration(secondsLeft, mytimeformat)&lt;br /&gt;
    -- Color and bold the numbers, because it makes them look important.&lt;br /&gt;
	timeLeft = string.gsub(timeLeft, &amp;#039;(%d+)&amp;#039;, &amp;#039;&amp;lt;span style=&amp;quot;color: &amp;#039; .. color .. &amp;#039;; font-weight: bold;&amp;quot;&amp;gt;%1&amp;lt;/span&amp;gt;&amp;#039;)&lt;br /&gt;
	if maj then&lt;br /&gt;
		timeLeft=string.gsub(timeLeft,&amp;#039;ان و &amp;#039;, &amp;#039;ين و&amp;#039;);&lt;br /&gt;
		timeLeft=string.gsub(timeLeft,&amp;#039;ان، &amp;#039;, &amp;#039;ين و&amp;#039;);&lt;br /&gt;
        if string.sub(timeLeft,-2) == &amp;#039;ان&amp;#039; then&lt;br /&gt;
        	timeLeft = string.sub(timeLeft,1,-3) .. &amp;#039;ين&amp;#039;&lt;br /&gt;
    	end&lt;br /&gt;
    end&lt;br /&gt;
    timeLeft = string.gsub(timeLeft,&amp;#039;، &amp;#039;,&amp;#039; و&amp;#039;);&lt;br /&gt;
	timeLeft = string.gsub(timeLeft,&amp;#039;%(&amp;#039;,&amp;#039;&amp;#039;);&lt;br /&gt;
	timeLeft = string.gsub(timeLeft,&amp;#039;%)&amp;#039;,&amp;#039;&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
    if text and text ~= &amp;#039;&amp;#039; then&lt;br /&gt;
        timeLeft = string.gsub(text,maj and &amp;#039;@مدة مجرورة@&amp;#039; or &amp;#039;@مدة@&amp;#039;, timeLeft)&lt;br /&gt;
    end&lt;br /&gt;
    return timeLeft&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function  formatDurationList(_timeFormat)&lt;br /&gt;
	local allowedIntervals = {}&lt;br /&gt;
	for _,v in ipairs(alltimeparts) do&lt;br /&gt;
		if string.find( _timeFormat,string.sub(v,1,1)) then &lt;br /&gt;
			table.insert(allowedIntervals, v) &lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return allowedIntervals&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function  process(args)&lt;br /&gt;
	local eventTime&lt;br /&gt;
	if type(args.date1) ~= &amp;#039;nil&amp;#039; then &lt;br /&gt;
		eventTime= tonumber(lang:formatDate(&amp;#039;U&amp;#039;,args.date1))&lt;br /&gt;
		args.date1 = lang:formatDate(&amp;#039;c&amp;#039;,args.date1)&lt;br /&gt;
	else&lt;br /&gt;
        if (tonumber(args.year) and tonumber(args.month) and tonumber(args.day)) then &lt;br /&gt;
        	eventTime = os.time({year=args.year, month=args.month, day=args.day&lt;br /&gt;
        		, hour=args.hour, min=args.minute, sec=args.second})&lt;br /&gt;
			args.date1 = lang:formatDate(&amp;#039;c&amp;#039;,&amp;#039;@&amp;#039; .. eventTime)&lt;br /&gt;
		else&lt;br /&gt;
        	error(  &amp;#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;خطأ: يجب تحديد السنة، والشهر، واليوم.&amp;lt;/strong&amp;gt;&amp;#039;)&lt;br /&gt;
        end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local timeToStart = os.difftime(eventTime, os.time()) -- (future time - current time)&lt;br /&gt;
&lt;br /&gt;
	local timeToEnd&lt;br /&gt;
	if args.date2 then&lt;br /&gt;
			timeToEnd = tonumber(lang:formatDate(&amp;#039;U&amp;#039;,args.date2))&lt;br /&gt;
	        timeToEnd = os.difftime(timeToEnd , os.time())&lt;br /&gt;
			args.date2 = lang:formatDate(&amp;#039;c&amp;#039;,args.date2)&lt;br /&gt;
	elseif tonumber(args.duration) then&lt;br /&gt;
		if args[&amp;#039;duration unit&amp;#039;] then&lt;br /&gt;
			-- Duration is in unit other than seconds, use formatDate to add&lt;br /&gt;
			timeToEnd = tonumber(lang:formatDate(&amp;#039;U&amp;#039;, &amp;#039;@&amp;#039; .. tostring(timeToStart) &lt;br /&gt;
				.. &amp;#039; +&amp;#039; .. tostring(args.duration) .. &amp;#039; &amp;#039; .. args[&amp;#039;duration unit&amp;#039;]))&lt;br /&gt;
			args.date2 = lang:formatDate(&amp;#039;c&amp;#039;, &amp;#039;@&amp;#039; .. tostring(eventTime) &lt;br /&gt;
			.. &amp;#039; +&amp;#039; .. tostring(args.duration) .. &amp;#039; &amp;#039; .. args[&amp;#039;duration unit&amp;#039;])&lt;br /&gt;
		else &lt;br /&gt;
			timeToEnd = timeToStart + (tonumber(args.duration) &lt;br /&gt;
				or error(&amp;#039;args.duration should be a number of seconds&amp;#039;, 0))&lt;br /&gt;
			args.date2 = lang:formatDate(&amp;#039;c&amp;#039;, &amp;#039;@&amp;#039; .. tostring(eventTime+ args.duration))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return timeToStart,timeToEnd&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function  _shortMain(args)&lt;br /&gt;
	local timeToStart,timeToEnd = process(args)&lt;br /&gt;
	&lt;br /&gt;
	if timeToStart &amp;gt; 0 then&lt;br /&gt;
		-- Event has not begun yet&lt;br /&gt;
		return formatMessage(timeToStart, args.color)&lt;br /&gt;
	elseif timeToEnd then&lt;br /&gt;
		if timeToEnd &amp;gt; 0 then 	-- Event is in progress&lt;br /&gt;
			return  formatMessage(timeToEnd,  args.color)&lt;br /&gt;
		else 			-- Event had a duration and has now ended&lt;br /&gt;
			return  &amp;#039;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- Event had no duration and has begun&lt;br /&gt;
		return  &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _addparam(var,varkey)&lt;br /&gt;
	return &amp;#039;&amp;lt;span class=&amp;quot;cdt-param-&amp;#039; .. varkey .. &amp;#039;&amp;quot;&amp;gt;&amp;#039; .. var .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function  _Main(args)&lt;br /&gt;
	local timeToStart,timeToEnd = process(args)&lt;br /&gt;
	local params = &amp;#039;&amp;lt;span class=&amp;quot;countdown-timer-params&amp;quot; style=&amp;quot;display:none&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
	local otherparam = &amp;#039;&amp;#039;&lt;br /&gt;
	local text&lt;br /&gt;
	local active = (timeToStart and timeToStart &amp;gt; 0) or (timeToEnd and timeToEnd &amp;gt; 0)&lt;br /&gt;
    &lt;br /&gt;
    if active then&lt;br /&gt;
        local paramargs={&amp;#039;date2&amp;#039;, &amp;#039;eventstart&amp;#039;, &amp;#039;eventstart2&amp;#039;, &amp;#039;eventend&amp;#039;, &amp;#039;event&amp;#039;}&lt;br /&gt;
        params = params .. _addparam(color, &amp;#039;color&amp;#039;)&lt;br /&gt;
        for _,v in pairs(paramargs) do&lt;br /&gt;
            if args[v] then params = params .. _addparam(args[v], v) end&lt;br /&gt;
        end&lt;br /&gt;
        if timeparts then otherparam = otherparam .. timeparts end&lt;br /&gt;
        if otherparam ~= &amp;#039;&amp;#039; then params = params .. _addparam(otherparam, &amp;#039;other&amp;#039;) end&lt;br /&gt;
        if timeToStart &amp;gt; 0 then&lt;br /&gt;
            params = params .. _addparam(args.date1, &amp;#039;date1&amp;#039;)&lt;br /&gt;
			params = params .. (args.eventbefore and _addparam(args.eventbefore, &amp;#039;eventbefore&amp;#039;) or &amp;#039;&amp;#039;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	if timeToStart &amp;gt; 0 then&lt;br /&gt;
		-- Event has not begun yet&lt;br /&gt;
        text = formatMessage(args.eventbefore or args.event and (&amp;#039;بقي @مدة@ على بداية «&amp;#039; .. args.event  .. &amp;quot;».&amp;quot;) or &amp;#039;&amp;#039;, timeToStart)&lt;br /&gt;
	elseif timeToEnd then&lt;br /&gt;
		if timeToEnd &amp;gt; 0 then 	-- Event is in progress&lt;br /&gt;
            text = formatMessage(args.eventstart2 or args.event and (&amp;quot;بداية «&amp;quot; .. args.event .. &amp;quot;» وستكون النهاية بعد @مدة مجرورة@&amp;quot;)  or &amp;#039;&amp;#039;, timeToEnd)&lt;br /&gt;
		else 			-- Event had a duration and has now ended&lt;br /&gt;
			text = args.eventend or args.event and (&amp;quot;انتهاء «&amp;quot; .. args.event .. &amp;quot;».&amp;quot;) or &amp;#039;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- Event had no duration and has begun&lt;br /&gt;
		text = args.eventstart or args.event and (&amp;quot;بداية «&amp;quot; .. args.event .. &amp;#039;».&amp;#039;) or &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local refreshLink&lt;br /&gt;
	if  not active or args.refresh == &amp;#039;no&amp;#039; or args.refresh == &amp;#039;لا&amp;#039; then&lt;br /&gt;
		refreshLink = &amp;#039;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		refreshLink = mw.title.getCurrentTitle():fullUrl({action = &amp;#039;purge&amp;#039;})&lt;br /&gt;
		refreshLink = string.format(&amp;#039;&amp;lt;span class=&amp;quot;plainlinks cdt-refreshLink&amp;quot;&amp;gt;&amp;lt;small&amp;gt;([%s تحديث])&amp;lt;/small&amp;gt;&amp;lt;/span&amp;gt;&amp;#039;, refreshLink)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    if active then&lt;br /&gt;
        text = &amp;#039;&amp;lt;span class=&amp;quot;cdt-ret&amp;quot;&amp;gt;&amp;#039; .. text .. refreshLink .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
        params = params .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
        text = &amp;#039;&amp;lt;span class=&amp;quot;countdown-timer&amp;quot;&amp;gt;&amp;#039; .. params .. text .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return  text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	&lt;br /&gt;
	if type(args.timeFormat) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		timeFormat = formatDurationList(args.timeFormat)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	timeparts = tonumber(args.timeparts) or tonumber(args[&amp;#039;أجزاء الوقت&amp;#039;]) or timeparts&lt;br /&gt;
    color = args.color or args[&amp;#039;لون&amp;#039;] or args[&amp;#039;اللون&amp;#039;] or color&lt;br /&gt;
	local args2 &lt;br /&gt;
	if args.format == &amp;#039;short&amp;#039; then&lt;br /&gt;
		args2 = {&lt;br /&gt;
			  date1=args.date1 or args[&amp;#039;بداية&amp;#039;] or args[&amp;#039;البداية&amp;#039;]&lt;br /&gt;
			, date2=args.date2 or args[&amp;#039;نهاية&amp;#039;] or args[&amp;#039;النهاية&amp;#039;]&lt;br /&gt;
	&lt;br /&gt;
			, year=args.year or args[&amp;#039;سنة&amp;#039;] or args[&amp;#039;السنة&amp;#039;]&lt;br /&gt;
			, month=args.month or args[&amp;#039;شهر&amp;#039;] or args[&amp;#039;الشهر&amp;#039;]&lt;br /&gt;
			, day=args.day or args[&amp;#039;يوم&amp;#039;] or args[&amp;#039;اليوم&amp;#039;]&lt;br /&gt;
			, hour=args.hour or args[&amp;#039;ساعة&amp;#039;] or args[&amp;#039;الساعة&amp;#039;]&lt;br /&gt;
			, min=args.minute or args[&amp;#039;دقيقة&amp;#039;] or args[&amp;#039;الدقيقة&amp;#039;]&lt;br /&gt;
			, sec=args.second or args[&amp;#039;ثانية&amp;#039;] or args[&amp;#039;الثانية&amp;#039;]&lt;br /&gt;
			, duration = args.duration or args[&amp;#039;مدة&amp;#039;] or args[&amp;#039;المدة&amp;#039;]&lt;br /&gt;
			, [&amp;#039;duration unit&amp;#039;] = args[&amp;#039;duration unit&amp;#039;]&lt;br /&gt;
			, refresh= &amp;#039;no&amp;#039;&lt;br /&gt;
		}		&lt;br /&gt;
	else&lt;br /&gt;
		args2 = {&lt;br /&gt;
			  date1=args.date1 or args[&amp;#039;بداية&amp;#039;] or args[&amp;#039;البداية&amp;#039;]&lt;br /&gt;
			, date2=args.date2 or args[&amp;#039;نهاية&amp;#039;] or args[&amp;#039;النهاية&amp;#039;]&lt;br /&gt;
	&lt;br /&gt;
			, year=args.year or args[&amp;#039;سنة&amp;#039;] or args[&amp;#039;السنة&amp;#039;]&lt;br /&gt;
			, month=args.month or args[&amp;#039;شهر&amp;#039;] or args[&amp;#039;الشهر&amp;#039;]&lt;br /&gt;
			, day=args.day or args[&amp;#039;يوم&amp;#039;] or args[&amp;#039;اليوم&amp;#039;]&lt;br /&gt;
			, hour=args.hour or args[&amp;#039;ساعة&amp;#039;] or args[&amp;#039;الساعة&amp;#039;]&lt;br /&gt;
			, min=args.minute or args[&amp;#039;دقيقة&amp;#039;] or args[&amp;#039;الدقيقة&amp;#039;]&lt;br /&gt;
			, sec=args.second or args[&amp;#039;ثانية&amp;#039;] or args[&amp;#039;الثانية&amp;#039;]&lt;br /&gt;
			, duration = args.duration or args[&amp;#039;مدة&amp;#039;] or args[&amp;#039;المدة&amp;#039;]&lt;br /&gt;
			, [&amp;#039;duration unit&amp;#039;] = args[&amp;#039;duration unit&amp;#039;]&lt;br /&gt;
	&lt;br /&gt;
			, event= args.event or args[&amp;#039;حدث&amp;#039;] or args[&amp;#039;الحدث&amp;#039;]&lt;br /&gt;
			, eventbefore = args.eventbefore or args[&amp;#039;قبل الحدث&amp;#039;]&lt;br /&gt;
			, eventstart = args.eventstart or args[&amp;#039;بداية الحدث&amp;#039;]&lt;br /&gt;
			, eventstart2 = args.eventstart2 or args[&amp;#039;بداية الحدث 2&amp;#039;] or args[&amp;#039;بداية الحدث2&amp;#039;]&lt;br /&gt;
			, eventend= args.eventend or args[&amp;#039;نهاية الحدث&amp;#039;]&lt;br /&gt;
			, refresh= args.refresh or args[&amp;#039;تحديث&amp;#039;] or args[&amp;#039;التحديث&amp;#039;] &lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
    return _Main(args2)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>عبد العزيز</name></author>
	</entry>
</feed>