MediaWiki:Common.js: Difference between revisions
Appearance
Increased tag cloud text size by 300% and changed to Wikipedia-style serif font (Linux Libertine, Georgia) |
Increased text size by 100% more (now 4x original) for better accessibility for elderly users |
||
| Line 46: | Line 46: | ||
/** | /** | ||
* 3D Rotating Tag Cloud - Large Text | * 3D Rotating Tag Cloud - Extra Large Text for Accessibility | ||
*/ | */ | ||
(function() { | (function() { | ||
| Line 108: | Line 108: | ||
console.log('[TagCloud] Canvas size:', width, 'x', height); | console.log('[TagCloud] Canvas size:', width, 'x', height); | ||
// Tags configuration - | // Tags configuration - 100% larger than previous (now 4x original size for elderly users) | ||
var tags = [ | var tags = [ | ||
{ text: 'Satya Nadella', url: '/wiki/Satya_Nadella', size: | { text: 'Satya Nadella', url: '/wiki/Satya_Nadella', size: 144 }, | ||
{ text: 'Tim Cook', url: '/wiki/Tim_Cook', size: | { text: 'Tim Cook', url: '/wiki/Tim_Cook', size: 132 }, | ||
{ text: 'Elon Musk', url: '/wiki/Elon_Musk', size: | { text: 'Elon Musk', url: '/wiki/Elon_Musk', size: 156 }, | ||
{ text: 'Mark Zuckerberg', url: '/wiki/Mark_Zuckerberg', size: | { text: 'Mark Zuckerberg', url: '/wiki/Mark_Zuckerberg', size: 120 }, | ||
{ text: 'Sundar Pichai', url: '/wiki/Sundar_Pichai', size: | { text: 'Sundar Pichai', url: '/wiki/Sundar_Pichai', size: 120 }, | ||
{ text: 'Andy Jassy', url: '/wiki/Andy_Jassy', size: | { text: 'Andy Jassy', url: '/wiki/Andy_Jassy', size: 108 }, | ||
{ text: 'Jensen Huang', url: '/wiki/Jensen_Huang', size: | { text: 'Jensen Huang', url: '/wiki/Jensen_Huang', size: 132 }, | ||
{ text: 'Lisa Su', url: '/wiki/Lisa_Su', size: | { text: 'Lisa Su', url: '/wiki/Lisa_Su', size: 108 }, | ||
{ text: 'Mary Barra', url: '/wiki/Mary_Barra', size: | { text: 'Mary Barra', url: '/wiki/Mary_Barra', size: 108 }, | ||
{ text: 'Jamie Dimon', url: '/wiki/Jamie_Dimon', size: | { text: 'Jamie Dimon', url: '/wiki/Jamie_Dimon', size: 108 }, | ||
{ text: 'Microsoft', url: '/wiki/Microsoft', size: | { text: 'Microsoft', url: '/wiki/Microsoft', size: 96 }, | ||
{ text: 'Apple', url: '/wiki/Apple_Inc.', size: | { text: 'Apple', url: '/wiki/Apple_Inc.', size: 96 }, | ||
{ text: 'Amazon', url: '/wiki/Amazon', size: | { text: 'Amazon', url: '/wiki/Amazon', size: 96 }, | ||
{ text: 'Google', url: '/wiki/Google', size: | { text: 'Google', url: '/wiki/Google', size: 96 }, | ||
{ text: 'Tesla', url: '/wiki/Tesla', size: | { text: 'Tesla', url: '/wiki/Tesla', size: 96 }, | ||
{ text: 'Leadership', url: '/wiki/Category:Chief_executive_officers', size: | { text: 'Leadership', url: '/wiki/Category:Chief_executive_officers', size: 84 }, | ||
{ text: 'Innovation', url: '/wiki/Category:Business_strategies', size: | { text: 'Innovation', url: '/wiki/Category:Business_strategies', size: 84 }, | ||
{ text: 'Technology', url: '/wiki/Category:Companies', size: | { text: 'Technology', url: '/wiki/Category:Companies', size: 84 }, | ||
{ text: 'Strategy', url: '/wiki/Category:Business_strategies', size: | { text: 'Strategy', url: '/wiki/Category:Business_strategies', size: 84 }, | ||
{ text: 'Cloud Computing', url: '/wiki/Category:Industry_analysis', size: | { text: 'Cloud Computing', url: '/wiki/Category:Industry_analysis', size: 84 } | ||
]; | ]; | ||
| Line 307: | Line 307: | ||
setInterval(update, 30); | setInterval(update, 30); | ||
console.log('[TagCloud] Successfully initialized with large text! Animation started.'); | console.log('[TagCloud] Successfully initialized with extra large text! Animation started.'); | ||
} | } | ||
Revision as of 11:06, 20 October 2025
/**
* Add statistics banner to account creation page
*/
(function() {
// Only run on Special:CreateAccount page
if (typeof mw !== 'undefined' && mw.config && mw.config.get('wgCanonicalSpecialPageName') !== 'CreateAccount') {
return;
}
if (typeof mw !== 'undefined' && mw.Api && typeof $ !== 'undefined') {
// Get site statistics via API
var api = new mw.Api();
api.get({
action: 'query',
meta: 'siteinfo',
siprop: 'statistics',
format: 'json'
}).done(function(data) {
var stats = data.query.statistics;
// Create statistics banner
var banner = $('<div>').addClass('createaccount-statistics').html(
'<div class="createaccount-statistics-title">CEO.wiki is made by people like you.</div>' +
'<div class="createaccount-statistics-grid">' +
'<div class="createaccount-stat-item">' +
'<div class="createaccount-stat-number">' + stats.edits.toLocaleString() + '</div>' +
'<div class="createaccount-stat-label">Edits</div>' +
'</div>' +
'<div class="createaccount-stat-item">' +
'<div class="createaccount-stat-number">' + stats.pages.toLocaleString() + '</div>' +
'<div class="createaccount-stat-label">Pages</div>' +
'</div>' +
'<div class="createaccount-stat-item">' +
'<div class="createaccount-stat-number">' + stats.activeusers.toLocaleString() + '</div>' +
'<div class="createaccount-stat-label">Recent Contributors</div>' +
'</div>' +
'</div>'
);
// Insert banner before the form
$('#userloginForm').before(banner);
});
}
})();
/**
* 3D Rotating Tag Cloud - Extra Large Text for Accessibility
*/
(function() {
'use strict';
console.log('[TagCloud] Script loaded');
// Check if we're on Main Page
if (typeof mw !== 'undefined' && mw.config) {
var pageName = mw.config.get('wgPageName');
console.log('[TagCloud] Page name:', pageName);
if (pageName !== 'Main_Page') {
console.log('[TagCloud] Not Main Page, exiting');
return;
}
}
var attempts = 0;
var maxAttempts = 50;
function tryInitialize() {
attempts++;
// Look for the placeholder div
var placeholder = document.getElementById('ceocloud-placeholder');
if (!placeholder) {
if (attempts < maxAttempts) {
console.log('[TagCloud] Placeholder not found yet, retrying... (attempt ' + attempts + '/' + maxAttempts + ')');
setTimeout(tryInitialize, 100);
} else {
console.error('[TagCloud] Placeholder div not found after ' + maxAttempts + ' attempts. Giving up.');
}
return;
}
console.log('[TagCloud] Placeholder found after ' + attempts + ' attempts! Creating canvas...');
// Create canvas element dynamically
var canvas = document.createElement('canvas');
canvas.id = 'tagcanvas';
canvas.width = 800;
canvas.height = 400;
canvas.style.maxWidth = '100%';
canvas.style.height = 'auto';
// Clear placeholder and add canvas
placeholder.innerHTML = '';
placeholder.appendChild(canvas);
console.log('[TagCloud] Canvas created and added to DOM');
var ctx = canvas.getContext('2d');
if (!ctx) {
console.error('[TagCloud] Could not get 2D context');
return;
}
var width = canvas.width;
var height = canvas.height;
console.log('[TagCloud] Canvas size:', width, 'x', height);
// Tags configuration - 100% larger than previous (now 4x original size for elderly users)
var tags = [
{ text: 'Satya Nadella', url: '/wiki/Satya_Nadella', size: 144 },
{ text: 'Tim Cook', url: '/wiki/Tim_Cook', size: 132 },
{ text: 'Elon Musk', url: '/wiki/Elon_Musk', size: 156 },
{ text: 'Mark Zuckerberg', url: '/wiki/Mark_Zuckerberg', size: 120 },
{ text: 'Sundar Pichai', url: '/wiki/Sundar_Pichai', size: 120 },
{ text: 'Andy Jassy', url: '/wiki/Andy_Jassy', size: 108 },
{ text: 'Jensen Huang', url: '/wiki/Jensen_Huang', size: 132 },
{ text: 'Lisa Su', url: '/wiki/Lisa_Su', size: 108 },
{ text: 'Mary Barra', url: '/wiki/Mary_Barra', size: 108 },
{ text: 'Jamie Dimon', url: '/wiki/Jamie_Dimon', size: 108 },
{ text: 'Microsoft', url: '/wiki/Microsoft', size: 96 },
{ text: 'Apple', url: '/wiki/Apple_Inc.', size: 96 },
{ text: 'Amazon', url: '/wiki/Amazon', size: 96 },
{ text: 'Google', url: '/wiki/Google', size: 96 },
{ text: 'Tesla', url: '/wiki/Tesla', size: 96 },
{ text: 'Leadership', url: '/wiki/Category:Chief_executive_officers', size: 84 },
{ text: 'Innovation', url: '/wiki/Category:Business_strategies', size: 84 },
{ text: 'Technology', url: '/wiki/Category:Companies', size: 84 },
{ text: 'Strategy', url: '/wiki/Category:Business_strategies', size: 84 },
{ text: 'Cloud Computing', url: '/wiki/Category:Industry_analysis', size: 84 }
];
// Initialize 3D positions
var radius = 180;
var dtr = Math.PI / 180;
var mcList = [];
var lasta = 1;
var lastb = 1;
var tspeed = 0.5;
var size = 250;
var mouseX = 0;
var mouseY = 0;
var active = false;
// Build tag objects
for (var i = 0; i < tags.length; i++) {
var oTag = {};
oTag.offsetWidth = tags[i].size * 5;
oTag.offsetHeight = tags[i].size;
oTag.text = tags[i].text;
oTag.url = tags[i].url;
oTag.size = tags[i].size;
mcList.push(oTag);
}
var sa, ca, sb, cb, sc, cc;
function sineCosine(a, b, c) {
sa = Math.sin(a * dtr);
ca = Math.cos(a * dtr);
sb = Math.sin(b * dtr);
cb = Math.cos(b * dtr);
sc = Math.sin(c * dtr);
cc = Math.cos(c * dtr);
}
function positionAll() {
var phi = 0;
var theta = 0;
var max = mcList.length;
for (var i = 0; i < max; i++) {
phi = Math.acos(-1 + (2 * i + 1) / max);
theta = Math.sqrt(max * Math.PI) * phi;
mcList[i].cx = radius * Math.cos(theta) * Math.sin(phi);
mcList[i].cy = radius * Math.sin(theta) * Math.sin(phi);
mcList[i].cz = radius * Math.cos(phi);
}
}
function doPosition() {
ctx.clearRect(0, 0, width, height);
for (var i = 0; i < mcList.length; i++) {
var tag = mcList[i];
var x = tag.x + width / 2;
var y = tag.y + height / 2;
var alpha = Math.max(0.2, Math.min(1, tag.alpha));
var fontSize = Math.max(10, tag.size * tag.scale);
ctx.save();
// Use Wikipedia-style serif font (Linux Libertine, Georgia, Times)
ctx.font = fontSize + 'px "Linux Libertine", Georgia, "Times New Roman", serif';
ctx.fillStyle = 'rgba(255, 255, 255, ' + alpha + ')';
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.shadowColor = 'rgba(0, 0, 0, 0.5)';
ctx.shadowBlur = 4;
ctx.shadowOffsetX = 0;
ctx.shadowOffsetY = 2;
ctx.fillText(tag.text, x, y);
ctx.restore();
tag.cx = x;
tag.cy = y;
}
}
function depthSort() {
mcList.sort(function(a, b) {
return (b.cz - a.cz);
});
}
function update() {
var a, b;
if (active) {
a = (-Math.min(Math.max(-mouseY, -size), size) / radius) * tspeed;
b = (Math.min(Math.max(-mouseX, -size), size) / radius) * tspeed;
} else {
a = lasta * 0.98;
b = lastb * 0.98 + 0.01;
}
lasta = a;
lastb = b;
if (Math.abs(a) <= 0.01 && Math.abs(b) <= 0.01) {
return;
}
var c = 0;
sineCosine(a, b, c);
for (var i = 0; i < mcList.length; i++) {
var rx1 = mcList[i].cx;
var ry1 = mcList[i].cy * ca + mcList[i].cz * (-sa);
var rz1 = mcList[i].cy * sa + mcList[i].cz * ca;
var rx2 = rx1 * cb + rz1 * sb;
var ry2 = ry1;
var rz2 = rx1 * (-sb) + rz1 * cb;
var rx3 = rx2 * cc + ry2 * (-sc);
var ry3 = rx2 * sc + ry2 * cc;
var rz3 = rz2;
mcList[i].cx = rx3;
mcList[i].cy = ry3;
mcList[i].cz = rz3;
var per = size / (size + rz3);
mcList[i].x = rx3 * per;
mcList[i].y = ry3 * per;
mcList[i].scale = per;
mcList[i].alpha = per;
mcList[i].alpha = (mcList[i].alpha - 0.6) * (10 / 6);
}
doPosition();
depthSort();
}
// Event handlers
canvas.onmouseover = function() {
active = true;
};
canvas.onmouseout = function() {
active = false;
};
canvas.onmousemove = function(ev) {
var rect = canvas.getBoundingClientRect();
mouseX = ev.clientX - rect.left - width / 2;
mouseY = ev.clientY - rect.top - height / 2;
};
canvas.onclick = function(ev) {
var rect = canvas.getBoundingClientRect();
var mx = ev.clientX - rect.left;
var my = ev.clientY - rect.top;
for (var i = 0; i < mcList.length; i++) {
var tag = mcList[i];
var dx = mx - tag.cx;
var dy = my - tag.cy;
var dist = Math.sqrt(dx * dx + dy * dy);
if (dist < 50) {
window.location.href = tag.url;
break;
}
}
};
canvas.style.cursor = 'pointer';
// Initialize
sineCosine(0, 0, 0);
positionAll();
setInterval(update, 30);
console.log('[TagCloud] Successfully initialized with extra large text! Animation started.');
}
// Start trying to find the placeholder
tryInitialize();
})();