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
/*
* Ersetzt SVG-Vorschaubilder durch die SVGs selbst
* Browser-Support:
* - Opera 9.5 (getestet)
* - IE 5.5 und neuer mit ASV-Plugin 3 (vermutlich)
* - Safari 3.0 und neuer (vermutlich)
* - Firefox 3 mit kleineren Bugs
*
* Die Seite kann durch folgenden Code in der persönlichen Spezial:Mypage/monobook.js
* (bzw. der dem Skin entsprechenden Datei) eingebunden werden:
* importScript('Benutzer:Hk kng/svgdirect.js');
*/
var is_ie = clientPC.indexOf('MSIE') != -1;
var XMLNS_SVG = "http://www.w3.org/2000/svg";
var XMLNS_XHTML = "http://www.w3.org/1999/xhtml";
var XMLNS_XLINK = "http://www.w3.org/1999/xlink";
var MIME_SVG = "image/svg+xml";
var commonsDomain = "http://commons.wikimedia.org";
var qUrlJson = "/api.php?format=json&action=query&titles=";
var qUrlInfo = "&prop=imageinfo&iilimit=max&iiprop=url|size|mime";
var qUrlList = "&generator=images&gimlimit=max";
var qCallbackDefault = "&callback=svgDirect.resultArrived";
var qCallbackFile = "&callback=svgDirect.fileResultArrived";
var imgStyleAtts = ['borderTopColor', 'borderLeftColor', 'borderRightColor', 'borderBottomColor',
'borderTopWidth', 'borderLeftWidth', 'borderRightWidth', 'borderBottomWidth',
'borderTopStyle', 'borderLeftStyle', 'borderRightStyle', 'borderBottomStyle',
'marginTopWidth', 'marginLeftWidth', 'marginRightWidth', 'marginBottomWidth',
'paddingTopWidth', 'paddingLeftWidth', 'paddingRightWidth', 'paddingBottomWidth'];
var svgDirect = {
queryUrl : wgScriptPath + qUrlJson + wgPageName + qUrlList + qUrlInfo + qCallbackDefault,
queryCommonsUrl : commonsDomain + wgScriptPath + qUrlJson
+ wgCanonicalNamespace + ':' + wgTitle + qUrlList + qUrlInfo + qCallbackDefault,
queryFileUrl : wgScriptPath + qUrlJson + wgPageName + qUrlInfo + qCallbackFile,
query : {},
createWrapper : function (img, imgInfo) {
var svg = document.createElementNS( XMLNS_SVG, "svg:svg" );
svg.setAttribute( "width", img.width );
svg.setAttribute( "height", img.height );
svg.style.minWidth = img.width + "px";
svg.style.minHeight = img.height + "px";
var imgStyle = document.defaultView.getComputedStyle(img, null);
for ( st in imgStyleAtts )
svg.style[imgStyleAtts[st]] = imgStyle[imgStyleAtts[st]];
svg.setAttribute( "version", "1.1" );
svg.setAttribute( "viewBox", "0 0 " + imgInfo.width + " " + imgInfo.height );
//Firefox workaround
if ( is_gecko ) {
var fo = document.createElementNS( XMLNS_SVG, "svg:foreignObject" );
fo.setAttribute( "x", "0" );
fo.setAttribute( "y", "0" );
fo.setAttribute( "width", "100%" );
fo.setAttribute( "height", "100%" );
var obj = document.createElementNS( XMLNS_XHTML, "xhtml:object" );
obj.setAttribute( "data", imgInfo.url );
obj.setAttribute( "type", MIME_SVG );
obj.setAttribute( "width", imgInfo.width + 1 );
obj.setAttribute( "height", imgInfo.height + 1 );
fo.appendChild ( obj );
svg.appendChild ( fo );
} else {
var image = document.createElementNS( XMLNS_SVG, "svg:image" );
image.setAttribute( "x", "0" );
image.setAttribute( "y", "0" );
image.setAttribute( "width", "100%" );
image.setAttribute( "height", "100%" );
image.setAttributeNS( XMLNS_XLINK, "xlink:href", imgInfo.url );
svg.appendChild ( image );
}
img.parentNode.replaceChild( svg, img );
},
execute : function () {
//Only for Internet Explorer with Adobe SVG Plugin: Reroute svg fragment to ASV
if ( is_ie ) {
var headID = document.getElementsByTagName("head")[0];
var obj = document.createElement('object');
obj.setAttribute('id', 'AdobeSVG');
obj.setAttribute('classid', "clsid:78156a80-c6a1-4bbf-8e6a-3cd390eeb4e2");
txt = document.createTextNode("Adobe SVG Viewer is required for this to work");
obj.appendChild(txt);
headID.appendChild(obj);
txt = document.createTextNode("<?import namespace=\"svg\" implementation=\"#AdobeSVG\"?>");
headID.appendChild(txt);
}
if ( wgNamespaceNumber == 6 ) {
mw.loader.load(svgDirect.queryFileUrl);
} else {
mw.loader.load(svgDirect.queryUrl);
}
},
resultArrived : function ( res ) {
if ( !res || !res.query || !res.query.pages ) return;
for ( var page in res.query.pages ) {
if ( !res.query.pages[page].imageinfo ) continue;
svgDirect.query[res.query.pages[page].title] = res.query.pages[page].imageinfo[0];
}
if ( res && res['query-continue'] ) {
var c = res['query-continue'];
mw.loader.load(svgDirect.queryUrl + '&gimcontinue='
+ encodeURIComponent( c.images.gimcontinue ) );
} else svgDirect.findSvgs();
},
fileResultArrived : function ( res ) {
if ( !res || !res.query || !res.query.pages ) return;
for ( var page in res.query.pages ) {
if ( !res.query.pages[page].imageinfo ) continue;
svgDirect.query[res.query.pages[page].title] = res.query.pages[page].imageinfo[0];
}
if ( wgArticleId == 0 ) {
mw.loader.load(svgDirect.queryCommonsUrl);
} else {
mw.loader.load(svgDirect.queryUrl);
}
},
findSvgs : function () {
var imgs = document.getElementsByTagName("img");
var len = imgs.length;
var imgId = new Array(len);
for ( var i = 0; i<len; i++ ) {
var UID = "uniqueImg_" + i;
imgs[i].id = UID;
imgId[i] = UID;
}
for ( var i = 0; i < len; i++ ) {
var img = document.getElementById( imgId[i] );
var srcStr = img.getAttribute("src");
srcStr = srcStr.substr( 0, srcStr.lastIndexOf( "/" ) );
srcStr = srcStr.replace( /\057thumb/, "" );
var imgInfo;
for ( var info in svgDirect.query ) {
imgInfo = svgDirect.query[info];
if ( imgInfo.url == srcStr ) break;
imgInfo = {};
}
if ( imgInfo === undefined ) continue;
if ( imgInfo.mime == MIME_SVG ) svgDirect.createWrapper( img, imgInfo );
}
}
}
$( svgDirect.execute );