Jump to content

User:SoledadKabocha/scriptDocClassifier.js

From Wikipedia, the free encyclopedia
This is the current revision of this page, as edited by SoledadKabocha (talk | contribs) at 21:17, 6 May 2018 (we are now back to the state as of late 2015). The present address (URL) is a permanent link to this version.
(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)
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.
function classifyScriptDoc( ) {
  if ( !document.getElementById( 'mw-script-doc' ) ) return;

  var clss = '';

  var pageSuffix = /\.(css|js)$/.exec( wgPageName );
  if ( !pageSuffix || pageSuffix.length == 0 ) return;
  pageSuffix = pageSuffix[1];
  clss = 'wscript-' + pageSuffix;

  var oppositeSuffix = ( pageSuffix == 'js' ? 'css' : 'js' );

  var sdoc = $( '#mw-script-doc' );
  var sdoclnks = sdoc.find( 'a:not(.image)' );
  var shouldAddDocRedlink = false;
  var shouldAddCompanionRedlink = false;
  var dontReplaceSeems = false;

  if ( sdoclnks.length == 2 ) {
    //2 links: both companion CSS/JS and documentation
    clss += ' wscript-hascompanion wscript-hasdoc wscript-has' + oppositeSuffix;
  }
  else if ( sdoclnks.length == 1 ) {
    //1 link: at most one of companion CSS/JS and documentation present
    var myHref = sdoclnks.attr( 'href' );
    if ( sdoclnks.hasClass( 'new' ) ) {
      //no companion CSS/JS nor documentation
      clss += ' wscript-nocompanion wscript-nodoc wscript-no' + oppositeSuffix;
      //redlink points to companion if this is a user skin, or documentation otherwise
      shouldAddCompanionRedlink = !( /\.(cs|j)s&/.test( myHref ) );
      //avoid misbehaving if the redlink is something like "seems to have foo.js"
      dontReplaceSeems = true;
    }
    else {
      if ( /\.(cs|j)s$/.test( myHref ) ) {
        //companion CSS/JS only
        clss += ' wscript-hascompanion wscript-nodoc wscript-has' + oppositeSuffix;
        //user skins shouldn't have documentation, but we filter that out below
        shouldAddDocRedlink = true;
      }
      else {
        //documentation only
        clss += ' wscript-nocompanion wscript-hasdoc wscript-no' + oppositeSuffix;
        if ( sdoc.find( 'a.mw-redirect' ).length == 1 ) {
          clss += ' wscript-docredirect';
          if ( typeof window.replaceSeemsEvenIfDocIsRedirect != 'boolean' ) window.replaceSeemsEvenIfDocIsRedirect = false;
          dontReplaceSeems = !window.replaceSeemsEvenIfDocIsRedirect;
        }
        shouldAddCompanionRedlink = true;
      }
    }
  }
  //else uh-oh, some other number of links: silently fail to add classes/msg
  sdoc.addClass( clss );

  var sdochtml = sdoc.html( );
  if ( !sdochtml || ( !window.scriptDocRemoveSeems && !window.scriptDocAddDocRedlink && !window.scriptDocAddCompanionRedlink ) ) return;
  var sdocnewhtml = sdochtml;

  if ( window.scriptDocRemoveSeems === true && !dontReplaceSeems ) sdocnewhtml = sdocnewhtml.replace( 'seems to have', 'has' );

  var msgToAdd = '';
  var securityRestricted = false;
  var editBaseUrl = $( '#ca-edit a' ).attr( 'href' );
  if ( !editBaseUrl ) {
    editBaseUrl = $( '#ca-viewsource a' ).attr( 'href' );
    if ( editBaseUrl ) {
      securityRestricted = true;
    }
    else return;
  }
  if ( window.scriptDocAddDocRedlink === true && shouldAddDocRedlink && sdochtml.indexOf( ' skin ' ) == -1 ) {
    var cleanName = wgPageName.replace( /_/g, ' ' ).replace( /\.(cs|j)s$/, '' );
    msgToAdd += ' Documentation for this script can be added at <a class="new" href="';
    msgToAdd += editBaseUrl.replace( /\.(cs|j)s&/, '&' ) + '&redlink=1';
    msgToAdd += '" title="';
    msgToAdd += cleanName;
    msgToAdd += ' (page does not exist)">';
    msgToAdd += cleanName;
    msgToAdd += '</a>.';
  }
  else if ( window.scriptDocAddCompanionRedlink === true && shouldAddCompanionRedlink && !securityRestricted ) {
    //We will never need to add redlinks for both documentation and companion pages,
    //as the MediaWiki software will always provide one or the other: hence the "else"

    var cleanName = wgPageName.replace( /_/g, ' ' ).replace( /\.(cs|j)s$/, '.'+oppositeSuffix );
    msgToAdd += ' An accompanying .' + oppositeSuffix + ' page can be added at <a class="new" href="';
    msgToAdd += editBaseUrl.replace( /\.(cs|j)s&/, '.'+oppositeSuffix+'&' ) + '&redlink=1';
    msgToAdd += '" title="';
    msgToAdd += cleanName;
    msgToAdd += ' (page does not exist)">';
    msgToAdd += cleanName;
    msgToAdd += '</a>.';
  }

  if ( msgToAdd ) sdocnewhtml = sdocnewhtml.replace( '</a>.', '</a>.' + msgToAdd );
  sdoc.html( sdocnewhtml );
}

if ( !window.scriptDocNoAutoClassify ) {
  $( classifyScriptDoc );
}