本館粉絲專頁

使用者:Digipunk/SC/func.js:修訂版本之間的差異

分享此網頁到Facebook
分享此網頁到Plurk
分享此網頁到百度搜藏
分享此網頁到Twitter
分享此網頁到Del.icio.us
台灣棒球維基館
跳轉到: 導覽搜尋
(bug fixed)
第138行: 第138行:
 
       var da = 0, db = 0;
 
       var da = 0, db = 0;
 
       var getval = 0;
 
       var getval = 0;
 +
      var of = df = 0.0;
  
 
       var descr = DESCR[j].innerText.replace(/\s+/g, '');
 
       var descr = DESCR[j].innerText.replace(/\s+/g, '');
第170行: 第171行:
 
           o = oa + '.' + ob;
 
           o = oa + '.' + ob;
 
         }
 
         }
 +
 
         if (TOKEN[3] == '') {
 
         if (TOKEN[3] == '') {
 
         } else if (TOKEN[3].indexOf('+') < 0) {
 
         } else if (TOKEN[3].indexOf('+') < 0) {
第236行: 第238行:
 
       }
 
       }
  
       var xo = (r !== '' && o ? r / o : '');
+
      if (o) {
       var xd = (ra !== '' && d ? ra / d : '');
+
        var tmpf = o.split('.');
 +
        of = parseInt(tmpf[0]) + parseInt(tmpf[1]) / 3;
 +
      }
 +
      if (d) {
 +
        var tmpf = d.split('.');
 +
        df = parseInt(tmpf[0]) + parseInt(tmpf[1]) / 3;
 +
      }
 +
 
 +
       var xo = (r !== '' && o ? r / of : '');
 +
       var xd = (ra !== '' && d ? ra / df : '');
  
 
       var xx = (xo && xd ? __dgpkjs_tqb_round4(xo - xd) : '');
 
       var xx = (xo && xd ? __dgpkjs_tqb_round4(xo - xd) : '');

2019年11月7日 (四) 12:21的修訂版本

//--------------------------------------------------
// SC (schedule) related
//--------------------------------------------------
function DGPKJS_SC() {
  // timezone conversion
  var elmts = document.getElementsByClassName('__DGPK_TZ_BTN__');
  for (var i = elmts.length - 1; i >= 0; i--) {
    elmts[i].addEventListener("click", __dgpk_tz_conv, false);
    elmts[i].title = '當地時間';
    elmts[i].className = 'DGPK-tz-btn';
  }
}
 
//----------------------------
// timezone conversion
//----------------------------
function __dgpk_tz_conv(event) {
  var o = event.srcElement || event.target;
 
  var p = o;
  var safe_cnt = 10;
  while ((p = p.parentNode) != null && --safe_cnt >= 0) {
    if (p.tagName == 'TBODY' || p.tagName == 'TABLE') {
      break;
    }
  }
  if (p.tagName != 'TBODY' && p.tagName != 'TABLE') {
    return false;
  }
 
  var attr = decodeURIComponent(o.getAttribute('data-str')).replace(/\s/g, '').split('!');
  var offset = __dgpk_tz_offset(attr[0]);
  if (offset === false) {
    return false;
  }
 
  var yy = attr[1];
  if (!yy || isNaN(yy)) {
    yy = (new Date()).getFullYear();
  }
 
  // seems fine
  var ATTR = [
    {c:'DGPK-tz-btn',  s:'當地時間'},
    {c:'DGPK-tz-btn1', s:'台灣時間'}
  ];
 
  var act = (o.className.indexOf(ATTR[1].c) >= 0 ? 0 : 1);
  o.className = ATTR[act].c;
  o.title = ATTR[act].s;
 
  var date = null;
  for (var i = 0, ii = p.children.length; i < ii; i++) {
    var tr = p.children[i];
    if (tr.tagName != 'TR') break; // something wrong
 
    var mat = tr.children[0].innerText.trim().match(/^\d+\/\d+/);
    if (mat != null) {
      date = yy + '/' + mat[0];
    }
    if (date == null) continue;
 
    var TD = tr.getElementsByClassName('time-val');
    for (var j = 0, jj = TD.length; j < jj; j++) {
      var td = TD[j];
      var time = td.innerText.trim();
 
      attr = td.getAttribute('data-str');
      if (!attr) {
        // do conversion
        attr = time + '!' + __dgpk_tz_conv_do(date, time, offset);
        td.setAttribute('data-str', attr);
      }
 
      td.innerHTML = attr.split('!')[act];
    }
  }
 
  // 好喵做到底,按一次就執行全部
  var BTN = document.getElementsByClassName(ATTR[(act ^ 1)].c);
  BTN[0] && BTN[0].click();  // 由於會一個呼叫一個,每個只要做一次即可
}
 
function __dgpk_tz_offset(tz) { // return tz offset in seconds
  if (!isNaN(tz) && tz.length <= 3) {
    return 3600 * (8 + parseFloat(tz));
  } else {
    var mat = tz.match(/^UTC([\+\-])([0-9:]+)$/);
    if (mat == null) return false;
    if (mat[2].indexOf(':') > 0) { // UTC+08:00
      var hm = mat[2].split(':');
      return (3600 * hm[0] + 60 * hm[1]) * (mat[1] == '+' ? 1 : -1);
    } else if (mat[2].length == 4) { // UTC+0800
      return (3600 * mat[2].substr(0, 2) + 60 * mat[2].substr(2)) * (mat[1] == '+' ? 1 : -1);
    } else {
      return false;
    }
  }
}
 
function __dgpk_tz_conv_do(date, time, offset) {
  if (time.match(/^\d+:\d+/) == null) return time;
 
  var dd = new Date(date + ' ' + time);
  var utc = dd.getTime() - 60000 * dd.getTimezoneOffset() - 1000 * offset;
  var nd = new Date(utc);
 
  var M = nd.getMonth() + 1;
  var D = nd.getDate();
  var h = nd.getHours()
  var m = nd.getMinutes();
  var ret = (h < 10 ? '0' : '') + h + ':' + (m < 10 ? '0' : '') + m;
  ret = '<U>' + ret + '</U>';
 
  var ori = date.split('/');
  if (M != parseInt(ori[1]) || D != parseInt(ori[2])) {
    ret += '<BR><SPAN STYLE="color:deeppink">' + (M < 10 ? '0' : '') + M + '/' + (D < 10 ? '0' : '') + D + '</SPAN>';
  }
 
  return ret;
}
 
 
//--------------------------------------------------
// [2019-09-10] 
// dynamically calculate the TQB values
// called by User:Digipunk/SC/TQB/Renderer2
//--------------------------------------------------
function DGPKJS_TQB() {{{
  var TQB = document.getElementsByClassName('DGPK-TQB-JS');
  for (var i = TQB.length - 1; i >= 0; i--) {
    var start_sn = TQB[i].getAttribute('data-str');
    var DESCR = TQB[i].getElementsByClassName('de');
    for (var j = DESCR.length - 1; j >= 0; j--) {
      var mat, mat2, tmp, tmp2;
      var r = '', ra = '', o = '', d = '';
      var oa = 0, ob = 0;
      var da = 0, db = 0;
      var getval = 0;
      var of = df = 0.0;
 
      var descr = DESCR[j].innerText.replace(/\s+/g, '');
      if (descr.substr(0, 7) == 'getval:') {
        getval = 1;
        descr = descr.substr(7);
      }
 
      var TOKEN = descr.split('/');
 
      if (TOKEN.length == 4) {
        //-------------------------------------
        // mode = 1 (numeric values)
        //-------------------------------------
        if (TOKEN[0] != '') eval('r  = ' + TOKEN[0] + ';');
        if (TOKEN[2] != '') eval('ra = ' + TOKEN[2] + ';');
 
        if (TOKEN[1] == '') {
        } else if (TOKEN[1].indexOf('+') < 0) {
          o = TOKEN[1] + (TOKEN[1].indexOf('.') < 0 ? '.0' : '');
        } else {
          tmp = TOKEN[1].split('+');
          for (var k = 0, kk = tmp.length; k < kk; k++) {
            tmp2 = tmp[k].split('.');
            oa += parseInt(tmp2[0]);
            if (tmp2.length == 2) {
              ob += parseInt(tmp2[1]);
              oa += parseInt(ob / 3);
              ob %= 3;
            }
          }
          o = oa + '.' + ob;
        }
 
        if (TOKEN[3] == '') {
        } else if (TOKEN[3].indexOf('+') < 0) {
          d = TOKEN[3] + (TOKEN[3].indexOf('.') < 0 ? '.0' : '');
        } else {
          tmp = TOKEN[3].split('+');
          for (var k = 0, kk = tmp.length; k < kk; k++) {
            tmp2 = tmp[k].split('.');
            da += parseInt(tmp2[0]);
            if (tmp2.length == 2) {
              db += parseInt(tmp2[1]);
              da += parseInt(ob / 3);
              db %= 3;
            }
          }
          d = da + '.' + db;
        }
      } else {
        //-------------------------------------
        // mode = 2 (sentence)
        //-------------------------------------
        if ((mat = descr.match(/得\d+分/g)) != null) {
          r = 0;
          for (var k = 0, kk = mat.length; k < kk; k++) {
            if ((mat2 = mat[k].match(/\d+/)) != null) {
              r += parseInt(mat2[0]);
            }
          }
        }
        if ((mat = descr.match(/失\d+分/g)) != null) {
          ra = 0;
          for (var k = 0, kk = mat.length; k < kk; k++) {
            if ((mat2 = mat[k].match(/\d+/)) != null) {
              ra += parseInt(mat2[0]);
            }
          }
        }
 
        if ((mat = descr.match(/攻[0-9\.]+局/g)) != null) {
          for (var k = 0, kk = mat.length; k < kk; k++) {
            if ((mat2 = mat[k].match(/(\d+)\.?(\d*)/)) != null) {
              oa += parseInt(mat2[1]);
              if (mat2[2]) {
                ob += parseInt(mat2[2]);
                oa += parseInt(ob / 3);
                ob %= 3;
              }
            }
          }
        }
        if ((mat = descr.match(/(守|備)[0-9\.]+局/g)) != null) {
          for (var k = 0, kk = mat.length; k < kk; k++) {
            if ((mat2 = mat[k].match(/(\d+)\.?(\d*)/)) != null) {
              da += parseInt(mat2[1]);
              if (mat2[2]) {
                db += parseInt(mat2[2]);
                da += parseInt(db / 3);
                db %= 3;
              }
            }
          }
        }
 
        o = oa + '.' + ob;
        d = da + '.' + db;
      }
 
      if (o) {
        var tmpf = o.split('.');
        of = parseInt(tmpf[0]) + parseInt(tmpf[1]) / 3;
      }
      if (d) {
        var tmpf = d.split('.');
        df = parseInt(tmpf[0]) + parseInt(tmpf[1]) / 3;
      }
 
      var xo = (r !== '' && o ? r / of : '');
      var xd = (ra !== '' && d ? ra / df : '');
 
      var xx = (xo && xd ? __dgpkjs_tqb_round4(xo - xd) : '');
 
      if (getval == 1) {
        TQB[i].outerHTML = (xx !== '' && xx >= 0 ? '+' : '') + xx;
        break;
      } else {
        if (xx !== '') {
          if (xx >= 0) {
            xx = '<SPAN STYLE="color:blue"><B>+' + xx + '</B></SPAN>';
          } else {
            xx = '<SPAN STYLE="color:red"><B>' + xx + '</B></SPAN>';
          }
        }
 
        var TR = DESCR[j].parentElement.parentElement;
        if (start_sn) {
          TR.children[0].innerHTML = parseInt(TR.children[0].innerHTML) + parseInt(start_sn) - 1;
        }
        TR.children[2].innerHTML = r;
        TR.children[3].innerHTML = o;
        TR.children[4].innerHTML = __dgpkjs_tqb_round4(xo);
        TR.children[5].innerHTML = ra;
        TR.children[6].innerHTML = d;
        TR.children[7].innerHTML = __dgpkjs_tqb_round4(xd);
        TR.children[8].innerHTML = xx;
      }
    } // DESCR for
 
    if (TQB[i]) TQB[i].className = 'DGPK-TQB';
  } // TQB for
}}}
function __dgpkjs_tqb_round4(v) {{{
  v = '' + (Math.round(parseFloat(v) * 10000) / 10000);
  if (v.indexOf('.') < 0) {
    return v + '.0000';
  } else {
    var tmp = v.split('.');
    return (tmp[0] + '.' + (tmp[1] + '0000').substr(0, 4));
  }
}}}