Benutzer:Schnark/js/bkl-check.js
aus Wikipedia, der freien Enzyklopädie
< Benutzer:Schnark | js
Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
//Dokumentation unter [[Benutzer:Schnark/js/bkl-check]] <nowiki> /*global mediaWiki*/ (function($,mw){ "use strict"; varconfig={ onlyCheckMainNS:false, onlyCheckCurrent:false, dontCheckSpecial:false, onlyMarkMainNS:true, maxTitles:50 },cachedLinks=false,cachedLinksContent,namespaceRe,hasOwn=Object.prototype.hasOwnProperty; functionmakeStyle(c,text,color){ return'.'+c+' {'+ 'background-color: '+(color||'rgba(255, 0, 0, .43)')+ '}'+ '.'+c+'::after {'+ 'content: "'+text.replace(/([\\"])/g,'\\1ドル')+'";'+ 'font-size: 70%;'+ 'vertical-align: super;'+ 'line-height: 0;'+ '}'+ '@media print {'+ '.'+c+' {'+ 'background-color: transparent;'+ '}'+ '.'+c+'::after {'+ 'content: none;'+ '}'+ '}'; } functionmakeConfig(data,useDisambig){ vari,css='',cats={}; for(i=0;i<data.length;i++){ css+=makeStyle(data[i].className,data[i].tag,data[i].color); cats[mw.config.get('wgFormattedNamespaces')[14]+':'+data[i].category.replace(/_/g,' ')]={ className:data[i].className, titleAppend:' ('+data[i].title+')' }; } return{css:css,cats:cats,useDisambig:useDisambig}; } functiongetConfig(project){ switch(project){ case'my_wiki': case'dewiki': returnmakeConfig([ {category:'Begriffsklärung',title:'Begriffsklärungsseite',tag:'BKL',className:'bkl-link'}, {category:'Wikipedia:Falschschreibung',title:'Falschschreibung',tag:'FS',className:'fs-link'}, {category:'Wikipedia:Obsolete Schreibung',title:'Obsolete Schreibung',tag:'OS',className:'os-link'} ],project==='dewiki'); case'enwiki': returnmakeConfig([ {category:'All disambiguation pages',title:'disambiguation page',tag:'DAB',className:'dab-link'} ],true); default: mw.log.warn('No configuration for bkl-check.js for this project!'); returnmakeConfig([],false); } } functiongetTitleFromLink(a){ //return a.title || ''; varhref=$(a).attr('href')||'',path=mw.config.get('wgArticlePath').replace(/\1ドル/,''); if(href.indexOf(path)!==0){ path=location.origin+path;//mit absoluter URL noch mal probieren } if(href.indexOf(path)!==0){ return''; } href=href.slice(path.length); href=href.replace(/#.*/,''); if(href.indexOf('?')>-1){ return''; } try{ href=decodeURIComponent(href); }catch(e){ } returnhref.replace(/_/g,' '); } functionclearLinks(){ cachedLinks=false; } functiongetLinks($content,mwDisambig){ if(!cachedLinks||$content!==cachedLinksContent){ if(['edit','submit'].indexOf(mw.config.get('wgAction'))!==-1&&$content.find('#wikiPreview').length===1){ $content=$content.find('#wikiPreview'); } cachedLinks=mwDisambig?$content.find('a.mw-disambig'):$content.find('a').not('.new, .image, .external'); cachedLinksContent=$content; } returncachedLinks; } functiongetNamespaceRe(){ varns,ids,n,main; if(!namespaceRe){ ns=[]; ids=mw.config.get('wgNamespaceIds'); main=mw.config.get('wgContentNamespaces'); for(ninids){ if(hasOwn.call(ids,n)&&main.indexOf(ids[n])===-1){ ns.push(mw.util.escapeRegExp(n).replace(/_/g,'[ _]+')); } } namespaceRe=newRegExp('^(?:'+ns.join('|')+'):','i'); } returnnamespaceRe; } functiongetTitles($content,mwDisambig){ vartitles=[],re; if(config.onlyMarkMainNS){ re=getNamespaceRe(); } getLinks($content,mwDisambig).each(function(){ vartitle=getTitleFromLink(this); if(title!==''&&titles.indexOf(title)===-1&&(!config.onlyMarkMainNS||!re.test(title))){ titles.push(title); } }); returntitles; } functioncallWithContinue(query,callback,done,queryContinue){ $.getJSON(mw.util.wikiScript('api'),$.extend({},query,queryContinue)) .then(function(json){ if(json&&json.query){ callback(json.query); } if(json&&json['continue']){ callWithContinue(query,callback,done,json['continue']); }else{ done(); } },function(){ done(); }); } functiongetCategoryList(){ varcats=[],cat; for(catinconfig.cats){ if(hasOwn.call(config.cats,cat)){ cats.push(cat); } } returncats.join('|'); } functiongetQueryForView(){ varquery={ action:'query', prop:'categories', pageids:mw.config.get('wgArticleId'), generator:'links', gpllimit:'max', cllimit:'max', clcategories:getCategoryList(), redirects:true, format:'json', formatversion:2 }; if(config.onlyMarkMainNS){ query.gplnamespace=mw.config.get('wgContentNamespaces').join('|'); } returnquery; } functiongetQueryForPreview(titles){ return{ action:'query', prop:'categories', titles:titles, clcategories:getCategoryList(), cllimit:'max', redirects:true, format:'json', formatversion:2 }; } functiongetTaggedPagesFromApi(titles,callback,done){ if(titles){ if(titles.length<=config.maxTitles){ callWithContinue(getQueryForPreview(titles.join('|')),callback,done); }else{ callWithContinue(getQueryForPreview(titles.splice(0,config.maxTitles).join('|')),callback,function(){ getTaggedPagesFromApi(titles,callback,done); }); } }else{ callWithContinue(getQueryForView(),callback,done); } } functiongetTaggedPages(titles,callback){ var/*normalizations = {},*/redirects={},cats={},foundAny=false; functionaddData(query){ vari,page; /*if (query.normalized) { for (i = 0; i < query.normalized.length; i++) { normalizations[query.normalized[i].from] = query.normalized[i].to; } }*/ if(query.redirects){ for(i=0;i<query.redirects.length;i++){ redirects[query.redirects[i].from]=query.redirects[i].to; } } if(query.pages){ for(i=0;i<query.pages.length;i++){ page=query.pages[i]; if( page.missing||!page.categories|| (config.onlyMarkMainNS&&mw.config.get('wgContentNamespaces').indexOf(page.ns)===-1) ){ continue; } cats[page.title]=page.categories[0].title; foundAny=true; } } } if(titles){ if(titles.length===0){ return; } titles.sort(); } getTaggedPagesFromApi(titles,addData,function(){ vart; if(foundAny){ for(tinredirects){ if(hasOwn.call(redirects,t)){ cats[t]=cats[redirects[t]]; } } /*for (t in normalizations) { if (hasOwn.call(normalizations, t)) { cats[t] = cats[normalizations[t]]; } }*/ callback(cats); } }); } functionmarkLink(a,cats){ vartitle=getTitleFromLink(a); if(cats[title]){ $(a).wrapInner(mw.html.element('span',{ 'class':config.cats[cats[title]].className, title:a.title+config.cats[cats[title]].titleAppend },'')); } } functiongetClassesSelector(){ varc,classes=[]; for(cinconfig.cats){ if(hasOwn.call(config.cats,c)){ classes.push('.'+config.cats[c].className); } } returnclasses.join(','); } functionrun($content){ vartitles=false,selector=getClassesSelector(),isPreview,isSpecial,isOld,isDynamic; if(!selector||$content.find(selector).length){ //schon markierte Links return; } isPreview=['edit','submit'].indexOf(mw.config.get('wgAction'))>-1; isSpecial=mw.config.get('wgNamespaceNumber')===-1; isOld=mw.config.get('wgCurRevisionId')!==mw.config.get('wgRevisionId'); isDynamic=!isPreview&&$content.attr('id')!=='mw-content-text'; if(!isSpecial&&!isDynamic&&config.useDisambig&&$('.mw-disambig').length===0){ //wenn MW keine gefunden hat, dann gibt es keine return; } clearLinks(); if(isPreview||isSpecial||isOld||isDynamic){ titles=getTitles($content,isPreview&&config.useDisambig); } getTaggedPages(titles,function(classNames){ getLinks($content).each(function(){ markLink(this,classNames); }); }); } functioninit(){ if( ( config.onlyCheckMainNS&& mw.config.get('wgContentNamespaces').indexOf(mw.config.get('wgNamespaceNumber'))===-1 )||( config.dontCheckSpecial&&mw.config.get('wgNamespaceNumber')===-1 )||( config.onlyCheckCurrent&&mw.config.get('wgCurRevisionId')!==mw.config.get('wgRevisionId') ) ){ return; } mw.util.addCSS(config.css); mw.hook('wikipage.content').add(run); } $.extend(config,getConfig(mw.config.get('wgDBname'))); mw.hook('userjs.load-script.bklCheck').fire(config); if(['view','edit','submit'].indexOf(mw.config.get('wgAction'))>-1&&!$.isEmptyObject(config.cats)){ mw.loader.using('mediawiki.util').then(init); } })(jQuery,mediaWiki); //</nowiki>