diff --git a/.codeclimate.yml b/.codeclimate.yml new file mode 100644 index 00000000..abd4ff1c --- /dev/null +++ b/.codeclimate.yml @@ -0,0 +1,26 @@ +languages: + JavaScript: true +engines: + eslint: + enabled: true + csslint: + enabled: true + markdownlint: + enabled: true + duplication: + enabled: true + config: + languages: + javascript: + mass_threshold: 300 + fixme : + enabled: true +ratings: + paths: + - "**/*.js" + - "**/*.css" + - "**/*.md" +exclude_paths: + - "dist/**/*" + - "docs/**/*" + - "examples/**/*" diff --git a/.csslintrc b/.csslintrc new file mode 100644 index 00000000..2b014c6a --- /dev/null +++ b/.csslintrc @@ -0,0 +1,6 @@ +{ + "adjoining-classes": false, + "box-model": false, + "box-sizing": false, + "order-alphabetical": false +} diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 00000000..00d60a6e --- /dev/null +++ b/.eslintrc @@ -0,0 +1,6 @@ +{ + "rules": { + "complexity": [2, 50], + "max-statements": [2, 100] + } +} diff --git a/.mdlrc b/.mdlrc new file mode 100644 index 00000000..bb5535c3 --- /dev/null +++ b/.mdlrc @@ -0,0 +1,7 @@ +// Markdown Lint Rules +// https://github.com/mivok/markdownlint/blob/master/docs/RULES.md + +rules + "~MD012", // alert on multiple consecutive blank lines + "~MD013", // line length should be no more than 80 characters + "~MD014", // Dollar signs used before commands without showing output diff --git a/HISTORY.md b/HISTORY.md index 0b7bad0d..e588235e 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -14,7 +14,7 @@ http://visjs.org - Fixed #2170: Improved the contribution docs (#1991, #2158, #2178, #2183, #2213, #2218, #2219) - Implemented #1969: generate individual css files for network and timeline (#1970) - Cleanup bower.json (#1968) -- Removed feature-request page from website (TODO) +- Fixed #2114: Removed feature-request page from website - Distinguish better between `devDependencies` and `dependencies` (#1967) - Typos and minor docs improvements (#1958, #2028, #2050, #2093, #2222, #2223, #2224) - Replaced `gulp-minify-css` with `gulp-clean-css` (#1953) @@ -266,7 +266,7 @@ http://visjs.org ### General - Fixed #1353: Custom bundling with browserify requiring manual installation - of `babelify`. + of `babelify`. ### Network @@ -451,7 +451,7 @@ http://visjs.org - Fixed #1033: Moved item data not updated in DataSet when using an asynchronous `onMove` handler. - Fixed #239: Do not zoom/move the window when the mouse is on the left panel - with group labels. + with group labels. ## 2015-07-03, version 4.4.0 diff --git a/examples/timeline/other/drag&drop.html b/examples/timeline/other/drag&drop.html index 81bcb1f1..5810eb9b 100644 --- a/examples/timeline/other/drag&drop.html +++ b/examples/timeline/other/drag&drop.html @@ -49,6 +49,10 @@
  • item 3 - range
  • +
  • + item 3 - range - fixed times -
    + (start: now, end: now + 10 min) +
  • @@ -110,12 +114,16 @@ var item = { id: new Date(), type: itemType, - content: event.target.innerHTML.split('-')[0].trim(), - start: new Date(), - end: new Date(1000*60*60*24 + (new Date()).valueOf()), + content: event.target.innerHTML.split('-')[0].trim() }; - event.dataTransfer.setData("text/plain", JSON.stringify(item)); + var isFixedTimes = (event.target.innerHTML.split('-')[2] && event.target.innerHTML.split('-')[2].trim() == 'fixed times') + if (isFixedTimes) { + item.start = new Date(); + item.end = new Date(1000*60*10 + (new Date()).valueOf()); + } + + event.dataTransfer.setData("text", JSON.stringify(item)); } var items = document.querySelectorAll('.items .item'); diff --git a/gulpfile.js b/gulpfile.js index 697185d3..05bf2bc3 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -8,7 +8,6 @@ var rename = require("gulp-rename"); var webpack = require('webpack'); var uglify = require('uglify-js'); var rimraf = require('rimraf'); -var merge = require('merge-stream'); var argv = require('yargs').argv; var ENTRY = './index.js'; diff --git a/lib/timeline/Core.js b/lib/timeline/Core.js index aa8344da..a5034479 100644 --- a/lib/timeline/Core.js +++ b/lib/timeline/Core.js @@ -231,7 +231,7 @@ Core.prototype._create = function (container) { } // make sure your target is a vis element - if (!event.target.className.includes('vis')) return; + if (!event.target.className.indexOf("vis") > -1) return; // make sure only one item is added every time you're over the timeline if (itemAddedToTimeline) return; @@ -244,7 +244,7 @@ Core.prototype._create = function (container) { function handleDrop(event) { // return when dropping non-vis items try { - var itemData = JSON.parse(event.dataTransfer.getData("text/plain")) + var itemData = JSON.parse(event.dataTransfer.getData("text")) if (!itemData.content) return } catch (err) { return false; @@ -252,8 +252,8 @@ Core.prototype._create = function (container) { itemAddedToTimeline = false; event.center = { - x: event.x, - y: event.y + x: event.clientX, + y: event.clientY } me.itemSet._onAddItem(event); diff --git a/lib/timeline/component/ItemSet.js b/lib/timeline/component/ItemSet.js index ed27f48a..b0a71b94 100644 --- a/lib/timeline/component/ItemSet.js +++ b/lib/timeline/component/ItemSet.js @@ -243,7 +243,7 @@ ItemSet.prototype._create = function(){ this.groupHammer.on('panstart', this._onGroupDragStart.bind(this)); this.groupHammer.on('panmove', this._onGroupDrag.bind(this)); this.groupHammer.on('panend', this._onGroupDragEnd.bind(this)); - this.groupHammer.get('pan').set({threshold:5, direction: Hammer.DIRECTION_HORIZONTAL}); + this.groupHammer.get('pan').set({threshold:5, direction: Hammer.DIRECTION_VERTICAL}); this.body.dom.centerContainer.addEventListener('mouseover', this._onMouseOver.bind(this)); this.body.dom.centerContainer.addEventListener('mouseout', this._onMouseOut.bind(this)); @@ -1578,6 +1578,10 @@ ItemSet.prototype._onGroupDrag = function (event) { if (this.options.groupEditable.order && this.groupTouchParams.group) { event.stopPropagation(); + var groupsData = this.groupsData; + if (this.groupsData instanceof DataView) { + groupsData = this.groupsData.getDataSet() + } // drag from one group to another var group = this.groupFromTarget(event); @@ -1602,25 +1606,23 @@ ItemSet.prototype._onGroupDrag = function (event) { } if (group && group != this.groupTouchParams.group) { - var groupsData = this.groupsData; var targetGroup = groupsData.get(group.groupId); var draggedGroup = groupsData.get(this.groupTouchParams.group.groupId); // switch groups if (draggedGroup && targetGroup) { this.options.groupOrderSwap(draggedGroup, targetGroup, this.groupsData); - this.groupsData.update(draggedGroup); - this.groupsData.update(targetGroup); + groupsData.update(draggedGroup); + groupsData.update(targetGroup); } // fetch current order of groups - var newOrder = this.groupsData.getIds({ + var newOrder = groupsData.getIds({ order: this.options.groupOrder - }); + }); // in case of changes since _onGroupDragStart if (!util.equalArray(newOrder, this.groupTouchParams.originalOrder)) { - var groupsData = this.groupsData; var origOrder = this.groupTouchParams.originalOrder; var draggedId = this.groupTouchParams.group.groupId; var numGroups = Math.min(origOrder.length, newOrder.length); @@ -1854,12 +1856,12 @@ ItemSet.prototype._onAddItem = function (event) { newItemData[this.itemsData._fieldId] = itemData.id || util.randomUUID(); if (itemData.type == 'range' || (itemData.end && itemData.start)) { - if (!itemData.end) { var end = this.body.util.toTime(x + this.props.width / 5); newItemData.end = snap ? snap(end, scale, step) : end; } else { - newItemData.end = new Date(newItemData.start._i).getTime() + new Date(itemData.end).getTime() - new Date(itemData.start).getTime(); + newItemData.end = itemData.end; + newItemData.start = itemData.start; } } } else { diff --git a/lib/util.js b/lib/util.js index 22deac1d..54d68bf7 100644 --- a/lib/util.js +++ b/lib/util.js @@ -1488,17 +1488,19 @@ exports.topMost = function (pile, accessors) { accessors = [accessors]; } for (const member of pile) { - candidate = member[accessors[0]]; - for (let i = 1; i < accessors.length; i++){ + if (member) { + candidate = member[accessors[0]]; + for (let i = 1; i < accessors.length; i++){ + if (candidate) { + candidate = candidate[accessors[i]] + } else { + continue; + } + } if (candidate) { - candidate = candidate[accessors[i]] - } else { - continue; + break; } } - if (candidate) { - break; - } } return candidate; -} +}; diff --git a/package.json b/package.json index 5d22df48..93c24982 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,6 @@ "gulp-concat": "^2.6.0", "gulp-rename": "^1.2.2", "gulp-util": "^3.0.7", - "merge-stream": "^1.0.0", "mocha": "^3.1.2", "rimraf": "^2.5.2", "uglify-js": "^2.6.2",