Sandbox: Difference between revisions

From Hidden Mickey Wiki

No edit summary
(Blanked the page)
Tags: Blanking Manual revert
 
(42 intermediate revisions by the same user not shown)
Line 1: Line 1:
{| class="wikitable"
! Item
! Done
! Time
|-
| Example task 1
| <input type="checkbox" class="mw-checkbox-ts" />
| <span class="mw-ts-box"></span>
|-
| Example task 2
| <input type="checkbox" class="mw-checkbox-ts" />
| <span class="mw-ts-box"></span>
|-
| Example task 3
| <input type="checkbox" class="mw-checkbox-ts" />
| <span class="mw-ts-box"></span>
|}


<!--
  JavaScript: when a checkbox with class "mw-checkbox-ts" is checked, its
  sibling .mw-ts-box in the same row gets the current time (formatted like 3:08:55 PM).
  If the checkbox is unchecked the timestamp is cleared.
  This uses event delegation and works on touch devices.
-->
<script>
(function () {
  'use strict';
  // Format Date as "h:mm:ss AM/PM" (en-US)
  function formatTime(d) {
    try {
      return d.toLocaleTimeString('en-US', {
        hour: 'numeric',
        minute: '2-digit',
        second: '2-digit'
      });
    } catch (e) {
      // fallback
      var H = d.getHours();
      var h = H % 12 || 12;
      var m = String(d.getMinutes()).padStart(2, '0');
      var s = String(d.getSeconds()).padStart(2, '0');
      var ampm = H < 12 ? 'AM' : 'PM';
      return h + ':' + m + ':' + s + ' ' + ampm;
    }
  }
  // Find the timestamp box in the same table row as the checkbox
  function findTsBox(cb) {
    var tr = cb.closest('tr');
    if (!tr) return null;
    return tr.querySelector('.mw-ts-box');
  }
  // Handle change events on checkboxes (works for keyboard, mouse, and touch)
  document.addEventListener('change', function (ev) {
    var target = ev.target;
    if (!target) return;
    if (target.matches && target.matches('.mw-checkbox-ts')) {
      var tsBox = findTsBox(target);
      if (!tsBox) return;
      if (target.checked) {
        tsBox.textContent = formatTime(new Date());
      } else {
        tsBox.textContent = '';
      }
    }
  }, false);
  // Some phones/browsers can behave unexpectedly — also handle click/touchend
  // (this won't duplicate because change already handled the state; this just
  // provides extra reliability on weird devices)
  document.addEventListener('click', function (ev) {
    var t = ev.target;
    if (t && t.matches && t.matches('.mw-checkbox-ts')) {
      // tiny delay to let the input state update, then mirror the change handler
      setTimeout(function () {
        var tsBox = findTsBox(t);
        if (!tsBox) return;
        if (t.checked) tsBox.textContent = formatTime(new Date());
        else tsBox.textContent = '';
      }, 5);
    }
  }, false);
})();
</script>

Latest revision as of 10:53, 8 October 2025