Jump to content

User:SoledadKabocha/scriptDocClassifier.js

From Wikipedia, the free encyclopedia
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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 );
}