diff --git a/Gruntfile.js b/Gruntfile.js
index a5f8e6c137..022189c58c 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -54,7 +54,9 @@ module.exports = function(grunt) {
src: "plottable.js",
objectToExport: "Plottable",
deps: {
- "default": ["d3"],
+ "default": ["d3", "SVGTypewriter"],
+ "amd": ["d3", "svg-typewriter"],
+ "cjs": ["d3", "svg-typewriter"]
}
}
};
@@ -64,10 +66,6 @@ module.exports = function(grunt) {
src: ["license_header.txt", "plottable.js"],
dest: "plottable.js"
},
- svgtypewriter: {
- src: ["plottable.js", "./node_modules/svg-typewriter/svgtypewriter.js"],
- dest: "plottable.js"
- },
typings: {
src: ["plottable.d.ts"],
dest: "plottable-npm.d.ts",
@@ -262,7 +260,6 @@ module.exports = function(grunt) {
]);
grunt.registerTask("generateJS", [
- "concat:svgtypewriter",
"umd:all",
"concat:header",
"concat:typings",
diff --git a/package.json b/package.json
index 86e8ab628f..9702eac163 100644
--- a/package.json
+++ b/package.json
@@ -47,11 +47,11 @@
"mocha": "2.2.5",
"requirejs": "2.1.18",
"sinon": "1.16.1",
- "svg-typewriter": "0.3.0-beta.0",
"tslint": "3.15.1",
"typescript": "2.0.6"
},
"dependencies": {
- "d3": "^3.5.16"
+ "d3": "^3.5.16",
+ "svg-typewriter": "^0.3.0-beta.0"
}
}
diff --git a/plottable.js b/plottable.js
index a49a93263d..b59a69687d 100644
--- a/plottable.js
+++ b/plottable.js
@@ -7,18 +7,18 @@ Licensed under MIT (https://github.com/palantir/plottable/blob/master/LICENSE)
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module unless amdModuleId is set
- define(["d3"], function (a0) {
- return (root['Plottable'] = factory(a0));
+ define(["d3","svg-typewriter"], function (a0,b1) {
+ return (root['Plottable'] = factory(a0,b1));
});
} else if (typeof exports === 'object') {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like environments that support module.exports,
// like Node.
- module.exports = factory(require("d3"));
+ module.exports = factory(require("d3"),require("svg-typewriter"));
} else {
- root['Plottable'] = factory(root["d3"]);
+ root['Plottable'] = factory(root["d3"],root["SVGTypewriter"]);
}
-}(this, function (d3) {
+}(this, function (d3, SVGTypewriter) {
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
@@ -12561,1012 +12561,6 @@ var Plottable;
})(Components = Plottable.Components || (Plottable.Components = {}));
})(Plottable || (Plottable = {}));
-/*!
-SVG Typewriter 0.3.0-beta.0 (https://github.com/palantir/svg-typewriter)
-Copyright 2016 Palantir Technologies
-Licensed under MIT (https://github.com/palantir/svg-typewriter/blob/develop/LICENSE)
-*/
-
-(function (root, factory) {
- if (typeof define === 'function' && define.amd) {
- // AMD. Register as an anonymous module unless amdModuleId is set
- define(["d3"], function (a0) {
- return (root['SVGTypewriter'] = factory(a0));
- });
- } else if (typeof exports === 'object') {
- // Node. Does not work with strict CommonJS, but
- // only CommonJS-like environments that support module.exports,
- // like Node.
- module.exports = factory(require("d3"));
- } else {
- root['SVGTypewriter'] = factory(d3);
- }
-}(this, function (d3) {
-
-///
-var SVGTypewriter;
-(function (SVGTypewriter) {
- var Utils;
- (function (Utils) {
- var Methods;
- (function (Methods) {
- /**
- * Check if two arrays are equal by strict equality.
- */
- function arrayEq(a, b) {
- // Technically, null and undefined are arrays too
- if (a == null || b == null) {
- return a === b;
- }
- if (a.length !== b.length) {
- return false;
- }
- for (var i = 0; i < a.length; i++) {
- if (a[i] !== b[i]) {
- return false;
- }
- }
- return true;
- }
- Methods.arrayEq = arrayEq;
- /**
- * @param {any} a Object to check against b for equality.
- * @param {any} b Object to check against a for equality.
- *
- * @returns {boolean} whether or not two objects share the same keys, and
- * values associated with those keys. Values will be compared
- * with ===.
- */
- function objEq(a, b) {
- if (a == null || b == null) {
- return a === b;
- }
- var keysA = Object.keys(a).sort();
- var keysB = Object.keys(b).sort();
- var valuesA = keysA.map(function (k) { return a[k]; });
- var valuesB = keysB.map(function (k) { return b[k]; });
- return arrayEq(keysA, keysB) && arrayEq(valuesA, valuesB);
- }
- Methods.objEq = objEq;
- })(Methods = Utils.Methods || (Utils.Methods = {}));
- })(Utils = SVGTypewriter.Utils || (SVGTypewriter.Utils = {}));
-})(SVGTypewriter || (SVGTypewriter = {}));
-
-var SVGTypewriter;
-(function (SVGTypewriter) {
- var Utils;
- (function (Utils) {
- var DOM;
- (function (DOM) {
- function transform(s, x, y) {
- var xform = d3.transform(s.attr("transform"));
- if (x == null) {
- return xform.translate;
- }
- else {
- y = (y == null) ? 0 : y;
- xform.translate[0] = x;
- xform.translate[1] = y;
- s.attr("transform", xform.toString());
- return s;
- }
- }
- DOM.transform = transform;
- function getBBox(element) {
- var bbox;
- try {
- bbox = element.node().getBBox();
- }
- catch (err) {
- bbox = {
- x: 0,
- y: 0,
- width: 0,
- height: 0,
- };
- }
- return bbox;
- }
- DOM.getBBox = getBBox;
- })(DOM = Utils.DOM || (Utils.DOM = {}));
- })(Utils = SVGTypewriter.Utils || (SVGTypewriter.Utils = {}));
-})(SVGTypewriter || (SVGTypewriter = {}));
-
-///
-var SVGTypewriter;
-(function (SVGTypewriter) {
- var Utils;
- (function (Utils) {
- var Cache = (function () {
- /**
- * @constructor
- *
- * @param {string} compute The function whose results will be cached.
- * @param {(v: T, w: T) => boolean} [valueEq]
- * Used to determine if the value of canonicalKey has changed.
- * If omitted, defaults to === comparision.
- */
- function Cache(compute, valueEq) {
- if (valueEq === void 0) { valueEq = function (v, w) { return v === w; }; }
- this.cache = d3.map();
- this.compute = compute;
- this.valueEq = valueEq;
- }
- /**
- * Attempt to look up k in the cache, computing the result if it isn't
- * found.
- *
- * @param {string} k The key to look up in the cache.
- * @return {T} The value associated with k; the result of compute(k).
- */
- Cache.prototype.get = function (k) {
- if (!this.cache.has(k)) {
- this.cache.set(k, this.compute(k));
- }
- return this.cache.get(k);
- };
- /**
- * Reset the cache empty.
- *
- * @return {Cache} The calling Cache.
- */
- Cache.prototype.clear = function () {
- this.cache = d3.map();
- return this;
- };
- return Cache;
- }());
- Utils.Cache = Cache;
- })(Utils = SVGTypewriter.Utils || (SVGTypewriter.Utils = {}));
-})(SVGTypewriter || (SVGTypewriter = {}));
-
-///
-var SVGTypewriter;
-(function (SVGTypewriter) {
- var Utils;
- (function (Utils) {
- var Tokenizer = (function () {
- function Tokenizer() {
- this.WordDividerRegExp = new RegExp("\\W");
- this.WhitespaceRegExp = new RegExp("\\s");
- }
- Tokenizer.prototype.tokenize = function (line) {
- var _this = this;
- return line.split("").reduce(function (tokens, c) {
- return tokens.slice(0, -1).concat(_this.shouldCreateNewToken(tokens[tokens.length - 1], c));
- }, [""]);
- };
- Tokenizer.prototype.shouldCreateNewToken = function (token, newCharacter) {
- if (!token) {
- return [newCharacter];
- }
- var lastCharacter = token[token.length - 1];
- if (this.WhitespaceRegExp.test(lastCharacter) && this.WhitespaceRegExp.test(newCharacter)) {
- return [token + newCharacter];
- }
- else if (this.WhitespaceRegExp.test(lastCharacter) || this.WhitespaceRegExp.test(newCharacter)) {
- return [token, newCharacter];
- }
- else if (!(this.WordDividerRegExp.test(lastCharacter) || this.WordDividerRegExp.test(newCharacter))) {
- return [token + newCharacter];
- }
- else if (lastCharacter === newCharacter) {
- return [token + newCharacter];
- }
- else {
- return [token, newCharacter];
- }
- };
- return Tokenizer;
- }());
- Utils.Tokenizer = Tokenizer;
- })(Utils = SVGTypewriter.Utils || (SVGTypewriter.Utils = {}));
-})(SVGTypewriter || (SVGTypewriter = {}));
-
-///
-var SVGTypewriter;
-(function (SVGTypewriter) {
- var Utils;
- (function (Utils) {
- var StringMethods;
- (function (StringMethods) {
- /**
- * Treat all sequences of consecutive whitespace as a single " ".
- */
- function combineWhitespace(str) {
- return str.replace(/\s+/g, " ");
- }
- StringMethods.combineWhitespace = combineWhitespace;
- function isNotEmptyString(str) {
- return str && str.trim() !== "";
- }
- StringMethods.isNotEmptyString = isNotEmptyString;
- function trimStart(str, c) {
- if (!str) {
- return str;
- }
- var chars = str.split("");
- var reduceFunction = c ? function (s) { return s.split(c).some(isNotEmptyString); } : isNotEmptyString;
- return chars.reduce(function (s, c) { return reduceFunction(s + c) ? s + c : s; }, "");
- }
- StringMethods.trimStart = trimStart;
- function trimEnd(str, c) {
- if (!str) {
- return str;
- }
- var reversedChars = str.split("");
- reversedChars.reverse();
- reversedChars = trimStart(reversedChars.join(""), c).split("");
- reversedChars.reverse();
- return reversedChars.join("");
- }
- StringMethods.trimEnd = trimEnd;
- })(StringMethods = Utils.StringMethods || (Utils.StringMethods = {}));
- })(Utils = SVGTypewriter.Utils || (SVGTypewriter.Utils = {}));
-})(SVGTypewriter || (SVGTypewriter = {}));
-
-///
-var SVGTypewriter;
-(function (SVGTypewriter) {
- var Animators;
- (function (Animators) {
- var BaseAnimator = (function () {
- function BaseAnimator() {
- this.duration(BaseAnimator.DEFAULT_DURATION_MILLISECONDS);
- this.delay(0);
- this.easing(BaseAnimator.DEFAULT_EASING);
- this.moveX(0);
- this.moveY(0);
- }
- BaseAnimator.prototype.animate = function (selection) {
- var xForm = d3.transform("");
- xForm.translate = [this.moveX(), this.moveY()];
- selection.attr("transform", xForm.toString());
- xForm.translate = [0, 0];
- return this._animate(selection, { transform: xForm.toString() });
- };
- BaseAnimator.prototype._animate = function (selection, attr) {
- return selection.transition()
- .ease(this.easing())
- .duration(this.duration())
- .delay(this.delay())
- .attr(attr);
- };
- BaseAnimator.prototype.duration = function (duration) {
- if (duration == null) {
- return this._duration;
- }
- else {
- this._duration = duration;
- return this;
- }
- };
- BaseAnimator.prototype.moveX = function (shift) {
- if (shift == null) {
- return this._moveX;
- }
- else {
- this._moveX = shift;
- return this;
- }
- };
- BaseAnimator.prototype.moveY = function (shift) {
- if (shift == null) {
- return this._moveY;
- }
- else {
- this._moveY = shift;
- return this;
- }
- };
- BaseAnimator.prototype.delay = function (delay) {
- if (delay == null) {
- return this._delay;
- }
- else {
- this._delay = delay;
- return this;
- }
- };
- BaseAnimator.prototype.easing = function (easing) {
- if (easing == null) {
- return this._easing;
- }
- else {
- this._easing = easing;
- return this;
- }
- };
- /**
- * The default duration of the animation in milliseconds
- */
- BaseAnimator.DEFAULT_DURATION_MILLISECONDS = 300;
- /**
- * The default easing of the animation
- */
- BaseAnimator.DEFAULT_EASING = "exp-out";
- return BaseAnimator;
- }());
- Animators.BaseAnimator = BaseAnimator;
- })(Animators = SVGTypewriter.Animators || (SVGTypewriter.Animators = {}));
-})(SVGTypewriter || (SVGTypewriter = {}));
-
-///
-var __extends = (this && this.__extends) || function (d, b) {
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-};
-var SVGTypewriter;
-(function (SVGTypewriter) {
- var Animators;
- (function (Animators) {
- var UnveilAnimator = (function (_super) {
- __extends(UnveilAnimator, _super);
- function UnveilAnimator() {
- _super.call(this);
- this.direction("bottom");
- }
- UnveilAnimator.prototype.direction = function (direction) {
- if (direction == null) {
- return this._direction;
- }
- else {
- if (UnveilAnimator.SupportedDirections.indexOf(direction) === -1) {
- throw new Error("unsupported direction - " + direction);
- }
- this._direction = direction;
- return this;
- }
- };
- UnveilAnimator.prototype.animate = function (selection) {
- var attr = SVGTypewriter.Utils.DOM.getBBox(selection);
- var mask = selection.select(".clip-rect");
- mask.attr("width", 0);
- mask.attr("height", 0);
- switch (this._direction) {
- case "top":
- mask.attr("y", attr.y + attr.height);
- mask.attr("x", attr.x);
- mask.attr("width", attr.width);
- break;
- case "bottom":
- mask.attr("y", attr.y);
- mask.attr("x", attr.x);
- mask.attr("width", attr.width);
- break;
- case "left":
- mask.attr("y", attr.y);
- mask.attr("x", attr.x);
- mask.attr("height", attr.height);
- break;
- case "right":
- mask.attr("y", attr.y);
- mask.attr("x", attr.x + attr.width);
- mask.attr("height", attr.height);
- break;
- }
- this._animate(mask, attr);
- return _super.prototype.animate.call(this, selection);
- };
- UnveilAnimator.SupportedDirections = ["top", "bottom", "left", "right"];
- return UnveilAnimator;
- }(Animators.BaseAnimator));
- Animators.UnveilAnimator = UnveilAnimator;
- })(Animators = SVGTypewriter.Animators || (SVGTypewriter.Animators = {}));
-})(SVGTypewriter || (SVGTypewriter = {}));
-
-///
-var __extends = (this && this.__extends) || function (d, b) {
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-};
-var SVGTypewriter;
-(function (SVGTypewriter) {
- var Animators;
- (function (Animators) {
- var OpacityAnimator = (function (_super) {
- __extends(OpacityAnimator, _super);
- function OpacityAnimator() {
- _super.apply(this, arguments);
- }
- OpacityAnimator.prototype.animate = function (selection) {
- var area = selection.select(".text-area");
- area.attr("opacity", 0);
- var attr = {
- opacity: 1,
- };
- this._animate(area, attr);
- return _super.prototype.animate.call(this, selection);
- };
- return OpacityAnimator;
- }(Animators.BaseAnimator));
- Animators.OpacityAnimator = OpacityAnimator;
- })(Animators = SVGTypewriter.Animators || (SVGTypewriter.Animators = {}));
-})(SVGTypewriter || (SVGTypewriter = {}));
-
-///
-var SVGTypewriter;
-(function (SVGTypewriter) {
- var Wrappers;
- (function (Wrappers) {
- var Wrapper = (function () {
- function Wrapper() {
- this.maxLines(Infinity);
- this.textTrimming("ellipsis");
- this.allowBreakingWords(true);
- this._tokenizer = new SVGTypewriter.Utils.Tokenizer();
- this._breakingCharacter = "-";
- }
- Wrapper.prototype.maxLines = function (noLines) {
- if (noLines == null) {
- return this._maxLines;
- }
- else {
- this._maxLines = noLines;
- return this;
- }
- };
- Wrapper.prototype.textTrimming = function (option) {
- if (option == null) {
- return this._textTrimming;
- }
- else {
- if (option !== "ellipsis" && option !== "none") {
- throw new Error(option + " - unsupported text trimming option.");
- }
- this._textTrimming = option;
- return this;
- }
- };
- Wrapper.prototype.allowBreakingWords = function (allow) {
- if (allow == null) {
- return this._allowBreakingWords;
- }
- else {
- this._allowBreakingWords = allow;
- return this;
- }
- };
- Wrapper.prototype.wrap = function (text, measurer, width, height) {
- var _this = this;
- if (height === void 0) { height = Infinity; }
- var initialWrappingResult = {
- originalText: text,
- wrappedText: "",
- noLines: 0,
- noBrokeWords: 0,
- truncatedText: "",
- };
- var state = {
- wrapping: initialWrappingResult,
- currentLine: "",
- availableWidth: width,
- availableLines: Math.min(Math.floor(height / measurer.measure().height), this._maxLines),
- canFitText: true,
- };
- var lines = text.split("\n");
- return lines.reduce(function (state, line, i) {
- return _this.breakLineToFitWidth(state, line, i !== lines.length - 1, measurer);
- }, state).wrapping;
- };
- Wrapper.prototype.breakLineToFitWidth = function (state, line, hasNextLine, measurer) {
- var _this = this;
- if (!state.canFitText && state.wrapping.truncatedText !== "") {
- state.wrapping.truncatedText += "\n";
- }
- var tokens = this._tokenizer.tokenize(line);
- state = tokens.reduce(function (state, token) { return _this.wrapNextToken(token, state, measurer); }, state);
- var wrappedText = SVGTypewriter.Utils.StringMethods.trimEnd(state.currentLine);
- state.wrapping.noLines += +(wrappedText !== "");
- if (state.wrapping.noLines === state.availableLines && this._textTrimming !== "none" && hasNextLine) {
- var ellipsisResult = this.addEllipsis(wrappedText, state.availableWidth, measurer);
- state.wrapping.wrappedText += ellipsisResult.wrappedToken;
- state.wrapping.truncatedText += ellipsisResult.remainingToken;
- state.canFitText = false;
- }
- else {
- state.wrapping.wrappedText += wrappedText;
- }
- state.currentLine = "\n";
- return state;
- };
- Wrapper.prototype.canFitToken = function (token, width, measurer) {
- var _this = this;
- var possibleBreaks = this._allowBreakingWords ?
- token.split("").map(function (c, i) { return (i !== token.length - 1) ? c + _this._breakingCharacter : c; })
- : [token];
- return (measurer.measure(token).width <= width) || possibleBreaks.every(function (c) { return measurer.measure(c).width <= width; });
- };
- Wrapper.prototype.addEllipsis = function (line, width, measurer) {
- if (this._textTrimming === "none") {
- return {
- wrappedToken: line,
- remainingToken: "",
- };
- }
- var truncatedLine = line.substring(0).trim();
- var lineWidth = measurer.measure(truncatedLine).width;
- var ellipsesWidth = measurer.measure("...").width;
- var prefix = (line.length > 0 && line[0] === "\n") ? "\n" : "";
- if (width <= ellipsesWidth) {
- var periodWidth = ellipsesWidth / 3;
- var numPeriodsThatFit = Math.floor(width / periodWidth);
- return {
- wrappedToken: prefix + "...".substr(0, numPeriodsThatFit),
- remainingToken: line,
- };
- }
- while (lineWidth + ellipsesWidth > width) {
- truncatedLine = SVGTypewriter.Utils.StringMethods.trimEnd(truncatedLine.substr(0, truncatedLine.length - 1));
- lineWidth = measurer.measure(truncatedLine).width;
- }
- return {
- wrappedToken: prefix + truncatedLine + "...",
- remainingToken: SVGTypewriter.Utils.StringMethods.trimEnd(line.substring(truncatedLine.length), "-").trim(),
- };
- };
- Wrapper.prototype.wrapNextToken = function (token, state, measurer) {
- if (!state.canFitText ||
- state.availableLines === state.wrapping.noLines ||
- !this.canFitToken(token, state.availableWidth, measurer)) {
- return this.finishWrapping(token, state, measurer);
- }
- var remainingToken = token;
- while (remainingToken) {
- var result = this.breakTokenToFitInWidth(remainingToken, state.currentLine, state.availableWidth, measurer);
- state.currentLine = result.line;
- remainingToken = result.remainingToken;
- if (remainingToken != null) {
- state.wrapping.noBrokeWords += +result.breakWord;
- ++state.wrapping.noLines;
- if (state.availableLines === state.wrapping.noLines) {
- var ellipsisResult = this.addEllipsis(state.currentLine, state.availableWidth, measurer);
- state.wrapping.wrappedText += ellipsisResult.wrappedToken;
- state.wrapping.truncatedText += ellipsisResult.remainingToken + remainingToken;
- state.currentLine = "\n";
- return state;
- }
- else {
- state.wrapping.wrappedText += SVGTypewriter.Utils.StringMethods.trimEnd(state.currentLine);
- state.currentLine = "\n";
- }
- }
- }
- return state;
- };
- Wrapper.prototype.finishWrapping = function (token, state, measurer) {
- // Token is really long, but we have a space to put part of the word.
- if (state.canFitText &&
- state.availableLines !== state.wrapping.noLines &&
- this._allowBreakingWords &&
- this._textTrimming !== "none") {
- var res = this.addEllipsis(state.currentLine + token, state.availableWidth, measurer);
- state.wrapping.wrappedText += res.wrappedToken;
- state.wrapping.truncatedText += res.remainingToken;
- state.wrapping.noBrokeWords += +(res.remainingToken.length < token.length);
- state.wrapping.noLines += +(res.wrappedToken.length > 0);
- state.currentLine = "";
- }
- else {
- state.wrapping.truncatedText += token;
- }
- state.canFitText = false;
- return state;
- };
- /**
- * Breaks single token to fit current line.
- * If token contains only whitespaces then they will not be populated to next line.
- */
- Wrapper.prototype.breakTokenToFitInWidth = function (token, line, availableWidth, measurer, breakingCharacter) {
- if (breakingCharacter === void 0) { breakingCharacter = this._breakingCharacter; }
- if (measurer.measure(line + token).width <= availableWidth) {
- return {
- remainingToken: null,
- line: line + token,
- breakWord: false,
- };
- }
- if (token.trim() === "") {
- return {
- remainingToken: "",
- line: line,
- breakWord: false,
- };
- }
- if (!this._allowBreakingWords) {
- return {
- remainingToken: token,
- line: line,
- breakWord: false,
- };
- }
- var fitTokenLength = 0;
- while (fitTokenLength < token.length) {
- if (measurer.measure(line + token.substring(0, fitTokenLength + 1) + breakingCharacter).width <= availableWidth) {
- ++fitTokenLength;
- }
- else {
- break;
- }
- }
- var suffix = "";
- if (fitTokenLength > 0) {
- suffix = breakingCharacter;
- }
- return {
- remainingToken: token.substring(fitTokenLength),
- line: line + token.substring(0, fitTokenLength) + suffix,
- breakWord: fitTokenLength > 0,
- };
- };
- return Wrapper;
- }());
- Wrappers.Wrapper = Wrapper;
- })(Wrappers = SVGTypewriter.Wrappers || (SVGTypewriter.Wrappers = {}));
-})(SVGTypewriter || (SVGTypewriter = {}));
-
-///
-var __extends = (this && this.__extends) || function (d, b) {
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-};
-var SVGTypewriter;
-(function (SVGTypewriter) {
- var Wrappers;
- (function (Wrappers) {
- var SingleLineWrapper = (function (_super) {
- __extends(SingleLineWrapper, _super);
- function SingleLineWrapper() {
- _super.apply(this, arguments);
- }
- SingleLineWrapper.prototype.wrap = function (text, measurer, width, height) {
- var _this = this;
- if (height === void 0) { height = Infinity; }
- var lines = text.split("\n");
- if (lines.length > 1) {
- throw new Error("SingleLineWrapper is designed to work only on single line");
- }
- var wrapFN = function (w) { return _super.prototype.wrap.call(_this, text, measurer, w, height); };
- var result = wrapFN(width);
- if (result.noLines < 2) {
- return result;
- }
- var left = 0;
- var right = width;
- for (var i = 0; i < SingleLineWrapper.NO_WRAP_ITERATIONS && right > left; ++i) {
- var currentWidth = (right + left) / 2;
- var currentResult = wrapFN(currentWidth);
- if (this.areSameResults(result, currentResult)) {
- right = currentWidth;
- result = currentResult;
- }
- else {
- left = currentWidth;
- }
- }
- return result;
- };
- SingleLineWrapper.prototype.areSameResults = function (one, two) {
- return one.noLines === two.noLines && one.truncatedText === two.truncatedText;
- };
- SingleLineWrapper.NO_WRAP_ITERATIONS = 5;
- return SingleLineWrapper;
- }(Wrappers.Wrapper));
- Wrappers.SingleLineWrapper = SingleLineWrapper;
- })(Wrappers = SVGTypewriter.Wrappers || (SVGTypewriter.Wrappers = {}));
-})(SVGTypewriter || (SVGTypewriter = {}));
-
-///
-var SVGTypewriter;
-(function (SVGTypewriter) {
- var Writers;
- (function (Writers) {
- var Writer = (function () {
- function Writer(measurer, wrapper) {
- this._writerID = Writer.nextID++;
- this._elementID = 0;
- this.measurer(measurer);
- if (wrapper) {
- this.wrapper(wrapper);
- }
- this.addTitleElement(false);
- }
- Writer.prototype.measurer = function (newMeasurer) {
- this._measurer = newMeasurer;
- return this;
- };
- Writer.prototype.wrapper = function (newWrapper) {
- this._wrapper = newWrapper;
- return this;
- };
- Writer.prototype.addTitleElement = function (add) {
- this._addTitleElement = add;
- return this;
- };
- Writer.prototype.writeLine = function (line, g, width, xAlign, yOffset) {
- var textEl = g.append("text");
- textEl.text(line);
- var xOffset = width * Writer.XOffsetFactor[xAlign];
- var anchor = Writer.AnchorConverter[xAlign];
- textEl.attr("text-anchor", anchor).classed("text-line", true);
- SVGTypewriter.Utils.DOM.transform(textEl, xOffset, yOffset).attr("y", "-0.25em");
- ;
- };
- Writer.prototype.writeText = function (text, writingArea, width, height, xAlign, yAlign) {
- var _this = this;
- var lines = text.split("\n");
- var lineHeight = this._measurer.measure().height;
- var yOffset = Writer.YOffsetFactor[yAlign] * (height - lines.length * lineHeight);
- lines.forEach(function (line, i) {
- _this.writeLine(line, writingArea, width, xAlign, (i + 1) * lineHeight + yOffset);
- });
- };
- Writer.prototype.write = function (text, width, height, options) {
- if (Writer.SupportedRotation.indexOf(options.textRotation) === -1) {
- throw new Error("unsupported rotation - " + options.textRotation);
- }
- var orientHorizontally = Math.abs(Math.abs(options.textRotation) - 90) > 45;
- var primaryDimension = orientHorizontally ? width : height;
- var secondaryDimension = orientHorizontally ? height : width;
- var textContainer = options.selection.append("g").classed("text-container", true);
- if (this._addTitleElement) {
- textContainer.append("title").text(text);
- }
- var textArea = textContainer.append("g").classed("text-area", true);
- var wrappedText = this._wrapper ?
- this._wrapper.wrap(text, this._measurer, primaryDimension, secondaryDimension).wrappedText :
- text;
- this.writeText(wrappedText, textArea, primaryDimension, secondaryDimension, options.xAlign, options.yAlign);
- var xForm = d3.transform("");
- var xForm2 = d3.transform("");
- xForm.rotate = options.textRotation;
- switch (options.textRotation) {
- case 90:
- xForm.translate = [width, 0];
- xForm2.rotate = -90;
- xForm2.translate = [0, 200];
- break;
- case -90:
- xForm.translate = [0, height];
- xForm2.rotate = 90;
- xForm2.translate = [width, 0];
- break;
- case 180:
- xForm.translate = [width, height];
- xForm2.translate = [width, height];
- xForm2.rotate = 180;
- break;
- }
- textArea.attr("transform", xForm.toString());
- this.addClipPath(textContainer, xForm2);
- if (options.animator) {
- options.animator.animate(textContainer);
- }
- };
- Writer.prototype.addClipPath = function (selection, transform) {
- var elementID = this._elementID++;
- var prefix = /MSIE [5-9]/.test(navigator.userAgent) ? "" : document.location.href;
- prefix = prefix.split("#")[0]; // To fix cases where an anchor tag was used
- var clipPathID = "clipPath" + this._writerID + "_" + elementID;
- selection.select(".text-area").attr("clip-path", "url(\"" + prefix + "#" + clipPathID + "\")");
- var clipPathParent = selection.append("clipPath").attr("id", clipPathID);
- var bboxAttrs = SVGTypewriter.Utils.DOM.getBBox(selection.select(".text-area"));
- var box = clipPathParent.append("rect");
- box.classed("clip-rect", true).attr({
- x: bboxAttrs.x,
- y: bboxAttrs.y,
- width: bboxAttrs.width,
- height: bboxAttrs.height,
- });
- };
- Writer.nextID = 0;
- Writer.SupportedRotation = [-90, 0, 180, 90];
- Writer.AnchorConverter = {
- left: "start",
- center: "middle",
- right: "end",
- };
- Writer.XOffsetFactor = {
- left: 0,
- center: 0.5,
- right: 1,
- };
- Writer.YOffsetFactor = {
- top: 0,
- center: 0.5,
- bottom: 1,
- };
- return Writer;
- }());
- Writers.Writer = Writer;
- })(Writers = SVGTypewriter.Writers || (SVGTypewriter.Writers = {}));
-})(SVGTypewriter || (SVGTypewriter = {}));
-
-///
-var SVGTypewriter;
-(function (SVGTypewriter) {
- var Measurers;
- (function (Measurers) {
- ;
- var AbstractMeasurer = (function () {
- function AbstractMeasurer(area, className) {
- this.textMeasurer = this.getTextMeasurer(area, className);
- }
- AbstractMeasurer.prototype.checkSelectionIsText = function (d) {
- return d[0][0].tagName === "text" || !d.select("text").empty();
- };
- AbstractMeasurer.prototype.getTextMeasurer = function (area, className) {
- var _this = this;
- if (!this.checkSelectionIsText(area)) {
- var textElement = area.append("text");
- if (className) {
- textElement.classed(className, true);
- }
- textElement.remove();
- return function (text) {
- area.node().appendChild(textElement.node());
- var areaDimension = _this.measureBBox(textElement, text);
- textElement.remove();
- return areaDimension;
- };
- }
- else {
- var parentNode = area.node().parentNode;
- var textSelection;
- if (area[0][0].tagName === "text") {
- textSelection = area;
- }
- else {
- textSelection = area.select("text");
- }
- area.remove();
- return function (text) {
- parentNode.appendChild(area.node());
- var areaDimension = _this.measureBBox(textSelection, text);
- area.remove();
- return areaDimension;
- };
- }
- };
- AbstractMeasurer.prototype.measureBBox = function (d, text) {
- d.text(text);
- var bb = SVGTypewriter.Utils.DOM.getBBox(d);
- return { width: bb.width, height: bb.height };
- };
- AbstractMeasurer.prototype.measure = function (text) {
- if (text === void 0) { text = AbstractMeasurer.HEIGHT_TEXT; }
- return this.textMeasurer(text);
- };
- AbstractMeasurer.HEIGHT_TEXT = "bqpdl";
- return AbstractMeasurer;
- }());
- Measurers.AbstractMeasurer = AbstractMeasurer;
- })(Measurers = SVGTypewriter.Measurers || (SVGTypewriter.Measurers = {}));
-})(SVGTypewriter || (SVGTypewriter = {}));
-
-///
-var __extends = (this && this.__extends) || function (d, b) {
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-};
-var SVGTypewriter;
-(function (SVGTypewriter) {
- var Measurers;
- (function (Measurers) {
- var Measurer = (function (_super) {
- __extends(Measurer, _super);
- function Measurer(area, className, useGuards) {
- if (className === void 0) { className = null; }
- if (useGuards === void 0) { useGuards = false; }
- _super.call(this, area, className);
- this.useGuards = useGuards;
- }
- // Guards assures same line height and width of whitespaces on both ends.
- Measurer.prototype._addGuards = function (text) {
- return Measurers.AbstractMeasurer.HEIGHT_TEXT + text + Measurers.AbstractMeasurer.HEIGHT_TEXT;
- };
- Measurer.prototype.getGuardWidth = function () {
- if (this.guardWidth == null) {
- this.guardWidth = _super.prototype.measure.call(this).width;
- }
- return this.guardWidth;
- };
- Measurer.prototype._measureLine = function (line) {
- var measuredLine = this.useGuards ? this._addGuards(line) : line;
- var measuredLineDimensions = _super.prototype.measure.call(this, measuredLine);
- measuredLineDimensions.width -= this.useGuards ? (2 * this.getGuardWidth()) : 0;
- return measuredLineDimensions;
- };
- Measurer.prototype.measure = function (text) {
- var _this = this;
- if (text === void 0) { text = Measurers.AbstractMeasurer.HEIGHT_TEXT; }
- if (text.trim() === "") {
- return { width: 0, height: 0 };
- }
- var linesDimensions = text.trim().split("\n").map(function (line) { return _this._measureLine(line); });
- return {
- width: d3.max(linesDimensions, function (dim) { return dim.width; }),
- height: d3.sum(linesDimensions, function (dim) { return dim.height; }),
- };
- };
- return Measurer;
- }(Measurers.AbstractMeasurer));
- Measurers.Measurer = Measurer;
- })(Measurers = SVGTypewriter.Measurers || (SVGTypewriter.Measurers = {}));
-})(SVGTypewriter || (SVGTypewriter = {}));
-
-///
-var __extends = (this && this.__extends) || function (d, b) {
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-};
-var SVGTypewriter;
-(function (SVGTypewriter) {
- var Measurers;
- (function (Measurers) {
- var CharacterMeasurer = (function (_super) {
- __extends(CharacterMeasurer, _super);
- function CharacterMeasurer() {
- _super.apply(this, arguments);
- }
- CharacterMeasurer.prototype._measureCharacter = function (c) {
- return _super.prototype._measureLine.call(this, c);
- };
- CharacterMeasurer.prototype._measureLine = function (line) {
- var _this = this;
- var charactersDimensions = line.split("").map(function (c) { return _this._measureCharacter(c); });
- return {
- width: d3.sum(charactersDimensions, function (dim) { return dim.width; }),
- height: d3.max(charactersDimensions, function (dim) { return dim.height; }),
- };
- };
- return CharacterMeasurer;
- }(Measurers.Measurer));
- Measurers.CharacterMeasurer = CharacterMeasurer;
- })(Measurers = SVGTypewriter.Measurers || (SVGTypewriter.Measurers = {}));
-})(SVGTypewriter || (SVGTypewriter = {}));
-
-///
-var __extends = (this && this.__extends) || function (d, b) {
- for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-};
-var SVGTypewriter;
-(function (SVGTypewriter) {
- var Measurers;
- (function (Measurers) {
- var CacheCharacterMeasurer = (function (_super) {
- __extends(CacheCharacterMeasurer, _super);
- function CacheCharacterMeasurer(area, className) {
- var _this = this;
- _super.call(this, area, className);
- this.cache = new SVGTypewriter.Utils.Cache(function (c) { return _this._measureCharacterNotFromCache(c); }, SVGTypewriter.Utils.Methods.objEq);
- }
- CacheCharacterMeasurer.prototype._measureCharacterNotFromCache = function (c) {
- return _super.prototype._measureCharacter.call(this, c);
- };
- CacheCharacterMeasurer.prototype._measureCharacter = function (c) {
- return this.cache.get(c);
- };
- CacheCharacterMeasurer.prototype.reset = function () {
- this.cache.clear();
- };
- return CacheCharacterMeasurer;
- }(Measurers.CharacterMeasurer));
- Measurers.CacheCharacterMeasurer = CacheCharacterMeasurer;
- })(Measurers = SVGTypewriter.Measurers || (SVGTypewriter.Measurers = {}));
-})(SVGTypewriter || (SVGTypewriter = {}));
-
-return SVGTypewriter;
-
-}));
-
return Plottable;
}));