diff --git a/installation_manual.md b/installation_manual.md index 597187a..55c7c66 100644 --- a/installation_manual.md +++ b/installation_manual.md @@ -1,16 +1,3 @@ -* Enable cgi module on Apache (https://code-maven.com/set-up-cgi-with-apache) -* add skript sugarsketcher.cgi to /usr/lib/cgi-bin/ and make it executable (chmod +x ...) -* reload apache configuration (service apache2 reload) -* make skript GlycoCT2string.sh executable (chmod +x) -* edit /usr/lib/cgi-bin/sugarsketcher.cgi and set correct path to GlycoCT2string.sh skript (SCRIPTPATH) -* install cmake -* create some temporary folder -* create folder where to install obabel (/opt/obabel) -* install Open Babel (using included skript installObabel.sh ) -* if you choosed another installation path, you must change every occurence in GlycoCT2string.sh skript -* install marvin: - - wget http://dl.chemaxon.com/marvin/18.25.0/marvin_linux_18.25.deb - - sudo dpkg -i marvin_linux_18.25.deb -* deploy js app (2 options) +* deploy js app (2 options): a) edit menu.js (variable smilesinchiconvertbackendurl to correct backend url), build (gulp webpack) and copy js app files to designated location -b) copy already buil js app files to designated location and edit menu.js (variable smilesinchiconvertbackendurl to correct backend url) +b) copy already built js app files to designated location and edit menu.js (variable smilesinchiconvertbackendurl to correct backend url) diff --git a/scripts/GlycoCTToString.sh b/scripts/GlycoCTToString.sh deleted file mode 100755 index 98560d5..0000000 --- a/scripts/GlycoCTToString.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/bin/bash - -# timestamp/unique id of this request -tm=$2 - -# cwd for this request -CWDIR=$3 - -cd "${CWDIR}" - -# urlencoded GlycoCT string -glct=$1 - -id="id${tm}" - -tmpoutdir="./out${tm}" -mkdir "${tmpoutdir}" - -wget "http://csdb.glycoscience.ru/database/core/convert_api.php?glycoct=$glct" -O "${tmpoutdir}/$id" -grep "Errors" "${tmpoutdir}/$id" >> "errors${tm}" -grep "
CSDB Linear:" "${tmpoutdir}/$id" > e$id
-cat e$id 
-sed -i -e 's/
CSDB Linear: //g' e$id
-sed -i -e 's/\R//g' e$id
-stati=`stat -c '%s' e$id` # file size check 
-if [ $stati -gt 1 ];then
-
-	sed -i -e 's/\,/%2C/g' e$id
-	sed -i -e 's/\[/%5B/g' e$id
-	sed -i -e 's/\]/%5D/g' e$id
-	sed -i -e 's/\?/%3F/g' e$id
-	eid=`cat e$id`
-	cat $eid
-	wget http://www.glycosciences.de/tools/sweet-remote/get3dmodel.php?format=csdb"&"structure=$eid -O "${tmpoutdir}/f$id"
-	fid='f'$id
-	grep "download coordinates" "${tmpoutdir}/$fid" >"${tmpoutdir}/g$id"
-	sed -i -e 's/				download coordinates<\/a>

//g' "${tmpoutdir}/g$id" - gid='g'$id - pdid=`cat ${tmpoutdir}/$gid` - echo $pdid - wget `echo $pdid` -O "${tmpoutdir}/$id.pdb" - if [ -f "${tmpoutdir}/$id.pdb" ] ; then - echo "Conversion to $id.smi" - /opt/obabel/bin/babel -ipdb "${tmpoutdir}/$id.pdb" -osmi "${tmpoutdir}/$id.smi" --title "" - fi -else - echo "invalid translation" $id -fi -ismi=$(cat "${tmpoutdir}/$id.smi") - -smiles=(${ismi/ / }) - -# Marvin fix for uninitialized native library error -export CHEMAXON_HOME="./chemaxonhome" -mkdir CHEMAXON_HOME - -echo "InChI conversion" -# Obabel InChI -#/opt/obabel/bin/babel -ipdb "${tmpoutdir}/$id.pdb" -oinchi "${tmpoutdir}/inchi" -molconvert inchi -v "${tmpoutdir}/$id.smi" -o "${tmpoutdir}/inchi" -grep 'InChI' "${tmpoutdir}/inchi" >> "${tmpoutdir}/inchis.txt" - -echo "InChIKey conversion..." -# Obabel InChIKey -#/opt/obabel/bin/babel -ipdb "${tmpoutdir}/$id.pdb" -oinchi "${tmpoutdir}/sortinchikey" -xK -molconvert inchikey -v "${tmpoutdir}/$id.smi" -o "${tmpoutdir}/sortinchikey" - -inchi=$(cat "${tmpoutdir}/inchis.txt") -inchikey=$(cat "${tmpoutdir}/sortinchikey") -smiles=$(cat ${tmpoutdir}/*.smi) - -if [[ -z "${inchi}" ]];then - echo "Could not produce chemical codes. The structure should be fully defined." > "./output" -else - echo "${inchi}" > "./output" - echo "" >> "./output" - echo "${inchikey}" >> "./output" - echo "" >> "./output" - #echo "InChIKey=${inchikey}" >> "./output" # Obabel InChIKey - echo "SMILES=${smiles}" >> "./output" -fi diff --git a/scripts/installObabel.sh b/scripts/installObabel.sh deleted file mode 100755 index bc7bca7..0000000 --- a/scripts/installObabel.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -SCRATCHDIR=${1:?} -installpath=${2:?} - -obabel_version="2-4-0" - -echo "CREATING SCRATCHDIR: '${SCRATCHDIR}'" -mkdir -p ${SCRATCHDIR} - -echo "ENTERING '${SCRATCHDIR}'" -cd ${SCRATCHDIR} - -echo "DOWNLOADING SOURCE CODE..." -wget https://github.com/openbabel/openbabel/archive/openbabel-${obabel_version}.tar.gz - -echo "UNPACKING SOURCE CODE..." -tar zxf "./openbabel-${obabel_version}.tar.gz" - -echo "CREATING BUILD DIRECTORY..." -mkdir build -echo "ENTERING BUILD DIRECTORY..." -cd build - -echo "STARTING BUILD PROCESS..." -cmake "../openbabel-openbabel-${obabel_version}/" -DCMAKE_INSTALL_PREFIX=$installpath -make && make install - diff --git a/scripts/sugarsketcher.cgi b/scripts/sugarsketcher.cgi deleted file mode 100755 index 404300f..0000000 --- a/scripts/sugarsketcher.cgi +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/bash - -SCRIPTPATH="/home/pavla/SugarSketcher/GlycoCT2string.sh" - -urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } - -echo "Content-type: text/html" -echo "Access-Control-Allow-Origin: *" -echo "" - -#This code for getting code from post data is from http://oinkzwurgl.org/bash_cgi and -#was written by Phillippe Kehi and flipflip industries - -# (internal) routine to store POST data -function cgi_get_POST_vars() -{ - # check content type - # FIXME: not sure if we could handle uploads with this.. - [ "${CONTENT_TYPE}" != "application/x-www-form-urlencoded" ] && \ - echo "Warning: you should probably use MIME type "\ - "application/x-www-form-urlencoded!" 1>&2 - # save POST variables (only first time this is called) - [ -z "$QUERY_STRING_POST" \ - -a "$REQUEST_METHOD" = "POST" -a ! -z "$CONTENT_LENGTH" ] && \ - read -n $CONTENT_LENGTH QUERY_STRING_POST - return -} - -# routine to get variables from http requests -# usage: cgi_getvars method varname1 [.. varnameN] -# method is either GET or POST or BOTH -# the magic varible name ALL gets everything -function cgi_getvars() -{ - [ $# -lt 2 ] && return - local q p k v s - # get query - case $1 in - GET) - [ ! -z "${QUERY_STRING}" ] && q="${QUERY_STRING}&" - ;; - POST) - cgi_get_POST_vars - [ ! -z "${QUERY_STRING_POST}" ] && q="${QUERY_STRING_POST}&" - ;; - BOTH) - [ ! -z "${QUERY_STRING}" ] && q="${QUERY_STRING}&" - cgi_get_POST_vars - [ ! -z "${QUERY_STRING_POST}" ] && q="${q}${QUERY_STRING_POST}&" - ;; - esac - shift - s=" $* " - # parse the query data - while [ ! -z "$q" ]; do - p="${q%%&*}" # get first part of query string - k="${p%%=*}" # get the key (variable name) from it - v="${p#*=}" # get the value from it - q="${q#$p&*}" # strip first part from query string - # evaluate var if requested - [ "$1" = "ALL" -o "${s/ $k /}" != "$s" ] && \ - eval "$k=\"$v\"" - done - return -} - -# register all GET and POST variables -cgi_getvars BOTH ALL - -tm=$(date +"%H%M%S") - -TMPDIR=$(mktemp -d) - -"${SCRIPTPATH}" "${structure}" "${tm}" "${TMPDIR}" > /dev/null - -cat "${TMPDIR}/output" - -if [ -d "${TMPDIR}" ]; then - rm -rf "${TMPDIR}" -fi diff --git a/src/css/app.css b/src/css/app.css index 4bf875e..2ef86f0 100644 --- a/src/css/app.css +++ b/src/css/app.css @@ -82,6 +82,26 @@ div.tooltip { margin-bottom:2em; } +#loading{ + left: 0; + right: 0; + width: 100%; + height: 100%; + position: fixed; + top: 0; + bottom: 0; + background-color: rgba(204, 204, 204, 0.6); +} + +#loading img{ + left: 0; + right: 0; + margin: auto auto; + width: 100px; + top: 40vh; + display: block; + position: fixed; +} #hiddenMsg { opacity:0; } diff --git a/src/css/menu.css b/src/css/menu.css index 4e30c24..c36a539 100644 --- a/src/css/menu.css +++ b/src/css/menu.css @@ -9,6 +9,16 @@ fill:white; } +.labelSmall { + font-family: arial,helvetica,'sans-serif'; + font-size: 16px; + text-anchor: middle; + alignment-baseline: text-before-edge; + dominant-baseline: text-before-edge; + stroke:white; + fill:white; +} + .labelMonoChoice, .helpLabel { stroke:black; fill:black; @@ -225,4 +235,4 @@ textarea { width: 100px; margin-right:auto; margin-left:auto; -} \ No newline at end of file +} diff --git a/src/js/sb.js.map b/src/js/sb.js.map index 1b0d068..2d82cbc 100644 --- a/src/js/sb.js.map +++ b/src/js/sb.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap cfadada79d6bcb2b1210","webpack:///./src/index.js","webpack:///./src/js/models/dataStructure/Graph.js","webpack:///./src/js/models/dataStructure/GraphEdge.js","webpack:///./src/js/models/dataStructure/GraphNode.js","webpack:///./src/js/models/glycomics/dictionary/AcceptorPosition.js","webpack:///./~/enumify/lib/enumify.js","webpack:///./src/js/models/glycomics/dictionary/Anomericity.js","webpack:///./src/js/models/glycomics/dictionary/Isomer.js","webpack:///./src/js/models/glycomics/dictionary/DonorPosition.js","webpack:///./src/js/views/glycomics/dictionary/MonosaccharideType.js","webpack:///./src/js/models/glycomics/dictionary/RingType.js","webpack:///./src/js/models/glycomics/dictionary/SubstituentType.js","webpack:///./src/js/models/io/glycoCT/SubstituentsGlycoCT.js","webpack:///./src/js/models/io/glycoCT/SubstituentsPositions.js","webpack:///./src/js/models/io/glycoCT/MonosaccharideGlycoCT.js","webpack:///./src/js/models/glycomics/dictionary/QuickModeMonosaccharides.js","webpack:///./src/js/models/glycomics/dictionary/Structures.js","webpack:///./src/js/models/glycomics/linkages/GlycosidicLinkage.js","webpack:///./src/js/models/glycomics/linkages/SubstituentLinkage.js","webpack:///./src/js/models/glycomics/nodes/Monosaccharide.js","webpack:///./src/js/models/glycomics/nodes/Substituent.js","webpack:///./src/js/models/glycomics/Glycan.js","webpack:///./src/js/models/glycomics/RepeatingUnit.js","webpack:///./src/js/models/io/glycoCT/GlycoCTParser.js","webpack:///./src/js/models/io/glycoCT/GlycoCTWriter.js","webpack:///./src/js/models/io/EdgeComparator.js","webpack:///./src/js/models/io/NodeComparator.js","webpack:///./src/js/models/io/ImageExporter.js"],"names":["Graph","GraphEdge","GraphNode","AcceptorPosition","Anomericity","Isomer","DonorPosition","MonosaccharideType","RingType","Monosaccharide","SubstituentType","GlycosidicLinkage","SubstituentLinkage","Substituent","Glycan","GlycoCTParser","GlycoCTWriter","GlycoCTSubstituents","NodeComparator","RepeatingUnit","SubstituentsPositions","MonosaccharideGlycoCT","QuickModeMonosaccharides","Structures","ImageExporter","undefined","_methods","Object","create","_indexes","_initBindings","_methodBindings","_methodBeforeBindings","_defaultSettings","immutable","clone","_defaultSettingsFunction","key","graph","settings","k","fn","data","nodesArray","edgesArray","nodesIndex","edgesIndex","inNeighborsIndex","outNeighborsIndex","allNeighborsIndex","inNeighborsCount","outNeighborsCount","allNeighborsCount","call","__bindGraphMethod","methodName","scope","result","res","apply","arguments","__emptyObject","obj","hasOwnProperty","addMethod","length","hasMethod","attach","before","bindings","attachBefore","addIndex","name","node","id","validNode","defineProperty","value","enumerable","push","edge","source","target","validEdge","i","l","splice","dropEdge","keys","g","a","nodes","addNode","edges","addEdge","v","slice","prototype","toString","which","n","sigma","classes","module","exports","Edge","sourceNode","targetNode","getId","err","Node","ONE","TWO","THREE","UNDEFINED","Enum","initEnum","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","Hex","shape","color","bisected","Glc","Man","Gal","Gul","Alt","All","Tal","Ido","HexNAc","GlcNAc","ManNAc","GalNAc","GulNAc","AltNAc","AllNAc","TalNAc","IdoNAc","HexN","GlcN","ManN","GalN","GulN","AltN","AllN","TalN","IdoN","HexA","GlcA","ManA","GalA","GulA","AltA","AllA","TalA","IdoA","dHex","Qui","Rha","SixdAlt","SixdTal","Fuc","dHexNAc","QuiNAc","RhaNAc","FucNAc","ddHex","Oli","Tyv","Abe","Par","Dig","Col","Pen","Ara","Lyx","Xyl","Rib","Nonu","Kdn","Neu5Ac","Neu5Gc","Neu","Sia","Unknown","Bac","LDManHep","Kdo","Dha","DDManHep","MurNAc","MurNGc","Mur","Assigned","Api","Fru","Tag","Sor","Psi","Acetyl","label","Bromo","Chloro","Ethyl","Ethanolamine","Fluoro","Formyl","Hydroxymethyl","Imino","RLactate1","SLactate1","Amino","Methyl","NAcetyl","NAlanine","NFormyl","NGlycolyl","NMethyl","NSuccinate","NSulfate","NTrifluoroacetyl","Nitrate","Phosphate","Pyruvate","Sulfate","Thio","RPyruvate","SPyruvate","RLactate2","SLactate2","glycoct","position","KdnNAc","KdnGc","KdnNGc","KdnN","SixdAltNAc","SixdTalNAc","MurGc","transform","isomer","ringType","acceptorPosition","ncore","ncorefuc","ncorebisect","ncorebisectfuc","ncorehyb","ncorehybfuc","ncorehybbis","ncorehybbisfuc","ncoreman","ocore1","ocore2","ocore3","ocore4","ocore5","ocore6","ocore7","ocore8","gslarthro","gslgala","gslganglio","gslglobo","gslisoglobo","gsllacto","gslmollu","gslmuco","gslneolacto","gaghyaluronic","gagchodroitin4","gagchodroitin6","gagchodroitin26","gagchodroitin46","gagdermatan","gagkeratan","gagheparin","gagheparan","milklac","milk3fuclac","milk2fuclac","milkdifuc","milktetra","milkneotetra","antigenA","antigenB","antigenH","antigenCAD","antigenP","antigenPk","antigenSda","highMannose","lacDiNAc","lactoseAmine","neoLactoseAmine","polyLactoseAmine","sialyllactoNLSa","sialyllactorNLSb","sialyllactoNLSc","disialyllactorNLDS","fucosylatedLacDiNAc","sialylatedLacDiNAc","lewisA","lewisB","lewisC","lewisD","lewisX","lewisY","sialylLewisA","sialylLewisX","VIM2","donorPosition","_acceptorPosition","_donorPosition","monosaccharideType","anomericity","_monosaccharideType","_anomericity","_isomer","_ringType","substituentType","_substituentType","rootNode","rootSet","rootIsSet","getEdgeSource","getEdgeTarget","monosaccharide","getNodeById","substituent","glyLinkage","getEdgeById","subLinkage","getEdge","childNode","glycosidicLinkage","substituentLinkage","parentNode","addMonosaccharide","addSubstituent","updatedGraph","dropNode","removeNodeById","linkage","removeLinkageById","structure","clear","min","max","entry","exit","parseInt","formula","chars","split","Math","floor","random","str","sub","mono","stemType","residue","repeatingUnit","substring","anom","ALPHA","BETA","dashSplit","isom","toLowerCase","firstTransform","monoType","getMonoType","ringStop","F","P","nodeId","randomString","glycan","ac","anomC","lc","linkedC","addMonosaccharideWithLinkage","clickedNode","subName","subType","lcs","linkedCS","subId","newType","getMono","getSub","updateNodeType","type","glycanNode","getSection","links","createResidue","repSection","reps","getRepeatingUnit","nodesIds","repInfo","merge","mergeRep","generateNodes","repeatingUnitsObjects","finalRes","repUnitRead","repUnitIndices","indexOf","concat","finalLinks","allLinks","isTargetARep","lin","repeatingUnitObject","createdUnits","repNodesIds","includes","getLinkTarget","info","getRepNodesIds","updateLinkTarget","isSourceARep","getLinkSource","updateLinkSource","output","r","link","sourceId","pair","residueListById","linkId","findMatchingRep","targetId","linkages","section","sections","formulaArray","Array","flag","line","array","tree","rep","prefix","suffix","b","comp","EdgeComparator","edge1","getLink","parent","edge2","compare","arr","arr2","assign","len","comparatorFunction","temp","id1","id2","root","unit","stack","pop","nodeUnit","children","rootChild","sort","child","resId","repId","associatedSubs","repNumber","offset","writeSub","resName","isoExceptions","monoName","assocSubType","assocSub","ringExceptions","associatedSub","prevSource","prevTarget","sourceRep","findNodeInTree","targetRep","writeMonoLink","writeSubLink","node1","generateArrays","resInfo","generateRES","lastResId","linInfo","generateLIN","lastLinId","findRepMinDepth","entryId","exitId","minVal","depth","minNode","e1","e2","bondsE1","bonds","bondsE2","parentLinkPosE1","parentLinkPos","parentLinkPosE2","childLinkPosE1","childLinkPos","childLinkPosE2","linkageTypeE1","linkageType","linkageTypeE2","compareNodes","n1","n2","childrenN1","childrenN2","longestN1","longestBranch","longestN2","terminalsN1","terminals","terminalsN2","branchingN1","branching","branchingN2","depths","reduce","branches","div_svg","tmp","document","getElementById","svg","getElementsByTagName","xml","XMLSerializer","serializeToString","replace","innerHTML","div_svg_code","svg_xml","get_xml_svg_code","vkbeautify","$","text","html","imgsrc","btoa","unescape","encodeURIComponent","image","Image","src","onload","createElement","addEventListener","ev","download","href","body","appendChild","click"],"mappings":"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BAAO;AADJ,MAPe;AAUtBqC,gBAAW;AACPrC,gBAAO;AADA;AAVW,EAA1B,E;;;;;;ACnBA;;AAEA,qGAAoG,mBAAmB,EAAE,mBAAmB,kGAAkG;;AAE9O,iCAAgC,2CAA2C,gBAAgB,kBAAkB,OAAO,2BAA2B,wDAAwD,gCAAgC,uDAAuD,2DAA2D,EAAE,EAAE,yDAAyD,qEAAqE,6DAA6D,oBAAoB,GAAG,EAAE;;AAEjjB;AACA;AACA,EAAC;AACD;;AAEA,kDAAiD,0CAA0C,0DAA0D,EAAE;;AAEvJ;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA,oEAAmE,gEAAgE;AACnI;;AAEA;AACA;AACA,cAAa;AACb;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA,mFAAkF,mEAAmE;AACrJ;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;;AAEA;AACA;AACA;;AAEA,MAAK;AACL;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;;AAEA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,EAAC;;AAED;AACA;AACA;AA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","file":"sb.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"sb\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"sb\"] = factory();\n\telse\n\t\troot[\"sb\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap cfadada79d6bcb2b1210","/**\n * This file allows the creation of a bundle library. \n * Author: Davide Alocci\n * Version: 0.0.1\n */\n\n//Data Structure\nimport Graph from './js/models/dataStructure/Graph';\nimport GraphEdge from './js/models/dataStructure/GraphEdge';\nimport GraphNode from './js/models/dataStructure/GraphNode';\n\n//Glycomics Structure\n//Dictionary\nimport AcceptorPosition from './js/models/glycomics/dictionary/AcceptorPosition';\nimport Anomericity from './js/models/glycomics/dictionary/Anomericity';\nimport Isomer from './js/models/glycomics/dictionary/Isomer';\nimport DonorPosition from './js/models/glycomics/dictionary/DonorPosition';\nimport MonosaccharideType from './js/views/glycomics/dictionary/MonosaccharideType';\nimport RingType from './js/models/glycomics/dictionary/RingType';\nimport SubstituentType from './js/models/glycomics/dictionary/SubstituentType';\nimport GlycoCTSubstituents from './js/models/io/glycoCT/SubstituentsGlycoCT';\nimport SubstituentsPositions from './js/models/io/glycoCT/SubstituentsPositions';\nimport MonosaccharideGlycoCT from './js/models/io/glycoCT/MonosaccharideGlycoCT';\nimport QuickModeMonosaccharides from './js/models/glycomics/dictionary/QuickModeMonosaccharides';\nimport Structures from './js/models/glycomics/dictionary/Structures';\n\n//Linkages\nimport GlycosidicLinkage from './js/models/glycomics/linkages/GlycosidicLinkage';\nimport SubstituentLinkage from './js/models/glycomics/linkages/SubstituentLinkage';\n\n//Nodes\nimport Monosaccharide from './js/models/glycomics/nodes/Monosaccharide';\nimport Substituent from './js/models/glycomics/nodes/Substituent';\n\n//Glycan\nimport Glycan from './js/models/glycomics/Glycan';\nimport RepeatingUnit from './js/models/glycomics/RepeatingUnit';\n\n//IO\nimport GlycoCTParser from './js/models/io/glycoCT/GlycoCTParser';\nimport GlycoCTWriter from './js/models/io/glycoCT/GlycoCTWriter';\nimport NodeComparator from './js/models/io/NodeComparator';\nimport ImageExporter from './js/models/io/ImageExporter';\n\n\n\nexport { Graph, GraphEdge, GraphNode, AcceptorPosition, Anomericity, Isomer,\n DonorPosition, MonosaccharideType, RingType, Monosaccharide, SubstituentType, \n GlycosidicLinkage, SubstituentLinkage, Substituent, Glycan, GlycoCTParser,\n GlycoCTWriter, GlycoCTSubstituents, NodeComparator, RepeatingUnit,\n SubstituentsPositions, MonosaccharideGlycoCT, QuickModeMonosaccharides,\n Structures, ImageExporter};\n\n\n// WEBPACK FOOTER //\n// ./src/index.js","/**\n * Class taken from sigma.js\n * https://github.com/jacomyal/sigma.js -> sigma.js/src/classes/sigma.classes.graph.js\n *\n * This is the only part we need from sigma.js and we can add more method to fulfill our needs\n *\n * Licence:\n *\n * Copyright (C) 2013-2014, Alexis Jacomy, http://sigmajs.org\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n ;(function(undefined) {\n 'use strict';\n\n var _methods = Object.create(null),\n _indexes = Object.create(null),\n _initBindings = Object.create(null),\n _methodBindings = Object.create(null),\n _methodBeforeBindings = Object.create(null),\n _defaultSettings = {\n immutable: true,\n clone: false\n },\n _defaultSettingsFunction = function(key) {\n return _defaultSettings[key];\n };\n\n /**\n * The graph constructor. It initializes the data and the indexes, and binds\n * the custom indexes and methods to its own scope.\n *\n * Recognized parameters:\n * **********************\n * Here is the exhaustive list of every accepted parameters in the settings\n * object:\n *\n * {boolean} clone Indicates if the data have to be cloned in methods\n * to add nodes or edges.\n * {boolean} immutable Indicates if nodes \"id\" values and edges \"id\",\n * \"source\" and \"target\" values must be set as\n * immutable.\n *\n * @param {?configurable} settings Eventually a settings function.\n * @return {graph} The new graph instance.\n */\n var graph = function(settings) {\n var k,\n fn,\n data;\n\n /**\n * DATA:\n * *****\n * Every data that is callable from graph methods are stored in this \"data\"\n * object. This object will be served as context for all these methods,\n * and it is possible to add other type of data in it.\n */\n data = {\n /**\n * SETTINGS FUNCTION:\n * ******************\n */\n settings: settings || _defaultSettingsFunction,\n\n /**\n * MAIN DATA:\n * **********\n */\n nodesArray: [],\n edgesArray: [],\n\n /**\n * GLOBAL INDEXES:\n * ***************\n * These indexes just index data by ids.\n */\n nodesIndex: Object.create(null),\n edgesIndex: Object.create(null),\n\n /**\n * LOCAL INDEXES:\n * **************\n * These indexes refer from node to nodes. Each key is an id, and each\n * value is the array of the ids of related nodes.\n */\n inNeighborsIndex: Object.create(null),\n outNeighborsIndex: Object.create(null),\n allNeighborsIndex: Object.create(null),\n\n inNeighborsCount: Object.create(null),\n outNeighborsCount: Object.create(null),\n allNeighborsCount: Object.create(null)\n };\n\n // Execute bindings:\n for (k in _initBindings)\n _initBindings[k].call(data);\n\n // Add methods to both the scope and the data objects:\n for (k in _methods) {\n fn = __bindGraphMethod(k, data, _methods[k]);\n this[k] = fn;\n data[k] = fn;\n }\n };\n\n\n\n\n /**\n * A custom tool to bind methods such that function that are bound to it will\n * be executed anytime the method is called.\n *\n * @param {string} methodName The name of the method to bind.\n * @param {object} scope The scope where the method must be executed.\n * @param {function} fn The method itself.\n * @return {function} The new method.\n */\n function __bindGraphMethod(methodName, scope, fn) {\n var result = function() {\n var k,\n res;\n\n // Execute \"before\" bound functions:\n for (k in _methodBeforeBindings[methodName])\n _methodBeforeBindings[methodName][k].apply(scope, arguments);\n\n // Apply the method:\n res = fn.apply(scope, arguments);\n\n // Execute bound functions:\n for (k in _methodBindings[methodName])\n _methodBindings[methodName][k].apply(scope, arguments);\n\n // Return res:\n return res;\n };\n\n return result;\n }\n\n /**\n * This custom tool function removes every pair key/value from an hash. The\n * goal is to avoid creating a new object while some other references are\n * still hanging in some scopes...\n *\n * @param {object} obj The object to empty.\n * @return {object} The empty object.\n */\n function __emptyObject(obj) {\n var k;\n\n for (k in obj)\n if (!('hasOwnProperty' in obj) || obj.hasOwnProperty(k))\n delete obj[k];\n\n return obj;\n }\n\n\n\n\n /**\n * This global method adds a method that will be bound to the futurly created\n * graph instances.\n *\n * Since these methods will be bound to their scope when the instances are\n * created, it does not use the prototype. Because of that, methods have to\n * be added before instances are created to make them available.\n *\n * Here is an example:\n *\n * > graph.addMethod('getNodesCount', function() {\n * > return this.nodesArray.length;\n * > });\n * >\n * > var myGraph = new graph();\n * > console.log(myGraph.getNodesCount()); // outputs 0\n *\n * @param {string} methodName The name of the method.\n * @param {function} fn The method itself.\n * @return {object} The global graph constructor.\n */\n graph.addMethod = function(methodName, fn) {\n if (\n typeof methodName !== 'string' ||\n typeof fn !== 'function' ||\n arguments.length !== 2\n )\n throw 'addMethod: Wrong arguments.';\n\n if (_methods[methodName] || graph[methodName])\n throw 'The method \"' + methodName + '\" already exists.';\n\n _methods[methodName] = fn;\n _methodBindings[methodName] = Object.create(null);\n _methodBeforeBindings[methodName] = Object.create(null);\n\n return this;\n };\n\n /**\n * This global method returns true if the method has already been added, and\n * false else.\n *\n * Here are some examples:\n *\n * > graph.hasMethod('addNode'); // returns true\n * > graph.hasMethod('hasMethod'); // returns true\n * > graph.hasMethod('unexistingMethod'); // returns false\n *\n * @param {string} methodName The name of the method.\n * @return {boolean} The result.\n */\n graph.hasMethod = function(methodName) {\n return !!(_methods[methodName] || graph[methodName]);\n };\n\n /**\n * This global methods attaches a function to a method. Anytime the specified\n * method is called, the attached function is called right after, with the\n * same arguments and in the same scope. The attached function is called\n * right before if the last argument is true, unless the method is the graph\n * constructor.\n *\n * To attach a function to the graph constructor, use 'constructor' as the\n * method name (first argument).\n *\n * The main idea is to have a clean way to keep custom indexes up to date,\n * for instance:\n *\n * > var timesAddNodeCalled = 0;\n * > graph.attach('addNode', 'timesAddNodeCalledInc', function() {\n * > timesAddNodeCalled++;\n * > });\n * >\n * > var myGraph = new graph();\n * > console.log(timesAddNodeCalled); // outputs 0\n * >\n * > myGraph.addNode({ id: '1' }).addNode({ id: '2' });\n * > console.log(timesAddNodeCalled); // outputs 2\n *\n * The idea for calling a function before is to provide pre-processors, for\n * instance:\n *\n * > var colorPalette = { Person: '#C3CBE1', Place: '#9BDEBD' };\n * > graph.attach('addNode', 'applyNodeColorPalette', function(n) {\n * > n.color = colorPalette[n.category];\n * > }, true);\n * >\n * > var myGraph = new graph();\n * > myGraph.addNode({ id: 'n0', category: 'Person' });\n * > console.log(myGraph.nodes('n0').color); // outputs '#C3CBE1'\n *\n * @param {string} methodName The name of the related method or\n * \"constructor\".\n * @param {string} key The key to identify the function to attach.\n * @param {function} fn The function to bind.\n * @param {boolean} before If true the function is called right before.\n * @return {object} The global graph constructor.\n */\n graph.attach = function(methodName, key, fn, before) {\n if (\n typeof methodName !== 'string' ||\n typeof key !== 'string' ||\n typeof fn !== 'function' ||\n arguments.length < 3 ||\n arguments.length > 4\n )\n throw 'attach: Wrong arguments.';\n\n var bindings;\n\n if (methodName === 'constructor')\n bindings = _initBindings;\n else {\n if (before) {\n if (!_methodBeforeBindings[methodName])\n throw 'The method \"' + methodName + '\" does not exist.';\n\n bindings = _methodBeforeBindings[methodName];\n }\n else {\n if (!_methodBindings[methodName])\n throw 'The method \"' + methodName + '\" does not exist.';\n\n bindings = _methodBindings[methodName];\n }\n }\n\n if (bindings[key])\n throw 'A function \"' + key + '\" is already attached ' +\n 'to the method \"' + methodName + '\".';\n\n bindings[key] = fn;\n\n return this;\n };\n\n /**\n * Alias of attach(methodName, key, fn, true).\n */\n graph.attachBefore = function(methodName, key, fn) {\n return this.attach(methodName, key, fn, true);\n };\n\n /**\n * This methods is just an helper to deal with custom indexes. It takes as\n * arguments the name of the index and an object containing all the different\n * functions to bind to the methods.\n *\n * Here is a basic example, that creates an index to keep the number of nodes\n * in the current graph. It also adds a method to provide a getter on that\n * new index:\n *\n * > sigma.classes.graph.addIndex('nodesCount', {\n * > constructor: function() {\n * > this.nodesCount = 0;\n * > },\n * > addNode: function() {\n * > this.nodesCount++;\n * > },\n * > dropNode: function() {\n * > this.nodesCount--;\n * > }\n * > });\n * >\n * > sigma.classes.graph.addMethod('getNodesCount', function() {\n * > return this.nodesCount;\n * > });\n * >\n * > var myGraph = new sigma.classes.graph();\n * > console.log(myGraph.getNodesCount()); // outputs 0\n * >\n * > myGraph.addNode({ id: '1' }).addNode({ id: '2' });\n * > console.log(myGraph.getNodesCount()); // outputs 2\n *\n * @param {string} name The name of the index.\n * @param {object} bindings The object containing the functions to bind.\n * @return {object} The global graph constructor.\n */\n graph.addIndex = function(name, bindings) {\n if (\n typeof name !== 'string' ||\n Object(bindings) !== bindings ||\n arguments.length !== 2\n )\n throw 'addIndex: Wrong arguments.';\n\n if (_indexes[name])\n throw 'The index \"' + name + '\" already exists.';\n\n var k;\n\n // Store the bindings:\n _indexes[name] = bindings;\n\n // Attach the bindings:\n for (k in bindings)\n if (typeof bindings[k] !== 'function')\n throw 'The bindings must be functions.';\n else\n graph.attach(k, name, bindings[k]);\n\n return this;\n };\n\n\n\n\n /**\n * This method adds a node to the graph. The node must be an object, with a\n * string under the key \"id\". Except for this, it is possible to add any\n * other attribute, that will be preserved all along the manipulations.\n *\n * If the graph option \"clone\" has a truthy value, the node will be cloned\n * when added to the graph. Also, if the graph option \"immutable\" has a\n * truthy value, its id will be defined as immutable.\n *\n * @param {object} node The node to add.\n * @return {object} The graph instance.\n */\n graph.addMethod('addNode', function(node) {\n // Check that the node is an object and has an id:\n if (Object(node) !== node || arguments.length !== 1)\n throw 'addNode: Wrong arguments.';\n\n if (typeof node.id !== 'string' && typeof node.id !== 'number')\n throw 'The node must have a string or number id.';\n\n if (this.nodesIndex[node.id])\n throw 'The node \"' + node.id + '\" already exists.';\n\n var k,\n id = node.id,\n validNode = Object.create(null);\n\n // Check the \"clone\" option:\n if (this.settings('clone')) {\n for (k in node)\n if (k !== 'id')\n validNode[k] = node[k];\n } else\n validNode = node;\n\n // Check the \"immutable\" option:\n if (this.settings('immutable'))\n Object.defineProperty(validNode, 'id', {\n value: id,\n enumerable: true\n });\n else\n validNode.id = id;\n\n // Add empty containers for edges indexes:\n this.inNeighborsIndex[id] = Object.create(null);\n this.outNeighborsIndex[id] = Object.create(null);\n this.allNeighborsIndex[id] = Object.create(null);\n\n this.inNeighborsCount[id] = 0;\n this.outNeighborsCount[id] = 0;\n this.allNeighborsCount[id] = 0;\n\n // Add the node to indexes:\n this.nodesArray.push(validNode);\n this.nodesIndex[validNode.id] = validNode;\n\n // Return the current instance:\n return this;\n });\n\n /**\n * This method adds an edge to the graph. The edge must be an object, with a\n * string under the key \"id\", and strings under the keys \"source\" and\n * \"target\" that design existing nodes. Except for this, it is possible to\n * add any other attribute, that will be preserved all along the\n * manipulations.\n *\n * If the graph option \"clone\" has a truthy value, the edge will be cloned\n * when added to the graph. Also, if the graph option \"immutable\" has a\n * truthy value, its id, source and target will be defined as immutable.\n *\n * @param {object} edge The edge to add.\n * @return {object} The graph instance.\n */\n graph.addMethod('addEdge', function(edge) {\n // Check that the edge is an object and has an id:\n if (Object(edge) !== edge || arguments.length !== 1)\n throw 'addEdge: Wrong arguments.';\n\n if (typeof edge.id !== 'string' && typeof edge.id !== 'number')\n throw 'The edge must have a string or number id.';\n\n if ((typeof edge.source !== 'string' && typeof edge.source !== 'number') ||\n !this.nodesIndex[edge.source])\n throw 'The edge source must have an existing node id.';\n\n if ((typeof edge.target !== 'string' && typeof edge.target !== 'number') ||\n !this.nodesIndex[edge.target])\n throw 'The edge target must have an existing node id.';\n\n if (this.edgesIndex[edge.id])\n throw 'The edge \"' + edge.id + '\" already exists.';\n\n var k,\n validEdge = Object.create(null);\n\n // Check the \"clone\" option:\n if (this.settings('clone')) {\n for (k in edge)\n if (k !== 'id' && k !== 'source' && k !== 'target')\n validEdge[k] = edge[k];\n } else\n validEdge = edge;\n\n // Check the \"immutable\" option:\n if (this.settings('immutable')) {\n Object.defineProperty(validEdge, 'id', {\n value: edge.id,\n enumerable: true\n });\n\n Object.defineProperty(validEdge, 'source', {\n value: edge.source,\n enumerable: true\n });\n\n Object.defineProperty(validEdge, 'target', {\n value: edge.target,\n enumerable: true\n });\n } else {\n validEdge.id = edge.id;\n validEdge.source = edge.source;\n validEdge.target = edge.target;\n }\n\n // Add the edge to indexes:\n this.edgesArray.push(validEdge);\n this.edgesIndex[validEdge.id] = validEdge;\n\n if (!this.inNeighborsIndex[validEdge.target][validEdge.source])\n this.inNeighborsIndex[validEdge.target][validEdge.source] =\n Object.create(null);\n this.inNeighborsIndex[validEdge.target][validEdge.source][validEdge.id] =\n validEdge;\n\n if (!this.outNeighborsIndex[validEdge.source][validEdge.target])\n this.outNeighborsIndex[validEdge.source][validEdge.target] =\n Object.create(null);\n this.outNeighborsIndex[validEdge.source][validEdge.target][validEdge.id] =\n validEdge;\n\n if (!this.allNeighborsIndex[validEdge.source][validEdge.target])\n this.allNeighborsIndex[validEdge.source][validEdge.target] =\n Object.create(null);\n this.allNeighborsIndex[validEdge.source][validEdge.target][validEdge.id] =\n validEdge;\n\n if (validEdge.target !== validEdge.source) {\n if (!this.allNeighborsIndex[validEdge.target][validEdge.source])\n this.allNeighborsIndex[validEdge.target][validEdge.source] =\n Object.create(null);\n this.allNeighborsIndex[validEdge.target][validEdge.source][validEdge.id] =\n validEdge;\n }\n\n // Keep counts up to date:\n this.inNeighborsCount[validEdge.target]++;\n this.outNeighborsCount[validEdge.source]++;\n this.allNeighborsCount[validEdge.target]++;\n this.allNeighborsCount[validEdge.source]++;\n\n return this;\n });\n\n /**\n * This method drops a node from the graph. It also removes each edge that is\n * bound to it, through the dropEdge method. An error is thrown if the node\n * does not exist.\n *\n * @param {string} id The node id.\n * @return {object} The graph instance.\n */\n graph.addMethod('dropNode', function(id) {\n // Check that the arguments are valid:\n if ((typeof id !== 'string' && typeof id !== 'number') ||\n arguments.length !== 1)\n throw 'dropNode: Wrong arguments.';\n\n if (!this.nodesIndex[id])\n throw 'The node \"' + id + '\" does not exist.';\n\n var i, k, l;\n\n // Remove the node from indexes:\n delete this.nodesIndex[id];\n for (i = 0, l = this.nodesArray.length; i < l; i++)\n if (this.nodesArray[i].id === id) {\n this.nodesArray.splice(i, 1);\n break;\n }\n\n // Remove related edges:\n for (i = this.edgesArray.length - 1; i >= 0; i--)\n if (this.edgesArray[i].source === id || this.edgesArray[i].target === id)\n this.dropEdge(this.edgesArray[i].id);\n\n // Remove related edge indexes:\n delete this.inNeighborsIndex[id];\n delete this.outNeighborsIndex[id];\n delete this.allNeighborsIndex[id];\n\n delete this.inNeighborsCount[id];\n delete this.outNeighborsCount[id];\n delete this.allNeighborsCount[id];\n\n for (k in this.nodesIndex) {\n delete this.inNeighborsIndex[k][id];\n delete this.outNeighborsIndex[k][id];\n delete this.allNeighborsIndex[k][id];\n }\n\n return this;\n });\n\n /**\n * This method drops an edge from the graph. An error is thrown if the edge\n * does not exist.\n *\n * @param {string} id The edge id.\n * @return {object} The graph instance.\n */\n graph.addMethod('dropEdge', function(id) {\n // Check that the arguments are valid:\n if ((typeof id !== 'string' && typeof id !== 'number') ||\n arguments.length !== 1)\n throw 'dropEdge: Wrong arguments.';\n\n if (!this.edgesIndex[id])\n throw 'The edge \"' + id + '\" does not exist.';\n\n var i, l, edge;\n\n // Remove the edge from indexes:\n edge = this.edgesIndex[id];\n delete this.edgesIndex[id];\n for (i = 0, l = this.edgesArray.length; i < l; i++)\n if (this.edgesArray[i].id === id) {\n this.edgesArray.splice(i, 1);\n break;\n }\n\n delete this.inNeighborsIndex[edge.target][edge.source][edge.id];\n if (!Object.keys(this.inNeighborsIndex[edge.target][edge.source]).length)\n delete this.inNeighborsIndex[edge.target][edge.source];\n\n delete this.outNeighborsIndex[edge.source][edge.target][edge.id];\n if (!Object.keys(this.outNeighborsIndex[edge.source][edge.target]).length)\n delete this.outNeighborsIndex[edge.source][edge.target];\n\n delete this.allNeighborsIndex[edge.source][edge.target][edge.id];\n if (!Object.keys(this.allNeighborsIndex[edge.source][edge.target]).length)\n delete this.allNeighborsIndex[edge.source][edge.target];\n\n if (edge.target !== edge.source) {\n delete this.allNeighborsIndex[edge.target][edge.source][edge.id];\n if (!Object.keys(this.allNeighborsIndex[edge.target][edge.source]).length)\n delete this.allNeighborsIndex[edge.target][edge.source];\n }\n\n this.inNeighborsCount[edge.target]--;\n this.outNeighborsCount[edge.source]--;\n this.allNeighborsCount[edge.source]--;\n this.allNeighborsCount[edge.target]--;\n\n return this;\n });\n\n /**\n * This method destroys the current instance. It basically empties each index\n * and methods attached to the graph.\n */\n graph.addMethod('kill', function() {\n // Delete arrays:\n this.nodesArray.length = 0;\n this.edgesArray.length = 0;\n delete this.nodesArray;\n delete this.edgesArray;\n\n // Delete indexes:\n delete this.nodesIndex;\n delete this.edgesIndex;\n delete this.inNeighborsIndex;\n delete this.outNeighborsIndex;\n delete this.allNeighborsIndex;\n delete this.inNeighborsCount;\n delete this.outNeighborsCount;\n delete this.allNeighborsCount;\n });\n\n /**\n * This method empties the nodes and edges arrays, as well as the different\n * indexes.\n *\n * @return {object} The graph instance.\n */\n graph.addMethod('clear', function() {\n this.nodesArray.length = 0;\n this.edgesArray.length = 0;\n\n // Due to GC issues, I prefer not to create new object. These objects are\n // only available from the methods and attached functions, but still, it is\n // better to prevent ghost references to unrelevant data...\n __emptyObject(this.nodesIndex);\n __emptyObject(this.edgesIndex);\n __emptyObject(this.nodesIndex);\n __emptyObject(this.inNeighborsIndex);\n __emptyObject(this.outNeighborsIndex);\n __emptyObject(this.allNeighborsIndex);\n __emptyObject(this.inNeighborsCount);\n __emptyObject(this.outNeighborsCount);\n __emptyObject(this.allNeighborsCount);\n\n return this;\n });\n\n /**\n * This method reads an object and adds the nodes and edges, through the\n * proper methods \"addNode\" and \"addEdge\".\n *\n * Here is an example:\n *\n * > var myGraph = new graph();\n * > myGraph.read({\n * > nodes: [\n * > { id: 'n0' },\n * > { id: 'n1' }\n * > ],\n * > edges: [\n * > {\n * > id: 'e0',\n * > source: 'n0',\n * > target: 'n1'\n * > }\n * > ]\n * > });\n * >\n * > console.log(\n * > myGraph.nodes().length,\n * > myGraph.edges().length\n * > ); // outputs 2 1\n *\n * @param {object} g The graph object.\n * @return {object} The graph instance.\n */\n graph.addMethod('read', function(g) {\n var i,\n a,\n l;\n\n a = g.nodes || [];\n for (i = 0, l = a.length; i < l; i++)\n this.addNode(a[i]);\n\n a = g.edges || [];\n for (i = 0, l = a.length; i < l; i++)\n this.addEdge(a[i]);\n\n return this;\n });\n\n /**\n * This methods returns one or several nodes, depending on how it is called.\n *\n * To get the array of nodes, call \"nodes\" without argument. To get a\n * specific node, call it with the id of the node. The get multiple node,\n * call it with an array of ids, and it will return the array of nodes, in\n * the same order.\n *\n * @param {?(string|array)} v Eventually one id, an array of ids.\n * @return {object|array} The related node or array of nodes.\n */\n graph.addMethod('nodes', function(v) {\n // Clone the array of nodes and return it:\n if (!arguments.length)\n return this.nodesArray.slice(0);\n\n // Return the related node:\n if (arguments.length === 1 &&\n (typeof v === 'string' || typeof v === 'number'))\n return this.nodesIndex[v];\n\n // Return an array of the related node:\n if (\n arguments.length === 1 &&\n Object.prototype.toString.call(v) === '[object Array]'\n ) {\n var i,\n l,\n a = [];\n\n for (i = 0, l = v.length; i < l; i++)\n if (typeof v[i] === 'string' || typeof v[i] === 'number')\n a.push(this.nodesIndex[v[i]]);\n else\n throw 'nodes: Wrong arguments.';\n\n return a;\n }\n\n throw 'nodes: Wrong arguments.';\n });\n\n /**\n * This methods returns the degree of one or several nodes, depending on how\n * it is called. It is also possible to get incoming or outcoming degrees\n * instead by specifying 'in' or 'out' as a second argument.\n *\n * @param {string|array} v One id, an array of ids.\n * @param {?string} which Which degree is required. Values are 'in',\n * 'out', and by default the normal degree.\n * @return {number|array} The related degree or array of degrees.\n */\n graph.addMethod('degree', function(v, which) {\n // Check which degree is required:\n which = {\n 'in': this.inNeighborsCount,\n 'out': this.outNeighborsCount\n }[which || ''] || this.allNeighborsCount;\n\n // Return the related node:\n if (typeof v === 'string' || typeof v === 'number')\n return which[v];\n\n // Return an array of the related node:\n if (Object.prototype.toString.call(v) === '[object Array]') {\n var i,\n l,\n a = [];\n\n for (i = 0, l = v.length; i < l; i++)\n if (typeof v[i] === 'string' || typeof v[i] === 'number')\n a.push(which[v[i]]);\n else\n throw 'degree: Wrong arguments.';\n\n return a;\n }\n\n throw 'degree: Wrong arguments.';\n });\n\n /**\n * This methods returns one or several edges, depending on how it is called.\n *\n * To get the array of edges, call \"edges\" without argument. To get a\n * specific edge, call it with the id of the edge. The get multiple edge,\n * call it with an array of ids, and it will return the array of edges, in\n * the same order.\n *\n * @param {?(string|array)} v Eventually one id, an array of ids.\n * @return {object|array} The related edge or array of edges.\n */\n graph.addMethod('edges', function(v) {\n // Clone the array of edges and return it:\n if (!arguments.length)\n return this.edgesArray.slice(0);\n\n // Return the related edge:\n if (arguments.length === 1 &&\n (typeof v === 'string' || typeof v === 'number'))\n return this.edgesIndex[v];\n\n // Return an array of the related edge:\n if (\n arguments.length === 1 &&\n Object.prototype.toString.call(v) === '[object Array]'\n ) {\n var i,\n l,\n a = [];\n\n for (i = 0, l = v.length; i < l; i++)\n if (typeof v[i] === 'string' || typeof v[i] === 'number')\n a.push(this.edgesIndex[v[i]]);\n else\n throw 'edges: Wrong arguments.';\n\n return a;\n }\n\n throw 'edges: Wrong arguments.';\n });\n\n\n\n /**\n * This method return all the children of a specific node. An error is thrown if the node\n * does not exist.\n *\n * @param {string} id The edge id.\n * @return {object|array} The related node or array of nodes.\n */\n graph.addMethod('getChildren', function(id) {\n // Check that the arguments are valid:\n if ((typeof id !== 'string' && typeof id !== 'number') ||\n arguments.length !== 1)\n throw 'getChildren: Wrong arguments.';\n\n if (!this.nodesIndex[id])\n throw 'The node \"' + id + '\" does not exist.';\n var n = [];\n for (var node in this.outNeighborsIndex[id]){\n if (typeof node === 'string' || typeof node === 'number')\n n.push(this.nodesIndex[node]);\n else\n throw 'nodes: Wrong arguments.';\n }\n\n return n;\n });\n\n\n /**\n * EXPORT:\n * *******\n *\n */\n\n if (typeof sigma !== 'undefined') {\n sigma.classes = sigma.classes || Object.create(null);\n sigma.classes.graph = graph;\n } else if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports)\n exports = module.exports = graph;\n exports.graph = graph;\n } else\n this.graph = graph;\n\n\n\n}).call(this);\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/dataStructure/Graph.js","/**\n * Author: Davide Alocci\n * Version: 0.0.1\n */\n\nexport default class Edge {\n /**\n * Create a new Edge using nodes.\n * @param {string} id the edge id\n * @param {Node} sourceNode The source node\n * @param {Node} targetNode The target Node\n */\n constructor(id, sourceNode, targetNode){\n if (typeof id == 'undefined' || typeof sourceNode == 'undefined' || typeof targetNode == 'undefined'){\n throw \"The parameter id, sourceNode and targetNode cannot be undefined\";\n }\n\n //WARNING: Do not change this properties name !\n //They are used by the graph class in Sigma.js\n this.id = id;\n try {\n this.source = sourceNode.getId();\n this.target = targetNode.getId();\n } catch (err){\n throw 'SourceNode and TargetNode must have a getId() method. Please use or extend the Node obj like in Monosaccharide or Substituent';\n }\n // end sigma.js strict parameter\n\n this.sourceNode = sourceNode;\n this.targetNode = targetNode;\n }\n\n getEdgeId(){\n return this.id;\n }\n\n getEdgeSource(){\n return this.sourceNode;\n }\n\n getEdgeTarget(){\n return this.targetNode;\n }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/dataStructure/GraphEdge.js","/**\n * Author: Davide Alocci\n * Version: 0.0.1\n */\n\nexport default class Node {\n constructor(id){\n if(typeof id == 'undefined'){\n throw \"The parameter id be undefined\";\n } else{\n this.id = id;\n }\n }\n\n getId(){\n return this.id;\n }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/dataStructure/GraphNode.js","/**\n * Author: Davide Alocci\n * Version: 0.0.1\n */\n\nimport {Enum} from 'enumify';\n\nexport default class AcceptorPosition extends Enum {\n\n getAcceptorPosition(value) {\n switch (value){\n case 1: return AcceptorPosition.ONE;\n case 2: return AcceptorPosition.TWO;\n case 3: return AcceptorPosition.THREE;\n default: return AcceptorPosition.UNDEFINED;\n }\n }\n}\n\nAcceptorPosition.initEnum({\n ONE: {\n value: 1\n },\n TWO: {\n value: 2\n },\n THREE: {\n value: 3\n },\n UNDEFINED: {\n value: 'undefined'\n }\n});\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/dictionary/AcceptorPosition.js","'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.copyProperties = copyProperties;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar INITIALIZED = Symbol();\n\n/**\n * This is an abstract class that is not intended to be\n * used directly. Extend it to turn your class into an enum\n * (initialization is performed via `MyClass.initEnum()`).\n */\n\nvar Enum = exports.Enum = function () {\n /**\n * `initEnum()` closes the class. Then calling this constructor\n * throws an exception.\n * \n * If your subclass has a constructor then you can control\n * what properties are added to `this` via the argument you\n * pass to `super()`. No arguments are fine, too.\n */\n\n function Enum() {\n var instanceProperties = arguments.length <= 0 || arguments[0] === undefined ? undefined : arguments[0];\n\n _classCallCheck(this, Enum);\n\n // new.target would be better than this.constructor,\n // but isn’t supported by Babel\n if ({}.hasOwnProperty.call(this.constructor, INITIALIZED)) {\n throw new Error('Enum classes can’t be instantiated');\n }\n if ((typeof instanceProperties === 'undefined' ? 'undefined' : _typeof(instanceProperties)) === 'object' && instanceProperties !== null) {\n copyProperties(this, instanceProperties);\n }\n }\n /**\n * Set up the enum, close the class.\n * \n * @param arg Either an object whose properties provide the names\n * and values (which must be mutable objects) of the enum constants.\n * Or an Array whose elements are used as the names of the enum constants\n * The values are create by instantiating the current class.\n */\n\n _createClass(Enum, [{\n key: 'toString',\n\n /**\n * Default `toString()` method for enum constant.\n */\n value: function toString() {\n return this.constructor.name + '.' + this.name;\n }\n }], [{\n key: 'initEnum',\n value: function initEnum(arg) {\n Object.defineProperty(this, 'enumValues', {\n value: [],\n configurable: false,\n writable: false,\n enumerable: true\n });\n if (Array.isArray(arg)) {\n this._enumValuesFromArray(arg);\n } else {\n this._enumValuesFromObject(arg);\n }\n Object.freeze(this.enumValues);\n this[INITIALIZED] = true;\n return this;\n }\n }, {\n key: '_enumValuesFromArray',\n value: function _enumValuesFromArray(arr) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = arr[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var key = _step.value;\n\n this._pushEnumValue(new this(), key);\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n }\n }, {\n key: '_enumValuesFromObject',\n value: function _enumValuesFromObject(obj) {\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = Object.keys(obj)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var key = _step2.value;\n\n var value = new this(obj[key]);\n this._pushEnumValue(value, key);\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n }\n }, {\n key: '_pushEnumValue',\n value: function _pushEnumValue(enumValue, name) {\n enumValue.name = name;\n enumValue.ordinal = this.enumValues.length;\n Object.defineProperty(this, name, {\n value: enumValue,\n configurable: false,\n writable: false,\n enumerable: true\n });\n this.enumValues.push(enumValue);\n }\n\n /**\n * Given the name of an enum constant, return its value.\n */\n\n }, {\n key: 'enumValueOf',\n value: function enumValueOf(name) {\n return this.enumValues.find(function (x) {\n return x.name === name;\n });\n }\n\n /**\n * Make enum classes iterable\n */\n\n }, {\n key: Symbol.iterator,\n value: function value() {\n return this.enumValues[Symbol.iterator]();\n }\n }]);\n\n return Enum;\n}();\n\nfunction copyProperties(target, source) {\n // Ideally, we’d use Reflect.ownKeys() here,\n // but I don’t want to depend on a polyfill\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = Object.getOwnPropertyNames(source)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var key = _step3.value;\n\n var desc = Object.getOwnPropertyDescriptor(source, key);\n Object.defineProperty(target, key, desc);\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3.return) {\n _iterator3.return();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n\n return target;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/enumify/lib/enumify.js\n// module id = 5\n// module chunks = 0","/**\n * Author: Davide Alocci\n * Version: 0.0.1\n */\n\nimport {Enum} from 'enumify';\n\nexport default class Anomericity extends Enum {}\n\nAnomericity.initEnum(['ALPHA', 'BETA', 'UNDEFINED']);\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/dictionary/Anomericity.js","/**\n * Author: Davide Alocci\n * Version: 0.0.1\n */\n\nimport {Enum} from 'enumify';\n\nexport default class Isomer extends Enum {}\n\nIsomer.initEnum(['L', 'D', 'UNDEFINED']);\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/dictionary/Isomer.js","/**\n * Author: Davide Alocci\n * Version: 0.0.1\n */\n\nimport {Enum} from 'enumify';\n\nexport default class DonorPosition extends Enum {\n getDonorPosition(value) {\n switch (value){\n case 1: return DonorPosition.ONE;\n case 2: return DonorPosition.TWO;\n case 3: return DonorPosition.THREE;\n case 4: return DonorPosition.FOUR;\n case 5: return DonorPosition.FIVE;\n case 6: return DonorPosition.SIX;\n case 7: return DonorPosition.SEVEN;\n case 8: return DonorPosition.EIGHT;\n case 9: return DonorPosition.NINE;\n default: return DonorPosition.UNDEFINED;\n }\n }\n}\n\nDonorPosition.initEnum({\n ONE: {\n value: 1\n },\n TWO: {\n value: 2\n },\n THREE: {\n value: 3\n },\n FOUR:{\n value: 4\n },\n FIVE: {\n value: 5\n },\n SIX: {\n value: 6\n },\n SEVEN: {\n value: 7\n },\n EIGHT: {\n value: 8\n },\n NINE: {\n value: 9\n },\n UNDEFINED: {\n value: 'undefined'\n }\n});\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/dictionary/DonorPosition.js","/**\n * Author: Davide Alocci\n * Version: 0.0.1\n */\n\nimport {Enum} from 'enumify';\n\nexport default class MonosaccharideType extends Enum {\n}\n\nMonosaccharideType.initEnum({\n Hex: {\n shape: 'circle',\n color: '#FFFFFF',\n bisected: false \n },\n Glc: {\n shape: 'circle',\n color: '#0090BC',\n bisected: false\n },\n Man: {\n shape: 'circle',\n color: '#00A651',\n bisected: false\n },\n Gal: {\n shape: 'circle',\n color: '#FFD400',\n bisected: false\n },\n Gul: {\n shape: 'circle',\n color: '#F47920',\n bisected: false\n },\n Alt: {\n shape: 'circle',\n color: '#F69EA1',\n bisected: false\n },\n All: {\n shape: 'circle',\n color: '#A54399',\n bisected: false\n },\n Tal: {\n shape: 'circle',\n color: '#8FCCE9',\n bisected: false\n },\n Ido: {\n shape: 'circle',\n color: '#A17A4D',\n bisected: false\n },\n HexNAc: {\n shape: 'square',\n color: '#FFFFFF',\n bisected: false\n },\n GlcNAc: {\n shape: 'square',\n color: '#0090BC',\n bisected: false\n },\n ManNAc: {\n shape: 'square',\n color: '#00A651',\n bisected: false\n },\n GalNAc: {\n shape: 'square',\n color: '#FFD400',\n bisected: false\n },\n GulNAc: {\n shape: 'square',\n color: '#F47920',\n bisected: false\n },\n AltNAc: {\n shape: 'square',\n color: '#F69EA1',\n bisected: false\n },\n AllNAc: {\n shape: 'square',\n color: '#A54399',\n bisected: false\n },\n TalNAc: {\n shape: 'square',\n color: '#8FCCE9',\n bisected: false\n },\n IdoNAc: {\n shape: 'square',\n color: '#A17A4D',\n bisected: false\n },\n HexN: {\n shape: 'square',\n color: '#FFFFFF',\n bisected: true\n },\n GlcN: {\n shape: 'square',\n color: '#0090BC',\n bisected: true\n },\n ManN: {\n shape: 'square',\n color: '#00A651',\n bisected: true\n },\n GalN: {\n shape: 'square',\n color: '#FFD400',\n bisected: true\n },\n GulN: {\n shape: 'square',\n color: '#F47920',\n bisected: true\n },\n AltN: {\n shape: 'square',\n color: '#F69EA1',\n bisected: true\n },\n AllN: {\n shape: 'square',\n color: '#A54399',\n bisected: true\n },\n TalN: {\n shape: 'square',\n color: '#8FCCE9',\n bisected: true\n },\n IdoN: {\n shape: 'square',\n color: '#A17A4D',\n bisected: true\n },\n HexA: {\n shape: 'diamond',\n color: '#FFFFFF',\n bisected: true\n },\n GlcA: {\n shape: 'diamond',\n color: '#0090BC',\n bisected: true\n },\n ManA: {\n shape: 'diamond',\n color: '#00A651',\n bisected: true\n },\n GalA: {\n shape: 'diamond',\n color: '#FFD400',\n bisected: true\n },\n GulA: {\n shape: 'diamond',\n color: '#F47920',\n bisected: true\n },\n AltA: {\n shape: 'diamond',\n color: '#F69EA1',\n bisected: true\n },\n AllA: {\n shape: 'diamond',\n color: '#A54399',\n bisected: true\n },\n TalA: {\n shape: 'diamond',\n color: '#8FCCE9',\n bisected: true\n },\n IdoA: {\n shape: 'diamond',\n color: '#A17A4D',\n bisected: true\n },\n dHex: {\n shape: 'triangle',\n color: '#FFFFFF',\n bisected: false\n },\n Qui: {\n shape: 'triangle',\n color: '#0090BC',\n bisected: false\n },\n Rha: {\n shape: 'triangle',\n color: '#00A651',\n bisected: false\n },\n SixdAlt: {\n shape: 'triangle',\n color: '#F69EA1',\n bisected: false\n },\n SixdTal: {\n shape: 'triangle',\n color: '#8FCCE9',\n bisected: false\n },\n Fuc: {\n shape: 'triangle',\n color: '#ED1C24',\n bisected: false\n },\n dHexNAc: {\n shape: 'triangle',\n color: '#FFFFFF',\n bisected: true\n },\n QuiNAc: {\n shape: 'triangle',\n color: '#0090BC',\n bisected: true\n },\n RhaNAc: {\n shape: 'triangle',\n color: '#00A651',\n bisected: true\n },\n FucNAc: {\n shape: 'triangle',\n color: '#ED1C24',\n bisected: true\n },\n ddHex: {\n shape: 'rectangle',\n color: '#FFFFFF',\n bisected: false\n },\n Oli: {\n shape: 'rectangle',\n color: '#0090BC',\n bisected: false\n },\n Tyv: {\n shape: 'rectangle',\n color: '#00A651',\n bisected: false\n },\n Abe: {\n shape: 'rectangle',\n color: '#F47920',\n bisected: false\n },\n Par: {\n shape: 'rectangle',\n color: '#F69EA1',\n bisected: false\n },\n Dig: {\n shape: 'rectangle',\n color: '#A54399',\n bisected: false\n },\n Col: {\n shape: 'rectangle',\n color: '#8FCCE9',\n bisected: false\n },\n Pen: {\n shape: 'star',\n color: '#FFFFFF',\n bisected: false\n },\n Ara: {\n shape: 'star',\n color: '#00A651',\n bisected: false\n },\n Lyx: {\n shape: 'star',\n color: '#FFD400',\n bisected: false\n },\n Xyl: {\n shape: 'star',\n color: '#F47920',\n bisected: false\n },\n Rib: {\n shape: 'star',\n color: '#F69EA1',\n bisected: false\n },\n Nonu: {\n shape: 'diamond',\n color: '#FFFFFF',\n bisected: false\n },\n Kdn: {\n shape: 'diamond',\n color: '#00A651',\n bisected: false\n },\n Neu5Ac: {\n shape: 'diamond',\n color: '#A54399',\n bisected: false\n },\n Neu5Gc: {\n shape: 'diamond',\n color: '#8FCCE9',\n bisected: false\n },\n Neu: {\n shape: 'diamond',\n color: '#A17A4D',\n bisected: false\n },\n Sia: {\n shape: 'diamond',\n color: '#ED1C24',\n bisected: false\n },\n\n\n Unknown: {\n shape: 'Hexagon',\n color: '#FFFFFF',\n bisected: false\n },\n Bac: {\n shape: 'Hexagon',\n color: '#0090BC',\n bisected: false\n },\n LDManHep: {\n shape: 'Hexagon',\n color: '#00A651',\n bisected: false\n },\n Kdo: {\n shape: 'Hexagon',\n color: '#FFD400',\n bisected: false\n },\n Dha: {\n shape: 'Hexagon',\n color: '#F47920',\n bisected: false\n },\n DDManHep: {\n shape: 'Hexagon',\n color: '#F69EA1',\n bisected: false\n },\n MurNAc: {\n shape: 'Hexagon',\n color: '#A54399',\n bisected: false\n },\n MurNGc: {\n shape: 'Hexagon',\n color: '#8FCCE9',\n bisected: false\n },\n Mur: {\n shape: 'Hexagon',\n color: '#A17A4D',\n bisected: false\n },\n\n\n Assigned: {\n shape: 'Pentagon',\n color: '#FFFFFF',\n bisected: false\n },\n Api: {\n shape: 'Pentagon',\n color: '#0090BC',\n bisected: false\n },\n Fru: {\n shape: 'Pentagon',\n color: '#00A651',\n bisected: false\n },\n Tag: {\n shape: 'Pentagon',\n color: '#FFD400',\n bisected: false\n },\n Sor: {\n shape: 'Pentagon',\n color: '#F47920',\n bisected: false\n },\n Psi: {\n shape: 'Pentagon',\n color: '#F69EA1',\n bisected: false\n }\n});\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/views/glycomics/dictionary/MonosaccharideType.js","/**\n * Author: Davide Alocci\n * Version: 0.0.1\n */\n\nimport {Enum} from 'enumify';\n\nexport default class RingType extends Enum {}\n\nRingType.initEnum(['P', 'F','OPEN', 'UNDEFINED']);\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/dictionary/RingType.js","/**\n * Author: Davide Alocci\n * Version: 0.0.1\n */\n\nimport {Enum} from 'enumify';\n\nexport default class SubstituentType extends Enum {}\n\nSubstituentType.initEnum({\n Acetyl: {\n label: 'Ac'\n },\n Bromo: {\n label: 'Br'\n },\n Chloro: {\n label: 'Cl'\n },\n Ethyl: {\n label: 'Et'\n },\n Ethanolamine: {\n label : 'ETA'\n },\n Fluoro: {\n label: 'F'\n },\n Formyl: {\n label: 'Formyl'\n },\n Hydroxymethyl: {\n label: 'HMe'\n },\n Imino: {\n label: 'Imino'\n },\n RLactate1: {\n label: 'RLac1'\n },\n SLactate1: {\n label: 'SLac1'\n },\n Amino: {\n label: 'N'\n },\n Methyl: {\n label: 'Me'\n },\n NAcetyl: {\n label: 'NAc'\n },\n NAlanine: {\n label: 'NAla'\n },\n NFormyl: {\n label: 'NFormyl'\n },\n NGlycolyl: {\n label: 'NGc'\n },\n NMethyl: {\n label: 'NMe'\n },\n NSuccinate: {\n label: 'NSuc'\n },\n NSulfate: {\n label: 'NS'\n },\n NTrifluoroacetyl: {\n label: 'NTFA'\n },\n Nitrate: {\n label: 'NO3'\n },\n Phosphate: {\n label: 'P'\n },\n Pyruvate: {\n label: 'Pyr'\n },\n Sulfate: {\n label: 'S'\n },\n Thio: {\n label: 'Thio'\n },\n RPyruvate: {\n label: 'RPyr'\n },\n SPyruvate: {\n label: 'SPyr'\n },\n RLactate2: {\n label: 'RLac2'\n },\n SLactate2: {\n label: 'SLac2'\n },\n});\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/dictionary/SubstituentType.js","/**\n * Created by Renaud on 06/07/2017.\n */\n\n\nimport {Enum} from 'enumify';\n\nexport default class GlycoCTSubstituents extends Enum {}\n\nGlycoCTSubstituents.initEnum({\n NAcetyl: {\n glycoct: \"n-acetyl\"\n },\n Amino: {\n glycoct: \"amino\"\n },\n NGlycolyl: {\n glycoct: \"n-glycolyl\"\n },\n Methyl: {\n glycoct: \"methyl\"\n },\n Acetyl: {\n glycoct: \"acetyl\"\n },\n Sulfate: {\n glycoct: \"sulfate\"\n },\n Phosphate: {\n glycoct: \"phosphate\"\n },\n Bromo: {\n glycoct: 'bromo'\n },\n Chloro: {\n glycoct: 'chloro'\n },\n Ethyl: {\n glycoct: 'ethyl'\n },\n Ethanolamine: {\n glycoct : 'ethanolamine'\n },\n Fluoro: {\n glycoct: 'fluoro'\n },\n Formyl: {\n glycoct: 'formyl'\n },\n Hydroxymethyl: {\n glycoct: 'hydroxymethyl'\n },\n Imino: {\n glycoct: 'imino'\n },\n RLactate1: {\n glycoct: '(r)-lactate'\n },\n SLactate1: {\n glycoct: '(s)-lactate'\n },\n NAlanine: {\n glycoct: 'n-alanine'\n },\n NFormyl: {\n glycoct: 'n-formyl'\n },\n NMethyl: {\n glycoct: 'n-methyl'\n },\n NSuccinate: {\n glycoct: 'n-succinate'\n },\n NSulfate: {\n glycoct: 'n-sulfate'\n },\n NTrifluoroacetyl: {\n glycoct: 'n-trifluoroacetyl'\n },\n Nitrate: {\n glycoct: 'nitrate'\n },\n Pyruvate: {\n glycoct: 'pyruvate'\n },\n Thio: {\n glycoct: 'thio'\n },\n RPyruvate: {\n glycoct: '(r)-pyruvate'\n },\n SPyruvate: {\n glycoct: '(s)-pyruvate'\n },\n RLactate2: {\n glycoct: '(r)-lactate2'\n },\n SLactate2: {\n glycoct: '(s)-lactate2'\n },\n Unknown: {\n glycoct: 'unknown'\n }\n});\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/io/glycoCT/SubstituentsGlycoCT.js","/**\n * Created by Renaud on 03/08/2017.\n */\n\nimport {Enum} from 'enumify';\n\nexport default class SubstituentsPositions extends Enum {}\n\n SubstituentsPositions.initEnum({\n HexNAc: {\n position:2\n },\n\n GlcNAc: {\n position:2\n },\n\n ManNAc: {\n position:2\n },\n\n GalNAc: {\n position:2\n },\n\n GulNAc: {\n position:2\n },\n\n AltNAc: {\n position:2\n },\n\n AllNAc: {\n position:2\n },\n\n TalNAc: {\n position:2\n },\n\n IdoNAc: {\n position: 2\n },\n\n HexN: {\n position:2\n },\n\n GlcN: {\n position:2\n },\n\n ManN: {\n position:2\n },\n\n GalN: {\n position:2\n },\n\n GulN: {\n position:2\n },\n\n AltN: {\n position:2\n },\n\n AllN: {\n position:2\n },\n\n TalN: {\n position:2\n },\n\n IdoN: {\n position:2\n },\n\n KdnNAc: {\n position:5\n },\n\n KdnGc: {\n position:5\n },\n\n KdnNGc: {\n position:5\n },\n\n KdnN: {\n position:5\n },\n\n Neu5Ac: {\n position:5\n },\n\n Neu5Gc: {\n position:5\n },\n\n Neu: {\n position:5\n },\n\n dHexNAc: {\n position: 2\n },\n\n QuiNAc: {\n position: 2\n },\n\n RhaNAc: {\n position: 2\n },\n\n SixdAltNAc: {\n position: 2\n },\n\n SixdTalNAc: {\n position: 2\n },\n\n FucNAc: {\n position: 2\n },\n\n MurNAc: {\n position: 5\n },\n\n MurNGc: {\n position: 5\n },\n\n MurGc: {\n position: 5\n }\n\n});\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/io/glycoCT/SubstituentsPositions.js","/**\n * Created by Renaud on 21/07/2017.\n */\n\nimport {Enum} from 'enumify';\n\nexport default class MonosaccharideGlycoCT extends Enum {}\n\nMonosaccharideGlycoCT.initEnum({\n Hex: {\n glycoct: \"HEX\",\n transform: \"\"\n },\n\n Glc: {\n glycoct: \"glc-HEX\",\n transform: \"\"\n },\n\n Man: {\n glycoct: \"man-HEX\",\n transform: \"\"\n },\n\n Gal: {\n glycoct: \"gal-HEX\",\n transform: \"\"\n },\n\n\n Gul: {\n glycoct: \"gul-HEX\",\n transform: \"\"\n },\n\n Alt: {\n glycoct: \"alt-HEX\",\n transform: \"\"\n },\n\n All: {\n glycoct: \"all-HEX\",\n transform: \"\"\n },\n\n Tal: {\n glycoct: \"tal-HEX\",\n transform: \"\"\n },\n\n Ara: {\n glycoct: \"ara-PEN\",\n transform: \"\"\n },\n\n Lyx: {\n glycoct: \"lyx-PEN\",\n transform: \"\"\n },\n\n Rib: {\n glycoct: \"rib-PEN\",\n transform: \"\"\n },\n\n Bac: {\n glycoct: \"glc-HEX\",\n transform: \"|2:d|4:d|6:d\"\n },\n\n Fuc: {\n glycoct: \"gal-HEX\",\n transform: \"|6:d\"\n },\n\n HexA: {\n glycoct: \"HEX\",\n transform: \"|6:a\"\n },\n\n GlcA: {\n glycoct: \"glc-HEX\",\n transform: \"|6:a\"\n },\n\n ManA: {\n glycoct: \"man-HEX\",\n transform: \"|6:a\"\n },\n\n GalA: {\n glycoct: \"gal-HEX\",\n transform: \"|6:a\"\n },\n\n GulA: {\n glycoct: \"gul-HEX\",\n transform: \"|6:a\"\n },\n\n AltA: {\n glycoct: \"alt-HEX\",\n transform: \"|6:a\"\n },\n\n AllA: {\n glycoct: \"all-HEX\",\n transform: \"|6:a\"\n },\n\n TalA: {\n glycoct: \"tal-HEX\",\n transform: \"|6:a\"\n },\n\n Qui: {\n glycoct: \"glc-HEX\",\n transform: \"|6:d\"\n },\n\n dHex: {\n glycoct: \"HEX\",\n transform: \"|6:d\"\n },\n\n Ido: {\n glycoct: \"ido-HEX\",\n transform: \"\"\n },\n\n IdoA: {\n glycoct: \"ido-HEX\",\n transform: \"|6:a\"\n },\n\n Pen: {\n glycoct: \"PEN-1:4\",\n transform: \"\"\n },\n\n Rha: {\n glycoct: \"man-HEX\",\n transform: \"|6:d\"\n },\n\n SixdAlt: {\n glycoct: \"alt-HEX\",\n transform: \"|6:d\"\n },\n\n SixdTal: {\n glycoct: \"tal-HEX\",\n transform: \"|6:d\"\n },\n\n Xyl: {\n glycoct: \"xyl-PEN\",\n transform: \"\"\n },\n\n ddHex: {\n glycoct: \"HEX\",\n transform: \"|2:d|6:d\"\n },\n\n Unknown: {\n glycoct: \"unknown\",\n transform: \"\"\n },\n\n Oli: {\n glycoct: \"PEN\",\n transform: \"|3:d|6:d\"\n },\n\n Tyv: {\n glycoct: \"ara-HEX\",\n transform: \"|3:d|6:d\"\n },\n\n Abe: {\n glycoct: \"dxyl-HEX\",\n transform: \"|3:d|6:d\"\n },\n\n Par: {\n glycoct: \"rib-HEX\",\n transform: \"|3:d|6:d\"\n },\n\n Col: {\n glycoct: \"lxyl-HEX\",\n transform: \"|3:d|6:d\"\n },\n\n Dig: {\n glycoct: \"rib-HEX\",\n transform: \"|2:d|6:d\"\n },\n\n Nonu: {\n glycoct: \"NON\",\n transform: \"\"\n },\n\n Kdn: {\n glycoct: \"gro-dgal-NON-2:6\",\n transform: \"|1:a|2:keto|3:d\"\n },\n\n Kdo: {\n glycoct: \"man-OCT-2:6\",\n transform: \"|1:a|2:keto|3:d\"\n },\n\n Fru: {\n glycoct: \"ara-HEX-2:5\",\n transform: \"|2:keto\"\n },\n\n // GlycoCT not found\n Assigned: {\n glycoct: \"assigned-PEN\",\n transform: \"\"\n },\n LDManHep: {\n glycoct: \"ldmanhep-HEX\",\n transform: \"\"\n },\n\n DDManHep: {\n glycoct: \"ddmanhep-HEX\",\n transform: \"\"\n },\n\n Dha: {\n glycoct: \"dha-HEX\",\n transform: \"\"\n },\n\n Mur: {\n glycoct: \"mur-HEX\",\n transform: \"\"\n },\n\n Sia: {\n glycoct: \"sia-NON\",\n transform: \"\"\n },\n\n Api: {\n glycoct: \"api-PEN\",\n transform: \"\"\n },\n\n Tag: {\n glycoct: \"tag-PEN\",\n transform: \"\"\n },\n\n Sor: {\n glycoct: \"sor-PEN\",\n transform: \"\"\n },\n\n Psi: {\n glycoct: \"psi-PEN\",\n transform: \"\"\n }\n\n});\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/io/glycoCT/MonosaccharideGlycoCT.js","/**\n * Created by Renaud on 11/08/2017.\n */\n\nimport {Enum} from 'enumify';\n\nexport default class QuickModeMonosaccharides extends Enum {}\n\nQuickModeMonosaccharides.initEnum({\n\n Gal: {\n isomer: \"D\",\n ringType: \"P\",\n acceptorPosition: \"1\"\n },\n\n Glc: {\n isomer: \"D\",\n ringType: \"P\",\n acceptorPosition: \"1\"\n },\n\n Man: {\n isomer: \"D\",\n ringType: \"P\",\n acceptorPosition: \"1\"\n },\n\n GalNAc: {\n isomer: \"D\",\n ringType: \"P\",\n acceptorPosition: \"1\"\n },\n\n GlcNAc: {\n isomer: \"D\",\n ringType: \"P\",\n acceptorPosition: \"1\"\n },\n\n Fuc: {\n isomer: \"L\",\n ringType: \"P\",\n acceptorPosition: \"1\"\n },\n\n Kdn: {\n isomer: \"D\",\n ringType: \"P\",\n acceptorPosition: \"2\"\n },\n\n Neu5Ac: {\n isomer: \"D\",\n ringType: \"P\",\n acceptorPosition: \"2\"\n },\n\n Neu5Gc: {\n isomer: \"D\",\n ringType: \"P\",\n acceptorPosition: \"2\"\n },\n\n Neu: {\n isomer: \"D\",\n ringType: \"P\",\n acceptorPosition: \"2\"\n },\n\n Xyl: {\n isomer: \"D\",\n ringType: \"P\",\n acceptorPosition: \"1\"\n },\n\n }\n);\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/dictionary/QuickModeMonosaccharides.js","/**\n * Created by Renaud on 15/08/2017.\n */\n\n\nimport {Enum} from 'enumify';\n\nexport default class Structures extends Enum {}\n\nStructures.initEnum({\n\n ncore: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dman-HEX-1:5\\n6b:a-dman-HEX-1:5\\n7b:a-dman-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5o(3+1)6d\\n6:5o(6+1)7d\"\n },\n\n ncorefuc: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dman-HEX-1:5\\n6b:a-dman-HEX-1:5\\n7b:a-dman-HEX-1:5\\n8b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5o(3+1)6d\\n6:5o(6+1)7d\\n7:1o(6+1)8d\"\n },\n\n ncorebisect: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dman-HEX-1:5\\n6b:a-dman-HEX-1:5\\n7b:b-dglc-HEX-1:5\\n8s:n-acetyl\\n9b:a-dman-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5o(3+1)6d\\n6:5o(4+1)7d\\n7:7d(2+1)8n\\n8:5o(6+1)9d\"\n },\n\n ncorebisectfuc: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dman-HEX-1:5\\n6b:a-dman-HEX-1:5\\n7b:b-dglc-HEX-1:5\\n8s:n-acetyl\\n9b:a-dman-HEX-1:5\\n10b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5o(3+1)6d\\n6:5o(4+1)7d\\n7:7d(2+1)8n\\n8:5o(6+1)9d\\n9:1o(6+1)10d\"\n },\n\n ncorehyb: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dman-HEX-1:5\\n6b:a-dman-HEX-1:5\\n7b:a-dman-HEX-1:5\\n8b:a-dman-HEX-1:5\\n9b:a-dman-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5o(3+1)6d\\n6:5o(6+1)7d\\n7:7o(3+1)8d\\n8:7o(6+1)9d\"\n },\n\n ncorehybfuc: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dman-HEX-1:5\\n6b:a-dman-HEX-1:5\\n7b:a-dman-HEX-1:5\\n8b:a-dman-HEX-1:5\\n9b:a-dman-HEX-1:5\\n10b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5o(3+1)6d\\n6:5o(6+1)7d\\n7:7o(3+1)8d\\n8:7o(6+1)9d\\n9:1o(6+1)10d\"\n },\n\n ncorehybbis: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dman-HEX-1:5\\n6b:a-dman-HEX-1:5\\n7b:b-dglc-HEX-1:5\\n8s:n-acetyl\\n9b:a-dman-HEX-1:5\\n10b:a-dman-HEX-1:5\\n11b:a-dman-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5o(3+1)6d\\n6:5o(4+1)7d\\n7:7d(2+1)8n\\n8:5o(6+1)9d\\n9:9o(3+1)10d\\n10:9o(6+1)11d\"\n },\n\n ncorehybbisfuc: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dman-HEX-1:5\\n6b:a-dman-HEX-1:5\\n7b:b-dglc-HEX-1:5\\n8s:n-acetyl\\n9b:a-dman-HEX-1:5\\n10b:a-dman-HEX-1:5\\n11b:a-dman-HEX-1:5\\n12b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5o(3+1)6d\\n6:5o(4+1)7d\\n7:7d(2+1)8n\\n8:5o(6+1)9d\\n9:9o(3+1)10d\\n10:9o(6+1)11d\\n11:1o(6+1)12d\"\n },\n \n ncoreman: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dman-HEX-1:5\\n6b:a-dman-HEX-1:5\\n7b:a-dman-HEX-1:5\\n8b:a-dman-HEX-1:5\\n9b:a-dman-HEX-1:5\\n10b:a-dman-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5o(3+1)6d\\n6:6o(2+1)7d\\n7:5o(6+1)8d\\n8:8o(3+1)9d\\n9:8o(6+1)10d\"\n },\n\n ocore1: {\n glycoct: \"RES\\n1b:a-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\"\n },\n\n ocore2: {\n glycoct: \"RES\\n1b:a-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:b-dglc-HEX-1:5\\n5s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:1o(6+1)4d\\n4:4d(2+1)5n\"\n },\n\n ocore3: {\n glycoct: \"RES\\n1b:a-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3d(2+1)4n\"\n },\n\n ocore4: {\n glycoct: \"RES\\n1b:a-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dglc-HEX-1:5\\n6s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3d(2+1)4n\\n4:1o(6+1)5d\\n5:5d(2+1)6n\"\n },\n\n ocore5: {\n glycoct: \"RES\\n1b:a-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:a-dgal-HEX-1:5\\n4s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3d(2+1)4n\"\n },\n\n ocore6: {\n glycoct: \"RES\\n1b:a-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(6+1)3d\\n3:3d(2+1)4n\"\n },\n\n ocore7: {\n glycoct: \"RES\\n1b:a-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:a-dgal-HEX-1:5\\n4s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(6+1)3d\\n3:3d(2+1)4n\"\n },\n\n ocore8: {\n glycoct: \"RES\\n1b:a-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:a-dgal-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\"\n },\n\n gslarthro: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dman-HEX-1:5\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dgal-HEX-1:5\\n6s:n-acetyl\\nLIN\\n1:1o(4+1)2d\\n2:2o(3+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5d(2+1)6n\"\n },\n\n gslgala: {\n glycoct: \"RES\\n1b:a-dgal-HEX-1:5\\n2b:a-dgal-HEX-1:5\\nLIN\\n1:1o(4+1)2d\"\n },\n\n gslganglio: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:b-dgal-HEX-1:5\\n4s:n-acetyl\\n5b:b-dgal-HEX-1:5\\nLIN\\n1:1o(4+1)2d\\n2:2o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(3+1)5d\"\n },\n\n gslglobo: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:a-dgal-HEX-1:5\\n4b:b-dgal-HEX-1:5\\n5s:n-acetyl\\nLIN\\n1:1o(4+1)2d\\n2:2o(4+1)3d\\n3:3o(3+1)4d\\n4:4d(2+1)5n\"\n },\n\n gslisoglobo: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:a-dgal-HEX-1:5\\n4b:b-dgal-HEX-1:5\\n5s:n-acetyl\\nLIN\\n1:1o(4+1)2d\\n2:2o(3+1)3d\\n3:3o(3+1)4d\\n4:4d(2+1)5n\"\n },\n\n gsllacto: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dgal-HEX-1:5\\nLIN\\n1:1o(4+1)2d\\n2:2o(3+1)3d\\n3:3d(2+1)4n\\n4:3o(3+1)5d\"\n },\n\n gslmollu: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dman-HEX-1:5\\n3b:a-dman-HEX-1:5\\n4b:b-dglc-HEX-1:5\\n5s:n-acetyl\\nLIN\\n1:1o(4+1)2d\\n2:2o(3+1)3d\\n3:3o(2+1)4d\\n4:4d(2+1)5n\"\n },\n\n gslmuco: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:b-dgal-HEX-1:5\\n4b:b-dgal-HEX-1:5\\nLIN\\n1:1o(4+1)2d\\n2:2o(4+1)3d\\n3:3o(3+1)4d\"\n },\n\n gslneolacto: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dgal-HEX-1:5\\nLIN\\n1:1o(4+1)2d\\n2:2o(3+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\"\n },\n\n gaghyaluronic: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5|6:a\\n4b:b-dglc-HEX-1:5\\n5s:n-acetyl\\n6b:b-dglc-HEX-1:5|6:a\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(4+1)4d\\n4:4d(2+1)5n\\n5:4o(3+1)6d\"\n },\n\n gagchodroitin4: {\n glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5|6:a\\n4b:b-dgal-HEX-1:5\\n5s:n-acetyl\\n6b:b-dglc-HEX-1:5|6:a\\n7s:sulfate\\n8s:sulfate\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(4+1)4d\\n4:4d(2+1)5n\\n5:4o(3+1)6d\\n6:4o(4+-1)7n\\n7:1o(4+-1)8n\"\n },\n\n gagchodroitin6: {\n glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5|6:a\\n4b:b-dgal-HEX-1:5\\n5s:n-acetyl\\n6b:b-dglc-HEX-1:5|6:a\\n7s:sulfate\\n8s:sulfate\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(4+1)4d\\n4:4d(2+1)5n\\n5:4o(3+1)6d\\n6:4o(6+-1)7n\\n7:1o(6+-1)8n\"\n },\n\n gagchodroitin26: {\n glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5|6:a\\n4s:sulfate\\n5b:b-dgal-HEX-1:5\\n6s:n-acetyl\\n7b:b-dglc-HEX-1:5|6:a\\n8s:sulfate\\n9s:sulfate\\n10s:sulfate\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(2+-1)4n\\n4:3o(4+1)5d\\n5:5d(2+1)6n\\n6:5o(3+1)7d\\n7:7o(2+-1)8n\\n8:5o(6+-1)9n\\n9:1o(6+-1)10n\"\n },\n\n gagchodroitin46: {\n glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5|6:a\\n4b:b-dgal-HEX-1:5\\n5s:n-acetyl\\n6b:b-dglc-HEX-1:5|6:a\\n7s:sulfate\\n8s:sulfate\\n9s:sulfate\\n10s:sulfate\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(4+1)4d\\n4:4d(2+1)5n\\n5:4o(3+1)6d\\n6:4o(4+-1)7n\\n7:4o(6+-1)8n\\n8:1o(4+-1)9n\\n9:1o(6+-1)10n\"\n },\n\n gagdermatan: {\n glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dido-HEX-1:5|6:a\\n4b:b-dgal-HEX-1:5\\n5s:n-acetyl\\n6b:b-dido-HEX-1:5|6:a\\n7s:sulfate\\n8s:sulfate\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(4+1)4d\\n4:4d(2+1)5n\\n5:4o(3+1)6d\\n6:4o(4+-1)7n\\n7:1o(4+-1)8n\"\n },\n\n gagkeratan: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:b-dglc-HEX-1:5\\n5s:n-acetyl\\n6b:b-dgal-HEX-1:5\\n7s:sulfate\\n8s:sulfate\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3o(3+1)4d\\n4:4d(2+1)5n\\n5:4o(4+1)6d\\n6:4o(6+-1)7n\\n7:1o(6+-1)8n\"\n },\n\n gagheparin: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-sulfate\\n3s:sulfate\\n4b:a-dido-HEX-1:5|6:a\\n5s:sulfate\\n6b:b-dglc-HEX-1:5\\n7s:n-sulfate\\n8s:sulfate\\n9b:a-dido-HEX-1:5|6:a\\n10s:sulfate\\n11s:sulfate\\nLIN\\n1:1d(2+-1)2n\\n2:1o(3+-1)3n\\n3:1o(4+1)4d\\n4:4o(2+-1)5n\\n5:4o(4+1)6d\\n6:6d(2+-1)7n\\n7:6o(3+-1)8n\\n8:6o(4+1)9d\\n9:6o(6+-1)10n\\n10:1o(6+-1)11n\"\n },\n\n gagheparan: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:a-dido-HEX-1:5|6:a\\n4s:sulfate\\n5b:b-dglc-HEX-1:5\\n6s:n-sulfate\\n7b:a-dido-HEX-1:5|6:a\\n8s:sulfate\\n9s:sulfate\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3o(2+-1)4n\\n4:3o(4+1)5d\\n5:5d(2+-1)6n\\n6:5o(4+1)7d\\n7:5o(6+-1)8n\\n8:1o(6+-1)9n\"\n },\n\n milklac: {\n glycoct: \"RES\\n1b:x-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\nLIN\\n1:1o(4+1)2d\"\n },\n\n milk3fuclac: {\n glycoct: \"RES\\n1b:x-dglc-HEX-1:5\\n2b:a-lgal-HEX-1:5|6:d\\n3b:b-dgal-HEX-1:5\\nLIN\\n1:1o(3+1)2d\\n2:1o(4+1)3d\"\n },\n\n milk2fuclac: {\n glycoct: \"RES\\n1b:x-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1o(4+1)2d\\n2:2o(2+1)3d\"\n },\n\n milkdifuc: {\n glycoct: \"RES\\n1b:x-dglc-HEX-1:5\\n2b:a-lgal-HEX-1:5|6:d\\n3b:b-dgal-HEX-1:5\\n4b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1o(3+1)2d\\n2:1o(4+1)3d\\n3:3o(2+1)4d\"\n },\n\n milktetra: {\n glycoct: \"RES\\n1b:x-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dgal-HEX-1:5\\nLIN\\n1:1o(4+1)2d\\n2:2o(3+1)3d\\n3:3d(2+1)4n\\n4:3o(3+1)5d\"\n },\n\n milkneotetra: {\n glycoct: \"RES\\n1b:x-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dgal-HEX-1:5\\nLIN\\n1:1o(4+1)2d\\n2:2o(3+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\"\n },\n\n antigenA: {\n glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2b:a-lgal-HEX-1:5|6:d\\n3b:a-dgal-HEX-1:5\\n4s:n-acetyl\\nLIN\\n1:1o(2+1)2d\\n2:1o(3+1)3d\\n3:3d(2+1)4n\"\n },\n\n antigenB: {\n glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2b:a-lgal-HEX-1:5|6:d\\n3b:b-dgal-HEX-1:5\\nLIN\\n1:1o(2+1)2d\\n2:1o(3+1)3d\"\n },\n\n antigenH: {\n glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1o(2+1)2d\"\n },\n\n antigenCAD: {\n glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n5s:n-acetyl\\n6b:b-dgal-HEX-1:5\\n7s:n-acetyl\\n8b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n9s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(3+2)4d\\n4:4d(5+1)5n\\n5:3o(4+1)6d\\n6:6d(2+1)7n\\n7:1o(6+2)8d\\n8:8d(5+1)9n\"\n },\n\n antigenP: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:a-dgal-HEX-1:5\\n4b:b-dgal-HEX-1:5\\n5s:n-acetyl\\nLIN\\n1:1o(4+1)2d\\n2:2o(4+1)3d\\n3:3o(3+1)4d\\n4:4d(2+1)5n\"\n },\n\n antigenPk: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:a-dgal-HEX-1:5\\nLIN\\n1:1o(4+1)2d\\n2:2o(4+1)3d\"\n },\n\n antigenSda: {\n glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2b:b-dglc-HEX-1:5\\n3s:n-acetyl\\n4b:b-dgal-HEX-1:5\\n5b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n6s:n-acetyl\\n7b:b-dgal-HEX-1:5\\n8s:n-acetyl\\nLIN\\n1:1o(3+1)2d\\n2:2d(2+1)3n\\n3:2o(4+1)4d\\n4:4o(3+2)5d\\n5:5d(5+1)6n\\n6:4o(4+1)7d\\n7:7d(2+1)8n\"\n },\n\n highMannose: {\n glycoct: \"RES\\n1b:a-dman-HEX-1:5\\n2b:a-dman-HEX-1:5\\nLIN\\n1:1o(2+1)2d\"\n },\n\n lacDiNAc: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\"\n },\n\n lactoseAmine: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\"\n },\n\n neoLactoseAmine: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\"\n },\n\n polyLactoseAmine: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:b-dglc-HEX-1:5\\n5s:n-acetyl\\n6b:b-dgal-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3o(3+1)4d\\n4:4d(2+1)5n\\n5:4o(4+1)6d\"\n },\n\n sialyllactoNLSa: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n5s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(3+2)4d\\n4:4d(5+1)5n\"\n },\n\n sialyllactorNLSb: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n5s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(6+2)4d\\n4:4d(5+1)5n\"\n },\n\n sialyllactoNLSc: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n5s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:1o(6+2)4d\\n4:4d(5+1)5n\"\n },\n\n disialyllactorNLDS: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n5s:n-acetyl\\n6b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n7s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(3+2)4d\\n4:4d(5+1)5n\\n5:1o(6+2)6d\\n6:6d(5+1)7n\"\n },\n\n fucosylatedLacDiNAc: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:a-lgal-HEX-1:5|6:d\\n4b:b-dgal-HEX-1:5\\n5s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:1o(4+1)4d\\n4:4d(2+1)5n\"\n },\n\n sialylatedLacDiNAc: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4s:n-acetyl\\n5b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n6s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(6+2)5d\\n5:5d(5+1)6n\"\n },\n\n lewisA: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:1o(4+1)4d\"\n },\n\n lewisB: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-lgal-HEX-1:5|6:d\\n5b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(2+1)4d\\n4:1o(4+1)5d\"\n },\n\n lewisC: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\"\n },\n\n lewisD: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(2+1)4d\"\n },\n\n lewisX: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:a-lgal-HEX-1:5|6:d\\n4b:b-dgal-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:1o(4+1)4d\"\n },\n\n lewisY: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:a-lgal-HEX-1:5|6:d\\n4b:b-dgal-HEX-1:5\\n5b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:1o(4+1)4d\\n4:4o(2+1)5d\"\n },\n\n sialylLewisA: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n5s:n-acetyl\\n6b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(3+2)4d\\n4:4d(5+1)5n\\n5:1o(4+1)6d\"\n },\n\n sialylLewisX: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:a-lgal-HEX-1:5|6:d\\n4b:b-dgal-HEX-1:5\\n5b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n6s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:1o(4+1)4d\\n4:4o(3+2)5d\\n5:5d(5+1)6n\"\n },\n\n VIM2: {\n glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n5s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3o(3+2)4d\\n4:4d(5+1)5n\"\n }\n\n }\n);\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/dictionary/Structures.js","/**\n * Author: Davide Alocci\n * Version: 0.0.1\n */\nimport Edge from '../../dataStructure/GraphEdge';\nimport AcceptorPosition from '../dictionary/AcceptorPosition';\nimport DonorPosition from '../dictionary/DonorPosition';\n\nexport default class GlycosidicLinkage extends Edge{\n\n constructor(id, sourceNode, targetNode, acceptorPosition, donorPosition){\n\n super(id,sourceNode,targetNode);\n\n if(acceptorPosition instanceof AcceptorPosition){\n this._acceptorPosition= acceptorPosition;\n } else if(typeof acceptorPosition == 'undefined') {\n this._acceptorPosition = AcceptorPosition.UNDEFINED;\n } else {\n throw \"The Acceptor Position must be AcceptorPosition type. Please use the enum under src/js/glycomics/dictionary/AcceptorPosition.js\";\n }\n\n if(donorPosition instanceof DonorPosition){\n this._donorPosition = donorPosition;\n } else if(typeof donorPosition == 'undefined') {\n this._donorPosition = DonorPosition.UNDEFINED;\n } else {\n throw \"The Donor Position must be DonorPosition type. Please use the enum under src/js/glycomics/dictionary/DonorPosition.js\";\n }\n }\n\n get acceptorPosition(){\n return this._acceptorPosition;\n }\n\n get donorPosition(){\n return this._donorPosition;\n }\n\n set acceptorPosition(acceptorPosition){\n if(acceptorPosition instanceof AcceptorPosition) {\n this._acceptorPosition = acceptorPosition;\n } else {\n throw \"The Donor Position must be AcceptorPosition type. Please use the enum under src/js/glycomics/dictionary/AcceptorPosition.js\";\n }\n return acceptorPosition;\n }\n\n set donorPosition(donorPosition){\n if(donorPosition instanceof DonorPosition) {\n this._donorPosition = donorPosition;\n } else {\n throw \"The Donor Position must be DonorPosition type. Please use the enum under src/js/glycomics/dictionary/DonorPosition.js\";\n }\n return donorPosition;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/linkages/GlycosidicLinkage.js","/**\n * Author: Davide Alocci\n * Version: 0.0.1\n */\nimport Edge from '../../dataStructure/GraphEdge';\nimport DonorPosition from '../dictionary/DonorPosition';\n\n\nexport default class SubstituentLinkage extends Edge{\n constructor(id,target,source,donorPosition){\n super(id,target,source);\n\n if(donorPosition instanceof DonorPosition){\n this._donorPosition = donorPosition;\n } else if(typeof donorPosition == 'undefined') {\n this._donorPosition = DonorPosition.UNDEFINED;\n } else {\n throw \"The Donor Position must be DonorPosition type. Please use the enum under src/js/glycomics/dictionary/DonorPosition.js\";\n }\n }\n\n get donorPosition(){\n return this._donorPosition;\n }\n\n set donorPosition(donorPosition){\n if(donorPosition instanceof DonorPosition) {\n this._donorPosition = donorPosition;\n } else {\n throw \"The Donor Position must be DonorPosition type. Please use the enum under src/js/glycomics/dictionary/DonorPosition.js\";\n }\n return donorPosition;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/linkages/SubstituentLinkage.js","/**\n * Author: Davide Alocci\n * Version: 0.0.1\n */\n\nimport Node from '../../dataStructure/GraphNode';\nimport Anomericity from '../dictionary/Anomericity';\nimport Isomer from '../dictionary/Isomer';\nimport RingType from '../dictionary/RingType';\nimport MonosaccharideType from '../../../views/glycomics/dictionary/MonosaccharideType';\n\nexport default class Monosaccharide extends Node{\n\n constructor(id,monosaccharideType,anomericity,isomer,ringType){\n super(id);\n\n if(monosaccharideType instanceof MonosaccharideType){\n this._monosaccharideType = monosaccharideType;\n } else if(typeof monosaccharideType == 'undefined') {\n this._monosaccharideType = MonosaccharideType.UNDEFINED;\n } else{\n throw 'Please use the MonosaccharideType class and forget about string. Extend the enum if you need a specific value';\n }\n\n if(anomericity instanceof Anomericity){\n this._anomericity = anomericity;\n } else if(typeof anomericity == 'undefined') {\n this._anomericity = Anomericity.UNDEFINED;\n } else {\n throw 'Please use the Anomericity class and forget about string. Extend the enum if you need a specific value';\n }\n\n if(isomer instanceof Isomer){\n this._isomer = isomer;\n } else if(typeof isomer == 'undefined') {\n this._isomer = Isomer.UNDEFINED;\n } else {\n throw 'Please use the Isomer class and forget about string. Extend the enum if you need a specific value';\n }\n\n if(ringType instanceof RingType){\n this._ringType = ringType;\n } else if(typeof ringType == 'undefined') {\n this._ringType = RingType.UNDEFINED;\n } else{\n throw 'Please use the RingType class and forget about string. Extend the enum if you need a specific value';\n }\n\n }\n\n get ringType(){\n return this._ringType;\n }\n\n get monosaccharideType(){\n return this._monosaccharideType;\n }\n\n get isomer(){\n return this._isomer;\n }\n\n get anomericity(){\n return this._anomericity;\n }\n\n set ringType(ringType){\n if(ringType instanceof RingType){\n this._ringType = ringType;\n } else{\n throw 'Please use the RingType class and forget about string. Extend the enum if you need a specific value';\n }\n }\n\n set monosaccharideType(monosaccharideType){\n if(monosaccharideType instanceof MonosaccharideType){\n this._monosaccharideType = monosaccharideType;\n } else{\n throw 'Please use the MonosaccharideType class and forget about string. Extend the enum if you need a specific value';\n }\n }\n\n set isomer(isomer){\n if(isomer instanceof Isomer){\n this._isomer = isomer;\n } else {\n throw 'Please use the Isomer class and forget about string. Extend the enum if you need a specific value';\n }\n }\n\n set anomericity(anomericity){\n if(anomericity instanceof Anomericity){\n this._anomericity = anomericity;\n } else {\n throw 'Please use the Anomericity class and forget about string. Extend the enum if you need a specific value';\n }\n }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/nodes/Monosaccharide.js","/**\n * Author: Davide Alocci\n * Version: 0.0.1\n */\n\nimport Node from '../../dataStructure/GraphNode';\nimport SubstituentType from '../dictionary/SubstituentType';\n\nexport default class Substituent extends Node{\n\n constructor(id,substituentType){\n super(id);\n\n if(substituentType instanceof SubstituentType){\n this._substituentType = substituentType;\n } else if(typeof substituentType == 'undefined') {\n this._substituentType = SubstituentType.UNDEFINED;\n } else{\n throw 'Please use the SubstituentType class and forget about string. Extend the enum if you need a specific value';\n }\n }\n\n get substituentType(){\n return this._substituentType;\n }\n\n set substituentType(substituentType){\n if(substituentType instanceof SubstituentType){\n this._substituentType = substituentType;\n } else{\n throw 'Please use the SubstituentType class and forget about string. Extend the enum if you need a specific value';\n }\n }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/nodes/Substituent.js","/**\n * Author: Davide Alocci\n * Version: 0.0.1\n *\n *\n * TODO: We need to add something to freeze the Glycan structure.\n * At the moment all the attributes are mutable unless ids with targets and sources.\n *\n */\nimport Monosaccharide from './nodes/Monosaccharide';\nimport Substituent from './nodes/Substituent';\nimport GlycosidicLinkage from './linkages/GlycosidicLinkage';\nimport SubstituentLinkage from './linkages/SubstituentLinkage';\nimport Graph from '../dataStructure/Graph';\n\nexport default class Glycan{\n\n constructor(id,rootNode){\n if (typeof id !== 'string' && typeof id !== 'number'){\n throw 'The glycan must have a string or number id.';\n } else {\n this.id = id;\n }\n\n this.rootSet = false;\n //Wrapping of Sigma.js graph datastructure.\n this.graph = new Graph.graph();\n\n if (rootNode instanceof Monosaccharide){\n this.rootNode = rootNode;\n try{\n this.graph.addNode(rootNode);\n } catch(err){\n throw 'Error adding node: '+err;\n }\n\n this.rootSet = true;\n } else if(typeof rootNode !== 'undefined'){\n throw 'The Root Node cannot be undefined or a Monosaccharide ';\n }\n\n }\n\n /**\n * Chech if the root of the Glycan is set.\n * @returns {boolean}\n */\n\n rootIsSet(){\n return this.rootSet;\n }\n\n /**\n * Get the Glycan Id\n * @returns {string} Glycan Id\n */\n\n getGlycanId(){\n return this.id;\n }\n\n /**\n * Get the root node. Can only be a Monosaccharide\n * @returns {Monosaccharide} Root Monosaccharide\n */\n\n getRootNode(){\n return this.rootNode;\n }\n\n /**\n * Set the root node. Can only be a Monosaccharide\n * @param {Monosaccharide} rootNode The root node\n * @returns {Monosaccharide} The root node\n */\n setRootNode(rootNode){\n if (!(rootNode instanceof Monosaccharide)){\n throw 'The Root Node can be only a Monosaccharide ';\n }\n\n if (this.rootIsSet()){\n throw 'The Root Node can only be set once. Create a new Glycan object.';\n }\n\n this.rootNode = rootNode;\n this.graph.addNode(rootNode);\n this.rootSet = true;\n return rootNode;\n }\n\n /**\n * Return the Node with the id specified by the user otherwise throw an error.\n * @param {string} id The node id\n * @returns {*} return a node object (Monosaccharide or Substituent in our case).\n */\n\n getNodeById(id){\n try{\n var node = this.graph.nodes(id);\n if(node)\n return node;\n } catch (err){\n throw 'Error: '+ err;\n }\n throw 'Error: The node does not exist';\n }\n\n /**\n * Return the Edge with the id specified by the user otherwise throw an error.\n * @param {string} id The Edge id\n * @returns {*} return a linkage(edge) object (GlycosidicLinkage or SubstituentLinkage in our case).\n */\n getEdgeById(id){\n try{\n var edge = this.graph.edges(id);\n if(edge)\n return edge;\n } catch (err){\n throw 'Error: '+ err;\n }\n throw 'Error: The node does not exist';\n }\n\n /**\n * Return the Edge within sourceNode and targetNode\n * Throw an error if the edge does not exist.\n * TODO: The for loop can ber removed by creating a new method in the graph.js to get specific edges.\n * @param {string} id The Edge id\n * @returns {*} return a linkage(edge) object (GlycosidicLinkage or SubstituentLinkage in our case).\n */\n getEdge(sourceNode,targetNode){\n for( var i = 0; i < this.graph.edges().length; i++){\n if(this.graph.edges()[i].getEdgeSource() === sourceNode && this.graph.edges()[i].getEdgeTarget() === targetNode){\n return this.graph.edges()[i];\n }\n }\n throw 'No edge found between the sourceNode and targetNode';\n\n }\n\n /**\n * Return the Monosaccharide with the id specified by the user otherwise throw an error.\n * @param {string} id The Monosaccharide id\n * @returns {Monosaccharide} return a Monosaccahride object\n */\n getMonosaccharideById(id){\n var monosaccharide = this.getNodeById(id);\n if( monosaccharide instanceof Monosaccharide){\n return monosaccharide;\n } else {\n throw 'This method can only return monosaccharide object';\n }\n }\n\n /**\n * Return the Substituent with the id specified by the user otherwise throw an error.\n * @param {string} id The Substituent id\n * @returns {Substituent} return a Substituent object\n */\n getSubstituentById(id){\n var substituent = this.getNodeById(id);\n if(substituent instanceof Substituent){\n return substituent;\n } else {\n throw 'This method can only return substituent object';\n }\n }\n\n\n /**\n * Return the GlycosidicLinkage with the id specified by the user otherwise throw an error.\n * @param {string} id The Edge id\n * @returns {GlycosidicLinkage} return a GlycosidicLinkage object\n */\n getGlycosidicLinkagebyID(id){\n var glyLinkage = this.getEdgeById(id);\n if(glyLinkage instanceof GlycosidicLinkage){\n return glyLinkage;\n } else {\n throw 'This method can only return GlycosidicLinkage object';\n }\n }\n\n\n /**\n * Return the SubstituentLinkage with the id specified by the user otherwise throw an error.\n * @param {string} id The Edge id\n * @returns {SubstituentLinkage} return a SubstituentLinkage object\n */\n getSubstituentLinkagebyId(id){\n var subLinkage = this.getEdgeById(id);\n if(subLinkage instanceof SubstituentLinkage){\n return subLinkage;\n } else {\n throw 'This method can only return SubstituentLinkage object';\n }\n }\n\n /**\n * Return the GlycosidicLinkage within sourceNode and targhetNode\n * @param {string} id The Edge id\n * @returns {GlycosidicLinkage} return a GlycosidicLinkage object\n */\n getGlycosidicLinkage(sourceNode,targetNode){\n var glyLinkage = this.getEdge(sourceNode,targetNode);\n if(glyLinkage instanceof GlycosidicLinkage){\n return glyLinkage;\n } else {\n throw 'This method can only return GlycosidicLinkage object';\n }\n }\n\n /**\n * Return the SubstituentLinkage within sourceNode and targhetNode\n * @param {string} id The Edge id\n * @returns {SubstituentLinkage} return a SubstituentLinkage object\n */\n getSubstituentLinkage(sourceNode,targetNode){\n var subLinkage = this.getEdgeById(sourceNode,targetNode);\n if(subLinkage instanceof SubstituentLinkage){\n return subLinkage;\n } else {\n throw 'This method can only return SubstituentLinkage object';\n }\n }\n\n\n\n /**\n * Add a new Monosaccharide to the Glycan with a pre-built Glycosidic Linkage.\n * @param {Monosaccharide} childNode The monosaccharide to add\n * @param {GlycosidicLinkage} glycosidicLinkage The edge to add\n * @returns {Monosaccharide} The monosaccharide added to the Glycan.\n */\n\n addMonosaccharide(childNode,glycosidicLinkage){\n if(childNode instanceof Monosaccharide && glycosidicLinkage instanceof GlycosidicLinkage){\n this.graph.addNode(childNode);\n this.graph.addEdge(glycosidicLinkage);\n } else{\n throw 'Error: the childNode must be a Monosaccharide and the Linkage must be a GlycosidicLinkage';\n }\n\n return childNode;\n }\n\n /**\n * Add a new Substituent to the Glycan with a pre-built Substituent Linkage\n * @param {Substituent} childNode The substituent to add\n * @param {SubstituentLinkage}substituentLinkage The edge to add\n * @returns {Substituent} The substituent added to the Substituent.\n */\n\n addSubstituent(childNode,substituentLinkage){\n if(childNode instanceof Substituent && substituentLinkage instanceof SubstituentLinkage){\n try{\n this.graph.addNode(childNode);\n this.graph.addEdge(substituentLinkage);\n } catch (err){\n throw 'Cannot add node and edge to the graph: ' + err;\n }\n } else {\n throw 'The childNode must be a Substituent and the Linkage must be a SubstituentLinkage';\n }\n return childNode;\n }\n\n /**\n * Add a new Monosaccharide to the Glycan without Glycosidic Linkage Object\n * @param {Node} parentNode The parentNode in the graph.(Monosaccharide or Substituent)\n * @param {Monosaccharide} childNode The Monosaccharide to add\n * @param {AcceptorPosition} AcceptorPosition The AcceptorPosition in the Glycosidic Linkage\n * @param {DonorPosition} donorPosition The donorPosition in the Glycosidic Linkage\n * @return {GlycosidicLinkage} the linkage created to add the node.\n */\n addMonosaccharideWithLinkage(parentNode, childNode, acceptorPosition, donorPosition){\n if(childNode instanceof Monosaccharide ){\n try{\n var glycosidicLinkage = new GlycosidicLinkage('GlyLin:'+parentNode.getId()+'-'+childNode.getId(),parentNode,childNode,acceptorPosition,donorPosition);\n this.addMonosaccharide(childNode,glycosidicLinkage);\n return glycosidicLinkage;\n } catch(err) {\n throw 'Cannot Create a Glycosidic Linkage: '+ err;\n }\n }\n }\n\n /**\n * Add a new Monosaccharide to the Glycan without Glycosidic Linkage Object\n * @param {Node} parentNode The parentNode in the graph.(Monosaccharide or Substituent)\n * @param {Substituent} childNode The Monosaccharide to add\n * @param {DonorPosition} donorPosition The donorPosition in the Glycosidic Linkage\n * @return {SubstituentLinkage} the linkage created to add the node.\n */\n\n addSubstituentWithLinkage(parentNode, childNode, donorPosition){\n if(childNode instanceof Substituent ){\n try{\n var substituentLinkage = new SubstituentLinkage('SubLin:'+parentNode.getId()+'-'+childNode.getId(),parentNode,childNode,donorPosition);\n this.addSubstituent(childNode, substituentLinkage);\n return substituentLinkage;\n } catch(err) {\n throw 'Cannot Create a Glycosidic Linkage: '+ err;\n }\n }\n }\n /**\n * Remove a node from the Glycan graph. This method works with Substituents and Monosaccharides\n * @param {string} id The id of the node to be removed\n * @returns {Graph} Updated graph.\n */\n removeNodeById(id){\n try{\n var updatedGraph = this.graph.dropNode(id);\n return updatedGraph;\n } catch (err){\n throw 'Error removing the Node: '+ err;\n }\n }\n\n /**\n * Remove a Monosaccharide for the Glycan. It removes all the edges connected to the Monosaccharide.\n * Be carefull: The children will be detached from the tree.\n * @param {Monosaccharide} childNode The monosaccharide to be removed\n * @returns {Graph} Updated graph\n */\n removeMonosaccharide(childNode){\n if(childNode instanceof Monosaccharide){\n try{\n var updatedGraph = this.removeNodeById(childNode.id);\n return updatedGraph;\n } catch (err){\n throw 'Error removing Monosaccharide: '+ err;\n }\n } else {\n throw 'This method can remove only monosaccharide from the Glycan';\n }\n }\n\n /**\n * Remove a Substituent for the Glycan. It removes all the edges connected to the Substituent.\n * Be carefull: The children will be detached from the tree.\n * @param {Substituent} childNode The substituent to be removed\n * @returns {Graph} Updated graph\n */\n removeSubstituent(childNode){\n if(childNode instanceof Substituent){\n try{\n var updatedGraph = this.graph.dropNode(childNode.id);\n return updatedGraph;\n } catch (err){\n throw 'Error removing Substituent: '+ err;\n }\n } else {\n throw 'This method can remove only substituent from the Glycan';\n }\n }\n\n /**\n * Remove a edge from the Glycan graph. This method works with Substituents and Monosaccharides\n * @param {string} id The id of the linkage to be removed\n * @returns {Graph} Updated graph.\n */\n removeLinkageById(id){\n try{\n var updatedGraph = this.graph.dropEdge(id);\n return updatedGraph;\n } catch (err){\n throw 'Error removing the Node: '+ err;\n }\n }\n\n /**\n * Remove a GlycosidicLinkage for the Glycan.\n * @param {GlycosidicLinkage} glycosidicLinkage The glycosidicLinkage to be removed\n * @returns {Graph} Updated graph\n */\n removeGlycosidicLinkage(linkage){\n if(linkage instanceof GlycosidicLinkage){\n try{\n var updatedGraph = this.removeLinkageById(linkage.id);\n return updatedGraph;\n } catch (err){\n throw 'Error removing GlycosidicLinkage: '+ err;\n }\n } else {\n throw 'This method can remove only GlycosidicLinkages from the Glycan';\n }\n }\n\n /**\n * Remove a SubstituentLinkage for the Glycan.\n * @param {SubstituentLinkage} childNode The substituentLinkage to be removed\n * @returns {Graph} Updated graph\n */\n removeSubstituentLinkage(linkage){\n if(linkage instanceof SubstituentLinkage){\n try{\n var updatedGraph = this.removeLinkageById(linkage.id);\n return updatedGraph;\n } catch (err){\n throw 'Error removing Substituent: '+ err;\n }\n } else {\n throw 'This method can remove only substituent from the Glycan';\n }\n }\n\n /**\n * This method reads an object and adds a structure.\n * Please use id root for the root node!\n * Here is an example:\n *\n * var myGlycan = new Glycan();\n * myGlycan.addStructure({\n * nodes: [\n * {\n * id: 'root',\n * nodeType: 'Monosaccharide',\n * monosaccharideType: ''\n * anomericity: '',\n * isomer: '',\n * ringType: ''\n * },\n * {\n * id: 'n1',\n * nodeType: 'Monosaccharide',\n * monosaccharideType: ''\n * anomericity: '',\n * isomer: '',\n * ringType: ''\n * }\n * ],\n * edges: [\n * {\n * id: 'e0',\n * source: 'root',\n * target: 'n1',\n * donorPosition: '',\n * acceptorPosition: '',\n * linkageType:\n * }\n * ]\n * });\n *\n * @param {object} g The graph object.\n * @return {object} The graph instance.\n */\n addStructure(structure){\n var i,\n a,\n l;\n\n a = g.nodes || [];\n for (i = 0, l = a.length; i < l; i++)\n this.addNode(a[i]);\n\n a = g.edges || [];\n for (i = 0, l = a.length; i < l; i++)\n this.addEdge(a[i]);\n\n return this;\n }\n\n\n /**\n * The actual size of the Glycan in terms of nodes.\n * Each monosaccharide and substituent count as 1\n * @returns {number} The size of the Glycan\n */\n size(){\n return this.graph.nodes().length;\n }\n\n /**\n * Clear the Glycan object and set Root to undefined.\n * Only the Id remains set (Id is immutable).\n */\n clear(){\n this.rootSet = false;\n this.rootNode = undefined;\n this.graph.clear();\n }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/Glycan.js","/**\n * Created by Renaud on 17/07/2017.\n */\n\n\nimport DonorPosition from \"./dictionary/DonorPosition\";\nimport AcceptorPosition from \"./dictionary/AcceptorPosition\";\n\nexport default class RepeatingUnit {\n constructor(id,nodes,min,max,entry,exit,donorPosition,acceptorPosition)\n {\n this.id = id;\n this.nodes = nodes;\n\n if (min === \"?\") {\n this.min = min;\n } else {\n this.min = parseInt(min);\n }\n\n if (max === \"?\") {\n this.max = max;\n } else {\n this.max = parseInt(max);\n }\n\n if (donorPosition === \"?\") {\n this.donorPosition = DonorPosition.UNDEFINED;\n } else {\n this.donorPosition = donorPosition;\n }\n\n if (acceptorPosition === \"?\") {\n this.acceptorPosition = AcceptorPosition.UNDEFINED;\n } else {\n this.acceptorPosition = acceptorPosition;\n }\n }\n\n\n\n}\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/RepeatingUnit.js","/**\n * Author: Davide Alocci\n * Version: 0.0.1\n */\n\nimport Glycan from '../../glycomics/Glycan';\nimport Anomericity from '../../glycomics/dictionary/Anomericity';\nimport MonosaccharideType from \"../../../views/glycomics/dictionary/MonosaccharideType\";\nimport Isomer from \"../../glycomics/dictionary/Isomer\";\nimport RingType from \"../../glycomics/dictionary/RingType\";\nimport SubstituentType from \"../../glycomics/dictionary/SubstituentType\";\nimport Monosaccharide from \"../../glycomics/nodes/Monosaccharide\";\nimport AcceptorPosition from \"../../glycomics/dictionary/AcceptorPosition\";\nimport DonorPosition from \"../../glycomics/dictionary/DonorPosition\";\nimport Substituent from \"../../glycomics/nodes/Substituent\";\nimport SubstituentLinkage from \"../../glycomics/linkages/SubstituentLinkage\";\nimport GlycoCTSubstituents from \"./SubstituentsGlycoCT\";\nimport MonosaccharideGlycoCT from \"./MonosaccharideGlycoCT\";\nimport SubstituentsPositions from \"./SubstituentsPositions\";\nimport RepeatingUnit from \"../../glycomics/RepeatingUnit\";\n\nexport default class GlycoCTParser{\n\n constructor(formula){\n this.formula = formula;\n }\n\n // Used to generate unique IDs\n randomString(length) {\n // Possible chars in the generated string\n var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghiklmnopqrstuvwxyz'.split('');\n\n if (! length) { // If no length specified, get a random length\n length = Math.floor(Math.random() * chars.length);\n }\n\n var str = '';\n for (var i = 0; i < length; i++) { // Add random chars till length is the one specified\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n }\n\n /**\n * Gets SubstituentType from name\n * @param name\n */\n getSub(name)\n {\n for (var sub of SubstituentType)\n {\n if (sub.name === name)\n return sub;\n }\n }\n\n /**\n * Get MonosaccharideType from name\n * @param name\n */\n getMono(name)\n {\n switch (name)\n {\n case \"KdnNAc\":\n return MonosaccharideType.Neu5Ac;\n case \"KdnNGc\":\n return MonosaccharideType.Neu5Gc;\n case \"KdnN\":\n return MonosaccharideType.Neu;\n }\n for (var mono of MonosaccharideType)\n {\n if (mono.name === name)\n return mono;\n }\n }\n\n /**\n * Gets MonosaccharideGlycoCT from stemType (e.g glc-HEX) and transform\n * @param stemType\n * @param transform\n * @returns {*}\n */\n getMonoType(stemType, transform)\n {\n for (var mono of MonosaccharideGlycoCT)\n {\n if (mono.glycoct === stemType && mono.transform === transform)\n {\n return mono;\n }\n }\n return undefined;\n }\n\n /**\n * Adds one residue to the glycan\n * @param residue e.g : [\"3b\",\"glc-HEX-1\",\"5\"]\n * @param donorPosition\n * @param acceptorPosition\n * @param repeatingUnit : String\n * @returns {*}\n */\n createResidue(residue, donorPosition, acceptorPosition, repeatingUnit)\n {\n // If we generate a Monosaccharide\n if (residue[0].substring(residue[0].length-1) === \"b\") {\n\n // Parse anomericity\n var anomericity;\n for (var anom of Anomericity)\n {\n if (residue[1].substring(0, 1) === \"a\")\n {\n anomericity = Anomericity.ALPHA;\n }\n else if (residue[1].substring(0, 1) === \"b\")\n {\n anomericity = Anomericity.BETA;\n }\n else\n {\n anomericity = Anomericity.UNDEFINED;\n }\n }\n var dashSplit = residue[1].split(\"-\");\n var stemType = dashSplit[1]; // Also contains isomer as the first char\n\n // Parse Isomer\n var isomer;\n for (var isom of Isomer)\n {\n if (stemType.substring(0, 1) === \"x\")\n {\n isomer = Isomer.UNDEFINED;\n }\n if (stemType.substring(0, 1) === isom.name.toLowerCase())\n {\n isomer = isom;\n }\n }\n\n\n var glycoct = residue[1].substring(3,residue[1].length-2);\n /* As we split on \":\", the first part of the first transformation is stuck with the second part of ring type.\n e.g: 1b:b-dman-HEX-1:5|6:a\n -> residue = [\"1b\",\"b-dman-HEX-1\",\"5|6\",\"a\"]\n */\n var firstTransform = residue[2].split(\"|\"); // Contains ringType and first part of first transformation\n var transform = \"\";\n if (firstTransform.length > 1) // at least one transformation\n {\n // We rebuild the whole transformation\n transform = \"|\" + firstTransform[1];\n for (var k = 3; k < residue.length; k++)\n {\n transform += \":\"+residue[k];\n }\n }\n\n // Fetch the Monosaccharide type in the database considering the given glycoct + transform combination\n // First we try the whole name\n var monoType = this.getMonoType(glycoct, transform);\n if (monoType === undefined)\n {\n // Second, we check if the monosaccharide is among the simple HEX cases (e.g: 1b:b-HEX-1:4 -> they have no stemType, just the superclass HEX)\n glycoct = residue[1].substring(2,residue[1].length-2);\n monoType = this.getMonoType(glycoct, transform);\n if (monoType === undefined)\n {\n // Third, we check if the monosaccharide is among the exceptions for the ring type (Kdn for example include ringType in their formula: 1b:b-lgro-dgal-NON-2:6)\n glycoct = residue[1].substring(3) + \":\" + firstTransform[0];\n monoType = this.getMonoType(glycoct, transform);\n if (monoType === undefined)\n {\n // Finally, the monosaccharide is not known\n monoType = MonosaccharideGlycoCT.Unknown;\n }\n }\n }\n monoType = MonosaccharideType[monoType.name];\n\n // Then we parse the ringType\n var ringStop = residue[2].substring(0, 1);\n var ringType;\n if (ringStop === \"4\")\n {\n ringType = RingType.F;\n }\n else if (ringStop === \"5\")\n {\n ringType = RingType.P;\n }\n else\n {\n ringType = RingType.UNDEFINED;\n }\n\n var nodeId = this.randomString(7);\n // Creating the monosaccharide object\n var node = new Monosaccharide(nodeId,monoType, anomericity, isomer, ringType);\n // Assign to repeatingUnit if the node is in one\n if (repeatingUnit !== undefined)\n {\n node.repeatingUnit = repeatingUnit;\n }\n // If donorPosition and acceptorPosition are \"r\", we are building the root\n if (donorPosition === \"r\" && acceptorPosition === \"r\")\n {\n this.glycan = new Glycan(\"Glycan\", node);\n }\n else\n {\n // Parse the AcceptorPosition\n var ac;\n for (var anomC of AcceptorPosition)\n {\n if (acceptorPosition === \"?\")\n {\n ac = AcceptorPosition.UNDEFINED;\n }\n if (parseInt(acceptorPosition) === anomC.value)\n {\n ac = anomC;\n }\n }\n // Parse the DonorPosition\n var lc;\n for (var linkedC of DonorPosition)\n {\n if (donorPosition === \"?\")\n {\n lc = DonorPosition.UNDEFINED;\n }\n if (parseInt(donorPosition) === linkedC.value)\n {\n lc = linkedC;\n }\n }\n this.glycan.addMonosaccharideWithLinkage(this.clickedNode, node, ac, lc);\n }\n // Return the nodeId so we can access the node once it's been created\n return nodeId;\n }\n else if (residue[0].substring(residue[0].length-1) === \"s\") { // We're creating a substituent\n // Parse the sub name\n var subName = residue[1];\n var substituentType;\n for (var sub of GlycoCTSubstituents) {\n if (subName === sub.glycoct) {\n subName = sub.name;\n }\n }\n for (var subType of SubstituentType) {\n if (subName.toLowerCase() === subType.name.toLowerCase()) {\n substituentType = subType;\n }\n }\n\n // Parse sub's donorPosition\n var lcs;\n for (var linkedCS of DonorPosition)\n {\n if (donorPosition === \"?\")\n {\n lcs = DonorPosition.UNDEFINED;\n }\n if (parseInt(donorPosition) === linkedCS.value)\n {\n lcs = linkedCS;\n }\n }\n var subId = this.randomString(7); // If the Mono-Sub combination has a predefined code, change the monosaccharide\n // Create substituent Object\n var substituent = new Substituent(subId,substituentType);\n // Check if when we add the sub at this particular position we get a new parent monosaccharide type\n // e.g Gal + NAc(donorPosition=2) => GalNAc\n var newType = this.getMono(this.clickedNode.monosaccharideType.name + this.getSub(subName).label);\n if (newType && SubstituentsPositions[newType.name].position == donorPosition) {\n this.updateNodeType(this.clickedNode, newType);\n }\n else\n {\n var subLinkage = new SubstituentLinkage(this.randomString(7), this.clickedNode, substituent, lcs);\n this.glycan.addSubstituent(substituent, subLinkage);\n }\n }\n }\n\n /**\n * Find a node in the glycan, and change its type\n * @param node\n * @param type\n */\n updateNodeType(node, type)\n {\n for (var glycanNode of this.glycan.graph.nodes())\n {\n if (node === glycanNode)\n {\n glycanNode.monosaccharideType = type;\n }\n }\n }\n\n /**\n * Main function of the class, used to parse the formula\n * @returns {*}\n */\n parseGlycoCT() {\n if (this.formula === \"\") {\n return new Glycan(\"Glycan\");\n }\n // Get the text lines under the RES section\n var res = this.getSection(\"RES\",this.formula);\n var links;\n if (! this.formula.split(\"LIN\")[1]) // If the formula is only one node (no link)\n {\n if (!res[0]) // wrong formula\n {\n return new Glycan(\"Glycan\");\n }\n // Create the root (DonorPosition and AcceptorPosition of root are unknwown from GlycoCT formula)\n this.createResidue(res[0].split(\":\"), \"r\", \"r\");\n return this.glycan;\n }\n else\n {\n // Get the text lines under the LIN section\n links = this.getSection(\"LIN\",this.formula);\n }\n // Get the rep section\n var repSection = this.getSection(\"REP\",this.formula);\n // Get each rep from the rep section\n var reps = this.getRepeatingUnit(repSection);\n\n // This will contain the id of the created nodes\n var nodesIds = {};\n\n // This will contain the RepeatingUnit objects, and the nodes that are in it [[RepObject,[nodes...]],...]\n var repInfo = [];\n\n // If there are some Repeating Units in the formula\n if (reps.length != 0)\n {\n // Use the function to insert the residues and links lines from the REPS to the main RES section\n // so that we get rid of the REP section and finally have only RES and LIN sections, with mixed up indices (doesn't matter)\n var merge = this.mergeRep(reps, res, links);\n res = merge[0];\n links = merge[1];\n repInfo = merge[2];\n }\n\n // We finally call the function that reads through the lines and calls the function to create nodes\n this.generateNodes(links,nodesIds,res, repInfo);\n\n return this.glycan;\n }\n\n /**\n * Function that inserts the residues and links from the REPs sections into the main RES and LIN sections\n * Outputs an array of 3 arrays: the new RES section, the new LIN section, repInfo which contains the RepeatingUnit objects and which nodes belongs to them\n * @param reps\n * @param res\n * @param links\n * @returns {[*,*,*]}\n */\n mergeRep(reps,res,links) {\n var repeatingUnitsObjects = []; // Contains all the instanciated Rep objects\n var repeatingUnit;\n var repInfo = {}; // Shows which node is associated to which Rep\n\n // First merge the RES\n var finalRes = [];\n var repUnitRead = 0;\n var repUnitIndices = {};\n for (var i in res)\n {\n if (res[i].split(\":\")[0].indexOf(\"r\") == -1) // Not a repeating unit\n {\n finalRes.push(res[i]);\n }\n else\n {\n repUnitIndices[parseInt(i)+1] = reps[repUnitRead];\n finalRes = finalRes.concat(reps[repUnitRead].res);\n repUnitRead++;\n }\n }\n\n // Then links\n var finalLinks = [];\n repUnitRead = 0;\n var allLinks = [];\n // STEP 1: Insert all the links\n for (i in links)\n {\n allLinks.push(links[i]);\n finalLinks.push(links[i]);\n if (this.isTargetARep(links[i], repUnitIndices)) // target node is a repeating unit\n {\n finalLinks = finalLinks.concat(reps[repUnitRead].lin);\n repUnitRead++;\n }\n }\n\n\n\n // STEP 2: Update the links:\n // If the target of a link is a repeating unit, change to the first residue of the unit (entering the unit)\n // If the source is a repeating unit, change to the ending residue (leaving the unit)\n var repeatingUnitObject;\n var createdUnits = [];\n var repNodesIds;\n for (i in finalLinks)\n {\n if (this.isTargetARep(finalLinks[i],repUnitIndices)) // If target is Rep, replace its index by its entry Node\n {\n if (!createdUnits.includes(this.getLinkTarget(finalLinks[i]))) {\n createdUnits.push(this.getLinkTarget(finalLinks[i]));\n repeatingUnit = repUnitIndices[this.getLinkTarget(finalLinks[i])];\n repeatingUnitObject = new RepeatingUnit(this.randomString(7),[],repeatingUnit.info.min, repeatingUnit.info.max, repeatingUnit.info.entry,\n repeatingUnit.info.exit, repeatingUnit.info.donorPosition, repeatingUnit.info.acceptorPosition);\n repNodesIds = this.getRepNodesIds(repeatingUnit.res);\n repeatingUnitsObjects.push([repeatingUnitObject,repNodesIds]);\n }\n finalLinks[i] = this.updateLinkTarget(finalLinks[i],repUnitIndices[this.getLinkTarget(finalLinks[i])].info.entry);\n }\n if (this.isSourceARep(finalLinks[i],repUnitIndices)) // If target is Rep, replace its index by its entry Node\n {\n if (!createdUnits.includes(this.getLinkSource(finalLinks[i])))\n {\n createdUnits.push(this.getLinkSource(finalLinks[i]));\n repeatingUnit = repUnitIndices[this.getLinkSource(finalLinks[i])];\n repeatingUnitObject = new RepeatingUnit(this.randomString(7),[],repeatingUnit.info.min, repeatingUnit.info.max, repeatingUnit.info.entry,\n repeatingUnit.info.exit, repeatingUnit.info.donorPosition, repeatingUnit.info.acceptorPosition);\n repNodesIds = this.getRepNodesIds(repeatingUnit.res);\n repeatingUnitsObjects.push([repeatingUnitObject,repNodesIds]);\n }\n finalLinks[i] = this.updateLinkSource(finalLinks[i],repUnitIndices[this.getLinkSource(finalLinks[i])].info.exit);\n }\n }\n\n return [finalRes, finalLinks, repeatingUnitsObjects];\n\n }\n\n /**\n * Get the index of all the nodes within an array of residues. Used to get the nodes in a specific rep\n * @param res\n * @returns {Array}\n */\n getRepNodesIds(res)\n {\n var output = [];\n for (var r of res)\n {\n output.push(r.split(/\\w:/)[0]);\n }\n return output;\n }\n\n\n getLinkSource(link)\n {\n return link.split(/[on]/)[0].split(\":\")[1];\n }\n\n getLinkTarget(link)\n {\n return link.split(\")\")[1].split(/[dn]/)[0];\n }\n\n updateLinkTarget(link, target)\n {\n var output = link.split(\")\")[0] + \")\" + target + \"d\";\n return output;\n }\n\n updateLinkSource(link, source)\n {\n var output = link.split(\":\")[0] + \":\" + source + \"o\" + link.split(/[on]/)[1];\n return output;\n }\n\n // Checks if the target of the link is a repeating unit in the main RES section\n isTargetARep(link, repUnitIndices)\n {\n var target = link.split(\")\")[1].split(/[dn]/)[0];\n if (repUnitIndices[target])\n return true;\n return false;\n }\n\n // Checks if the source of the link is a repeating unit in the main RES section\n isSourceARep(link, repUnitIndices)\n {\n var source = link.split(/[on]/)[0].split(\":\")[1];\n if (repUnitIndices[source])\n return true;\n return false;\n }\n\n // Get a node's RepeatingUnit object\n findMatchingRep(sourceId, repInfo)\n {\n for (var pair of repInfo)\n {\n if (pair[1].includes(\"\"+sourceId))\n {\n return pair[0];\n }\n }\n return undefined;\n }\n\n /**\n * Reads through all the lines\n * @param links\n * @param nodesIds\n * @param res\n * @param repInfo\n */\n generateNodes(links,nodesIds,res,repInfo)\n {\n var repeatingUnit;\n var residueListById = {};\n\n // Fill in the residueListById array\n for (var residue of res)\n {\n residueListById[residue.split(/\\w:/)[0]] = (residue.split(\":\"));\n }\n // Now we read the links to build the whole glycan\n for (var linkId in links) {\n if (links[linkId] !== \"\") { // If the link is not empty\n var link = links[linkId];\n var sourceId = parseInt(link.split(\":\")[1].split(\"(\")[0]);\n var nodeId;\n if (residueListById[sourceId] !== \"\") // The source node hasn't been created, so this is the root\n {\n repeatingUnit = this.findMatchingRep(sourceId, repInfo);\n nodeId = this.createResidue(residueListById[sourceId], \"r\", \"r\", repeatingUnit);\n residueListById[sourceId] = \"\";\n nodesIds[sourceId] = nodeId;\n }\n // Then we create the target node of the link\n var targetId = parseInt(link.split(\")\")[1]);\n var linkages = link.split(/[\\(\\)]+/)[1];\n var donorPosition, acceptorPosition;\n donorPosition = linkages.split(\"+\")[0] === \"-1\" ? \"?\" : linkages.split(\"+\")[0];\n acceptorPosition = linkages.split(\"+\")[1] === \"-1\" ? \"?\" : linkages.split(\"+\")[1];\n for (var node of this.glycan.graph.nodes()) { // clickedNode = sourceNode\n if (node.id === nodesIds[sourceId]) {\n this.clickedNode = node;\n }\n }\n repeatingUnit = this.findMatchingRep(targetId, repInfo);\n nodeId = this.createResidue(residueListById[targetId],donorPosition, acceptorPosition, repeatingUnit);\n residueListById[targetId] = \"\";\n nodesIds[targetId] = nodeId;\n }\n }\n }\n\n findNodeById(id)\n {\n for (var node of this.glycan.graph.nodes())\n {\n if (node.id == id)\n {\n return node;\n }\n }\n return undefined;\n }\n\n /**\n * Returns an array of lines that correspond to the entire requested section (RES, LIN, REP...)\n * @param section\n * @param formula\n * @returns {Array}\n */\n getSection(section,formula) {\n const sections = [\"RES\",\"LIN\",\"REP\",\"UND\",\"ALT\"];\n sections.splice(sections.indexOf(section),1);\n if (section === \"REP\")\n {\n sections.splice(0,2); // Remove RES and LIN because in REP we want to keep them\n }\n var formulaArray;\n if (!(formula instanceof Array))\n {\n formulaArray = formula.split(\"\\n\");\n }\n else\n {\n formulaArray = formula;\n }\n var output = [];\n var flag = false;\n for (var line of formulaArray)\n {\n if (flag && sections.includes(line)) // If other section encountered\n {\n return output;\n }\n if (line === section) // If the right section is encountered...\n {\n if (flag) // Second section word encountered\n {\n return output;\n }\n else // .. Only once\n {\n flag = true;\n }\n }\n else\n {\n if (flag)\n {\n output.push(line);\n }\n }\n }\n return output;\n }\n\n\n /**\n * Returns all the infos that we can read from the REP section for every RepeatingUnit\n * Output : [{\"info\", \"res\", \"lin\"},...]\n * \"info\": {\"donorPosition\", \"acceptorPosition\", \"min\", \"max\", \"exit\", \"entry\"}\n * @param array\n * @returns {Array}\n */\n getRepeatingUnit(array)\n {\n var info, min, max;\n var output = [], value = [], key = \"\";\n for (var line of array)\n {\n var split = line.split(/REP\\d+:/);\n if (split[1])\n {\n if (value.length != 0 && key !== \"\")\n {\n min = key.split(\"=\")[1].substring(0,2) == \"-1\" ? \"?\" : key.split(\"=\")[1].split(\"-\")[0];\n max = key.substring(key.length-2) == \"-1\" ? \"?\" : key.split(\"-\")[key.split(\"-\").length-1];\n info = {\"donorPosition\": key.split(\"(\")[1].split(\"+\")[0], \"acceptorPosition\": key.split(\")\")[0].split(\"+\")[1],\n \"min\": min, \"max\": max,\n \"exit\":key.split(\"o\")[0], \"entry\":key.split(\")\")[1].split(\"d\")[0]};\n output.push({\"info\":info,\"res\":this.getSection(\"RES\",value),\"lin\":this.getSection(\"LIN\",value)});\n }\n value = [];\n key = split[1];\n }\n else\n {\n value.push(line);\n }\n }\n if (value.length !== 0)\n {\n min = key.split(\"=\")[1].substring(0,2) == \"-1\" ? \"?\" : key.split(\"=\")[1].split(\"-\")[0];\n max = key.substring(key.length-2) == \"-1\" ? \"?\" : key.split(\"-\")[key.split(\"-\").length-1];\n info = {\"donorPosition\": key.split(\"(\")[1].split(\"+\")[0], \"acceptorPosition\": key.split(\")\")[0].split(\"+\")[1],\n \"min\": min, \"max\": max,\n \"exit\":key.split(\"o\")[0], \"entry\":key.split(\")\")[1].split(\"d\")[0]};\n output.push({\"info\":info,\"res\":this.getSection(\"RES\",value),\"lin\":this.getSection(\"LIN\",value)});\n }\n return output;\n }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/io/glycoCT/GlycoCTParser.js","/**\n * Created by Renaud on 05/07/2017.\n */\n\nimport Substituent from \"../../glycomics/nodes/Substituent\";\nimport SubstituentType from \"../../glycomics/dictionary/SubstituentType\";\nimport GlycosidicLinkage from \"../../glycomics/linkages/GlycosidicLinkage\";\nimport GlycoCTSubstituents from \"./SubstituentsGlycoCT\";\nimport MonosaccharideType from \"../../../views/glycomics/dictionary/MonosaccharideType\";\nimport EdgeComparator from \"../EdgeComparator\";\nimport RepeatingUnit from \"../../glycomics/RepeatingUnit\";\nimport MonosaccharideGlycoCT from \"./MonosaccharideGlycoCT\";\nimport SubstituentLinkage from \"../../glycomics/linkages/SubstituentLinkage\";\nimport SubstituentsPositions from \"./SubstituentsPositions\";\nimport DonorPosition from \"../../glycomics/dictionary/DonorPosition\";\n\nexport default class GlycoCTWriter{\n\n constructor(glycan,tree){\n this.glycan = glycan;\n this.tree = tree;\n this.res = [];\n this.rep = [];\n this.edges = [];\n }\n\n randomString(length) {\n // Possible chars in the generated string\n var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghiklmnopqrstuvwxyz'.split('');\n\n if (! length) { // If no length specified, get a random length\n length = Math.floor(Math.random() * chars.length);\n }\n\n var str = '';\n for (var i = 0; i < length; i++) { // Add random chars till length is the one specified\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n }\n\n // Get SubstituentType\n getSub(label)\n {\n if (label === \"Gc\")\n {\n return SubstituentType.NGlycolyl;\n }\n for (var sub of SubstituentType)\n {\n if (sub.label.toLowerCase() === label.toLowerCase())\n return sub;\n }\n return undefined;\n }\n\n // Get MonosaccharideType\n getMono(name)\n {\n for (var mono of MonosaccharideType)\n {\n if (mono.name.toLowerCase() === name.toLowerCase())\n return mono;\n }\n }\n\n // Add a Substituent residue line to the formula\n writeSub(i, substituent)\n {\n var formula = \"\";\n // Substituents start with index + \"s\"\n formula += i+1 + \"s:\";\n var subName = substituent.substituentType.name;\n var substituentType = \"\";\n for (var sub of GlycoCTSubstituents) {\n if (subName.toLowerCase() === sub.name.toLowerCase()) {\n substituentType = sub.glycoct;\n }\n }\n if (substituentType === \"\")\n {\n for (sub of SubstituentType) {\n if (subName.toLowerCase() === sub.name.toLowerCase()) {\n substituentType = sub.name.toLowerCase();\n }\n }\n }\n formula += substituentType + \"\\n\";\n return formula;\n }\n\n // Add a substituent link to the formula\n writeSubLink(i,source, target, donorPosition, acceptorPosition)\n {\n var formula = \"\";\n // Substituent links start with index, and \"d\"\n formula += i+1 + \":\" + source + \"d\";\n\n formula += \"(\" + donorPosition;\n formula += \"+\";\n formula += acceptorPosition + \")\";\n\n // They end with \"n\"\n formula += target + \"n\";\n\n formula += \"\\n\";\n\n return formula;\n }\n\n // Add a Monosaccharide link to the formula\n writeMonoLink(i, source, target, donorPosition, acceptorPosition, prefix = \"o\", suffix = \"d\")\n {\n var formula = \"\";\n // Monosaccharide links start by either \"n\" if the source node is ending a Repeating Unit, or \"o\" otherwise\n formula += i + \":\" + source + prefix;\n\n formula += \"(\" + donorPosition;\n formula += \"+\";\n formula += acceptorPosition + \")\";\n\n // They end with \"n\" if the target node starts a Repeating Unit, \"d\" otherwise\n formula += target + suffix;\n\n formula += \"\\n\";\n\n return formula;\n }\n\n\n // Compares 2 nodes a and b using the EdgeComparator first, then the NodeComparator if we can't decide\n comparatorFunction(a,b) {\n if (b === undefined)\n {\n return -1;\n }\n var comp = new EdgeComparator();\n var edge1 = this.getLink(a.parent.node.id,a.node.id);\n var edge2 = this.getLink(b.parent.node.id, b.node.id);\n return comp.compare(edge1,edge2);\n }\n\n // Basic sorting algorithm to sort a node's children to get the right order for the GlycoCT\n sort(arr) {\n\n var arr2 = Object.assign({},arr);\n var len = arr.length;\n\n for (var i = 0; i < len; i++) {\n while (i > -1) {\n if (this.comparatorFunction(arr[i],arr[i + 1]) > 0) {\n var temp = arr[i];\n arr[i] = arr[i + 1];\n arr[i + 1] = temp;\n i--;\n } else {\n break;\n }\n }\n }\n return arr;\n }\n\n // Get a link between two nodes whose ids are given\n getLink(id1, id2)\n {\n for (var edge of this.glycan.graph.edges())\n {\n if ((edge.source == id1 && edge.target == id2) || (edge.source == id2 && edge.target == id1))\n {\n return edge;\n }\n }\n }\n\n /**\n * Puts all the info we need in the arrays res, edges and rep\n * This function is used for the main RES, but also for the RES inside a REP so we have this \"unit\" var to keep track of this\n * @param root\n * @param unit: id of the repeating unit if we're writing lines within a rep\n */\n generateArrays(root, unit = \"\")\n {\n this.res = [];\n this.edges = [];\n if (root === undefined)\n {\n this.res = [];\n this.edges = [];\n this.rep = [];\n return;\n }\n var stack = [];\n stack.push(root);\n if (root.node !== undefined)\n {\n // We go through the tree\n while (stack.length > 0)\n {\n var node = stack.pop();\n var nodeUnit = node.node.repeatingUnit;\n // if (we're not writing for a REP && current node is in no REP) || (we're writing for a REP && the current's node's repeating unit is the unit we're writing for)\n if (unit === \"\" && nodeUnit === undefined || unit !== \"\" && (nodeUnit !== undefined && nodeUnit.id === unit))\n {\n this.res.push(node);\n if (this.res.length > 1) // if we have at least 2 nodes : add link\n {\n this.edges.push(this.getLink(node.parent.node.id,node.node.id));\n }\n }\n else\n {\n if (unit === \"\") // we're not writing for a unit\n {\n if (node.parent !== undefined && node.parent.node.repeatingUnit !== nodeUnit) // If child is the first of the repeating unit\n {\n this.edges.push(this.getLink(node.parent.node.id,node.node.id));\n }\n else if (nodeUnit !== undefined)\n {\n if (node.children !== undefined)\n {\n // We go through the children, if they are also part of the unit we add the link\n for (var rootChild of node.children)\n {\n if (rootChild.node.repeatingUnit !== nodeUnit)\n {\n this.edges.push(this.getLink(rootChild.node.id,node.node.id));\n }\n }\n }\n }\n // we add the res to the residue list\n if (!this.res.includes(nodeUnit))\n {\n this.res.push(nodeUnit);\n }\n }\n\n }\n\n // Finally we add the children to the stack, in the right order\n var children = node.children;\n if (children !== undefined)\n {\n if (children.length > 1)\n {\n children = this.sort(children);\n }\n for (var child of children) {\n stack.push(child);\n }\n }\n }\n }\n else\n {\n this.res = [];\n }\n }\n\n /**\n * This function writes a RES section (main or in a REP) by reading in the arrays prepared by generateArrays()\n * @param resId\n * @param repId\n * @param res\n * @param associatedSubs: e.g: GalNAc -> Gal + associatedSub (NAc)\n * @param repNumber: number of the current REP (REP1, REP2...)\n * @param offset: when we call it several times, the residues' indices don't start from 0\n * @returns {[*,*]}\n */\n generateRES(resId, repId, res, associatedSubs, repNumber, offset = 0) { // Offset: if we have some Repeating Units, we generate the RES section within the REP\n // with this function, but the offset will create a continuity with the previous indexes\n var formula = \"RES\\n\";\n var i;\n // For every residue (whether it's a sub, mono, or rep)\n for (i = 0; i < res.length; i++)\n {\n if (res[i] instanceof RepeatingUnit) // If the residue is a REP\n {\n formula += i+1+offset + \"r:r\" + repNumber;\n resId[res[i].id] = i+1+offset;\n repId[res[i].id] = repNumber;\n repNumber++;\n formula += \"\\n\";\n }\n else if (res[i].node instanceof Substituent) // If the residue is a sub\n {\n formula += this.writeSub(i+offset,res[i].node);\n resId[res[i].node.id] = i+1+offset;\n }\n else // If the residue is a Monosaccharide\n {\n resId[res[i].node.id] = i+1+offset;\n formula += i+1+offset + \"b:\";\n switch(res[i].node._anomericity.name) {\n case \"ALPHA\":\n formula += \"a\";\n break;\n case \"BETA\":\n formula += \"b\";\n break;\n default:\n formula += \"x\";\n break;\n }\n formula += \"-\";\n\n var resName = res[i].node._monosaccharideType.name;\n\n // In this function, we'll rename weird Monosaccharides names so we can recognize them more easily.\n // E.g: Neu5Ac => KdnNAc so we can recognize Kdn and NAc\n // Nonulosonates exceptions:\n switch (resName)\n {\n case \"Neu5Ac\":\n resName = \"KdnNAc\";\n break;\n case \"Neu5Gc\":\n resName = \"KdnGc\";\n break;\n case \"Neu\":\n resName = \"KdnN\";\n break;\n case \"MurNGc\":\n resName = \"MurGc\";\n break;\n }\n\n var transform;\n\n // These types either don't need a specified isomericity or already bear it by default in their glycoct in the database\n const isoExceptions = [\"Hex\",\"dHex\",\"HexA\",\"HexN\",\"ddHex\",\"HexNAc\",\"dHexNAc\",\"Pen\",\"Oli\",\"Abe\",\"Col\",\"Nonu\",\"LDManHep\",\"DDManHep\"];\n\n if (!isoExceptions.includes(resName)) // Exceptions\n {\n switch(res[i].node._isomer.name) {\n case \"L\":\n formula += \"l\";\n break;\n case \"D\":\n formula += \"d\";\n break;\n default:\n formula += \"x\";\n break;\n }\n }\n\n if (MonosaccharideGlycoCT[resName] !== undefined) // if the residue has a defined name\n {\n formula += MonosaccharideGlycoCT[resName].glycoct;\n transform = MonosaccharideGlycoCT[resName].transform;\n }\n else // It can be that the residue is a Mono+Sub (GalNAc...)\n {\n var monoName, subName, assocSubType, assocSub, donorPosition;\n if (MonosaccharideGlycoCT[resName.substring(0,3)] !== undefined) // If the 3 first letters make a monosaccharide\n {\n // We get the raw monosaccharide type, and we put the substituent in an array to be treated later\n monoName = resName.substring(0,3);\n subName = resName.substring(3);\n formula += MonosaccharideGlycoCT[monoName].glycoct;\n transform = MonosaccharideGlycoCT[monoName].transform;\n assocSubType = this.getSub(subName);\n assocSub = new Substituent(this.randomString(7),assocSubType);\n if (SubstituentsPositions[resName] !== undefined) // Should always be defined\n {\n donorPosition = SubstituentsPositions[resName].position;\n }\n associatedSubs.push([assocSub,i+1+offset,donorPosition]);\n }\n else if (MonosaccharideGlycoCT[resName.substring(0,4)] !== undefined) // If the 4 first letters make a monosaccharide. e.g Nonu\n {\n // See above\n monoName = resName.substring(0,4);\n subName = resName.substring(4);\n formula += MonosaccharideGlycoCT[monoName].glycoct;\n transform = MonosaccharideGlycoCT[monoName].transform;\n assocSubType = this.getSub(subName);\n assocSub = new Substituent(this.randomString(7),assocSubType);\n if (SubstituentsPositions[resName] !== undefined) // Should always be defined\n {\n donorPosition = SubstituentsPositions[resName].position;\n }\n associatedSubs.push([assocSub,i+1+offset, donorPosition]);\n }\n }\n\n\n // These exceptions already bear their ringType in their glycoct\n const ringExceptions = [\"Kdn\", \"KdnNAc\", \"KdnGc\", \"KdnN\", \"Kdo\", \"Fru\"];\n if (!ringExceptions.includes(resName)) // Ring exceptions\n {\n formula += \"-\";\n switch (res[i].node._ringType.name) {\n case \"P\":\n formula += \"1:5\";\n break;\n case \"F\":\n formula += \"1:4\";\n break;\n default:\n formula += \"x:x\";\n break;\n }\n }\n\n formula += transform;\n\n\n formula += \"\\n\";\n }\n\n }\n // Finally we treat the associatedSubs\n for (var pair of associatedSubs)\n {\n var associatedSub = pair[0];\n formula += this.writeSub(i+offset, associatedSub);\n i++;\n pair[0] = i;\n }\n\n return [i+offset,formula];\n }\n\n /**\n * This function writes a LIN section (main or in a REP) by reading in the arrays prepared by generateArrays()\n * @param resId\n * @param associatedSubs: e.g: GalNAc -> Gal + associatedSub (NAc)\n * @param offset: when we call it several times, the residues' indices don't start from 0\n * @param unit: if we are writing for a unit\n * @returns {[*,*]}\n */\n generateLIN(resId, associatedSubs, offset = 0, unit = \"\") {\n var formula = \"\";\n var i;\n if (this.res.length + associatedSubs.length > 1)\n {\n formula += \"LIN\\n\";\n var edges = this.edges;\n var prevSource = 0, prevTarget = 0;\n for (i = 0; i < edges.length; i++)\n {\n // We get the link information\n var source = (edges[i].sourceNode.repeatingUnit === undefined || unit !== \"\") ? resId[edges[i].sourceNode.getId()] : resId[edges[i].sourceNode.repeatingUnit.id];\n var donorPosition = edges[i].donorPosition.value === \"undefined\" ? -1 : edges[i].donorPosition.value;\n var acceptorPosition;\n if (edges[i] instanceof SubstituentLinkage)\n acceptorPosition = 1;\n else if (edges[i].acceptorPosition.value === \"undefined\")\n acceptorPosition = 1;\n else\n acceptorPosition = edges[i].acceptorPosition.value;\n\n\n var target = (edges[i].targetNode.repeatingUnit === undefined || unit !== \"\") ? resId[edges[i].targetNode.getId()] : resId[edges[i].targetNode.repeatingUnit.id];\n\n if (prevSource !== source || prevTarget !== target) // Cheap fix to this bug: When operating with repeating units, some links are duplicated\n {\n prevSource = source;\n prevTarget = target;\n\n if (edges[i] instanceof GlycosidicLinkage)\n {\n var prefix = \"o\";\n var suffix = \"d\";\n var sourceRep = this.findNodeInTree(this.tree,edges[i].sourceNode).node.repeatingUnit;\n var targetRep = this.findNodeInTree(this.tree,edges[i].targetNode).node.repeatingUnit;\n // Set the prefix and suffix to get the right ones according to repeating units\n if (sourceRep !== targetRep)\n {\n if (sourceRep !== undefined)\n {\n prefix = \"n\";\n }\n if (targetRep !== undefined)\n {\n suffix = \"n\";\n }\n }\n formula += this.writeMonoLink(i+1+offset, source, target, donorPosition, acceptorPosition, prefix, suffix);\n }\n else\n {\n formula += this.writeSubLink(i+offset, source, target, donorPosition, acceptorPosition);\n }\n }\n else\n {\n offset--; // The following of the cheap fix above: As the link gets duplicated, \"i\" is 1 higher than wanted, so let's decrease \"offset\"\n }\n\n }\n\n\n for (var pair of associatedSubs)\n {\n formula += this.writeSubLink(i+offset, pair[1], pair[0]+offset, pair[2], 1);\n i++;\n }\n return [i+offset, formula];\n }\n return [0, \"\"];\n }\n\n\n findNodeInTree(tree,node1)\n {\n var stack = [], node, i;\n stack.push(tree);\n\n while (stack.length > 0) {\n node = stack.pop();\n if (node.node == node1) {\n return node;\n } else if (node.children != undefined) {\n for (i = 0; i < node.children.length; i += 1) {\n stack.push(node.children[i]);\n }\n }\n }\n return null;\n }\n\n\n /**\n * Main function called from outside the class to return the final formula\n * @returns {*}\n */\n exportGlycoCT() {\n var resId = {};\n var repId = {};\n this.generateArrays(this.tree);\n var res = this.res;\n var associatedSubs = [];\n if (res.length === 0)\n {\n return \"\";\n }\n var repNumber = 1;\n\n // RES\n var resInfo = this.generateRES(resId, repId, res, associatedSubs, repNumber);\n var formula = resInfo[1];\n var lastResId = resInfo[0];\n\n // LIN\n var linInfo = this.generateLIN(resId, associatedSubs);\n formula += linInfo[1];\n var lastLinId = linInfo[0];\n\n\n // REP\n\n for (var residue of this.res)\n {\n if (residue instanceof RepeatingUnit)\n {\n this.rep.push(residue);\n }\n }\n if (this.rep.length !== 0) // if we have REPs\n {\n formula += \"REP\\n\";\n for (var rep of this.rep)\n {\n this.generateArrays(this.findRepMinDepth(rep),rep.id);\n var entryId = lastResId+1;\n associatedSubs = [];\n resInfo = this.generateRES(resId,repId,this.res,associatedSubs,repNumber,lastResId);\n lastResId = resInfo[0];\n var exitId = lastResId;\n formula += \"REP\" + repId[rep.id] + \":\" + exitId + \"o(\";\n formula += rep.donorPosition === DonorPosition.UNDEFINED ? \"-1\" : rep.donorPosition;\n formula += \"+\";\n formula += rep.acceptorPosition === AcceptorPosition.UNDEFINED ? \"-1\" : rep.acceptorPosition;\n formula += \")\" + entryId + \"d=\";\n formula += rep.min === \"?\" ? \"-1\" : rep.min;\n formula += \"-\";\n formula += rep.max === \"?\" ? \"-1\" : rep.max;\n formula += \"\\n\" + resInfo[1];\n linInfo = this.generateLIN(resId,associatedSubs,lastLinId,rep.id);\n lastLinId = linInfo[0];\n formula += linInfo[1];\n }\n }\n\n if (formula.substring(formula.length-1) == '\\n') // Remove final \\n\n {\n formula = formula.substring(0,formula.length-1);\n }\n\n return formula;\n }\n\n // Returns the node with the minimum depth in tree (aka the entry)\n findRepMinDepth(rep)\n {\n var minVal = rep.nodes[0].depth;\n var minNode = rep.nodes[0];\n for (var node of rep.nodes)\n {\n if (node.depth < minVal)\n {\n minVal = node.depth;\n minNode = node;\n }\n }\n return minNode;\n }\n\n\n}\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/io/glycoCT/GlycoCTWriter.js","/**\n * Created by Renaud on 11/07/2017.\n */\n\n/**\n * Created by Renaud on 10/07/2017.\n */\n\nimport NodeComparator from './NodeComparator';\nimport GlycosidicLinkage from \"../glycomics/linkages/GlycosidicLinkage\";\n\nexport default class EdgeComparator {\n\n constructor() {\n\n }\n\n\n compare(e1, e2)\n {\n var bondsE1 = this.bonds(e1);\n var bondsE2 = this.bonds(e2);\n if (bondsE1 > bondsE2)\n {\n return 1;\n }\n else if (bondsE1 === bondsE2) {\n var parentLinkPosE1 = this.parentLinkPos(e1);\n var parentLinkPosE2 = this.parentLinkPos(e2);\n if (parentLinkPosE1 > parentLinkPosE2)\n {\n return 1;\n }\n else if (parentLinkPosE1 === parentLinkPosE2)\n {\n var childLinkPosE1 = this.childLinkPos(e1);\n var childLinkPosE2 = this.childLinkPos(e2);\n if (childLinkPosE1 > childLinkPosE2)\n {\n return 1;\n }\n else if (childLinkPosE1 === childLinkPosE2)\n {\n var linkageTypeE1 = this.linkageType(e1);\n var linkageTypeE2 = this.linkageType(e2);\n if (linkageTypeE1 > linkageTypeE2)\n {\n return 1;\n }\n else if (linkageTypeE1 === linkageTypeE2)\n {\n return this.compareNodes(e1, e2);\n }\n }\n }\n }\n\n return -1;\n\n }\n\n parentLinkPos(edge)\n {\n return edge.donorPosition.value === \"undefined\" ? 0 : edge.donorPosition.value;\n }\n\n bonds(edge)\n {\n return 1; // always 1 bond in our application\n }\n\n childLinkPos(edge)\n {\n return edge.acceptorPosition.value === \"undefined\" ? 0 : edge.acceptorPosition.value;\n }\n\n linkageType(edge)\n {\n if (edge instanceof GlycosidicLinkage)\n {\n return 1;\n }\n else\n {\n return 0;\n }\n }\n\n compareNodes(edge1, edge2)\n {\n var comp = new NodeComparator();\n return comp.compare(edge1.targetNode,edge2.targetNode);\n }\n\n\n}\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/io/EdgeComparator.js","/**\n * Created by Renaud on 10/07/2017.\n */\n\n\nimport EdgeComparator from \"./EdgeComparator\";\nexport default class NodeComparator {\n\n constructor() {\n\n }\n\n\n compare(n1, n2)\n {\n var childrenN1 = this.children(n1);\n var childrenN2 = this.children(n2);\n if (childrenN1 > childrenN2)\n {\n return 1;\n }\n else if (childrenN1 === childrenN2) {\n var longestN1 = this.longestBranch(n1) - n1.depth;\n var longestN2 = this.longestBranch(n2) - n2.depth;\n if (longestN1 > longestN2)\n {\n return 1;\n }\n else if (longestN1 === longestN2)\n {\n var terminalsN1 = this.terminals(n1);\n var terminalsN2 = this.terminals(n2);\n if (terminalsN1 > terminalsN2)\n {\n return 1;\n }\n else if (terminalsN1 === terminalsN2)\n {\n var branchingN1 = this.branching(n1);\n var branchingN2 = this.branching(n2);\n if (branchingN1 > branchingN2)\n {\n return 1;\n }\n else if (branchingN1 === branchingN2)\n {\n if (n1.node.monosaccharideType.name >= n2.node.monosaccharideType.name)\n {\n return 1;\n }\n }\n }\n }\n }\n\n return -1;\n\n }\n\n longestBranch(node)\n {\n if (node.children === undefined)\n {\n return node.depth;\n }\n var depths = [];\n for (var child of node.children)\n {\n depths.push(this.longestBranch(child));\n }\n for (var depth of depths)\n {\n if (node.depth > depth)\n {\n return node.depth;\n }\n else\n {\n return Math.max.apply(null,depths);\n }\n }\n }\n\n children(node)\n {\n if (node.children === undefined)\n {\n return 1;\n }\n var nodes = [];\n for (var child of node.children)\n {\n nodes.push(this.children(child));\n }\n return nodes.reduce((a, b) => a + b, 0) + 1;\n }\n\n terminals(node)\n {\n if (node.children === undefined)\n {\n return 1;\n }\n var nodes = [];\n for (var child of node.children)\n {\n nodes.push(this.terminals(child));\n }\n return nodes.reduce((a, b) => a + b, 0);\n }\n\n branching(node)\n {\n if (node.children === undefined)\n {\n return 0;\n }\n var branches = [];\n for (var child of node.children)\n {\n branches.push(this.branching(child));\n }\n return (node.children.length > 1)? branches.reduce((a, b) => a + b, 0) + 1 : branches.reduce((a, b) => a + b, 0);\n }\n\n\n}\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/io/NodeComparator.js","/**\n * Created by Renaud on 18/08/2017.\n */\n\nexport default class ImageExporter {\n\n constructor() {\n\n }\n\n get_xml_svg_code(div_svg) {\n // Get the d3js SVG element\n var tmp = document.getElementById(div_svg);\n var svg = tmp.getElementsByTagName(\"svg\")[0];\n\n // Extract the data as SVG text string\n var xml = (new XMLSerializer()).serializeToString(svg);\n return xml.replace('xmlns=\"http://www.w3.org/2000/svg\"', 'xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"');\n\n }\n\n get_html_svg_code(div_svg) {\n // Get the d3js SVG element\n var tmp = document.getElementById(div_svg);\n var svg = tmp.getElementsByTagName(\"svg\")[0];\n\n // Extract the data as SVG text string\n return svg.innerHTML;\n }\n\n show_svg_code(div_svg, div_svg_code) {\n var svg_xml = get_xml_svg_code(div_svg);\n\n //Optional: prettify the XML with proper indentations\n svg_xml = vkbeautify.xml(svg_xml);\n\n // Set the content of the
 element with the XML\n//    $(\"#svg_code\").text(svg_xml);\n        $(div_svg_code).text(svg_xml);\n\n        //Optional: Use Google-Code-Prettifier to add colors.\n        //prettyPrint();\n\n    }\n\n    save() {\n\n        var html = this.get_xml_svg_code(\"viz\");\n\n        var imgsrc = 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(html)));\n\n        return imgsrc;\n    }\n\n\n    download(imgsrc) {\n\n        var image = new Image();\n        image.src = imgsrc;\n        image.onload = function () {\n\n            var link = document.createElement(\"a\");\n\n            link.addEventListener('click', function(ev) {\n                link.download = 'glycan.svg';\n                link.href = imgsrc;\n                link.id = \"link_img\";\n            }, false);\n            document.body.appendChild(link);\n\n            link.click();\n        };\n    }\n\n\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/io/ImageExporter.js"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap f9efbfae64aec5a98145","webpack:///./src/index.js","webpack:///./src/js/models/dataStructure/Graph.js","webpack:///./src/js/models/dataStructure/GraphEdge.js","webpack:///./src/js/models/dataStructure/GraphNode.js","webpack:///./src/js/models/glycomics/dictionary/AcceptorPosition.js","webpack:///./~/enumify/lib/enumify.js","webpack:///./src/js/models/glycomics/dictionary/Anomericity.js","webpack:///./src/js/models/glycomics/dictionary/Isomer.js","webpack:///./src/js/models/glycomics/dictionary/DonorPosition.js","webpack:///./src/js/views/glycomics/dictionary/MonosaccharideType.js","webpack:///./src/js/models/glycomics/dictionary/RingType.js","webpack:///./src/js/models/glycomics/dictionary/SubstituentType.js","webpack:///./src/js/models/io/glycoCT/SubstituentsGlycoCT.js","webpack:///./src/js/models/io/glycoCT/SubstituentsPositions.js","webpack:///./src/js/models/io/glycoCT/MonosaccharideGlycoCT.js","webpack:///./src/js/models/glycomics/dictionary/QuickModeMonosaccharides.js","webpack:///./src/js/models/glycomics/dictionary/Structures.js","webpack:///./src/js/models/glycomics/linkages/GlycosidicLinkage.js","webpack:///./src/js/models/glycomics/linkages/SubstituentLinkage.js","webpack:///./src/js/models/glycomics/nodes/Monosaccharide.js","webpack:///./src/js/models/glycomics/nodes/Substituent.js","webpack:///./src/js/models/glycomics/Glycan.js","webpack:///./src/js/models/glycomics/RepeatingUnit.js","webpack:///./src/js/models/io/glycoCT/GlycoCTParser.js","webpack:///./src/js/models/io/glycoCT/GlycoCTWriter.js","webpack:///./src/js/models/io/EdgeComparator.js","webpack:///./src/js/models/io/NodeComparator.js","webpack:///./src/js/models/io/ImageExporter.js"],"names":["Graph","GraphEdge","GraphNode","AcceptorPosition","Anomericity","Isomer","DonorPosition","MonosaccharideType","RingType","Monosaccharide","SubstituentType","GlycosidicLinkage","SubstituentLinkage","Substituent","Glycan","GlycoCTParser","GlycoCTWriter","GlycoCTSubstituents","NodeComparator","RepeatingUnit","SubstituentsPositions","MonosaccharideGlycoCT","QuickModeMonosaccharides","Structures","ImageExporter","undefined","_methods","Object","create","_indexes","_initBindings","_methodBindings","_methodBeforeBindings","_defaultSettings","immutable","clone","_defaultSettingsFunction","key","graph","settings","k","fn","data","nodesArray","edgesArray","nodesIndex","edgesIndex","inNeighborsIndex","outNeighborsIndex","allNeighborsIndex","inNeighborsCount","outNeighborsCount","allNeighborsCount","call","__bindGraphMethod","methodName","scope","result","res","apply","arguments","__emptyObject","obj","hasOwnProperty","addMethod","length","hasMethod","attach","before","bindings","attachBefore","addIndex","name","node","id","validNode","defineProperty","value","enumerable","push","edge","source","target","validEdge","i","l","splice","dropEdge","keys","g","a","nodes","addNode","edges","addEdge","v","slice","prototype","toString","which","n","sigma","classes","module","exports","Edge","sourceNode","targetNode","getId","err","Node","ONE","TWO","THREE","UNDEFINED","Enum","initEnum","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","Hex","shape","color","bisected","Glc","Man","Gal","Gul","Alt","All","Tal","Ido","HexNAc","GlcNAc","ManNAc","GalNAc","GulNAc","AltNAc","AllNAc","TalNAc","IdoNAc","HexN","GlcN","ManN","GalN","GulN","AltN","AllN","TalN","IdoN","HexA","GlcA","ManA","GalA","GulA","AltA","AllA","TalA","IdoA","dHex","Qui","Rha","SixdAlt","SixdTal","Fuc","dHexNAc","QuiNAc","RhaNAc","FucNAc","ddHex","Oli","Tyv","Abe","Par","Dig","Col","Pen","Ara","Lyx","Xyl","Rib","Nonu","Kdn","Neu5Ac","Neu5Gc","Neu","Sia","Unknown","Bac","LDManHep","Kdo","Dha","DDManHep","MurNAc","MurNGc","Mur","Assigned","Api","Fru","Tag","Sor","Psi","Acetyl","label","Bromo","Chloro","Ethyl","Ethanolamine","Fluoro","Formyl","Hydroxymethyl","Imino","RLactate1","SLactate1","Amino","Methyl","NAcetyl","NAlanine","NFormyl","NGlycolyl","NMethyl","NSuccinate","NSulfate","NTrifluoroacetyl","Nitrate","Phosphate","Pyruvate","Sulfate","Thio","RPyruvate","SPyruvate","RLactate2","SLactate2","glycoct","position","KdnNAc","KdnGc","KdnNGc","KdnN","SixdAltNAc","SixdTalNAc","MurGc","transform","isomer","ringType","acceptorPosition","ncore","ncorefuc","ncorebisect","ncorebisectfuc","ncorehyb","ncorehybfuc","ncorehybbis","ncorehybbisfuc","ncoreman","ocore1","ocore2","ocore3","ocore4","ocore5","ocore6","ocore7","ocore8","gslarthro","gslgala","gslganglio","gslglobo","gslisoglobo","gsllacto","gslmollu","gslmuco","gslneolacto","gaghyaluronic","gagchodroitin4","gagchodroitin6","gagchodroitin26","gagchodroitin46","gagdermatan","gagkeratan","gagheparin","gagheparan","milklac","milk3fuclac","milk2fuclac","milkdifuc","milktetra","milkneotetra","antigenA","antigenB","antigenH","antigenCAD","antigenP","antigenPk","antigenSda","highMannose","lacDiNAc","lactoseAmine","neoLactoseAmine","polyLactoseAmine","sialyllactoNLSa","sialyllactorNLSb","sialyllactoNLSc","disialyllactorNLDS","fucosylatedLacDiNAc","sialylatedLacDiNAc","lewisA","lewisB","lewisC","lewisD","lewisX","lewisY","sialylLewisA","sialylLewisX","VIM2","donorPosition","_acceptorPosition","_donorPosition","monosaccharideType","anomericity","_monosaccharideType","_anomericity","_isomer","_ringType","substituentType","_substituentType","rootNode","rootSet","rootIsSet","getEdgeSource","getEdgeTarget","monosaccharide","getNodeById","substituent","glyLinkage","getEdgeById","subLinkage","getEdge","childNode","glycosidicLinkage","substituentLinkage","parentNode","addMonosaccharide","addSubstituent","updatedGraph","dropNode","removeNodeById","linkage","removeLinkageById","structure","clear","min","max","entry","exit","parseInt","formula","chars","split","Math","floor","random","str","sub","mono","stemType","residue","repeatingUnit","substring","anom","ALPHA","BETA","dashSplit","isom","toLowerCase","firstTransform","monoType","getMonoType","ringStop","F","P","nodeId","randomString","glycan","ac","anomC","lc","linkedC","addMonosaccharideWithLinkage","clickedNode","subName","subType","lcs","linkedCS","subId","newType","getMono","getSub","updateNodeType","type","glycanNode","getSection","links","createResidue","repSection","reps","getRepeatingUnit","nodesIds","repInfo","merge","mergeRep","generateNodes","repeatingUnitsObjects","finalRes","repUnitRead","repUnitIndices","indexOf","concat","finalLinks","allLinks","isTargetARep","lin","repeatingUnitObject","createdUnits","repNodesIds","includes","getLinkTarget","info","getRepNodesIds","updateLinkTarget","isSourceARep","getLinkSource","updateLinkSource","output","r","link","sourceId","pair","residueListById","linkId","findMatchingRep","targetId","linkages","section","sections","formulaArray","Array","flag","line","array","tree","rep","prefix","suffix","b","comp","EdgeComparator","edge1","getLink","parent","edge2","compare","arr","arr2","assign","len","comparatorFunction","temp","id1","id2","root","unit","stack","pop","nodeUnit","children","rootChild","sort","child","resId","repId","associatedSubs","repNumber","offset","writeSub","resName","isoExceptions","monoName","assocSubType","assocSub","ringExceptions","associatedSub","prevSource","prevTarget","sourceRep","findNodeInTree","targetRep","writeMonoLink","writeSubLink","node1","generateArrays","resInfo","generateRES","lastResId","linInfo","generateLIN","lastLinId","findRepMinDepth","entryId","exitId","minVal","depth","minNode","e1","e2","bondsE1","bonds","bondsE2","parentLinkPosE1","parentLinkPos","parentLinkPosE2","childLinkPosE1","childLinkPos","childLinkPosE2","linkageTypeE1","linkageType","linkageTypeE2","compareNodes","n1","n2","childrenN1","childrenN2","longestN1","longestBranch","longestN2","terminalsN1","terminals","terminalsN2","branchingN1","branching","branchingN2","depths","reduce","branches","div_svg","tmp","document","getElementById","svg","getElementsByTagName","xml","XMLSerializer","serializeToString","replace","innerHTML","div_svg_code","svg_xml","get_xml_svg_code","vkbeautify","$","text","html","imgsrc","btoa","unescape","encodeURIComponent","image","Image","src","onload","createElement","addEventListener","ev","download","href","body","appendChild","click"],"mappings":"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BAAO;AADJ,MAPe;AAUtBqC,gBAAW;AACPrC,gBAAO;AADA;AAVW,EAA1B,E;;;;;;ACnBA;;AAEA,qGAAoG,mBAAmB,EAAE,mBAAmB,kGAAkG;;AAE9O,iCAAgC,2CAA2C,gBAAgB,kBAAkB,OAAO,2BAA2B,wDAAwD,gCAAgC,uDAAuD,2DAA2D,EAAE,EAAE,yDAAyD,qEAAqE,6DAA6D,oBAAoB,GAAG,EAAE;;AAEjjB;AACA;AACA,EAAC;AACD;;AAEA,kDAAiD,0CAA0C,0DAA0D,EAAE;;AAEvJ;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,eAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA,oEAAmE,gEAAgE;AACnI;;AAEA;AACA;AACA,cAAa;AACb;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA,mFAAkF,mEAAmE;AACrJ;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;;AAEA;AACA;AACA;;AAEA,MAAK;AACL;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;;AAEA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;;AAEL;AACA,EAAC;;AAED;AACA;AACA;AA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","file":"sb.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"sb\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"sb\"] = factory();\n\telse\n\t\troot[\"sb\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap f9efbfae64aec5a98145","/**\n * This file allows the creation of a bundle library. \n * Author:  Davide Alocci\n * Version: 0.0.1\n */\n\n//Data Structure\nimport Graph from './js/models/dataStructure/Graph';\nimport GraphEdge from './js/models/dataStructure/GraphEdge';\nimport GraphNode from './js/models/dataStructure/GraphNode';\n\n//Glycomics Structure\n//Dictionary\nimport AcceptorPosition from './js/models/glycomics/dictionary/AcceptorPosition';\nimport Anomericity from './js/models/glycomics/dictionary/Anomericity';\nimport Isomer from './js/models/glycomics/dictionary/Isomer';\nimport DonorPosition from './js/models/glycomics/dictionary/DonorPosition';\nimport MonosaccharideType from './js/views/glycomics/dictionary/MonosaccharideType';\nimport RingType from './js/models/glycomics/dictionary/RingType';\nimport SubstituentType from './js/models/glycomics/dictionary/SubstituentType';\nimport GlycoCTSubstituents from './js/models/io/glycoCT/SubstituentsGlycoCT';\nimport SubstituentsPositions from './js/models/io/glycoCT/SubstituentsPositions';\nimport MonosaccharideGlycoCT from './js/models/io/glycoCT/MonosaccharideGlycoCT';\nimport QuickModeMonosaccharides from './js/models/glycomics/dictionary/QuickModeMonosaccharides';\nimport Structures from './js/models/glycomics/dictionary/Structures';\n\n//Linkages\nimport GlycosidicLinkage from './js/models/glycomics/linkages/GlycosidicLinkage';\nimport SubstituentLinkage from './js/models/glycomics/linkages/SubstituentLinkage';\n\n//Nodes\nimport Monosaccharide from './js/models/glycomics/nodes/Monosaccharide';\nimport Substituent from './js/models/glycomics/nodes/Substituent';\n\n//Glycan\nimport Glycan from './js/models/glycomics/Glycan';\nimport RepeatingUnit from './js/models/glycomics/RepeatingUnit';\n\n//IO\nimport GlycoCTParser from './js/models/io/glycoCT/GlycoCTParser';\nimport GlycoCTWriter from './js/models/io/glycoCT/GlycoCTWriter';\nimport NodeComparator from './js/models/io/NodeComparator';\nimport ImageExporter from './js/models/io/ImageExporter';\n\n\n\nexport { Graph, GraphEdge, GraphNode, AcceptorPosition, Anomericity, Isomer,\n    DonorPosition, MonosaccharideType, RingType, Monosaccharide, SubstituentType, \n    GlycosidicLinkage, SubstituentLinkage, Substituent, Glycan, GlycoCTParser,\n    GlycoCTWriter, GlycoCTSubstituents, NodeComparator, RepeatingUnit,\n    SubstituentsPositions, MonosaccharideGlycoCT, QuickModeMonosaccharides,\n    Structures, ImageExporter};\n\n\n// WEBPACK FOOTER //\n// ./src/index.js","/**\n * Class taken from sigma.js\n * https://github.com/jacomyal/sigma.js  -> sigma.js/src/classes/sigma.classes.graph.js\n *\n * This is the only part we need from sigma.js and we can add more method to fulfill our needs\n *\n * Licence:\n *\n * Copyright (C) 2013-2014, Alexis Jacomy, http://sigmajs.org\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"),\n * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,\n * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n\n ;(function(undefined) {\n    'use strict';\n\n    var _methods = Object.create(null),\n        _indexes = Object.create(null),\n        _initBindings = Object.create(null),\n        _methodBindings = Object.create(null),\n        _methodBeforeBindings = Object.create(null),\n        _defaultSettings = {\n            immutable: true,\n            clone: false\n        },\n        _defaultSettingsFunction = function(key) {\n            return _defaultSettings[key];\n        };\n\n    /**\n     * The graph constructor. It initializes the data and the indexes, and binds\n     * the custom indexes and methods to its own scope.\n     *\n     * Recognized parameters:\n     * **********************\n     * Here is the exhaustive list of every accepted parameters in the settings\n     * object:\n     *\n     *   {boolean} clone     Indicates if the data have to be cloned in methods\n     *                       to add nodes or edges.\n     *   {boolean} immutable Indicates if nodes \"id\" values and edges \"id\",\n     *                       \"source\" and \"target\" values must be set as\n     *                       immutable.\n     *\n     * @param  {?configurable} settings Eventually a settings function.\n     * @return {graph}                  The new graph instance.\n     */\n    var graph = function(settings) {\n        var k,\n            fn,\n            data;\n\n        /**\n         * DATA:\n         * *****\n         * Every data that is callable from graph methods are stored in this \"data\"\n         * object. This object will be served as context for all these methods,\n         * and it is possible to add other type of data in it.\n         */\n        data = {\n            /**\n             * SETTINGS FUNCTION:\n             * ******************\n             */\n            settings: settings || _defaultSettingsFunction,\n\n            /**\n             * MAIN DATA:\n             * **********\n             */\n            nodesArray: [],\n            edgesArray: [],\n\n            /**\n             * GLOBAL INDEXES:\n             * ***************\n             * These indexes just index data by ids.\n             */\n            nodesIndex: Object.create(null),\n            edgesIndex: Object.create(null),\n\n            /**\n             * LOCAL INDEXES:\n             * **************\n             * These indexes refer from node to nodes. Each key is an id, and each\n             * value is the array of the ids of related nodes.\n             */\n            inNeighborsIndex: Object.create(null),\n            outNeighborsIndex: Object.create(null),\n            allNeighborsIndex: Object.create(null),\n\n            inNeighborsCount: Object.create(null),\n            outNeighborsCount: Object.create(null),\n            allNeighborsCount: Object.create(null)\n        };\n\n        // Execute bindings:\n        for (k in _initBindings)\n            _initBindings[k].call(data);\n\n        // Add methods to both the scope and the data objects:\n        for (k in _methods) {\n            fn = __bindGraphMethod(k, data, _methods[k]);\n            this[k] = fn;\n            data[k] = fn;\n        }\n    };\n\n\n\n\n    /**\n     * A custom tool to bind methods such that function that are bound to it will\n     * be executed anytime the method is called.\n     *\n     * @param  {string}   methodName The name of the method to bind.\n     * @param  {object}   scope      The scope where the method must be executed.\n     * @param  {function} fn         The method itself.\n     * @return {function}            The new method.\n     */\n    function __bindGraphMethod(methodName, scope, fn) {\n        var result = function() {\n            var k,\n                res;\n\n            // Execute \"before\" bound functions:\n            for (k in _methodBeforeBindings[methodName])\n                _methodBeforeBindings[methodName][k].apply(scope, arguments);\n\n            // Apply the method:\n            res = fn.apply(scope, arguments);\n\n            // Execute bound functions:\n            for (k in _methodBindings[methodName])\n                _methodBindings[methodName][k].apply(scope, arguments);\n\n            // Return res:\n            return res;\n        };\n\n        return result;\n    }\n\n    /**\n     * This custom tool function removes every pair key/value from an hash. The\n     * goal is to avoid creating a new object while some other references are\n     * still hanging in some scopes...\n     *\n     * @param  {object} obj The object to empty.\n     * @return {object}     The empty object.\n     */\n    function __emptyObject(obj) {\n        var k;\n\n        for (k in obj)\n            if (!('hasOwnProperty' in obj) || obj.hasOwnProperty(k))\n                delete obj[k];\n\n        return obj;\n    }\n\n\n\n\n    /**\n     * This global method adds a method that will be bound to the futurly created\n     * graph instances.\n     *\n     * Since these methods will be bound to their scope when the instances are\n     * created, it does not use the prototype. Because of that, methods have to\n     * be added before instances are created to make them available.\n     *\n     * Here is an example:\n     *\n     *  > graph.addMethod('getNodesCount', function() {\n   *  >   return this.nodesArray.length;\n   *  > });\n     *  >\n     *  > var myGraph = new graph();\n     *  > console.log(myGraph.getNodesCount()); // outputs 0\n     *\n     * @param  {string}   methodName The name of the method.\n     * @param  {function} fn         The method itself.\n     * @return {object}              The global graph constructor.\n     */\n    graph.addMethod = function(methodName, fn) {\n        if (\n            typeof methodName !== 'string' ||\n            typeof fn !== 'function' ||\n            arguments.length !== 2\n        )\n            throw 'addMethod: Wrong arguments.';\n\n        if (_methods[methodName] || graph[methodName])\n            throw 'The method \"' + methodName + '\" already exists.';\n\n        _methods[methodName] = fn;\n        _methodBindings[methodName] = Object.create(null);\n        _methodBeforeBindings[methodName] = Object.create(null);\n\n        return this;\n    };\n\n    /**\n     * This global method returns true if the method has already been added, and\n     * false else.\n     *\n     * Here are some examples:\n     *\n     *  > graph.hasMethod('addNode'); // returns true\n     *  > graph.hasMethod('hasMethod'); // returns true\n     *  > graph.hasMethod('unexistingMethod'); // returns false\n     *\n     * @param  {string}  methodName The name of the method.\n     * @return {boolean}            The result.\n     */\n    graph.hasMethod = function(methodName) {\n        return !!(_methods[methodName] || graph[methodName]);\n    };\n\n    /**\n     * This global methods attaches a function to a method. Anytime the specified\n     * method is called, the attached function is called right after, with the\n     * same arguments and in the same scope. The attached function is called\n     * right before if the last argument is true, unless the method is the graph\n     * constructor.\n     *\n     * To attach a function to the graph constructor, use 'constructor' as the\n     * method name (first argument).\n     *\n     * The main idea is to have a clean way to keep custom indexes up to date,\n     * for instance:\n     *\n     *  > var timesAddNodeCalled = 0;\n     *  > graph.attach('addNode', 'timesAddNodeCalledInc', function() {\n   *  >   timesAddNodeCalled++;\n   *  > });\n     *  >\n     *  > var myGraph = new graph();\n     *  > console.log(timesAddNodeCalled); // outputs 0\n     *  >\n     *  > myGraph.addNode({ id: '1' }).addNode({ id: '2' });\n     *  > console.log(timesAddNodeCalled); // outputs 2\n     *\n     * The idea for calling a function before is to provide pre-processors, for\n     * instance:\n     *\n     *  > var colorPalette = { Person: '#C3CBE1', Place: '#9BDEBD' };\n     *  > graph.attach('addNode', 'applyNodeColorPalette', function(n) {\n   *  >   n.color = colorPalette[n.category];\n   *  > }, true);\n     *  >\n     *  > var myGraph = new graph();\n     *  > myGraph.addNode({ id: 'n0', category: 'Person' });\n     *  > console.log(myGraph.nodes('n0').color); // outputs '#C3CBE1'\n     *\n     * @param  {string}   methodName The name of the related method or\n     *                               \"constructor\".\n     * @param  {string}   key        The key to identify the function to attach.\n     * @param  {function} fn         The function to bind.\n     * @param  {boolean}  before     If true the function is called right before.\n     * @return {object}              The global graph constructor.\n     */\n    graph.attach = function(methodName, key, fn, before) {\n        if (\n            typeof methodName !== 'string' ||\n            typeof key !== 'string' ||\n            typeof fn !== 'function' ||\n            arguments.length < 3 ||\n            arguments.length > 4\n        )\n            throw 'attach: Wrong arguments.';\n\n        var bindings;\n\n        if (methodName === 'constructor')\n            bindings = _initBindings;\n        else {\n            if (before) {\n                if (!_methodBeforeBindings[methodName])\n                    throw 'The method \"' + methodName + '\" does not exist.';\n\n                bindings = _methodBeforeBindings[methodName];\n            }\n            else {\n                if (!_methodBindings[methodName])\n                    throw 'The method \"' + methodName + '\" does not exist.';\n\n                bindings = _methodBindings[methodName];\n            }\n        }\n\n        if (bindings[key])\n            throw 'A function \"' + key + '\" is already attached ' +\n            'to the method \"' + methodName + '\".';\n\n        bindings[key] = fn;\n\n        return this;\n    };\n\n    /**\n     * Alias of attach(methodName, key, fn, true).\n     */\n    graph.attachBefore = function(methodName, key, fn) {\n        return this.attach(methodName, key, fn, true);\n    };\n\n    /**\n     * This methods is just an helper to deal with custom indexes. It takes as\n     * arguments the name of the index and an object containing all the different\n     * functions to bind to the methods.\n     *\n     * Here is a basic example, that creates an index to keep the number of nodes\n     * in the current graph. It also adds a method to provide a getter on that\n     * new index:\n     *\n     *  > sigma.classes.graph.addIndex('nodesCount', {\n   *  >   constructor: function() {\n   *  >     this.nodesCount = 0;\n   *  >   },\n   *  >   addNode: function() {\n   *  >     this.nodesCount++;\n   *  >   },\n   *  >   dropNode: function() {\n   *  >     this.nodesCount--;\n   *  >   }\n   *  > });\n     *  >\n     *  > sigma.classes.graph.addMethod('getNodesCount', function() {\n   *  >   return this.nodesCount;\n   *  > });\n     *  >\n     *  > var myGraph = new sigma.classes.graph();\n     *  > console.log(myGraph.getNodesCount()); // outputs 0\n     *  >\n     *  > myGraph.addNode({ id: '1' }).addNode({ id: '2' });\n     *  > console.log(myGraph.getNodesCount()); // outputs 2\n     *\n     * @param  {string} name     The name of the index.\n     * @param  {object} bindings The object containing the functions to bind.\n     * @return {object}          The global graph constructor.\n     */\n    graph.addIndex = function(name, bindings) {\n        if (\n            typeof name !== 'string' ||\n            Object(bindings) !== bindings ||\n            arguments.length !== 2\n        )\n            throw 'addIndex: Wrong arguments.';\n\n        if (_indexes[name])\n            throw 'The index \"' + name + '\" already exists.';\n\n        var k;\n\n        // Store the bindings:\n        _indexes[name] = bindings;\n\n        // Attach the bindings:\n        for (k in bindings)\n            if (typeof bindings[k] !== 'function')\n                throw 'The bindings must be functions.';\n            else\n                graph.attach(k, name, bindings[k]);\n\n        return this;\n    };\n\n\n\n\n    /**\n     * This method adds a node to the graph. The node must be an object, with a\n     * string under the key \"id\". Except for this, it is possible to add any\n     * other attribute, that will be preserved all along the manipulations.\n     *\n     * If the graph option \"clone\" has a truthy value, the node will be cloned\n     * when added to the graph. Also, if the graph option \"immutable\" has a\n     * truthy value, its id will be defined as immutable.\n     *\n     * @param  {object} node The node to add.\n     * @return {object}      The graph instance.\n     */\n    graph.addMethod('addNode', function(node) {\n        // Check that the node is an object and has an id:\n        if (Object(node) !== node || arguments.length !== 1)\n            throw 'addNode: Wrong arguments.';\n\n        if (typeof node.id !== 'string' && typeof node.id !== 'number')\n            throw 'The node must have a string or number id.';\n\n        if (this.nodesIndex[node.id])\n            throw 'The node \"' + node.id + '\" already exists.';\n\n        var k,\n            id = node.id,\n            validNode = Object.create(null);\n\n        // Check the \"clone\" option:\n        if (this.settings('clone')) {\n            for (k in node)\n                if (k !== 'id')\n                    validNode[k] = node[k];\n        } else\n            validNode = node;\n\n        // Check the \"immutable\" option:\n        if (this.settings('immutable'))\n            Object.defineProperty(validNode, 'id', {\n                value: id,\n                enumerable: true\n            });\n        else\n            validNode.id = id;\n\n        // Add empty containers for edges indexes:\n        this.inNeighborsIndex[id] = Object.create(null);\n        this.outNeighborsIndex[id] = Object.create(null);\n        this.allNeighborsIndex[id] = Object.create(null);\n\n        this.inNeighborsCount[id] = 0;\n        this.outNeighborsCount[id] = 0;\n        this.allNeighborsCount[id] = 0;\n\n        // Add the node to indexes:\n        this.nodesArray.push(validNode);\n        this.nodesIndex[validNode.id] = validNode;\n\n        // Return the current instance:\n        return this;\n    });\n\n    /**\n     * This method adds an edge to the graph. The edge must be an object, with a\n     * string under the key \"id\", and strings under the keys \"source\" and\n     * \"target\" that design existing nodes. Except for this, it is possible to\n     * add any other attribute, that will be preserved all along the\n     * manipulations.\n     *\n     * If the graph option \"clone\" has a truthy value, the edge will be cloned\n     * when added to the graph. Also, if the graph option \"immutable\" has a\n     * truthy value, its id, source and target will be defined as immutable.\n     *\n     * @param  {object} edge The edge to add.\n     * @return {object}      The graph instance.\n     */\n    graph.addMethod('addEdge', function(edge) {\n        // Check that the edge is an object and has an id:\n        if (Object(edge) !== edge || arguments.length !== 1)\n            throw 'addEdge: Wrong arguments.';\n\n        if (typeof edge.id !== 'string' && typeof edge.id !== 'number')\n            throw 'The edge must have a string or number id.';\n\n        if ((typeof edge.source !== 'string' && typeof edge.source !== 'number') ||\n            !this.nodesIndex[edge.source])\n            throw 'The edge source must have an existing node id.';\n\n        if ((typeof edge.target !== 'string' && typeof edge.target !== 'number') ||\n            !this.nodesIndex[edge.target])\n            throw 'The edge target must have an existing node id.';\n\n        if (this.edgesIndex[edge.id])\n            throw 'The edge \"' + edge.id + '\" already exists.';\n\n        var k,\n            validEdge = Object.create(null);\n\n        // Check the \"clone\" option:\n        if (this.settings('clone')) {\n            for (k in edge)\n                if (k !== 'id' && k !== 'source' && k !== 'target')\n                    validEdge[k] = edge[k];\n        } else\n            validEdge = edge;\n\n        // Check the \"immutable\" option:\n        if (this.settings('immutable')) {\n            Object.defineProperty(validEdge, 'id', {\n                value: edge.id,\n                enumerable: true\n            });\n\n            Object.defineProperty(validEdge, 'source', {\n                value: edge.source,\n                enumerable: true\n            });\n\n            Object.defineProperty(validEdge, 'target', {\n                value: edge.target,\n                enumerable: true\n            });\n        } else {\n            validEdge.id = edge.id;\n            validEdge.source = edge.source;\n            validEdge.target = edge.target;\n        }\n\n        // Add the edge to indexes:\n        this.edgesArray.push(validEdge);\n        this.edgesIndex[validEdge.id] = validEdge;\n\n        if (!this.inNeighborsIndex[validEdge.target][validEdge.source])\n            this.inNeighborsIndex[validEdge.target][validEdge.source] =\n                Object.create(null);\n        this.inNeighborsIndex[validEdge.target][validEdge.source][validEdge.id] =\n            validEdge;\n\n        if (!this.outNeighborsIndex[validEdge.source][validEdge.target])\n            this.outNeighborsIndex[validEdge.source][validEdge.target] =\n                Object.create(null);\n        this.outNeighborsIndex[validEdge.source][validEdge.target][validEdge.id] =\n            validEdge;\n\n        if (!this.allNeighborsIndex[validEdge.source][validEdge.target])\n            this.allNeighborsIndex[validEdge.source][validEdge.target] =\n                Object.create(null);\n        this.allNeighborsIndex[validEdge.source][validEdge.target][validEdge.id] =\n            validEdge;\n\n        if (validEdge.target !== validEdge.source) {\n            if (!this.allNeighborsIndex[validEdge.target][validEdge.source])\n                this.allNeighborsIndex[validEdge.target][validEdge.source] =\n                    Object.create(null);\n            this.allNeighborsIndex[validEdge.target][validEdge.source][validEdge.id] =\n                validEdge;\n        }\n\n        // Keep counts up to date:\n        this.inNeighborsCount[validEdge.target]++;\n        this.outNeighborsCount[validEdge.source]++;\n        this.allNeighborsCount[validEdge.target]++;\n        this.allNeighborsCount[validEdge.source]++;\n\n        return this;\n    });\n\n    /**\n     * This method drops a node from the graph. It also removes each edge that is\n     * bound to it, through the dropEdge method. An error is thrown if the node\n     * does not exist.\n     *\n     * @param  {string} id The node id.\n     * @return {object}    The graph instance.\n     */\n    graph.addMethod('dropNode', function(id) {\n        // Check that the arguments are valid:\n        if ((typeof id !== 'string' && typeof id !== 'number') ||\n            arguments.length !== 1)\n            throw 'dropNode: Wrong arguments.';\n\n        if (!this.nodesIndex[id])\n            throw 'The node \"' + id + '\" does not exist.';\n\n        var i, k, l;\n\n        // Remove the node from indexes:\n        delete this.nodesIndex[id];\n        for (i = 0, l = this.nodesArray.length; i < l; i++)\n            if (this.nodesArray[i].id === id) {\n                this.nodesArray.splice(i, 1);\n                break;\n            }\n\n        // Remove related edges:\n        for (i = this.edgesArray.length - 1; i >= 0; i--)\n            if (this.edgesArray[i].source === id || this.edgesArray[i].target === id)\n                this.dropEdge(this.edgesArray[i].id);\n\n        // Remove related edge indexes:\n        delete this.inNeighborsIndex[id];\n        delete this.outNeighborsIndex[id];\n        delete this.allNeighborsIndex[id];\n\n        delete this.inNeighborsCount[id];\n        delete this.outNeighborsCount[id];\n        delete this.allNeighborsCount[id];\n\n        for (k in this.nodesIndex) {\n            delete this.inNeighborsIndex[k][id];\n            delete this.outNeighborsIndex[k][id];\n            delete this.allNeighborsIndex[k][id];\n        }\n\n        return this;\n    });\n\n    /**\n     * This method drops an edge from the graph. An error is thrown if the edge\n     * does not exist.\n     *\n     * @param  {string} id The edge id.\n     * @return {object}    The graph instance.\n     */\n    graph.addMethod('dropEdge', function(id) {\n        // Check that the arguments are valid:\n        if ((typeof id !== 'string' && typeof id !== 'number') ||\n            arguments.length !== 1)\n            throw 'dropEdge: Wrong arguments.';\n\n        if (!this.edgesIndex[id])\n            throw 'The edge \"' + id + '\" does not exist.';\n\n        var i, l, edge;\n\n        // Remove the edge from indexes:\n        edge = this.edgesIndex[id];\n        delete this.edgesIndex[id];\n        for (i = 0, l = this.edgesArray.length; i < l; i++)\n            if (this.edgesArray[i].id === id) {\n                this.edgesArray.splice(i, 1);\n                break;\n            }\n\n        delete this.inNeighborsIndex[edge.target][edge.source][edge.id];\n        if (!Object.keys(this.inNeighborsIndex[edge.target][edge.source]).length)\n            delete this.inNeighborsIndex[edge.target][edge.source];\n\n        delete this.outNeighborsIndex[edge.source][edge.target][edge.id];\n        if (!Object.keys(this.outNeighborsIndex[edge.source][edge.target]).length)\n            delete this.outNeighborsIndex[edge.source][edge.target];\n\n        delete this.allNeighborsIndex[edge.source][edge.target][edge.id];\n        if (!Object.keys(this.allNeighborsIndex[edge.source][edge.target]).length)\n            delete this.allNeighborsIndex[edge.source][edge.target];\n\n        if (edge.target !== edge.source) {\n            delete this.allNeighborsIndex[edge.target][edge.source][edge.id];\n            if (!Object.keys(this.allNeighborsIndex[edge.target][edge.source]).length)\n                delete this.allNeighborsIndex[edge.target][edge.source];\n        }\n\n        this.inNeighborsCount[edge.target]--;\n        this.outNeighborsCount[edge.source]--;\n        this.allNeighborsCount[edge.source]--;\n        this.allNeighborsCount[edge.target]--;\n\n        return this;\n    });\n\n    /**\n     * This method destroys the current instance. It basically empties each index\n     * and methods attached to the graph.\n     */\n    graph.addMethod('kill', function() {\n        // Delete arrays:\n        this.nodesArray.length = 0;\n        this.edgesArray.length = 0;\n        delete this.nodesArray;\n        delete this.edgesArray;\n\n        // Delete indexes:\n        delete this.nodesIndex;\n        delete this.edgesIndex;\n        delete this.inNeighborsIndex;\n        delete this.outNeighborsIndex;\n        delete this.allNeighborsIndex;\n        delete this.inNeighborsCount;\n        delete this.outNeighborsCount;\n        delete this.allNeighborsCount;\n    });\n\n    /**\n     * This method empties the nodes and edges arrays, as well as the different\n     * indexes.\n     *\n     * @return {object} The graph instance.\n     */\n    graph.addMethod('clear', function() {\n        this.nodesArray.length = 0;\n        this.edgesArray.length = 0;\n\n        // Due to GC issues, I prefer not to create new object. These objects are\n        // only available from the methods and attached functions, but still, it is\n        // better to prevent ghost references to unrelevant data...\n        __emptyObject(this.nodesIndex);\n        __emptyObject(this.edgesIndex);\n        __emptyObject(this.nodesIndex);\n        __emptyObject(this.inNeighborsIndex);\n        __emptyObject(this.outNeighborsIndex);\n        __emptyObject(this.allNeighborsIndex);\n        __emptyObject(this.inNeighborsCount);\n        __emptyObject(this.outNeighborsCount);\n        __emptyObject(this.allNeighborsCount);\n\n        return this;\n    });\n\n    /**\n     * This method reads an object and adds the nodes and edges, through the\n     * proper methods \"addNode\" and \"addEdge\".\n     *\n     * Here is an example:\n     *\n     *  > var myGraph = new graph();\n     *  > myGraph.read({\n   *  >   nodes: [\n   *  >     { id: 'n0' },\n   *  >     { id: 'n1' }\n   *  >   ],\n   *  >   edges: [\n   *  >     {\n   *  >       id: 'e0',\n   *  >       source: 'n0',\n   *  >       target: 'n1'\n   *  >     }\n   *  >   ]\n   *  > });\n     *  >\n     *  > console.log(\n     *  >   myGraph.nodes().length,\n     *  >   myGraph.edges().length\n     *  > ); // outputs 2 1\n     *\n     * @param  {object} g The graph object.\n     * @return {object}   The graph instance.\n     */\n    graph.addMethod('read', function(g) {\n        var i,\n            a,\n            l;\n\n        a = g.nodes || [];\n        for (i = 0, l = a.length; i < l; i++)\n            this.addNode(a[i]);\n\n        a = g.edges || [];\n        for (i = 0, l = a.length; i < l; i++)\n            this.addEdge(a[i]);\n\n        return this;\n    });\n\n    /**\n     * This methods returns one or several nodes, depending on how it is called.\n     *\n     * To get the array of nodes, call \"nodes\" without argument. To get a\n     * specific node, call it with the id of the node. The get multiple node,\n     * call it with an array of ids, and it will return the array of nodes, in\n     * the same order.\n     *\n     * @param  {?(string|array)} v Eventually one id, an array of ids.\n     * @return {object|array}      The related node or array of nodes.\n     */\n    graph.addMethod('nodes', function(v) {\n        // Clone the array of nodes and return it:\n        if (!arguments.length)\n            return this.nodesArray.slice(0);\n\n        // Return the related node:\n        if (arguments.length === 1 &&\n            (typeof v === 'string' || typeof v === 'number'))\n            return this.nodesIndex[v];\n\n        // Return an array of the related node:\n        if (\n            arguments.length === 1 &&\n            Object.prototype.toString.call(v) === '[object Array]'\n        ) {\n            var i,\n                l,\n                a = [];\n\n            for (i = 0, l = v.length; i < l; i++)\n                if (typeof v[i] === 'string' || typeof v[i] === 'number')\n                    a.push(this.nodesIndex[v[i]]);\n                else\n                    throw 'nodes: Wrong arguments.';\n\n            return a;\n        }\n\n        throw 'nodes: Wrong arguments.';\n    });\n\n    /**\n     * This methods returns the degree of one or several nodes, depending on how\n     * it is called. It is also possible to get incoming or outcoming degrees\n     * instead by specifying 'in' or 'out' as a second argument.\n     *\n     * @param  {string|array} v     One id, an array of ids.\n     * @param  {?string}      which Which degree is required. Values are 'in',\n     *                              'out', and by default the normal degree.\n     * @return {number|array}       The related degree or array of degrees.\n     */\n    graph.addMethod('degree', function(v, which) {\n        // Check which degree is required:\n        which = {\n                'in': this.inNeighborsCount,\n                'out': this.outNeighborsCount\n            }[which || ''] || this.allNeighborsCount;\n\n        // Return the related node:\n        if (typeof v === 'string' || typeof v === 'number')\n            return which[v];\n\n        // Return an array of the related node:\n        if (Object.prototype.toString.call(v) === '[object Array]') {\n            var i,\n                l,\n                a = [];\n\n            for (i = 0, l = v.length; i < l; i++)\n                if (typeof v[i] === 'string' || typeof v[i] === 'number')\n                    a.push(which[v[i]]);\n                else\n                    throw 'degree: Wrong arguments.';\n\n            return a;\n        }\n\n        throw 'degree: Wrong arguments.';\n    });\n\n    /**\n     * This methods returns one or several edges, depending on how it is called.\n     *\n     * To get the array of edges, call \"edges\" without argument. To get a\n     * specific edge, call it with the id of the edge. The get multiple edge,\n     * call it with an array of ids, and it will return the array of edges, in\n     * the same order.\n     *\n     * @param  {?(string|array)} v Eventually one id, an array of ids.\n     * @return {object|array}      The related edge or array of edges.\n     */\n    graph.addMethod('edges', function(v) {\n        // Clone the array of edges and return it:\n        if (!arguments.length)\n            return this.edgesArray.slice(0);\n\n        // Return the related edge:\n        if (arguments.length === 1 &&\n            (typeof v === 'string' || typeof v === 'number'))\n            return this.edgesIndex[v];\n\n        // Return an array of the related edge:\n        if (\n            arguments.length === 1 &&\n            Object.prototype.toString.call(v) === '[object Array]'\n        ) {\n            var i,\n                l,\n                a = [];\n\n            for (i = 0, l = v.length; i < l; i++)\n                if (typeof v[i] === 'string' || typeof v[i] === 'number')\n                    a.push(this.edgesIndex[v[i]]);\n                else\n                    throw 'edges: Wrong arguments.';\n\n            return a;\n        }\n\n        throw 'edges: Wrong arguments.';\n    });\n\n\n\n    /**\n     * This method return all the children of a specific node. An error is thrown if the node\n     * does not exist.\n     *\n     * @param  {string} id The edge id.\n     * @return {object|array}      The related node or array of nodes.\n     */\n    graph.addMethod('getChildren', function(id) {\n        // Check that the arguments are valid:\n        if ((typeof id !== 'string' && typeof id !== 'number') ||\n            arguments.length !== 1)\n            throw 'getChildren: Wrong arguments.';\n\n        if (!this.nodesIndex[id])\n            throw 'The node \"' + id + '\" does not exist.';\n        var n = [];\n        for (var node in this.outNeighborsIndex[id]){\n            if (typeof node === 'string' || typeof node === 'number')\n                n.push(this.nodesIndex[node]);\n            else\n                throw 'nodes: Wrong arguments.';\n        }\n\n        return n;\n    });\n\n\n    /**\n     * EXPORT:\n     * *******\n     *\n     */\n\n    if (typeof sigma !== 'undefined') {\n        sigma.classes = sigma.classes || Object.create(null);\n        sigma.classes.graph = graph;\n    } else if (typeof exports !== 'undefined') {\n        if (typeof module !== 'undefined' && module.exports)\n            exports = module.exports = graph;\n        exports.graph = graph;\n    } else\n        this.graph = graph;\n\n\n\n}).call(this);\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/dataStructure/Graph.js","/**\n * Author:  Davide Alocci\n * Version: 0.0.1\n */\n\nexport default class Edge {\n    /**\n     * Create a new Edge using nodes.\n     * @param {string} id the edge id\n     * @param {Node} sourceNode The source node\n     * @param {Node} targetNode The target Node\n     */\n    constructor(id, sourceNode, targetNode){\n        if (typeof id == 'undefined' || typeof sourceNode == 'undefined' || typeof targetNode  == 'undefined'){\n            throw \"The parameter id, sourceNode and targetNode cannot be undefined\";\n        }\n\n        //WARNING: Do not change this properties name !\n        //They are used by the graph class in Sigma.js\n        this.id = id;\n        try {\n            this.source = sourceNode.getId();\n            this.target = targetNode.getId();\n        } catch (err){\n            throw 'SourceNode and TargetNode must have a getId() method. Please use or extend the Node obj like in Monosaccharide or Substituent';\n        }\n        // end sigma.js strict parameter\n\n        this.sourceNode = sourceNode;\n        this.targetNode = targetNode;\n    }\n\n    getEdgeId(){\n        return this.id;\n    }\n\n    getEdgeSource(){\n        return this.sourceNode;\n    }\n\n    getEdgeTarget(){\n        return this.targetNode;\n    }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/dataStructure/GraphEdge.js","/**\n * Author:  Davide Alocci\n * Version: 0.0.1\n */\n\nexport default class Node {\n    constructor(id){\n        if(typeof id == 'undefined'){\n            throw \"The parameter id be undefined\";\n        } else{\n            this.id = id;\n        }\n    }\n\n    getId(){\n        return this.id;\n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/dataStructure/GraphNode.js","/**\n * Author:  Davide Alocci\n * Version: 0.0.1\n */\n\nimport {Enum} from 'enumify';\n\nexport default class AcceptorPosition extends Enum {\n\n    getAcceptorPosition(value) {\n        switch (value){\n            case 1: return AcceptorPosition.ONE;\n            case 2: return AcceptorPosition.TWO;\n            case 3: return AcceptorPosition.THREE;\n            default: return AcceptorPosition.UNDEFINED;\n        }\n    }\n}\n\nAcceptorPosition.initEnum({\n    ONE: {\n        value: 1\n    },\n    TWO: {\n        value: 2\n    },\n    THREE: {\n        value: 3\n    },\n    UNDEFINED: {\n        value: 'undefined'\n    }\n});\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/dictionary/AcceptorPosition.js","'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.copyProperties = copyProperties;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar INITIALIZED = Symbol();\n\n/**\n * This is an abstract class that is not intended to be\n * used directly. Extend it to turn your class into an enum\n * (initialization is performed via `MyClass.initEnum()`).\n */\n\nvar Enum = exports.Enum = function () {\n    /**\n     * `initEnum()` closes the class. Then calling this constructor\n     * throws an exception.\n     * \n     * If your subclass has a constructor then you can control\n     * what properties are added to `this` via the argument you\n     * pass to `super()`. No arguments are fine, too.\n     */\n\n    function Enum() {\n        var instanceProperties = arguments.length <= 0 || arguments[0] === undefined ? undefined : arguments[0];\n\n        _classCallCheck(this, Enum);\n\n        // new.target would be better than this.constructor,\n        // but isn’t supported by Babel\n        if ({}.hasOwnProperty.call(this.constructor, INITIALIZED)) {\n            throw new Error('Enum classes can’t be instantiated');\n        }\n        if ((typeof instanceProperties === 'undefined' ? 'undefined' : _typeof(instanceProperties)) === 'object' && instanceProperties !== null) {\n            copyProperties(this, instanceProperties);\n        }\n    }\n    /**\n     * Set up the enum, close the class.\n     * \n     * @param arg Either an object whose properties provide the names\n     * and values (which must be mutable objects) of the enum constants.\n     * Or an Array whose elements are used as the names of the enum constants\n     * The values are create by instantiating the current class.\n     */\n\n    _createClass(Enum, [{\n        key: 'toString',\n\n        /**\n         * Default `toString()` method for enum constant.\n         */\n        value: function toString() {\n            return this.constructor.name + '.' + this.name;\n        }\n    }], [{\n        key: 'initEnum',\n        value: function initEnum(arg) {\n            Object.defineProperty(this, 'enumValues', {\n                value: [],\n                configurable: false,\n                writable: false,\n                enumerable: true\n            });\n            if (Array.isArray(arg)) {\n                this._enumValuesFromArray(arg);\n            } else {\n                this._enumValuesFromObject(arg);\n            }\n            Object.freeze(this.enumValues);\n            this[INITIALIZED] = true;\n            return this;\n        }\n    }, {\n        key: '_enumValuesFromArray',\n        value: function _enumValuesFromArray(arr) {\n            var _iteratorNormalCompletion = true;\n            var _didIteratorError = false;\n            var _iteratorError = undefined;\n\n            try {\n                for (var _iterator = arr[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                    var key = _step.value;\n\n                    this._pushEnumValue(new this(), key);\n                }\n            } catch (err) {\n                _didIteratorError = true;\n                _iteratorError = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion && _iterator.return) {\n                        _iterator.return();\n                    }\n                } finally {\n                    if (_didIteratorError) {\n                        throw _iteratorError;\n                    }\n                }\n            }\n        }\n    }, {\n        key: '_enumValuesFromObject',\n        value: function _enumValuesFromObject(obj) {\n            var _iteratorNormalCompletion2 = true;\n            var _didIteratorError2 = false;\n            var _iteratorError2 = undefined;\n\n            try {\n                for (var _iterator2 = Object.keys(obj)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                    var key = _step2.value;\n\n                    var value = new this(obj[key]);\n                    this._pushEnumValue(value, key);\n                }\n            } catch (err) {\n                _didIteratorError2 = true;\n                _iteratorError2 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                        _iterator2.return();\n                    }\n                } finally {\n                    if (_didIteratorError2) {\n                        throw _iteratorError2;\n                    }\n                }\n            }\n        }\n    }, {\n        key: '_pushEnumValue',\n        value: function _pushEnumValue(enumValue, name) {\n            enumValue.name = name;\n            enumValue.ordinal = this.enumValues.length;\n            Object.defineProperty(this, name, {\n                value: enumValue,\n                configurable: false,\n                writable: false,\n                enumerable: true\n            });\n            this.enumValues.push(enumValue);\n        }\n\n        /**\n         * Given the name of an enum constant, return its value.\n         */\n\n    }, {\n        key: 'enumValueOf',\n        value: function enumValueOf(name) {\n            return this.enumValues.find(function (x) {\n                return x.name === name;\n            });\n        }\n\n        /**\n         * Make enum classes iterable\n         */\n\n    }, {\n        key: Symbol.iterator,\n        value: function value() {\n            return this.enumValues[Symbol.iterator]();\n        }\n    }]);\n\n    return Enum;\n}();\n\nfunction copyProperties(target, source) {\n    // Ideally, we’d use Reflect.ownKeys() here,\n    // but I don’t want to depend on a polyfill\n    var _iteratorNormalCompletion3 = true;\n    var _didIteratorError3 = false;\n    var _iteratorError3 = undefined;\n\n    try {\n        for (var _iterator3 = Object.getOwnPropertyNames(source)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n            var key = _step3.value;\n\n            var desc = Object.getOwnPropertyDescriptor(source, key);\n            Object.defineProperty(target, key, desc);\n        }\n    } catch (err) {\n        _didIteratorError3 = true;\n        _iteratorError3 = err;\n    } finally {\n        try {\n            if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                _iterator3.return();\n            }\n        } finally {\n            if (_didIteratorError3) {\n                throw _iteratorError3;\n            }\n        }\n    }\n\n    return target;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/enumify/lib/enumify.js\n// module id = 5\n// module chunks = 0","/**\n * Author:  Davide Alocci\n * Version: 0.0.1\n */\n\nimport {Enum} from 'enumify';\n\nexport default class Anomericity extends Enum {}\n\nAnomericity.initEnum(['ALPHA', 'BETA', 'UNDEFINED']);\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/dictionary/Anomericity.js","/**\n * Author:  Davide Alocci\n * Version: 0.0.1\n */\n\nimport {Enum} from 'enumify';\n\nexport default class Isomer extends Enum {}\n\nIsomer.initEnum(['L', 'D', 'UNDEFINED']);\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/dictionary/Isomer.js","/**\n * Author:  Davide Alocci\n * Version: 0.0.1\n */\n\nimport {Enum} from 'enumify';\n\nexport default class DonorPosition extends Enum {\n    getDonorPosition(value) {\n        switch (value){\n            case 1: return DonorPosition.ONE;\n            case 2: return DonorPosition.TWO;\n            case 3: return DonorPosition.THREE;\n            case 4: return DonorPosition.FOUR;\n            case 5: return DonorPosition.FIVE;\n            case 6: return DonorPosition.SIX;\n            case 7: return DonorPosition.SEVEN;\n            case 8: return DonorPosition.EIGHT;\n            case 9: return DonorPosition.NINE;\n            default: return DonorPosition.UNDEFINED;\n        }\n    }\n}\n\nDonorPosition.initEnum({\n    ONE: {\n        value: 1\n    },\n    TWO: {\n        value: 2\n    },\n    THREE: {\n        value: 3\n    },\n    FOUR:{\n        value: 4\n    },\n    FIVE: {\n        value: 5\n    },\n    SIX: {\n        value: 6\n    },\n    SEVEN: {\n        value: 7\n    },\n    EIGHT: {\n        value: 8\n    },\n    NINE: {\n        value: 9\n    },\n    UNDEFINED: {\n        value: 'undefined'\n    }\n});\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/dictionary/DonorPosition.js","/**\n * Author:  Davide Alocci\n * Version: 0.0.1\n */\n\nimport {Enum} from 'enumify';\n\nexport default class MonosaccharideType extends Enum {\n}\n\nMonosaccharideType.initEnum({\n    Hex: {\n        shape: 'circle',\n        color: '#FFFFFF',\n        bisected: false        \n    },\n    Glc: {\n        shape: 'circle',\n        color: '#0090BC',\n        bisected: false\n    },\n    Man: {\n        shape: 'circle',\n        color: '#00A651',\n        bisected: false\n    },\n    Gal: {\n        shape: 'circle',\n        color: '#FFD400',\n        bisected: false\n    },\n    Gul: {\n        shape: 'circle',\n        color: '#F47920',\n        bisected: false\n    },\n    Alt: {\n        shape: 'circle',\n        color: '#F69EA1',\n        bisected: false\n    },\n    All: {\n        shape: 'circle',\n        color: '#A54399',\n        bisected: false\n    },\n    Tal: {\n        shape: 'circle',\n        color: '#8FCCE9',\n        bisected: false\n    },\n    Ido: {\n        shape: 'circle',\n        color: '#A17A4D',\n        bisected: false\n    },\n    HexNAc: {\n        shape: 'square',\n        color: '#FFFFFF',\n        bisected: false\n    },\n    GlcNAc: {\n        shape: 'square',\n        color: '#0090BC',\n        bisected: false\n    },\n    ManNAc: {\n        shape: 'square',\n        color: '#00A651',\n        bisected: false\n    },\n    GalNAc: {\n        shape: 'square',\n        color: '#FFD400',\n        bisected: false\n    },\n    GulNAc: {\n        shape: 'square',\n        color: '#F47920',\n        bisected: false\n    },\n    AltNAc: {\n        shape: 'square',\n        color: '#F69EA1',\n        bisected: false\n    },\n    AllNAc: {\n        shape: 'square',\n        color: '#A54399',\n        bisected: false\n    },\n    TalNAc: {\n        shape: 'square',\n        color: '#8FCCE9',\n        bisected: false\n    },\n    IdoNAc: {\n        shape: 'square',\n        color: '#A17A4D',\n        bisected: false\n    },\n    HexN: {\n        shape: 'square',\n        color: '#FFFFFF',\n        bisected: true\n    },\n    GlcN: {\n        shape: 'square',\n        color: '#0090BC',\n        bisected: true\n    },\n    ManN: {\n        shape: 'square',\n        color: '#00A651',\n        bisected: true\n    },\n    GalN: {\n        shape: 'square',\n        color: '#FFD400',\n        bisected: true\n    },\n    GulN: {\n        shape: 'square',\n        color: '#F47920',\n        bisected: true\n    },\n    AltN: {\n        shape: 'square',\n        color: '#F69EA1',\n        bisected: true\n    },\n    AllN: {\n        shape: 'square',\n        color: '#A54399',\n        bisected: true\n    },\n    TalN: {\n        shape: 'square',\n        color: '#8FCCE9',\n        bisected: true\n    },\n    IdoN: {\n        shape: 'square',\n        color: '#A17A4D',\n        bisected: true\n    },\n    HexA: {\n        shape: 'diamond',\n        color: '#FFFFFF',\n        bisected: true\n    },\n    GlcA: {\n        shape: 'diamond',\n        color: '#0090BC',\n        bisected: true\n    },\n    ManA: {\n        shape: 'diamond',\n        color: '#00A651',\n        bisected: true\n    },\n    GalA: {\n        shape: 'diamond',\n        color: '#FFD400',\n        bisected: true\n    },\n    GulA: {\n        shape: 'diamond',\n        color: '#F47920',\n        bisected: true\n    },\n    AltA: {\n        shape: 'diamond',\n        color: '#F69EA1',\n        bisected: true\n    },\n    AllA: {\n        shape: 'diamond',\n        color: '#A54399',\n        bisected: true\n    },\n    TalA: {\n        shape: 'diamond',\n        color: '#8FCCE9',\n        bisected: true\n    },\n    IdoA: {\n        shape: 'diamond',\n        color: '#A17A4D',\n        bisected: true\n    },\n    dHex: {\n        shape: 'triangle',\n        color: '#FFFFFF',\n        bisected: false\n    },\n    Qui: {\n        shape: 'triangle',\n        color: '#0090BC',\n        bisected: false\n    },\n    Rha: {\n        shape: 'triangle',\n        color: '#00A651',\n        bisected: false\n    },\n    SixdAlt: {\n        shape: 'triangle',\n        color: '#F69EA1',\n        bisected: false\n    },\n    SixdTal: {\n        shape: 'triangle',\n        color: '#8FCCE9',\n        bisected: false\n    },\n    Fuc: {\n        shape: 'triangle',\n        color: '#ED1C24',\n        bisected: false\n    },\n    dHexNAc: {\n        shape: 'triangle',\n        color: '#FFFFFF',\n        bisected: true\n    },\n    QuiNAc: {\n        shape: 'triangle',\n        color: '#0090BC',\n        bisected: true\n    },\n    RhaNAc: {\n        shape: 'triangle',\n        color: '#00A651',\n        bisected: true\n    },\n    FucNAc: {\n        shape: 'triangle',\n        color: '#ED1C24',\n        bisected: true\n    },\n    ddHex: {\n        shape: 'rectangle',\n        color: '#FFFFFF',\n        bisected: false\n    },\n    Oli: {\n        shape: 'rectangle',\n        color: '#0090BC',\n        bisected: false\n    },\n    Tyv: {\n        shape: 'rectangle',\n        color: '#00A651',\n        bisected: false\n    },\n    Abe: {\n        shape: 'rectangle',\n        color: '#F47920',\n        bisected: false\n    },\n    Par: {\n        shape: 'rectangle',\n        color: '#F69EA1',\n        bisected: false\n    },\n    Dig: {\n        shape: 'rectangle',\n        color: '#A54399',\n        bisected: false\n    },\n    Col: {\n        shape: 'rectangle',\n        color: '#8FCCE9',\n        bisected: false\n    },\n    Pen: {\n        shape: 'star',\n        color: '#FFFFFF',\n        bisected: false\n    },\n    Ara: {\n        shape: 'star',\n        color: '#00A651',\n        bisected: false\n    },\n    Lyx: {\n        shape: 'star',\n        color: '#FFD400',\n        bisected: false\n    },\n    Xyl: {\n        shape: 'star',\n        color: '#F47920',\n        bisected: false\n    },\n    Rib: {\n        shape: 'star',\n        color: '#F69EA1',\n        bisected: false\n    },\n    Nonu: {\n        shape: 'diamond',\n        color: '#FFFFFF',\n        bisected: false\n    },\n    Kdn: {\n        shape: 'diamond',\n        color: '#00A651',\n        bisected: false\n    },\n    Neu5Ac: {\n        shape: 'diamond',\n        color: '#A54399',\n        bisected: false\n    },\n    Neu5Gc: {\n        shape: 'diamond',\n        color: '#8FCCE9',\n        bisected: false\n    },\n    Neu: {\n        shape: 'diamond',\n        color: '#A17A4D',\n        bisected: false\n    },\n    Sia: {\n        shape: 'diamond',\n        color: '#ED1C24',\n        bisected: false\n    },\n\n\n    Unknown: {\n        shape: 'Hexagon',\n        color: '#FFFFFF',\n        bisected: false\n    },\n    Bac: {\n        shape: 'Hexagon',\n        color: '#0090BC',\n        bisected: false\n    },\n    LDManHep: {\n        shape: 'Hexagon',\n        color: '#00A651',\n        bisected: false\n    },\n    Kdo: {\n        shape: 'Hexagon',\n        color: '#FFD400',\n        bisected: false\n    },\n    Dha: {\n        shape: 'Hexagon',\n        color: '#F47920',\n        bisected: false\n    },\n    DDManHep: {\n        shape: 'Hexagon',\n        color: '#F69EA1',\n        bisected: false\n    },\n    MurNAc: {\n        shape: 'Hexagon',\n        color: '#A54399',\n        bisected: false\n    },\n    MurNGc: {\n        shape: 'Hexagon',\n        color: '#8FCCE9',\n        bisected: false\n    },\n    Mur: {\n        shape: 'Hexagon',\n        color: '#A17A4D',\n        bisected: false\n    },\n\n\n    Assigned: {\n        shape: 'Pentagon',\n        color: '#FFFFFF',\n        bisected: false\n    },\n    Api: {\n        shape: 'Pentagon',\n        color: '#0090BC',\n        bisected: false\n    },\n    Fru: {\n        shape: 'Pentagon',\n        color: '#00A651',\n        bisected: false\n    },\n    Tag: {\n        shape: 'Pentagon',\n        color: '#FFD400',\n        bisected: false\n    },\n    Sor: {\n        shape: 'Pentagon',\n        color: '#F47920',\n        bisected: false\n    },\n    Psi: {\n        shape: 'Pentagon',\n        color: '#F69EA1',\n        bisected: false\n    }\n});\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/views/glycomics/dictionary/MonosaccharideType.js","/**\n * Author:  Davide Alocci\n * Version: 0.0.1\n */\n\nimport {Enum} from 'enumify';\n\nexport default class RingType extends Enum {}\n\nRingType.initEnum(['P', 'F','OPEN', 'UNDEFINED']);\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/dictionary/RingType.js","/**\n * Author:  Davide Alocci\n * Version: 0.0.1\n */\n\nimport {Enum} from 'enumify';\n\nexport default class SubstituentType extends Enum {}\n\nSubstituentType.initEnum({\n    Acetyl: {\n        label: 'Ac'\n    },\n    Bromo: {\n        label: 'Br'\n    },\n    Chloro: {\n        label: 'Cl'\n    },\n    Ethyl: {\n        label: 'Et'\n    },\n    Ethanolamine: {\n        label : 'ETA'\n    },\n    Fluoro: {\n        label: 'F'\n    },\n    Formyl: {\n        label: 'Formyl'\n    },\n    Hydroxymethyl: {\n        label: 'HMe'\n    },\n    Imino: {\n        label: 'Imino'\n    },\n    RLactate1: {\n        label: 'RLac1'\n    },\n    SLactate1: {\n        label: 'SLac1'\n    },\n    Amino: {\n        label: 'N'\n    },\n    Methyl: {\n        label: 'Me'\n    },\n    NAcetyl: {\n        label: 'NAc'\n    },\n    NAlanine: {\n        label: 'NAla'\n    },\n    NFormyl: {\n        label: 'NFormyl'\n    },\n    NGlycolyl: {\n        label: 'NGc'\n    },\n    NMethyl: {\n        label: 'NMe'\n    },\n    NSuccinate: {\n        label: 'NSuc'\n    },\n    NSulfate: {\n        label: 'NS'\n    },\n    NTrifluoroacetyl: {\n        label: 'NTFA'\n    },\n    Nitrate: {\n        label: 'NO3'\n    },\n    Phosphate: {\n        label: 'P'\n    },\n    Pyruvate: {\n        label: 'Pyr'\n    },\n    Sulfate: {\n        label: 'S'\n    },\n    Thio: {\n        label: 'Thio'\n    },\n    RPyruvate: {\n        label: 'RPyr'\n    },\n    SPyruvate: {\n        label: 'SPyr'\n    },\n    RLactate2: {\n        label: 'RLac2'\n    },\n    SLactate2: {\n        label: 'SLac2'\n    },\n});\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/dictionary/SubstituentType.js","/**\n * Created by Renaud on 06/07/2017.\n */\n\n\nimport {Enum} from 'enumify';\n\nexport default class GlycoCTSubstituents extends Enum {}\n\nGlycoCTSubstituents.initEnum({\n    NAcetyl: {\n        glycoct: \"n-acetyl\"\n    },\n    Amino: {\n        glycoct: \"amino\"\n    },\n    NGlycolyl: {\n        glycoct: \"n-glycolyl\"\n    },\n    Methyl: {\n        glycoct: \"methyl\"\n    },\n    Acetyl: {\n        glycoct: \"acetyl\"\n    },\n    Sulfate: {\n        glycoct: \"sulfate\"\n    },\n    Phosphate: {\n        glycoct: \"phosphate\"\n    },\n    Bromo: {\n        glycoct: 'bromo'\n    },\n    Chloro: {\n        glycoct: 'chloro'\n    },\n    Ethyl: {\n        glycoct: 'ethyl'\n    },\n    Ethanolamine: {\n        glycoct : 'ethanolamine'\n    },\n    Fluoro: {\n        glycoct: 'fluoro'\n    },\n    Formyl: {\n        glycoct: 'formyl'\n    },\n    Hydroxymethyl: {\n        glycoct: 'hydroxymethyl'\n    },\n    Imino: {\n        glycoct: 'imino'\n    },\n    RLactate1: {\n        glycoct: '(r)-lactate'\n    },\n    SLactate1: {\n        glycoct: '(s)-lactate'\n    },\n    NAlanine: {\n        glycoct: 'n-alanine'\n    },\n    NFormyl: {\n        glycoct: 'n-formyl'\n    },\n    NMethyl: {\n        glycoct: 'n-methyl'\n    },\n    NSuccinate: {\n        glycoct: 'n-succinate'\n    },\n    NSulfate: {\n        glycoct: 'n-sulfate'\n    },\n    NTrifluoroacetyl: {\n        glycoct: 'n-trifluoroacetyl'\n    },\n    Nitrate: {\n        glycoct: 'nitrate'\n    },\n    Pyruvate: {\n        glycoct: 'pyruvate'\n    },\n    Thio: {\n        glycoct: 'thio'\n    },\n    RPyruvate: {\n        glycoct: '(r)-pyruvate'\n    },\n    SPyruvate: {\n        glycoct: '(s)-pyruvate'\n    },\n    RLactate2: {\n        glycoct: '(r)-lactate2'\n    },\n    SLactate2: {\n        glycoct: '(s)-lactate2'\n    },\n    Unknown: {\n        glycoct: 'unknown'\n    }\n});\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/io/glycoCT/SubstituentsGlycoCT.js","/**\n * Created by Renaud on 03/08/2017.\n */\n\nimport {Enum} from 'enumify';\n\nexport default class SubstituentsPositions extends Enum {}\n\n    SubstituentsPositions.initEnum({\n        HexNAc: {\n            position:2\n        },\n\n        GlcNAc: {\n            position:2\n        },\n\n        ManNAc: {\n            position:2\n        },\n\n        GalNAc: {\n            position:2\n        },\n\n        GulNAc: {\n            position:2\n        },\n\n        AltNAc: {\n            position:2\n        },\n\n        AllNAc: {\n            position:2\n        },\n\n        TalNAc: {\n            position:2\n        },\n\n        IdoNAc: {\n            position: 2\n        },\n\n        HexN: {\n            position:2\n        },\n\n        GlcN: {\n            position:2\n        },\n\n        ManN: {\n            position:2\n        },\n\n        GalN: {\n            position:2\n        },\n\n        GulN: {\n            position:2\n        },\n\n        AltN: {\n            position:2\n        },\n\n        AllN: {\n            position:2\n        },\n\n        TalN: {\n            position:2\n        },\n\n        IdoN: {\n            position:2\n        },\n\n        KdnNAc: {\n            position:5\n        },\n\n        KdnGc: {\n            position:5\n        },\n\n        KdnNGc: {\n            position:5\n        },\n\n        KdnN: {\n            position:5\n        },\n\n        Neu5Ac: {\n            position:5\n        },\n\n        Neu5Gc: {\n            position:5\n        },\n\n        Neu: {\n            position:5\n        },\n\n        dHexNAc: {\n            position: 2\n        },\n\n        QuiNAc: {\n            position: 2\n        },\n\n        RhaNAc: {\n            position: 2\n        },\n\n        SixdAltNAc: {\n            position: 2\n        },\n\n        SixdTalNAc: {\n            position: 2\n        },\n\n        FucNAc: {\n            position: 2\n        },\n\n        MurNAc: {\n            position: 5\n        },\n\n        MurNGc: {\n            position: 5\n        },\n\n        MurGc: {\n            position: 5\n        }\n\n});\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/io/glycoCT/SubstituentsPositions.js","/**\n * Created by Renaud on 21/07/2017.\n */\n\nimport {Enum} from 'enumify';\n\nexport default class MonosaccharideGlycoCT extends Enum {}\n\nMonosaccharideGlycoCT.initEnum({\n    Hex: {\n        glycoct: \"HEX\",\n        transform: \"\"\n    },\n\n    Glc: {\n        glycoct: \"glc-HEX\",\n        transform: \"\"\n    },\n\n    Man: {\n        glycoct: \"man-HEX\",\n        transform: \"\"\n    },\n\n    Gal: {\n        glycoct: \"gal-HEX\",\n        transform: \"\"\n    },\n\n\n    Gul: {\n        glycoct: \"gul-HEX\",\n        transform: \"\"\n    },\n\n    Alt: {\n        glycoct: \"alt-HEX\",\n        transform: \"\"\n    },\n\n    All: {\n        glycoct: \"all-HEX\",\n        transform: \"\"\n    },\n\n    Tal: {\n        glycoct: \"tal-HEX\",\n        transform: \"\"\n    },\n\n    Ara: {\n        glycoct: \"ara-PEN\",\n        transform: \"\"\n    },\n\n    Lyx: {\n        glycoct: \"lyx-PEN\",\n        transform: \"\"\n    },\n\n    Rib: {\n        glycoct: \"rib-PEN\",\n        transform: \"\"\n    },\n\n    Bac: {\n        glycoct: \"glc-HEX\",\n        transform: \"|2:d|4:d|6:d\"\n    },\n\n    Fuc: {\n        glycoct: \"gal-HEX\",\n        transform: \"|6:d\"\n    },\n\n    HexA: {\n        glycoct: \"HEX\",\n        transform: \"|6:a\"\n    },\n\n    GlcA: {\n        glycoct: \"glc-HEX\",\n        transform: \"|6:a\"\n    },\n\n    ManA: {\n        glycoct: \"man-HEX\",\n        transform: \"|6:a\"\n    },\n\n    GalA: {\n        glycoct: \"gal-HEX\",\n        transform: \"|6:a\"\n    },\n\n    GulA: {\n        glycoct: \"gul-HEX\",\n        transform: \"|6:a\"\n    },\n\n    AltA: {\n        glycoct: \"alt-HEX\",\n        transform: \"|6:a\"\n    },\n\n    AllA: {\n        glycoct: \"all-HEX\",\n        transform: \"|6:a\"\n    },\n\n    TalA: {\n        glycoct: \"tal-HEX\",\n        transform: \"|6:a\"\n    },\n\n    Qui: {\n        glycoct: \"glc-HEX\",\n        transform: \"|6:d\"\n    },\n\n    dHex: {\n        glycoct: \"HEX\",\n        transform: \"|6:d\"\n    },\n\n    Ido: {\n        glycoct: \"ido-HEX\",\n        transform: \"\"\n    },\n\n    IdoA: {\n        glycoct: \"ido-HEX\",\n        transform: \"|6:a\"\n    },\n\n    Pen: {\n        glycoct: \"PEN-1:4\",\n        transform: \"\"\n    },\n\n    Rha: {\n        glycoct: \"man-HEX\",\n        transform: \"|6:d\"\n    },\n\n    SixdAlt: {\n        glycoct: \"alt-HEX\",\n        transform: \"|6:d\"\n    },\n\n    SixdTal: {\n        glycoct: \"tal-HEX\",\n        transform: \"|6:d\"\n    },\n\n    Xyl: {\n        glycoct: \"xyl-PEN\",\n        transform: \"\"\n    },\n\n    ddHex: {\n        glycoct: \"HEX\",\n        transform: \"|2:d|6:d\"\n    },\n\n    Unknown: {\n        glycoct: \"unknown\",\n        transform: \"\"\n    },\n\n    Oli: {\n        glycoct: \"PEN\",\n        transform: \"|3:d|6:d\"\n    },\n\n    Tyv: {\n        glycoct: \"ara-HEX\",\n        transform: \"|3:d|6:d\"\n    },\n\n    Abe: {\n        glycoct: \"dxyl-HEX\",\n        transform: \"|3:d|6:d\"\n    },\n\n    Par: {\n        glycoct: \"rib-HEX\",\n        transform: \"|3:d|6:d\"\n    },\n\n    Col: {\n        glycoct: \"lxyl-HEX\",\n        transform: \"|3:d|6:d\"\n    },\n\n    Dig: {\n        glycoct: \"rib-HEX\",\n        transform: \"|2:d|6:d\"\n    },\n\n    Nonu: {\n        glycoct: \"NON\",\n        transform: \"\"\n    },\n\n    Kdn: {\n        glycoct: \"gro-dgal-NON-2:6\",\n        transform: \"|1:a|2:keto|3:d\"\n    },\n\n    Kdo: {\n        glycoct: \"man-OCT-2:6\",\n        transform: \"|1:a|2:keto|3:d\"\n    },\n\n    Fru: {\n        glycoct: \"ara-HEX-2:5\",\n        transform: \"|2:keto\"\n    },\n\n    // GlycoCT not found\n    Assigned: {\n        glycoct: \"assigned-PEN\",\n        transform: \"\"\n    },\n    LDManHep: {\n        glycoct: \"ldmanhep-HEX\",\n        transform: \"\"\n    },\n\n    DDManHep: {\n        glycoct: \"ddmanhep-HEX\",\n        transform: \"\"\n    },\n\n    Dha: {\n        glycoct: \"dha-HEX\",\n        transform: \"\"\n    },\n\n    Mur: {\n        glycoct: \"mur-HEX\",\n        transform: \"\"\n    },\n\n    Sia: {\n        glycoct: \"sia-NON\",\n        transform: \"\"\n    },\n\n    Api: {\n        glycoct: \"api-PEN\",\n        transform: \"\"\n    },\n\n    Tag: {\n        glycoct: \"tag-PEN\",\n        transform: \"\"\n    },\n\n    Sor: {\n        glycoct: \"sor-PEN\",\n        transform: \"\"\n    },\n\n    Psi: {\n        glycoct: \"psi-PEN\",\n        transform: \"\"\n    }\n\n});\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/io/glycoCT/MonosaccharideGlycoCT.js","/**\n * Created by Renaud on 11/08/2017.\n */\n\nimport {Enum} from 'enumify';\n\nexport default class QuickModeMonosaccharides extends Enum {}\n\nQuickModeMonosaccharides.initEnum({\n\n    Gal: {\n        isomer: \"D\",\n        ringType: \"P\",\n        acceptorPosition: \"1\"\n    },\n\n    Glc: {\n        isomer: \"D\",\n        ringType: \"P\",\n        acceptorPosition: \"1\"\n    },\n\n    Man: {\n        isomer: \"D\",\n        ringType: \"P\",\n        acceptorPosition: \"1\"\n    },\n\n    GalNAc: {\n        isomer: \"D\",\n        ringType: \"P\",\n        acceptorPosition: \"1\"\n    },\n\n    GlcNAc: {\n        isomer: \"D\",\n        ringType: \"P\",\n        acceptorPosition: \"1\"\n    },\n\n    Fuc: {\n        isomer: \"L\",\n        ringType: \"P\",\n        acceptorPosition: \"1\"\n    },\n\n    Kdn: {\n        isomer: \"D\",\n        ringType: \"P\",\n        acceptorPosition: \"2\"\n    },\n\n    Neu5Ac: {\n        isomer: \"D\",\n        ringType: \"P\",\n        acceptorPosition: \"2\"\n    },\n\n    Neu5Gc: {\n        isomer: \"D\",\n        ringType: \"P\",\n        acceptorPosition: \"2\"\n    },\n\n    Neu: {\n        isomer: \"D\",\n        ringType: \"P\",\n        acceptorPosition: \"2\"\n    },\n\n    Xyl: {\n        isomer: \"D\",\n        ringType: \"P\",\n        acceptorPosition: \"1\"\n    },\n\n    }\n);\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/dictionary/QuickModeMonosaccharides.js","/**\n * Created by Renaud on 15/08/2017.\n */\n\n\nimport {Enum} from 'enumify';\n\nexport default class Structures extends Enum {}\n\nStructures.initEnum({\n\n    ncore: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dman-HEX-1:5\\n6b:a-dman-HEX-1:5\\n7b:a-dman-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5o(3+1)6d\\n6:5o(6+1)7d\"\n    },\n\n    ncorefuc: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dman-HEX-1:5\\n6b:a-dman-HEX-1:5\\n7b:a-dman-HEX-1:5\\n8b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5o(3+1)6d\\n6:5o(6+1)7d\\n7:1o(6+1)8d\"\n    },\n\n    ncorebisect: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dman-HEX-1:5\\n6b:a-dman-HEX-1:5\\n7b:b-dglc-HEX-1:5\\n8s:n-acetyl\\n9b:a-dman-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5o(3+1)6d\\n6:5o(4+1)7d\\n7:7d(2+1)8n\\n8:5o(6+1)9d\"\n    },\n\n    ncorebisectfuc: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dman-HEX-1:5\\n6b:a-dman-HEX-1:5\\n7b:b-dglc-HEX-1:5\\n8s:n-acetyl\\n9b:a-dman-HEX-1:5\\n10b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5o(3+1)6d\\n6:5o(4+1)7d\\n7:7d(2+1)8n\\n8:5o(6+1)9d\\n9:1o(6+1)10d\"\n    },\n\n    ncorehyb: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dman-HEX-1:5\\n6b:a-dman-HEX-1:5\\n7b:a-dman-HEX-1:5\\n8b:a-dman-HEX-1:5\\n9b:a-dman-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5o(3+1)6d\\n6:5o(6+1)7d\\n7:7o(3+1)8d\\n8:7o(6+1)9d\"\n    },\n\n    ncorehybfuc: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dman-HEX-1:5\\n6b:a-dman-HEX-1:5\\n7b:a-dman-HEX-1:5\\n8b:a-dman-HEX-1:5\\n9b:a-dman-HEX-1:5\\n10b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5o(3+1)6d\\n6:5o(6+1)7d\\n7:7o(3+1)8d\\n8:7o(6+1)9d\\n9:1o(6+1)10d\"\n    },\n\n    ncorehybbis: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dman-HEX-1:5\\n6b:a-dman-HEX-1:5\\n7b:b-dglc-HEX-1:5\\n8s:n-acetyl\\n9b:a-dman-HEX-1:5\\n10b:a-dman-HEX-1:5\\n11b:a-dman-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5o(3+1)6d\\n6:5o(4+1)7d\\n7:7d(2+1)8n\\n8:5o(6+1)9d\\n9:9o(3+1)10d\\n10:9o(6+1)11d\"\n    },\n\n    ncorehybbisfuc: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dman-HEX-1:5\\n6b:a-dman-HEX-1:5\\n7b:b-dglc-HEX-1:5\\n8s:n-acetyl\\n9b:a-dman-HEX-1:5\\n10b:a-dman-HEX-1:5\\n11b:a-dman-HEX-1:5\\n12b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5o(3+1)6d\\n6:5o(4+1)7d\\n7:7d(2+1)8n\\n8:5o(6+1)9d\\n9:9o(3+1)10d\\n10:9o(6+1)11d\\n11:1o(6+1)12d\"\n    },\n    \n    ncoreman: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dman-HEX-1:5\\n6b:a-dman-HEX-1:5\\n7b:a-dman-HEX-1:5\\n8b:a-dman-HEX-1:5\\n9b:a-dman-HEX-1:5\\n10b:a-dman-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5o(3+1)6d\\n6:6o(2+1)7d\\n7:5o(6+1)8d\\n8:8o(3+1)9d\\n9:8o(6+1)10d\"\n    },\n\n    ocore1: {\n        glycoct: \"RES\\n1b:a-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\"\n    },\n\n    ocore2: {\n        glycoct: \"RES\\n1b:a-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:b-dglc-HEX-1:5\\n5s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:1o(6+1)4d\\n4:4d(2+1)5n\"\n    },\n\n    ocore3: {\n        glycoct: \"RES\\n1b:a-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3d(2+1)4n\"\n    },\n\n    ocore4: {\n        glycoct: \"RES\\n1b:a-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dglc-HEX-1:5\\n6s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3d(2+1)4n\\n4:1o(6+1)5d\\n5:5d(2+1)6n\"\n    },\n\n    ocore5: {\n        glycoct: \"RES\\n1b:a-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:a-dgal-HEX-1:5\\n4s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3d(2+1)4n\"\n    },\n\n    ocore6: {\n        glycoct: \"RES\\n1b:a-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(6+1)3d\\n3:3d(2+1)4n\"\n    },\n\n    ocore7: {\n        glycoct: \"RES\\n1b:a-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:a-dgal-HEX-1:5\\n4s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(6+1)3d\\n3:3d(2+1)4n\"\n    },\n\n    ocore8: {\n        glycoct: \"RES\\n1b:a-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:a-dgal-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\"\n    },\n\n    gslarthro: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dman-HEX-1:5\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dgal-HEX-1:5\\n6s:n-acetyl\\nLIN\\n1:1o(4+1)2d\\n2:2o(3+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\\n5:5d(2+1)6n\"\n    },\n\n    gslgala: {\n        glycoct: \"RES\\n1b:a-dgal-HEX-1:5\\n2b:a-dgal-HEX-1:5\\nLIN\\n1:1o(4+1)2d\"\n    },\n\n    gslganglio: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:b-dgal-HEX-1:5\\n4s:n-acetyl\\n5b:b-dgal-HEX-1:5\\nLIN\\n1:1o(4+1)2d\\n2:2o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(3+1)5d\"\n    },\n\n    gslglobo: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:a-dgal-HEX-1:5\\n4b:b-dgal-HEX-1:5\\n5s:n-acetyl\\nLIN\\n1:1o(4+1)2d\\n2:2o(4+1)3d\\n3:3o(3+1)4d\\n4:4d(2+1)5n\"\n    },\n\n    gslisoglobo: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:a-dgal-HEX-1:5\\n4b:b-dgal-HEX-1:5\\n5s:n-acetyl\\nLIN\\n1:1o(4+1)2d\\n2:2o(3+1)3d\\n3:3o(3+1)4d\\n4:4d(2+1)5n\"\n    },\n\n    gsllacto: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dgal-HEX-1:5\\nLIN\\n1:1o(4+1)2d\\n2:2o(3+1)3d\\n3:3d(2+1)4n\\n4:3o(3+1)5d\"\n    },\n\n    gslmollu: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dman-HEX-1:5\\n3b:a-dman-HEX-1:5\\n4b:b-dglc-HEX-1:5\\n5s:n-acetyl\\nLIN\\n1:1o(4+1)2d\\n2:2o(3+1)3d\\n3:3o(2+1)4d\\n4:4d(2+1)5n\"\n    },\n\n    gslmuco: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:b-dgal-HEX-1:5\\n4b:b-dgal-HEX-1:5\\nLIN\\n1:1o(4+1)2d\\n2:2o(4+1)3d\\n3:3o(3+1)4d\"\n    },\n\n    gslneolacto: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dgal-HEX-1:5\\nLIN\\n1:1o(4+1)2d\\n2:2o(3+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\"\n    },\n\n    gaghyaluronic: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5|6:a\\n4b:b-dglc-HEX-1:5\\n5s:n-acetyl\\n6b:b-dglc-HEX-1:5|6:a\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(4+1)4d\\n4:4d(2+1)5n\\n5:4o(3+1)6d\"\n    },\n\n    gagchodroitin4: {\n        glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5|6:a\\n4b:b-dgal-HEX-1:5\\n5s:n-acetyl\\n6b:b-dglc-HEX-1:5|6:a\\n7s:sulfate\\n8s:sulfate\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(4+1)4d\\n4:4d(2+1)5n\\n5:4o(3+1)6d\\n6:4o(4+-1)7n\\n7:1o(4+-1)8n\"\n    },\n\n    gagchodroitin6: {\n        glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5|6:a\\n4b:b-dgal-HEX-1:5\\n5s:n-acetyl\\n6b:b-dglc-HEX-1:5|6:a\\n7s:sulfate\\n8s:sulfate\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(4+1)4d\\n4:4d(2+1)5n\\n5:4o(3+1)6d\\n6:4o(6+-1)7n\\n7:1o(6+-1)8n\"\n    },\n\n    gagchodroitin26: {\n        glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5|6:a\\n4s:sulfate\\n5b:b-dgal-HEX-1:5\\n6s:n-acetyl\\n7b:b-dglc-HEX-1:5|6:a\\n8s:sulfate\\n9s:sulfate\\n10s:sulfate\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(2+-1)4n\\n4:3o(4+1)5d\\n5:5d(2+1)6n\\n6:5o(3+1)7d\\n7:7o(2+-1)8n\\n8:5o(6+-1)9n\\n9:1o(6+-1)10n\"\n    },\n\n    gagchodroitin46: {\n        glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dglc-HEX-1:5|6:a\\n4b:b-dgal-HEX-1:5\\n5s:n-acetyl\\n6b:b-dglc-HEX-1:5|6:a\\n7s:sulfate\\n8s:sulfate\\n9s:sulfate\\n10s:sulfate\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(4+1)4d\\n4:4d(2+1)5n\\n5:4o(3+1)6d\\n6:4o(4+-1)7n\\n7:4o(6+-1)8n\\n8:1o(4+-1)9n\\n9:1o(6+-1)10n\"\n    },\n\n    gagdermatan: {\n        glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dido-HEX-1:5|6:a\\n4b:b-dgal-HEX-1:5\\n5s:n-acetyl\\n6b:b-dido-HEX-1:5|6:a\\n7s:sulfate\\n8s:sulfate\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(4+1)4d\\n4:4d(2+1)5n\\n5:4o(3+1)6d\\n6:4o(4+-1)7n\\n7:1o(4+-1)8n\"\n    },\n\n    gagkeratan: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:b-dglc-HEX-1:5\\n5s:n-acetyl\\n6b:b-dgal-HEX-1:5\\n7s:sulfate\\n8s:sulfate\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3o(3+1)4d\\n4:4d(2+1)5n\\n5:4o(4+1)6d\\n6:4o(6+-1)7n\\n7:1o(6+-1)8n\"\n    },\n\n    gagheparin: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-sulfate\\n3s:sulfate\\n4b:a-dido-HEX-1:5|6:a\\n5s:sulfate\\n6b:b-dglc-HEX-1:5\\n7s:n-sulfate\\n8s:sulfate\\n9b:a-dido-HEX-1:5|6:a\\n10s:sulfate\\n11s:sulfate\\nLIN\\n1:1d(2+-1)2n\\n2:1o(3+-1)3n\\n3:1o(4+1)4d\\n4:4o(2+-1)5n\\n5:4o(4+1)6d\\n6:6d(2+-1)7n\\n7:6o(3+-1)8n\\n8:6o(4+1)9d\\n9:6o(6+-1)10n\\n10:1o(6+-1)11n\"\n    },\n\n    gagheparan: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:a-dido-HEX-1:5|6:a\\n4s:sulfate\\n5b:b-dglc-HEX-1:5\\n6s:n-sulfate\\n7b:a-dido-HEX-1:5|6:a\\n8s:sulfate\\n9s:sulfate\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3o(2+-1)4n\\n4:3o(4+1)5d\\n5:5d(2+-1)6n\\n6:5o(4+1)7d\\n7:5o(6+-1)8n\\n8:1o(6+-1)9n\"\n    },\n\n    milklac: {\n        glycoct: \"RES\\n1b:x-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\nLIN\\n1:1o(4+1)2d\"\n    },\n\n    milk3fuclac: {\n        glycoct: \"RES\\n1b:x-dglc-HEX-1:5\\n2b:a-lgal-HEX-1:5|6:d\\n3b:b-dgal-HEX-1:5\\nLIN\\n1:1o(3+1)2d\\n2:1o(4+1)3d\"\n    },\n\n    milk2fuclac: {\n        glycoct: \"RES\\n1b:x-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1o(4+1)2d\\n2:2o(2+1)3d\"\n    },\n\n    milkdifuc: {\n        glycoct: \"RES\\n1b:x-dglc-HEX-1:5\\n2b:a-lgal-HEX-1:5|6:d\\n3b:b-dgal-HEX-1:5\\n4b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1o(3+1)2d\\n2:1o(4+1)3d\\n3:3o(2+1)4d\"\n    },\n\n    milktetra: {\n        glycoct: \"RES\\n1b:x-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dgal-HEX-1:5\\nLIN\\n1:1o(4+1)2d\\n2:2o(3+1)3d\\n3:3d(2+1)4n\\n4:3o(3+1)5d\"\n    },\n\n    milkneotetra: {\n        glycoct: \"RES\\n1b:x-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:b-dglc-HEX-1:5\\n4s:n-acetyl\\n5b:b-dgal-HEX-1:5\\nLIN\\n1:1o(4+1)2d\\n2:2o(3+1)3d\\n3:3d(2+1)4n\\n4:3o(4+1)5d\"\n    },\n\n    antigenA: {\n        glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2b:a-lgal-HEX-1:5|6:d\\n3b:a-dgal-HEX-1:5\\n4s:n-acetyl\\nLIN\\n1:1o(2+1)2d\\n2:1o(3+1)3d\\n3:3d(2+1)4n\"\n    },\n\n    antigenB: {\n        glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2b:a-lgal-HEX-1:5|6:d\\n3b:b-dgal-HEX-1:5\\nLIN\\n1:1o(2+1)2d\\n2:1o(3+1)3d\"\n    },\n\n    antigenH: {\n        glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1o(2+1)2d\"\n    },\n\n    antigenCAD: {\n        glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n5s:n-acetyl\\n6b:b-dgal-HEX-1:5\\n7s:n-acetyl\\n8b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n9s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(3+2)4d\\n4:4d(5+1)5n\\n5:3o(4+1)6d\\n6:6d(2+1)7n\\n7:1o(6+2)8d\\n8:8d(5+1)9n\"\n    },\n\n    antigenP: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:a-dgal-HEX-1:5\\n4b:b-dgal-HEX-1:5\\n5s:n-acetyl\\nLIN\\n1:1o(4+1)2d\\n2:2o(4+1)3d\\n3:3o(3+1)4d\\n4:4d(2+1)5n\"\n    },\n\n    antigenPk: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2b:b-dgal-HEX-1:5\\n3b:a-dgal-HEX-1:5\\nLIN\\n1:1o(4+1)2d\\n2:2o(4+1)3d\"\n    },\n\n    antigenSda: {\n        glycoct: \"RES\\n1b:b-dgal-HEX-1:5\\n2b:b-dglc-HEX-1:5\\n3s:n-acetyl\\n4b:b-dgal-HEX-1:5\\n5b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n6s:n-acetyl\\n7b:b-dgal-HEX-1:5\\n8s:n-acetyl\\nLIN\\n1:1o(3+1)2d\\n2:2d(2+1)3n\\n3:2o(4+1)4d\\n4:4o(3+2)5d\\n5:5d(5+1)6n\\n6:4o(4+1)7d\\n7:7d(2+1)8n\"\n    },\n\n    highMannose: {\n        glycoct: \"RES\\n1b:a-dman-HEX-1:5\\n2b:a-dman-HEX-1:5\\nLIN\\n1:1o(2+1)2d\"\n    },\n\n    lacDiNAc: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\"\n    },\n\n    lactoseAmine: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\"\n    },\n\n    neoLactoseAmine: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\"\n    },\n\n    polyLactoseAmine: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:b-dglc-HEX-1:5\\n5s:n-acetyl\\n6b:b-dgal-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3o(3+1)4d\\n4:4d(2+1)5n\\n5:4o(4+1)6d\"\n    },\n\n    sialyllactoNLSa: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n5s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(3+2)4d\\n4:4d(5+1)5n\"\n    },\n\n    sialyllactorNLSb: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n5s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(6+2)4d\\n4:4d(5+1)5n\"\n    },\n\n    sialyllactoNLSc: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n5s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:1o(6+2)4d\\n4:4d(5+1)5n\"\n    },\n\n    disialyllactorNLDS: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n5s:n-acetyl\\n6b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n7s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(3+2)4d\\n4:4d(5+1)5n\\n5:1o(6+2)6d\\n6:6d(5+1)7n\"\n    },\n\n    fucosylatedLacDiNAc: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:a-lgal-HEX-1:5|6:d\\n4b:b-dgal-HEX-1:5\\n5s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:1o(4+1)4d\\n4:4d(2+1)5n\"\n    },\n\n    sialylatedLacDiNAc: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4s:n-acetyl\\n5b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n6s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3d(2+1)4n\\n4:3o(6+2)5d\\n5:5d(5+1)6n\"\n    },\n\n    lewisA: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:1o(4+1)4d\"\n    },\n\n    lewisB: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-lgal-HEX-1:5|6:d\\n5b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(2+1)4d\\n4:1o(4+1)5d\"\n    },\n\n    lewisC: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\"\n    },\n\n    lewisD: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(2+1)4d\"\n    },\n\n    lewisX: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:a-lgal-HEX-1:5|6:d\\n4b:b-dgal-HEX-1:5\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:1o(4+1)4d\"\n    },\n\n    lewisY: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:a-lgal-HEX-1:5|6:d\\n4b:b-dgal-HEX-1:5\\n5b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:1o(4+1)4d\\n4:4o(2+1)5d\"\n    },\n\n    sialylLewisA: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n5s:n-acetyl\\n6b:a-lgal-HEX-1:5|6:d\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:3o(3+2)4d\\n4:4d(5+1)5n\\n5:1o(4+1)6d\"\n    },\n\n    sialylLewisX: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:a-lgal-HEX-1:5|6:d\\n4b:b-dgal-HEX-1:5\\n5b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n6s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(3+1)3d\\n3:1o(4+1)4d\\n4:4o(3+2)5d\\n5:5d(5+1)6n\"\n    },\n\n    VIM2: {\n        glycoct: \"RES\\n1b:b-dglc-HEX-1:5\\n2s:n-acetyl\\n3b:b-dgal-HEX-1:5\\n4b:a-dgro-dgal-NON-2:6|1:a|2:keto|3:d\\n5s:n-acetyl\\nLIN\\n1:1d(2+1)2n\\n2:1o(4+1)3d\\n3:3o(3+2)4d\\n4:4d(5+1)5n\"\n    }\n\n    }\n);\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/dictionary/Structures.js","/**\n * Author:  Davide Alocci\n * Version: 0.0.1\n */\nimport Edge from '../../dataStructure/GraphEdge';\nimport AcceptorPosition from '../dictionary/AcceptorPosition';\nimport DonorPosition from '../dictionary/DonorPosition';\n\nexport default class GlycosidicLinkage extends Edge{\n\n    constructor(id, sourceNode, targetNode, acceptorPosition, donorPosition){\n\n        super(id,sourceNode,targetNode);\n\n        if(acceptorPosition instanceof AcceptorPosition){\n            this._acceptorPosition= acceptorPosition;\n        } else if(typeof acceptorPosition == 'undefined') {\n            this._acceptorPosition = AcceptorPosition.UNDEFINED;\n        } else {\n            throw \"The Acceptor Position must be AcceptorPosition type. Please use the enum under src/js/glycomics/dictionary/AcceptorPosition.js\";\n        }\n\n        if(donorPosition instanceof DonorPosition){\n            this._donorPosition = donorPosition;\n        } else if(typeof donorPosition == 'undefined') {\n            this._donorPosition = DonorPosition.UNDEFINED;\n        } else {\n            throw \"The Donor Position must be DonorPosition type. Please use the enum under src/js/glycomics/dictionary/DonorPosition.js\";\n        }\n    }\n\n    get acceptorPosition(){\n        return this._acceptorPosition;\n    }\n\n    get donorPosition(){\n        return this._donorPosition;\n    }\n\n    set acceptorPosition(acceptorPosition){\n        if(acceptorPosition instanceof AcceptorPosition) {\n            this._acceptorPosition = acceptorPosition;\n        } else {\n            throw \"The Donor Position must be AcceptorPosition type. Please use the enum under src/js/glycomics/dictionary/AcceptorPosition.js\";\n        }\n        return acceptorPosition;\n    }\n\n    set donorPosition(donorPosition){\n        if(donorPosition instanceof DonorPosition) {\n            this._donorPosition = donorPosition;\n        } else {\n            throw \"The Donor Position must be DonorPosition type. Please use the enum under src/js/glycomics/dictionary/DonorPosition.js\";\n        }\n        return donorPosition;\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/linkages/GlycosidicLinkage.js","/**\n * Author:  Davide Alocci\n * Version: 0.0.1\n */\nimport Edge from '../../dataStructure/GraphEdge';\nimport DonorPosition from '../dictionary/DonorPosition';\n\n\nexport default class SubstituentLinkage extends Edge{\n    constructor(id,target,source,donorPosition){\n        super(id,target,source);\n\n        if(donorPosition instanceof DonorPosition){\n            this._donorPosition = donorPosition;\n        } else if(typeof donorPosition == 'undefined') {\n            this._donorPosition = DonorPosition.UNDEFINED;\n        } else {\n            throw \"The Donor Position must be DonorPosition type. Please use the enum under src/js/glycomics/dictionary/DonorPosition.js\";\n        }\n    }\n\n    get donorPosition(){\n        return this._donorPosition;\n    }\n\n    set donorPosition(donorPosition){\n        if(donorPosition instanceof DonorPosition) {\n            this._donorPosition = donorPosition;\n        } else {\n            throw \"The Donor Position must be DonorPosition type. Please use the enum under src/js/glycomics/dictionary/DonorPosition.js\";\n        }\n        return donorPosition;\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/linkages/SubstituentLinkage.js","/**\n * Author:  Davide Alocci\n * Version: 0.0.1\n */\n\nimport Node from '../../dataStructure/GraphNode';\nimport Anomericity from '../dictionary/Anomericity';\nimport Isomer from '../dictionary/Isomer';\nimport RingType from '../dictionary/RingType';\nimport MonosaccharideType from '../../../views/glycomics/dictionary/MonosaccharideType';\n\nexport default class Monosaccharide extends Node{\n\n    constructor(id,monosaccharideType,anomericity,isomer,ringType){\n        super(id);\n\n        if(monosaccharideType instanceof MonosaccharideType){\n            this._monosaccharideType = monosaccharideType;\n        } else if(typeof monosaccharideType == 'undefined') {\n            this._monosaccharideType = MonosaccharideType.UNDEFINED;\n        } else{\n            throw 'Please use the MonosaccharideType class and forget about string. Extend the enum if you need a specific value';\n        }\n\n        if(anomericity instanceof Anomericity){\n            this._anomericity = anomericity;\n        } else if(typeof anomericity == 'undefined') {\n            this._anomericity = Anomericity.UNDEFINED;\n        } else {\n            throw 'Please use the Anomericity class and forget about string. Extend the enum if you need a specific value';\n        }\n\n        if(isomer instanceof Isomer){\n            this._isomer = isomer;\n        } else if(typeof isomer == 'undefined') {\n            this._isomer = Isomer.UNDEFINED;\n        } else {\n            throw 'Please use the Isomer class and forget about string. Extend the enum if you need a specific value';\n        }\n\n        if(ringType instanceof RingType){\n            this._ringType = ringType;\n        } else if(typeof ringType == 'undefined') {\n            this._ringType = RingType.UNDEFINED;\n        } else{\n            throw 'Please use the RingType class and forget about string. Extend the enum if you need a specific value';\n        }\n\n    }\n\n    get ringType(){\n        return this._ringType;\n    }\n\n    get monosaccharideType(){\n        return this._monosaccharideType;\n    }\n\n    get isomer(){\n        return this._isomer;\n    }\n\n    get anomericity(){\n        return this._anomericity;\n    }\n\n    set ringType(ringType){\n        if(ringType instanceof RingType){\n            this._ringType = ringType;\n        } else{\n            throw 'Please use the RingType class and forget about string. Extend the enum if you need a specific value';\n        }\n    }\n\n    set monosaccharideType(monosaccharideType){\n        if(monosaccharideType instanceof MonosaccharideType){\n            this._monosaccharideType = monosaccharideType;\n        } else{\n            throw 'Please use the MonosaccharideType class and forget about string. Extend the enum if you need a specific value';\n        }\n    }\n\n    set isomer(isomer){\n        if(isomer instanceof Isomer){\n            this._isomer = isomer;\n        } else {\n            throw 'Please use the Isomer class and forget about string. Extend the enum if you need a specific value';\n        }\n    }\n\n    set anomericity(anomericity){\n        if(anomericity instanceof Anomericity){\n            this._anomericity = anomericity;\n        } else {\n            throw 'Please use the Anomericity class and forget about string. Extend the enum if you need a specific value';\n        }\n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/nodes/Monosaccharide.js","/**\n * Author:  Davide Alocci\n * Version: 0.0.1\n */\n\nimport Node from '../../dataStructure/GraphNode';\nimport SubstituentType from '../dictionary/SubstituentType';\n\nexport default class Substituent extends Node{\n\n    constructor(id,substituentType){\n        super(id);\n\n        if(substituentType instanceof SubstituentType){\n            this._substituentType = substituentType;\n        } else if(typeof substituentType == 'undefined') {\n            this._substituentType = SubstituentType.UNDEFINED;\n        } else{\n            throw 'Please use the SubstituentType class and forget about string. Extend the enum if you need a specific value';\n        }\n    }\n\n    get substituentType(){\n        return this._substituentType;\n    }\n\n    set substituentType(substituentType){\n        if(substituentType instanceof SubstituentType){\n            this._substituentType = substituentType;\n        } else{\n            throw 'Please use the SubstituentType class and forget about string. Extend the enum if you need a specific value';\n        }\n    }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/nodes/Substituent.js","/**\n * Author:  Davide Alocci\n * Version: 0.0.1\n *\n *\n * TODO: We need to add something to freeze the Glycan structure.\n * At the moment all the attributes are mutable unless ids with targets and sources.\n *\n */\nimport Monosaccharide from './nodes/Monosaccharide';\nimport Substituent from './nodes/Substituent';\nimport GlycosidicLinkage from './linkages/GlycosidicLinkage';\nimport SubstituentLinkage from './linkages/SubstituentLinkage';\nimport Graph from '../dataStructure/Graph';\n\nexport default class Glycan{\n\n    constructor(id,rootNode){\n        if (typeof id !== 'string' && typeof id !== 'number'){\n            throw 'The glycan must have a string or number id.';\n        } else {\n            this.id = id;\n        }\n\n        this.rootSet = false;\n        //Wrapping of Sigma.js graph datastructure.\n        this.graph = new Graph.graph();\n\n        if (rootNode instanceof Monosaccharide){\n            this.rootNode = rootNode;\n            try{\n                this.graph.addNode(rootNode);\n            } catch(err){\n                throw 'Error adding node: '+err;\n            }\n\n            this.rootSet = true;\n        } else if(typeof rootNode !== 'undefined'){\n            throw 'The Root Node cannot be undefined or a Monosaccharide ';\n        }\n\n    }\n\n    /**\n     * Chech if the root of the Glycan is set.\n     * @returns {boolean}\n     */\n\n    rootIsSet(){\n        return this.rootSet;\n    }\n\n    /**\n     * Get the Glycan Id\n     * @returns {string} Glycan Id\n     */\n\n    getGlycanId(){\n        return this.id;\n    }\n\n    /**\n     * Get the root node. Can only be a Monosaccharide\n     * @returns {Monosaccharide} Root Monosaccharide\n     */\n\n    getRootNode(){\n        return this.rootNode;\n    }\n\n    /**\n     * Set the root node. Can only be a Monosaccharide\n     * @param {Monosaccharide} rootNode The root node\n     * @returns {Monosaccharide} The root node\n     */\n    setRootNode(rootNode){\n        if (!(rootNode instanceof Monosaccharide)){\n            throw 'The Root Node can be only a Monosaccharide ';\n        }\n\n        if (this.rootIsSet()){\n            throw 'The Root Node can only be set once. Create a new Glycan object.';\n        }\n\n        this.rootNode = rootNode;\n        this.graph.addNode(rootNode);\n        this.rootSet = true;\n        return rootNode;\n    }\n\n    /**\n     * Return the Node with the id specified by the user otherwise throw an error.\n     * @param {string} id The node id\n     * @returns {*} return a node object (Monosaccharide or Substituent in our case).\n     */\n\n    getNodeById(id){\n        try{\n            var node = this.graph.nodes(id);\n            if(node)\n                return node;\n        } catch (err){\n            throw 'Error: '+ err;\n        }\n        throw 'Error: The node does not exist';\n    }\n\n    /**\n     * Return the Edge with the id specified by the user otherwise throw an error.\n     * @param {string} id The Edge id\n     * @returns {*} return a linkage(edge) object (GlycosidicLinkage or SubstituentLinkage in our case).\n     */\n    getEdgeById(id){\n        try{\n            var edge = this.graph.edges(id);\n            if(edge)\n                return edge;\n        } catch (err){\n            throw 'Error: '+ err;\n        }\n        throw 'Error: The node does not exist';\n    }\n\n    /**\n     * Return the Edge within sourceNode and targetNode\n     * Throw an error if the edge does not exist.\n     * TODO: The for loop can ber removed by creating a new method in the graph.js to get specific edges.\n     * @param {string} id The Edge id\n     * @returns {*} return a linkage(edge) object (GlycosidicLinkage or SubstituentLinkage in our case).\n     */\n    getEdge(sourceNode,targetNode){\n        for( var i = 0; i < this.graph.edges().length; i++){\n            if(this.graph.edges()[i].getEdgeSource() === sourceNode && this.graph.edges()[i].getEdgeTarget() === targetNode){\n                return this.graph.edges()[i];\n            }\n        }\n        throw 'No edge found between the sourceNode and targetNode';\n\n    }\n\n    /**\n     * Return the Monosaccharide with the id specified by the user otherwise throw an error.\n     * @param {string} id The Monosaccharide id\n     * @returns {Monosaccharide} return a Monosaccahride object\n     */\n    getMonosaccharideById(id){\n        var monosaccharide = this.getNodeById(id);\n        if( monosaccharide instanceof Monosaccharide){\n            return monosaccharide;\n        } else {\n            throw 'This method can only return monosaccharide object';\n        }\n    }\n\n    /**\n     * Return the Substituent with the id specified by the user otherwise throw an error.\n     * @param {string} id The Substituent id\n     * @returns {Substituent} return a Substituent object\n     */\n    getSubstituentById(id){\n        var substituent = this.getNodeById(id);\n        if(substituent instanceof Substituent){\n            return substituent;\n        } else {\n            throw 'This method can only return substituent object';\n        }\n    }\n\n\n    /**\n     * Return the GlycosidicLinkage with the id specified by the user otherwise throw an error.\n     * @param {string} id The Edge id\n     * @returns {GlycosidicLinkage} return a GlycosidicLinkage object\n     */\n    getGlycosidicLinkagebyID(id){\n        var glyLinkage = this.getEdgeById(id);\n        if(glyLinkage instanceof GlycosidicLinkage){\n            return glyLinkage;\n        } else {\n            throw 'This method can only return GlycosidicLinkage object';\n        }\n    }\n\n\n    /**\n     * Return the SubstituentLinkage with the id specified by the user otherwise throw an error.\n     * @param {string} id The Edge id\n     * @returns {SubstituentLinkage} return a SubstituentLinkage object\n     */\n    getSubstituentLinkagebyId(id){\n        var subLinkage = this.getEdgeById(id);\n        if(subLinkage instanceof SubstituentLinkage){\n            return subLinkage;\n        } else {\n            throw 'This method can only return SubstituentLinkage object';\n        }\n    }\n\n    /**\n     * Return the GlycosidicLinkage within sourceNode and targhetNode\n     * @param {string} id The Edge id\n     * @returns {GlycosidicLinkage} return a GlycosidicLinkage object\n     */\n    getGlycosidicLinkage(sourceNode,targetNode){\n        var glyLinkage = this.getEdge(sourceNode,targetNode);\n        if(glyLinkage instanceof GlycosidicLinkage){\n            return glyLinkage;\n        } else {\n            throw 'This method can only return GlycosidicLinkage object';\n        }\n    }\n\n    /**\n     * Return the SubstituentLinkage within sourceNode and targhetNode\n     * @param {string} id The Edge id\n     * @returns {SubstituentLinkage} return a SubstituentLinkage object\n     */\n    getSubstituentLinkage(sourceNode,targetNode){\n        var subLinkage = this.getEdgeById(sourceNode,targetNode);\n        if(subLinkage instanceof SubstituentLinkage){\n            return subLinkage;\n        } else {\n            throw 'This method can only return SubstituentLinkage object';\n        }\n    }\n\n\n\n    /**\n     * Add a new Monosaccharide to the Glycan with a pre-built Glycosidic Linkage.\n     * @param {Monosaccharide} childNode The monosaccharide to add\n     * @param {GlycosidicLinkage} glycosidicLinkage The edge to add\n     * @returns {Monosaccharide} The monosaccharide added to the Glycan.\n     */\n\n    addMonosaccharide(childNode,glycosidicLinkage){\n        if(childNode instanceof Monosaccharide && glycosidicLinkage instanceof GlycosidicLinkage){\n            this.graph.addNode(childNode);\n            this.graph.addEdge(glycosidicLinkage);\n        } else{\n            throw 'Error: the childNode must be a Monosaccharide and the Linkage must be a GlycosidicLinkage';\n        }\n\n        return childNode;\n    }\n\n    /**\n     * Add a new Substituent to the Glycan with a pre-built Substituent Linkage\n     * @param {Substituent} childNode The substituent to add\n     * @param {SubstituentLinkage}substituentLinkage The edge to add\n     * @returns {Substituent} The substituent added to the Substituent.\n     */\n\n    addSubstituent(childNode,substituentLinkage){\n        if(childNode instanceof Substituent && substituentLinkage instanceof SubstituentLinkage){\n            try{\n                this.graph.addNode(childNode);\n                this.graph.addEdge(substituentLinkage);\n            } catch (err){\n                throw 'Cannot add node and edge to the graph: ' + err;\n            }\n        } else {\n            throw 'The childNode must be a Substituent and the Linkage must be a SubstituentLinkage';\n        }\n        return childNode;\n    }\n\n    /**\n     * Add a new Monosaccharide to the Glycan without Glycosidic Linkage Object\n     * @param {Node} parentNode The parentNode in the graph.(Monosaccharide or Substituent)\n     * @param {Monosaccharide} childNode The Monosaccharide to add\n     * @param {AcceptorPosition} AcceptorPosition The AcceptorPosition in the Glycosidic Linkage\n     * @param {DonorPosition} donorPosition The donorPosition in the Glycosidic Linkage\n     * @return {GlycosidicLinkage} the linkage created to add the node.\n     */\n    addMonosaccharideWithLinkage(parentNode, childNode, acceptorPosition, donorPosition){\n        if(childNode instanceof Monosaccharide ){\n         try{\n             var glycosidicLinkage = new GlycosidicLinkage('GlyLin:'+parentNode.getId()+'-'+childNode.getId(),parentNode,childNode,acceptorPosition,donorPosition);\n             this.addMonosaccharide(childNode,glycosidicLinkage);\n             return glycosidicLinkage;\n         } catch(err) {\n             throw 'Cannot Create a Glycosidic Linkage: '+ err;\n         }\n        }\n    }\n\n    /**\n     * Add a new Monosaccharide to the Glycan without Glycosidic Linkage Object\n     * @param {Node} parentNode The parentNode in the graph.(Monosaccharide or Substituent)\n     * @param {Substituent} childNode The Monosaccharide to add\n     * @param {DonorPosition} donorPosition The donorPosition in the Glycosidic Linkage\n     * @return {SubstituentLinkage} the linkage created to add the node.\n     */\n\n    addSubstituentWithLinkage(parentNode, childNode, donorPosition){\n        if(childNode instanceof Substituent ){\n            try{\n                var substituentLinkage = new SubstituentLinkage('SubLin:'+parentNode.getId()+'-'+childNode.getId(),parentNode,childNode,donorPosition);\n                this.addSubstituent(childNode, substituentLinkage);\n                return substituentLinkage;\n            } catch(err) {\n                throw 'Cannot Create a Glycosidic Linkage: '+ err;\n            }\n        }\n    }\n    /**\n     * Remove a node from the Glycan graph. This method works with Substituents and Monosaccharides\n     * @param {string} id The id of the node to be removed\n     * @returns {Graph} Updated graph.\n     */\n    removeNodeById(id){\n        try{\n            var updatedGraph = this.graph.dropNode(id);\n            return updatedGraph;\n        } catch (err){\n            throw 'Error removing the Node: '+ err;\n        }\n    }\n\n    /**\n     * Remove a Monosaccharide for the Glycan. It removes all the edges connected to the Monosaccharide.\n     * Be carefull: The children will be detached from the tree.\n     * @param {Monosaccharide} childNode The monosaccharide to be removed\n     * @returns {Graph} Updated graph\n     */\n    removeMonosaccharide(childNode){\n        if(childNode instanceof Monosaccharide){\n            try{\n                var updatedGraph = this.removeNodeById(childNode.id);\n                return updatedGraph;\n            } catch (err){\n                throw 'Error removing Monosaccharide: '+ err;\n            }\n        } else {\n            throw 'This method can remove only monosaccharide from the Glycan';\n        }\n    }\n\n    /**\n     * Remove a Substituent for the Glycan. It removes all the edges connected to the Substituent.\n     * Be carefull: The children will be detached from the tree.\n     * @param {Substituent} childNode The substituent to be removed\n     * @returns {Graph} Updated graph\n     */\n    removeSubstituent(childNode){\n        if(childNode instanceof Substituent){\n            try{\n                var updatedGraph = this.graph.dropNode(childNode.id);\n                return updatedGraph;\n            } catch (err){\n                throw 'Error removing Substituent: '+ err;\n            }\n        } else {\n            throw 'This method can remove only substituent from the Glycan';\n        }\n    }\n\n    /**\n     * Remove a edge from the Glycan graph. This method works with Substituents and Monosaccharides\n     * @param {string} id The id of the linkage to be removed\n     * @returns {Graph} Updated graph.\n     */\n    removeLinkageById(id){\n        try{\n            var updatedGraph = this.graph.dropEdge(id);\n            return updatedGraph;\n        } catch (err){\n            throw 'Error removing the Node: '+ err;\n        }\n    }\n\n    /**\n     * Remove a GlycosidicLinkage for the Glycan.\n     * @param {GlycosidicLinkage} glycosidicLinkage The glycosidicLinkage to be removed\n     * @returns {Graph} Updated graph\n     */\n    removeGlycosidicLinkage(linkage){\n        if(linkage instanceof GlycosidicLinkage){\n            try{\n                var updatedGraph = this.removeLinkageById(linkage.id);\n                return updatedGraph;\n            } catch (err){\n                throw 'Error removing GlycosidicLinkage: '+ err;\n            }\n        } else {\n            throw 'This method can remove only GlycosidicLinkages from the Glycan';\n        }\n    }\n\n    /**\n     * Remove a SubstituentLinkage for the Glycan.\n     * @param {SubstituentLinkage} childNode The substituentLinkage to be removed\n     * @returns {Graph} Updated graph\n     */\n    removeSubstituentLinkage(linkage){\n        if(linkage instanceof SubstituentLinkage){\n            try{\n                var updatedGraph = this.removeLinkageById(linkage.id);\n                return updatedGraph;\n            } catch (err){\n                throw 'Error removing Substituent: '+ err;\n            }\n        } else {\n            throw 'This method can remove only substituent from the Glycan';\n        }\n    }\n\n    /**\n     * This method reads an object and adds a structure.\n     * Please use id root for the root node!\n     * Here is an example:\n     *\n     *   var myGlycan = new Glycan();\n     *   myGlycan.addStructure({\n     *     nodes: [\n     *       {\n     *         id: 'root',\n     *         nodeType: 'Monosaccharide',\n     *         monosaccharideType: ''\n     *         anomericity: '',\n     *         isomer: '',\n     *         ringType: ''\n     *       },\n     *       {\n     *         id: 'n1',\n     *         nodeType: 'Monosaccharide',\n     *         monosaccharideType: ''\n     *         anomericity: '',\n     *         isomer: '',\n     *         ringType: ''\n     *       }\n     *     ],\n     *     edges: [\n     *       {\n     *         id: 'e0',\n     *         source: 'root',\n     *         target: 'n1',\n     *         donorPosition: '',\n     *         acceptorPosition: '',\n     *         linkageType:\n     *       }\n     *     ]\n     *   });\n     *\n     * @param  {object} g The graph object.\n     * @return {object}   The graph instance.\n     */\n    addStructure(structure){\n        var i,\n            a,\n            l;\n\n        a = g.nodes || [];\n        for (i = 0, l = a.length; i < l; i++)\n            this.addNode(a[i]);\n\n        a = g.edges || [];\n        for (i = 0, l = a.length; i < l; i++)\n            this.addEdge(a[i]);\n\n        return this;\n    }\n\n\n    /**\n     * The actual size of the Glycan in terms of nodes.\n     * Each monosaccharide and substituent count as 1\n     * @returns {number} The size of the Glycan\n     */\n    size(){\n        return this.graph.nodes().length;\n    }\n\n    /**\n     * Clear the Glycan object and set Root to undefined.\n     * Only the Id remains set (Id is immutable).\n     */\n    clear(){\n        this.rootSet = false;\n        this.rootNode = undefined;\n        this.graph.clear();\n    }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/Glycan.js","/**\n * Created by Renaud on 17/07/2017.\n */\n\n\nimport DonorPosition from \"./dictionary/DonorPosition\";\nimport AcceptorPosition from \"./dictionary/AcceptorPosition\";\n\nexport default class RepeatingUnit {\n    constructor(id,nodes,min,max,entry,exit,donorPosition,acceptorPosition)\n    {\n        this.id = id;\n        this.nodes = nodes;\n\n        if (min === \"?\") {\n            this.min = min;\n        } else {\n            this.min = parseInt(min);\n        }\n\n        if (max === \"?\") {\n            this.max = max;\n        } else {\n            this.max = parseInt(max);\n        }\n\n        if (donorPosition === \"?\") {\n            this.donorPosition = DonorPosition.UNDEFINED;\n        } else {\n            this.donorPosition = donorPosition;\n        }\n\n        if (acceptorPosition === \"?\") {\n            this.acceptorPosition = AcceptorPosition.UNDEFINED;\n        } else {\n            this.acceptorPosition = acceptorPosition;\n        }\n    }\n\n\n\n}\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/glycomics/RepeatingUnit.js","/**\n * Author:  Davide Alocci\n * Version: 0.0.1\n */\n\nimport Glycan from '../../glycomics/Glycan';\nimport Anomericity from '../../glycomics/dictionary/Anomericity';\nimport MonosaccharideType from \"../../../views/glycomics/dictionary/MonosaccharideType\";\nimport Isomer from \"../../glycomics/dictionary/Isomer\";\nimport RingType from \"../../glycomics/dictionary/RingType\";\nimport SubstituentType from \"../../glycomics/dictionary/SubstituentType\";\nimport Monosaccharide from \"../../glycomics/nodes/Monosaccharide\";\nimport AcceptorPosition from \"../../glycomics/dictionary/AcceptorPosition\";\nimport DonorPosition from \"../../glycomics/dictionary/DonorPosition\";\nimport Substituent from \"../../glycomics/nodes/Substituent\";\nimport SubstituentLinkage from \"../../glycomics/linkages/SubstituentLinkage\";\nimport GlycoCTSubstituents from \"./SubstituentsGlycoCT\";\nimport MonosaccharideGlycoCT from \"./MonosaccharideGlycoCT\";\nimport SubstituentsPositions from \"./SubstituentsPositions\";\nimport RepeatingUnit from \"../../glycomics/RepeatingUnit\";\n\nexport default class GlycoCTParser{\n\n    constructor(formula){\n        this.formula = formula;\n    }\n\n    // Used to generate unique IDs\n    randomString(length) {\n        // Possible chars in the generated string\n        var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghiklmnopqrstuvwxyz'.split('');\n\n        if (! length) { // If no length specified, get a random length\n            length = Math.floor(Math.random() * chars.length);\n        }\n\n        var str = '';\n        for (var i = 0; i < length; i++) { // Add random chars till length is the one specified\n            str += chars[Math.floor(Math.random() * chars.length)];\n        }\n        return str;\n    }\n\n    /**\n     * Gets SubstituentType from name\n     * @param name\n     */\n    getSub(name)\n    {\n        for (var sub of SubstituentType)\n        {\n            if (sub.name === name)\n                return sub;\n        }\n    }\n\n    /**\n     * Get MonosaccharideType from name\n     * @param name\n     */\n    getMono(name)\n    {\n        switch (name)\n        {\n            case \"KdnNAc\":\n                return MonosaccharideType.Neu5Ac;\n            case \"KdnNGc\":\n                return MonosaccharideType.Neu5Gc;\n            case \"KdnN\":\n                return MonosaccharideType.Neu;\n        }\n        for (var mono of MonosaccharideType)\n        {\n            if (mono.name === name)\n                return mono;\n        }\n    }\n\n    /**\n     * Gets MonosaccharideGlycoCT from stemType (e.g glc-HEX) and transform\n     * @param stemType\n     * @param transform\n     * @returns {*}\n     */\n    getMonoType(stemType, transform)\n    {\n        for (var mono of MonosaccharideGlycoCT)\n        {\n            if (mono.glycoct === stemType && mono.transform === transform)\n            {\n                return mono;\n            }\n        }\n        return undefined;\n    }\n\n    /**\n     * Adds one residue to the glycan\n     * @param residue e.g : [\"3b\",\"glc-HEX-1\",\"5\"]\n     * @param donorPosition\n     * @param acceptorPosition\n     * @param repeatingUnit : String\n     * @returns {*}\n     */\n    createResidue(residue, donorPosition, acceptorPosition, repeatingUnit)\n    {\n        // If we generate a Monosaccharide\n        if (residue[0].substring(residue[0].length-1) === \"b\") {\n\n            // Parse anomericity\n            var anomericity;\n            for (var anom of Anomericity)\n            {\n                if (residue[1].substring(0, 1) === \"a\")\n                {\n                    anomericity = Anomericity.ALPHA;\n                }\n                else if (residue[1].substring(0, 1) === \"b\")\n                {\n                    anomericity = Anomericity.BETA;\n                }\n                else\n                {\n                    anomericity = Anomericity.UNDEFINED;\n                }\n            }\n            var dashSplit = residue[1].split(\"-\");\n            var stemType = dashSplit[1]; // Also contains isomer as the first char\n\n            // Parse Isomer\n            var isomer;\n            for (var isom of Isomer)\n            {\n                if (stemType.substring(0, 1) === \"x\")\n                {\n                    isomer = Isomer.UNDEFINED;\n                }\n                if (stemType.substring(0, 1) === isom.name.toLowerCase())\n                {\n                    isomer = isom;\n                }\n            }\n\n\n            var glycoct = residue[1].substring(3,residue[1].length-2);\n            /* As we split on \":\", the first part of the first transformation is stuck with the second part of ring type.\n               e.g: 1b:b-dman-HEX-1:5|6:a\n               -> residue = [\"1b\",\"b-dman-HEX-1\",\"5|6\",\"a\"]\n            */\n            var firstTransform = residue[2].split(\"|\"); // Contains ringType and first part of first transformation\n            var transform = \"\";\n            if (firstTransform.length > 1) // at least one transformation\n            {\n                // We rebuild the whole transformation\n                transform = \"|\" + firstTransform[1];\n                for (var k = 3; k < residue.length; k++)\n                {\n                    transform += \":\"+residue[k];\n                }\n            }\n\n            // Fetch the Monosaccharide type in the database considering the given glycoct + transform combination\n            // First we try the whole name\n            var monoType = this.getMonoType(glycoct, transform);\n            if (monoType === undefined)\n            {\n                // Second, we check if the monosaccharide is among the simple HEX cases (e.g: 1b:b-HEX-1:4 -> they have no stemType, just the superclass HEX)\n                glycoct = residue[1].substring(2,residue[1].length-2);\n                monoType = this.getMonoType(glycoct, transform);\n                if (monoType === undefined)\n                {\n                    // Third, we check if the monosaccharide is among the exceptions for the ring type (Kdn for example include ringType in their formula: 1b:b-lgro-dgal-NON-2:6)\n                    glycoct = residue[1].substring(3) + \":\" + firstTransform[0];\n                    monoType = this.getMonoType(glycoct, transform);\n                    if (monoType === undefined)\n                    {\n                        // Finally, the monosaccharide is not known\n                        monoType = MonosaccharideGlycoCT.Unknown;\n                    }\n                }\n            }\n            monoType = MonosaccharideType[monoType.name];\n\n            // Then we parse the ringType\n            var ringStop = residue[2].substring(0, 1);\n            var ringType;\n            if (ringStop === \"4\")\n            {\n                ringType = RingType.F;\n            }\n            else if (ringStop === \"5\")\n            {\n                ringType = RingType.P;\n            }\n            else\n            {\n                ringType = RingType.UNDEFINED;\n            }\n\n            var nodeId = this.randomString(7);\n            // Creating the monosaccharide object\n            var node = new Monosaccharide(nodeId,monoType, anomericity, isomer, ringType);\n            // Assign to repeatingUnit if the node is in one\n            if (repeatingUnit !== undefined)\n            {\n                node.repeatingUnit = repeatingUnit;\n            }\n            // If donorPosition and acceptorPosition are \"r\", we are building the root\n            if (donorPosition === \"r\" && acceptorPosition === \"r\")\n            {\n                this.glycan = new Glycan(\"Glycan\", node);\n            }\n            else\n            {\n                // Parse the AcceptorPosition\n                var ac;\n                for (var anomC of AcceptorPosition)\n                {\n                    if (acceptorPosition === \"?\")\n                    {\n                        ac = AcceptorPosition.UNDEFINED;\n                    }\n                    if (parseInt(acceptorPosition) === anomC.value)\n                    {\n                        ac = anomC;\n                    }\n                }\n                // Parse the DonorPosition\n                var lc;\n                for (var linkedC of DonorPosition)\n                {\n                    if (donorPosition === \"?\")\n                    {\n                        lc = DonorPosition.UNDEFINED;\n                    }\n                    if (parseInt(donorPosition) === linkedC.value)\n                    {\n                        lc = linkedC;\n                    }\n                }\n                this.glycan.addMonosaccharideWithLinkage(this.clickedNode, node, ac, lc);\n            }\n            // Return the nodeId so we can access the node once it's been created\n            return nodeId;\n        }\n        else if (residue[0].substring(residue[0].length-1) === \"s\") { // We're creating a substituent\n            // Parse the sub name\n            var subName = residue[1];\n            var substituentType;\n            for (var sub of GlycoCTSubstituents) {\n                if (subName === sub.glycoct) {\n                    subName = sub.name;\n                }\n            }\n            for (var subType of SubstituentType) {\n                if (subName.toLowerCase() === subType.name.toLowerCase()) {\n                    substituentType = subType;\n                }\n            }\n\n            // Parse sub's donorPosition\n            var lcs;\n            for (var linkedCS of DonorPosition)\n            {\n                if (donorPosition === \"?\")\n                {\n                    lcs = DonorPosition.UNDEFINED;\n                }\n                if (parseInt(donorPosition) === linkedCS.value)\n                {\n                    lcs = linkedCS;\n                }\n            }\n            var subId = this.randomString(7); // If the Mono-Sub combination has a predefined code, change the monosaccharide\n            // Create substituent Object\n            var substituent = new Substituent(subId,substituentType);\n            // Check if when we add the sub at this particular position we get a new parent monosaccharide type\n            // e.g Gal + NAc(donorPosition=2) => GalNAc\n            var newType = this.getMono(this.clickedNode.monosaccharideType.name + this.getSub(subName).label);\n            if (newType && SubstituentsPositions[newType.name].position == donorPosition) {\n                this.updateNodeType(this.clickedNode, newType);\n            }\n            else\n            {\n                var subLinkage = new SubstituentLinkage(this.randomString(7), this.clickedNode, substituent, lcs);\n                this.glycan.addSubstituent(substituent, subLinkage);\n            }\n        }\n    }\n\n    /**\n     * Find a node in the glycan, and change its type\n     * @param node\n     * @param type\n     */\n    updateNodeType(node, type)\n    {\n        for (var glycanNode of this.glycan.graph.nodes())\n        {\n            if (node === glycanNode)\n            {\n                glycanNode.monosaccharideType = type;\n            }\n        }\n    }\n\n    /**\n     * Main function of the class, used to parse the formula\n     * @returns {*}\n     */\n    parseGlycoCT() {\n        if (this.formula === \"\") {\n            return new Glycan(\"Glycan\");\n        }\n        // Get the text lines under the RES section\n        var res = this.getSection(\"RES\",this.formula);\n        var links;\n        if (! this.formula.split(\"LIN\")[1]) // If the formula is only one node (no link)\n        {\n            if (!res[0]) // wrong formula\n            {\n                return new Glycan(\"Glycan\");\n            }\n            // Create the root (DonorPosition and AcceptorPosition of root are unknwown from GlycoCT formula)\n            this.createResidue(res[0].split(\":\"), \"r\", \"r\");\n            return this.glycan;\n        }\n        else\n        {\n            // Get the text lines under the LIN section\n            links = this.getSection(\"LIN\",this.formula);\n        }\n        // Get the rep section\n        var repSection = this.getSection(\"REP\",this.formula);\n        // Get each rep from the rep section\n        var reps = this.getRepeatingUnit(repSection);\n\n        // This will contain the id of the created nodes\n        var nodesIds = {};\n\n        // This will contain the RepeatingUnit objects, and the nodes that are in it [[RepObject,[nodes...]],...]\n        var repInfo = [];\n\n        // If there are some Repeating Units in the formula\n        if (reps.length != 0)\n        {\n            // Use the function to insert the residues and links lines from the REPS to the main RES section\n            // so that we get rid of the REP section and finally have only RES and LIN sections, with mixed up indices (doesn't matter)\n            var merge = this.mergeRep(reps, res, links);\n            res = merge[0];\n            links = merge[1];\n            repInfo = merge[2];\n        }\n\n        // We finally call the function that reads through the lines and calls the function to create nodes\n        this.generateNodes(links,nodesIds,res, repInfo);\n\n        return this.glycan;\n    }\n\n    /**\n     * Function that inserts the residues and links from the REPs sections into the main RES and LIN sections\n     * Outputs an array of 3 arrays: the new RES section, the new LIN section, repInfo which contains the RepeatingUnit objects and which nodes belongs to them\n     * @param reps\n     * @param res\n     * @param links\n     * @returns {[*,*,*]}\n     */\n    mergeRep(reps,res,links) {\n        var repeatingUnitsObjects = []; // Contains all the instanciated Rep objects\n        var repeatingUnit;\n        var repInfo = {}; // Shows which node is associated to which Rep\n\n        // First merge the RES\n        var finalRes = [];\n        var repUnitRead = 0;\n        var repUnitIndices = {};\n        for (var i in res)\n        {\n            if (res[i].split(\":\")[0].indexOf(\"r\") == -1) // Not a repeating unit\n            {\n                finalRes.push(res[i]);\n            }\n            else\n            {\n                repUnitIndices[parseInt(i)+1] = reps[repUnitRead];\n                finalRes = finalRes.concat(reps[repUnitRead].res);\n                repUnitRead++;\n            }\n        }\n\n        // Then links\n        var finalLinks = [];\n        repUnitRead = 0;\n        var allLinks = [];\n        // STEP 1: Insert all the links\n        for (i in links)\n        {\n            allLinks.push(links[i]);\n            finalLinks.push(links[i]);\n            if (this.isTargetARep(links[i], repUnitIndices)) // target node is a repeating unit\n            {\n                finalLinks = finalLinks.concat(reps[repUnitRead].lin);\n                repUnitRead++;\n            }\n        }\n\n\n\n        // STEP 2: Update the links:\n        // If the target of a link is a repeating unit, change to the first residue of the unit (entering the unit)\n        // If the source is a repeating unit, change to the ending residue (leaving the unit)\n        var repeatingUnitObject;\n        var createdUnits = [];\n        var repNodesIds;\n        for (i in finalLinks)\n        {\n            if (this.isTargetARep(finalLinks[i],repUnitIndices)) // If target is Rep, replace its index by its entry Node\n            {\n                if (!createdUnits.includes(this.getLinkTarget(finalLinks[i]))) {\n                    createdUnits.push(this.getLinkTarget(finalLinks[i]));\n                    repeatingUnit = repUnitIndices[this.getLinkTarget(finalLinks[i])];\n                    repeatingUnitObject = new RepeatingUnit(this.randomString(7),[],repeatingUnit.info.min, repeatingUnit.info.max, repeatingUnit.info.entry,\n                        repeatingUnit.info.exit, repeatingUnit.info.donorPosition, repeatingUnit.info.acceptorPosition);\n                    repNodesIds = this.getRepNodesIds(repeatingUnit.res);\n                    repeatingUnitsObjects.push([repeatingUnitObject,repNodesIds]);\n                }\n                finalLinks[i] = this.updateLinkTarget(finalLinks[i],repUnitIndices[this.getLinkTarget(finalLinks[i])].info.entry);\n            }\n            if (this.isSourceARep(finalLinks[i],repUnitIndices)) // If target is Rep, replace its index by its entry Node\n            {\n                if (!createdUnits.includes(this.getLinkSource(finalLinks[i])))\n                {\n                    createdUnits.push(this.getLinkSource(finalLinks[i]));\n                    repeatingUnit = repUnitIndices[this.getLinkSource(finalLinks[i])];\n                    repeatingUnitObject = new RepeatingUnit(this.randomString(7),[],repeatingUnit.info.min, repeatingUnit.info.max, repeatingUnit.info.entry,\n                        repeatingUnit.info.exit, repeatingUnit.info.donorPosition, repeatingUnit.info.acceptorPosition);\n                    repNodesIds = this.getRepNodesIds(repeatingUnit.res);\n                    repeatingUnitsObjects.push([repeatingUnitObject,repNodesIds]);\n                }\n                finalLinks[i] = this.updateLinkSource(finalLinks[i],repUnitIndices[this.getLinkSource(finalLinks[i])].info.exit);\n            }\n        }\n\n        return [finalRes, finalLinks, repeatingUnitsObjects];\n\n    }\n\n    /**\n     * Get the index of all the nodes within an array of residues. Used to get the nodes in a specific rep\n     * @param res\n     * @returns {Array}\n     */\n    getRepNodesIds(res)\n    {\n        var output = [];\n        for (var r of res)\n        {\n            output.push(r.split(/\\w:/)[0]);\n        }\n        return output;\n    }\n\n\n    getLinkSource(link)\n    {\n        return link.split(/[on]/)[0].split(\":\")[1];\n    }\n\n    getLinkTarget(link)\n    {\n        return link.split(\")\")[1].split(/[dn]/)[0];\n    }\n\n    updateLinkTarget(link, target)\n    {\n        var output = link.split(\")\")[0] + \")\" + target + \"d\";\n        return output;\n    }\n\n    updateLinkSource(link, source)\n    {\n        var output = link.split(\":\")[0] + \":\" + source + \"o\" + link.split(/[on]/)[1];\n        return output;\n    }\n\n    // Checks if the target of the link is a repeating unit in the main RES section\n    isTargetARep(link, repUnitIndices)\n    {\n        var target = link.split(\")\")[1].split(/[dn]/)[0];\n        if (repUnitIndices[target])\n            return true;\n        return false;\n    }\n\n    // Checks if the source of the link is a repeating unit in the main RES section\n    isSourceARep(link, repUnitIndices)\n    {\n        var source = link.split(/[on]/)[0].split(\":\")[1];\n        if (repUnitIndices[source])\n            return true;\n        return false;\n    }\n\n    // Get a node's RepeatingUnit object\n    findMatchingRep(sourceId, repInfo)\n    {\n        for (var pair of repInfo)\n        {\n            if (pair[1].includes(\"\"+sourceId))\n            {\n                return pair[0];\n            }\n        }\n        return undefined;\n    }\n\n    /**\n     * Reads through all the lines\n     * @param links\n     * @param nodesIds\n     * @param res\n     * @param repInfo\n     */\n    generateNodes(links,nodesIds,res,repInfo)\n    {\n        var repeatingUnit;\n        var residueListById = {};\n\n        // Fill in the residueListById array\n        for (var residue of res)\n        {\n            residueListById[residue.split(/\\w:/)[0]] = (residue.split(\":\"));\n        }\n        // Now we read the links to build the whole glycan\n        for (var linkId in links) {\n            if (links[linkId] !== \"\") { // If the link is not empty\n                var link = links[linkId];\n                var sourceId = parseInt(link.split(\":\")[1].split(\"(\")[0]);\n                var nodeId;\n                if (residueListById[sourceId] !== \"\") // The source node hasn't been created, so this is the root\n                {\n                    repeatingUnit = this.findMatchingRep(sourceId, repInfo);\n                    nodeId = this.createResidue(residueListById[sourceId], \"r\", \"r\", repeatingUnit);\n                    residueListById[sourceId] = \"\";\n                    nodesIds[sourceId] = nodeId;\n                }\n                // Then we create the target node of the link\n                var targetId = parseInt(link.split(\")\")[1]);\n                var linkages = link.split(/[\\(\\)]+/)[1];\n                var donorPosition, acceptorPosition;\n                donorPosition = linkages.split(\"+\")[0] === \"-1\" ? \"?\" : linkages.split(\"+\")[0];\n                acceptorPosition = linkages.split(\"+\")[1] === \"-1\" ? \"?\" : linkages.split(\"+\")[1];\n                for (var node of this.glycan.graph.nodes()) { // clickedNode = sourceNode\n                    if (node.id === nodesIds[sourceId]) {\n                        this.clickedNode = node;\n                    }\n                }\n                repeatingUnit = this.findMatchingRep(targetId, repInfo);\n                nodeId = this.createResidue(residueListById[targetId],donorPosition, acceptorPosition, repeatingUnit);\n                residueListById[targetId] = \"\";\n                nodesIds[targetId] = nodeId;\n            }\n        }\n    }\n\n    findNodeById(id)\n    {\n        for (var node of this.glycan.graph.nodes())\n        {\n            if (node.id == id)\n            {\n                return node;\n            }\n        }\n        return undefined;\n    }\n\n    /**\n     * Returns an array of lines that correspond to the entire requested section (RES, LIN, REP...)\n     * @param section\n     * @param formula\n     * @returns {Array}\n     */\n    getSection(section,formula) {\n        const sections = [\"RES\",\"LIN\",\"REP\",\"UND\",\"ALT\"];\n        sections.splice(sections.indexOf(section),1);\n        if (section === \"REP\")\n        {\n            sections.splice(0,2); // Remove RES and LIN because in REP we want to keep them\n        }\n        var formulaArray;\n        if (!(formula instanceof Array))\n        {\n            formulaArray = formula.split(\"\\n\");\n        }\n        else\n        {\n            formulaArray = formula;\n        }\n        var output = [];\n        var flag = false;\n        for (var line of formulaArray)\n        {\n            if (flag && sections.includes(line)) // If other section encountered\n            {\n                return output;\n            }\n            if (line === section) // If the right section is encountered...\n            {\n                if (flag) // Second section word encountered\n                {\n                    return output;\n                }\n                else // .. Only once\n                {\n                    flag = true;\n                }\n            }\n            else\n            {\n                if (flag)\n                {\n                    output.push(line);\n                }\n            }\n        }\n        return output;\n    }\n\n\n    /**\n     * Returns all the infos that we can read from the REP section for every RepeatingUnit\n     * Output : [{\"info\", \"res\", \"lin\"},...]\n     * \"info\": {\"donorPosition\", \"acceptorPosition\", \"min\", \"max\", \"exit\", \"entry\"}\n     * @param array\n     * @returns {Array}\n     */\n    getRepeatingUnit(array)\n    {\n        var info, min, max;\n        var output = [], value = [], key = \"\";\n        for (var line of array)\n        {\n            var split = line.split(/REP\\d+:/);\n            if (split[1])\n            {\n                if (value.length != 0 && key !== \"\")\n                {\n                    min = key.split(\"=\")[1].substring(0,2) == \"-1\" ? \"?\" : key.split(\"=\")[1].split(\"-\")[0];\n                    max = key.substring(key.length-2) == \"-1\" ? \"?\" : key.split(\"-\")[key.split(\"-\").length-1];\n                    info = {\"donorPosition\": key.split(\"(\")[1].split(\"+\")[0], \"acceptorPosition\": key.split(\")\")[0].split(\"+\")[1],\n                        \"min\": min, \"max\": max,\n                        \"exit\":key.split(\"o\")[0], \"entry\":key.split(\")\")[1].split(\"d\")[0]};\n                    output.push({\"info\":info,\"res\":this.getSection(\"RES\",value),\"lin\":this.getSection(\"LIN\",value)});\n                }\n                value = [];\n                key = split[1];\n            }\n            else\n            {\n                value.push(line);\n            }\n        }\n        if (value.length !== 0)\n        {\n            min = key.split(\"=\")[1].substring(0,2) == \"-1\" ? \"?\" : key.split(\"=\")[1].split(\"-\")[0];\n            max = key.substring(key.length-2) == \"-1\" ? \"?\" : key.split(\"-\")[key.split(\"-\").length-1];\n            info = {\"donorPosition\": key.split(\"(\")[1].split(\"+\")[0], \"acceptorPosition\": key.split(\")\")[0].split(\"+\")[1],\n                \"min\": min, \"max\": max,\n                \"exit\":key.split(\"o\")[0], \"entry\":key.split(\")\")[1].split(\"d\")[0]};\n            output.push({\"info\":info,\"res\":this.getSection(\"RES\",value),\"lin\":this.getSection(\"LIN\",value)});\n        }\n        return output;\n    }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/io/glycoCT/GlycoCTParser.js","/**\n * Created by Renaud on 05/07/2017.\n */\n\nimport Substituent from \"../../glycomics/nodes/Substituent\";\nimport SubstituentType from \"../../glycomics/dictionary/SubstituentType\";\nimport GlycosidicLinkage from \"../../glycomics/linkages/GlycosidicLinkage\";\nimport GlycoCTSubstituents from \"./SubstituentsGlycoCT\";\nimport MonosaccharideType from \"../../../views/glycomics/dictionary/MonosaccharideType\";\nimport EdgeComparator from \"../EdgeComparator\";\nimport RepeatingUnit from \"../../glycomics/RepeatingUnit\";\nimport MonosaccharideGlycoCT from \"./MonosaccharideGlycoCT\";\nimport SubstituentLinkage from \"../../glycomics/linkages/SubstituentLinkage\";\nimport SubstituentsPositions from \"./SubstituentsPositions\";\nimport DonorPosition from \"../../glycomics/dictionary/DonorPosition\";\n\nexport default class GlycoCTWriter{\n\n    constructor(glycan,tree){\n        this.glycan = glycan;\n        this.tree = tree;\n        this.res = [];\n        this.rep = [];\n        this.edges = [];\n    }\n\n    randomString(length) {\n        // Possible chars in the generated string\n        var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghiklmnopqrstuvwxyz'.split('');\n\n        if (! length) { // If no length specified, get a random length\n            length = Math.floor(Math.random() * chars.length);\n        }\n\n        var str = '';\n        for (var i = 0; i < length; i++) { // Add random chars till length is the one specified\n            str += chars[Math.floor(Math.random() * chars.length)];\n        }\n        return str;\n    }\n\n    // Get SubstituentType\n    getSub(label)\n    {\n        if (label === \"Gc\")\n        {\n            return SubstituentType.NGlycolyl;\n        }\n        for (var sub of SubstituentType)\n        {\n            if (sub.label.toLowerCase() === label.toLowerCase())\n                return sub;\n        }\n        return undefined;\n    }\n\n    // Get MonosaccharideType\n    getMono(name)\n    {\n        for (var mono of MonosaccharideType)\n        {\n            if (mono.name.toLowerCase() === name.toLowerCase())\n                return mono;\n        }\n    }\n\n    // Add a Substituent residue line to the formula\n    writeSub(i, substituent)\n    {\n        var formula = \"\";\n        // Substituents start with index + \"s\"\n        formula += i+1 + \"s:\";\n        var subName = substituent.substituentType.name;\n        var substituentType = \"\";\n        for (var sub of GlycoCTSubstituents) {\n            if (subName.toLowerCase() === sub.name.toLowerCase()) {\n                substituentType = sub.glycoct;\n            }\n        }\n        if (substituentType === \"\")\n        {\n            for (sub of SubstituentType) {\n                if (subName.toLowerCase() === sub.name.toLowerCase()) {\n                    substituentType = sub.name.toLowerCase();\n                }\n            }\n        }\n        formula += substituentType + \"\\n\";\n        return formula;\n    }\n\n    // Add a substituent link to the formula\n    writeSubLink(i,source, target, donorPosition, acceptorPosition)\n    {\n        var formula = \"\";\n        // Substituent links start with index, and \"d\"\n        formula += i+1 + \":\" + source + \"d\";\n\n        formula += \"(\" + donorPosition;\n        formula += \"+\";\n        formula += acceptorPosition + \")\";\n\n        // They end with \"n\"\n        formula += target + \"n\";\n\n        formula += \"\\n\";\n\n        return formula;\n    }\n\n    // Add a Monosaccharide link to the formula\n    writeMonoLink(i, source, target, donorPosition, acceptorPosition, prefix = \"o\", suffix = \"d\")\n    {\n        var formula = \"\";\n        // Monosaccharide links start by either \"n\" if the source node is ending a Repeating Unit, or \"o\" otherwise\n        formula += i + \":\" + source + prefix;\n\n        formula += \"(\" + donorPosition;\n        formula += \"+\";\n        formula += acceptorPosition + \")\";\n\n        // They end with \"n\" if the target node starts a Repeating Unit, \"d\" otherwise\n        formula += target + suffix;\n\n        formula += \"\\n\";\n\n        return formula;\n    }\n\n\n    // Compares 2 nodes a and b using the EdgeComparator first, then the NodeComparator if we can't decide\n    comparatorFunction(a,b) {\n        if (b === undefined)\n        {\n            return -1;\n        }\n        var comp = new EdgeComparator();\n        var edge1 = this.getLink(a.parent.node.id,a.node.id);\n        var edge2 = this.getLink(b.parent.node.id, b.node.id);\n        return comp.compare(edge1,edge2);\n    }\n\n    // Basic sorting algorithm to sort a node's children to get the right order for the GlycoCT\n    sort(arr) {\n\n        var arr2 = Object.assign({},arr);\n        var len = arr.length;\n\n        for (var i = 0; i < len; i++) {\n            while (i > -1) {\n                if (this.comparatorFunction(arr[i],arr[i + 1]) > 0) {\n                    var temp = arr[i];\n                    arr[i] = arr[i + 1];\n                    arr[i + 1] = temp;\n                    i--;\n                } else {\n                    break;\n                }\n            }\n        }\n        return arr;\n    }\n\n    // Get a link between two nodes whose ids are given\n    getLink(id1, id2)\n    {\n        for (var edge of this.glycan.graph.edges())\n        {\n            if ((edge.source == id1 && edge.target == id2) || (edge.source == id2 && edge.target == id1))\n            {\n                return edge;\n            }\n        }\n    }\n\n    /**\n     * Puts all the info we need in the arrays res, edges and rep\n     * This function is used for the main RES, but also for the RES inside a REP so we have this \"unit\" var to keep track of this\n     * @param root\n     * @param unit: id of the repeating unit if we're writing lines within a rep\n     */\n    generateArrays(root, unit = \"\")\n    {\n        this.res = [];\n        this.edges = [];\n        if (root === undefined)\n        {\n            this.res = [];\n            this.edges = [];\n            this.rep = [];\n            return;\n        }\n        var stack = [];\n        stack.push(root);\n        if (root.node !== undefined)\n        {\n            // We go through the tree\n            while (stack.length > 0)\n            {\n                var node = stack.pop();\n                var nodeUnit = node.node.repeatingUnit;\n                // if (we're not writing for a REP && current node is in no REP) || (we're writing for a REP && the current's node's repeating unit is the unit we're writing for)\n                if (unit === \"\" && nodeUnit === undefined || unit !== \"\" && (nodeUnit !== undefined && nodeUnit.id === unit))\n                {\n                    this.res.push(node);\n                    if (this.res.length > 1) // if we have at least 2 nodes : add link\n                    {\n                        this.edges.push(this.getLink(node.parent.node.id,node.node.id));\n                    }\n                }\n                else\n                {\n                    if (unit === \"\") // we're not writing for a unit\n                    {\n                        if (node.parent !== undefined && node.parent.node.repeatingUnit !== nodeUnit) // If child is the first of the repeating unit\n                        {\n                            this.edges.push(this.getLink(node.parent.node.id,node.node.id));\n                        }\n                        else if (nodeUnit !== undefined)\n                        {\n                            if (node.children !== undefined)\n                            {\n                                // We go through the children, if they are also part of the unit we add the link\n                                for (var rootChild of node.children)\n                                {\n                                    if (rootChild.node.repeatingUnit !== nodeUnit)\n                                    {\n                                        this.edges.push(this.getLink(rootChild.node.id,node.node.id));\n                                    }\n                                }\n                            }\n                        }\n                        // we add the res to the residue list\n                        if (!this.res.includes(nodeUnit))\n                        {\n                            this.res.push(nodeUnit);\n                        }\n                    }\n\n                }\n\n                // Finally we add the children to the stack, in the right order\n                var children = node.children;\n                if (children !== undefined)\n                {\n                    if (children.length > 1)\n                    {\n                        children = this.sort(children);\n                    }\n                    for (var child of children) {\n                        stack.push(child);\n                    }\n                }\n            }\n        }\n        else\n        {\n            this.res = [];\n        }\n    }\n\n    /**\n     * This function writes a RES section (main or in a REP) by reading in the arrays prepared by generateArrays()\n     * @param resId\n     * @param repId\n     * @param res\n     * @param associatedSubs: e.g: GalNAc -> Gal + associatedSub (NAc)\n     * @param repNumber: number of the current REP (REP1, REP2...)\n     * @param offset: when we call it several times, the residues' indices don't start from 0\n     * @returns {[*,*]}\n     */\n    generateRES(resId, repId, res, associatedSubs, repNumber, offset = 0) { // Offset: if we have some Repeating Units, we generate the RES section within the REP\n        // with this function, but the offset will create a continuity with the previous indexes\n        var formula = \"RES\\n\";\n        var i;\n        // For every residue (whether it's a sub, mono, or rep)\n        for (i = 0; i < res.length; i++)\n        {\n            if (res[i] instanceof RepeatingUnit) // If the residue is a REP\n            {\n                formula += i+1+offset + \"r:r\" + repNumber;\n                resId[res[i].id] = i+1+offset;\n                repId[res[i].id] = repNumber;\n                repNumber++;\n                formula += \"\\n\";\n            }\n            else if (res[i].node instanceof Substituent) // If the residue is a sub\n            {\n                formula += this.writeSub(i+offset,res[i].node);\n                resId[res[i].node.id] = i+1+offset;\n            }\n            else // If the residue is a Monosaccharide\n            {\n                resId[res[i].node.id] = i+1+offset;\n                formula += i+1+offset + \"b:\";\n                switch(res[i].node._anomericity.name) {\n                    case \"ALPHA\":\n                        formula += \"a\";\n                        break;\n                    case \"BETA\":\n                        formula += \"b\";\n                        break;\n                    default:\n                        formula += \"x\";\n                        break;\n                }\n                formula += \"-\";\n\n                var resName = res[i].node._monosaccharideType.name;\n\n                // In this function, we'll rename weird Monosaccharides names so we can recognize them more easily.\n                // E.g: Neu5Ac => KdnNAc so we can recognize Kdn and NAc\n                // Nonulosonates exceptions:\n                switch (resName)\n                {\n                    case \"Neu5Ac\":\n                        resName = \"KdnNAc\";\n                        break;\n                    case \"Neu5Gc\":\n                        resName = \"KdnGc\";\n                        break;\n                    case \"Neu\":\n                        resName = \"KdnN\";\n                        break;\n                    case \"MurNGc\":\n                        resName = \"MurGc\";\n                        break;\n                }\n\n                var transform;\n\n                // These types either don't need a specified isomericity or already bear it by default in their glycoct in the database\n                const isoExceptions = [\"Hex\",\"dHex\",\"HexA\",\"HexN\",\"ddHex\",\"HexNAc\",\"dHexNAc\",\"Pen\",\"Oli\",\"Abe\",\"Col\",\"Nonu\",\"LDManHep\",\"DDManHep\"];\n\n                if (!isoExceptions.includes(resName)) // Exceptions\n                {\n                    switch(res[i].node._isomer.name) {\n                        case \"L\":\n                            formula += \"l\";\n                            break;\n                        case \"D\":\n                            formula += \"d\";\n                            break;\n                        default:\n                            formula += \"x\";\n                            break;\n                    }\n                }\n\n                if (MonosaccharideGlycoCT[resName] !== undefined) // if the residue has a defined name\n                {\n                    formula += MonosaccharideGlycoCT[resName].glycoct;\n                    transform = MonosaccharideGlycoCT[resName].transform;\n                }\n                else // It can be that the residue is a Mono+Sub (GalNAc...)\n                {\n                    var monoName, subName, assocSubType, assocSub, donorPosition;\n                    if (MonosaccharideGlycoCT[resName.substring(0,3)] !== undefined) // If the 3 first letters make a monosaccharide\n                    {\n                        // We get the raw monosaccharide type, and we put the substituent in an array to be treated later\n                        monoName = resName.substring(0,3);\n                        subName = resName.substring(3);\n                        formula += MonosaccharideGlycoCT[monoName].glycoct;\n                        transform = MonosaccharideGlycoCT[monoName].transform;\n                        assocSubType = this.getSub(subName);\n                        assocSub = new Substituent(this.randomString(7),assocSubType);\n                        if (SubstituentsPositions[resName] !== undefined) // Should always be defined\n                        {\n                            donorPosition = SubstituentsPositions[resName].position;\n                        }\n                        associatedSubs.push([assocSub,i+1+offset,donorPosition]);\n                    }\n                    else if (MonosaccharideGlycoCT[resName.substring(0,4)] !== undefined) // If the 4 first letters make a monosaccharide. e.g Nonu\n                    {\n                        // See above\n                        monoName = resName.substring(0,4);\n                        subName = resName.substring(4);\n                        formula += MonosaccharideGlycoCT[monoName].glycoct;\n                        transform = MonosaccharideGlycoCT[monoName].transform;\n                        assocSubType = this.getSub(subName);\n                        assocSub = new Substituent(this.randomString(7),assocSubType);\n                        if (SubstituentsPositions[resName] !== undefined) // Should always be defined\n                        {\n                            donorPosition = SubstituentsPositions[resName].position;\n                        }\n                        associatedSubs.push([assocSub,i+1+offset, donorPosition]);\n                    }\n                }\n\n\n                // These exceptions already bear their ringType in their glycoct\n                const ringExceptions = [\"Kdn\", \"KdnNAc\", \"KdnGc\", \"KdnN\", \"Kdo\", \"Fru\"];\n                if (!ringExceptions.includes(resName)) // Ring exceptions\n                {\n                    formula += \"-\";\n                    switch (res[i].node._ringType.name) {\n                        case \"P\":\n                            formula += \"1:5\";\n                            break;\n                        case \"F\":\n                            formula += \"1:4\";\n                            break;\n                        default:\n                            formula += \"x:x\";\n                            break;\n                    }\n                }\n\n                formula += transform;\n\n\n                formula += \"\\n\";\n            }\n\n        }\n        // Finally we treat the associatedSubs\n        for (var pair of associatedSubs)\n        {\n            var associatedSub = pair[0];\n            formula += this.writeSub(i+offset, associatedSub);\n            i++;\n            pair[0] = i;\n        }\n\n        return [i+offset,formula];\n    }\n\n    /**\n     * This function writes a LIN section (main or in a REP) by reading in the arrays prepared by generateArrays()\n     * @param resId\n     * @param associatedSubs: e.g: GalNAc -> Gal + associatedSub (NAc)\n     * @param offset: when we call it several times, the residues' indices don't start from 0\n     * @param unit: if we are writing for a unit\n     * @returns {[*,*]}\n     */\n    generateLIN(resId, associatedSubs, offset = 0, unit = \"\") {\n        var formula = \"\";\n        var i;\n        if (this.res.length + associatedSubs.length > 1)\n        {\n            formula += \"LIN\\n\";\n            var edges = this.edges;\n            var prevSource = 0, prevTarget = 0;\n            for (i = 0; i < edges.length; i++)\n            {\n                // We get the link information\n                var source = (edges[i].sourceNode.repeatingUnit === undefined || unit !== \"\") ? resId[edges[i].sourceNode.getId()] : resId[edges[i].sourceNode.repeatingUnit.id];\n                var donorPosition = edges[i].donorPosition.value === \"undefined\" ? -1 : edges[i].donorPosition.value;\n                var acceptorPosition;\n                if (edges[i] instanceof SubstituentLinkage)\n                    acceptorPosition = 1;\n                else if (edges[i].acceptorPosition.value === \"undefined\")\n                    acceptorPosition = 1;\n                else\n                    acceptorPosition = edges[i].acceptorPosition.value;\n\n\n                var target = (edges[i].targetNode.repeatingUnit === undefined || unit !== \"\") ? resId[edges[i].targetNode.getId()] : resId[edges[i].targetNode.repeatingUnit.id];\n\n                if (prevSource !== source || prevTarget !== target) // Cheap fix to this bug: When operating with repeating units, some links are duplicated\n                {\n                    prevSource = source;\n                    prevTarget = target;\n\n                    if (edges[i] instanceof GlycosidicLinkage)\n                    {\n                        var prefix = \"o\";\n                        var suffix = \"d\";\n                        var sourceRep = this.findNodeInTree(this.tree,edges[i].sourceNode).node.repeatingUnit;\n                        var targetRep = this.findNodeInTree(this.tree,edges[i].targetNode).node.repeatingUnit;\n                        // Set the prefix and suffix to get the right ones according to repeating units\n                        if (sourceRep !== targetRep)\n                        {\n                            if (sourceRep !== undefined)\n                            {\n                                prefix = \"n\";\n                            }\n                            if (targetRep !== undefined)\n                            {\n                                suffix = \"n\";\n                            }\n                        }\n                        formula += this.writeMonoLink(i+1+offset, source, target, donorPosition, acceptorPosition, prefix, suffix);\n                    }\n                    else\n                    {\n                        formula += this.writeSubLink(i+offset, source, target, donorPosition, acceptorPosition);\n                    }\n                }\n                else\n                {\n                    offset--; // The following of the cheap fix above: As the link gets duplicated, \"i\" is 1 higher than wanted, so let's decrease \"offset\"\n                }\n\n            }\n\n\n            for (var pair of associatedSubs)\n            {\n                formula += this.writeSubLink(i+offset, pair[1], pair[0]+offset, pair[2], 1);\n                i++;\n            }\n            return [i+offset, formula];\n        }\n        return [0, \"\"];\n    }\n\n\n    findNodeInTree(tree,node1)\n    {\n        var stack = [], node, i;\n        stack.push(tree);\n\n        while (stack.length > 0) {\n            node = stack.pop();\n            if (node.node == node1) {\n                return node;\n            } else if (node.children != undefined) {\n                for (i = 0; i < node.children.length; i += 1) {\n                    stack.push(node.children[i]);\n                }\n            }\n        }\n        return null;\n    }\n\n\n    /**\n     * Main function called from outside the class to return the final formula\n     * @returns {*}\n     */\n    exportGlycoCT() {\n        var resId = {};\n        var repId = {};\n        this.generateArrays(this.tree);\n        var res = this.res;\n        var associatedSubs = [];\n        if (res.length === 0)\n        {\n            return \"\";\n        }\n        var repNumber = 1;\n\n        // RES\n        var resInfo = this.generateRES(resId, repId, res, associatedSubs, repNumber);\n        var formula = resInfo[1];\n        var lastResId = resInfo[0];\n\n        // LIN\n        var linInfo = this.generateLIN(resId, associatedSubs);\n        formula += linInfo[1];\n        var lastLinId = linInfo[0];\n\n\n        // REP\n\n        for (var residue of this.res)\n        {\n            if (residue instanceof RepeatingUnit)\n            {\n                this.rep.push(residue);\n            }\n        }\n        if (this.rep.length !== 0) // if we have REPs\n        {\n            formula += \"REP\\n\";\n            for (var rep of this.rep)\n            {\n                this.generateArrays(this.findRepMinDepth(rep),rep.id);\n                var entryId = lastResId+1;\n                associatedSubs = [];\n                resInfo = this.generateRES(resId,repId,this.res,associatedSubs,repNumber,lastResId);\n                lastResId = resInfo[0];\n                var exitId = lastResId;\n                formula += \"REP\" + repId[rep.id] + \":\" + exitId + \"o(\";\n                formula += rep.donorPosition === DonorPosition.UNDEFINED ? \"-1\" : rep.donorPosition;\n                formula += \"+\";\n                formula += rep.acceptorPosition === AcceptorPosition.UNDEFINED ? \"-1\" : rep.acceptorPosition;\n                formula += \")\" + entryId + \"d=\";\n                formula += rep.min === \"?\" ? \"-1\" : rep.min;\n                formula += \"-\";\n                formula += rep.max === \"?\" ? \"-1\" : rep.max;\n                formula += \"\\n\" + resInfo[1];\n                linInfo = this.generateLIN(resId,associatedSubs,lastLinId,rep.id);\n                lastLinId = linInfo[0];\n                formula += linInfo[1];\n            }\n        }\n\n        if (formula.substring(formula.length-1) == '\\n') // Remove final \\n\n        {\n            formula = formula.substring(0,formula.length-1);\n        }\n\n        return formula;\n    }\n\n    // Returns the node with the minimum depth in tree (aka the entry)\n    findRepMinDepth(rep)\n    {\n        var minVal = rep.nodes[0].depth;\n        var minNode = rep.nodes[0];\n        for (var node of rep.nodes)\n        {\n            if (node.depth < minVal)\n            {\n                minVal = node.depth;\n                minNode = node;\n            }\n        }\n        return minNode;\n    }\n\n\n}\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/io/glycoCT/GlycoCTWriter.js","/**\n * Created by Renaud on 11/07/2017.\n */\n\n/**\n * Created by Renaud on 10/07/2017.\n */\n\nimport NodeComparator from './NodeComparator';\nimport GlycosidicLinkage from \"../glycomics/linkages/GlycosidicLinkage\";\n\nexport default class EdgeComparator {\n\n    constructor() {\n\n    }\n\n\n    compare(e1, e2)\n    {\n        var bondsE1 = this.bonds(e1);\n        var bondsE2 = this.bonds(e2);\n        if (bondsE1 > bondsE2)\n        {\n            return 1;\n        }\n        else if (bondsE1 === bondsE2) {\n            var parentLinkPosE1 = this.parentLinkPos(e1);\n            var parentLinkPosE2 = this.parentLinkPos(e2);\n            if (parentLinkPosE1 > parentLinkPosE2)\n            {\n                return 1;\n            }\n            else if (parentLinkPosE1 === parentLinkPosE2)\n            {\n                var childLinkPosE1 = this.childLinkPos(e1);\n                var childLinkPosE2 = this.childLinkPos(e2);\n                if (childLinkPosE1 > childLinkPosE2)\n                {\n                    return 1;\n                }\n                else if (childLinkPosE1 === childLinkPosE2)\n                {\n                    var linkageTypeE1 = this.linkageType(e1);\n                    var linkageTypeE2 = this.linkageType(e2);\n                    if (linkageTypeE1 > linkageTypeE2)\n                    {\n                        return 1;\n                    }\n                    else if (linkageTypeE1 === linkageTypeE2)\n                    {\n                        return this.compareNodes(e1, e2);\n                    }\n                }\n            }\n        }\n\n        return -1;\n\n    }\n\n    parentLinkPos(edge)\n    {\n        return edge.donorPosition.value === \"undefined\" ? 0 : edge.donorPosition.value;\n    }\n\n    bonds(edge)\n    {\n        return 1; // always 1 bond in our application\n    }\n\n    childLinkPos(edge)\n    {\n        return edge.acceptorPosition.value === \"undefined\" ? 0 : edge.acceptorPosition.value;\n    }\n\n    linkageType(edge)\n    {\n        if (edge instanceof GlycosidicLinkage)\n        {\n            return 1;\n        }\n        else\n        {\n            return 0;\n        }\n    }\n\n    compareNodes(edge1, edge2)\n    {\n        var comp = new NodeComparator();\n        return comp.compare(edge1.targetNode,edge2.targetNode);\n    }\n\n\n}\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/io/EdgeComparator.js","/**\n * Created by Renaud on 10/07/2017.\n */\n\n\nimport EdgeComparator from \"./EdgeComparator\";\nexport default class NodeComparator {\n\n    constructor() {\n\n    }\n\n\n    compare(n1, n2)\n    {\n        var childrenN1 = this.children(n1);\n        var childrenN2 = this.children(n2);\n        if (childrenN1 > childrenN2)\n        {\n            return 1;\n        }\n        else if (childrenN1 === childrenN2) {\n            var longestN1 = this.longestBranch(n1) - n1.depth;\n            var longestN2 = this.longestBranch(n2) - n2.depth;\n            if (longestN1 > longestN2)\n            {\n                return 1;\n            }\n            else if (longestN1 === longestN2)\n            {\n                var terminalsN1 = this.terminals(n1);\n                var terminalsN2 = this.terminals(n2);\n                if (terminalsN1 > terminalsN2)\n                {\n                    return 1;\n                }\n                else if (terminalsN1 === terminalsN2)\n                {\n                    var branchingN1 = this.branching(n1);\n                    var branchingN2 = this.branching(n2);\n                    if (branchingN1 > branchingN2)\n                    {\n                        return 1;\n                    }\n                    else if (branchingN1 === branchingN2)\n                    {\n                        if (n1.node.monosaccharideType.name >= n2.node.monosaccharideType.name)\n                        {\n                            return 1;\n                        }\n                    }\n                }\n            }\n        }\n\n    return -1;\n\n    }\n\n    longestBranch(node)\n    {\n        if (node.children === undefined)\n        {\n            return node.depth;\n        }\n        var depths = [];\n        for (var child of node.children)\n        {\n            depths.push(this.longestBranch(child));\n        }\n        for (var depth of depths)\n        {\n            if (node.depth > depth)\n            {\n                return node.depth;\n            }\n            else\n            {\n                return Math.max.apply(null,depths);\n            }\n        }\n    }\n\n    children(node)\n    {\n        if (node.children === undefined)\n        {\n            return 1;\n        }\n        var nodes = [];\n        for (var child of node.children)\n        {\n            nodes.push(this.children(child));\n        }\n        return nodes.reduce((a, b) => a + b, 0) + 1;\n    }\n\n    terminals(node)\n    {\n        if (node.children === undefined)\n        {\n            return 1;\n        }\n        var nodes = [];\n        for (var child of node.children)\n        {\n            nodes.push(this.terminals(child));\n        }\n        return nodes.reduce((a, b) => a + b, 0);\n    }\n\n    branching(node)\n    {\n        if (node.children === undefined)\n        {\n            return 0;\n        }\n        var branches = [];\n        for (var child of node.children)\n        {\n            branches.push(this.branching(child));\n        }\n        return (node.children.length > 1)? branches.reduce((a, b) => a + b, 0) + 1 : branches.reduce((a, b) => a + b, 0);\n    }\n\n\n}\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/io/NodeComparator.js","/**\n * Created by Renaud on 18/08/2017.\n */\n\nexport default class ImageExporter {\n\n    constructor() {\n\n    }\n\n    get_xml_svg_code(div_svg) {\n        // Get the d3js SVG element\n        var tmp = document.getElementById(div_svg);\n        var svg = tmp.getElementsByTagName(\"svg\")[0];\n\n        // Extract the data as SVG text string\n        var xml = (new XMLSerializer()).serializeToString(svg);\n        return xml.replace('xmlns=\"http://www.w3.org/2000/svg\"', 'xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"');\n\n    }\n\n    get_html_svg_code(div_svg) {\n        // Get the d3js SVG element\n        var tmp = document.getElementById(div_svg);\n        var svg = tmp.getElementsByTagName(\"svg\")[0];\n\n        // Extract the data as SVG text string\n        return svg.innerHTML;\n    }\n\n    show_svg_code(div_svg, div_svg_code) {\n        var svg_xml = get_xml_svg_code(div_svg);\n\n        //Optional: prettify the XML with proper indentations\n        svg_xml = vkbeautify.xml(svg_xml);\n\n        // Set the content of the 
 element with the XML\n//    $(\"#svg_code\").text(svg_xml);\n        $(div_svg_code).text(svg_xml);\n\n        //Optional: Use Google-Code-Prettifier to add colors.\n        //prettyPrint();\n\n    }\n\n    save() {\n\n        var html = this.get_xml_svg_code(\"viz\");\n\n        var imgsrc = 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(html)));\n\n        return imgsrc;\n    }\n\n\n    download(imgsrc) {\n\n        var image = new Image();\n        image.src = imgsrc;\n        image.onload = function () {\n\n            var link = document.createElement(\"a\");\n\n            link.addEventListener('click', function(ev) {\n                link.download = 'glycan.svg';\n                link.href = imgsrc;\n                link.id = \"link_img\";\n            }, false);\n            document.body.appendChild(link);\n\n            link.click();\n        };\n    }\n\n\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/js/models/io/ImageExporter.js"],"sourceRoot":""}
\ No newline at end of file
diff --git a/src/js/views/app.js b/src/js/views/app.js
index 88bc836..b299860 100644
--- a/src/js/views/app.js
+++ b/src/js/views/app.js
@@ -1,3 +1,9 @@
+function usedAsPlugin(){
+    return document.location.search.replace("?", "").toLowerCase().indexOf("plugin") >= 0 
+        && document.location.search.replace("?", "").toLowerCase().indexOf("plugin=false") == -1 
+        && document.location.search.replace("?", "").toLowerCase().indexOf("plugin=0") == -1;
+}
+
 var treeData = {};
 var shapes = {};
 var clickedNode = null;
@@ -7,7 +13,7 @@ var copiedNode = null;
 var rootDonorPosition, rootAcceptorPosition;
 
 const gap = 50; // Distance between two nodes
-const origin = [200, 600];
+const origin = [(usedAsPlugin())?70:200, 600];
 const circleRadius = 15; // Radius of a circle shape
 
 var ctrl; // Boolean if ctrl is held
@@ -170,7 +176,6 @@ function getSelectedNodeIndex(node)
     return -1;
 }
 
-
 var zoomListener = d3.behavior.zoom().scaleExtent([0.1, 3]).on("zoom", zoom);
 
 // Create the svgTree svg with fixed width and height
@@ -178,7 +183,7 @@ var vis = d3.select('#viz')
     .append('svg')
     .attr('id', 'svgTree')
     .attr('width', 1000)
-    .attr('height', 550)
+    .attr('height', (usedAsPlugin())?200:550)
     .call(zoomListener) // Listener for the svg
     .append("svg:g").attr("transform", "translate(50, 20)");
 
diff --git a/src/js/views/eventManager.js b/src/js/views/eventManager.js
index 6166463..5f01cf4 100644
--- a/src/js/views/eventManager.js
+++ b/src/js/views/eventManager.js
@@ -209,12 +209,13 @@ function manageHoverAddNode(menuItem,actions) {
     d3.select("#svgMenu").select("#addNode").remove(); // Remove the add Node rect
     d3.select("#repeatUnit").style("opacity", "0.2"); // Lower opacity of add Structure
     d3.select("#updateNode").style("opacity", "0.2"); // Lower opacity of update Node
+    d3.select("#help").style("opacity", "0.2"); // Lower opacity of update Node
 
     // Add Monosaccharide rect and label
     actions.append("rect")
         .attr("class", "bar choice")
         .attr("id", menuItem.subDivisions[1].division)
-        .attr("width", 1000/6) // Width is 1/6 of the total menu width
+        .attr("width", 1000/8) // Width is 1/6 of the total menu width
         .attr("height", 40) // Height is the same as the menu one
         .attr("x", x) // Place this rect at the same x as the addNode title
         .attr("rx", 15) // Corners for the rect
@@ -238,8 +239,8 @@ function manageHoverAddNode(menuItem,actions) {
     actions.append("rect")
         .attr("class", "bar choice")
         .attr("id", menuItem.subDivisions[0].division)
-        .attr("width", 1000/6).attr("height", 40)
-        .attr("x", 1000/6)
+        .attr("width", 1000/8).attr("height", 40)
+        .attr("x", 1000/8)
         .attr("rx", 15)
         .attr("ry", 15)
         .on("mouseout", function() {
@@ -1187,4 +1188,4 @@ function redrawProgress(prev, newValue = progress)
 {
     d3.select("#progressBar").transition()
     .styleTween("width", function() { return d3.interpolate(prev/7*1000, newValue/7*1000); });
-}
\ No newline at end of file
+}
diff --git a/src/js/views/menu.js b/src/js/views/menu.js
index 93540a5..b266da6 100644
--- a/src/js/views/menu.js
+++ b/src/js/views/menu.js
@@ -15,11 +15,99 @@ var quickRingType = "";
 var quickAcceptorPosition = "";
 
 //var smilesinchiconvertbackendurl = "http://127.0.0.1:8889/getinchismiles.cgi" //local
-var smilesinchiconvertbackendurl = "http://129.194.71.205/cgi-bin/sugarsketcher.cgi" //test
+//var smilesinchiconvertbackendurl = "http://127.0.0.1:8000/convert" //local rest
+//var smilesinchiconvertbackendurl = "http://147.251.253.249/glycoctconverter/convert"; //prod ceitec rest old - deleted VM
+//var smilesinchiconvertbackendurl = "http://129.194.71.205/cgi-bin/sugarsketcher.cgi" //test
+var smilesinchiconvertbackendurl = "https://webchem.ncbr.muni.cz/glyconvert/api/convert"; //prod ceitec rest
+
+function usedAsPlugin(){
+    return document.location.search.replace("?", "").toLowerCase().indexOf("plugin") >= 0 
+        && document.location.search.replace("?", "").toLowerCase().indexOf("plugin=false") == -1 
+        && document.location.search.replace("?", "").toLowerCase().indexOf("plugin=0") == -1;
+}
+
+function convertToSmilesInChIInChIKey(onComplete){  
+    var writer = new sb.GlycoCTWriter(glycan, treeData);
+    var glycoctVal = writer.exportGlycoCT();
+    d3.json(smilesinchiconvertbackendurl)
+        .header("Content-Type", "application/x-www-form-urlencoded")
+        .post("structure=" + encodeURIComponent(glycoctVal), function(error, response){
+            d3.select("#formula").style("display","block");
+            d3.select("#validateFormula").style("display", "none");
+            d3.select("#structuresDiv").style("display", "none");
+            
+            var inchismilesText = "";
+            if("Error" in response){
+                inchismilesText = response.Error;
+            }
+            else{
+                inchismilesText = "InChI=" + response.InChI + "\n\n"
+                + "InChIKey=" + response.InChIKey + "\n\n"
+                + "SMILES=" + response.SMILES
+            }
+            
+            if(onComplete !== undefined){
+                onComplete(inchismilesText);
+            }
+    });
+}
+
+var partnerOrigin = null;
+
+function getDocumentHeight(){
+    var body = document.body,
+    html = document.documentElement;
+
+    return Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight );
+}
+
+window.addEventListener('message', function(e) {
+    console.log(e);
+    if(e.data === undefined || e.data.command === undefined){
+        console.warn("SugarSketcher: Received unknown message via postMessage. Ignoring...");
+        return;
+    }
+    if(partnerOrigin == null){
+        partnerOrigin = e.origin;
+        console.log(`SugarSketcher: Setting partners origin: ${partnerOrigin}`);
+    }
+    switch(e.data.command){
+        case "ping": testCom(e);break;
+        case "import": console.log("SugarSketcher: Importing GlycoCT...");break;
+        case "export": console.log("SugarSketcher: Exporting GlycoCT...");break;
+        case "convertSMILESInChIInChIKey": console.log("SugarSketcher: Converting to SMILES+InChI+InChIKey...");break;
+        case "convertPDB": console.log("SugarSketcher: Converting to PDB...");break;
+        case "getSize": sendMsg("resize", {height: getDocumentHeight()}); break;
+        default: console.warn("SugarSketcher: Received unknown message via postMessage. Ignoring...");break;
+    }
+}, false);
+
+function sendMsg(cmd, data){
+    if(partnerOrigin == null){
+        console.warn("SugarSketcher: Partner origin unknown! Cannot send messages!");
+        return;
+    }
+    window.parent.postMessage({command: cmd, data: data}, partnerOrigin);
+}
+
+function testCom(evt){
+    console.log("in iframe");
+    console.log(evt.data);
+    console.log(evt.origin);
+    window.parent.postMessage(evt.data, evt.origin);
+}
 
 // Function called when document is ready
 
 $(document).ready(function() {
+    if (usedAsPlugin()){
+        $("#header").css("display", "none");
+        $("body").css("margin", "0px");
+        $("#structuresDiv").css("margin-bottom", "0px").css("height", "auto").css("padding-bottom", "5px");
+        $("#savedImg").css("display", "none");
+        $(".canvas").css("margin-top", "0px");
+    }
+    
     progress = 0;
     ctrl = false;
     exporting = false;
@@ -222,6 +310,9 @@ var menuAction = [{
     division: "updateNode",
     display_division: "Update Node",
     subDivisions: "shape"
+},{
+    division: "help",
+    display_division: "Help"
 }];
 
 var menu2Action = [
@@ -248,7 +339,20 @@ var menu2Action = [
         division: "inchismiles",
         display_division: "InChI+InChIKey+SMILES",
     }
+];
+
+if (usedAsPlugin()){
+    menu2Action = [
+        {
+            division: "addStructure",
+            display_division: "Load Structure"
+        },
+        {
+            division: "quickMode",
+            display_division: "Toggle Quick Mode"
+        },
     ];
+}
 
 
 //Managing displaying more rows for subs
@@ -276,7 +380,7 @@ substituentDisplayMore.on("click", function() {
             var currentXLabels = 90; // x to place labels
             var currentXRects = 0; // x to place rects
             moreSubs.selectAll("rect").data(subTypes.slice(currentIndex, currentIndex + 5), function(d){return d;}).enter().append("rect")
-                .attr("width", 180) // 1/5 of the menu
+                .attr("width", 100) // 1/5 of the menu
                 .attr("height", 40) // Fixed height
                 .attr("x",function() {
                     var tmp = currentXRects; // Temporary variable to stock current x of rects
@@ -538,11 +642,11 @@ function updateMenu(chosenDivision) {
     var textNodes2 = labels2.selectAll("text").data(menu2Action);
 
     bars2.enter().append("rect")
-        .attr("width", 1000 / 4)
+        .attr("width", 1000 / (usedAsPlugin()?2:4))
         .attr("height", 40)
         .attr("y", 0)
         .attr("x", function (d, i) {
-            return (1000 / 4) * i;
+            return (1000 / (usedAsPlugin()?2:4)) * i;
         })
         .attr("id", function (d) {
             return d.division;
@@ -572,36 +676,42 @@ function updateMenu(chosenDivision) {
                 d3.select("#copyMsg").style("display", "none");
 
                 d3.select("#structuresDiv").style("display", "block");
+
+                if (usedAsPlugin()){
+                    sendMsg("resize", {
+                        height: getDocumentHeight()
+                    });
+                }
             }
             else if (d.division == "inchismiles")
             {
-                var writer = new sb.GlycoCTWriter(glycan, treeData);
-                var glycoctVal = writer.exportGlycoCT();
-                d3.xhr(smilesinchiconvertbackendurl)
-                    .header("Content-Type", "application/x-www-form-urlencoded")
-                    .post("structure=" + encodeURIComponent(glycoctVal), function(error, response){
-                        d3.select("#formula").style("display","block");
-                        d3.select("#validateFormula").style("display", "none");
-                        d3.select("#structuresDiv").style("display", "none");
-                        var inchismilesText = response.responseText;
-                        $('#formula').val(inchismilesText);
-                        $('#formula').select();
-                        $('#formula').focus();        
-                        try {
-                            var successful = document.execCommand('copy');
-                            d3.select("#copyMsg")
-                                .transition(1000)
-                                .style("color", "green")
-                                .style("opacity", 1)
-                                .text("The formula has been copied to the Clipboard.");
-                        } catch (err) {
-                            d3.select("#copyMsg")
-                                .transition(1000)
-                                .style("color", "black")
-                                .style("opacity", 1)
-                                .text("Please use Ctrl+C.");
-                        }
-                        d3.select("#validateFormula").style("display", "none");
+                d3.select("#formula").style("display","none");
+                d3.select("#validateFormula").style("display", "none");
+                d3.select("#copyMsg").style("display", "none");
+                d3.select("#structuresDiv").style("display", "none");
+                d3.select("#exportImage").style("display", "none");
+
+                d3.select("#loading").style("display", "block");
+                convertToSmilesInChIInChIKey(function(inchismilesText){
+                    $('#formula').val(inchismilesText);
+                    $('#formula').select();
+                    $('#formula').focus();        
+                    try {
+                        var successful = document.execCommand('copy');
+                        d3.select("#copyMsg")
+                            .transition(1000)
+                            .style("color", "green")
+                            .style("opacity", 1)
+                            .text("The formula has been copied to the Clipboard.");
+                    } catch (err) {
+                        d3.select("#copyMsg")
+                            .transition(1000)
+                            .style("color", "black")
+                            .style("opacity", 1)
+                            .text("Please use Ctrl+C.");
+                    }
+                    d3.select("#validateFormula").style("display", "none");
+                    d3.select("#loading").style("display", "none");
                 });
             }
         }).on("mouseover", function (d) {
@@ -620,7 +730,7 @@ function updateMenu(chosenDivision) {
     textNodes2.enter().append("text")
         .attr("class", "label")
         .attr("x", function (d, i) {
-            var barWidth = 250;
+            var barWidth = 1000 / (usedAsPlugin()?2:4);
             return (barWidth * i) + (barWidth / 2);
         })
         .attr("y", function () {
@@ -669,7 +779,11 @@ function updateMenu(chosenDivision) {
                     infosTable.push(d.division);
                     updateMenu(d.division);
                 }
-                else if (d.division == "repeatUnit")
+                else if (d.division == "help"){
+		//Location on the help file
+		    window.open('doc/Tutorial_SugarSketcher_v5.pdf' , '_blank');
+		}               
+		else if (d.division == "repeatUnit")
                 {
                     if (glycan)
                     {
@@ -716,8 +830,8 @@ function updateMenu(chosenDivision) {
                 manageHoverAddNode(d, actions);
                 // Add the two labels for monosaccharide and substituents
                 labels.selectAll("text")[0][0].remove();
-                labels.append("text").attr("class", "label").text(d.subDivisions[1].display_division).attr("x", 1000 / 12).attr("y", 8);
-                labels.append("text").attr("class", "label").text(d.subDivisions[0].display_division).attr("x", 250).attr("y", 8);
+                labels.append("text").attr("class", "labelSmall").text(d.subDivisions[1].display_division).attr("x", 1000/16).attr("y", 11);
+                labels.append("text").attr("class", "label").text(d.subDivisions[0].display_division).attr("x", 20 +1000/6).attr("y", 8);
             }
         });
         textNodes.enter().append("text")
diff --git a/src/views/index.html b/src/views/index.html
index 97c3a91..262e9ac 100644
--- a/src/views/index.html
+++ b/src/views/index.html
@@ -3,11 +3,11 @@
 
     
     SugarSketcher
-    
-    
+    
+    
     
     
-    
+    
     
     
 
@@ -213,14 +213,17 @@
 
 
 
+
 
 
 
-
-
-
-
-
+
+
+
+
+