Difference between revisions of "MediaWiki:Common.js"
m (+Backlog: CSS selector hooks for ToC widget; -DOM nesting bug; +source comments) |
(+Backlog: id transmogrification and sanitization in advanced ToC widget options; +CSS class hooks for option groups) |
||
Line 119: | Line 119: | ||
var isbl = window.location.href.match(/\w+\/wiki\/Free_Software_Directory:Backlog_\w+/i) !== null; | var isbl = window.location.href.match(/\w+\/wiki\/Free_Software_Directory:Backlog_\w+/i) !== null; | ||
return isbl; | return isbl; | ||
+ | } | ||
+ | function IDToTitle(istr, endchr=';') { | ||
+ | var tstr = istr[0].toUpperCase() + istr.slice(1); | ||
+ | tstr = tstr.replace(/[-><%]/g, ' '); | ||
+ | tstr = tstr.replace(/[\u{0080}-\u{FFFF}]/gu, '?'); | ||
+ | tstr = tstr.trim(); | ||
+ | if(!tstr.endsWith(';')) { | ||
+ | if(tstr.slice(-1).match(/[:.\n\r]/)) { | ||
+ | tstr = tstr.slice(0, -1) + endchr; | ||
+ | } else { | ||
+ | tstr = tstr + endchr; | ||
+ | } | ||
+ | } | ||
+ | return tstr; | ||
} | } | ||
function addBEl(i, el) { | function addBEl(i, el) { | ||
Line 126: | Line 140: | ||
iopt.text(elem.html()); | iopt.text(elem.html()); | ||
else if(otype == 2) // Active Backlog tasks | else if(otype == 2) // Active Backlog tasks | ||
− | iopt.text(elem.attr("id")); | + | iopt.text(IDToTitle(elem.attr("id"))); |
iopt.data("iid", elem.attr("id")); | iopt.data("iid", elem.attr("id")); | ||
iopt.click(function(){location.hash=iopt.data("iid");}); | iopt.click(function(){location.hash=iopt.data("iid");}); | ||
Line 138: | Line 152: | ||
var otype = null, curog = null; // obj type, c. optgroup | var otype = null, curog = null; // obj type, c. optgroup | ||
var cbox = $("<select id='atoc'>"); | var cbox = $("<select id='atoc'>"); | ||
− | |||
otype = 1; // Page headers | otype = 1; // Page headers | ||
− | curog = $('<optgroup label="Sections">'); | + | curog = $('<optgroup class="itocS" label="Sections">'); |
cbox.append(curog); | cbox.append(curog); | ||
$("#bodyContent .mw-headline").each(addBEl); | $("#bodyContent .mw-headline").each(addBEl); | ||
otype = 2; // Active Backlog tasks | otype = 2; // Active Backlog tasks | ||
− | curog = $('<optgroup label="Top Priority Tasks">'); | + | curog = $('<optgroup class="itocTPT" label="Top Priority Tasks">'); |
cbox.append(curog); | cbox.append(curog); | ||
$(".backlogIssue.topPriority").each(addBEl); | $(".backlogIssue.topPriority").each(addBEl); | ||
− | curog = $('<optgroup label="Tasks">'); | + | curog = $('<optgroup class="itocT" label="Tasks">'); |
cbox.append(curog); | cbox.append(curog); | ||
$(".backlogIssue:not(.topPriority)").each(addBEl); | $(".backlogIssue:not(.topPriority)").each(addBEl); |
Revision as of 08:52, 31 May 2020
// @license magnet:?xt=urn:btih:1f739d935676111cfff4b4693e3816e664797050&dn=gpl-3.0.txt GPL-v3-or-Later /* @licstart The following is the entire license notice for the JavaScript code in this page. Copyright (C) 2020 Free Software Foundation The JavaScript code in this page is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License (GNU GPL) as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. The code is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. As additional permission under GNU GPL version 3 section 7, you may distribute non-source (e.g., minimized or compacted) forms of that code without the copy of the GNU GPL normally required by section 4, provided you include this license notice and a URL through which recipients can access the Corresponding Source. @licend The above is the entire license notice for the JavaScript code in this page. */ /* Any JavaScript here will be loaded for all users on every page load. */ /* Active Backlog: fix. "Fix search results, so that template data doesn't get dumped..." */ function fixSrTmplBug() { function iskSearchCurPage() { return window.location.href.match(/\w+\/wiki\?search=\w+/i) !== null; } function detectSrTmplBug(srcontent) { var containsMeta = srcontent.match(/.*\|.*=.*/i); var containsRedi = srcontent.match(/#REDIRECT .*/i); var containsTmpl = srcontent.match(/.*(\{\{|\}\}).*/i); if(containsMeta !== null) return 1; else if(containsRedi !== null) return 2; else if(containsTmpl !== null) return 3; else return 0; } function correctSrTmplBug(i, el) { el = $(el); var tres = detectSrTmplBug(el.html()); switch(tres) { case 0: break; case 1: case 3: el.html('(structured)'); break; case 2: el.html('(alias)'); break; default: el.hide(); } el = null; tres = null; return; } if(iskSearchCurPage() === false) return false; else { var sresults = $('.searchresult'); if(sresults.length > 0) { sresults.each(correctSrTmplBug); sresults = null; } } return true; }; /* Active Backlog: fix. ""Preview" button does not work for Template:Entry. It shows the unedited version" */ function fixEntryPrevBug() { function iskEntryRawEditCurPage() { var ftmpl = $(".templatesUsed"); if(ftmpl.length <= 0 || ftmpl.html().indexOf("Template:Entry") == -1) return false; } function hidePreviewButton() {$("#wpPreviewWidget").remove();} function boldEditFormTab() {$("#ca-formedit a").css("font-weight", "bold");} if(iskEntryRawEditCurPage() === false) return false; else {hidePreviewButton();boldEditFormTab();} return true; }; /* Active Backlog: fix. "Countdown timer/JavaScript enhancement" */ var dyntimersupd = null; function dynTimers() { function updateTimers(timers, loc, tz) { var ts = new Date(); var opts = { timeZone:tz, weekday: 'long', hour: '2-digit', minute: '2-digit', second: '2-digit' }; var CESTopts = { timeZone:"Europe/Rome", weekday: 'long', hour: '2-digit', minute: '2-digit', second: '2-digit' }; var cdate = ts.toLocaleTimeString(locales=loc, opts); var UTCdate = ts.toUTCString(); var CESTdate = ts.toLocaleTimeString(locales=undefined, CESTopts); EDTtimersBlnk = !EDTtimersBlnk; if(EDTtimersBlnk == false) cdate = cdate.replace(/[:\.]/gi,' '); UTCdate = UTCdate.replace('GMT', 'UTC'); timers.html(cdate + ' EDT'); timers.attr('title', UTCdate + ' | ' + CESTdate + ' CEST'); cdate = null; UTCdate = null; ts = null; } var EDTtimers = $('.currentEDT'); var EDTtimersBlnk = true; if(EDTtimers.length >= 0) { window.setInterval(function(){updateTimers(EDTtimers, "en-US", "America/New_York");}, 1000); } else { EDTtimers = null; EDTtimersBlnk = null; } } function advBacklog() { function isBacklogPage() { var isbl = window.location.href.match(/\w+\/wiki\/Free_Software_Directory:Backlog_\w+/i) !== null; return isbl; } function IDToTitle(istr, endchr=';') { var tstr = istr[0].toUpperCase() + istr.slice(1); tstr = tstr.replace(/[-><%]/g, ' '); tstr = tstr.replace(/[\u{0080}-\u{FFFF}]/gu, '?'); tstr = tstr.trim(); if(!tstr.endsWith(';')) { if(tstr.slice(-1).match(/[:.\n\r]/)) { tstr = tstr.slice(0, -1) + endchr; } else { tstr = tstr + endchr; } } return tstr; } function addBEl(i, el) { var iopt = $("<option class='atocopt'>"); var elem = $(el); if(otype == 1) // Page headers iopt.text(elem.html()); else if(otype == 2) // Active Backlog tasks iopt.text(IDToTitle(elem.attr("id"))); iopt.data("iid", elem.attr("id")); iopt.click(function(){location.hash=iopt.data("iid");}); curog.append(iopt); } // Interactive ToC var toc = $("#toc"); if(!isBacklogPage() || toc === 'undefined') return 1; var otype = null, curog = null; // obj type, c. optgroup var cbox = $("<select id='atoc'>"); otype = 1; // Page headers curog = $('<optgroup class="itocS" label="Sections">'); cbox.append(curog); $("#bodyContent .mw-headline").each(addBEl); otype = 2; // Active Backlog tasks curog = $('<optgroup class="itocTPT" label="Top Priority Tasks">'); cbox.append(curog); $(".backlogIssue.topPriority").each(addBEl); curog = $('<optgroup class="itocT" label="Tasks">'); cbox.append(curog); $(".backlogIssue:not(.topPriority)").each(addBEl); toc.replaceWith(cbox); } $(document).ready(function(){fixSrTmplBug();fixEntryPrevBug();dynTimers();advBacklog();}); // @license-end
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the page “GNU Free Documentation License”.
The copyright and license notices on this page only apply to the text on this page. Any software or copyright-licenses or other similar notices described in this text has its own copyright notice and license, which can usually be found in the distribution or license text itself.