<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.benkyy.net/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACommon.js</id>
	<title>MediaWiki:Common.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.benkyy.net/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACommon.js"/>
	<link rel="alternate" type="text/html" href="https://wiki.benkyy.net/index.php?title=MediaWiki:Common.js&amp;action=history"/>
	<updated>2026-04-26T02:59:11Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.benkyy.net/index.php?title=MediaWiki:Common.js&amp;diff=47&amp;oldid=prev</id>
		<title>Benkyy: Add live clock and stat animation for custom landing page</title>
		<link rel="alternate" type="text/html" href="https://wiki.benkyy.net/index.php?title=MediaWiki:Common.js&amp;diff=47&amp;oldid=prev"/>
		<updated>2026-04-25T21:37:52Z</updated>

		<summary type="html">&lt;p&gt;Add live clock and stat animation for custom landing page&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;(function () {&lt;br /&gt;
  function updateBenkyyClock() {&lt;br /&gt;
    var timeEl = document.querySelector(&amp;#039;.benky-live-clock&amp;#039;);&lt;br /&gt;
    var dateEl = document.querySelector(&amp;#039;.benky-live-date&amp;#039;);&lt;br /&gt;
    if (!timeEl &amp;amp;&amp;amp; !dateEl) return;&lt;br /&gt;
&lt;br /&gt;
    var now = new Date();&lt;br /&gt;
    var timeFmt = new Intl.DateTimeFormat(&amp;#039;en-GB&amp;#039;, {&lt;br /&gt;
      timeZone: &amp;#039;Europe/Bucharest&amp;#039;,&lt;br /&gt;
      hour: &amp;#039;2-digit&amp;#039;,&lt;br /&gt;
      minute: &amp;#039;2-digit&amp;#039;,&lt;br /&gt;
      hour12: true&lt;br /&gt;
    });&lt;br /&gt;
    var dateFmt = new Intl.DateTimeFormat(&amp;#039;en-GB&amp;#039;, {&lt;br /&gt;
      timeZone: &amp;#039;Europe/Bucharest&amp;#039;,&lt;br /&gt;
      weekday: &amp;#039;long&amp;#039;,&lt;br /&gt;
      day: &amp;#039;numeric&amp;#039;,&lt;br /&gt;
      month: &amp;#039;long&amp;#039;,&lt;br /&gt;
      year: &amp;#039;numeric&amp;#039;&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    if (timeEl) timeEl.textContent = timeFmt.format(now);&lt;br /&gt;
    if (dateEl) dateEl.textContent = dateFmt.format(now);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function animateCounters() {&lt;br /&gt;
    document.querySelectorAll(&amp;#039;.benky-stat-number[data-target]&amp;#039;).forEach(function (el) {&lt;br /&gt;
      if (el.dataset.done === &amp;#039;1&amp;#039;) return;&lt;br /&gt;
      el.dataset.done = &amp;#039;1&amp;#039;;&lt;br /&gt;
      var target = parseInt(el.getAttribute(&amp;#039;data-target&amp;#039;) || &amp;#039;0&amp;#039;, 10);&lt;br /&gt;
      var start = 0;&lt;br /&gt;
      var duration = 900;&lt;br /&gt;
      var startTime = null;&lt;br /&gt;
&lt;br /&gt;
      function step(ts) {&lt;br /&gt;
        if (!startTime) startTime = ts;&lt;br /&gt;
        var progress = Math.min((ts - startTime) / duration, 1);&lt;br /&gt;
        var eased = 1 - Math.pow(1 - progress, 3);&lt;br /&gt;
        var value = Math.round(start + (target - start) * eased);&lt;br /&gt;
        el.textContent = value.toLocaleString(&amp;#039;en-US&amp;#039;);&lt;br /&gt;
        if (progress &amp;lt; 1) requestAnimationFrame(step);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      requestAnimationFrame(step);&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function init() {&lt;br /&gt;
    updateBenkyyClock();&lt;br /&gt;
    animateCounters();&lt;br /&gt;
    setInterval(updateBenkyyClock, 1000);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (document.readyState === &amp;#039;loading&amp;#039;) {&lt;br /&gt;
    document.addEventListener(&amp;#039;DOMContentLoaded&amp;#039;, init);&lt;br /&gt;
  } else {&lt;br /&gt;
    init();&lt;br /&gt;
  }&lt;br /&gt;
})();&lt;/div&gt;</summary>
		<author><name>Benkyy</name></author>
	</entry>
</feed>