MediaWiki:Common.js: Difference between revisions
Jump to navigation
Jump to search
Comprehensive fix for Level Up RN playlist embeds and thumbnails |
Added support for Simple Nursing Videos category gallery |
||
| (6 intermediate revisions by the same user not shown) | |||
| Line 5: | Line 5: | ||
/* Level Up RN - | |||
/* Level Up RN, Nursing.com & Simple Nursing - Video Galleries and Embeds */ | |||
(function() { | (function() { | ||
'use strict'; | 'use strict'; | ||
| Line 12: | Line 19: | ||
$(document).ready(function() { | $(document).ready(function() { | ||
// | // Create working iframe embeds for individual video pages | ||
$('.youtube- | $('.youtube-video-embed[data-video-id]').each(function() { | ||
var $container = $(this); | var $container = $(this); | ||
var | var videoId = $container.attr('data-video-id'); | ||
if ( | if (videoId) { | ||
var iframe = $('<iframe>') | var iframe = $('<iframe>') | ||
.attr({ | .attr({ | ||
'src': 'https://www.youtube.com/embed/ | 'src': 'https://www.youtube.com/embed/' + videoId, | ||
'frameborder': '0', | 'frameborder': '0', | ||
'allow': 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture', | 'allow': 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share', | ||
'allowfullscreen': '' | 'allowfullscreen': '', | ||
'referrerpolicy': 'strict-origin-when-cross-origin' | |||
}) | }) | ||
.css({ | .css({ | ||
| Line 34: | Line 42: | ||
$container.empty().append(iframe); | $container.empty().append(iframe); | ||
} | } | ||
}); | }); | ||
// | // Transform playlist videos container into gallery | ||
$('.playlist-videos-container').each(function() { | |||
var $container = $(this); | |||
var $gallery = $('<div class="video-cards-gallery"></div>'); | |||
$container.find('.video-item').each(function() { | |||
var $item = $(this); | |||
var videoId = $item.attr('data-video-id'); | |||
var pageUrl = $item.attr('data-page-url'); | |||
var videoTitle = $item.attr('data-title'); | |||
if (!videoId || !pageUrl || !videoTitle) return; | |||
var $card = $('<div class="video-card"></div>'); | |||
var $thumb = $('<div class="video-card-thumb"></div>'); | |||
var $thumbLink = $('<a></a>').attr('href', pageUrl); | |||
var $thumbImg = $('<img>') | |||
.attr('src', 'https://i.ytimg.com/vi/' + videoId + '/hqdefault.jpg') | |||
.attr('alt', videoTitle) | |||
.css({ | |||
'width': '100%', | |||
'height': '100%', | |||
'object-fit': 'cover' | |||
}); | |||
var $playButton = $('<div class="video-card-play">▶</div>'); | |||
$thumbLink.append($thumbImg).append($playButton); | |||
$thumb.append($thumbLink); | |||
var $info = $('<div class="video-card-info"></div>'); | |||
var $titleLink = $('<a></a>') | |||
.attr('href', pageUrl) | |||
.text(videoTitle); | |||
$info.append($titleLink); | |||
$card.append($thumb).append($info); | |||
$gallery.append($card); | |||
}); | |||
if ($gallery.children().length > 0) { | |||
$container.replaceWith($gallery); | |||
} | |||
}); | |||
// Transform category page playlist gallery (works for all nursing categories) | |||
var pageName = mw.config.get('wgPageName'); | var pageName = mw.config.get('wgPageName'); | ||
if (pageName === 'Category:Level_Up_RN_Videos' || pageName === 'Category:Level_Up_RN') { | if (pageName === 'Category:Level_Up_RN_Videos' || | ||
pageName === 'Category:Level_Up_RN' || | |||
pageName === 'Category:Nursing.com_Videos' || | |||
pageName === 'Category:Simple_Nursing_Videos') { | |||
var $table = $('.wikitable.sortable').first(); | var $table = $('.wikitable.sortable').first(); | ||
if (!$table.length) return; | if (!$table.length) return; | ||
| Line 47: | Line 105: | ||
$table.find('tr').each(function(index) { | $table.find('tr').each(function(index) { | ||
if (index === 0) return; | if (index === 0) return; | ||
var $row = $(this); | var $row = $(this); | ||
var $cells = $row.find('td'); | var $cells = $row.find('td'); | ||
if ($cells.length < 3) return; | if ($cells.length < 3) return; | ||
| Line 65: | Line 122: | ||
if (!playlistId || !wikiPageUrl) return; | if (!playlistId || !wikiPageUrl) return; | ||
var $box = $('<div class="playlist-box"></div>'); | var $box = $('<div class="playlist-box"></div>'); | ||
// Make the entire box clickable | |||
$box.css('cursor', 'pointer').on('click', function(e) { | |||
if (!$(e.target).is('a')) { | |||
window.location.href = wikiPageUrl; | |||
} | |||
}); | |||
var $thumb = $('<div class="playlist-box-thumb"></div>'); | var $thumb = $('<div class="playlist-box-thumb"></div>'); | ||
// | // Use YouTube iframe for thumbnail with pointer-events: none | ||
var $ | var $thumbFrame = $('<iframe>') | ||
.attr(' | .attr({ | ||
'src': 'https://www.youtube.com/embed/videoseries?list=' + playlistId + '&controls=0&showinfo=0&rel=0&modestbranding=1', | |||
'frameborder': '0', | |||
'loading': 'lazy' | |||
}) | |||
.css({ | .css({ | ||
'position': 'absolute', | |||
'top': '0', | |||
'left': '0', | |||
'width': '100%', | 'width': '100%', | ||
'height': '100%', | 'height': '100%', | ||
' | 'pointer-events': 'none' | ||
}); | }); | ||
$thumb.append($thumbFrame); | |||
$ | $thumb.append('<div class="playlist-box-overlay">▶ Playlist</div>'); | ||
$ | |||
var $info = $('<div class="playlist-box-info"></div>'); | var $info = $('<div class="playlist-box-info"></div>'); | ||
| Line 106: | Line 157: | ||
$info.append('<div style="margin: 8px 0; font-size: 13px; color: #666;">' + description + '</div>'); | $info.append('<div style="margin: 8px 0; font-size: 13px; color: #666;">' + description + '</div>'); | ||
} | } | ||
$info.append('<a href="' + wikiPageUrl + '" class="playlist-box-link">Watch Playlist →</a>'); | $info.append('<a href="' + wikiPageUrl + '" class="playlist-box-link" onclick="event.stopPropagation();">Watch Playlist →</a>'); | ||
$box.append($thumb).append($info); | $box.append($thumb).append($info); | ||
Latest revision as of 21:54, 17 January 2026
/* Any JavaScript here will be loaded for all users on every page load. */
/* Level Up RN, Nursing.com & Simple Nursing - Video Galleries and Embeds */
(function() {
'use strict';
mw.loader.using(['jquery'], function() {
$(document).ready(function() {
// Create working iframe embeds for individual video pages
$('.youtube-video-embed[data-video-id]').each(function() {
var $container = $(this);
var videoId = $container.attr('data-video-id');
if (videoId) {
var iframe = $('<iframe>')
.attr({
'src': 'https://www.youtube.com/embed/' + videoId,
'frameborder': '0',
'allow': 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share',
'allowfullscreen': '',
'referrerpolicy': 'strict-origin-when-cross-origin'
})
.css({
'position': 'absolute',
'top': '0',
'left': '0',
'width': '100%',
'height': '100%'
});
$container.empty().append(iframe);
}
});
// Transform playlist videos container into gallery
$('.playlist-videos-container').each(function() {
var $container = $(this);
var $gallery = $('<div class="video-cards-gallery"></div>');
$container.find('.video-item').each(function() {
var $item = $(this);
var videoId = $item.attr('data-video-id');
var pageUrl = $item.attr('data-page-url');
var videoTitle = $item.attr('data-title');
if (!videoId || !pageUrl || !videoTitle) return;
var $card = $('<div class="video-card"></div>');
var $thumb = $('<div class="video-card-thumb"></div>');
var $thumbLink = $('<a></a>').attr('href', pageUrl);
var $thumbImg = $('<img>')
.attr('src', 'https://i.ytimg.com/vi/' + videoId + '/hqdefault.jpg')
.attr('alt', videoTitle)
.css({
'width': '100%',
'height': '100%',
'object-fit': 'cover'
});
var $playButton = $('<div class="video-card-play">▶</div>');
$thumbLink.append($thumbImg).append($playButton);
$thumb.append($thumbLink);
var $info = $('<div class="video-card-info"></div>');
var $titleLink = $('<a></a>')
.attr('href', pageUrl)
.text(videoTitle);
$info.append($titleLink);
$card.append($thumb).append($info);
$gallery.append($card);
});
if ($gallery.children().length > 0) {
$container.replaceWith($gallery);
}
});
// Transform category page playlist gallery (works for all nursing categories)
var pageName = mw.config.get('wgPageName');
if (pageName === 'Category:Level_Up_RN_Videos' ||
pageName === 'Category:Level_Up_RN' ||
pageName === 'Category:Nursing.com_Videos' ||
pageName === 'Category:Simple_Nursing_Videos') {
var $table = $('.wikitable.sortable').first();
if (!$table.length) return;
var $gallery = $('<div class="playlists-gallery"></div>');
$table.find('tr').each(function(index) {
if (index === 0) return;
var $row = $(this);
var $cells = $row.find('td');
if ($cells.length < 3) return;
var $titleCell = $cells.eq(0);
var $descCell = $cells.eq(1);
var playlistId = $titleCell.attr('data-playlist-id');
var $titleLink = $titleCell.find('a').first();
var wikiPageUrl = $titleLink.attr('href');
var title = $titleLink.text();
var description = $descCell.text().trim();
if (!playlistId || !wikiPageUrl) return;
var $box = $('<div class="playlist-box"></div>');
// Make the entire box clickable
$box.css('cursor', 'pointer').on('click', function(e) {
if (!$(e.target).is('a')) {
window.location.href = wikiPageUrl;
}
});
var $thumb = $('<div class="playlist-box-thumb"></div>');
// Use YouTube iframe for thumbnail with pointer-events: none
var $thumbFrame = $('<iframe>')
.attr({
'src': 'https://www.youtube.com/embed/videoseries?list=' + playlistId + '&controls=0&showinfo=0&rel=0&modestbranding=1',
'frameborder': '0',
'loading': 'lazy'
})
.css({
'position': 'absolute',
'top': '0',
'left': '0',
'width': '100%',
'height': '100%',
'pointer-events': 'none'
});
$thumb.append($thumbFrame);
$thumb.append('<div class="playlist-box-overlay">▶ Playlist</div>');
var $info = $('<div class="playlist-box-info"></div>');
$info.append('<div class="playlist-box-title">' + title + '</div>');
if (description) {
$info.append('<div style="margin: 8px 0; font-size: 13px; color: #666;">' + description + '</div>');
}
$info.append('<a href="' + wikiPageUrl + '" class="playlist-box-link" onclick="event.stopPropagation();">Watch Playlist →</a>');
$box.append($thumb).append($info);
$gallery.append($box);
});
if ($gallery.children().length > 0) {
$table.replaceWith($gallery);
}
}
});
});
})();