From bfc6e8df881b2a7f9fa610e691d329f6ebdad7ca Mon Sep 17 00:00:00 2001 From: Alon Levy Date: Sun, 7 Dec 2014 15:51:58 +0200 Subject: measure: don't do the crazy computed css copy. use minus height trick. Fixes #194 --- src/rz_core.js | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) (limited to 'src/rz_core.js') diff --git a/src/rz_core.js b/src/rz_core.js index ad6755b3..39440385 100644 --- a/src/rz_core.js +++ b/src/rz_core.js @@ -30,15 +30,8 @@ var node_text_dx = 15, * edit_link(@sibling, @link) */ var svgInput = (function() { - var measure_span; - - function createMeasureSpan(parent) { - measure_span = document.createElement('span'); - measure_span.setAttribute('id', 'measure'); - measure_span.style.display = 'inline'; - measure_span.style.visibility = 'hidden'; - parent.appendChild(measure_span); - } + var measure_node = $('#measure-node')[0], + measure_link = $('#measure-link')[0]; function appendForeignElementInputWithID(base, elemid, width, height) { @@ -55,16 +48,21 @@ var svgInput = (function() { fo.appendChild(body); base.appendChild(fo); input.setAttribute('id', elemid); - createMeasureSpan(body); return input; } - function measure(e, text) + function measure(e_raw, text) { - measure_span.style.cssText = window.getComputedStyle(e).cssText; - measure_span.style.visibility = 'none'; - measure_span.innerHTML = text; - return measure_span.getBoundingClientRect().width; // $().width() works too + var span, + e = $(e_raw); + + if (e.attr('class').indexOf('nodetext') == -1) { + span = measure_link; + } else { + span = measure_node; + } + span.innerHTML = text; + return span.getBoundingClientRect().width; // $().width() works too } function onkeydown(e) { @@ -98,7 +96,7 @@ var svgInput = (function() { }; function resize_measure(e) { - resize(measure(e.target, $(e.target).val()) + 30); + resize(measure(e.target.parentNode.parentNode.parentNode.querySelector('text'), $(e.target).val()) + 30); } function resize(new_width) { -- cgit v1.3.1