User:Cobaltcigs/DiffPreviewFindLine.js

function GetCharacterIndices(s, c) { var a = []; for(var i = 0; i < s.length; i++) if(s[i] === c) a.push(i); return a;	}

function FindLine(num) { var wpTextbox1 = document.getElementById("wpTextbox1"); var indices = GetCharacterIndices(wpTextbox1.value, '\n'); indices.unshift(-1); var start = indices[num-1]+1, end = indices[num]; var tmp = wpTextbox1.value; location.hash = ""; wpTextbox1.scrollTop = 0; wpTextbox1.value = tmp.substring(0, end); wpTextbox1.scrollTop = wpTextbox1.scrollHeight; wpTextbox1.value = tmp; location.hash = "#wpTextbox1"; wpTextbox1.selectionStart = wpTextbox1.selectionEnd = start; wpTextbox1.blur; wpTextbox1.focus; wpTextbox1.setSelectionRange(start, end); }

function DiffPreviewFindLineSetup { var wikiDiff = document.getElementById("wikiDiff"); var isShowChanges = wikiDiff && (mw.config.get('wgAction') == "submit"); if(!isShowChanges) return; var trs = wikiDiff.getElementsByTagName("tr"), lineNum = 0; for(var i = 1; i < trs.length; i++) { var tds = trs[i].getElementsByTagName("td"); if(tds.length == 2) { lineNum = parseInt(tds[1].innerText.replace(/\D/g, "")); continue; }		var last = tds[tds.length-1]; if(/\bdiff-empty\b/.test(last.className)) continue; last.setAttribute("onclick", "FindLine(" + lineNum + ")"); lineNum++; }	}