|
|
本館粉絲專頁 |
|
|
使用者:Digipunk/SC/func.js:修訂版本之間的差異
台灣棒球維基館
(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 / | + | if (o) { |
| − | var xd = (ra !== '' && d ? ra / | + | 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)); } }}}