维基百科:AutoEd/wikilinks.js

维基百科,自由的百科全书

//

//turns first character to lowercase; required forautoEdWikilinks()
function TurnFirstToLower(input) {
  if (input != "")
  {
    var temp = input.substr(0, 1);
    return temp.toLowerCase() + input.substr(1, input.length);
  }
  else
    return "";
}

function autoEdWikilinks(str) { //MAIN FUNCTION describes list of fixes
    var page_name = wgPageName.replace('_',' '); //Variable needed for latter function

    //Fix links which have no target
    str = str.replace(new RegExp('\\[\\[\\|', 'gi'), '\[\[');

    //Shortens interwikis
    str = str.replace(new RegExp('\\[\\[WIKTIONARY\:', 'gi'), '\[\[wikt\:');
    str = str.replace(new RegExp('\\[\\[WIKINEWS\:', 'gi'), '\[\[n\:');
    str = str.replace(new RegExp('\\[\\[WIKIBOOKS\:', 'gi'), '\[\[b\:');
    str = str.replace(new RegExp('\\[\\[WIKIQUOTE\:', 'gi'), '\[\[q\:');
    str = str.replace(new RegExp('\\[\\[WIKISOURCE\:', 'gi'), '\[\[s\:');
    str = str.replace(new RegExp('\\[\\[WIKISPECIES\:', 'gi'), '\[\[species\:');
    str = str.replace(new RegExp('\\[\\[WIKIVERSITY\:', 'gi'), '\[\[v\:');
    str = str.replace(new RegExp('\\[\\[WIKIMEDIA\:|\\[\\[FOUNDATION\:', 'gi'), '\[\[wmf\:');
    str = str.replace(new RegExp('\\[\\[METAWIKIPEDIA\:', 'gi'), '\[\[m\:');

    //Removes links to current article
    str = str.replace(new RegExp('\\[\\[(' + page_name + ')\\]\\]', 'gi'), '$1');
    str = str.replace(new RegExp('\\[\\[(?:' + page_name + '|' + wgPageName + ')\\|([^\\]\\|]*)\\]\\]', 'gi'), '$1');

    //Simplifies wikilink syntax
    var m = str.match(/\[\[([^[]*?)\|([^[]*?)\]\]/g);
    if (m)
    {
      for (var i = 0; i < m.length; i++)
      {
        var n_arr = m[i].toString().match(/\[\[([^[]*?)\|([^[]*?)\]\]/);
        var n = n_arr[0];
        var a = n_arr[1];
        var b = n_arr[2];
        if (b.indexOf(a) == 0 || b.indexOf(TurnFirstToLower(a)) == 0)
        {
          var k = n.replace(/\[\[([^\]\|]*?)\|(\1)([\w]*?)\]\]/i, "[[$2]]$3");
          str = str.replace(n, k);
        }
      }
    }
    str = str.replace(/\[\[([^\]\[\|]+)\|([^\]\[\|]+)\]\]([a-z]+)/gi, "[[$1|$2$3]]");


    return str;
}

//