diff --git a/.gitignore b/.gitignore index d10c65112..366ca6453 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ test/tmp_* test/fixtures/samples/*.actual* dist/*.js +todo.md diff --git a/src/diagrams/flowchart/graphDb.js b/src/diagrams/flowchart/graphDb.js index bd0569257..dd681bdb4 100644 --- a/src/diagrams/flowchart/graphDb.js +++ b/src/diagrams/flowchart/graphDb.js @@ -172,7 +172,7 @@ var setClickFun = function (id, functionName) { var elem = d3.select(element).select('#' + id) if (elem !== null) { elem.on('click', function () { - eval(functionName + '(\'' + id + '\')') // jshint ignore:line + window[functionName](id) }) } }) @@ -314,7 +314,8 @@ exports.defaultStyle = function () { */ exports.addSubGraph = function (list, title) { function uniq (a) { - var prims = {'boolean': {}, 'number': {}, 'string': {}}, objs = [] + var prims = {'boolean': {}, 'number': {}, 'string': {}} + var objs = [] return a.filter(function (item) { var type = typeof item diff --git a/src/diagrams/gantt/ganttDb.js b/src/diagrams/gantt/ganttDb.js index 3af7cc25a..e230f6753 100644 --- a/src/diagrams/gantt/ganttDb.js +++ b/src/diagrams/gantt/ganttDb.js @@ -70,7 +70,7 @@ var getStartDate = function (prevTime, dateFormat, str) { str = str.trim() // Test for after - var re = /^after\s+([\d\w\-]+)/ + var re = /^after\s+([\d\w-]+)/ var afterStatement = re.exec(str.trim()) if (afterStatement !== null) { diff --git a/src/diagrams/gantt/ganttRenderer.js b/src/diagrams/gantt/ganttRenderer.js index ab6fda44f..0f87d6173 100644 --- a/src/diagrams/gantt/ganttRenderer.js +++ b/src/diagrams/gantt/ganttRenderer.js @@ -41,15 +41,15 @@ module.exports.draw = function (text, id) { var taskArray = gantt.yy.getTasks() - // Set height based on number of tasks + // Set height based on number of tasks var h = taskArray.length * (conf.barHeight + conf.barGap) + 2 * conf.topPadding elem.setAttribute('height', '100%') - // Set viewBox + // Set viewBox elem.setAttribute('viewBox', '0 0 ' + w + ' ' + h) var svg = d3.select('#' + id) - // var dateFormat = d3.time.format('%Y-%m-%d'); + // var dateFormat = d3.time.format('%Y-%m-%d'); var startDate = d3.min(taskArray, function (d) { return d.startTime @@ -58,16 +58,16 @@ module.exports.draw = function (text, id) { return d.endTime }) - // Set timescale + // Set timescale var timeScale = d3.time.scale() - .domain([d3.min(taskArray, function (d) { - return d.startTime - }), - d3.max(taskArray, function (d) { - return d.endTime - })]) - .rangeRound([0, w - conf.leftPadding - conf.rightPadding]) - // .nice(d3.time.monday); + .domain([d3.min(taskArray, function (d) { + return d.startTime + }), + d3.max(taskArray, function (d) { + return d.endTime + })]) + .rangeRound([0, w - conf.leftPadding - conf.rightPadding]) + // .nice(d3.time.monday); var categories = [] @@ -87,10 +87,10 @@ module.exports.draw = function (text, id) { } svg.append('text') - .text(gantt.yy.getTitle()) - .attr('x', w / 2) - .attr('y', conf.titleTopMargin) - .attr('class', 'titleText') + .text(gantt.yy.getTitle()) + .attr('x', w / 2) + .attr('y', conf.titleTopMargin) + .attr('class', 'titleText') function makeGant (tasks, pageWidth, pageHeight) { var barHeight = conf.barHeight @@ -99,9 +99,9 @@ module.exports.draw = function (text, id) { var leftPadding = conf.leftPadding var colorScale = d3.scale.linear() - .domain([0, categories.length]) - .range(['#00B9FA', '#F95002']) - .interpolate(d3.interpolateHcl) + .domain([0, categories.length]) + .range(['#00B9FA', '#F95002']) + .interpolate(d3.interpolateHcl) makeGrid(leftPadding, topPadding, pageWidth, pageHeight) drawRects(tasks, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth, pageHeight) @@ -111,148 +111,148 @@ module.exports.draw = function (text, id) { function drawRects (theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w, h) { // eslint-disable-line no-unused-vars svg.append('g') - .selectAll('rect') - .data(theArray) - .enter() - .append('rect') - .attr('x', 0) - .attr('y', function (d, i) { - return i * theGap + theTopPad - 2 - }) - .attr('width', function () { - return w - conf.rightPadding / 2 - }) - .attr('height', theGap) - .attr('class', function (d) { // eslint-disable-line no-unused-vars - for (var i = 0; i < categories.length; i++) { - if (d.type === categories[i]) { - return 'section section' + (i % conf.numberSectionStyles) - } - } - return 'section section0' - }) + .selectAll('rect') + .data(theArray) + .enter() + .append('rect') + .attr('x', 0) + .attr('y', function (d, i) { + return i * theGap + theTopPad - 2 + }) + .attr('width', function () { + return w - conf.rightPadding / 2 + }) + .attr('height', theGap) + .attr('class', function (d) { // eslint-disable-line no-unused-vars + for (var i = 0; i < categories.length; i++) { + if (d.type === categories[i]) { + return 'section section' + (i % conf.numberSectionStyles) + } + } + return 'section section0' + }) var rectangles = svg.append('g') - .selectAll('rect') - .data(theArray) - .enter() + .selectAll('rect') + .data(theArray) + .enter() rectangles.append('rect') - .attr('rx', 3) - .attr('ry', 3) - .attr('x', function (d) { - return timeScale(d.startTime) + theSidePad - }) - .attr('y', function (d, i) { - return i * theGap + theTopPad - }) - .attr('width', function (d) { - return (timeScale(d.endTime) - timeScale(d.startTime)) - }) - .attr('height', theBarHeight) - .attr('class', function (d) { - var res = 'task ' + .attr('rx', 3) + .attr('ry', 3) + .attr('x', function (d) { + return timeScale(d.startTime) + theSidePad + }) + .attr('y', function (d, i) { + return i * theGap + theTopPad + }) + .attr('width', function (d) { + return (timeScale(d.endTime) - timeScale(d.startTime)) + }) + .attr('height', theBarHeight) + .attr('class', function (d) { + var res = 'task ' - var secNum = 0 - for (var i = 0; i < categories.length; i++) { - if (d.type === categories[i]) { - secNum = (i % conf.numberSectionStyles) - } - } + var secNum = 0 + for (var i = 0; i < categories.length; i++) { + if (d.type === categories[i]) { + secNum = (i % conf.numberSectionStyles) + } + } - if (d.active) { - if (d.crit) { - return res + ' activeCrit' + secNum - } else { - return res + ' active' + secNum - } - } + if (d.active) { + if (d.crit) { + return res + ' activeCrit' + secNum + } else { + return res + ' active' + secNum + } + } - if (d.done) { - if (d.crit) { - return res + ' doneCrit' + secNum - } else { - return res + ' done' + secNum - } - } + if (d.done) { + if (d.crit) { + return res + ' doneCrit' + secNum + } else { + return res + ' done' + secNum + } + } - if (d.crit) { - return res + ' crit' + secNum - } + if (d.crit) { + return res + ' crit' + secNum + } - return res + ' task' + secNum - }) + return res + ' task' + secNum + }) rectangles.append('text') - .text(function (d) { - return d.task - }) - .attr('font-size', conf.fontSize) - // .attr('font-family',conf.fontFamily) - .attr('x', function (d) { - var startX = timeScale(d.startTime), - endX = timeScale(d.endTime), - textWidth = this.getBBox().width + .text(function (d) { + return d.task + }) + .attr('font-size', conf.fontSize) + // .attr('font-family',conf.fontFamily) + .attr('x', function (d) { + var startX = timeScale(d.startTime) + var endX = timeScale(d.endTime) + var textWidth = this.getBBox().width - // Check id text width > width of rectangle - if (textWidth > (endX - startX)) { - if (endX + textWidth + 1.5 * conf.leftPadding > w) { - return startX + theSidePad - 5 - } else { - return endX + theSidePad + 5 - } - } else { - return (endX - startX) / 2 + startX + theSidePad - } - }) - .attr('y', function (d, i) { - return i * theGap + (conf.barHeight / 2) + (conf.fontSize / 2 - 2) + theTopPad - }) - // .attr('text-anchor', 'middle') - .attr('text-height', theBarHeight) - .attr('class', function (d) { - var startX = timeScale(d.startTime), - endX = timeScale(d.endTime), - textWidth = this.getBBox().width - var secNum = 0 - for (var i = 0; i < categories.length; i++) { - if (d.type === categories[i]) { - secNum = (i % conf.numberSectionStyles) - } - } + // Check id text width > width of rectangle + if (textWidth > (endX - startX)) { + if (endX + textWidth + 1.5 * conf.leftPadding > w) { + return startX + theSidePad - 5 + } else { + return endX + theSidePad + 5 + } + } else { + return (endX - startX) / 2 + startX + theSidePad + } + }) + .attr('y', function (d, i) { + return i * theGap + (conf.barHeight / 2) + (conf.fontSize / 2 - 2) + theTopPad + }) + // .attr('text-anchor', 'middle') + .attr('text-height', theBarHeight) + .attr('class', function (d) { + var startX = timeScale(d.startTime) + var endX = timeScale(d.endTime) + var textWidth = this.getBBox().width + var secNum = 0 + for (var i = 0; i < categories.length; i++) { + if (d.type === categories[i]) { + secNum = (i % conf.numberSectionStyles) + } + } - var taskType = '' - if (d.active) { - if (d.crit) { - taskType = 'activeCritText' + secNum - } else { - taskType = 'activeText' + secNum - } - } + var taskType = '' + if (d.active) { + if (d.crit) { + taskType = 'activeCritText' + secNum + } else { + taskType = 'activeText' + secNum + } + } - if (d.done) { - if (d.crit) { - taskType = taskType + ' doneCritText' + secNum - } else { - taskType = taskType + ' doneText' + secNum - } - } else { - if (d.crit) { - taskType = taskType + ' critText' + secNum - } - } + if (d.done) { + if (d.crit) { + taskType = taskType + ' doneCritText' + secNum + } else { + taskType = taskType + ' doneText' + secNum + } + } else { + if (d.crit) { + taskType = taskType + ' critText' + secNum + } + } - // Check id text width > width of rectangle - if (textWidth > (endX - startX)) { - if (endX + textWidth + 1.5 * conf.leftPadding > w) { - return 'taskTextOutsideLeft taskTextOutside' + secNum + ' ' + taskType - } else { - return 'taskTextOutsideRight taskTextOutside' + secNum + ' ' + taskType - } - } else { - return 'taskText taskText' + secNum + ' ' + taskType - } - }) + // Check id text width > width of rectangle + if (textWidth > (endX - startX)) { + if (endX + textWidth + 1.5 * conf.leftPadding > w) { + return 'taskTextOutsideLeft taskTextOutside' + secNum + ' ' + taskType + } else { + return 'taskTextOutsideRight taskTextOutside' + secNum + ' ' + taskType + } + } else { + return 'taskText taskText' + secNum + ' ' + taskType + } + }) } function makeGrid (theSidePad, theTopPad, w, h) { @@ -263,7 +263,7 @@ module.exports.draw = function (text, id) { [':%S', function (d) { return d.getSeconds() }], - // Within a hour + // Within a hour ['h1 %I:%M', function (d) { return d.getMinutes() }]] @@ -273,20 +273,20 @@ module.exports.draw = function (text, id) { }]] var mid = [ - // Within a day + // Within a day ['%I:%M', function (d) { return d.getHours() }], - // Day within a week (not monday) + // Day within a week (not monday) ['%a %d', function (d) { - // return d.getDay() ==1; - return d.getDay() && d.getDate() != 1 + // return d.getDay() ==1; + return d.getDay() && d.getDate() !== 1 }], - // within a month + // within a month ['%b %d', function (d) { - return d.getDate() != 1 + return d.getDate() !== 1 }], - // Month + // Month ['%B', function (d) { return d.getMonth() }] @@ -304,25 +304,25 @@ module.exports.draw = function (text, id) { formatter = pre.concat(mid).concat(post) var xAxis = d3.svg.axis() - .scale(timeScale) - .orient('bottom') - .tickSize(-h + theTopPad + conf.gridLineStartPadding, 0, 0) - .tickFormat(d3.time.format.multi(formatter)) + .scale(timeScale) + .orient('bottom') + .tickSize(-h + theTopPad + conf.gridLineStartPadding, 0, 0) + .tickFormat(d3.time.format.multi(formatter)) if (daysInChart > 7 && daysInChart < 230) { xAxis = xAxis.ticks(d3.time.monday.range) } svg.append('g') - .attr('class', 'grid') - .attr('transform', 'translate(' + theSidePad + ', ' + (h - 50) + ')') - .call(xAxis) - .selectAll('text') - .style('text-anchor', 'middle') - .attr('fill', '#000') - .attr('stroke', 'none') - .attr('font-size', 10) - .attr('dy', '1em') + .attr('class', 'grid') + .attr('transform', 'translate(' + theSidePad + ', ' + (h - 50) + ')') + .call(xAxis) + .selectAll('text') + .style('text-anchor', 'middle') + .attr('fill', '#000') + .attr('stroke', 'none') + .attr('font-size', 10) + .attr('dy', '1em') } function vertLabels (theGap, theTopPad) { @@ -334,52 +334,53 @@ module.exports.draw = function (text, id) { } svg.append('g') // without doing this, impossible to put grid lines behind text - .selectAll('text') - .data(numOccurances) - .enter() - .append('text') - .text(function (d) { - return d[0] - }) - .attr('x', 10) - .attr('y', function (d, i) { - if (i > 0) { - for (var j = 0; j < i; j++) { - prevGap += numOccurances[i - 1][1] - // log.debug(prevGap); - return d[1] * theGap / 2 + prevGap * theGap + theTopPad - } - } else { - return d[1] * theGap / 2 + theTopPad - } - }) - .attr('class', function (d) { - for (var i = 0; i < categories.length; i++) { - if (d[0] === categories[i]) { - return 'sectionTitle sectionTitle' + (i % conf.numberSectionStyles) - } - } - return 'sectionTitle' - }) + .selectAll('text') + .data(numOccurances) + .enter() + .append('text') + .text(function (d) { + return d[0] + }) + .attr('x', 10) + .attr('y', function (d, i) { + if (i > 0) { + for (var j = 0; j < i; j++) { + prevGap += numOccurances[i - 1][1] + // log.debug(prevGap); + return d[1] * theGap / 2 + prevGap * theGap + theTopPad + } + } else { + return d[1] * theGap / 2 + theTopPad + } + }) + .attr('class', function (d) { + for (var i = 0; i < categories.length; i++) { + if (d[0] === categories[i]) { + return 'sectionTitle sectionTitle' + (i % conf.numberSectionStyles) + } + } + return 'sectionTitle' + }) } function drawToday (theSidePad, theTopPad, w, h) { var todayG = svg.append('g') - .attr('class', 'today') + .attr('class', 'today') var today = new Date() todayG.append('line') - .attr('x1', timeScale(today) + theSidePad) - .attr('x2', timeScale(today) + theSidePad) - .attr('y1', conf.titleTopMargin) - .attr('y2', h - conf.titleTopMargin) - .attr('class', 'today') + .attr('x1', timeScale(today) + theSidePad) + .attr('x2', timeScale(today) + theSidePad) + .attr('y1', conf.titleTopMargin) + .attr('y2', h - conf.titleTopMargin) + .attr('class', 'today') } -// from this stackexchange question: http://stackoverflow.com/questions/1890203/unique-for-arrays-in-javascript + // from this stackexchange question: http://stackoverflow.com/questions/1890203/unique-for-arrays-in-javascript function checkUnique (arr) { - var hash = {}, result = [] + var hash = {} + var result = [] for (var i = 0, l = arr.length; i < l; ++i) { if (!hash.hasOwnProperty(arr[i])) { // it works with objects! in FF, at least hash[arr[i]] = true @@ -389,17 +390,17 @@ module.exports.draw = function (text, id) { return result } -// from this stackexchange question: http://stackoverflow.com/questions/14227981/count-how-many-strings-in-an-array-have-duplicates-in-the-same-array + // from this stackexchange question: http://stackoverflow.com/questions/14227981/count-how-many-strings-in-an-array-have-duplicates-in-the-same-array function getCounts (arr) { - var i = arr.length, // var to loop over - obj = {} // obj to store results + var i = arr.length // var to loop over + var obj = {} // obj to store results while (i) { obj[arr[--i]] = (obj[arr[i]] || 0) + 1 // count occurrences } return obj } -// get specific from everything + // get specific from everything function getCount (word, arr) { return getCounts(arr)[word] || 0 } diff --git a/src/diagrams/gitGraph/gitGraphAst.js b/src/diagrams/gitGraph/gitGraphAst.js index d1fdcca3e..235778a9b 100644 --- a/src/diagrams/gitGraph/gitGraphAst.js +++ b/src/diagrams/gitGraph/gitGraphAst.js @@ -24,7 +24,7 @@ function getId () { function isfastforwardable (currentCommit, otherCommit) { log.debug('Entering isfastforwardable:', currentCommit.id, otherCommit.id) - while (currentCommit.seq <= otherCommit.seq && currentCommit != otherCommit) { + while (currentCommit.seq <= otherCommit.seq && currentCommit !== otherCommit) { // only if other branch has more commits if (otherCommit.parent == null) break if (Array.isArray(otherCommit.parent)) { @@ -36,7 +36,7 @@ function isfastforwardable (currentCommit, otherCommit) { } } log.debug(currentCommit.id, otherCommit.id) - return currentCommit.id == otherCommit.id + return currentCommit.id === otherCommit.id } function isReachableFrom (currentCommit, otherCommit) { @@ -118,7 +118,7 @@ exports.reset = function (commitRef) { log.debug('in reset', commitRef) var ref = commitRef.split(':')[0] var parentCount = parseInt(commitRef.split(':')[1]) - var commit = ref == 'HEAD' ? head : commits[branches[ref]] + var commit = ref === 'HEAD' ? head : commits[branches[ref]] log.debug(commit, parentCount) while (parentCount > 0) { commit = commits[commit.parent] @@ -148,7 +148,7 @@ function prettyPrintCommitHistory (commitArr) { var commit = _.maxBy(commitArr, 'seq') var line = '' _.each(commitArr, function (c) { - if (c == commit) { + if (c === commit) { line += '\t*' } else { line += '\t|' @@ -156,7 +156,7 @@ function prettyPrintCommitHistory (commitArr) { }) var label = [line, commit.id, commit.seq] _.each(branches, function (v, k) { - if (v == commit.id) label.push(k) + if (v === commit.id) label.push(k) }) log.debug(label.join(' ')) if (Array.isArray(commit.parent)) { diff --git a/src/diagrams/gitGraph/gitGraphRenderer.js b/src/diagrams/gitGraph/gitGraphRenderer.js index 9d5f27b94..e15ba8e10 100644 --- a/src/diagrams/gitGraph/gitGraphRenderer.js +++ b/src/diagrams/gitGraph/gitGraphRenderer.js @@ -73,9 +73,9 @@ function svgDrawLine (svg, points, colorIdx, interpolate) { // Pass in the element and its pre-transform coords function getElementCoords (element, coords) { coords = coords || element.node().getBBox() - var ctm = element.node().getCTM(), - xn = ctm.e + coords.x * ctm.a, - yn = ctm.f + coords.y * ctm.d + var ctm = element.node().getCTM() + var xn = ctm.e + coords.x * ctm.a + var yn = ctm.f + coords.y * ctm.d // log.debug(ctm, coords); return { left: xn, @@ -96,7 +96,7 @@ function svgDrawLineForCommits (svg, fromId, toId, direction, color) { // +-------- // + (fromBbox) if (fromBbox.left - toBbox.left > config.nodeSpacing) { - var lineStart = { x: fromBbox.left - config.nodeSpacing, y: toBbox.top + toBbox.height / 2} + var lineStart = { x: fromBbox.left - config.nodeSpacing, y: toBbox.top + toBbox.height / 2 } var lineEnd = { x: toBbox.left + toBbox.width, y: toBbox.top + toBbox.height / 2 } svgDrawLine(svg, [lineStart, lineEnd], color, 'linear') svgDrawLine(svg, [ @@ -126,7 +126,7 @@ function svgDrawLineForCommits (svg, fromId, toId, direction, color) { // | // + (toBbox) if (toBbox.top - fromBbox.top > config.nodeSpacing) { - lineStart = { x: toBbox.left + toBbox.width / 2, y: fromBbox.top + fromBbox.height + config.nodeSpacing} + lineStart = { x: toBbox.left + toBbox.width / 2, y: fromBbox.top + fromBbox.height + config.nodeSpacing } lineEnd = { x: toBbox.left + toBbox.width / 2, y: toBbox.top } svgDrawLine(svg, [lineStart, lineEnd], color, 'linear') svgDrawLine(svg, [ diff --git a/src/diagrams/sequenceDiagram/sequenceDiagram.spec.js b/src/diagrams/sequenceDiagram/sequenceDiagram.spec.js index a0a29db8e..4bd8e04cb 100644 --- a/src/diagrams/sequenceDiagram/sequenceDiagram.spec.js +++ b/src/diagrams/sequenceDiagram/sequenceDiagram.spec.js @@ -7,14 +7,14 @@ var proxyquire = require('proxyquire') // var log = require('../../logger').create(); var sq = require('./parser/sequenceDiagram').parser -var newD3 +var NewD3 var d3 = { select: function () { - return new newD3() + return new NewD3() }, selectAll: function () { - return new newD3() + return new NewD3() } } // var sd = proxyquire('./sequenceRenderer', { './d3': d3 }); @@ -773,10 +773,10 @@ describe('when rendering a sequenceDiagram', function () { // }; // sq.yy.parseError = parseError; - newD3 = function () { + NewD3 = function () { var o = { append: function () { - return newD3() + return NewD3() }, attr: function () { return this @@ -998,10 +998,10 @@ describe('when rendering a sequenceDiagram with actor mirror activated', functio // }; // sq.yy.parseError = parseError; - newD3 = function () { + NewD3 = function () { var o = { append: function () { - return newD3() + return NewD3() }, attr: function () { return this diff --git a/src/diagrams/sequenceDiagram/sequenceRenderer.js b/src/diagrams/sequenceDiagram/sequenceRenderer.js index 17d48c02c..d0b2a87b9 100644 --- a/src/diagrams/sequenceDiagram/sequenceRenderer.js +++ b/src/diagrams/sequenceDiagram/sequenceRenderer.js @@ -82,7 +82,7 @@ exports.bounds = { _self.updateVal(exports.bounds.data, 'startx', startx - n * conf.boxMargin, Math.min) _self.updateVal(exports.bounds.data, 'stopx', stopx + n * conf.boxMargin, Math.max) - if (!(type == 'activation')) { + if (!(type === 'activation')) { _self.updateVal(item, 'startx', startx - n * conf.boxMargin, Math.min) _self.updateVal(item, 'stopx', stopx + n * conf.boxMargin, Math.max) @@ -308,7 +308,7 @@ module.exports.setConf = function (cnf) { var actorActivations = function (actor) { return module.exports.bounds.activations.filter(function (activation) { - return activation.actor == actor + return activation.actor === actor }) } @@ -360,7 +360,7 @@ module.exports.draw = function (text, id) { exports.bounds.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos) } - var lastMsg + // var lastMsg // Draw the messages/signals messages.forEach(function (msg) { @@ -448,7 +448,7 @@ module.exports.draw = function (text, id) { break default: try { - lastMsg = msg + // lastMsg = msg exports.bounds.bumpVerticalPos(conf.messageMargin) var fromBounds = actorFlowVerticaBounds(msg.from) var toBounds = actorFlowVerticaBounds(msg.to)