Merge pull request #279 from ryrun/patch-1
Speed up line numbering of huge pads. Tested on chrome and firefox.pull/280/head
commit
d9686c7646
|
@ -5657,31 +5657,17 @@ function OUTER(gscope)
|
||||||
{
|
{
|
||||||
var newNumLines = rep.lines.length();
|
var newNumLines = rep.lines.length();
|
||||||
if (newNumLines < 1) newNumLines = 1;
|
if (newNumLines < 1) newNumLines = 1;
|
||||||
if (newNumLines != lineNumbersShown)
|
//update height of all current line numbers
|
||||||
{
|
|
||||||
var container = sideDivInner;
|
|
||||||
var odoc = outerWin.document;
|
|
||||||
while (lineNumbersShown < newNumLines)
|
|
||||||
{
|
|
||||||
lineNumbersShown++;
|
|
||||||
var n = lineNumbersShown;
|
|
||||||
var div = odoc.createElement("DIV");
|
|
||||||
div.appendChild(odoc.createTextNode(String(n)));
|
|
||||||
container.appendChild(div);
|
|
||||||
}
|
|
||||||
while (lineNumbersShown > newNumLines)
|
|
||||||
{
|
|
||||||
container.removeChild(container.lastChild);
|
|
||||||
lineNumbersShown--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (currentCallStack && currentCallStack.domClean)
|
if (currentCallStack && currentCallStack.domClean)
|
||||||
{
|
{
|
||||||
var a = sideDivInner.firstChild;
|
var a = sideDivInner.firstChild;
|
||||||
var b = doc.body.firstChild;
|
var b = doc.body.firstChild;
|
||||||
|
var n = 0;
|
||||||
while (a && b)
|
while (a && b)
|
||||||
{
|
{
|
||||||
|
if(n > lineNumbersShown) //all updated, break
|
||||||
|
break;
|
||||||
|
|
||||||
var h = (b.clientHeight || b.offsetHeight);
|
var h = (b.clientHeight || b.offsetHeight);
|
||||||
if (b.nextSibling)
|
if (b.nextSibling)
|
||||||
{
|
{
|
||||||
|
@ -5695,10 +5681,42 @@ function OUTER(gscope)
|
||||||
if (h)
|
if (h)
|
||||||
{
|
{
|
||||||
var hpx = h + "px";
|
var hpx = h + "px";
|
||||||
if (a.style.height != hpx) a.style.height = hpx;
|
if (a.style.height != hpx) {
|
||||||
|
a.style.height = hpx;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
a = a.nextSibling;
|
a = a.nextSibling;
|
||||||
b = b.nextSibling;
|
b = b.nextSibling;
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newNumLines != lineNumbersShown)
|
||||||
|
{
|
||||||
|
var container = sideDivInner;
|
||||||
|
var odoc = outerWin.document;
|
||||||
|
var fragment = odoc.createDocumentFragment();
|
||||||
|
while (lineNumbersShown < newNumLines)
|
||||||
|
{
|
||||||
|
lineNumbersShown++;
|
||||||
|
var n = lineNumbersShown;
|
||||||
|
var div = odoc.createElement("DIV");
|
||||||
|
//calculate height for new line number
|
||||||
|
var h = (b.clientHeight || b.offsetHeight);
|
||||||
|
if (b.nextSibling)
|
||||||
|
h = b.nextSibling.offsetTop - b.offsetTop;
|
||||||
|
if(h) // apply style to div
|
||||||
|
div.style.height = h +"px";
|
||||||
|
|
||||||
|
div.appendChild(odoc.createTextNode(String(n)));
|
||||||
|
fragment.appendChild(div);
|
||||||
|
b = b.nextSibling;
|
||||||
|
}
|
||||||
|
container.appendChild(fragment);
|
||||||
|
while (lineNumbersShown > newNumLines)
|
||||||
|
{
|
||||||
|
container.removeChild(container.lastChild);
|
||||||
|
lineNumbersShown--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue