Browse Source

Released version 3.0.0

css_transitions
jos 10 years ago
parent
commit
e913b4a7cb
7 changed files with 229 additions and 85 deletions
  1. +3
    -2
      HISTORY.md
  2. +1
    -1
      bower.json
  3. +208
    -65
      dist/vis.js
  4. +1
    -1
      dist/vis.min.css
  5. +14
    -14
      dist/vis.min.js
  6. +1
    -1
      misc/how_to_publish.md
  7. +1
    -1
      package.json

+ 3
- 2
HISTORY.md View File

@ -2,10 +2,11 @@
http://visjs.org http://visjs.org
## not yet released, version 2.1.0
## 2014-07-07, version 3.0.0
### Timeline ### Timeline
- Implemented support for displaying a `title` for both items and groups.
- Fixed auto detected item type being preferred over the global item `type`. - Fixed auto detected item type being preferred over the global item `type`.
- Throws an error when constructing without new keyword. - Throws an error when constructing without new keyword.
- Removed the 'rangeoverflow' item type. Instead, one can use a regular range - Removed the 'rangeoverflow' item type. Instead, one can use a regular range
@ -18,7 +19,7 @@ http://visjs.org
- Fixed ranges in the Timeline sometimes overlapping when dragging the Timeline. - Fixed ranges in the Timeline sometimes overlapping when dragging the Timeline.
- Fixed `DataView` not working in Timeline. - Fixed `DataView` not working in Timeline.
### Network
### Network (formerly named Graph)
- Renamed `Graph` to `Network` to prevent confusion with the visualizations - Renamed `Graph` to `Network` to prevent confusion with the visualizations
`Graph2d` and `Graph3d`. `Graph2d` and `Graph3d`.

+ 1
- 1
bower.json View File

@ -1,6 +1,6 @@
{ {
"name": "vis", "name": "vis",
"version": "2.0.1-SNAPSHOT",
"version": "3.0.0",
"description": "A dynamic, browser-based visualization library.", "description": "A dynamic, browser-based visualization library.",
"homepage": "http://visjs.org/", "homepage": "http://visjs.org/",
"repository": { "repository": {

+ 208
- 65
dist/vis.js View File

@ -4,7 +4,7 @@
* *
* A dynamic, browser-based visualization library. * A dynamic, browser-based visualization library.
* *
* @version 2.0.1-SNAPSHOT
* @version 3.0.0
* @date 2014-07-07 * @date 2014-07-07
* *
* @license * @license
@ -8195,6 +8195,7 @@ ItemSet.itemSetFromTarget = function(event) {
return null; return null;
}; };
/** /**
* @constructor Item * @constructor Item
* @param {Object} data Object containing (optional) parameters type, * @param {Object} data Object containing (optional) parameters type,
@ -8449,6 +8450,12 @@ ItemBox.prototype.redraw = function() {
this.dirty = true; this.dirty = true;
} }
// update title
if (this.data.title != this.title) {
dom.box.title = this.data.title;
this.title = this.data.title;
}
// update class // update class
var className = (this.data.className? ' ' + this.data.className : '') + var className = (this.data.className? ' ' + this.data.className : '') +
(this.selected ? ' selected' : ''); (this.selected ? ' selected' : '');
@ -8670,6 +8677,12 @@ ItemPoint.prototype.redraw = function() {
this.dirty = true; this.dirty = true;
} }
// update title
if (this.data.title != this.title) {
dom.point.title = this.data.title;
this.title = this.data.title;
}
// update class // update class
var className = (this.data.className? ' ' + this.data.className : '') + var className = (this.data.className? ' ' + this.data.className : '') +
(this.selected ? ' selected' : ''); (this.selected ? ' selected' : '');
@ -8855,6 +8868,12 @@ ItemRange.prototype.redraw = function() {
this.dirty = true; this.dirty = true;
} }
// update title
if (this.data.title != this.title) {
dom.box.title = this.data.title;
this.title = this.data.title;
}
// update class // update class
var className = (this.data.className ? (' ' + this.data.className) : '') + var className = (this.data.className ? (' ' + this.data.className) : '') +
(this.selected ? ' selected' : ''); (this.selected ? ' selected' : '');
@ -9121,6 +9140,9 @@ Group.prototype.setData = function(data) {
this.dom.inner.innerHTML = this.groupId; this.dom.inner.innerHTML = this.groupId;
} }
// update title
this.dom.label.title = data && data.title || '';
if (!this.dom.inner.firstChild) { if (!this.dom.inner.firstChild) {
util.addClassName(this.dom.inner, 'hidden'); util.addClassName(this.dom.inner, 'hidden');
} }
@ -26748,7 +26770,7 @@ else {
})(this); })(this);
},{}],4:[function(require,module,exports){ },{}],4:[function(require,module,exports){
var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};//! moment.js var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};//! moment.js
//! version : 2.6.0
//! version : 2.7.0
//! authors : Tim Wood, Iskren Chernev, Moment.js contributors //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
//! license : MIT //! license : MIT
//! momentjs.com //! momentjs.com
@ -26760,7 +26782,7 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
************************************/ ************************************/
var moment, var moment,
VERSION = "2.6.0",
VERSION = "2.7.0",
// the global-scope this is NOT the global object in Node.js // the global-scope this is NOT the global object in Node.js
globalScope = typeof global !== 'undefined' ? global : this, globalScope = typeof global !== 'undefined' ? global : this,
oldGlobalMoment, oldGlobalMoment,
@ -26785,6 +26807,7 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
_f : null, _f : null,
_l : null, _l : null,
_strict : null, _strict : null,
_tzm : null,
_isUTC : null, _isUTC : null,
_offset : null, // optional. Combine with _isUTC _offset : null, // optional. Combine with _isUTC
_pf : null, _pf : null,
@ -26893,6 +26916,16 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
// format function strings // format function strings
formatFunctions = {}, formatFunctions = {},
// default relative time thresholds
relativeTimeThresholds = {
s: 45, //seconds to minutes
m: 45, //minutes to hours
h: 22, //hours to days
dd: 25, //days to month (month == 1)
dm: 45, //days to months (months > 1)
dy: 345 //days to year
},
// tokens to ordinalize and pad // tokens to ordinalize and pad
ordinalizeTokens = 'DDD w W M D d'.split(' '), ordinalizeTokens = 'DDD w W M D d'.split(' '),
paddedTokens = 'M D H h m s w W'.split(' '), paddedTokens = 'M D H h m s w W'.split(' '),
@ -27032,6 +27065,16 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin']; lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin'];
// Pick the first defined of two or three arguments. dfl comes from
// default.
function dfl(a, b, c) {
switch (arguments.length) {
case 2: return a != null ? a : b;
case 3: return a != null ? a : b != null ? b : c;
default: throw new Error("Implement me");
}
}
function defaultParsingFlags() { function defaultParsingFlags() {
// We need to deep clone this object, and es5 standard is not very // We need to deep clone this object, and es5 standard is not very
// helpful. // helpful.
@ -27900,30 +27943,86 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
config._useUTC = true; config._useUTC = true;
config._tzm = timezoneMinutesFromString(input); config._tzm = timezoneMinutesFromString(input);
break; break;
// WEEKDAY - human
case 'dd':
case 'ddd':
case 'dddd':
a = getLangDefinition(config._l).weekdaysParse(input);
// if we didn't get a weekday name, mark the date as invalid
if (a != null) {
config._w = config._w || {};
config._w['d'] = a;
} else {
config._pf.invalidWeekday = input;
}
break;
// WEEK, WEEK DAY - numeric
case 'w': case 'w':
case 'ww': case 'ww':
case 'W': case 'W':
case 'WW': case 'WW':
case 'd': case 'd':
case 'dd':
case 'ddd':
case 'dddd':
case 'e': case 'e':
case 'E': case 'E':
token = token.substr(0, 1); token = token.substr(0, 1);
/* falls through */ /* falls through */
case 'gg':
case 'gggg': case 'gggg':
case 'GG':
case 'GGGG': case 'GGGG':
case 'GGGGG': case 'GGGGG':
token = token.substr(0, 2); token = token.substr(0, 2);
if (input) { if (input) {
config._w = config._w || {}; config._w = config._w || {};
config._w[token] = input;
config._w[token] = toInt(input);
} }
break; break;
case 'gg':
case 'GG':
config._w = config._w || {};
config._w[token] = moment.parseTwoDigitYear(input);
}
}
function dayOfYearFromWeekInfo(config) {
var w, weekYear, week, weekday, dow, doy, temp, lang;
w = config._w;
if (w.GG != null || w.W != null || w.E != null) {
dow = 1;
doy = 4;
// TODO: We need to take the current isoWeekYear, but that depends on
// how we interpret now (local, utc, fixed offset). So create
// a now version of current config (take local/utc/offset flags, and
// create now).
weekYear = dfl(w.GG, config._a[YEAR], weekOfYear(moment(), 1, 4).year);
week = dfl(w.W, 1);
weekday = dfl(w.E, 1);
} else {
lang = getLangDefinition(config._l);
dow = lang._week.dow;
doy = lang._week.doy;
weekYear = dfl(w.gg, config._a[YEAR], weekOfYear(moment(), dow, doy).year);
week = dfl(w.w, 1);
if (w.d != null) {
// weekday -- low day numbers are considered next week
weekday = w.d;
if (weekday < dow) {
++week;
}
} else if (w.e != null) {
// local weekday -- counting starts from begining of week
weekday = w.e + dow;
} else {
// default to begining of week
weekday = dow;
}
} }
temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow);
config._a[YEAR] = temp.year;
config._dayOfYear = temp.dayOfYear;
} }
// convert an array to a date. // convert an array to a date.
@ -27931,8 +28030,7 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
// note: all values past the year are optional and will default to the lowest possible value. // note: all values past the year are optional and will default to the lowest possible value.
// [year, month, day , hour, minute, second, millisecond] // [year, month, day , hour, minute, second, millisecond]
function dateFromConfig(config) { function dateFromConfig(config) {
var i, date, input = [], currentDate,
yearToUse, fixYear, w, temp, lang, weekday, week;
var i, date, input = [], currentDate, yearToUse;
if (config._d) { if (config._d) {
return; return;
@ -27942,39 +28040,12 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
//compute day of the year from weeks and weekdays //compute day of the year from weeks and weekdays
if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
fixYear = function (val) {
var intVal = parseInt(val, 10);
return val ?
(val.length < 3 ? (intVal > 68 ? 1900 + intVal : 2000 + intVal) : intVal) :
(config._a[YEAR] == null ? moment().weekYear() : config._a[YEAR]);
};
w = config._w;
if (w.GG != null || w.W != null || w.E != null) {
temp = dayOfYearFromWeeks(fixYear(w.GG), w.W || 1, w.E, 4, 1);
}
else {
lang = getLangDefinition(config._l);
weekday = w.d != null ? parseWeekday(w.d, lang) :
(w.e != null ? parseInt(w.e, 10) + lang._week.dow : 0);
week = parseInt(w.w, 10) || 1;
//if we're parsing 'd', then the low day numbers may be next week
if (w.d != null && weekday < lang._week.dow) {
week++;
}
temp = dayOfYearFromWeeks(fixYear(w.gg), week, weekday, lang._week.doy, lang._week.dow);
}
config._a[YEAR] = temp.year;
config._dayOfYear = temp.dayOfYear;
dayOfYearFromWeekInfo(config);
} }
//if the day of the year is set, figure out what it is //if the day of the year is set, figure out what it is
if (config._dayOfYear) { if (config._dayOfYear) {
yearToUse = config._a[YEAR] == null ? currentDate[YEAR] : config._a[YEAR];
yearToUse = dfl(config._a[YEAR], currentDate[YEAR]);
if (config._dayOfYear > daysInYear(yearToUse)) { if (config._dayOfYear > daysInYear(yearToUse)) {
config._pf._overflowDayOfYear = true; config._pf._overflowDayOfYear = true;
@ -27999,11 +28070,12 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
} }
// add the offsets to the time to be parsed so that we can have a clean array for checking isValid
input[HOUR] += toInt((config._tzm || 0) / 60);
input[MINUTE] += toInt((config._tzm || 0) % 60);
config._d = (config._useUTC ? makeUTCDate : makeDate).apply(null, input); config._d = (config._useUTC ? makeUTCDate : makeDate).apply(null, input);
// Apply timezone offset from input. The actual zone can be changed
// with parseZone.
if (config._tzm != null) {
config._d.setUTCMinutes(config._d.getUTCMinutes() + config._tzm);
}
} }
function dateFromObject(config) { function dateFromObject(config) {
@ -28043,6 +28115,11 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
// date from string and format string // date from string and format string
function makeDateFromStringAndFormat(config) { function makeDateFromStringAndFormat(config) {
if (config._f === moment.ISO_8601) {
parseISO(config);
return;
}
config._a = []; config._a = [];
config._pf.empty = true; config._pf.empty = true;
@ -28155,7 +28232,7 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
} }
// date from iso format // date from iso format
function makeDateFromString(config) {
function parseISO(config) {
var i, l, var i, l,
string = config._i, string = config._i,
match = isoRegex.exec(string); match = isoRegex.exec(string);
@ -28179,8 +28256,16 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
config._f += "Z"; config._f += "Z";
} }
makeDateFromStringAndFormat(config); makeDateFromStringAndFormat(config);
} else {
config._isValid = false;
} }
else {
}
// date from iso format or fallback
function makeDateFromString(config) {
parseISO(config);
if (config._isValid === false) {
delete config._isValid;
moment.createFromInputFallback(config); moment.createFromInputFallback(config);
} }
} }
@ -28261,15 +28346,15 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
hours = round(minutes / 60), hours = round(minutes / 60),
days = round(hours / 24), days = round(hours / 24),
years = round(days / 365), years = round(days / 365),
args = seconds < 45 && ['s', seconds] ||
args = seconds < relativeTimeThresholds.s && ['s', seconds] ||
minutes === 1 && ['m'] || minutes === 1 && ['m'] ||
minutes < 45 && ['mm', minutes] ||
minutes < relativeTimeThresholds.m && ['mm', minutes] ||
hours === 1 && ['h'] || hours === 1 && ['h'] ||
hours < 22 && ['hh', hours] ||
hours < relativeTimeThresholds.h && ['hh', hours] ||
days === 1 && ['d'] || days === 1 && ['d'] ||
days <= 25 && ['dd', days] ||
days <= 45 && ['M'] ||
days < 345 && ['MM', round(days / 30)] ||
days <= relativeTimeThresholds.dd && ['dd', days] ||
days <= relativeTimeThresholds.dm && ['M'] ||
days < relativeTimeThresholds.dy && ['MM', round(days / 30)] ||
years === 1 && ['y'] || ['yy', years]; years === 1 && ['y'] || ['yy', years];
args[2] = withoutSuffix; args[2] = withoutSuffix;
args[3] = milliseconds > 0; args[3] = milliseconds > 0;
@ -28315,6 +28400,7 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) { function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) {
var d = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, dayOfYear; var d = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, dayOfYear;
d = d === 0 ? 7 : d;
weekday = weekday != null ? weekday : firstDayOfWeek; weekday = weekday != null ? weekday : firstDayOfWeek;
daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0); daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0);
dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1; dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1;
@ -28390,6 +28476,40 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
config._d = new Date(config._i); config._d = new Date(config._i);
}); });
// Pick a moment m from moments so that m[fn](other) is true for all
// other. This relies on the function fn to be transitive.
//
// moments should either be an array of moment objects or an array, whose
// first element is an array of moment objects.
function pickBy(fn, moments) {
var res, i;
if (moments.length === 1 && isArray(moments[0])) {
moments = moments[0];
}
if (!moments.length) {
return moment();
}
res = moments[0];
for (i = 1; i < moments.length; ++i) {
if (moments[i][fn](res)) {
res = moments[i];
}
}
return res;
}
moment.min = function () {
var args = [].slice.call(arguments, 0);
return pickBy('isBefore', args);
};
moment.max = function () {
var args = [].slice.call(arguments, 0);
return pickBy('isAfter', args);
};
// creating with utc // creating with utc
moment.utc = function (input, format, lang, strict) { moment.utc = function (input, format, lang, strict) {
var c; var c;
@ -28486,6 +28606,9 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
// default format // default format
moment.defaultFormat = isoFormat; moment.defaultFormat = isoFormat;
// constant that refers to the ISO standard
moment.ISO_8601 = function () {};
// Plugins that add properties should also add the key here (null value), // Plugins that add properties should also add the key here (null value),
// so we can properly clone ourselves. // so we can properly clone ourselves.
moment.momentProperties = momentProperties; moment.momentProperties = momentProperties;
@ -28494,6 +28617,15 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
// It is intended to keep the offset in sync with the timezone. // It is intended to keep the offset in sync with the timezone.
moment.updateOffset = function () {}; moment.updateOffset = function () {};
// This function allows you to set a threshold for relative time strings
moment.relativeTimeThreshold = function(threshold, limit) {
if (relativeTimeThresholds[threshold] === undefined) {
return false;
}
relativeTimeThresholds[threshold] = limit;
return true;
};
// This function will load languages and then set the global language. If // This function will load languages and then set the global language. If
// no arguments are passed in, it will simply return the current global // no arguments are passed in, it will simply return the current global
// language key. // language key.
@ -28649,7 +28781,9 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
add : function (input, val) { add : function (input, val) {
var dur; var dur;
// switch args to support add('s', 1) and add(1, 's') // switch args to support add('s', 1) and add(1, 's')
if (typeof input === 'string') {
if (typeof input === 'string' && typeof val === 'string') {
dur = moment.duration(isNaN(+val) ? +input : +val, isNaN(+val) ? val : input);
} else if (typeof input === 'string') {
dur = moment.duration(+val, input); dur = moment.duration(+val, input);
} else { } else {
dur = moment.duration(input, val); dur = moment.duration(input, val);
@ -28661,7 +28795,9 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
subtract : function (input, val) { subtract : function (input, val) {
var dur; var dur;
// switch args to support subtract('s', 1) and subtract(1, 's') // switch args to support subtract('s', 1) and subtract(1, 's')
if (typeof input === 'string') {
if (typeof input === 'string' && typeof val === 'string') {
dur = moment.duration(isNaN(+val) ? +input : +val, isNaN(+val) ? val : input);
} else if (typeof input === 'string') {
dur = moment.duration(+val, input); dur = moment.duration(+val, input);
} else { } else {
dur = moment.duration(input, val); dur = moment.duration(input, val);
@ -28712,10 +28848,11 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
return this.from(moment(), withoutSuffix); return this.from(moment(), withoutSuffix);
}, },
calendar : function () {
calendar : function (time) {
// We want to compare the start of today, vs this. // We want to compare the start of today, vs this.
// Getting start-of-today depends on whether we're zone'd or not. // Getting start-of-today depends on whether we're zone'd or not.
var sod = makeAs(moment(), this).startOf('day'),
var now = time || moment(),
sod = makeAs(now, this).startOf('day'),
diff = this.diff(sod, 'days', true), diff = this.diff(sod, 'days', true),
format = diff < -6 ? 'sameElse' : format = diff < -6 ? 'sameElse' :
diff < -1 ? 'lastWeek' : diff < -1 ? 'lastWeek' :
@ -28810,15 +28947,21 @@ var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ?
return +this.clone().startOf(units) === +makeAs(input, this).startOf(units); return +this.clone().startOf(units) === +makeAs(input, this).startOf(units);
}, },
min: function (other) {
other = moment.apply(null, arguments);
return other < this ? this : other;
},
max: function (other) {
other = moment.apply(null, arguments);
return other > this ? this : other;
},
min: deprecate(
"moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",
function (other) {
other = moment.apply(null, arguments);
return other < this ? this : other;
}
),
max: deprecate(
"moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",
function (other) {
other = moment.apply(null, arguments);
return other > this ? this : other;
}
),
// keepTime = true means only change the timezone, without affecting // keepTime = true means only change the timezone, without affecting
// the local hour. So 5:31:26 +0300 --[zone(2, true)]--> 5:31:26 +0200 // the local hour. So 5:31:26 +0300 --[zone(2, true)]--> 5:31:26 +0200

+ 1
- 1
dist/vis.min.css
File diff suppressed because it is too large
View File


+ 14
- 14
dist/vis.min.js
File diff suppressed because it is too large
View File


+ 1
- 1
misc/how_to_publish.md View File

@ -21,7 +21,7 @@ This generates the vis.js library in the folder `./dist`.
npm test npm test
- Open some of the example in your browser and visually check if it works as expected.
- Open some of the examples in your browser and visually check if it works as expected.
## Commit ## Commit

+ 1
- 1
package.json View File

@ -1,6 +1,6 @@
{ {
"name": "vis", "name": "vis",
"version": "2.0.1-SNAPSHOT",
"version": "3.0.0",
"description": "A dynamic, browser-based visualization library.", "description": "A dynamic, browser-based visualization library.",
"homepage": "http://visjs.org/", "homepage": "http://visjs.org/",
"repository": { "repository": {

Loading…
Cancel
Save