Greasy Fork

heise.de Easy Reading

Makes reading heise news a little more comfortable

目前为 2015-03-02 提交的版本。查看 最新版本

// ==UserScript==
// @id             heise.de-8280af0b-4f9b-487e-95b3-45fff377348e
// @name           heise.de Easy Reading
// @name:de        heise.de Easy Reading
// @version        1.3
// @namespace      
// @author         SpineEyE
// @description    Makes reading heise news a little more comfortable
// @description:de Macht heise lesen etwas angenehmer
// @include        http://www.heise.de/*
// @run-at         document-idle
// @grant          GM_addStyle
// ==/UserScript==
// heise.de Cleaner user script
// Copyright 2011-2015, SpineEyE
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html
//
// -----------------------------------------------------------------------------
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
// 
// changelog
// v1.3 - 02.03.2015: Added: Back Button for the end of a gallery
// v1.2.5 - 12.02.2015: Fix: lead image anti popup
// v1.2.4 - 18.12.2014: Clicking the article's lead image ("aufmacherbild") will redirect to full size image instead of heise's container page for it (only some pictures are actually inserted downsized).
// v1.2.3 - 18.12.2014: Fix: Links at the top werent clickable
// v1.2.2 - 14.10.2014: Compatibility fix for Greasemonkey
// v1.2.1 - 22.03.2014: Fixed meldung_wrapper text content to have
//						 the new style as well
// v1.2 - 01.03.2014: Now uses GM_addStyle to change article style.
//						Text in <pre> tags is readable in whole width
// v1.1.1 - 16.11.2013: fixed h2-link-construction 
//

(function () { // function wrapper for Opera
//console.log("starting");

// change font

if (document.getElementsByClassName('meldung_wrapper').length > 0) {
	GM_addStyle(
		'.meldung_wrapper, .meldung_wrapper p, .meldung_wrapper h5 {' +
			'font-family: Georgia,"Times New Roman",serif;' +
			'line-height: 155%;' +
			'padding: 0.5em 0;' +
			'font-size: 1em !important;' +
			'letter-spacing: 0.2px;' +
		'}'
	);
}

if (document.getElementsByClassName('artikel_content').length > 0) {
	GM_addStyle(
		'.artikel_content article p {' +
			'font-family: Georgia,"Times New Roman",serif;' +
			'line-height: 155%;' +
			'padding: 0.5em 0;' +
			'font-size: 1em !important;' +
			'letter-spacing: 0.2px;' +
		'}'
	);
}

/* remove top margin */

document.getElementById("container_content").style.top = 0;
document.getElementById("container").removeChild(document.getElementById("bannerzone"));

/* fix to make text in <pre> tags visible over the whole width */

GM_addStyle(
	'pre {' +
		'position: relative;' +
		'z-index: 1;' +
		'background-color: #FFFFFF;' +
	'}' +
	'pre:hover {' +
		'display: table-caption;' +
		'margin-top: 0' +
	'}'
);
/* prevent image popups, rather insert normal hyperlink 
	bild_links, bild_rechts
 **/
var inlineImages = document.evaluate('//span[starts-with(@class,"bild_")]', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null),
	i, span, img, a, bigImageURL;
for(i = 0; i < inlineImages.snapshotLength; i++) {
console.log("Snapshot item " + i);
	span = inlineImages.snapshotItem(i);
	img = span.children[0];
	
	a = document.createElement('a');
	bigImageURL = img.getAttribute('data-zoom-src');
	if (!bigImageURL) continue;
	a.href = bigImageURL;
	
	// cloning a node removes all event listeners, so the popup as well
	a.appendChild(img.cloneNode(false));
	
	span.insertBefore(a, img);
	span.removeChild(img);
}

/* link to full size picture for aufmacherbild */

var aAufmacher   = document.getElementsByClassName("aufmacherbild")[0].children[0];
var imgAufmacher = aAufmacher.children[0];

if (imgAufmacher) {

	a = document.createElement('a');

	// class for the zoom overlay image in the bottom right corner
	a.setAttribute('class', 'image_zoom');
	// console.log(imgAufmacher.src.replace(/\/scale.*?\/imgs\//i, "/imgs/"));
	a.href = imgAufmacher.src.replace(/\/scale.*?\/imgs\//i, "/imgs/");

	// cloning a node removes all event listeners, so the popup as well
	a.appendChild(imgAufmacher.cloneNode(false));

	document.getElementsByClassName("aufmacherbild")[0].insertBefore(a, aAufmacher);
	document.getElementsByClassName("aufmacherbild")[0].removeChild(aAufmacher);
}

/* gallery fix: enable back button on advertisement slide */

if (document.querySelector(".gallery")) {
	a = document.createElement("a");
	a.setAttribute("data-slide", "prev");
	a.setAttribute("class", "gallery-control slide slide-prev greasy-added");
	a.innerHTML = '<span class="fa fa-angle-left fa-4x fa-inverse"></span>';
	// we need two of this, make deep copy
	var b = a.cloneNode(true);
	
	/* Several reasons why this runs as an interval:
	 * 1) I have found no way to hook into the event emitter
	 * 2) Every time changing tabs and returning to the page removes the button
	 * 3) Every time this back button is pressed, it's removed
	 * We could probably use the MutationObserver ... Maybe I'll look into it
	 * to see if it's lower on resources
	 */
	var galleryGuard = window.setInterval(function(){
		if (document.querySelector('.image-num').innerHTML.indexOf("Zurück zum Start") !== -1
			&& document.querySelectorAll('.greasy-added').length != 2) {
			
			
			// modal window / fullscreen mode?
			// probably better to add the button to both views
			//if (document.querySelector(".gallery .heise-modal").style.display != "none") {
				document.querySelector(".image-stage").appendChild(a);
			//}
			//else {
				document.querySelector(".gallery-inner").appendChild(b);
			//}
		}
	}, 200);
}

	
})(); // function wrapper for Opera