diff --git a/dist/dracula.min.js b/dist/dracula.min.js index 67daffe..7dfb0ac 100644 --- a/dist/dracula.min.js +++ b/dist/dracula.min.js @@ -1,4 +1 @@ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Dracula=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o=lower?number:lower}}return number}module.exports=baseClamp},{}],35:[function(require,module,exports){var baseForOwn=require("./_baseForOwn"),createBaseEach=require("./_createBaseEach");var baseEach=createBaseEach(baseForOwn);module.exports=baseEach},{"./_baseForOwn":42,"./_createBaseEach":88}],36:[function(require,module,exports){var baseForOwnRight=require("./_baseForOwnRight"),createBaseEach=require("./_createBaseEach");var baseEachRight=createBaseEach(baseForOwnRight,true);module.exports=baseEachRight},{"./_baseForOwnRight":43,"./_createBaseEach":88}],37:[function(require,module,exports){var baseEach=require("./_baseEach");function baseEvery(collection,predicate){var result=true;baseEach(collection,function(value,index,collection){result=!!predicate(value,index,collection);return result});return result}module.exports=baseEvery},{"./_baseEach":35}],38:[function(require,module,exports){var baseEach=require("./_baseEach");function baseFilter(collection,predicate){var result=[];baseEach(collection,function(value,index,collection){if(predicate(value,index,collection)){result.push(value)}});return result}module.exports=baseFilter},{"./_baseEach":35}],39:[function(require,module,exports){function baseFindIndex(array,predicate,fromIndex,fromRight){var length=array.length,index=fromIndex+(fromRight?1:-1);while(fromRight?index--:++index0&&predicate(value)){if(depth>1){baseFlatten(value,depth-1,predicate,isStrict,result)}else{arrayPush(result,value)}}else if(!isStrict){result[result.length]=value}}return result}module.exports=baseFlatten},{"./_arrayPush":23,"./_isFlattenable":111}],41:[function(require,module,exports){var createBaseFor=require("./_createBaseFor");var baseFor=createBaseFor();module.exports=baseFor},{"./_createBaseFor":89}],42:[function(require,module,exports){var baseFor=require("./_baseFor"),keys=require("./keys");function baseForOwn(object,iteratee){return object&&baseFor(object,iteratee,keys)}module.exports=baseForOwn},{"./_baseFor":41,"./keys":192}],43:[function(require,module,exports){var baseForRight=require("./_baseForRight"),keys=require("./keys");function baseForOwnRight(object,iteratee){return object&&baseForRight(object,iteratee,keys)}module.exports=baseForOwnRight},{"./_baseForRight":44,"./keys":192}],44:[function(require,module,exports){var createBaseFor=require("./_createBaseFor");var baseForRight=createBaseFor(true);module.exports=baseForRight},{"./_createBaseFor":89}],45:[function(require,module,exports){var castPath=require("./_castPath"),toKey=require("./_toKey");function baseGet(object,path){path=castPath(path,object);var index=0,length=path.length;while(object!=null&&indexlength?0:length+start}end=end>length?length:end;if(end<0){end+=length}length=start>end?0:end-start>>>0;start>>>=0;var result=Array(length);while(++indexother||valIsSymbol&&othIsDefined&&othIsReflexive&&!othIsNull&&!othIsSymbol||valIsNull&&othIsDefined&&othIsReflexive||!valIsDefined&&othIsReflexive||!valIsReflexive){return 1}if(!valIsNull&&!valIsSymbol&&!othIsSymbol&&value=ordersLength){return result}var order=orders[index];return result*(order=="desc"?-1:1)}}return object.index-other.index}module.exports=compareMultiple},{"./_compareAscending":83}],85:[function(require,module,exports){function copyArray(source,array){var index=-1,length=source.length;array||(array=Array(length));while(++index-1?iterable[iteratee?collection[index]:index]:undefined}}module.exports=createFind},{"./_baseIteratee":58,"./isArrayLike":182,"./keys":192}],91:[function(require,module,exports){var getNative=require("./_getNative");var defineProperty=function(){try{var func=getNative(Object,"defineProperty");func({},"",{});return func}catch(e){}}();module.exports=defineProperty},{"./_getNative":99}],92:[function(require,module,exports){var SetCache=require("./_SetCache"),arraySome=require("./_arraySome"),cacheHas=require("./_cacheHas");var COMPARE_PARTIAL_FLAG=1,COMPARE_UNORDERED_FLAG=2;function equalArrays(array,other,bitmask,customizer,equalFunc,stack){var isPartial=bitmask&COMPARE_PARTIAL_FLAG,arrLength=array.length,othLength=other.length;if(arrLength!=othLength&&!(isPartial&&othLength>arrLength)){return false}var stacked=stack.get(array);if(stacked&&stack.get(other)){return stacked==other}var index=-1,result=true,seen=bitmask&COMPARE_UNORDERED_FLAG?new SetCache:undefined;stack.set(array,other);stack.set(other,array);while(++index-1&&value%1==0&&value-1}module.exports=listCacheHas},{"./_assocIndexOf":31}],123:[function(require,module,exports){var assocIndexOf=require("./_assocIndexOf");function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){++this.size;data.push([key,value])}else{data[index][1]=value}return this}module.exports=listCacheSet},{"./_assocIndexOf":31}],124:[function(require,module,exports){var Hash=require("./_Hash"),ListCache=require("./_ListCache"),Map=require("./_Map");function mapCacheClear(){this.size=0;this.__data__={hash:new Hash,map:new(Map||ListCache),string:new Hash}}module.exports=mapCacheClear},{"./_Hash":4,"./_ListCache":5,"./_Map":6}],125:[function(require,module,exports){var getMapData=require("./_getMapData");function mapCacheDelete(key){var result=getMapData(this,key)["delete"](key);this.size-=result?1:0;return result}module.exports=mapCacheDelete},{"./_getMapData":97}],126:[function(require,module,exports){var getMapData=require("./_getMapData");function mapCacheGet(key){return getMapData(this,key).get(key)}module.exports=mapCacheGet},{"./_getMapData":97}],127:[function(require,module,exports){var getMapData=require("./_getMapData");function mapCacheHas(key){return getMapData(this,key).has(key)}module.exports=mapCacheHas},{"./_getMapData":97}],128:[function(require,module,exports){var getMapData=require("./_getMapData");function mapCacheSet(key,value){var data=getMapData(this,key),size=data.size;data.set(key,value);this.size+=data.size==size?0:1;return this}module.exports=mapCacheSet},{"./_getMapData":97}],129:[function(require,module,exports){function mapToArray(map){var index=-1,result=Array(map.size);map.forEach(function(value,key){result[++index]=[key,value]});return result}module.exports=mapToArray},{}],130:[function(require,module,exports){function matchesStrictComparable(key,srcValue){return function(object){if(object==null){return false}return object[key]===srcValue&&(srcValue!==undefined||key in Object(object))}}module.exports=matchesStrictComparable},{}],131:[function(require,module,exports){var memoize=require("./memoize");var MAX_MEMOIZE_SIZE=500;function memoizeCapped(func){var result=memoize(func,function(key){if(cache.size===MAX_MEMOIZE_SIZE){cache.clear()}return key});var cache=result.cache;return result}module.exports=memoizeCapped},{"./memoize":195}],132:[function(require,module,exports){var getNative=require("./_getNative");var nativeCreate=getNative(Object,"create");module.exports=nativeCreate},{"./_getNative":99}],133:[function(require,module,exports){var overArg=require("./_overArg");var nativeKeys=overArg(Object.keys,Object);module.exports=nativeKeys},{"./_overArg":136}],134:[function(require,module,exports){var freeGlobal=require("./_freeGlobal");var freeExports=typeof exports=="object"&&exports&&!exports.nodeType&&exports;var freeModule=freeExports&&typeof module=="object"&&module&&!module.nodeType&&module;var moduleExports=freeModule&&freeModule.exports===freeExports;var freeProcess=moduleExports&&freeGlobal.process;var nodeUtil=function(){try{return freeProcess&&freeProcess.binding&&freeProcess.binding("util")}catch(e){}}();module.exports=nodeUtil},{"./_freeGlobal":95}],135:[function(require,module,exports){var objectProto=Object.prototype;var nativeObjectToString=objectProto.toString;function objectToString(value){return nativeObjectToString.call(value)}module.exports=objectToString},{}],136:[function(require,module,exports){function overArg(func,transform){return function(arg){return func(transform(arg))}}module.exports=overArg},{}],137:[function(require,module,exports){var apply=require("./_apply");var nativeMax=Math.max;function overRest(func,start,transform){start=nativeMax(start===undefined?func.length-1:start,0);return function(){var args=arguments,index=-1,length=nativeMax(args.length-start,0),array=Array(length);while(++index0){if(++count>=HOT_COUNT){return arguments[0]}}else{count=0}return func.apply(undefined,arguments)}}module.exports=shortOut},{}],145:[function(require,module,exports){var baseRandom=require("./_baseRandom");function shuffleSelf(array,size){var index=-1,length=array.length,lastIndex=length-1;size=size===undefined?length:size;while(++index-1:!!length&&baseIndexOf(collection,value,fromIndex)>-1}module.exports=includes},{"./_baseIndexOf":49,"./isArrayLike":182,"./isString":188,"./toInteger":212,"./values":215}],179:[function(require,module,exports){var apply=require("./_apply"),baseEach=require("./_baseEach"),baseInvoke=require("./_baseInvoke"),baseRest=require("./_baseRest"),isArrayLike=require("./isArrayLike");var invokeMap=baseRest(function(collection,path,args){var index=-1,isFunc=typeof path=="function",result=isArrayLike(collection)?Array(collection.length):[];baseEach(collection,function(value){result[++index]=isFunc?apply(path,value,args):baseInvoke(value,path,args)});return result});module.exports=invokeMap},{"./_apply":15,"./_baseEach":35,"./_baseInvoke":50,"./_baseRest":68,"./isArrayLike":182}],180:[function(require,module,exports){var baseIsArguments=require("./_baseIsArguments"),isObjectLike=require("./isObjectLike");var objectProto=Object.prototype;var hasOwnProperty=objectProto.hasOwnProperty;var propertyIsEnumerable=objectProto.propertyIsEnumerable;var isArguments=baseIsArguments(function(){return arguments}())?baseIsArguments:function(value){return isObjectLike(value)&&hasOwnProperty.call(value,"callee")&&!propertyIsEnumerable.call(value,"callee")};module.exports=isArguments},{"./_baseIsArguments":51,"./isObjectLike":187}],181:[function(require,module,exports){var isArray=Array.isArray;module.exports=isArray},{}],182:[function(require,module,exports){var isFunction=require("./isFunction"),isLength=require("./isLength");function isArrayLike(value){return value!=null&&isLength(value.length)&&!isFunction(value)}module.exports=isArrayLike},{"./isFunction":184,"./isLength":185}],183:[function(require,module,exports){var root=require("./_root"),stubFalse=require("./stubFalse");var freeExports=typeof exports=="object"&&exports&&!exports.nodeType&&exports;var freeModule=freeExports&&typeof module=="object"&&module&&!module.nodeType&&module;var moduleExports=freeModule&&freeModule.exports===freeExports;var Buffer=moduleExports?root.Buffer:undefined;var nativeIsBuffer=Buffer?Buffer.isBuffer:undefined;var isBuffer=nativeIsBuffer||stubFalse;module.exports=isBuffer},{"./_root":139,"./stubFalse":210}],184:[function(require,module,exports){var baseGetTag=require("./_baseGetTag"),isObject=require("./isObject");var asyncTag="[object AsyncFunction]",funcTag="[object Function]",genTag="[object GeneratorFunction]",proxyTag="[object Proxy]";function isFunction(value){if(!isObject(value)){return false}var tag=baseGetTag(value);return tag==funcTag||tag==genTag||tag==asyncTag||tag==proxyTag}module.exports=isFunction},{"./_baseGetTag":47,"./isObject":186}],185:[function(require,module,exports){var MAX_SAFE_INTEGER=9007199254740991;function isLength(value){return typeof value=="number"&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER}module.exports=isLength},{}],186:[function(require,module,exports){function isObject(value){var type=typeof value;return value!=null&&(type=="object"||type=="function")}module.exports=isObject},{}],187:[function(require,module,exports){function isObjectLike(value){return value!=null&&typeof value=="object"}module.exports=isObjectLike},{}],188:[function(require,module,exports){var baseGetTag=require("./_baseGetTag"),isArray=require("./isArray"),isObjectLike=require("./isObjectLike");var stringTag="[object String]";function isString(value){return typeof value=="string"||!isArray(value)&&isObjectLike(value)&&baseGetTag(value)==stringTag}module.exports=isString},{"./_baseGetTag":47,"./isArray":181,"./isObjectLike":187}],189:[function(require,module,exports){var baseGetTag=require("./_baseGetTag"),isObjectLike=require("./isObjectLike");var symbolTag="[object Symbol]";function isSymbol(value){return typeof value=="symbol"||isObjectLike(value)&&baseGetTag(value)==symbolTag}module.exports=isSymbol},{"./_baseGetTag":47,"./isObjectLike":187}],190:[function(require,module,exports){var baseIsTypedArray=require("./_baseIsTypedArray"),baseUnary=require("./_baseUnary"),nodeUtil=require("./_nodeUtil");var nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray;var isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray;module.exports=isTypedArray},{"./_baseIsTypedArray":57,"./_baseUnary":78,"./_nodeUtil":134}],191:[function(require,module,exports){var baseAssignValue=require("./_baseAssignValue"),createAggregator=require("./_createAggregator");var keyBy=createAggregator(function(result,value,key){baseAssignValue(result,key,value)});module.exports=keyBy},{"./_baseAssignValue":33,"./_createAggregator":87}],192:[function(require,module,exports){var arrayLikeKeys=require("./_arrayLikeKeys"),baseKeys=require("./_baseKeys"),isArrayLike=require("./isArrayLike");function keys(object){return isArrayLike(object)?arrayLikeKeys(object):baseKeys(object)}module.exports=keys},{"./_arrayLikeKeys":21,"./_baseKeys":59,"./isArrayLike":182}],193:[function(require,module,exports){function last(array){var length=array==null?0:array.length;return length?array[length-1]:undefined}module.exports=last},{}],194:[function(require,module,exports){var arrayMap=require("./_arrayMap"),baseIteratee=require("./_baseIteratee"),baseMap=require("./_baseMap"),isArray=require("./isArray");function map(collection,iteratee){var func=isArray(collection)?arrayMap:baseMap;return func(collection,baseIteratee(iteratee,3))}module.exports=map},{"./_arrayMap":22,"./_baseIteratee":58,"./_baseMap":60,"./isArray":181}],195:[function(require,module,exports){var MapCache=require("./_MapCache");var FUNC_ERROR_TEXT="Expected a function";function memoize(func,resolver){if(typeof func!="function"||resolver!=null&&typeof resolver!="function"){throw new TypeError(FUNC_ERROR_TEXT)}var memoized=function(){var args=arguments,key=resolver?resolver.apply(this,args):args[0],cache=memoized.cache;if(cache.has(key)){return cache.get(key)}var result=func.apply(this,args);memoized.cache=cache.set(key,result)||cache;return result};memoized.cache=new(memoize.Cache||MapCache);return memoized}memoize.Cache=MapCache;module.exports=memoize},{"./_MapCache":7}],196:[function(require,module,exports){var FUNC_ERROR_TEXT="Expected a function";function negate(predicate){if(typeof predicate!="function"){throw new TypeError(FUNC_ERROR_TEXT)}return function(){var args=arguments;switch(args.length){case 0:return!predicate.call(this);case 1:return!predicate.call(this,args[0]);case 2:return!predicate.call(this,args[0],args[1]);case 3:return!predicate.call(this,args[0],args[1],args[2])}return!predicate.apply(this,args)}}module.exports=negate},{}],197:[function(require,module,exports){var baseOrderBy=require("./_baseOrderBy"),isArray=require("./isArray");function orderBy(collection,iteratees,orders,guard){if(collection==null){return[]}if(!isArray(iteratees)){iteratees=iteratees==null?[]:[iteratees]}orders=guard?undefined:orders;if(!isArray(orders)){orders=orders==null?[]:[orders]}return baseOrderBy(collection,iteratees,orders)}module.exports=orderBy},{"./_baseOrderBy":63,"./isArray":181}],198:[function(require,module,exports){var createAggregator=require("./_createAggregator");var partition=createAggregator(function(result,value,key){result[key?0:1].push(value)},function(){return[[],[]]});module.exports=partition},{"./_createAggregator":87}],199:[function(require,module,exports){var baseProperty=require("./_baseProperty"),basePropertyDeep=require("./_basePropertyDeep"),isKey=require("./_isKey"),toKey=require("./_toKey");function property(path){return isKey(path)?baseProperty(toKey(path)):basePropertyDeep(path)}module.exports=property},{"./_baseProperty":64,"./_basePropertyDeep":65,"./_isKey":114,"./_toKey":154}],200:[function(require,module,exports){var arrayReduce=require("./_arrayReduce"),baseEach=require("./_baseEach"),baseIteratee=require("./_baseIteratee"),baseReduce=require("./_baseReduce"),isArray=require("./isArray");function reduce(collection,iteratee,accumulator){var func=isArray(collection)?arrayReduce:baseReduce,initAccum=arguments.length<3;return func(collection,baseIteratee(iteratee,4),accumulator,initAccum,baseEach)}module.exports=reduce},{"./_arrayReduce":24,"./_baseEach":35,"./_baseIteratee":58,"./_baseReduce":67,"./isArray":181}],201:[function(require,module,exports){var arrayReduceRight=require("./_arrayReduceRight"),baseEachRight=require("./_baseEachRight"),baseIteratee=require("./_baseIteratee"),baseReduce=require("./_baseReduce"),isArray=require("./isArray");function reduceRight(collection,iteratee,accumulator){var func=isArray(collection)?arrayReduceRight:baseReduce,initAccum=arguments.length<3;return func(collection,baseIteratee(iteratee,4),accumulator,initAccum,baseEachRight)}module.exports=reduceRight},{"./_arrayReduceRight":25,"./_baseEachRight":36,"./_baseIteratee":58,"./_baseReduce":67,"./isArray":181}],202:[function(require,module,exports){var arrayFilter=require("./_arrayFilter"),baseFilter=require("./_baseFilter"),baseIteratee=require("./_baseIteratee"),isArray=require("./isArray"),negate=require("./negate");function reject(collection,predicate){var func=isArray(collection)?arrayFilter:baseFilter;return func(collection,negate(baseIteratee(predicate,3)))}module.exports=reject},{"./_arrayFilter":20,"./_baseFilter":38,"./_baseIteratee":58,"./isArray":181,"./negate":196}],203:[function(require,module,exports){var arraySample=require("./_arraySample"),baseSample=require("./_baseSample"),isArray=require("./isArray");function sample(collection){var func=isArray(collection)?arraySample:baseSample;return func(collection)}module.exports=sample},{"./_arraySample":26,"./_baseSample":69,"./isArray":181}],204:[function(require,module,exports){var arraySampleSize=require("./_arraySampleSize"),baseSampleSize=require("./_baseSampleSize"),isArray=require("./isArray"),isIterateeCall=require("./_isIterateeCall"),toInteger=require("./toInteger");function sampleSize(collection,n,guard){if(guard?isIterateeCall(collection,n,guard):n===undefined){n=1}else{n=toInteger(n)}var func=isArray(collection)?arraySampleSize:baseSampleSize;return func(collection,n)}module.exports=sampleSize},{"./_arraySampleSize":27,"./_baseSampleSize":70,"./_isIterateeCall":113,"./isArray":181,"./toInteger":212}],205:[function(require,module,exports){var arrayShuffle=require("./_arrayShuffle"),baseShuffle=require("./_baseShuffle"),isArray=require("./isArray");function shuffle(collection){var func=isArray(collection)?arrayShuffle:baseShuffle;return func(collection)}module.exports=shuffle},{"./_arrayShuffle":28,"./_baseShuffle":72,"./isArray":181}],206:[function(require,module,exports){var baseKeys=require("./_baseKeys"),getTag=require("./_getTag"),isArrayLike=require("./isArrayLike"),isString=require("./isString"),stringSize=require("./_stringSize");var mapTag="[object Map]",setTag="[object Set]";function size(collection){if(collection==null){return 0}if(isArrayLike(collection)){return isString(collection)?stringSize(collection):collection.length}var tag=getTag(collection);if(tag==mapTag||tag==setTag){return collection.size}return baseKeys(collection).length}module.exports=size},{"./_baseKeys":59,"./_getTag":102,"./_stringSize":152,"./isArrayLike":182,"./isString":188}],207:[function(require,module,exports){var arraySome=require("./_arraySome"),baseIteratee=require("./_baseIteratee"),baseSome=require("./_baseSome"),isArray=require("./isArray"),isIterateeCall=require("./_isIterateeCall");function some(collection,predicate,guard){var func=isArray(collection)?arraySome:baseSome;if(guard&&isIterateeCall(collection,predicate,guard)){predicate=undefined}return func(collection,baseIteratee(predicate,3))}module.exports=some},{"./_arraySome":29,"./_baseIteratee":58,"./_baseSome":74,"./_isIterateeCall":113,"./isArray":181}],208:[function(require,module,exports){var baseFlatten=require("./_baseFlatten"),baseOrderBy=require("./_baseOrderBy"),baseRest=require("./_baseRest"),isIterateeCall=require("./_isIterateeCall");var sortBy=baseRest(function(collection,iteratees){if(collection==null){return[]}var length=iteratees.length;if(length>1&&isIterateeCall(collection,iteratees[0],iteratees[1])){iteratees=[]}else if(length>2&&isIterateeCall(iteratees[0],iteratees[1],iteratees[2])){iteratees=[iteratees[0]]}return baseOrderBy(collection,baseFlatten(iteratees,1),[])});module.exports=sortBy},{"./_baseFlatten":40,"./_baseOrderBy":63,"./_baseRest":68,"./_isIterateeCall":113}],209:[function(require,module,exports){function stubArray(){return[]}module.exports=stubArray},{}],210:[function(require,module,exports){function stubFalse(){return false}module.exports=stubFalse},{}],211:[function(require,module,exports){var toNumber=require("./toNumber");var INFINITY=1/0,MAX_INTEGER=1.7976931348623157e308;function toFinite(value){if(!value){return value===0?value:0}value=toNumber(value);if(value===INFINITY||value===-INFINITY){var sign=value<0?-1:1;return sign*MAX_INTEGER}return value===value?value:0}module.exports=toFinite},{"./toNumber":213}],212:[function(require,module,exports){var toFinite=require("./toFinite");function toInteger(value){var result=toFinite(value),remainder=result%1;return result===result?remainder?result-remainder:result:0}module.exports=toInteger},{"./toFinite":211}],213:[function(require,module,exports){var isObject=require("./isObject"),isSymbol=require("./isSymbol");var NAN=0/0;var reTrim=/^\s+|\s+$/g;var reIsBadHex=/^[-+]0x[0-9a-f]+$/i;var reIsBinary=/^0b[01]+$/i;var reIsOctal=/^0o[0-7]+$/i;var freeParseInt=parseInt;function toNumber(value){if(typeof value=="number"){return value}if(isSymbol(value)){return NAN}if(isObject(value)){var other=typeof value.valueOf=="function"?value.valueOf():value;value=isObject(other)?other+"":other}if(typeof value!="string"){return value===0?value:+value}value=value.replace(reTrim,"");var isBinary=reIsBinary.test(value);return isBinary||reIsOctal.test(value)?freeParseInt(value.slice(2),isBinary?2:8):reIsBadHex.test(value)?NAN:+value}module.exports=toNumber},{"./isObject":186,"./isSymbol":189}],214:[function(require,module,exports){var baseToString=require("./_baseToString");function toString(value){return value==null?"":baseToString(value)}module.exports=toString},{"./_baseToString":77}],215:[function(require,module,exports){var baseValues=require("./_baseValues"),keys=require("./keys");function values(object){return object==null?[]:baseValues(object,keys(object))}module.exports=values},{"./_baseValues":79,"./keys":192}],216:[function(require,module,exports){var v1=require("./v1");var v4=require("./v4");var uuid=v4;uuid.v1=v1;uuid.v4=v4;module.exports=uuid},{"./v1":219,"./v4":220}],217:[function(require,module,exports){var byteToHex=[];for(var i=0;i<256;++i){byteToHex[i]=(i+256).toString(16).substr(1)}function bytesToUuid(buf,offset){var i=offset||0;var bth=byteToHex;return bth[buf[i++]]+bth[buf[i++]]+bth[buf[i++]]+bth[buf[i++]]+"-"+bth[buf[i++]]+bth[buf[i++]]+"-"+bth[buf[i++]]+bth[buf[i++]]+"-"+bth[buf[i++]]+bth[buf[i++]]+"-"+bth[buf[i++]]+bth[buf[i++]]+bth[buf[i++]]+bth[buf[i++]]+bth[buf[i++]]+bth[buf[i++]]}module.exports=bytesToUuid},{}],218:[function(require,module,exports){(function(global){var rng;var crypto=global.crypto||global.msCrypto;if(crypto&&crypto.getRandomValues){var rnds8=new Uint8Array(16);rng=function whatwgRNG(){crypto.getRandomValues(rnds8);return rnds8}}if(!rng){var rnds=new Array(16);rng=function(){for(var i=0,r;i<16;i++){if((i&3)===0)r=Math.random()*4294967296;rnds[i]=r>>>((i&3)<<3)&255}return rnds}}module.exports=rng}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],219:[function(require,module,exports){var rng=require("./lib/rng");var bytesToUuid=require("./lib/bytesToUuid");var _seedBytes=rng();var _nodeId=[_seedBytes[0]|1,_seedBytes[1],_seedBytes[2],_seedBytes[3],_seedBytes[4],_seedBytes[5]];var _clockseq=(_seedBytes[6]<<8|_seedBytes[7])&16383;var _lastMSecs=0,_lastNSecs=0;function v1(options,buf,offset){var i=buf&&offset||0;var b=buf||[];options=options||{};var clockseq=options.clockseq!==undefined?options.clockseq:_clockseq;var msecs=options.msecs!==undefined?options.msecs:(new Date).getTime();var nsecs=options.nsecs!==undefined?options.nsecs:_lastNSecs+1;var dt=msecs-_lastMSecs+(nsecs-_lastNSecs)/1e4;if(dt<0&&options.clockseq===undefined){clockseq=clockseq+1&16383}if((dt<0||msecs>_lastMSecs)&&options.nsecs===undefined){nsecs=0}if(nsecs>=1e4){throw new Error("uuid.v1(): Can't create more than 10M uuids/sec")}_lastMSecs=msecs;_lastNSecs=nsecs;_clockseq=clockseq;msecs+=122192928e5;var tl=((msecs&268435455)*1e4+nsecs)%4294967296;b[i++]=tl>>>24&255;b[i++]=tl>>>16&255;b[i++]=tl>>>8&255;b[i++]=tl&255;var tmh=msecs/4294967296*1e4&268435455;b[i++]=tmh>>>8&255;b[i++]=tmh&255;b[i++]=tmh>>>24&15|16;b[i++]=tmh>>>16&255;b[i++]=clockseq>>>8|128;b[i++]=clockseq&255;var node=options.node||_nodeId;for(var n=0;n<6;++n){b[i+n]=node[n]}return buf?buf:bytesToUuid(b)}module.exports=v1},{"./lib/bytesToUuid":217,"./lib/rng":218}],220:[function(require,module,exports){var rng=require("./lib/rng");var bytesToUuid=require("./lib/bytesToUuid");function v4(options,buf,offset){var i=buf&&offset||0;if(typeof options=="string"){buf=options=="binary"?new Array(16):null;options=null}options=options||{};var rnds=options.random||(options.rng||rng)();rnds[6]=rnds[6]&15|64;rnds[8]=rnds[8]&63|128;if(buf){for(var ii=0;ii<16;++ii){buf[i+ii]=rnds[ii]}}return buf||bytesToUuid(rnds)}module.exports=v4},{"./lib/bytesToUuid":217,"./lib/rng":218}],221:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i2&&arguments[2]!==undefined?arguments[2]:{};var sourceNode=this.addNode(source);var targetNode=this.addNode(target);edgeData.source=sourceNode;edgeData.target=targetNode;this.edges.push(edgeData);sourceNode.edges.push(edgeData);targetNode.edges.push(edgeData);return edgeData}},{key:"removeNode",value:function removeNode(node){var _this=this;var id=isId(node)?node:node.id;node=this.nodes[id];delete this.nodes[id];this.edges.forEach(function(edge){if(edge.source===node||edge.target===node){_this.removeEdge(edge)}});return node}},{key:"removeEdge",value:function removeEdge(source,target){var found=void 0;if(!target){target=source.target;source=source.source}if(isId(source))source={id:source};if(isId(target))target={id:target};this.edges=this.edges.filter(function(edge){if(edge.source.id===source.id&&edge.target.id===target.id){found=edge;return false}return true});if(found){found.source.edges=found.source.edges.filter(function(edge){return edge!==found});found.target.edges=found.target.edges.filter(function(edge){return edge!==found})}return found}},{key:"toJSON",value:function toJSON(){return{nodes:this.nodes,edges:this.edges}}}],[{key:"create",value:function create(){return new Dracula}}]);return Dracula}();exports.default=Dracula},{uuid:216}],222:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;imaxx)maxx=x;if(xmaxy)maxy=y;if(ymax)xmove=max;if(xmove<-max)xmove=-max;if(ymove>max)ymove=max;if(ymove<-max)ymove=-max;node.layoutPosX+=xmove;node.layoutPosY+=ymove;node.layoutForceX=0;node.layoutForceY=0})}},{key:"layoutRepulsive",value:function layoutRepulsive(node1,node2){if(!node1||!node2){return}var dx=node2.layoutPosX-node1.layoutPosX;var dy=node2.layoutPosY-node1.layoutPosY;var d2=dx*dx+dy*dy;if(d2<.01){dx=.1*Math.random()+.1;dy=.1*Math.random()+.1;d2=dx*dx+dy*dy}var d=Math.sqrt(d2);if(dthis.maxRepulsiveForceDistance){d=this.maxRepulsiveForceDistance;d2=d*d}var attractiveForce=(d2-this.k*this.k)/this.k;if(!edge.attraction)edge.attraction=1;attractiveForce*=Math.log(edge.attraction)*.5+1;node2.layoutForceX-=attractiveForce*dx/d;node2.layoutForceY-=attractiveForce*dy/d;node1.layoutForceX+=attractiveForce*dx/d;node1.layoutForceY+=attractiveForce*dy/d}}],[{key:"create",value:function create(){for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}return new(Function.prototype.bind.apply(this,[null].concat(args)))}}]);return Spring}(_layout2.default);exports.default=Spring},{"./layout":222,"lodash/collection":157}],225:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;ir.width-20?newX-r.width+20:0);var clientY=y-(newY<20?newY-20:newY>r.height-20?newY-r.height+20:0);this.set.translate(clientX-Math.round(dx),clientY-Math.round(dy));shape.connections.forEach(function(connection){connection.draw()});this.set.ox=clientX;this.set.oy=clientY},function dragEnter(x,y){this.set.ox=x;this.set.oy=y;this.animate({"fill-opacity":.2},500)},function dragOut(){this.animate({"fill-opacity":0},500)})})};var RaphaelRenderer=function(_Renderer){_inherits(RaphaelRenderer,_Renderer);function RaphaelRenderer(element,graph,width,height){_classCallCheck(this,RaphaelRenderer);var _this=_possibleConstructorReturn(this,(RaphaelRenderer.__proto__||Object.getPrototypeOf(RaphaelRenderer)).call(this,element,graph,width,height));_this.canvas=Raphael(_this.element,_this.width,_this.height);_this.lineStyle={stroke:"#443399","stroke-width":"2px"};return _this}_createClass(RaphaelRenderer,[{key:"drawNode",value:function drawNode(node){var color=Raphael.getColor();if(node.render){node.shape=node.render(this.canvas,node)}else{node.shape=this.canvas.set();node.shape.push(this.canvas.ellipse(0,0,30,20).attr({stroke:color,"stroke-width":2,fill:color,"fill-opacity":0})).push(this.canvas.text(0,30,node.label||node.id)).translate(node.point[0],node.point[1])}node.shape.connections=[];dragify(node.shape)}},{key:"drawEdge",value:function drawEdge(edge){if(!edge.shape){edge.shape=this.canvas.connection(edge.source.shape,edge.target.shape,edge.style);edge.source.shape.connections.push(edge.shape);edge.target.shape.connections.push(edge.shape)}}}]);return RaphaelRenderer}(_renderer2.default);exports.default=RaphaelRenderer;var getConnectionPoints=function getConnectionPoints(obj1,obj2){var bb1=obj1.getBBox();var bb2=obj2.getBBox();var off1=0;var off2=0;return[{x:bb1.x+bb1.width/2,y:bb1.y-off1},{x:bb1.x+bb1.width/2,y:bb1.y+bb1.height+off1},{x:bb1.x-off1,y:bb1.y+bb1.height/2},{x:bb1.x+bb1.width+off1,y:bb1.y+bb1.height/2},{x:bb2.x+bb2.width/2,y:bb2.y-off2},{x:bb2.x+bb2.width/2,y:bb2.y+bb2.height+off2},{x:bb2.x-off2,y:bb2.y+bb2.height/2},{x:bb2.x+bb2.width+off2,y:bb2.y+bb2.height/2}]};Raphael.fn.connection=function Connection(obj1,obj2,style){var self=this;var edge={draw:function draw(){var p=getConnectionPoints(obj1,obj2);var d={};var dis=[];var dx=void 0;var dy=void 0;for(var i=0;i<4;i++){for(var j=4;j<8;j++){dx=Math.abs(p[i].x-p[j].x);dy=Math.abs(p[i].y-p[j].y);if(i===j-4||(i!==3&&j!==6||p[i].xp[j].x)&&(i!==0&&j!==5||p[i].y>p[j].y)&&(i!==1&&j!==4||p[i].y=lower?number:lower}}return number}module.exports=baseClamp},{}],35:[function(require,module,exports){var baseForOwn=require("./_baseForOwn"),createBaseEach=require("./_createBaseEach");var baseEach=createBaseEach(baseForOwn);module.exports=baseEach},{"./_baseForOwn":42,"./_createBaseEach":88}],36:[function(require,module,exports){var baseForOwnRight=require("./_baseForOwnRight"),createBaseEach=require("./_createBaseEach");var baseEachRight=createBaseEach(baseForOwnRight,true);module.exports=baseEachRight},{"./_baseForOwnRight":43,"./_createBaseEach":88}],37:[function(require,module,exports){var baseEach=require("./_baseEach");function baseEvery(collection,predicate){var result=true;baseEach(collection,function(value,index,collection){result=!!predicate(value,index,collection);return result});return result}module.exports=baseEvery},{"./_baseEach":35}],38:[function(require,module,exports){var baseEach=require("./_baseEach");function baseFilter(collection,predicate){var result=[];baseEach(collection,function(value,index,collection){if(predicate(value,index,collection)){result.push(value)}});return result}module.exports=baseFilter},{"./_baseEach":35}],39:[function(require,module,exports){function baseFindIndex(array,predicate,fromIndex,fromRight){var length=array.length,index=fromIndex+(fromRight?1:-1);while(fromRight?index--:++index0&&predicate(value)){if(depth>1){baseFlatten(value,depth-1,predicate,isStrict,result)}else{arrayPush(result,value)}}else if(!isStrict){result[result.length]=value}}return result}module.exports=baseFlatten},{"./_arrayPush":23,"./_isFlattenable":111}],41:[function(require,module,exports){var createBaseFor=require("./_createBaseFor");var baseFor=createBaseFor();module.exports=baseFor},{"./_createBaseFor":89}],42:[function(require,module,exports){var baseFor=require("./_baseFor"),keys=require("./keys");function baseForOwn(object,iteratee){return object&&baseFor(object,iteratee,keys)}module.exports=baseForOwn},{"./_baseFor":41,"./keys":192}],43:[function(require,module,exports){var baseForRight=require("./_baseForRight"),keys=require("./keys");function baseForOwnRight(object,iteratee){return object&&baseForRight(object,iteratee,keys)}module.exports=baseForOwnRight},{"./_baseForRight":44,"./keys":192}],44:[function(require,module,exports){var createBaseFor=require("./_createBaseFor");var baseForRight=createBaseFor(true);module.exports=baseForRight},{"./_createBaseFor":89}],45:[function(require,module,exports){var castPath=require("./_castPath"),toKey=require("./_toKey");function baseGet(object,path){path=castPath(path,object);var index=0,length=path.length;while(object!=null&&indexlength?0:length+start}end=end>length?length:end;if(end<0){end+=length}length=start>end?0:end-start>>>0;start>>>=0;var result=Array(length);while(++indexother||valIsSymbol&&othIsDefined&&othIsReflexive&&!othIsNull&&!othIsSymbol||valIsNull&&othIsDefined&&othIsReflexive||!valIsDefined&&othIsReflexive||!valIsReflexive){return 1}if(!valIsNull&&!valIsSymbol&&!othIsSymbol&&value=ordersLength){return result}var order=orders[index];return result*(order=="desc"?-1:1)}}return object.index-other.index}module.exports=compareMultiple},{"./_compareAscending":83}],85:[function(require,module,exports){function copyArray(source,array){var index=-1,length=source.length;array||(array=Array(length));while(++index-1?iterable[iteratee?collection[index]:index]:undefined}}module.exports=createFind},{"./_baseIteratee":58,"./isArrayLike":182,"./keys":192}],91:[function(require,module,exports){var getNative=require("./_getNative");var defineProperty=function(){try{var func=getNative(Object,"defineProperty");func({},"",{});return func}catch(e){}}();module.exports=defineProperty},{"./_getNative":99}],92:[function(require,module,exports){var SetCache=require("./_SetCache"),arraySome=require("./_arraySome"),cacheHas=require("./_cacheHas");var COMPARE_PARTIAL_FLAG=1,COMPARE_UNORDERED_FLAG=2;function equalArrays(array,other,bitmask,customizer,equalFunc,stack){var isPartial=bitmask&COMPARE_PARTIAL_FLAG,arrLength=array.length,othLength=other.length;if(arrLength!=othLength&&!(isPartial&&othLength>arrLength)){return false}var stacked=stack.get(array);if(stacked&&stack.get(other)){return stacked==other}var index=-1,result=true,seen=bitmask&COMPARE_UNORDERED_FLAG?new SetCache:undefined;stack.set(array,other);stack.set(other,array);while(++index-1&&value%1==0&&value-1}module.exports=listCacheHas},{"./_assocIndexOf":31}],123:[function(require,module,exports){var assocIndexOf=require("./_assocIndexOf");function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf(data,key);if(index<0){++this.size;data.push([key,value])}else{data[index][1]=value}return this}module.exports=listCacheSet},{"./_assocIndexOf":31}],124:[function(require,module,exports){var Hash=require("./_Hash"),ListCache=require("./_ListCache"),Map=require("./_Map");function mapCacheClear(){this.size=0;this.__data__={hash:new Hash,map:new(Map||ListCache),string:new Hash}}module.exports=mapCacheClear},{"./_Hash":4,"./_ListCache":5,"./_Map":6}],125:[function(require,module,exports){var getMapData=require("./_getMapData");function mapCacheDelete(key){var result=getMapData(this,key)["delete"](key);this.size-=result?1:0;return result}module.exports=mapCacheDelete},{"./_getMapData":97}],126:[function(require,module,exports){var getMapData=require("./_getMapData");function mapCacheGet(key){return getMapData(this,key).get(key)}module.exports=mapCacheGet},{"./_getMapData":97}],127:[function(require,module,exports){var getMapData=require("./_getMapData");function mapCacheHas(key){return getMapData(this,key).has(key)}module.exports=mapCacheHas},{"./_getMapData":97}],128:[function(require,module,exports){var getMapData=require("./_getMapData");function mapCacheSet(key,value){var data=getMapData(this,key),size=data.size;data.set(key,value);this.size+=data.size==size?0:1;return this}module.exports=mapCacheSet},{"./_getMapData":97}],129:[function(require,module,exports){function mapToArray(map){var index=-1,result=Array(map.size);map.forEach(function(value,key){result[++index]=[key,value]});return result}module.exports=mapToArray},{}],130:[function(require,module,exports){function matchesStrictComparable(key,srcValue){return function(object){if(object==null){return false}return object[key]===srcValue&&(srcValue!==undefined||key in Object(object))}}module.exports=matchesStrictComparable},{}],131:[function(require,module,exports){var memoize=require("./memoize");var MAX_MEMOIZE_SIZE=500;function memoizeCapped(func){var result=memoize(func,function(key){if(cache.size===MAX_MEMOIZE_SIZE){cache.clear()}return key});var cache=result.cache;return result}module.exports=memoizeCapped},{"./memoize":195}],132:[function(require,module,exports){var getNative=require("./_getNative");var nativeCreate=getNative(Object,"create");module.exports=nativeCreate},{"./_getNative":99}],133:[function(require,module,exports){var overArg=require("./_overArg");var nativeKeys=overArg(Object.keys,Object);module.exports=nativeKeys},{"./_overArg":136}],134:[function(require,module,exports){var freeGlobal=require("./_freeGlobal");var freeExports=typeof exports=="object"&&exports&&!exports.nodeType&&exports;var freeModule=freeExports&&typeof module=="object"&&module&&!module.nodeType&&module;var moduleExports=freeModule&&freeModule.exports===freeExports;var freeProcess=moduleExports&&freeGlobal.process;var nodeUtil=function(){try{return freeProcess&&freeProcess.binding&&freeProcess.binding("util")}catch(e){}}();module.exports=nodeUtil},{"./_freeGlobal":95}],135:[function(require,module,exports){var objectProto=Object.prototype;var nativeObjectToString=objectProto.toString;function objectToString(value){return nativeObjectToString.call(value)}module.exports=objectToString},{}],136:[function(require,module,exports){function overArg(func,transform){return function(arg){return func(transform(arg))}}module.exports=overArg},{}],137:[function(require,module,exports){var apply=require("./_apply");var nativeMax=Math.max;function overRest(func,start,transform){start=nativeMax(start===undefined?func.length-1:start,0);return function(){var args=arguments,index=-1,length=nativeMax(args.length-start,0),array=Array(length);while(++index0){if(++count>=HOT_COUNT){return arguments[0]}}else{count=0}return func.apply(undefined,arguments)}}module.exports=shortOut},{}],145:[function(require,module,exports){var baseRandom=require("./_baseRandom");function shuffleSelf(array,size){var index=-1,length=array.length,lastIndex=length-1;size=size===undefined?length:size;while(++index-1:!!length&&baseIndexOf(collection,value,fromIndex)>-1}module.exports=includes},{"./_baseIndexOf":49,"./isArrayLike":182,"./isString":188,"./toInteger":212,"./values":215}],179:[function(require,module,exports){var apply=require("./_apply"),baseEach=require("./_baseEach"),baseInvoke=require("./_baseInvoke"),baseRest=require("./_baseRest"),isArrayLike=require("./isArrayLike");var invokeMap=baseRest(function(collection,path,args){var index=-1,isFunc=typeof path=="function",result=isArrayLike(collection)?Array(collection.length):[];baseEach(collection,function(value){result[++index]=isFunc?apply(path,value,args):baseInvoke(value,path,args)});return result});module.exports=invokeMap},{"./_apply":15,"./_baseEach":35,"./_baseInvoke":50,"./_baseRest":68,"./isArrayLike":182}],180:[function(require,module,exports){var baseIsArguments=require("./_baseIsArguments"),isObjectLike=require("./isObjectLike");var objectProto=Object.prototype;var hasOwnProperty=objectProto.hasOwnProperty;var propertyIsEnumerable=objectProto.propertyIsEnumerable;var isArguments=baseIsArguments(function(){return arguments}())?baseIsArguments:function(value){return isObjectLike(value)&&hasOwnProperty.call(value,"callee")&&!propertyIsEnumerable.call(value,"callee")};module.exports=isArguments},{"./_baseIsArguments":51,"./isObjectLike":187}],181:[function(require,module,exports){var isArray=Array.isArray;module.exports=isArray},{}],182:[function(require,module,exports){var isFunction=require("./isFunction"),isLength=require("./isLength");function isArrayLike(value){return value!=null&&isLength(value.length)&&!isFunction(value)}module.exports=isArrayLike},{"./isFunction":184,"./isLength":185}],183:[function(require,module,exports){var root=require("./_root"),stubFalse=require("./stubFalse");var freeExports=typeof exports=="object"&&exports&&!exports.nodeType&&exports;var freeModule=freeExports&&typeof module=="object"&&module&&!module.nodeType&&module;var moduleExports=freeModule&&freeModule.exports===freeExports;var Buffer=moduleExports?root.Buffer:undefined;var nativeIsBuffer=Buffer?Buffer.isBuffer:undefined;var isBuffer=nativeIsBuffer||stubFalse;module.exports=isBuffer},{"./_root":139,"./stubFalse":210}],184:[function(require,module,exports){var baseGetTag=require("./_baseGetTag"),isObject=require("./isObject");var asyncTag="[object AsyncFunction]",funcTag="[object Function]",genTag="[object GeneratorFunction]",proxyTag="[object Proxy]";function isFunction(value){if(!isObject(value)){return false}var tag=baseGetTag(value);return tag==funcTag||tag==genTag||tag==asyncTag||tag==proxyTag}module.exports=isFunction},{"./_baseGetTag":47,"./isObject":186}],185:[function(require,module,exports){var MAX_SAFE_INTEGER=9007199254740991;function isLength(value){return typeof value=="number"&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER}module.exports=isLength},{}],186:[function(require,module,exports){function isObject(value){var type=typeof value;return value!=null&&(type=="object"||type=="function")}module.exports=isObject},{}],187:[function(require,module,exports){function isObjectLike(value){return value!=null&&typeof value=="object"}module.exports=isObjectLike},{}],188:[function(require,module,exports){var baseGetTag=require("./_baseGetTag"),isArray=require("./isArray"),isObjectLike=require("./isObjectLike");var stringTag="[object String]";function isString(value){return typeof value=="string"||!isArray(value)&&isObjectLike(value)&&baseGetTag(value)==stringTag}module.exports=isString},{"./_baseGetTag":47,"./isArray":181,"./isObjectLike":187}],189:[function(require,module,exports){var baseGetTag=require("./_baseGetTag"),isObjectLike=require("./isObjectLike");var symbolTag="[object Symbol]";function isSymbol(value){return typeof value=="symbol"||isObjectLike(value)&&baseGetTag(value)==symbolTag}module.exports=isSymbol},{"./_baseGetTag":47,"./isObjectLike":187}],190:[function(require,module,exports){var baseIsTypedArray=require("./_baseIsTypedArray"),baseUnary=require("./_baseUnary"),nodeUtil=require("./_nodeUtil");var nodeIsTypedArray=nodeUtil&&nodeUtil.isTypedArray;var isTypedArray=nodeIsTypedArray?baseUnary(nodeIsTypedArray):baseIsTypedArray;module.exports=isTypedArray},{"./_baseIsTypedArray":57,"./_baseUnary":78,"./_nodeUtil":134}],191:[function(require,module,exports){var baseAssignValue=require("./_baseAssignValue"),createAggregator=require("./_createAggregator");var keyBy=createAggregator(function(result,value,key){baseAssignValue(result,key,value)});module.exports=keyBy},{"./_baseAssignValue":33,"./_createAggregator":87}],192:[function(require,module,exports){var arrayLikeKeys=require("./_arrayLikeKeys"),baseKeys=require("./_baseKeys"),isArrayLike=require("./isArrayLike");function keys(object){return isArrayLike(object)?arrayLikeKeys(object):baseKeys(object)}module.exports=keys},{"./_arrayLikeKeys":21,"./_baseKeys":59,"./isArrayLike":182}],193:[function(require,module,exports){function last(array){var length=array==null?0:array.length;return length?array[length-1]:undefined}module.exports=last},{}],194:[function(require,module,exports){var arrayMap=require("./_arrayMap"),baseIteratee=require("./_baseIteratee"),baseMap=require("./_baseMap"),isArray=require("./isArray");function map(collection,iteratee){var func=isArray(collection)?arrayMap:baseMap;return func(collection,baseIteratee(iteratee,3))}module.exports=map},{"./_arrayMap":22,"./_baseIteratee":58,"./_baseMap":60,"./isArray":181}],195:[function(require,module,exports){var MapCache=require("./_MapCache");var FUNC_ERROR_TEXT="Expected a function";function memoize(func,resolver){if(typeof func!="function"||resolver!=null&&typeof resolver!="function"){throw new TypeError(FUNC_ERROR_TEXT)}var memoized=function(){var args=arguments,key=resolver?resolver.apply(this,args):args[0],cache=memoized.cache;if(cache.has(key)){return cache.get(key)}var result=func.apply(this,args);memoized.cache=cache.set(key,result)||cache;return result};memoized.cache=new(memoize.Cache||MapCache);return memoized}memoize.Cache=MapCache;module.exports=memoize},{"./_MapCache":7}],196:[function(require,module,exports){var FUNC_ERROR_TEXT="Expected a function";function negate(predicate){if(typeof predicate!="function"){throw new TypeError(FUNC_ERROR_TEXT)}return function(){var args=arguments;switch(args.length){case 0:return!predicate.call(this);case 1:return!predicate.call(this,args[0]);case 2:return!predicate.call(this,args[0],args[1]);case 3:return!predicate.call(this,args[0],args[1],args[2])}return!predicate.apply(this,args)}}module.exports=negate},{}],197:[function(require,module,exports){var baseOrderBy=require("./_baseOrderBy"),isArray=require("./isArray");function orderBy(collection,iteratees,orders,guard){if(collection==null){return[]}if(!isArray(iteratees)){iteratees=iteratees==null?[]:[iteratees]}orders=guard?undefined:orders;if(!isArray(orders)){orders=orders==null?[]:[orders]}return baseOrderBy(collection,iteratees,orders)}module.exports=orderBy},{"./_baseOrderBy":63,"./isArray":181}],198:[function(require,module,exports){var createAggregator=require("./_createAggregator");var partition=createAggregator(function(result,value,key){result[key?0:1].push(value)},function(){return[[],[]]});module.exports=partition},{"./_createAggregator":87}],199:[function(require,module,exports){var baseProperty=require("./_baseProperty"),basePropertyDeep=require("./_basePropertyDeep"),isKey=require("./_isKey"),toKey=require("./_toKey");function property(path){return isKey(path)?baseProperty(toKey(path)):basePropertyDeep(path)}module.exports=property},{"./_baseProperty":64,"./_basePropertyDeep":65,"./_isKey":114,"./_toKey":154}],200:[function(require,module,exports){var arrayReduce=require("./_arrayReduce"),baseEach=require("./_baseEach"),baseIteratee=require("./_baseIteratee"),baseReduce=require("./_baseReduce"),isArray=require("./isArray");function reduce(collection,iteratee,accumulator){var func=isArray(collection)?arrayReduce:baseReduce,initAccum=arguments.length<3;return func(collection,baseIteratee(iteratee,4),accumulator,initAccum,baseEach)}module.exports=reduce},{"./_arrayReduce":24,"./_baseEach":35,"./_baseIteratee":58,"./_baseReduce":67,"./isArray":181}],201:[function(require,module,exports){var arrayReduceRight=require("./_arrayReduceRight"),baseEachRight=require("./_baseEachRight"),baseIteratee=require("./_baseIteratee"),baseReduce=require("./_baseReduce"),isArray=require("./isArray");function reduceRight(collection,iteratee,accumulator){var func=isArray(collection)?arrayReduceRight:baseReduce,initAccum=arguments.length<3;return func(collection,baseIteratee(iteratee,4),accumulator,initAccum,baseEachRight)}module.exports=reduceRight},{"./_arrayReduceRight":25,"./_baseEachRight":36,"./_baseIteratee":58,"./_baseReduce":67,"./isArray":181}],202:[function(require,module,exports){var arrayFilter=require("./_arrayFilter"),baseFilter=require("./_baseFilter"),baseIteratee=require("./_baseIteratee"),isArray=require("./isArray"),negate=require("./negate");function reject(collection,predicate){var func=isArray(collection)?arrayFilter:baseFilter;return func(collection,negate(baseIteratee(predicate,3)))}module.exports=reject},{"./_arrayFilter":20,"./_baseFilter":38,"./_baseIteratee":58,"./isArray":181,"./negate":196}],203:[function(require,module,exports){var arraySample=require("./_arraySample"),baseSample=require("./_baseSample"),isArray=require("./isArray");function sample(collection){var func=isArray(collection)?arraySample:baseSample;return func(collection)}module.exports=sample},{"./_arraySample":26,"./_baseSample":69,"./isArray":181}],204:[function(require,module,exports){var arraySampleSize=require("./_arraySampleSize"),baseSampleSize=require("./_baseSampleSize"),isArray=require("./isArray"),isIterateeCall=require("./_isIterateeCall"),toInteger=require("./toInteger");function sampleSize(collection,n,guard){if(guard?isIterateeCall(collection,n,guard):n===undefined){n=1}else{n=toInteger(n)}var func=isArray(collection)?arraySampleSize:baseSampleSize;return func(collection,n)}module.exports=sampleSize},{"./_arraySampleSize":27,"./_baseSampleSize":70,"./_isIterateeCall":113,"./isArray":181,"./toInteger":212}],205:[function(require,module,exports){var arrayShuffle=require("./_arrayShuffle"),baseShuffle=require("./_baseShuffle"),isArray=require("./isArray");function shuffle(collection){var func=isArray(collection)?arrayShuffle:baseShuffle;return func(collection)}module.exports=shuffle},{"./_arrayShuffle":28,"./_baseShuffle":72,"./isArray":181}],206:[function(require,module,exports){var baseKeys=require("./_baseKeys"),getTag=require("./_getTag"),isArrayLike=require("./isArrayLike"),isString=require("./isString"),stringSize=require("./_stringSize");var mapTag="[object Map]",setTag="[object Set]";function size(collection){if(collection==null){return 0}if(isArrayLike(collection)){return isString(collection)?stringSize(collection):collection.length}var tag=getTag(collection);if(tag==mapTag||tag==setTag){return collection.size}return baseKeys(collection).length}module.exports=size},{"./_baseKeys":59,"./_getTag":102,"./_stringSize":152,"./isArrayLike":182,"./isString":188}],207:[function(require,module,exports){var arraySome=require("./_arraySome"),baseIteratee=require("./_baseIteratee"),baseSome=require("./_baseSome"),isArray=require("./isArray"),isIterateeCall=require("./_isIterateeCall");function some(collection,predicate,guard){var func=isArray(collection)?arraySome:baseSome;if(guard&&isIterateeCall(collection,predicate,guard)){predicate=undefined}return func(collection,baseIteratee(predicate,3))}module.exports=some},{"./_arraySome":29,"./_baseIteratee":58,"./_baseSome":74,"./_isIterateeCall":113,"./isArray":181}],208:[function(require,module,exports){var baseFlatten=require("./_baseFlatten"),baseOrderBy=require("./_baseOrderBy"),baseRest=require("./_baseRest"),isIterateeCall=require("./_isIterateeCall");var sortBy=baseRest(function(collection,iteratees){if(collection==null){return[]}var length=iteratees.length;if(length>1&&isIterateeCall(collection,iteratees[0],iteratees[1])){iteratees=[]}else if(length>2&&isIterateeCall(iteratees[0],iteratees[1],iteratees[2])){iteratees=[iteratees[0]]}return baseOrderBy(collection,baseFlatten(iteratees,1),[])});module.exports=sortBy},{"./_baseFlatten":40,"./_baseOrderBy":63,"./_baseRest":68,"./_isIterateeCall":113}],209:[function(require,module,exports){function stubArray(){return[]}module.exports=stubArray},{}],210:[function(require,module,exports){function stubFalse(){return false}module.exports=stubFalse},{}],211:[function(require,module,exports){var toNumber=require("./toNumber");var INFINITY=1/0,MAX_INTEGER=1.7976931348623157e308;function toFinite(value){if(!value){return value===0?value:0}value=toNumber(value);if(value===INFINITY||value===-INFINITY){var sign=value<0?-1:1;return sign*MAX_INTEGER}return value===value?value:0}module.exports=toFinite},{"./toNumber":213}],212:[function(require,module,exports){var toFinite=require("./toFinite");function toInteger(value){var result=toFinite(value),remainder=result%1;return result===result?remainder?result-remainder:result:0}module.exports=toInteger},{"./toFinite":211}],213:[function(require,module,exports){var isObject=require("./isObject"),isSymbol=require("./isSymbol");var NAN=0/0;var reTrim=/^\s+|\s+$/g;var reIsBadHex=/^[-+]0x[0-9a-f]+$/i;var reIsBinary=/^0b[01]+$/i;var reIsOctal=/^0o[0-7]+$/i;var freeParseInt=parseInt;function toNumber(value){if(typeof value=="number"){return value}if(isSymbol(value)){return NAN}if(isObject(value)){var other=typeof value.valueOf=="function"?value.valueOf():value;value=isObject(other)?other+"":other}if(typeof value!="string"){return value===0?value:+value}value=value.replace(reTrim,"");var isBinary=reIsBinary.test(value);return isBinary||reIsOctal.test(value)?freeParseInt(value.slice(2),isBinary?2:8):reIsBadHex.test(value)?NAN:+value}module.exports=toNumber},{"./isObject":186,"./isSymbol":189}],214:[function(require,module,exports){var baseToString=require("./_baseToString");function toString(value){return value==null?"":baseToString(value)}module.exports=toString},{"./_baseToString":77}],215:[function(require,module,exports){var baseValues=require("./_baseValues"),keys=require("./keys");function values(object){return object==null?[]:baseValues(object,keys(object))}module.exports=values},{"./_baseValues":79,"./keys":192}],216:[function(require,module,exports){var v1=require("./v1");var v4=require("./v4");var uuid=v4;uuid.v1=v1;uuid.v4=v4;module.exports=uuid},{"./v1":219,"./v4":220}],217:[function(require,module,exports){var byteToHex=[];for(var i=0;i<256;++i){byteToHex[i]=(i+256).toString(16).substr(1)}function bytesToUuid(buf,offset){var i=offset||0;var bth=byteToHex;return bth[buf[i++]]+bth[buf[i++]]+bth[buf[i++]]+bth[buf[i++]]+"-"+bth[buf[i++]]+bth[buf[i++]]+"-"+bth[buf[i++]]+bth[buf[i++]]+"-"+bth[buf[i++]]+bth[buf[i++]]+"-"+bth[buf[i++]]+bth[buf[i++]]+bth[buf[i++]]+bth[buf[i++]]+bth[buf[i++]]+bth[buf[i++]]}module.exports=bytesToUuid},{}],218:[function(require,module,exports){(function(global){var rng;var crypto=global.crypto||global.msCrypto;if(crypto&&crypto.getRandomValues){var rnds8=new Uint8Array(16);rng=function whatwgRNG(){crypto.getRandomValues(rnds8);return rnds8}}if(!rng){var rnds=new Array(16);rng=function(){for(var i=0,r;i<16;i++){if((i&3)===0)r=Math.random()*4294967296;rnds[i]=r>>>((i&3)<<3)&255}return rnds}}module.exports=rng}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],219:[function(require,module,exports){var rng=require("./lib/rng");var bytesToUuid=require("./lib/bytesToUuid");var _seedBytes=rng();var _nodeId=[_seedBytes[0]|1,_seedBytes[1],_seedBytes[2],_seedBytes[3],_seedBytes[4],_seedBytes[5]];var _clockseq=(_seedBytes[6]<<8|_seedBytes[7])&16383;var _lastMSecs=0,_lastNSecs=0;function v1(options,buf,offset){var i=buf&&offset||0;var b=buf||[];options=options||{};var clockseq=options.clockseq!==undefined?options.clockseq:_clockseq;var msecs=options.msecs!==undefined?options.msecs:(new Date).getTime();var nsecs=options.nsecs!==undefined?options.nsecs:_lastNSecs+1;var dt=msecs-_lastMSecs+(nsecs-_lastNSecs)/1e4;if(dt<0&&options.clockseq===undefined){clockseq=clockseq+1&16383}if((dt<0||msecs>_lastMSecs)&&options.nsecs===undefined){nsecs=0}if(nsecs>=1e4){throw new Error("uuid.v1(): Can't create more than 10M uuids/sec")}_lastMSecs=msecs;_lastNSecs=nsecs;_clockseq=clockseq;msecs+=122192928e5;var tl=((msecs&268435455)*1e4+nsecs)%4294967296;b[i++]=tl>>>24&255;b[i++]=tl>>>16&255;b[i++]=tl>>>8&255;b[i++]=tl&255;var tmh=msecs/4294967296*1e4&268435455;b[i++]=tmh>>>8&255;b[i++]=tmh&255;b[i++]=tmh>>>24&15|16;b[i++]=tmh>>>16&255;b[i++]=clockseq>>>8|128;b[i++]=clockseq&255;var node=options.node||_nodeId;for(var n=0;n<6;++n){b[i+n]=node[n]}return buf?buf:bytesToUuid(b)}module.exports=v1},{"./lib/bytesToUuid":217,"./lib/rng":218}],220:[function(require,module,exports){var rng=require("./lib/rng");var bytesToUuid=require("./lib/bytesToUuid");function v4(options,buf,offset){var i=buf&&offset||0;if(typeof options=="string"){buf=options=="binary"?new Array(16):null;options=null}options=options||{};var rnds=options.random||(options.rng||rng)();rnds[6]=rnds[6]&15|64;rnds[8]=rnds[8]&63|128;if(buf){for(var ii=0;ii<16;++ii){buf[i+ii]=rnds[ii]}}return buf||bytesToUuid(rnds)}module.exports=v4},{"./lib/bytesToUuid":217,"./lib/rng":218}],221:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i2&&arguments[2]!==undefined?arguments[2]:{};var sourceNode=this.addNode(source);var targetNode=this.addNode(target);edgeData.source=sourceNode;edgeData.target=targetNode;this.edges.push(edgeData);sourceNode.edges.push(edgeData);targetNode.edges.push(edgeData);return edgeData}},{key:"removeNode",value:function removeNode(node){var _this=this;var id=isId(node)?node:node.id;node=this.nodes[id];delete this.nodes[id];this.edges.forEach(function(edge){if(edge.source===node||edge.target===node){_this.removeEdge(edge)}});return node}},{key:"removeEdge",value:function removeEdge(source,target){var found=void 0;if(!target){target=source.target;source=source.source}if(isId(source))source={id:source};if(isId(target))target={id:target};this.edges=this.edges.filter(function(edge){if(edge.source.id===source.id&&edge.target.id===target.id){found=edge;return false}return true});if(found){found.source.edges=found.source.edges.filter(function(edge){return edge!==found});found.target.edges=found.target.edges.filter(function(edge){return edge!==found})}return found}},{key:"addTmpEdge",value:function addTmpEdge(source,coords){var edgeData=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};var s=this.addNode(source);edgeData.source=s;edgeData.coords=coords;s.tmpEdge=edgeData;return edgeData}},{key:"addOrRemoveEdge",value:function addOrRemoveEdge(source,target){var edgeData=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};var sourceNode=this.addNode(source);var targetNode=this.addNode(target);if(sourceNode===targetNode){return}var i=this.edges.length;while(i--){var e=this.edges[i];if(e.source===sourceNode&&e.target===targetNode){this.removeEdge(e);return}}return this.addEdge(source,target,edgeData)}},{key:"toJSON",value:function toJSON(){return{nodes:this.nodes,edges:this.edges}}}],[{key:"create",value:function create(){return new Dracula}}]);return Dracula}();exports.default=Dracula},{uuid:216}],222:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;imaxx)maxx=x;if(xmaxy)maxy=y;if(ymax)xmove=max;if(xmove<-max)xmove=-max;if(ymove>max)ymove=max;if(ymove<-max)ymove=-max;node.layoutPosX+=xmove;node.layoutPosY+=ymove;node.layoutForceX=0;node.layoutForceY=0})}},{key:"layoutRepulsive",value:function layoutRepulsive(node1,node2){if(!node1||!node2){return}var dx=node2.layoutPosX-node1.layoutPosX;var dy=node2.layoutPosY-node1.layoutPosY;var d2=dx*dx+dy*dy;if(d2<.01){dx=.1*Math.random()+.1;dy=.1*Math.random()+.1;d2=dx*dx+dy*dy}var d=Math.sqrt(d2);if(dthis.maxRepulsiveForceDistance){d=this.maxRepulsiveForceDistance;d2=d*d}var attractiveForce=(d2-this.k*this.k)/this.k;if(!edge.attraction)edge.attraction=1;attractiveForce*=Math.log(edge.attraction)*.5+1;node2.layoutForceX-=attractiveForce*dx/d;node2.layoutForceY-=attractiveForce*dy/d;node1.layoutForceX+=attractiveForce*dx/d;node1.layoutForceY+=attractiveForce*dy/d}}],[{key:"create",value:function create(){for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}return new(Function.prototype.bind.apply(this,[null].concat(args)))}}]);return Spring}(_layout2.default);exports.default=Spring},{"./layout":222,"lodash/collection":157}],225:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;ir.width-20?newX-r.width+20:0);var clientY=y-(newY<20?newY-20:newY>r.height-20?newY-r.height+20:0);this.set.translate(clientX-Math.round(dx),clientY-Math.round(dy));shape.connections.forEach(function(connection){connection.draw()});this.set.ox=clientX;this.set.oy=clientY},function dragEnter(x,y){this.set.ox=x;this.set.oy=y;this.animate({"fill-opacity":.2},500)},function dragOut(){this.animate({"fill-opacity":0},500)})})};var RaphaelRenderer=function(_Renderer){_inherits(RaphaelRenderer,_Renderer);function RaphaelRenderer(element,graph,width,height){_classCallCheck(this,RaphaelRenderer);var _this=_possibleConstructorReturn(this,(RaphaelRenderer.__proto__||Object.getPrototypeOf(RaphaelRenderer)).call(this,element,graph,width,height));_this.canvas=Raphael(_this.element,_this.width,_this.height);_this.lineStyle={stroke:"#443399","stroke-width":"2px"};return _this}_createClass(RaphaelRenderer,[{key:"drawNode",value:function drawNode(node){var color=Raphael.getColor();if(node.render){node.shape=node.render(this.canvas,node)}else{node.shape=this.canvas.set();node.shape.push(this.canvas.ellipse(0,0,30,20).attr({stroke:color,"stroke-width":2,fill:color,"fill-opacity":0})).push(this.canvas.text(0,30,node.label||node.id)).translate(node.point[0],node.point[1])}node.shape.connections=[];dragify(node.shape)}},{key:"drawEdge",value:function drawEdge(edge){if(!edge.shape){edge.shape=this.canvas.connection(edge.source.shape,edge.target.shape,edge.style);edge.source.shape.connections.push(edge.shape);edge.target.shape.connections.push(edge.shape)}}},{key:"destroyTmpEdge",value:function destroyTmpEdge(edge){if(edge.shape){edge.shape.fg&&edge.shape.fg.remove();edge.shape.bg&&edge.shape.bg.remove()}delete edge.source.tmpEdge}},{key:"drawTmpEdge",value:function drawTmpEdge(edge,coords){if(!edge.shape){edge.shape=this.canvas.tmpConnection(edge.source.shape,edge.coords,edge.style);return}edge.shape.draw(coords)}}]);return RaphaelRenderer}(_renderer2.default);exports.default=RaphaelRenderer;var getConnectionPoints=function getConnectionPoints(obj1,obj2){var bb1=obj1.getBBox();var bb2=obj2.getBBox();var off1=0;var off2=0;return[{x:bb1.x+bb1.width/2,y:bb1.y-off1},{x:bb1.x+bb1.width/2,y:bb1.y+bb1.height+off1},{x:bb1.x-off1,y:bb1.y+bb1.height/2},{x:bb1.x+bb1.width+off1,y:bb1.y+bb1.height/2},{x:bb2.x+bb2.width/2,y:bb2.y-off2},{x:bb2.x+bb2.width/2,y:bb2.y+bb2.height+off2},{x:bb2.x-off2,y:bb2.y+bb2.height/2},{x:bb2.x+bb2.width+off2,y:bb2.y+bb2.height/2}]};Raphael.fn.connection=function Connection(obj1,obj2,style){var self=this;var edge={draw:function draw(){var p=getConnectionPoints(obj1,obj2);var d={};var dis=[];var dx=void 0;var dy=void 0;for(var i=0;i<4;i++){for(var j=4;j<8;j++){dx=Math.abs(p[i].x-p[j].x);dy=Math.abs(p[i].y-p[j].y);if(i===j-4||(i!==3&&j!==6||p[i].xp[j].x)&&(i!==0&&j!==5||p[i].y>p[j].y)&&(i!==1&&j!==4||p[i].ycoords.x)&&(i!=0||p[i].y>coords.y)&&(i!=1||p[i].y 2 && arguments[2] !== undefined ? arguments[2] : {}; + + var s = this.addNode(source); + edgeData.source = s; + edgeData.coords = coords; + s.tmpEdge = edgeData; + return edgeData; + } + }, { + key: 'addOrRemoveEdge', + value: function addOrRemoveEdge(source, target) { + var edgeData = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + var sourceNode = this.addNode(source); + var targetNode = this.addNode(target); + + if (sourceNode === targetNode) { + return; + } + + // remove edge if it exists between the same pair + var i = this.edges.length; + // seems like iterating backwards is best when the list may change + while (i--) { + var e = this.edges[i]; + // remove edge if it exists and return + if (e.source === sourceNode && e.target === targetNode) { + this.removeEdge(e); + return; + } + } + + return this.addEdge(source, target, edgeData); + } }, { key: 'toJSON', value: function toJSON() { diff --git a/lib/renderer/raphael.js b/lib/renderer/raphael.js index 926f9e5..0767d2b 100644 --- a/lib/renderer/raphael.js +++ b/lib/renderer/raphael.js @@ -102,6 +102,26 @@ var RaphaelRenderer = function (_Renderer) { edge.target.shape.connections.push(edge.shape); } } + }, { + key: 'destroyTmpEdge', + value: function destroyTmpEdge(edge) { + if (edge.shape) { + edge.shape.fg && edge.shape.fg.remove(); + edge.shape.bg && edge.shape.bg.remove(); + } + + delete edge.source.tmpEdge; + } + }, { + key: 'drawTmpEdge', + value: function drawTmpEdge(edge, coords) { + if (!edge.shape) { + edge.shape = this.canvas.tmpConnection(edge.source.shape, edge.coords, edge.style); + return; + } + + edge.shape.draw(coords); + } }]); return RaphaelRenderer; @@ -198,23 +218,21 @@ Raphael.fn.connection = function Connection(obj1, obj2, style) { /* arrow */ if (style && style.directed) { - (function () { - // magnitude, length of the last path vector - var mag = Math.sqrt((y4 - y3) * (y4 - y3) + (x4 - x3) * (x4 - x3)); - // vector normalisation to specified length - var norm = function norm(x, l) { - return -x * (l || 5) / mag; - }; - // calculate array coordinates (two lines orthogonal to the path vector) - var arr = [{ - x: (norm(x4 - x3) + norm(y4 - y3) + x4).toFixed(3), - y: (norm(y4 - y3) + norm(x4 - x3) + y4).toFixed(3) - }, { - x: (norm(x4 - x3) - norm(y4 - y3) + x4).toFixed(3), - y: (norm(y4 - y3) - norm(x4 - x3) + y4).toFixed(3) - }]; - path = path + ',M' + arr[0].x + ',' + arr[0].y + ',L' + x4 + ',' + y4 + ',L' + arr[1].x + ',' + arr[1].y; - })(); + // magnitude, length of the last path vector + var mag = Math.sqrt((y4 - y3) * (y4 - y3) + (x4 - x3) * (x4 - x3)); + // vector normalisation to specified length + var norm = function norm(x, l) { + return -x * (l || 5) / mag; + }; + // calculate array coordinates (two lines orthogonal to the path vector) + var arr = [{ + x: (norm(x4 - x3) + norm(y4 - y3) + x4).toFixed(3), + y: (norm(y4 - y3) + norm(x4 - x3) + y4).toFixed(3) + }, { + x: (norm(x4 - x3) - norm(y4 - y3) + x4).toFixed(3), + y: (norm(y4 - y3) - norm(x4 - x3) + y4).toFixed(3) + }]; + path = path + ',M' + arr[0].x + ',' + arr[0].y + ',L' + x4 + ',' + y4 + ',L' + arr[1].x + ',' + arr[1].y; } /* function to be used for moving existent path(s), e.g. animate() or attr() */ @@ -262,4 +280,106 @@ Raphael.fn.connection = function Connection(obj1, obj2, style) { return edge; }; -// \ No newline at end of file +// + +// +/** + * A tmpConnection is like a normal connection, but between one object + * and a given point, instead of between two objects. + */ +Raphael.fn.tmpConnection = function TmpConnection(obj1, coords, edgeData) { + var selfRef = this; + + var edge = { + draw: function draw(coords) { + /* get bounding boxes of target and source */ + if (!coords) { + return; + } + + var bb1 = obj1.getBBox(); + var off1 = 0; + /* coordinates for potential connection coordinates from/to the objects */ + var p = [ + /* NORTH 1 */ + { x: bb1.x + bb1.width / 2, y: bb1.y - off1 }, + /* SOUTH 1 */ + { x: bb1.x + bb1.width / 2, y: bb1.y + bb1.height + off1 }, + /* WEST */ + { x: bb1.x - off1, y: bb1.y + bb1.height / 2 }, + /* EAST 1 */ + { x: bb1.x + bb1.width + off1, y: bb1.y + bb1.height / 2 }]; + + /* distances between objects and according coordinates connection */ + var d = {}, + dis = []; + + var res; + + // if constraint is set, use this side + if (edgeData.constraint !== undefined) { + res = edgeData.constraint; + } else { + /* + * find out the best connection coordinates by trying all possible ways + */ + /* loop the first object's connection coordinates */ + for (var i = 0; i < 4; i++) { + var dx = Math.abs(p[i].x - coords.x); + var dy = Math.abs(p[i].y - coords.y); + if ((i != 3 || p[i].x < coords.x) && (i != 2 || p[i].x > coords.x) && (i != 0 || p[i].y > coords.y) && (i != 1 || p[i].y < coords.y)) { + dis.push(dx + dy); + d[dis[dis.length - 1].toFixed(3)] = i; + } + } + var res = dis.length == 0 ? 0 : d[Math.min.apply(Math, dis).toFixed(3)]; + } + /* bezier path */ + var x1 = p[res].x, + y1 = p[res].y, + x4 = coords.x, + y4 = coords.y, + dx = Math.max(Math.abs(x1 - x4) / 2, 10), + dy = Math.max(Math.abs(y1 - y4) / 2, 10), + x2 = [x1, x1, x1 - dx, x1 + dx][res].toFixed(3), + y2 = [y1 - dy, y1 + dy, y1, y1][res].toFixed(3), + x3 = [0, 0, 0, 0, x4, x4, x4 - dx, x4 + dx][res + 4].toFixed(3), + y3 = [0, 0, 0, 0, y1 + dy, y1 - dy, y4, y4][res + 4].toFixed(3); + /* assemble path and arrow */ + var path = ["M" + x1.toFixed(3), y1.toFixed(3), "C" + x2, y2, x3, y3, x4.toFixed(3), y4.toFixed(3)].join(","); + /* arrow */ + if (edgeData && edgeData.directed) { + // magnitude, length of the last path vector + var mag = Math.sqrt((y4 - y3) * (y4 - y3) + (x4 - x3) * (x4 - x3)); + // vector normalisation to specified length + var norm = function norm(x, l) { + return -x * (l || 5) / mag; + }; + // calculate array coordinates (two lines orthogonal to the path vector) + var arr = [{ x: (norm(x4 - x3) + norm(y4 - y3) + x4).toFixed(3), + y: (norm(y4 - y3) + norm(x4 - x3) + y4).toFixed(3) }, { x: (norm(x4 - x3) - norm(y4 - y3) + x4).toFixed(3), + y: (norm(y4 - y3) - norm(x4 - x3) + y4).toFixed(3) }]; + path = path + ",M" + arr[0].x + "," + arr[0].y + ",L" + x4 + "," + y4 + ",L" + arr[1].x + "," + arr[1].y; + } + /* function to be used for moving existent path(s), e.g. animate() or attr() */ + var move = "attr"; + /* applying path(s) */ + edge.fg && edge.fg[move]({ path: path }) || (edge.fg = selfRef.path(path).attr({ + stroke: edgeData && edgeData.stroke || "#000", + fill: "none", + "stroke-width": edgeData["stroke-width"], + "stroke-dasharray": edgeData && edgeData["stroke-dasharray"] + }).toBack()); + edge.bg && edge.bg[move]({ path: path }) || edgeData && edgeData.fill && (edge.bg = edgeData.fill.split && selfRef.path(path).attr({ stroke: edgeData.fill.split("|")[0], fill: "none", + "stroke-width": edgeData.fill.split("|")[1] || 3 }).toBack()); + /* setting label */ + edgeData && edgeData.label && (edge.label && edge.label.attr({ x: (x1 + x4) / 2, y: (y1 + y4) / 2 }) || (edge.label = selfRef.text((x1 + x4) / 2, (y1 + y4) / 2, edgeData.label).attr({ fill: "#000", "font-size": edgeData["font-size"] || "12px" }))); + edgeData && edgeData.label && edgeData["label-style"] && edge.label && edge.label.attr(edgeData["label-style"]); + edgeData && edgeData.callback && edgeData.callback(edge); + } + }; + + edge.draw(); + return edge; +}; +// \ No newline at end of file diff --git a/src/dracula.js b/src/dracula.js index 2d042b7..a5df6c6 100644 --- a/src/dracula.js +++ b/src/dracula.js @@ -117,6 +117,37 @@ export default class Dracula { return found } + addTmpEdge(source, coords, edgeData = {}) { + var s = this.addNode(source); + edgeData.source = s; + edgeData.coords = coords; + s.tmpEdge = edgeData; + return edgeData; + } + + addOrRemoveEdge(source, target, edgeData = {}) { + const sourceNode = this.addNode(source); + const targetNode = this.addNode(target); + + if (sourceNode === targetNode) { + return; + } + + // remove edge if it exists between the same pair + var i = this.edges.length; + // seems like iterating backwards is best when the list may change + while (i--) { + var e = this.edges[i]; + // remove edge if it exists and return + if (e.source === sourceNode && e.target === targetNode){ + this.removeEdge(e); + return; + } + } + + return this.addEdge(source, target, edgeData); + } + toJSON() { return { nodes: this.nodes, edges: this.edges } } diff --git a/src/renderer/raphael.js b/src/renderer/raphael.js index eb49593..d4c8160 100644 --- a/src/renderer/raphael.js +++ b/src/renderer/raphael.js @@ -83,6 +83,26 @@ export default class RaphaelRenderer extends Renderer { } } + destroyEdge(edge) { + if (edge.shape) { + edge.shape.fg && edge.shape.fg.remove(); + edge.shape.bg && edge.shape.bg.remove(); + } + } + + destroyTmpEdge(edge) { + delete edge.source.tmpEdge; + this.destroyEdge(edge); + } + + drawTmpEdge(edge, coords) { + if(!edge.shape) { + edge.shape = this.canvas.tmpConnection(edge.source.shape, edge.coords, edge.style); + return; + } + + edge.shape.draw(coords); + } } // @@ -246,3 +266,121 @@ Raphael.fn.connection = function Connection(obj1, obj2, style) { } // + +// +/** + * A tmpConnection is like a normal connection, but between one object + * and a given point, instead of between two objects. + */ +Raphael.fn.tmpConnection = function TmpConnection(obj1, coords, edgeData) { + var selfRef = this; + + var edge = { + draw : function(coords) { + /* get bounding boxes of target and source */ + if(!coords){ + return + } + + var bb1 = obj1.getBBox(); + var off1 = 0; + /* coordinates for potential connection coordinates from/to the objects */ + var p = [ + /* NORTH 1 */ + { x: bb1.x + bb1.width / 2, y: bb1.y - off1 }, + /* SOUTH 1 */ + { x: bb1.x + bb1.width / 2, y: bb1.y + bb1.height + off1 }, + /* WEST */ + { x: bb1.x - off1, y: bb1.y + bb1.height / 2 }, + /* EAST 1 */ + { x: bb1.x + bb1.width + off1, y: bb1.y + bb1.height / 2 } + ]; + + /* distances between objects and according coordinates connection */ + var d = {}, dis = []; + + var res; + + // if constraint is set, use this side + if (edgeData.constraint !== undefined) { + res = edgeData.constraint; + } else { + /* + * find out the best connection coordinates by trying all possible ways + */ + /* loop the first object's connection coordinates */ + for (var i = 0; i < 4; i++) { + var dx = Math.abs(p[i].x - coords.x); + var dy = Math.abs(p[i].y - coords.y); + if ((i != 3 || p[i].x < coords.x) + && (i !=2 || p[i].x > coords.x) + && (i != 0 || p[i].y > coords.y) + && (i != 1 || p[i].y < coords.y)) + { + dis.push(dx + dy); + d[dis[dis.length - 1].toFixed(3)] = i; + } + } + var res = dis.length == 0 ? 0 : d[Math.min.apply(Math, dis).toFixed(3)]; + } + /* bezier path */ + var x1 = p[res].x, + y1 = p[res].y, + x4 = coords.x, + y4 = coords.y, + dx = Math.max(Math.abs(x1 - x4) / 2, 10), + dy = Math.max(Math.abs(y1 - y4) / 2, 10), + x2 = [ x1, x1, x1 - dx, x1 + dx ][res].toFixed(3), + y2 = [ y1 - dy, y1 + dy, y1, y1 ][res].toFixed(3), + x3 = [ 0, 0, 0, 0, x4, x4, x4 - dx, x4 + dx ][res+4].toFixed(3), + y3 = [ 0, 0, 0, 0, y1 + dy, y1 - dy, y4, y4 ][res+4].toFixed(3); + /* assemble path and arrow */ + var path = [ "M" + x1.toFixed(3), y1.toFixed(3), + "C" + x2, y2, x3, y3, x4.toFixed(3), y4.toFixed(3) ].join(","); + /* arrow */ + if(edgeData && edgeData.directed) { + // magnitude, length of the last path vector + var mag = Math.sqrt((y4 - y3) * (y4 - y3) + (x4 - x3) * (x4 - x3)); + // vector normalisation to specified length + var norm = function(x,l){return (-x*(l||5)/mag);}; + // calculate array coordinates (two lines orthogonal to the path vector) + var arr = [ + { x:(norm(x4-x3)+norm(y4-y3)+x4).toFixed(3), + y:(norm(y4-y3)+norm(x4-x3)+y4).toFixed(3) }, + { x:(norm(x4-x3)-norm(y4-y3)+x4).toFixed(3), + y:(norm(y4-y3)-norm(x4-x3)+y4).toFixed(3) } + ]; + path = path + ",M" + arr[0].x + "," + arr[0].y + ",L" + x4 + "," + + y4 + ",L" + arr[1].x + "," + arr[1].y; + } + /* function to be used for moving existent path(s), e.g. animate() or attr() */ + var move = "attr"; + /* applying path(s) */ + edge.fg && edge.fg[move]({path:path}) + || (edge.fg = selfRef.path(path) + .attr({ + stroke : edgeData && edgeData.stroke || "#000", + fill : "none" , + "stroke-width" : edgeData["stroke-width"], + "stroke-dasharray" : edgeData && edgeData["stroke-dasharray"] + }).toBack()); + edge.bg && edge.bg[move]({path:path}) + || edgeData && edgeData.fill && (edge.bg = edgeData.fill.split + && selfRef.path(path) + .attr({ stroke: edgeData.fill.split("|")[0], fill: "none", + "stroke-width": edgeData.fill.split("|")[1] || 3 }).toBack()); + /* setting label */ + edgeData && edgeData.label + && (edge.label && edge.label.attr({x:(x1+x4)/2, y:(y1+y4)/2}) + || (edge.label = selfRef.text((x1+x4)/2, (y1+y4)/2, edgeData.label) + .attr({fill: "#000", "font-size": edgeData["font-size"] || "12px"}))); + edgeData && edgeData.label && edgeData["label-style"] && edge.label + && edge.label.attr(edgeData["label-style"]); + edgeData && edgeData.callback && edgeData.callback(edge); + } + }; + + edge.draw(); + return edge; +}; +//