Template/Update (Part 47)

* split global.js into its components, so it can be reasonably processed by setup
 * make reputation requirements configurable
 * move Markup and Locale back into global.js (removed associated build scripts)
 * extend Icon to display iconId in lightbox popup
This commit is contained in:
Sarjuuk
2025-08-11 16:00:18 +02:00
parent a48e94cd8b
commit 6557e70d5c
73 changed files with 26256 additions and 25699 deletions

View File

@@ -0,0 +1,130 @@
/*
TODO: Create "Tracking" class
*/
function g_trackPageview(tag)
{
function track()
{
if (typeof ga == 'function')
ga('send', 'pageview', tag);
};
$(document).ready(track);
}
function g_trackEvent(category, action, label, value)
{
function track()
{
if (typeof ga == 'function')
ga('send', 'event', category, action, label, value);
};
$(document).ready(track);
}
function g_attachTracking(node, category, action, label, value)
{
var $node = $(node);
$node.click(function()
{
g_trackEvent(category, action, label, value);
});
}
function g_addAnalytics()
{
var objs = {
'home-logo': {
'category': 'Homepage Logo',
'actions': {
'Click image': function(node) { return true; }
}
},
'home-featuredbox': {
'category': 'Featured Box',
'actions': {
'Follow link': function(node) { return (node.parentNode.className != 'home-featuredbox-links'); },
'Click image': function(node) { return (node.parentNode.className == 'home-featuredbox-links'); }
}
},
'home-oneliner': {
'category': 'Oneliner',
'actions': {
'Follow link': function(node) { return true; }
}
},
'sidebar-container': {
'category': 'Page sidebar',
'actions': {
'Click image': function(node) { return true; }
}
},
'toptabs-promo': {
'category': 'Page header',
'actions': {
'Click image': function(node) { return true; }
}
}
};
for (var i in objs)
{
var e = $WH.ge(i);
if (e)
g_addAnalyticsToNode(e, objs[i]);
}
}
function g_getNodeTextId(node)
{
var id = null,
text = g_getFirstTextContent(node);
if (text)
id = g_urlize(text);
else if (node.title)
id = g_urlize(node.title);
else if (node.id)
id = g_urlize(node.id);
return id;
}
function g_addAnalyticsToNode(node, opts, labelPrefix)
{
if (!opts || !opts.actions || !opts.category)
{
if ($WH.isset('g_dev') && g_dev)
{
console.log('Tried to add analytics event without appropriate parameters.');
console.log(node);
console.log(opts);
}
return;
}
var category = opts.category;
var tags = $WH.gE(node, 'a');
for (var i = 0; i < tags.length; ++i)
{
var node = tags[i];
var action = 'Follow link';
for (var a in opts.actions)
{
if (opts.actions[a] && opts.actions[a](node))
{
action = a;
break;
}
}
var label = (labelPrefix ? labelPrefix + '-' : '') + g_getNodeTextId(node);
g_attachTracking(node, category, action, label);
}
}
$(document).ready(g_addAnalytics);