MediaWiki:Common.js: Difference between revisions

From Doc-Wiki
Jump to navigation Jump to search
Use YouTube iframes for playlist thumbnails
Added support for Simple Nursing Videos category gallery
 
(4 intermediate revisions by the same user not shown)
Line 7: Line 7:




/* Level Up RN - Working Thumbnails and Embeds */
 
 
 
 
 
/* Level Up RN, Nursing.com & Simple Nursing - Video Galleries and Embeds */
(function() {
(function() {
     'use strict';
     'use strict';
Line 14: Line 19:
         $(document).ready(function() {
         $(document).ready(function() {


             // Fix 1: Create working iframe embeds for playlist pages
             // Create working iframe embeds for individual video pages
             $('.youtube-playlist-embed[data-playlist-id]').each(function() {
             $('.youtube-video-embed[data-video-id]').each(function() {
                 var $container = $(this);
                 var $container = $(this);
                 var playlistId = $container.attr('data-playlist-id');
                 var videoId = $container.attr('data-video-id');


                 if (playlistId) {
                 if (videoId) {
                     var iframe = $('<iframe>')
                     var iframe = $('<iframe>')
                         .attr({
                         .attr({
                             'src': 'https://www.youtube.com/embed/videoseries?list=' + playlistId,
                             'src': 'https://www.youtube.com/embed/' + videoId,
                             'frameborder': '0',
                             'frameborder': '0',
                             'allow': 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share',
                             'allow': 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share',
Line 40: Line 45:
             });
             });


             // Fix 2: Transform gallery with YouTube iframes for thumbnails
             // 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 67: Line 123:


                     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>');
                    var $thumbLink = $('<a></a>').attr('href', wikiPageUrl);


                     // Use YouTube iframe to show thumbnail (it will load properly in browser)
                     // Use YouTube iframe for thumbnail with pointer-events: none
                     var $thumbFrame = $('<iframe>')
                     var $thumbFrame = $('<iframe>')
                         .attr({
                         .attr({
                             'src': 'https://www.youtube.com/embed/videoseries?list=' + playlistId + '&controls=0&showinfo=0&rel=0&modestbranding=1',
                             'src': 'https://www.youtube.com/embed/videoseries?list=' + playlistId + '&controls=0&showinfo=0&rel=0&modestbranding=1',
                             'frameborder': '0',
                             'frameborder': '0',
                             'loading': 'lazy',
                             'loading': 'lazy'
                            'style': 'pointer-events: none;'
                         })
                         })
                         .css({
                         .css({
Line 83: Line 145:
                             'left': '0',
                             'left': '0',
                             'width': '100%',
                             'width': '100%',
                             'height': '100%'
                             'height': '100%',
                            'pointer-events': 'none'
                         });
                         });


                     $thumbLink.append($thumbFrame);
                     $thumb.append($thumbFrame);
                     $thumbLink.append('<div class="playlist-box-overlay">▶ Playlist</div>');
                     $thumb.append('<div class="playlist-box-overlay">▶ Playlist</div>');
                    $thumb.append($thumbLink);


                     var $info = $('<div class="playlist-box-info"></div>');
                     var $info = $('<div class="playlist-box-info"></div>');
Line 95: 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);
                }
            }
        });
    });
})();