MediaWiki:Common.js: Difference between revisions

From Doc-Wiki
Jump to navigation Jump to search
Updated video gallery handling for playlist pages
Added support for Simple Nursing Videos category gallery
 
(2 intermediate revisions by the same user not shown)
Line 9: Line 9:




/* Level Up RN - Video Galleries and Embeds */
 
 
 
/* Level Up RN, Nursing.com & Simple Nursing - Video Galleries and Embeds */
(function() {
(function() {
     'use strict';
     'use strict';
Line 42: Line 45:
             });
             });


             // Transform playlist videos gallery
             // Transform playlist videos container into gallery
             $('.playlist-videos-gallery .wikitable').each(function() {
             $('.playlist-videos-container').each(function() {
                 var $table = $(this);
                 var $container = $(this);
                 var $gallery = $('<div class="video-cards-gallery"></div>');
                 var $gallery = $('<div class="video-cards-gallery"></div>');


                 $table.find('tr').each(function(index) {
                 $container.find('.video-item').each(function() {
                     if (index === 0) return; // Skip header row
                     var $item = $(this);
                    var videoId = $item.attr('data-video-id');
                    var pageUrl = $item.attr('data-page-url');
                    var videoTitle = $item.attr('data-title');


                    var $row = $(this);
                     if (!videoId || !pageUrl || !videoTitle) return;
                    var $cells = $row.find('td');
                     if ($cells.length < 2) return;
 
                    var videoId = $cells.eq(0).attr('data-video-id');
                    var $link = $cells.eq(1).find('a').first();
                    var videoTitle = $link.text();
                    var videoPageUrl = $link.attr('href');
 
                    if (!videoId || !videoPageUrl) return;


                     var $card = $('<div class="video-card"></div>');
                     var $card = $('<div class="video-card"></div>');


                     var $thumb = $('<div class="video-card-thumb"></div>');
                     var $thumb = $('<div class="video-card-thumb"></div>');
                     var $thumbLink = $('<a></a>').attr('href', videoPageUrl);
                     var $thumbLink = $('<a></a>').attr('href', pageUrl);


                     var $thumbImg = $('<img>')
                     var $thumbImg = $('<img>')
                         .attr('src', 'https://i.ytimg.com/vi/' + videoId + '/hqdefault.jpg')
                         .attr('src', 'https://i.ytimg.com/vi/' + videoId + '/hqdefault.jpg')
                        .attr('alt', videoTitle)
                         .css({
                         .css({
                             'width': '100%',
                             'width': '100%',
Line 81: Line 79:
                     var $info = $('<div class="video-card-info"></div>');
                     var $info = $('<div class="video-card-info"></div>');
                     var $titleLink = $('<a></a>')
                     var $titleLink = $('<a></a>')
                         .attr('href', videoPageUrl)
                         .attr('href', pageUrl)
                         .text(videoTitle);
                         .text(videoTitle);
                     $info.append($titleLink);
                     $info.append($titleLink);
Line 90: Line 88:


                 if ($gallery.children().length > 0) {
                 if ($gallery.children().length > 0) {
                     $table.replaceWith($gallery);
                     $container.replaceWith($gallery);
                 }
                 }
             });
             });


             // Transform category page playlist 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;

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);
                }
            }
        });
    });
})();