|
|
本館粉絲專頁 |
|
|
使用者:Digipunk/SC/func.js:修訂版本之間的差異
台灣棒球維基館
小 |
|||
| 第1行: | 第1行: | ||
//-------------------------------------------------- | //-------------------------------------------------- | ||
| − | // SC (schedule) | + | // SC (schedule) related |
//-------------------------------------------------- | //-------------------------------------------------- | ||
function DGPKJS_SC() { | function DGPKJS_SC() { | ||
| + | // timezone conversion | ||
var elmts = document.getElementsByClassName('__DGPK_TZ_BTN__'); | var elmts = document.getElementsByClassName('__DGPK_TZ_BTN__'); | ||
for (var i = elmts.length - 1; i >= 0; i--) { | for (var i = elmts.length - 1; i >= 0; i--) { | ||
| 第11行: | 第12行: | ||
} | } | ||
| + | //---------------------------- | ||
| + | // timezone conversion | ||
| + | //---------------------------- | ||
function __dgpk_tz_conv(event) { | function __dgpk_tz_conv(event) { | ||
var o = event.srcElement || event.target; | var o = event.srcElement || event.target; | ||
| 第116行: | 第120行: | ||
return ret; | 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 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 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; | ||
| + | } | ||
| + | |||
| + | var xo = (r !== '' && o ? r / o : ''); | ||
| + | var xd = (ra !== '' && d ? ra / d : ''); | ||
| + | |||
| + | 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; | ||
| + | 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 | ||
| + | } // 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)); | ||
| + | } | ||
| + | }}} | ||
2019年9月10日 (二) 17:19的修訂版本
//-------------------------------------------------- // 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 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 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; } var xo = (r !== '' && o ? r / o : ''); var xd = (ra !== '' && d ? ra / d : ''); 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; 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 } // 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)); } }}}