No edit summary
Tag: Reverted
Undo revision 35412 by JakeL (talk)
Tag: Undo
Line 109: Line 109:
/* Jakes Recent Changes Portlet */
/* Jakes Recent Changes Portlet */
(function () {
(function () {
  var jakePortletId = "p-jake-recentchanges";
  var jakeListId = "jake-rc-list";
  var jakeTimer = null;
   function jakeTimeAgo(date) {
   function jakeTimeAgo(date) {
     var s = Math.floor((Date.now() - date.getTime()) / 1000);
     var s = Math.floor((Date.now() - date.getTime()) / 1000);
Line 124: Line 120:
   }
   }


   function jakeFindMenuRoot() {
   function jakeBuildPortlet() {
     return document.getElementById("vector-main-menu") || document.getElementById("mw-panel");
     var menu =
  }
      document.getElementById("vector-main-menu") ||
      document.getElementById("mw-panel");


  function jakeEnsurePortlet() {
    var menu = jakeFindMenuRoot();
     if (!menu) return null;
     if (!menu) return null;
 
     if (document.getElementById("p-jake-recentchanges")) return null;
    var existingList = document.getElementById(jakeListId);
     if (existingList) return existingList;
 
    var existingPortlet = document.getElementById(jakePortletId);
    if (existingPortlet) {
      var list = existingPortlet.querySelector("#" + jakeListId);
      return list || null;
    }


     var portlet = document.createElement("div");
     var portlet = document.createElement("div");
     portlet.id = jakePortletId;
     portlet.id = "p-jake-recentchanges";
     portlet.className = "vector-menu mw-portlet";
     portlet.className = "vector-menu mw-portlet";


Line 154: Line 141:
     var ul = document.createElement("ul");
     var ul = document.createElement("ul");
     ul.className = "vector-menu-content-list";
     ul.className = "vector-menu-content-list";
     ul.id = jakeListId;
     ul.id = "jake-rc-list";


     var moreWrap = document.createElement("div");
     var moreWrap = document.createElement("div");
Line 162: Line 149:
     moreLink.href = mw.util.getUrl("Special:RecentChanges");
     moreLink.href = mw.util.getUrl("Special:RecentChanges");
     moreLink.textContent = "Show more…";
     moreLink.textContent = "Show more…";
    moreWrap.appendChild(moreLink);


    moreWrap.appendChild(moreLink);
     content.appendChild(ul);
     content.appendChild(ul);
     content.appendChild(moreWrap);
     content.appendChild(moreWrap);
Line 170: Line 157:
     portlet.appendChild(content);
     portlet.appendChild(content);


     var after = menu.querySelector("#p-Community") || menu.querySelector("#p-navigation") || null;
     var discordPortlet = menu.querySelector("#p-Community");
    if (after && after.parentNode) after.parentNode.insertBefore(portlet, after.nextSibling);
    if (discordPortlet && discordPortlet.parentNode) {
    else menu.appendChild(portlet);
      discordPortlet.parentNode.insertBefore(portlet, discordPortlet.nextSibling);
    } else {
      var navPortlet = menu.querySelector("#p-navigation");
      if (navPortlet && navPortlet.parentNode) {
        navPortlet.parentNode.insertBefore(portlet, navPortlet.nextSibling);
      } else {
        menu.appendChild(portlet);
      }
    }


     return ul;
     return ul;
   }
   }


   function jakeRender(changes) {
   function jakeLoadRecentChanges(ul) {
    var ul = document.getElementById(jakeListId) || jakeEnsurePortlet();
     if (!ul) return;
     if (!ul) return;


     ul.textContent = "";
     var api = new mw.Api();
    api
      .get({
        action: "query",
        list: "recentchanges",
        rcnamespace: 0,
        rclimit: 5,
        rcprop: "title|timestamp|user",
        rcshow: "!bot",
        formatversion: 2
      })
      .then(function (data) {
        var items =
          data && data.query && data.query.recentchanges
            ? data.query.recentchanges
            : [];
 
        ul.textContent = "";


    for (var i = 0; i < changes.length; i++) {
        for (var i = 0; i < items.length; i++) {
      var rc = changes[i];
          var rc = items[i];


      var li = document.createElement("li");
          var li = document.createElement("li");
      li.className = "mw-list-item jake-rc-item";
          li.className = "mw-list-item jake-rc-item";


      var a = document.createElement("a");
          var a = document.createElement("a");
      a.href = mw.util.getUrl(rc.title);
          a.href = mw.util.getUrl(rc.title);
      a.textContent = rc.title;
          a.textContent = rc.title;


      var meta = document.createElement("div");
          var meta = document.createElement("div");
      meta.className = "jake-rc-meta";
          meta.className = "jake-rc-meta";
      meta.textContent = jakeTimeAgo(new Date(rc.timestamp)) + " · " + (rc.user || "");
          meta.textContent = jakeTimeAgo(new Date(rc.timestamp)) + " · " + (rc.user || "");


      li.appendChild(a);
          li.appendChild(a);
      li.appendChild(meta);
          li.appendChild(meta);
      ul.appendChild(li);
          ul.appendChild(li);
    }
        }
  }
      })
      .catch(function () {
        ul.textContent = "";


  function jakeFetch() {
        var li = document.createElement("li");
    if (!mw || !mw.Api || !mw.util) return;
        li.className = "mw-list-item jake-rc-item";


    jakeEnsurePortlet();
        var a = document.createElement("a");
        a.href = mw.util.getUrl("Special:RecentChanges");
        a.textContent = "View recent changes";


    var api = new mw.Api();
        li.appendChild(a);
    api.get({
        ul.appendChild(li);
      action: "query",
       });
      list: "recentchanges",
  }
      rclimit: 5,
      rctype: "edit|new",
      rcprop: "title|timestamp|user",
      rcshow: "!bot",
      rcstart: new Date().toISOString(),
       formatversion: 2
    }).then(function (data) {
      var items = (data && data.query && data.query.recentchanges) ? data.query.recentchanges : [];
      jakeRender(items);
    }).catch(function () {
      var ul = document.getElementById(jakeListId) || jakeEnsurePortlet();
      if (!ul) return;


      ul.textContent = "";
  function jakeInitRecentChanges() {
      var li = document.createElement("li");
    if (!window.mw || !mw.util || !mw.Api) return;
      li.className = "mw-list-item jake-rc-item";


      var a = document.createElement("a");
    var ul = jakeBuildPortlet();
      a.href = mw.util.getUrl("Special:RecentChanges");
    if (!ul) ul = document.getElementById("jake-rc-list");
      a.textContent = "View recent changes";
    if (!ul) return;


      li.appendChild(a);
    jakeLoadRecentChanges(ul);
       ul.appendChild(li);
    setInterval(function () {
     });
       jakeLoadRecentChanges(ul);
     }, 60000);
   }
   }


   function jakeInit() {
   function jakeWaitForMenu() {
     if (!mw || !mw.util || !mw.Api) return;
     var tries = 0;


     jakeFetch();
     var timer = setInterval(function () {
      var menu =
        document.getElementById("vector-main-menu") ||
        document.getElementById("mw-panel");


    if (jakeTimer) clearInterval(jakeTimer);
      if (menu) {
    jakeTimer = setInterval(jakeFetch, 60000);
        clearInterval(timer);
        jakeInitRecentChanges();
        return;
      }


    if (mw.hook) {
      tries++;
       mw.hook("wikipage.content").add(function () {
       if (tries > 50) clearInterval(timer);
        jakeEnsurePortlet();
    }, 200);
      });
    }
   }
   }


   if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", jakeInit);
   jakeWaitForMenu();
  else jakeInit();
})();
})();
/* */
/* */