blob: 3e817b15ee79de1041d39bad98c0cbc0ea7b827e [file] [log] [blame]
library text_scaling;
import "dart:html";
var TOLERANCE = 0.01;
var FONT_SIZE_START = 10;
var FONT_SIZE_BASELINE = 12;
var FONT_SIZE_STEP = 0.25;
var FONT_SIZE_END = 25;
Text numberToNode(num n) {
return new Text(n.toStringAsFixed(2));
}
Element createElement(String tagName, [String opt_textContent, String opt_className]) {
Element el = new Element.tag(tagName);
if (opt_className!=null) {
el.className = opt_className;
}
if (opt_textContent!=null) {
el.append(new Text(opt_textContent));
}
return el;
}
int runTest(Element containerEl, String pangram, [String opt_writingMode]) {
var cont = document.getElementById('test');
var el = createElement('div', null, 'header');
el.append(createElement('div', 'Font Size'));
el.append(createElement('div', 'Width'));
el.append(createElement('div', 'Normalized'));
el.append(createElement('div', 'Diff'));
el.append(createElement('span', 'Content'));
containerEl.append(el);
var referenceElement;
for (var fontSize = FONT_SIZE_START;
fontSize < FONT_SIZE_END;
fontSize += FONT_SIZE_STEP) {
var el = createElement('div');
el.append(createElement('div'));
el.append(createElement('div'));
el.append(createElement('div'));
el.append(createElement('div', null, 'results'));
var textSpan = createElement('span');
el.append(textSpan);
textSpan.append(new Text(pangram));
textSpan.style.fontSize = "${fontSize}px";
containerEl.append(el);
if (fontSize == FONT_SIZE_BASELINE) {
referenceElement = el;
}
}
referenceElement.className = 'reference';
var rect = referenceElement.lastChild.getBoundingClientRect();
var expectedWidth = opt_writingMode == 'vertical' ? rect.height : rect.width;
var failures = 0;
for (int i = 0; i<containerEl.children.length-1; i++) {
var row = containerEl.children[i + 1];
var rect = row.lastChild.getBoundingClientRect();
var fontSize = FONT_SIZE_START + (FONT_SIZE_STEP * i);
var width = opt_writingMode == 'vertical' ? rect.height : rect.width;
var normalizedWidth = (width / fontSize) * FONT_SIZE_BASELINE;
row.children[0].append(numberToNode(fontSize));
row.children[1].append(numberToNode(width));
row.children[2].append(numberToNode(normalizedWidth));
row.children[3].append(numberToNode(normalizedWidth - expectedWidth));
if ((expectedWidth - normalizedWidth).abs() <= TOLERANCE) {
row.classes.add('size-pass');
} else {
print("faiure: $expectedWidth != $normalizedWidth");
row.classes.add('size-fail');
failures++;
}
}
return failures;
}