Lang-8 - "All Corrections" View Enhancer

Easier to read and view corrections in the "All Corrections" view. - https://greasyfork.dpdns.org/en/users/3656-kaiko

As of 27.07.2015. See ბოლო ვერსია.

// ==UserScript==
// @name        Lang-8 - "All Corrections" View Enhancer
// @namespace   Lang8LTR
// @description	Easier to read and view corrections in the "All Corrections" view. - https://greasyfork.dpdns.org/en/users/3656-kaiko
// @include     http://lang-8.com/*/journals/*
// @include     https://lang-8.com/*/journals/*
// @version     1
// @grant       none
// ==/UserScript==

/*
Remove strike-through text on corrections, "All Corrections" view and default.
All Corrections View:
	Expands the view more dynamically for larger displays.
	Removes "No correction needed" green text messages.
	Re-injects the comment icon for comments, as they didn't always appear.
	Absurd hacked in feature: Removes corrections that are the same as your entry's sentence, but not duplicates of the same correction from others)
	Removes empty 'correct' fields that overlap their icons and spacing.
	Removes unnecessary and large spacing between corrections.
	Inserts a grey background for corrections to differentiate them from your written entry.
*/

function resizeAllCorrectionsWindow(){
	var allCorrectionsParent = document.getElementById("allCorrectionsPanel_c");
	var allCorrections = document.getElementById("allCorrectionsPanel");
	var heightBox = allCorrections.getElementsByClassName("bd")[0];
	if (allCorrectionsParent){
		//Resize the window
		var w = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
		var h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
		allCorrections.style.width = w/1.5 + "px";
		heightBox.style.height = h/1.5 + "px";
		//ReCenter it
		allCorrectionsParent.style.left = "16.5%";
		allCorrectionsParent.style.top = parseFloat("100%") + document.documentElement.scrollTop + "px";
	}
}

window.onresize = resizeAllCorrectionsWindow;

// Credit: https://stackoverflow.com/a/6318729
RegExp.escape = function(text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}

document.getElementById("showAll").onclick = function showallexecuteLineThroughRemoval() {
	var allCorrectionsParent = document.getElementById("allCorrectionsPanel_c");
	var allCorrections = document.getElementById("allCorrectionsPanel");
	var heightBox = allCorrections.getElementsByClassName("bd")[0];
	resizeAllCorrectionsWindow();
	
	//Remove "All Corrections" line-through
	var b = allCorrections.getElementsByTagName("span");
	for (i = 0; i < b.length; ++i) {
		if (b[i].style.textDecorationLine){
			b[i].innerHTML = "";
		}
	}
	//Remove duplicate non-corrected lines from our entry, for further readability and less confusion
	//Hacked-in absurdly as Lang-8's developers didn't correctly use tags around our written text, and corrections.
	//TODO: Sanity check for whether we have more than one match in corrections, and if that increases +1 compared to innerHTML, to then safely remove them.
	var allCorrections = document.getElementById("allCorrectionsPanel");
	var bc = allCorrections.textContent;
	var bd = allCorrections.getElementsByClassName("correct");
	//First, convert our htmlcollection to an array
	var arr = [];
	for (i = 0; i < bd.length; ++i){
		arr.push(bd[i].textContent);
	}
	//Sort it
	var sortedArr = arr.sort();
	var tempMatchObj = {};
	var tempMatches = 0;
	//Find duplicates and add it to a key:value object, along with an int of how many of that duplicate we had
	for (i = 0; i < sortedArr.length; ++i){
		if (sortedArr[i] === sortedArr[i+1]){
			tempMatches++;
			tempMatchObj[sortedArr[i]] = tempMatches;
		}
	}
	//Check this int of duplicate matches against the entirety of the html content
	//If we have more matches of the same than our corrections did, then remove the correction as that's the same sentence written by the author
	//Else, keep the correction since more than one corrector has corrected the same mistakes in the same way, creating a duplicate - which we keep for sanity.
	for(key in tempMatchObj) {
		if(tempMatchObj.hasOwnProperty(key)) {
			var value = tempMatchObj[key];
			var toMatch = RegExp.escape(key);
			var matchCount  = (bc.match(toMatch, 'g')||[]).length;
			if (matchCount >= 2 && matchCount > value ){
				for (i = 0; i < bd.length; ++i) {
					if (bd[i].textContent == key){
						bd[i].textContent = "-";
					}
				}
			}
		}
	}
	//Remove default NoCorrectionNecessary message
	var c = allCorrections.getElementsByClassName("corrected perfect");
	for (i = 0; i < c.length; ++i) {
		c[i].innerHTML = "";
	}
	//Reinsert comment image next to comments since they don't always have one
	var d = allCorrections.getElementsByClassName("correction_comment");
	for (i = 0; i < d.length; ++i) {
		d[i].innerHTML = '<img alt="Comment" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAMAAABhq6zVAAAANlBMVEV9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3AS/7wAAAAEXRSTlMACTReYWJmdpaf7e7v8PHy93y2WnUAAAA2SURBVHjancc3DgAgEMTAJeew//8sFKcTNVPZ8IOiO1SqBj6+ZlBNhEWxPK5MFgORd4RKVuIAotwHM1W7LmAAAAAASUVORK5CYII" />' + " " + d[i].innerHTML + "<br />";
		d[i].className = '';
	}
	//Remove empty 'correct' fields
	var e = allCorrections.getElementsByClassName("correct");
	for (i = 0; i < e.length; ++i) {
		if (e[i].textContent == ''){
			e[i].className = '';
		}
	}
	//Remove some unnecessary spacing
	var toRep = heightBox.innerHTML;
	var toRepB = toRep.replace(/<br>/g, "");
	var toRepC = toRepB.replace(/<p><\/p>/g, "");
	var toRepD = toRepC.replace(/<li class="corrected perfect"><\/li>/g, "");
	var toRepE = toRepD.replace("Title", "Title<br>");
	var toRepF = toRepE.replace("Main Body", "Main Body<br>");
	heightBox.innerHTML = toRepF;
	//Break up our corrections with a background
	var bb = allCorrections.getElementsByClassName("correction_field");
	for (i = 0; i < bb.length; ++i) {
		bb[i].style.backgroundColor = "#E5E5E5"
	}
};

window.onload = function onloadexecuteLineThroughRemoval(){
	//Remove correction posts' themselves' line-through
	var a = document.getElementsByClassName("sline");
	for (i = 0; i < a.length; ++i) {
		a[i].innerHTML='';
	}
}
长期地址
遇到问题?请前往 GitHub 提 Issues,或加Q群1031348184

赞助商

Fishcpy

广告

Rainyun

注册一下就行

Rainyun

一年攒够 12 元