
Fix getting a NaN maxFontSize in makeVList because symbolNodes don't have a maxFontSize property. Test plan: - Make sure no huxley screenshots changed Auditors: alpert
105 lines
2.7 KiB
JavaScript
105 lines
2.7 KiB
JavaScript
// These objects store the data about the DOM nodes we create, as well as some
|
|
// extra data. They can then be transformed into real DOM nodes with the toDOM
|
|
// function. They are useful for both storing extra properties on the nodes, as
|
|
// well as providing a way to easily work with the DOM.
|
|
|
|
var createClass = function(classes) {
|
|
classes = classes.slice();
|
|
for (var i = classes.length - 1; i >= 0; i--) {
|
|
if (!classes[i]) {
|
|
classes.splice(i, 1);
|
|
}
|
|
}
|
|
|
|
return classes.join(" ");
|
|
};
|
|
|
|
function span(classes, children, height, depth, maxFontSize, style) {
|
|
this.classes = classes || [];
|
|
this.children = children || [];
|
|
this.height = height || 0;
|
|
this.depth = depth || 0;
|
|
this.maxFontSize = maxFontSize || 0;
|
|
this.style = style || {};
|
|
}
|
|
|
|
span.prototype.toDOM = function() {
|
|
var span = document.createElement("span");
|
|
|
|
span.className = createClass(this.classes);
|
|
|
|
for (var style in this.style) {
|
|
if (this.style.hasOwnProperty(style)) {
|
|
span.style[style] = this.style[style];
|
|
}
|
|
}
|
|
|
|
for (var i = 0; i < this.children.length; i++) {
|
|
span.appendChild(this.children[i].toDOM());
|
|
}
|
|
|
|
return span;
|
|
};
|
|
|
|
function documentFragment(children, height, depth, maxFontSize) {
|
|
this.children = children || [];
|
|
this.height = height || 0;
|
|
this.depth = depth || 0;
|
|
this.maxFontSize = maxFontSize || 0;
|
|
}
|
|
|
|
documentFragment.prototype.toDOM = function() {
|
|
var frag = document.createDocumentFragment();
|
|
|
|
for (var i = 0; i < this.children.length; i++) {
|
|
frag.appendChild(this.children[i].toDOM());
|
|
}
|
|
|
|
return frag;
|
|
};
|
|
|
|
function symbolNode(value, height, depth, italic, classes, style) {
|
|
this.value = value || "";
|
|
this.height = height || 0;
|
|
this.depth = depth || 0;
|
|
this.italic = italic || 0;
|
|
this.classes = classes || [];
|
|
this.style = style || {};
|
|
this.maxFontSize = 0;
|
|
}
|
|
|
|
symbolNode.prototype.toDOM = function() {
|
|
var node = document.createTextNode(this.value);
|
|
var span = null;
|
|
|
|
if (this.italic > 0) {
|
|
span = document.createElement("span");
|
|
span.style.marginRight = this.italic + "em";
|
|
}
|
|
|
|
if (this.classes.length > 0) {
|
|
span = span || document.createElement("span");
|
|
span.className = createClass(this.classes);
|
|
}
|
|
|
|
for (var style in this.style) {
|
|
if (this.style.hasOwnProperty(style)) {
|
|
span = span || document.createElement("span");
|
|
span.style[style] = this.style[style];
|
|
}
|
|
}
|
|
|
|
if (span) {
|
|
span.appendChild(node);
|
|
return span;
|
|
} else {
|
|
return node;
|
|
}
|
|
};
|
|
|
|
module.exports = {
|
|
span: span,
|
|
documentFragment: documentFragment,
|
|
symbolNode: symbolNode
|
|
};
|