MediaWiki:Common.js: Difference between revisions

From Porn Base Central
Jump to navigation Jump to search
Content deleted Content added
No edit summary
No edit summary
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
var ts_image_path = stylepath+"/common/images/";
var ts_image_up = "sort_up.gif";
var ts_image_down = "sort_down.gif";
var ts_image_none = "sort_none.gif";
var ts_europeandate = wgContentLanguage != "en"; // The non-American-inclined can change to "true"
var SORT_COLUMN_INDEX;

/**
* Локальная функция загрузки скриптов с поддержкой указания проекта
*/
var importScript_ = importScript;
importScript = function ( page, proj ) {
if ( !proj ) {
importScript_( page );
} else {
if ( proj.indexOf( '.' ) === -1 ) {
proj += 'pbc.xxx';
}
mw.loader.using( 'mediawiki.util' ).done( function () {
mw.loader.load( '//' + proj + '/w/index.php?title=' + mw.util.wikiUrlencode( page ) +
'&action=raw&ctype=text/javascript' );
} );
}
};

mw.loader.load('https://test1.pbc.xxx/w/index.php?title=User:Lisa/convenientDiscussions.js&action=raw&ctype=text/javascript');
mw.loader.load('https://test1.pbc.xxx/w/index.php?title=User:Lisa/convenientDiscussions.js&action=raw&ctype=text/javascript');


if (mw.config.get('wgPageName') === 'Main_Page') {
$(function() {
var link = document.createElement("link");
var $cargoFields = $('.mw-special-CargoTables #mw-content-text > ul');
link.rel = "stylesheet";
if (!$cargoFields.length) return;
link.type = "text/css";
var tableName = mw.config.get('wgTitle').match(/\/([^\/]+)$/)[1];
link.href = "https://cdn.pbc.xxx/bootstrap/bootstrap.min.css";
if (!tableName) return;
document.head.appendChild(link);
return new mw.Api().postWithToken('csrf', {
action : 'expandtemplates',
prop : 'wikitext',
text : '{{#invoke:CargoDeclare|main|' + tableName + '|forgadget=yes}}'
}).then(function(data) {
var wikitext = data.expandtemplates.wikitext;
var dict = wikitext.split(';!;!;');
var lookup = {};
dict.forEach(function(entry) {
var tbl = entry.split(':::');
lookup[tbl[0]] = tbl[1];
});
$cargoFields.find('li').each(function() {
var field = $(this).find('strong').html();
var el = document.createElement('span');
if (lookup[field] !== undefined) {
$(el).html(' - ' + lookup[field]);
}
this.appendChild(el);
});
});
});

$(function() {
if (!$('.mw-special-Movepage').length) return;
var title = mw.config.get('wgTitle').replace('MovePage/', '');
return new mw.Api().get({
action : 'query',
prop:'info',
titles:'Data:' + title
}).then(function(data) {
if (data.query.pages["-1"] !== undefined) return;
var el = document.createElement('div');
var url = mw.config.get('wgServer') + '/Data:' + title;
$(el).html('Warning! A <a href="' + url + '">Data page</a> exists for this page!');
$(el).addClass('important-notice');
$(el).insertAfter(document.getElementById('wpReason'));
});
});

/**
* Часто те или иные манипуляции со страницей нужно выполнить как можно раньше, но нет гарантии, что
* к моменту выполнения кода нужный участок DOM готов, а событие полной загрузки страницы происходит
* слишком поздно. В этой функции проверяется наличие элемента $testElement и в случае успеха
* функция-колбэк выполняется, иначе же её выполнение поручается другой функции. Если элемент
* в $testElement имеет содержимое, правильнее указать следующий за ним элемент, чтобы быть
* уверенным, что он загрузился до конца. Имейте в виду, что разные скины часто используют разные
* названия классов и идентификаторов.
*/
function runAsEarlyAsPossible( callback, $testElement, func ) {
func = func || $;
$testElement = $testElement || $( '#footer' );

if ( $testElement.length ) {
callback();
} else {
func( callback );
}
}

function sortables_init() {
var idnum = 0;
// Find all tables with class sortable and make them sortable
var tables = document.getElementsByClassName(document, "table", "sortable");//originally sortable
for (var ti = 0; ti < tables.length ; ti++) {
if (!tables[ti].id) {
tables[ti].setAttribute('id','sortable_table_id_'+idnum);
++idnum;
}
ts_makeSortable(tables[ti]);
}
}

function ts_makeSortable(table) {
var firstRow;
if (table.rows && table.rows.length > 0) {
if (table.tHead && table.tHead.rows.length > 0) {
firstRow = table.tHead.rows[table.tHead.rows.length-1];
} else {
firstRow = table.rows[0];
}
}
if (!firstRow) return;
var colloffset=0;
var sortIcon='';
// We have a first row: assume it's the header, and make its contents clickable links
for (var i = 0; i < firstRow.cells.length; i++) {
var cell = firstRow.cells[i];
var cns = (cell.className) ? cell.className.split(' ') : new Array();
var forceNumeric = 0;
var unsortable = false;
for (var j=0;j<cns.length;j++) {
if (cns[j] == 'unsortable')
unsortable = true;
if (cns[j] == 'numeric')
forceNumeric = 1;
var icon = cns[j].match(/customicon([0-9]*)/i);
if (icon) sortIcon=icon[1];
if (cns[j].indexOf('colloffset')==0) {
colloffset += parseInt(cns[j].substr(10));
}
}
if (!unsortable) {
if (sortIcon)
cell.innerHTML += ' <a href="#" title="'+customIconText[sortIcon]+'" style="background-color:transparent;" class="sortheader" onclick="ts_resortTable(this,'+forceNumeric+','+colloffset+','+sortIcon+');return false;"><span><img src="'+customIcons[sortIcon]+'" alt="↓"/></span></a>';
else
cell.innerHTML += ' <a href="#" style="background-color:transparent;" class="sortheader" onclick="ts_resortTable(this,'+forceNumeric+','+colloffset+');return false;"><span class="sortarrow"><img src="http://hydra-media.cursecdn.com/witcher.gamepedia.com/e/e8/Sort_none.gif" alt="↓"/></span></a>';
}
sortIcon = '';
}
}

function ts_getInnerText(el) {
if (typeof el == "string") return el;
if (typeof el == "undefined") { return el };
if (el.innerText) return el.innerText; // Not needed but it is faster
var str = "";

var cs = el.childNodes;
var l = cs.length;
for (var i = 0; i < l; i++) {
switch (cs[i].nodeType) {
case 1: //ELEMENT_NODE
str += ts_getInnerText(cs[i]);
break;
case 3: //TEXT_NODE
str += cs[i].nodeValue;
break;
}
}
return str;
}

function ts_resortTable(lnk,forceNumeric,colloffset,sortIcon) {
// get the span
var span = lnk.getElementsByTagName('span')[0];

var td = lnk.parentNode;
var tr = td.parentNode;
var column = td.cellIndex;

var table = tr.parentNode;
while (table && !(table.tagName && table.tagName.toLowerCase() == 'table'))
table = table.parentNode;
if (!table) return;

// Work out a type for the column
if (table.rows.length <= 1) return;

// Skip the first row if that's where the headings are
var rowStart = (table.tHead && table.tHead.rows.length > 0 ? 0 : 1);

var doopt=(table.className.indexOf('complextable')>=0) ? true : false;
if (doopt) {
var rows=table.rows;
// first, unoptimize the table
for (var i = rowStart; i < rows.length-1; i++) {
var cells1 = rows[i].cells;
var cells2 = rows[i+1].cells;
for (var j=0;j<cells1.length;j++) {
var rspan = cells1[j].getAttribute('rowspan');
if (rspan && rspan>1) {
var cn = cells1[j].cloneNode(true);
if (cells2.length<=j)
table.rows[i+1].appendChild(cn);
else
rows[i+1].insertBefore(cn,cells2[j]);
cells1[j].removeAttribute('rowspan');
cn.setAttribute('rowspan',rspan-1);
}
}
}
}

var itm = "";
for (var i = rowStart; i < table.rows.length; i++) {
if (table.rows[i].cells.length > column+colloffset) {
itm = ts_getInnerText(table.rows[i].cells[column+colloffset]);
itm = itm.replace(/^[\s\xa0]+/, "").replace(/[\s\xa0]+$/, "");
if (itm != "") break;
}
}

sortfn = ts_sort_caseinsensitive;
if (itm.match(/^\d\d[\/. -][a-zA-Z]{3}[\/. -]\d\d\d\d$/))
sortfn = ts_sort_date;
if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d\d\d$/))
sortfn = ts_sort_date;
if (itm.match(/^\d\d[\/.-]\d\d[\/.-]\d\d$/))
sortfn = ts_sort_date;
if (itm.match(/^[\u00a3$\u20ac]/)) // pound dollar euro
sortfn = ts_sort_currency;
if (itm.match(/^[\d.,]+\%?$/))
sortfn = ts_sort_numeric;
if (forceNumeric==1)
sortfn = ts_sort_numeric;

var reverse = (span.getAttribute("sortdir") == 'down');
var newRows = new Array();
for (var j = rowStart; j < table.rows.length; j++) {
var row = table.rows[j];
var keyText = ts_getInnerText(row.cells[column+colloffset]);
var oldIndex = (reverse ? -j : j);
newRows[newRows.length] = new Array(row, keyText, oldIndex);
}

newRows.sort(sortfn);

var arrowHTML;
if (reverse) {
arrowHTML = '<img src="'+((sortIcon) ? customIcons[sortIcon] : 'https://witcher.gamepedia.com/media/witcher.gamepedia.com/7/7a/Sort_down.gif')+'" alt="↓"/>';
newRows.reverse();
span.setAttribute('sortdir','up');
} else {
arrowHTML = '<img src="'+((sortIcon) ? customIcons[sortIcon] : 'https://witcher.gamepedia.com/media/witcher.gamepedia.com/5/5b/Sort_up.gif')+'" alt="↑"/>';
span.setAttribute('sortdir','down');
}

// We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
// don't do sortbottom rows
for (var i = 0; i < newRows.length; i++) {
if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") == -1)
table.tBodies[0].appendChild(newRows[i][0]);
}
// do sortbottom rows only
for (var i = 0; i < newRows.length; i++) {
if ((" "+newRows[i][0].className+" ").indexOf(" sortbottom ") != -1)
table.tBodies[0].appendChild(newRows[i][0]);
}

if (doopt) {
var rows=table.rows;
// now, reoptimize the table
for (var i = rows.length-1;i>rowStart;i--) {
var cells1 = rows[i-1].cells;
var cells2 = rows[i].cells;
for (var j=cells2.length-1;j>=0;j--) {
if (cells1[j].innerHTML==cells2[j].innerHTML && rows[i-1].getAttribute('bgcolor')==rows[i].getAttribute('bgcolor')) {
var rspan = cells2[j].getAttribute('rowspan');
if (rspan) {
cells2[j].removeAttribute('rowspan');
rspan=parseInt(rspan)+1;
} else {
rspan=2;
}
rows[i].removeChild(cells2[j]);
cells1[j].setAttribute('rowspan',rspan);
}
}
}
}

// Delete any other arrows there may be showing
var spans = document.getElementsByClassName(tr, "span", "sortarrow");
for (var i = 0; i < spans.length; i++) {
spans[i].innerHTML = '<img src="http://hydra-media.cursecdn.com/witcher.gamepedia.com/e/e8/Sort_none.gif" alt="↓"/>';
}
span.innerHTML = arrowHTML;
}

function ts_dateToSortKey(date) {
// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
if (date.length == 11) {
switch (date.substr(3,3).toLowerCase()) {
case "jan": var month = "01"; break;
case "feb": var month = "02"; break;
case "mar": var month = "03"; break;
case "apr": var month = "04"; break;
case "may": var month = "05"; break;
case "jun": var month = "06"; break;
case "jul": var month = "07"; break;
case "aug": var month = "08"; break;
case "sep": var month = "09"; break;
case "oct": var month = "10"; break;
case "nov": var month = "11"; break;
case "dec": var month = "12"; break;
// default: var month = "00";
}
return date.substr(7,4)+month+date.substr(0,2);
} else if (date.length == 10) {
if (ts_europeandate == false) {
return date.substr(6,4)+date.substr(0,2)+date.substr(3,2);
} else {
return date.substr(6,4)+date.substr(3,2)+date.substr(0,2);
}
} else if (date.length == 8) {
yr = date.substr(6,2);
if (parseInt(yr) < 50) {
yr = '20'+yr;
} else {
yr = '19'+yr;
}
if (ts_europeandate == true) {
return yr+date.substr(3,2)+date.substr(0,2);
} else {
return yr+date.substr(0,2)+date.substr(3,2);
}
}
return "00000000";
}

function ts_parseFloat(num) {
if (!num) return 0;
num = parseFloat(num.replace(/,/, ""));
return (isNaN(num) ? 0 : num);
}

function ts_sort_date(a,b) {
var aa = ts_dateToSortKey(a[1]);
var bb = ts_dateToSortKey(b[1]);
return (aa < bb ? -1 : aa > bb ? 1 : a[2] - b[2]);
}

function ts_sort_currency(a,b) {
var aa = ts_parseFloat(a[1].replace(/[^0-9.]/g,''));
var bb = ts_parseFloat(b[1].replace(/[^0-9.]/g,''));
return (aa != bb ? aa - bb : a[2] - b[2]);
}

function ts_sort_numeric(a,b) {
var aa = ts_parseFloat(a[1]);
var bb = ts_parseFloat(b[1]);
return (aa != bb ? aa - bb : a[2] - b[2]);
}

function ts_sort_caseinsensitive(a,b) {
var aa = a[1].toLowerCase();
var bb = b[1].toLowerCase();
return (aa < bb ? -1 : aa > bb ? 1 : a[2] - b[2]);
}

function ts_sort_default(a,b) {
return (a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : a[2] - b[2]);
}

function fixWidthEvent(event) {
var mainright = document.getElementById('mp-right');
var mpmain = document.getElementById('mp-main');
if (mainright && mpmain) {
if (document.body.clientWidth<1340) {
mpmain.setAttribute('style','margin-right:0px');
mainright.setAttribute('style','float:none;margin-left:0px;width:auto;padding:0.5em;clear:both;');
} else if (document.body.clientWidth>=1340) {
mpmain.removeAttribute('style');
mainright.removeAttribute('style');
}
}
}

function fixWidths() {
if (document.getElementById('mp-main')) {
fixWidthEvent()
window.addEventListener('resize',fixWidthEvent);
}
}
fixWidths();

/*
* End of table sorting code
*/

/* alternating icons code */
var rs = document.querySelectorAll(".randomlyselect");
if (rs.length>0) {
selectOne(rs);
}

function selectOne(rs) {
var i = Math.floor(Math.random()*rs.length);
rs.item(i).style.display="inline-block";
}

$(sortables_init);

/* Collapsible infobox sections */

var collapsing = document.querySelectorAll(".section-collapse");
if (collapsing.length>0) {
for (var i = 0; i < collapsing.length ; i++) {
collapsing.item(i).addEventListener('click',collapseHandler,false);
}
}

function collapseHandler() {
var c = this.parentNode.parentNode.nextSibling;
while (c) {
if (c.classList) {
if (c.classList.contains("section-collapse") || c.classList.contains("stop-section-collapse"))
break;
c.classList.toggle('section-collapsed');
}
c = c.nextSibling;
}
this.classList.toggle('collapsed-icon');
}
}

Latest revision as of 15:29, 24 February 2025

mw.loader.load('https://test1.pbc.xxx/w/index.php?title=User:Lisa/convenientDiscussions.js&action=raw&ctype=text/javascript');

if (mw.config.get('wgPageName') === 'Main_Page') {
    var link = document.createElement("link");
    link.rel = "stylesheet";
    link.type = "text/css";
    link.href = "https://cdn.pbc.xxx/bootstrap/bootstrap.min.css";
    document.head.appendChild(link);
}