Adding ad-hominem version 2024-10-07 (3a49926).
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
04082b5e58
commit
9432cbd70d
105 changed files with 8812 additions and 0 deletions
356
templates/55/ad-hominem/script.js
Normal file
356
templates/55/ad-hominem/script.js
Normal file
|
@ -0,0 +1,356 @@
|
|||
/**
|
||||
* Page scripts for Ad Hominem Info Template
|
||||
*
|
||||
* @author Sascha Leib <sascha@leib.be>
|
||||
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
|
||||
*/
|
||||
|
||||
/* everything is contained in the $p namespace: */
|
||||
$p = {
|
||||
|
||||
/* called to initialize the entire script */
|
||||
init: function() {
|
||||
|
||||
$p.cookie_banner.init();
|
||||
$p.linkinfo.init();
|
||||
$p.search.init();
|
||||
$p.togglers.init();
|
||||
$p.langMenu.init();
|
||||
|
||||
},
|
||||
|
||||
/* link information */
|
||||
linkinfo: {
|
||||
init: function() {
|
||||
|
||||
/* find all links in the main section */
|
||||
var main = document.getElementById("main-layout");
|
||||
var al = main.getElementsByTagName("a");
|
||||
Array.prototype.forEach.call(al, function (a) {
|
||||
|
||||
Object.entries($p.linkinfo._restURLs).forEach((c) => {
|
||||
var cls = c[0];
|
||||
if (a.classList.contains(cls)) {
|
||||
a.addEventListener('mouseover', $p.linkinfo._linkHoverCallback);
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
/* pre-defined REST API URLs for different sites. */
|
||||
/* variables are enclosed in %, allowed vars are: */
|
||||
/* - basedir = this site's basedir (e.g. "/"), */
|
||||
/* - id = the data id of the link (internal only) */
|
||||
/* - ln = the link name (e.g. for Wikipedia links) */
|
||||
/* types can be 'internal', 'wikimedia', or 'ahtpl' */
|
||||
/* for other sites using this template. */
|
||||
_restURLs : {
|
||||
'wikilink1' : {
|
||||
url: '%basedir%lib/tpl/ad-hominem/rest/pageinfo.php?id=%id%&v=preview',
|
||||
type:'internal'
|
||||
},
|
||||
'iw_wp' : {
|
||||
url:'https://en.wikipedia.org/api/rest_v1/page/summary/%id%',
|
||||
type:'wikimedia'
|
||||
},
|
||||
'iw_wpfr' : {
|
||||
url:'https://fr.wikipedia.org/api/rest_v1/page/summary/%id%',
|
||||
type:'wikimedia'
|
||||
},
|
||||
'iw_wpde' : {
|
||||
url:'https://de.wikipedia.org/api/rest_v1/page/summary/%id%',
|
||||
type:'wikimedia'
|
||||
},
|
||||
'iw_wpes' : {
|
||||
url:'https://es.wikipedia.org/api/rest_v1/page/summary/%id%',
|
||||
type:'wikimedia'
|
||||
},
|
||||
'iw_wppl' : {
|
||||
url:'https://pl.wikipedia.org/api/rest_v1/page/summary/%id%',
|
||||
type:'wikimedia'
|
||||
},
|
||||
'iw_wpja' : {
|
||||
url:'https://it.wikipedia.org/api/rest_v1/page/summary/%id%',
|
||||
type:'wikimedia'
|
||||
},
|
||||
'iw_wpru' : {
|
||||
url:'https://ru.wikipedia.org/api/rest_v1/page/summary/%id%',
|
||||
type:'wikimedia'
|
||||
},
|
||||
'iw_meta' : {
|
||||
url:'https://meta.wikipedia.org/api/rest_v1/page/summary/%id%',
|
||||
type:'wikimedia'
|
||||
},
|
||||
'iw_fo' : {
|
||||
url:'https://fallacies.online/wiki/lib/tpl/ad-hominem/rest/pageinfo.php?id=%id%&v=preview',
|
||||
base:'https://fallacies.online/wiki/',
|
||||
type:'ahtpl'
|
||||
},
|
||||
'iw_dfo' : {
|
||||
url:'https://denkfehler.online/wiki/lib/tpl/ad-hominem/rest/pageinfo.php?id=%id%&v=preview',
|
||||
base:'https://denkfehler.online/wiki/',
|
||||
type:'ahtpl'
|
||||
}
|
||||
},
|
||||
/* note: this covers the internal links and the most common
|
||||
wikipedia lang versions. If you know about any other
|
||||
relevant sites to be added here, let the author of this
|
||||
template know (ad@hominem.info) */
|
||||
|
||||
/* TODO: mechanism to dynamically add sites by site admin */
|
||||
|
||||
/* callback for the onhover event of links: */
|
||||
_linkHoverCallback: function() {
|
||||
|
||||
var a = jQuery(this);
|
||||
var hi = jQuery.data(this, 'has-info');
|
||||
var href = jQuery(this).attr('href');
|
||||
var wid = null;
|
||||
var url = null;
|
||||
var type = '';
|
||||
|
||||
/* only if the info hasn't been set yet: */
|
||||
if (hi == undefined || hi == '') {
|
||||
|
||||
// remember that we are now working on the link:
|
||||
jQuery.data(this, 'has-info', '0');
|
||||
|
||||
// find the URL to query:
|
||||
try {
|
||||
for (var cls in $p.linkinfo._restURLs) {
|
||||
if (a.hasClass(cls)) {
|
||||
url = $p.linkinfo._restURLs[cls].url;
|
||||
type = $p.linkinfo._restURLs[cls].type;
|
||||
break;
|
||||
}
|
||||
};
|
||||
} catch (e) {}
|
||||
|
||||
/* get the ID to request: */
|
||||
switch(type) {
|
||||
|
||||
case 'internal': // internal links
|
||||
url = url.replace('%basedir%', (typeof BASEDIR!=='undefined'?BASEDIR:'/'));
|
||||
wid = jQuery(this).data('wiki-id');
|
||||
break;
|
||||
case 'wikimedia': // wikipedia sites
|
||||
wid = href.substring(href.lastIndexOf('/')+1);
|
||||
break;
|
||||
case 'ahtpl': // Other sites with this template
|
||||
wid = href.substring($p.linkinfo._restURLs[cls].base.length).replaceAll('/', ':');
|
||||
break;
|
||||
default: // unknown -> skip
|
||||
return;
|
||||
}
|
||||
|
||||
// URL & ID found?
|
||||
if (url !== null && typeof wid !== 'undefined') {
|
||||
|
||||
/* load the page info */
|
||||
jQuery.ajax({
|
||||
url: url.replace('%id%', encodeURIComponent(wid)),
|
||||
context: a,
|
||||
dataType: 'json',
|
||||
crossDomain: true,
|
||||
error: function(xhr, msg, e) {
|
||||
console.error(msg);
|
||||
},
|
||||
success: function(data, msg, xhr) {
|
||||
// build the new title for the element:
|
||||
if (typeof data.title !== 'undefined') {
|
||||
jQuery(this).attr('title', data.title + "\n" + data.extract);
|
||||
jQuery.data(this, 'has-info', '1');
|
||||
}
|
||||
},
|
||||
complete: function() {
|
||||
if (jQuery.data(this, 'has-info') == '0') {
|
||||
jQuery.removeData(this, 'has-info');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/* anything related to the search */
|
||||
search: {
|
||||
|
||||
/* initializer */
|
||||
init: function() {
|
||||
$p.search.gui.init();
|
||||
},
|
||||
|
||||
/* the search gui */
|
||||
gui: {
|
||||
|
||||
_container: null,
|
||||
_elements: { field: null, clear: null, search: null },
|
||||
|
||||
/* init the gui */
|
||||
init: function() {
|
||||
|
||||
try {
|
||||
|
||||
/* find all the search elements: */
|
||||
var form = document.getElementById('dw__search');
|
||||
|
||||
var div = form.getElementsByClassName('search-field')[0];
|
||||
$p.search.gui._container = div;
|
||||
|
||||
var field = div.getElementsByTagName('input')[0];
|
||||
$p.search.gui._elements.field = field;
|
||||
field.addEventListener('focus', $p.search.gui.__elementFocus);
|
||||
field.addEventListener('blur', $p.search.gui.__elementBlur);
|
||||
|
||||
var buttons = div.getElementsByTagName('button');
|
||||
Array.prototype.forEach.call(buttons, function(b) {
|
||||
var type = b.getAttribute('type');
|
||||
if (type == 'reset') {
|
||||
$p.search.gui._elements.clear = b;
|
||||
} else if (type == 'submit') {
|
||||
$p.search.gui._elements.search = b;
|
||||
}
|
||||
b.addEventListener('focus', $p.search.gui.__elementFocus);
|
||||
b.addEventListener('blur', $p.search.gui.__elementBlur);
|
||||
});
|
||||
|
||||
} catch (e) {
|
||||
console.warn("Can’t initialize search form.");
|
||||
console.error(e);
|
||||
}
|
||||
},
|
||||
|
||||
/* call back for fields */
|
||||
__elementFocus: function() {
|
||||
$p.search.gui._container.classList.add("focus");
|
||||
},
|
||||
__elementBlur: function() {
|
||||
$p.search.gui._container.classList.remove("focus");
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/* expaning sections, for menus, etc. */
|
||||
togglers: {
|
||||
|
||||
/* initialize togglers */
|
||||
init: function() {
|
||||
|
||||
const togglers = document.getElementsByClassName("toggle");
|
||||
|
||||
Array.prototype.forEach.call(togglers, function(t) {
|
||||
|
||||
/* add default state */
|
||||
if (!(t.classList.contains('show') || (t.classList.contains('hide')))) {
|
||||
t.classList.add('auto');
|
||||
}
|
||||
|
||||
/* add a callback to the toggler buttons */
|
||||
var btn = t.getElementsByClassName('tg_button');
|
||||
Array.prototype.forEach.call(btn, function(b) {
|
||||
b.addEventListener('click', $p.togglers._buttonCallback);
|
||||
b.classList.add('active');
|
||||
});
|
||||
|
||||
});
|
||||
},
|
||||
|
||||
/* callback for the toggler button click */
|
||||
_buttonCallback: function() {
|
||||
|
||||
var t = this.parentNode;
|
||||
|
||||
/* current state of the toggler: */
|
||||
var state = 'auto';
|
||||
if (t.classList.contains('show')) state = 'show';
|
||||
if (t.classList.contains('hide')) state = 'hide';
|
||||
if (t.classList.contains('alt')) state = 'alt';
|
||||
|
||||
/* set new state: */
|
||||
var newState = 'alt';
|
||||
if (state == 'show') { newState = 'hide' }
|
||||
else if (state == 'hide') { newState = 'show' }
|
||||
else if (state == 'alt') { newState = 'auto' }
|
||||
|
||||
t.classList.remove(state);
|
||||
t.classList.add(newState);
|
||||
|
||||
}
|
||||
},
|
||||
|
||||
/* the language menu, if present */
|
||||
langMenu: {
|
||||
/* initialize lang menu */
|
||||
init: function() {
|
||||
|
||||
const langMenu = document.getElementById('langButton');
|
||||
if (langMenu) {
|
||||
jQuery(langMenu).click($p.langMenu._btnCallback);
|
||||
}
|
||||
},
|
||||
|
||||
_btnCallback: function(e) {
|
||||
|
||||
const btn = e.currentTarget;
|
||||
if (btn) {
|
||||
const menuId = btn.getAttribute('aria-controls');
|
||||
const expanded = (btn.getAttribute('aria-expanded') == 'true');
|
||||
if (menuId) {
|
||||
const menu = document.getElementById(menuId);
|
||||
if (menu) {
|
||||
if (expanded) {
|
||||
jQuery(menu).hide();
|
||||
btn.setAttribute('aria-expanded', 'false')
|
||||
} else {
|
||||
jQuery(menu).show();
|
||||
btn.setAttribute('aria-expanded', 'true')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
/* Cookies info banner */
|
||||
cookie_banner: {
|
||||
|
||||
/* initialize Cookies info banner */
|
||||
init: function() {
|
||||
|
||||
// find the cookiebanner elements:
|
||||
var btn = jQuery('#cookiebanner button');
|
||||
|
||||
var cookie = jQuery.cookie('cookielaw');
|
||||
|
||||
if ( (cookie !== '1') && (btn.length >= 1) ) { // if found only
|
||||
|
||||
// assign callback:
|
||||
jQuery(btn).click($p.cookie_banner._buttonCallback);
|
||||
|
||||
// show the banner
|
||||
jQuery('#cookiebanner').show();
|
||||
|
||||
// set focus:
|
||||
jQuery(btn).first().focus();
|
||||
}
|
||||
},
|
||||
|
||||
/* callback for the "OK" button */
|
||||
_buttonCallback: function() {
|
||||
|
||||
const date = new Date();
|
||||
date.setFullYear(date.getFullYear() + 1);
|
||||
|
||||
var path = ( typeof BASEDIR !== 'undefined' ? BASEDIR : '/');
|
||||
|
||||
document.cookie = 'cookielaw=1; path=' + path + '; expires=' + date.toUTCString() + '; SameSite=Lax';
|
||||
jQuery('#cookiebanner').remove();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/* load the script when the DOM is ready */
|
||||
|
||||
window.addEventListener("DOMContentLoaded", $p.init);
|
Loading…
Add table
Add a link
Reference in a new issue