Jump to content

MediaWiki:Common.js: Difference between revisions

Line 15: Line 15:
});
});
$(function () {
$(function () {
  // Only run on the Main Page
  // Where to display
  if (mw.config.get('wgPageName') !== 'Continuum_Universes_Wiki') return;
 
   var $spot = $('<div id="lore-spotlight"><h3>Random Lore Spotlight</h3><div class="content">Loading…</div></div>');
   var $spot = $('<div id="lore-spotlight"><h3>Random Lore Spotlight</h3><div class="content">Loading…</div></div>');
 
  // Only show on Main Page (or wherever you want)
  if (mw.config.get('wgPageName') !== 'Main_Page') return;
   $('#mw-content-text').prepend($spot);
   $('#mw-content-text').prepend($spot);


   // Query API for random page in Lore category
   // Get a random page in category Lore
   $.getJSON(mw.util.wikiScript('api'), {
   $.getJSON(mw.util.wikiScript('api'), {
     action: 'query',
     action: 'query',
Line 32: Line 33:
     var page = data.query.random[0];
     var page = data.query.random[0];


     // Get full HTML of page
     // Get the page source (wikitext)
     $.get(mw.util.wikiScript('index'), {
     $.get(mw.util.wikiScript('api'), {
       action: 'render',
       action: 'parse',
       title: page.title
       page: page.title,
     }).done(function (html) {
      prop: 'wikitext',
       var $html = $('<div>').html(html);
      format: 'json'
     }).done(function (parsed) {
       var wikitext = parsed.parse.wikitext['*'];


       // Look for hidden spotlight text
       // Regex to find <spotlighthook>…</spotlighthook>
       var hooks = $html.find('.lore-spotlight-text').map(function () {
       var hooks = [];
         return $(this).text();
      var regex = /<spotlighthook>(.*?)<\/spotlighthook>/g;
       }).get();
      var match;
      while ((match = regex.exec(wikitext)) !== null) {
         hooks.push(match[1]);
       }


       if (hooks.length > 0) {
       if (hooks.length > 0) {
        // Pick one at random
         var hook = hooks[Math.floor(Math.random() * hooks.length)];
         var hook = hooks[Math.floor(Math.random() * hooks.length)];
         $spot.find('.content').html(hook);
         $spot.find('.content').html(hook);
       } else {
       } else {
         // Fallback if no hook
         // fallback
         $spot.find('.content').html(
         $spot.find('.content').html('<b><a href="/wiki/' + encodeURIComponent(page.title) + '">' + page.title + '</a></b>');
          '<b><a href="/wiki/' + encodeURIComponent(page.title) + '">' + page.title + '</a></b>'
        );
       }
       }
     });
     });
   });
   });
});
});