1577d780f0f34a2e910d67bdfd726f32af56d244
   1// Copyright (C) 2011, John 'Warthog9' Hawley <warthog9@eaglescrag.net>
   2//               2011, Jakub Narebski <jnareb@gmail.com>
   3
   4/**
   5 * @fileOverview Manipulate dates in gitweb output, adjusting timezone
   6 * @license GPLv2 or later
   7 */
   8
   9/**
  10 * Get common timezone and adjust dates to use this common timezone.
  11 *
  12 * This function is called during onload event (added to window.onload).
  13 *
  14 * @param {String} tzDefault: default timezone, if there is no cookie
  15 * @param {String} tzCookieName: name of cookie to store timezone
  16 * @param {String} tzClassName: denotes elements with date to be adjusted
  17 */
  18function onloadTZSetup(tzDefault, tzCookieName, tzClassName) {
  19        var tzCookie = getCookie(tzCookieName);
  20        var tz = tzCookie ? tzCookie : tzDefault;
  21
  22        // server-side of gitweb produces datetime in UTC,
  23        // so if tz is 'utc' there is no need for changes
  24        if (tz !== 'utc') {
  25                fixDatetimeTZ(tz, tzClassName);
  26        }
  27}
  28
  29
  30/**
  31 * Replace RFC-2822 dates contained in SPAN elements with tzClassName
  32 * CSS class with equivalent dates in given timezone.
  33 *
  34 * @param {String} tz: numeric timezone in '(-|+)HHMM' format, or 'utc', or 'local'
  35 * @param {String} tzClassName: specifies elements to be changed
  36 */
  37function fixDatetimeTZ(tz, tzClassName) {
  38        // sanity check, method should be ensured by common-lib.js
  39        if (!document.getElementsByClassName) {
  40                return;
  41        }
  42
  43        // translate to timezone in '(-|+)HHMM' format
  44        tz = normalizeTimezoneInfo(tz);
  45
  46        // NOTE: result of getElementsByClassName should probably be cached
  47        var classesFound = document.getElementsByClassName(tzClassName, "span");
  48        for (var i = 0, len = classesFound.length; i < len; i++) {
  49                var curElement = classesFound[i];
  50
  51                // we use *.firstChild.data (W3C DOM) instead of *.innerHTML
  52                // as the latter doesn't always work everywhere in every browser
  53                var epoch = parseRFC2822Date(curElement.firstChild.data);
  54                var adjusted = formatDateRFC2882(epoch, tz);
  55
  56                curElement.firstChild.data = adjusted;
  57        }
  58}
  59
  60/* end of adjust-timezone.js */