Jump to content

User:GhostInTheMachine/TalkHelper3.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
mw.loader.using(
  [ 'ext.gadget.CommentsInLocalTime', 'jquery.makeCollapsible' ],
  TalkHelper3Init,
  function(){
    alert('TalkHelper3 could not load dependencies');
  }
);

function TalkHelper3Init() {
  console.log('TalkHelper3 init');

  if (window.commentsInLocalTimeWasRun) {
    console.log('TalkHelper3 CILT loaded');
    TalkHelper3CSS();
    TalkHelper3Run();
  } else {
  	console.log('TalkHelper3 waiting');
    setTimeout(TalkHelper3Init, 10);
  }
}

function TalkHelper3CSS() {
  mw.util.addCSS(`

  .talkHelperToday {
    background-color: moccasin;
    border-color: #3366cc;
    border-style: solid;
    border-width: thin;
    padding: 5px;
  }

  .talkHelperYesterday {
    background-color: cornsilk;
    border-color: #3366cc;
    border-style: dashed;
    border-width: thin;
    padding: 5px;
  }

  .talkHelperMe {
    border-width: medium;
  }

  .talkHelperRef {
    font-size: small;
    margin-left: 1em;
  }

  `);
}

function TalkHelper3Run() {

  $('#mw-panel').wrapInner('<div id="mw-panel-wp" class="navbox" style="text-align: left;"></div>');

  $subPanel = $('#mw-panel-wp');

  $subPanel.wrapInner('<div class="mw-collapsible-content"></div>');
  $subPanel.prepend('Wikipedia');
  $subPanel.makeCollapsible();
  $subPanel.addClass('navbox');

  TalkHelper3Build('Yesterday');
  TalkHelper3Build('Today');
}

function TalkHelper3Build(when) {
  var posts = [];
  var seqno = 0;
  
  // console.log('starting TalkHelper3Build');

  $.each(
    $(".localcomments:contains(', " + when + "')"),
    function(){
      var ts = $(this).attr("title");
      ts = ts.substr(0, 5);
      var dd = $(this).parent().parent();
      seqno++;
      var id = when + seqno;
	  $(dd).addClass('talkHelper' + when).attr("id", id);
      // console.log('ts=', ts, " id=",  id);
      posts.push(ts + '|' + id);
    }
  );

  console.log('TalkHelper3 ' + when + '=' + posts.length);
  if(posts.length < 1) {
  	return;
  }

  mw.util.addPortletLink(
    'p-namespaces',
    '#',
    posts.length + ' ' + when.toLowerCase(),
    'ca-goto-' + when,
    'Go to first post for ' + when
  );

  $('#ca-goto-' + when).click( function(e){
    e.preventDefault();
    $('html, body').animate({scrollTop: $('.talkHelper' + when).first().offset().top - 20});
  });

  posts.sort();

  $('#mw-panel').prepend('<div id="mw-panel-' + when + '" class="navbox" style="text-align: left;"></div><p></p>');
  var $subPanel = $('#mw-panel-' + when);

  posts.forEach(
    function(x){
      var ts = x.substr(0,5);
      var id = x.substr(6);
      $($subPanel).append(
        '<div class="talkHelperRef">' +
        '<a href="#' + id + '">' +
        ts +
        '</a></div>'
      );
    }
  );

  $subPanel.wrapInner('<div class="mw-collapsible-content"></div>');
  $subPanel.prepend(posts.length + ' ' + when);
  $subPanel.makeCollapsible();

  $('.talkHelper' + when + ':contains(' + mw.config.get('wgUserName') + ')').addClass('talkHelperMe');
}