Large

Spiegel.de for Netbooks

By El_Lutzo Last update Jan 2, 2011 — Installed 487 times.

There are 15 previous versions of this script.

// ==UserScript==
// @name           Spiegel.de for Netbooks
// @namespace      *
// @include        http://www.spiegel.de/*/*
// @include        https://www.spiegel.de/*/*
// @include        http://www1.spiegel.de/*
// @include        https://www1.spiegel.de/*
// @exclude        http://www.spiegel.de/
// @exclude        https://www.spiegel.de/
// ==/UserScript==

/**
 * (en) Removes node by its id
 * (de) Entfernt einen Knoten anhand seiner ID
 */
function removeNodeById(id) {
    var e = document.getElementById(id);
    
    /* (en) if an element with this id exists, remove it from its parent */
    /* (de) wenn ein Element mit dieser ID existiert, entferne es 
     *      aus der Liste der Kinderknoten des Vaterknotens 
     */
    if (e) {
    	e.parentNode.removeChild(e);
    }
}

/**
 * (en) Removes node by its class name
 * (de) Entfernt einen Knoten anhand seiner Klassenbezeichnung
 */
function removeNodeByClass(tag, c) {
	var es = document.getElementsByTagName(tag);
	
	/* (en) walk through the list of elements with this tag name
	 *      and remove the ones with this class name from its parent
	 */
	/* (de) gehe die Liste der Elemente durch, die den angegebenen Tag-Namen
	 *      besitzen, und entferne diejenigen Elemente, die die angegebene
	 *      Klassenbezeichnung besitzen, aus der Liste der Kinderknoten des 
	 *      Vaterknotens
	 */
	for (var i = 0; i <= (es.length - 1); i++) {
		if (es[i].className == c) {
			es[i].parentNode.removeChild(es[i]);
		}
	}
}

/**
 * (en) Removes links that have the given string in their url
 * (de) Entfernt diejenigen Links, die die angegebene Zeichenkette 
 *      in ihrer URL enthalten
 */
function removeLinkByUrlPart(url) {
	var es = document.getElementsByTagName("a");
	
	/* (en) walk through the list of links and remove the ones with the
	 *      given string in their url from their parents
	 */
	/* (de) gehe die Liste der Links durch und entferne diejenigen Links,
	 *      die in ihrer URL die angegebene Zeichenkette enthalten, aus
	 *      der Liste der Kinderknoten des Vaterknotens
	 */
	for (var i = 0; i <= (es.length - 1); i++) {
		if (es[i].href.indexOf(url) != -1) {
			es[i].parentNode.removeChild(es[i]);
		}
	}
}

/**
 * (en) Display the teaser before any picture, gallery of pictures, video 
 *      or other asset
 * (de) Zeige den Artikel-Anreiszer vor einem evtl. vorhandenen Bild,
 *      einer Galerie von Bildern, einem Video oder einem anderen Asset
 */
function swapPictureAndIntroTeaser() {
	var es = document.getElementsByTagName("div");
	var pic;
	var found = false;
	
	var picClass      = "spPanoImage";
	var videoClass    = "spPanoPlayer"; 
	var galleryClass  = "spArticleImageBox spAssetAligncenter";
        var galleryClass2 = "spGalleryBig";
        var assetClass    = "spAsset"; 
	
	/* (en) search for the first div element with class names as below */
	/* (de) suche nach dem ersten div-Element, das einen Klassennamen wie
	 *      unten angegeben besitzt.
	 */
	for (var i = 0; !found && i <= (es.length - 1); i++) {
		if (es[i].className == picClass       ||  /* picture            OR */
		    es[i].className == videoClass     ||  /* video              OR */
                    es[i].className == galleryClass   ||  /* picture gallery    OR */
                    es[i].className == galleryClass2  ||  /* picture gallery 2  OR */
                    es[i].className == assetClass) {      /* asset                 */
	                found = true; // break for-loop, just need the first one
			pic = es[i];
		}
	}
	
	/* (en) get the teaser */
	/* (de) der Anreiszer */
	var teaser = document.getElementById("spIntroTeaser");	
	
	/* (en) if pic and teaser exist and 
	 *      the parent node of the parent node of pic exists and 
	 *      its id is "spArticleColumn", swap them 
	 */
	/* (de) wenn das Bild/die Bildergalerie/das Video/das Asset 
         *      und der Anreiszer 
	 *      existieren und der Vaterknoten des Vaterknotens des 
	 *      Bildes/der Bildergalerie/des Videos existiert und 
	 *      dessen ID gleich "spArticleColumn" ist, 
	 *      vertausche die beiden Elemente
	 */
	if (pic && teaser) {
		if (pic.parentNode.parentNode) {
			if (pic.parentNode.parentNode.id == "spArticleColumn") {
				var pic_clone = pic.cloneNode(true);
				var teaser_clone = teaser.cloneNode(true);
				pic.parentNode.replaceChild(teaser_clone, pic);
				teaser.parentNode.replaceChild(pic_clone, teaser);
			}
		}
	}
}

/**
 * (en) marks links to videos
 * (de) markiere Links, die zu Videos fuehren
 */
function markVideoLinks() {
	var es    = document.getElementsByTagName("a");
	var video = "www.spiegel.de/video/"; 
	
	/* (en) walk through the list of links and mark the ones 
	 *      that lead to videos by making them bold and italic
	 */
	/* (de) gehe die Liste der Links durch und markiere diejenigen Links,
	 *      die zu Videos fuehren, durch Fett- und Kursivdruck
	 */
	for (var i = 0; i <= (es.length - 1); i++) {
		if (es[i].href.indexOf(video) != -1) {
			es[i].style.fontWeight = "bold";
			es[i].style.fontStyle  = "italic";
		}
	}
}

/**
 * (en) check, if this page is a quiz
 * (de) teste, ob es sich bei dieser Seite um ein Quiz handelt
 */
function isNotQuiz() {
    var quiz = "www1.spiegel.de";
    var isQuiz = document.URL.indexOf(quiz) != -1;
    
    return (!(isQuiz));
}

/* (en) get rid of the header */
/* (de) entferne den Header-Bereich (farbige Flaeche
 *      und die Navigationsleisten im Kopfbereich der Seite)
 */
removeNodeById("spHeader");

/* (en) get rid ot the topic header */
/* (de) entferne den Verweis auf andere Seiten zu diesem Thema
 *      ("Dieser Beitrag ist Teil einer Themenseite ...")
 */
removeNodeById("spTopicHeader");

/* (en) remove all adserv.quality-channel.de links */
/* (de) entferne die Werbeeinblendungen, die nicht durch andere 
 *      Werbeblocker erreicht werden.
 */
removeLinkByUrlPart("adserv.quality-channel.de");

/* (en) swap Picture and IntroTeaser if it isn't a quiz */
/* (de) zeige den Artikel-Anreiszer vor dem Bild, einer 
 *      Bildergalerie, Video oder Asset, wenn es sich nicht
 *      um ein Quiz handelt
 */
if(isNotQuiz()) {
    swapPictureAndIntroTeaser();
}

/* (en) mark links to videos */
/* (de) markiere Links, die zu Videos fuehren
 */
markVideoLinks();