User:Alex 21/script-seriesoverview.js
// <nowiki>
$(function($) {
setTimeout(function() {
$.when( mw.loader.using( ['mediawiki.util']), $.ready ).then(function() {
var portletlink = mw.util.addPortletLink('p-tv', '#', 'Series overview');
$(portletlink).click( function(e) {
e.preventDefault();
// Find overview table
var overview = document.getElementById('seriesoverview');
if (overview === null) {
var k = 0;
var alltables = document.getElementById('mw-content-text').getElementsByTagName('table');
overview = alltables[k];
var className = overview.className;
while (so_tableIndexOf(className,"ambox") || so_tableIndexOf(className,"infobox") || so_tableIndexOf(className,"mw-collapsible")) {
k++;
overview = alltables[k];
className = overview.className;
}
}
// Define parameters
var df = 0; var _i = 1;
var endExist = false; var episodesCol;
var SpecialSplit = [' ',' ']; // 0: Special; 1: Split
var headerBase = 3; var network_double = 0;
var network_single = 0; var infoheaderonly = 0; var auxheaders = 0;
var dateReg = /(([^\s]*)\s)?(([^\s,]*))?.*(\d{4})/;
// Begin template
var _template_head = "{{Series overview\n";
var _template = _template_head;
// Aux variables - see where episodes column is located
for (var a = 1; a < overview.rows[0].cells.length; a++) {
if (overview.rows[0].cells[a].innerHTML.indexOf('Episodes') != -1) {
episodesCol = a;
break;
}
}
auxheaders = episodesCol-1;
headerBase += auxheaders;
if (auxheaders > 0) {
for (a = 1; a < episodesCol; a++) {
_template += "| aux"+(String.fromCharCode(64+a))+" = "+overview.rows[0].cells[a].innerHTML+"\n";
}
_template += "\n";
}
// Find existance of info and network headers/columns
if (overview.rows[1].cells[2+auxheaders] !== undefined && overview.rows[1+auxheaders].cells[2+auxheaders].innerHTML.toLowerCase() == "network") {
network_single = 1;
}
if (overview.rows[0].cells[3+auxheaders] !== undefined) {
if (overview.rows[0].cells[3+auxheaders].innerHTML.toLowerCase() == "network") {
network_double = 1;
headerBase++;
} else if (overview.rows[0].cells[3+auxheaders].getAttribute('rowspan') > 1) {
infoheaderonly = 1;
}
}
var network = network_single || network_double;
headerBase -= infoheaderonly;
// Check if overview uses simple one-row header
var onerowheader = (overview.rows[1].cells[1].tagName == "TD" ? 1 : 0);
headerBase += onerowheader;
// Add infoheader and info headers
var extraHeadRows = overview.rows[0].cells.length-headerBase;
var infoRows = overview.rows[1].cells.length-(headerBase-(network_single?0:1))+infoheaderonly;
if (extraHeadRows > 0) {
var infoheader = overview.rows[0].cells[headerBase+auxheaders].children[0];
if (infoheader === undefined || infoheader.tagName == "BR") infoheader = overview.rows[0].cells[headerBase+auxheaders].innerHTML;
if (typeof infoheader != "object") infoheader = infoheader.replace(/\n/g,'');
else infoheader.innerHTML = infoheader.innerHTML.replace(/\n/g,'');
_template += "| infoheader = "+so_link(infoheader)+"\n";
}
if (infoRows > 0 && !onerowheader && !infoheaderonly) {
for (a = 0; a < infoRows; a++) {
_template += "| info"+(String.fromCharCode(65+a))+" = "+overview.rows[1].cells[a+(headerBase-1)+auxheaders].innerHTML.replace("\n","")+"\n";
}
}
// Extra links
if (extraHeadRows > 0 || infoRows > 0 && !onerowheader) _template += "\n";
_template = _template.replace(_template_head+"\n",_template_head);
// Begin iteratin through season rows
for (var i = 2-onerowheader; i < overview.rows.length; i++) {
// Define parameters
var startdate, enddate;
var RC = overview.rows[i].cells;
SpecialSplit[0] = ' '; var CellAdj = 0;
// 0: Colour; 1: Link, 2: Episodes
var CLE = ['','',''];
if (SpecialSplit[1] == 'A') {
SpecialSplit[1] = 'B'; // Was on first half, now on second half
} else if (RC[0].getAttribute('rowspan') || RC[1].getAttribute('rowspan')) {
SpecialSplit[1] = 'A'; // Now on first half
} else {
SpecialSplit[1] = ' '; // Not a split season
}
// Code to add after parameter name
var ThisKey = so_ThisKey(_i,SpecialSplit);
if (SpecialSplit[1] != 'B') {
// First half or regular season, link and colour added
// Link
var linkCell = (RC[1].firstChild.href !== undefined ? RC[1].firstChild : RC[1].firstChild.firstChild);
if (linkCell && linkCell.tagName != "A") {
if (typeof linkCell == "object") linkCell = linkCell.textContent ? linkCell.textContent : linkCell.innerText;
var aT = document.createElement('a');
aT.innerHTML = linkCell;
aT.href = '#Season '+linkCell;
linkCell = aT;
}
var linkMain;
var linkCellH = linkCell.href;
if (!linkCell) {
linkMain = '';
} else if (linkCellH.indexOf('index.php') >= 0) {
linkMain = linkCellH.substr(linkCellH.indexOf('title=')+6, linkCellH.indexOf('&')-(linkCellH.indexOf('title=')+6))+
(linkCellH.indexOf('#') >= 0 ? linkCellH.substr(linkCellH.indexOf('#')) : '');
} else {
linkMain = linkCellH.substr(linkCellH.lastIndexOf('wiki/')+5);
}
linkMain = decodeURIComponent(linkMain.replace(/_/g, ' ').replace(/\.([A-Z0-9]{2})/g, '%$1')).split('#');
// Special row
if (linkCell.innerHTML != _i) {
_i--;
SpecialSplit[0] = 'S';
CellAdj = Math.max(0,RC[1].getAttribute('colspan')-2);
ThisKey = so_ThisKey(_i,SpecialSplit);
}
CLE[0] += "| color"+ThisKey+" = "+(RC[0].bgColor?RC[0].bgColor:RGBSTRtoHEX(RC[0].style.background?RC[0].style.background:RC[0].style.backgroundColor))+"\n";
CLE[1] += "| link"+_i+SpecialSplit[0]+" = <includeonly>"+linkMain[0]+"</includeonly>"+(linkMain[1]?"#"+linkMain[1]:"")+"\n";
if (isNaN(parseInt(so_wiki(linkCell.innerHTML),10))) {
CLE[1] += "| linkT"+ThisKey+" = "+so_wiki(linkCell.innerHTML)+"\n";
}
} else {
// Second half, only colour required
CLE[0] += "| color"+ThisKey+" = "+(RC[0].bgColor?RC[0].bgColor:RGBSTRtoHEX(RC[0].style.background?RC[0].style.background:RC[0].style.backgroundColor))+"\n";
}
// Aux variables
var aux = '';
if (episodesCol != 1 && SpecialSplit[1] != 'B') {
for (a = 1; a < episodesCol; a++) {
if (SpecialSplit[1] == ' ' || (SpecialSplit[1] != ' ' && RC[1+a].getAttribute('rowspan') > 1))
aux += "| aux"+String.fromCharCode(64+a)+_i+SpecialSplit[0]+" = "+so_wiki(RC[1+a].innerHTML)+"\n";
CellAdj--;
}
} else {
CellAdj -= episodesCol-1;
}
// Total episodes
if (SpecialSplit[1] != 'B' && so_tba(RC[2-CellAdj].innerHTML) && !isNaN(parseInt(so_ref(RC[2-CellAdj],false),10))) {
CLE[2] += "| episodes"+_i+SpecialSplit[0]+" = "+so_ref(RC[2-CellAdj],false)+"\n";
}
// Colour, Link, Episodes
_template += ( SpecialSplit[1] != ' ' ? CLE[1]+aux+CLE[2]+CLE[0] : CLE[0]+CLE[1]+aux+CLE[2] );
// Aux variables split season
if (episodesCol != 1 && SpecialSplit[1] != ' ') {
for (a = 1; a < episodesCol; a++) {
var cell = RC[SpecialSplit[1] == 'B' ? a-CellAdj-1 : a-CellAdj];
_template += "| aux"+String.fromCharCode(65+a)+ThisKey+" = "+so_wiki(cell.innerHTML)+"\n";
}
}
// Split season episodes
if (SpecialSplit[1] != ' ') {
CellAdj += (SpecialSplit[1] == 'B' ? 2 : 0);
if (so_tba(RC[3-CellAdj].innerHTML) && !isNaN(parseInt(so_ref(RC[3-CellAdj],false),10))) {
_template += "| episodes"+ThisKey+" = "+so_ref(RC[3-CellAdj],false)+"\n";
}
CellAdj--;
}
// Start and end dates
var temp;
var reS = dateReg.exec(so_dateref(RC[3-CellAdj]));
if (reS) {
var reS_x = [reS[4],reS[2],reS[5]];
if (reS_x[0] && isNaN(parseInt(reS_x[0],10))) {
temp = reS_x[0]; reS_x[0] = reS_x[1]; reS_x[1] = temp; df = 1;
}
startdate = so_startend(reS_x,"Start",df);
}
var reE = '';
if (RC[4-CellAdj] !== undefined && RC[3-CellAdj].getAttribute('colspan') <= 1) {
reE = dateReg.exec(so_dateref(RC[4-CellAdj]));
if (reE) {
var reE_x = [reE[4],reE[2],reE[5]];
if (reE_x[0] && isNaN(parseInt(reE_x[0],10))) {
temp = reE_x[0]; reE_x[0] = reE_x[1]; reE_x[1] = temp; df = 1;
}
enddate = so_startend(reE_x,"End",df);
endExist = true;
}
}
if (RC[3-CellAdj].getAttribute('colspan') > 1) { CellAdj++; }
if (reS) _template += "| start"+ThisKey+" = "+startdate+so_ref(RC[3-CellAdj],true)+"\n";
if (reE) _template += "| end"+ThisKey+" = "+enddate+so_ref(RC[4-CellAdj],true)+"\n";
else if (SpecialSplit[0] != 'S' && RC[3-CellAdj].getAttribute('colspan') > 1) _template += "| end"+ThisKey+" = start\n";
// Network
if (network && RC[5-CellAdj] !== undefined && RC[5-CellAdj].getAttribute('rowspan')) {
_template += "| network"+ThisKey+" = "+so_link(RC[5-CellAdj].children[0])+"\n";
CellAdj++;
}
// Info cells
if (infoRows > 0) {
for (var j = 0; j < 26; j++) {
var infoCell = RC[5+j-CellAdj];
if (infoCell && so_tba(so_ref(infoCell,false))) {
_template += "| info"+String.fromCharCode(65+j)+ThisKey+" = "+so_ref(infoCell,false)+"\n";
}
}
}
// New lines and updating split season variables
if (i < overview.rows.length-1 && SpecialSplit[1] != 'A') _template += "\n";
if (SpecialSplit[1] == 'B') SpecialSplit[1] = ' ';
else if (SpecialSplit[1] == 'A') _i--;
_i++;
}
// Released parameters
var released = '';
for (a = 1; a < overview.rows[0].cells.length; a++) {
if (overview.rows[0].cells[a].innerHTML.indexOf('release') != -1) {
released += "| released = y\n";
break;
}
}
if (!endExist) {
released += "| allreleased = y\n";
}
if (released) _template = _template.replace(_template_head, _template_head+released+"\n");
// Finished
_template = _template.replace('<small><span style="color: #2C2C2C" title="To be announced">TBA</span></small>','{{TableTBA}}');
_template += "}}";
copyContent(_template);
alert("Copied! Now go to the editing page and paste over the raw code.");
// Function: Remove reference
function so_ref(cell,comment) {
if (comment) {
if (cell.innerHTML.indexOf("<sup") < 0) return '';
else return "<!--Be sure to restore the reference that existed here!-->";
} else {
if (cell.innerHTML.indexOf("<sup") < 0) return cell.innerHTML;
else return cell.innerHTML.replace(/<sup(.*)\/sup\>/g,"<!--Be sure to restore the reference that existed here!-->");
}
}
// Function: Raw link to wiki link
function so_link(link) {
if (link === undefined || link.href === undefined) return link;
var nwlink = link.href.replace("https://en.wikipedia.org/wiki/","").replace("_", " ");
return "[["+(link.innerHTML==nwlink?"":nwlink+"|")+link.innerHTML+"]]";
}
// Function: Remove reference from data
function so_dateref(cell) {
return (cell.innerHTML.indexOf('<')>=0 ? cell.innerHTML.substr(0, cell.innerHTML.indexOf('<')) : cell.innerHTML).split(' ').join(' ');
}
// Function: Bold and italic text to wiki
function so_wiki(text) {
return text.replace(/<i>(.*)<\/i>/g, "''$1''").replace(/<b>(.*)<\/b>/g, "'''$1'''");
}
// Function: Dates to wiki templates
function so_startend(cell,se,df) {
var monthNumber = new Date(Date.parse(cell[1]+" 1, 2005")).getMonth()+1;
return "{{"+se+" date|"+cell[2]+
(!isNaN(monthNumber) && cell[1] !== undefined ? "|"+monthNumber : "")+
(!isNaN(cell[0]) && cell[0] !== undefined ? "|"+cell[0] : "")+
(df ? "|df=y" : "")+"}}";
}
// Function: Chceck if classname contains single class
function so_tableIndexOf(className,content) {
return (className.indexOf(content) >= 0);
}
// Function: Check if text contains TBA, TBD, N/A
function so_tba(text) {
text = text.toLowerCase();
return text.indexOf("tba") < 0 && text.indexOf("tbd") < 0 && text.indexOf("n/a") < 0;
}
// Function: Get value of ThisKey
function so_ThisKey(_i,SpecialSplit) {
var ThisKey = _i+SpecialSplit[1]+SpecialSplit[0];
if (ThisKey.indexOf(' ') != -1) {
var spaces = ThisKey.length-ThisKey.replace(/\s/g,'').length;
ThisKey = ThisKey.replace(/\s/g,'');
for (a = 0; a < spaces; a++) ThisKey += ' ';
}
return ThisKey;
}
});
});
},600);
});
// </nowiki>
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.