GaryJJSpate (talk | contribs) No edit summary |
GaryJJSpate (talk | contribs) No edit summary |
||
| Line 79: | Line 79: | ||
'<div class="vault-sidebar-module">' + | '<div class="vault-sidebar-module">' + | ||
'<div class="vault-sidebar-module-header">Latest News</div>' + | '<div class="vault-sidebar-module-header">Latest News</div>' + | ||
'<ul class="vault-sidebar-list"><li class="vault-sidebar-loading">Loading…</li></ul>' + | '<ul class="vault-sidebar-list vault-sidebar-list--news"><li class="vault-sidebar-loading">Loading…</li></ul>' + | ||
'</div>' | '</div>' | ||
).appendTo($rail); | ).appendTo($rail); | ||
| Line 85: | Line 85: | ||
$.getJSON('/wp-json/wp/v2/posts', { | $.getJSON('/wp-json/wp/v2/posts', { | ||
per_page: 5, | per_page: 5, | ||
_embed: 'wp:featuredmedia' | |||
}).done(function (posts) { | }).done(function (posts) { | ||
var $list = $newsModule.find('.vault-sidebar-list').empty(); | var $list = $newsModule.find('.vault-sidebar-list').empty(); | ||
| Line 94: | Line 94: | ||
posts.forEach(function (p) { | posts.forEach(function (p) { | ||
var title = $('<div>').html(p.title && p.title.rendered ? p.title.rendered : '').text(); | var title = $('<div>').html(p.title && p.title.rendered ? p.title.rendered : '').text(); | ||
var thumbUrl = ''; | |||
try { | |||
var media = p._embedded && p._embedded['wp:featuredmedia'] && p._embedded['wp:featuredmedia'][0]; | |||
if (media && media.media_details && media.media_details.sizes) { | |||
); | var sizes = media.media_details.sizes; | ||
thumbUrl = (sizes.thumbnail && sizes.thumbnail.source_url) || | |||
(sizes.medium && sizes.medium.source_url) || | |||
(media.source_url || ''); | |||
} else if (media && media.source_url) { | |||
thumbUrl = media.source_url; | |||
} | |||
} catch (e) {} | |||
var $a = $('<a>').attr('href', p.link).attr('target', '_blank').attr('rel', 'noopener'); | |||
if (thumbUrl) { | |||
$a.append($('<img>').attr('src', thumbUrl).addClass('vault-sidebar-thumb').attr('alt', '')); | |||
} | |||
$a.append($('<span>').addClass('vault-sidebar-list-title').text(title)); | |||
$list.append($('<li>').append($a)); | |||
}); | }); | ||
}).fail(function () { | }).fail(function () { | ||
Revision as of 21:14, 12 August 2026
/* Any JavaScript here will be loaded for all users on every page load. */
$(function () {
$('a[href*="index.php?title="]').each(function () {
var link = $(this);
var url = new URL(link.attr('href'), window.location.origin);
var title = url.searchParams.get('title');
if (title) {
var params = new URLSearchParams(url.search);
params.delete('title');
var newUrl = mw.config.get('wgArticlePath')
.replace('$1', title);
if (params.toString()) {
newUrl += '?' + params.toString();
}
link.attr('href', newUrl);
}
});
});
/* ===== Vault sidebar rail (container only, content TBD) =====
Injects an empty sidebar placeholder next to the article body
on every page. Paired with layout CSS in MediaWiki:Cosmos.css. */
$(function () {
var $article = $('#cosmos-pageBody-content');
var $container = $('#bodyContent');
if (!$article.length || !$container.length || $('#vault-sidebar').length) {
return;
}
var $rail = $('<aside id="vault-sidebar"></aside>').appendTo($container);
/* --- Recently Filed module (5 newest pages, live via API) --- */
var $recentModule = $(
'<div class="vault-sidebar-module">' +
'<div class="vault-sidebar-module-header">Recently Filed</div>' +
'<ul class="vault-sidebar-list"><li class="vault-sidebar-loading">Loading…</li></ul>' +
'</div>'
).appendTo($rail);
$.getJSON(mw.util.wikiScript('api'), {
action: 'query',
list: 'recentchanges',
rcnamespace: 0,
rctype: 'new',
rclimit: 5,
rcprop: 'title',
format: 'json'
}).done(function (data) {
var pages = (data.query && data.query.recentchanges) || [];
var $list = $recentModule.find('.vault-sidebar-list').empty();
if (!pages.length) {
$list.append('<li>No recent entries.</li>');
return;
}
pages.forEach(function (p) {
$list.append(
$('<li>').append(
$('<a>').attr('href', mw.util.getUrl(p.title)).text(p.title)
)
);
});
}).fail(function () {
$recentModule.find('.vault-sidebar-list').html('<li>Could not load recent entries.</li>');
});
/* --- Latest News module (WordPress REST API, same-origin) --- */
var $newsModule = $(
'<div class="vault-sidebar-module">' +
'<div class="vault-sidebar-module-header">Latest News</div>' +
'<ul class="vault-sidebar-list vault-sidebar-list--news"><li class="vault-sidebar-loading">Loading…</li></ul>' +
'</div>'
).appendTo($rail);
$.getJSON('/wp-json/wp/v2/posts', {
per_page: 5,
_embed: 'wp:featuredmedia'
}).done(function (posts) {
var $list = $newsModule.find('.vault-sidebar-list').empty();
if (!posts || !posts.length) {
$list.append('<li>No news yet.</li>');
return;
}
posts.forEach(function (p) {
var title = $('<div>').html(p.title && p.title.rendered ? p.title.rendered : '').text();
var thumbUrl = '';
try {
var media = p._embedded && p._embedded['wp:featuredmedia'] && p._embedded['wp:featuredmedia'][0];
if (media && media.media_details && media.media_details.sizes) {
var sizes = media.media_details.sizes;
thumbUrl = (sizes.thumbnail && sizes.thumbnail.source_url) ||
(sizes.medium && sizes.medium.source_url) ||
(media.source_url || '');
} else if (media && media.source_url) {
thumbUrl = media.source_url;
}
} catch (e) {}
var $a = $('<a>').attr('href', p.link).attr('target', '_blank').attr('rel', 'noopener');
if (thumbUrl) {
$a.append($('<img>').attr('src', thumbUrl).addClass('vault-sidebar-thumb').attr('alt', ''));
}
$a.append($('<span>').addClass('vault-sidebar-list-title').text(title));
$list.append($('<li>').append($a));
});
}).fail(function () {
$newsModule.find('.vault-sidebar-list').html('<li>Could not load news.</li>');
});
});
