enabled the docs dir, and filled it with process UML

This commit is contained in:
Mike Kamermans 2013-03-08 13:16:14 -05:00 коммит произвёл Jon Buckley
Родитель 24ae40b60b
Коммит 4513f70d4a
10 изменённых файлов: 2900 добавлений и 1 удалений

1
.gitignore поставляемый
Просмотреть файл

@ -20,7 +20,6 @@ css/transitions.css
css/embed-shell.css
cornfield/config/runtime.json
cornfield/config/versions.json
docs
css/embed.css
templates/basic/style.css
templates/assets/plugins/wikipedia/popcorn.wikipedia.css

358
docs/UML/butter.dashboard.graphml Executable file
Просмотреть файл

@ -0,0 +1,358 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<!--Created by yFiles for Java 2.10-->
<key for="graphml" id="d0" yfiles.type="resources"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
<key for="port" id="d3" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d4"/>
<key attr.name="description" attr.type="string" for="node" id="d5"/>
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key attr.name="Description" attr.type="string" for="graph" id="d7"/>
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<data key="d7"/>
<node id="n0" yfiles.foldertype="group">
<data key="d4"/>
<data key="d6">
<y:ProxyAutoBoundsNode>
<y:Realizers active="0">
<y:GroupNode>
<y:Geometry height="586.9560381770829" width="236.97600000000006" x="-23.488" y="-81.56374484375002"/>
<y:Fill color="#F5F5F5" transparent="false"/>
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="236.97600000000006" x="0.0" y="0.0">USER</y:NodeLabel>
<y:Shape type="roundrectangle"/>
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
<y:BorderInsets bottom="36" bottomF="36.47500000000002" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="2.8421709430404007E-14"/>
</y:GroupNode>
<y:GroupNode>
<y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
<y:Fill color="#F5F5F5" transparent="false"/>
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="59.02685546875" x="-4.513427734375" y="0.0">Folder 1</y:NodeLabel>
<y:Shape type="roundrectangle"/>
<y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
</y:GroupNode>
</y:Realizers>
</y:ProxyAutoBoundsNode>
</data>
<graph edgedefault="directed" id="n0:">
<node id="n0::n0">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.97600000000006" x="-8.488" y="20.315120000000093"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="108.068359375" x="49.45382031250003" y="10.6494140625">get dashboard URL<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n0::n1">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start1">
<y:Geometry height="40.0" width="98.01453568" x="45.99273216" y="-44.18727999999999"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="90.056640625" x="3.9789475274999972" y="10.6494140625">View dashboard<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n0::n2">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.terminator">
<y:Geometry height="40.0" width="206.97600000000006" x="-8.488" y="413.9172933333329"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="92.734375" x="57.12081250000003" y="10.6494140625">Dashboard page<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
</graph>
</node>
<node id="n1" yfiles.foldertype="group">
<data key="d4"/>
<data key="d6">
<y:ProxyAutoBoundsNode>
<y:Realizers active="0">
<y:GroupNode>
<y:Geometry height="586.9560381770829" width="282.336" x="254.6242664999994" y="-81.56374484374999"/>
<y:Fill color="#F5F5F5" transparent="false"/>
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="282.336" x="0.0" y="0.0">CORNFIELD</y:NodeLabel>
<y:Shape type="roundrectangle"/>
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="65" topF="64.50240000000008"/>
</y:GroupNode>
<y:GroupNode>
<y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
<y:Fill color="#F5F5F5" transparent="false"/>
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="59.02685546875" x="-4.513427734375" y="0.0">Folder 2</y:NodeLabel>
<y:Shape type="roundrectangle"/>
<y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
</y:GroupNode>
</y:Realizers>
</y:ProxyAutoBoundsNode>
</data>
<graph edgedefault="directed" id="n1:">
<node id="n1::n0" yfiles.foldertype="group">
<data key="d4"/>
<data key="d6">
<y:ProxyAutoBoundsNode>
<y:Realizers active="0">
<y:GroupNode>
<y:Geometry height="407.0800648437498" width="252.336" x="269.6242664999994" y="83.31222848958303"/>
<y:Fill color="#F5F5F5" transparent="false"/>
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="252.336" x="0.0" y="0.0">Dashboard route in app.js</y:NodeLabel>
<y:Shape type="roundrectangle"/>
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="7" topF="6.872000000000071"/>
</y:GroupNode>
<y:GroupNode>
<y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
<y:Fill color="#F5F5F5" transparent="false"/>
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="59.02685546875" x="-4.513427734375" y="0.0">Folder 3</y:NodeLabel>
<y:Shape type="roundrectangle"/>
<y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
</y:GroupNode>
</y:Realizers>
</y:ProxyAutoBoundsNode>
</data>
<graph edgedefault="directed" id="n1::n0:">
<node id="n1::n0::n0">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.data">
<y:Geometry height="40.0" width="222.336" x="284.6242664999994" y="233.24229333333298"/>
<y:Fill color="#FFCC99" color2="#FF0000" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="193.41015625" x="14.462921875000006" y="10.6494140625">userProjects.push(sanitized(name))<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n0::n1">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.9760000000001" x="292.3042664999994" y="127.5606933333331"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="108.701171875" x="49.137414062500056" y="10.649414062500014">User.findAllProjects<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n0::n2">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="82.94999999999993" width="152.0" x="319.79226649999947" y="392.44229333333294"/>
<y:Fill color="#FFCC99" color2="#FF0000" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="48.103515625" modelName="custom" textColor="#000000" visible="true" width="136.71484375" x="7.642578125" y="17.423242187499966">[JADE templating]
Performs its own
HTML Entity sanitization.<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n0::n3">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.loopLimit">
<y:Geometry height="20.80000000000001" width="156.96640000000002" x="317.3090664999994" y="212.44229333333297"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="128.435546875" x="14.26542656250001" y="1.0494140625000057">for each "doc" in "docs"<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n0::n4">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.loopLimitEnd">
<y:Geometry height="20.80000000000001" width="156.96640000000008" x="317.3090664999994" y="273.242293333333"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="76.48320000000001" y="8.399999999999977">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n0::n5">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.9760000000001" x="292.30426649999936" y="322.44229333333294"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="133.375" x="36.800500000000056" y="10.6494140625">res.render(userProjects)<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
</graph>
</node>
<node id="n1::n1">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.97600000000006" x="292.30426649999936" y="20.315120000000093"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="138.66015625" x="34.157921875000056" y="10.6494140625">app.js // get('/dashboard')<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
</graph>
</node>
<edge id="e0" source="n0::n0" target="n1::n1">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e0" source="n1::n1" target="n1::n0::n1">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="317.77954924252805" y="72.27052466630536"/>
<y:Point x="317.77954924252805" y="113.50252466630539"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::n0::e0" source="n1::n0::n1" target="n1::n0::n3">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="127.05859375" x="-93.52929722070365" y="13.05677592610644">docs = all user projects<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::n0::e1" source="n1::n0::n4" target="n1::n0::n5">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::n0::e2" source="n1::n0::n5" target="n1::n0::n2">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e1" source="n1::n0::n2" target="n0::n2">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n0::e0" source="n0::n1" target="n0::n0">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
</graph>
<data key="d0">
<y:Resources/>
</data>
</graphml>

910
docs/UML/butter.remix.graphml Executable file
Просмотреть файл

@ -0,0 +1,910 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<!--Created by yFiles for Java 2.10-->
<key for="graphml" id="d0" yfiles.type="resources"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
<key for="port" id="d3" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d4"/>
<key attr.name="description" attr.type="string" for="node" id="d5"/>
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key attr.name="Description" attr.type="string" for="graph" id="d7"/>
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<data key="d7"/>
<node id="n0" yfiles.foldertype="group">
<data key="d4"/>
<data key="d6">
<y:ProxyAutoBoundsNode>
<y:Realizers active="0">
<y:GroupNode>
<y:Geometry height="978.0997713132352" width="413.1122334166662" x="527.5765644142232" y="-55.793744843750005"/>
<y:Fill color="#F5F5F5" transparent="false"/>
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="413.1122334166662" x="0.0" y="0.0">CORNFIELD</y:NodeLabel>
<y:Shape type="roundrectangle"/>
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="149" topF="149.0168"/>
</y:GroupNode>
<y:GroupNode>
<y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
<y:Fill color="#F5F5F5" transparent="false"/>
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="59.02685546875" x="-4.513427734375" y="0.0">Folder 2</y:NodeLabel>
<y:Shape type="roundrectangle"/>
<y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
</y:GroupNode>
</y:Realizers>
</y:ProxyAutoBoundsNode>
</data>
<graph edgedefault="directed" id="n0:">
<node id="n0::n0" yfiles.foldertype="group">
<data key="d4"/>
<data key="d6">
<y:ProxyAutoBoundsNode>
<y:Realizers active="0">
<y:GroupNode>
<y:Geometry height="386.7425064694853" width="383.11223341666624" x="542.5765644142232" y="520.5635199999999"/>
<y:Fill color="#F5F5F5" transparent="false"/>
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="383.11223341666624" x="0.0" y="0.0">Remix route in index.js</y:NodeLabel>
<y:Shape type="roundrectangle"/>
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
<y:BorderInsets bottom="50" bottomF="49.905120904969976" left="16" leftF="16.49049599999995" right="0" rightF="0.0" top="4" topF="4.1235840000001645"/>
</y:GroupNode>
<y:GroupNode>
<y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
<y:Fill color="#F5F5F5" transparent="false"/>
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="59.02685546875" x="-4.513427734375" y="0.0">Folder 3</y:NodeLabel>
<y:Shape type="roundrectangle"/>
<y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
</y:GroupNode>
</y:Realizers>
</y:ProxyAutoBoundsNode>
</data>
<graph edgedefault="directed" id="n0::n0:">
<node id="n0::n0::n0">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.data">
<y:Geometry height="40.0" width="321.62173741666635" x="589.0670604142231" y="657.48958484375"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="187.7265625" x="66.94758745833315" y="10.6494140625">project = stringified JSON from DB<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n0::n0::n1">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.data">
<y:Geometry height="40.0" width="321.62173741666624" x="589.0670604142231" y="727.48958484375"/>
<y:Fill color="#FFCC99" color2="#FF0000" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="277.767578125" x="21.927079645833146" y="10.6494140625">projectJSON = sanitizedHTMLinJSON(project.data)<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n0::n0::n2">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="167.3911296" x="574.0670604142231" y="562.0635688437501"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="33.40234375" modelName="custom" textColor="#000000" visible="true" width="146.734375" x="10.3283773" y="3.298828125">User.findById
(finds a project, not a user)<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n0::n0::n3">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.data">
<y:Geometry height="40.0" width="321.62173741666624" x="580.0422411637447" y="802.4009055645153"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="198.748046875" x="61.436845270833146" y="10.6494140625">(further administrative value parsing)<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
</graph>
</node>
<node id="n0::n1">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="167.3911296" x="574.0670604142231" y="450.5635199999999"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="159.314453125" x="4.0383382375" y="10.6494140625">index.js // app.get('api/remix')<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n0::n2">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="103.99279999999999" width="167.3911296" x="559.0670604142231" y="130.59951999999998"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="148.732421875" x="9.3293538625" y="42.645814062499994">/templates/basic/index.html<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
</graph>
</node>
<node id="n1" yfiles.foldertype="group">
<data key="d4"/>
<data key="d6">
<y:ProxyAutoBoundsNode>
<y:Realizers active="0">
<y:GroupNode>
<y:Geometry height="1740.367317439824" width="551.0645644142232" x="-38.488" y="-55.793744843750005"/>
<y:Fill color="#F5F5F5" transparent="false"/>
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="551.0645644142232" x="0.0" y="0.0">USER</y:NodeLabel>
<y:Shape type="roundrectangle"/>
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
<y:BorderInsets bottom="0" bottomF="2.2737367544323206E-13" left="15" leftF="15.0" right="8" rightF="7.919320766934959" top="11" topF="10.626534399999997"/>
</y:GroupNode>
<y:GroupNode>
<y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
<y:Fill color="#F5F5F5" transparent="false"/>
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="59.02685546875" x="-4.513427734375" y="0.0">Folder 1</y:NodeLabel>
<y:Shape type="roundrectangle"/>
<y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
</y:GroupNode>
</y:Realizers>
</y:ProxyAutoBoundsNode>
</data>
<graph edgedefault="directed" id="n1:">
<node id="n1::n0">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.97600000000006" x="-8.488" y="66.60672"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="148.6796875" x="29.148156250000028" y="10.6494140625">src/embed.js // remixClick()<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n1">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.97600000000006" x="-8.488" y="130.59951999999998"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="152.048828125" x="27.463585937500028" y="10.6494140625">window.open( [remix URL] )<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n2">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.97600000000006" x="-8.488" y="194.59231999999997"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="108.736328125" x="49.11983593750003" y="10.6494140625">page loads butter.js<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n3">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.97600000000006" x="-8.488" y="875.5929183136155"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="151.3984375" x="27.788781250000028" y="10.6494140625">build page from JSON reply<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n4">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start1">
<y:Geometry height="40.0" width="80.0" x="55.00000000000003" y="-7.790745600000008"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="67.33984375" x="6.330078125" y="10.6494140625">Press remix<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n5">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.97600000000006" x="-8.488" y="258.58511999999996"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="114.0625" x="46.45675000000003" y="10.6494140625">butter loads config.js<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n6">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.97600000000006" x="-8.488" y="322.57791999999995"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="121.38671875" x="42.79464062500003" y="10.6494140625">config.js loads main.js<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n7">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.97600000000006" x="-8.488" y="450.5635199999999"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="179.412109375" x="13.781945312500028" y="10.6494140625">main.js // loadForSavedDataURL<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n8">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.97600000000006" x="-8.488" y="386.57071999999994"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="147.408203125" x="29.783898437500028" y="10.6494140625">main.js // attemptDataLoad<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n9">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.97600000000006" x="-8.488" y="945.5929183136155"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="102.701171875" x="52.13741406250003" y="10.6494140625">main.js // doImport<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n10">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="59.40000000000009" width="206.97600000000006" x="-8.488" y="1015.5929183136155"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="48.103515625" modelName="custom" textColor="#000000" visible="true" width="127.375" x="39.80050000000003" y="5.648242187500159">project.import()
--&gt;
project.js // _this.import<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n11">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="32.24000000000001" width="202.22105471091427" x="140.93703744454294" y="1104.992918313616"/>
<y:Fill color="#FFCC99" color2="#FF0000" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="192.765625" x="4.727714855457151" y="6.769414062499891">reconstitute sanitized project name <y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n12">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.loopLimit">
<y:Geometry height="16.720000000000027" width="202.22105471091422" x="140.93703744454297" y="1228.129795086912"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="112.71484375" x="44.75310548045712" y="-0.9905859374998727">for each media track<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n13">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.97600000000006" x="-8.488" y="1540.7325796620464"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="68.6875" x="69.14425000000003" y="10.6494140625">useProject()<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n14">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.loopLimitEnd">
<y:Geometry height="16.720000000000027" width="202.22105471091425" x="140.93703744454297" y="1464.3269244332264"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="99.11052735545712" y="6.360000000000127">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n15">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.97600000000006" x="-8.488" y="1629.5735725960737"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="33.40234375" modelName="custom" textColor="#000000" visible="true" width="165.923828125" x="20.526085937500028" y="3.298828125">_this.dispatch( "ready", _this );
(_this is a Butter instance)<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n16">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="24.480000000000018" width="202.22105471091425" x="140.93703744454294" y="1167.232918313616"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="82.046875" x="60.08708985545712" y="2.889414062500009">target injection<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n17">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="24.480000000000018" width="202.22105471091427" x="140.93703744454297" y="1269.329795086912"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="133.73828125" x="34.24138673045712" y="2.889414062500009">media.json = mediaData<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n18">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="24.480000000000018" width="202.22105471091427" x="140.9370374445429" y="1244.849795086912"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="131.376953125" x="35.42205079295712" y="2.889414062500009">project.js // new Media()<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n19">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="24.480000000000018" width="202.22105471091427" x="287.43618893637387" y="1393.1269244332263"/>
<y:Fill color="#FFCC99" color2="#FF0000" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="170.72265625" x="15.749199230457123" y="2.889414062500009">this.sanitizeTrackEventData(...)<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n20">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="24.480000000000018" width="202.22105471091427" x="287.43618893637387" y="1368.6469244332263"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="158.048828125" x="22.086113292957123" y="2.889414062500009">newTrack.addTrackEvent(...)<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n21">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="24.480000000000018" width="202.22105471091427" x="287.43618893637387" y="1344.1669244332263"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="133.029296875" x="34.59587891795712" y="2.889414062500009">newTrack = new Track()<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n22">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.loopLimit">
<y:Geometry height="16.720000000000027" width="202.22105471091427" x="287.43618893637387" y="1327.4469244332263"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="109.38671875" x="46.41716798045712" y="-0.9905859374998727">for each track event<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n23">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.loopLimitEnd">
<y:Geometry height="16.720000000000027" width="202.2210547109143" x="287.4361889363738" y="1417.6069244332261"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="99.11052735545712" y="6.360000000000127">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
</graph>
</node>
<edge id="n1::e0" source="n1::n0" target="n1::n1">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n0::n0::e0" source="n0::n0::n2" target="n0::n0::n0">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="657.7626252142231" y="624.0955637333332"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="94.05859375" x="-71.14362288242614" y="33.3612879598129">if find succeeded<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="29.97573698161712" distanceToCenter="true" position="right" ratio="-10.497267765871484" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n0::n0::e1" source="n0::n0::n0" target="n0::n0::n1">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="554.8218712475569" y="698.10558484375"/>
<y:Point x="554.8218712475569" y="747.48958484375"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e1" source="n1::n4" target="n1::n0">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e0" source="n1::n1" target="n0::n2">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="495.56087145034724" y="150.59951999999998"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e1" source="n0::n2" target="n1::n2">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="497.01925253518726" y="214.59231999999997"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e2" source="n1::n2" target="n1::n5">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e3" source="n1::n5" target="n1::n6">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e2" source="n1::n7" target="n0::n1">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="90.666015625" x="4.553021618163768" y="4.624082982421783">XHR(remixURL)<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="13.974656000000042" distanceToCenter="true" position="right" ratio="-0.4435385625003505" segment="-1"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n0::e0" source="n0::n1" target="n0::n0::n2">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e3" source="n0::n0::n3" target="n1::n3">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="541.1259352083325" y="895.5929183136155"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="71.359375" x="1.923521390941687" y="62.05388720045744">JSON object<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="6.283185307179586" distance="79.98307599482278" distanceToCenter="true" position="left" ratio="-10.724920249502404" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e4" source="n1::n7" target="n1::n3">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="none"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e5" source="n1::n6" target="n1::n8">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e6" source="n1::n8" target="n1::n7">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e7" source="n1::n3" target="n1::n9">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e8" source="n1::n9" target="n1::n10">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e9" source="n1::n10" target="n1::n11">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="95.00000000000003" y="1121.1129183136152"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e10" source="n1::n14" target="n1::n13">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="242.04756480000003" y="1510.9202392627406"/>
<y:Point x="95.00000000000003" y="1510.9202392627406"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e11" source="n1::n10" target="n1::n13">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="13.560992934027354"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="none"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e12" source="n1::n13" target="n1::n15">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n0::n0::e2" source="n0::n0::n1" target="n0::n0::n3">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="554.5288861535257" y="771.3033243073346"/>
<y:Point x="554.5288861535257" y="815.3698245538108"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e13" source="n1::n11" target="n1::n16">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e14" source="n1::n16" target="n1::n12">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e15" source="n1::n17" target="n1::n14">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="dashed" width="1.0"/>
<y:Arrows source="none" target="none"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e16" source="n1::n17" target="n1::n22">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="242.0475648000001" y="1335.8069244332264"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e17" source="n1::n23" target="n1::n14">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="241.71182567423324" y="1425.9669244332263"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
</graph>
<data key="d0">
<y:Resources/>
</data>
</graphml>

801
docs/UML/butter.save.graphml Executable file
Просмотреть файл

@ -0,0 +1,801 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
<!--Created by yFiles for Java 2.10-->
<key for="graphml" id="d0" yfiles.type="resources"/>
<key for="port" id="d1" yfiles.type="portgraphics"/>
<key for="port" id="d2" yfiles.type="portgeometry"/>
<key for="port" id="d3" yfiles.type="portuserdata"/>
<key attr.name="url" attr.type="string" for="node" id="d4"/>
<key attr.name="description" attr.type="string" for="node" id="d5"/>
<key for="node" id="d6" yfiles.type="nodegraphics"/>
<key attr.name="Description" attr.type="string" for="graph" id="d7"/>
<key attr.name="url" attr.type="string" for="edge" id="d8"/>
<key attr.name="description" attr.type="string" for="edge" id="d9"/>
<key for="edge" id="d10" yfiles.type="edgegraphics"/>
<graph edgedefault="directed" id="G">
<data key="d7"/>
<node id="n0" yfiles.foldertype="group">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:ProxyAutoBoundsNode>
<y:Realizers active="0">
<y:GroupNode>
<y:Geometry height="950.0356037326392" width="579.4954730038338" x="305.2542664999994" y="315.59473515624995"/>
<y:Fill color="#F5F5F5" transparent="false"/>
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="579.4954730038338" x="0.0" y="0.0">CORNFIELD</y:NodeLabel>
<y:Shape type="roundrectangle"/>
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
<y:BorderInsets bottom="0" bottomF="2.2737367544323206E-13" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
</y:GroupNode>
<y:GroupNode>
<y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
<y:Fill color="#F5F5F5" transparent="false"/>
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="59.02685546875" x="-4.513427734375" y="0.0">Folder 2</y:NodeLabel>
<y:Shape type="roundrectangle"/>
<y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
</y:GroupNode>
</y:Realizers>
</y:ProxyAutoBoundsNode>
</data>
<graph edgedefault="directed" id="n0:">
<node id="n0::n0">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="152.0" x="320.2542664999994" y="565.4688933333332"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="33.40234375" modelName="custom" textColor="#000000" visible="true" width="142.66796875" x="4.666015625" y="3.298828125">index.js //
app.post('api/publish/:id?')<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n0::n1" yfiles.foldertype="group">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:ProxyAutoBoundsNode>
<y:Realizers active="0">
<y:GroupNode>
<y:Geometry height="595.6330170659725" width="519.058053712167" x="350.69168579166626" y="654.9973218229164"/>
<y:Fill color="#F5F5F5" transparent="false"/>
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="519.058053712167" x="0.0" y="0.0">Publication route in app.js</y:NodeLabel>
<y:Shape type="roundrectangle"/>
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
<y:BorderInsets bottom="21" bottomF="20.721352222222322" left="0" leftF="0.0" right="0" rightF="0.0" top="7" topF="6.872000000000071"/>
</y:GroupNode>
<y:GroupNode>
<y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
<y:Fill color="#F5F5F5" transparent="false"/>
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="59.02685546875" x="-4.513427734375" y="0.0">Folder 3</y:NodeLabel>
<y:Shape type="roundrectangle"/>
<y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
</y:GroupNode>
</y:Realizers>
</y:ProxyAutoBoundsNode>
</data>
<graph edgedefault="directed" id="n0::n1:">
<node id="n0::n1::n0">
<data key="d5"/>
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.data">
<y:Geometry height="40.0" width="291.38916141666624" x="365.69168579166626" y="791.9233866666665"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="187.7265625" x="51.83129945833309" y="10.6494140625">project = stringified JSON from DB<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n0::n1::n1">
<data key="d5"/>
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.data">
<y:Geometry height="40.0" width="291.38916141666624" x="365.69168579166626" y="861.9233866666665"/>
<y:Fill color="#FFCC99" color2="#FF0000" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="271.111328125" x="10.138916645833092" y="10.6494140625">projectData = sanitizedHTMLinJSON(project.data)<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n0::n1::n2">
<data key="d5"/>
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.data">
<y:Geometry height="40.0" width="291.38916141666624" x="365.69168579166626" y="931.9233866666665"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="213.103515625" x="39.14282289583309" y="10.6494140625">popcornString = flat HTML source code<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n0::n1::n3">
<data key="d5"/>
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.9760000000001" x="407.89826649999935" y="1001.9233866666666"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="194.751953125" x="6.112023437500056" y="10.6494140625">writeEmbed( { ... popcornString ...} )<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n0::n1::n4">
<data key="d5"/>
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.9760000000001" x="407.8982664999994" y="1104.9089866666666"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="112.03515625" x="47.470421875000056" y="10.6494140625">writeEmbedShell(...)<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n0::n1::n5">
<data key="d5"/>
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.9760000000001" x="407.8982664999994" y="1174.9089866666666"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="53.353515625" x="76.81124218750006" y="10.6494140625">finished()<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n0::n1::n6">
<data key="d5"/>
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.9760000000001" x="407.8982664999994" y="699.2457866666665"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="89.365234375" x="58.805382812500056" y="10.6494140625">User.findProject<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n0::n1::n7">
<data key="d5"/>
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="82.94999999999993" width="152.0" x="702.7497395038332" y="980.4483866666666"/>
<y:Fill color="#FFCC99" color2="#FF0000" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="48.103515625" modelName="custom" textColor="#000000" visible="true" width="136.71484375" x="7.642578125" y="17.423242187500023">[JADE templating]
Performs its own
HTML Entity sanitization.<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n0::n1::n8">
<data key="d5"/>
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="82.94999999999993" width="152.0" x="702.7497395038332" y="1083.4339866666667"/>
<y:Fill color="#FFCC99" color2="#FF0000" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="48.103515625" modelName="custom" textColor="#000000" visible="true" width="136.71484375" x="7.642578125" y="17.42324218749991">[JADE templating]
Performs its own
HTML Entity sanitization.<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
</graph>
</node>
<node id="n0::n2">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="152.0" x="320.2542664999994" y="352.97119999999995"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="33.40234375" modelName="custom" textColor="#000000" visible="true" width="140.658203125" x="5.6708984375" y="3.298828125">index.js //
app.post('api/project/:id?')<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n0::n3">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="152.0" x="320.2542664999994" y="417.47360000000003"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="33.40234375" modelName="custom" textColor="#000000" visible="true" width="106.720703125" x="22.6396484375" y="3.298828125">User.createProject
User.updateProject<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n0::n4">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="55.0" width="152.0" x="320.2542664999994" y="481.976"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="48.103515625" modelName="custom" textColor="#000000" visible="true" width="128.734375" x="11.6328125" y="3.4482421875">user.js
Project object
save project data to DB<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n0::n5">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.annotation">
<y:Geometry height="182.49769333333325" width="128.0" x="486.8742664999994" y="352.97119999999995"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="48.103515625" modelName="custom" textColor="#000000" visible="true" width="106.71484375" x="10.642578125" y="67.19708885416662">This only saves the
timeline data as
stringified JSON<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:StyleProperties>
<y:Property class="java.lang.Byte" name="com.yworks.flowchart.style.orientation" value="0"/>
<y:Property class="java.lang.Byte" name="LAYER_STYLE_PROPERTY_KEY" value="1"/>
</y:StyleProperties>
</y:GenericNode>
</data>
</node>
</graph>
</node>
<node id="n1" yfiles.foldertype="group">
<data key="d4"/>
<data key="d5"/>
<data key="d6">
<y:ProxyAutoBoundsNode>
<y:Realizers active="0">
<y:GroupNode>
<y:Geometry height="676.2626381770832" width="236.97600000000006" x="-23.488" y="-55.793744843750005"/>
<y:Fill color="#F5F5F5" transparent="false"/>
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="236.97600000000006" x="0.0" y="0.0">USER</y:NodeLabel>
<y:Shape type="roundrectangle"/>
<y:State closed="false" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="15" bottomF="15.0" left="15" leftF="15.0" right="15" rightF="15.0" top="15" topF="15.0"/>
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="15" topF="15.024000000000001"/>
</y:GroupNode>
<y:GroupNode>
<y:Geometry height="50.0" width="50.0" x="0.0" y="60.0"/>
<y:Fill color="#F5F5F5" transparent="false"/>
<y:BorderStyle color="#000000" type="dashed" width="1.0"/>
<y:NodeLabel alignment="right" autoSizePolicy="node_width" backgroundColor="#EBEBEB" borderDistance="0.0" fontFamily="Dialog" fontSize="15" fontStyle="plain" hasLineColor="false" height="22.37646484375" modelName="internal" modelPosition="t" textColor="#000000" visible="true" width="59.02685546875" x="-4.513427734375" y="0.0">Folder 1</y:NodeLabel>
<y:Shape type="roundrectangle"/>
<y:State closed="true" closedHeight="50.0" closedWidth="50.0" innerGraphDisplayEnabled="false"/>
<y:Insets bottom="5" bottomF="5.0" left="5" leftF="5.0" right="5" rightF="5.0" top="5" topF="5.0"/>
<y:BorderInsets bottom="0" bottomF="0.0" left="0" leftF="0.0" right="0" rightF="0.0" top="0" topF="0.0"/>
</y:GroupNode>
</y:Realizers>
</y:ProxyAutoBoundsNode>
</data>
<graph edgedefault="directed" id="n1:">
<node id="n1::n0">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.start1">
<y:Geometry height="40.0" width="80.0" x="55.0" y="-3.3932800000000043"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="38.0" y="18.0">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="70.703125" x="4.6484375" y="10.6494140625">Save project<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n1">
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.97600000000006" x="-8.488" y="352.97119999999995"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" hasText="false" height="4.0" modelName="custom" textColor="#000000" visible="true" width="4.0" x="101.48800000000003" y="18.0">
<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="198.09765625" x="4.439171875000028" y="10.6494140625">butter.cornfield.save(stringified data)<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n2">
<data key="d5"/>
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.97600000000006" x="-8.488" y="66.60672"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="169.392578125" x="18.791710937500028" y="10.6494140625">src/ui/header.js // saveProject()<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n3">
<data key="d5"/>
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.97600000000006" x="-8.488" y="130.59951999999998"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="33.40234375" modelName="custom" textColor="#000000" visible="true" width="204.115234375" x="1.430382812500028" y="3.298828125">src/ui/header.js // prepare()
VIA UserData.authenticationRequired<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n4">
<data key="d5"/>
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.97600000000006" x="-8.488" y="194.59231999999997"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="141.37890625" x="32.79854687500003" y="10.6494140625">src/ui/userdata.js // save()<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n5">
<data key="d5"/>
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="70.39328" width="206.97600000000006" x="-8.488" y="258.58511999999996"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="62.8046875" modelName="custom" textColor="#000000" visible="true" width="118.05859375" x="44.45870312500003" y="3.794296250000002">butter.project.save()
calling
src/core/project.js //
_this.save(_this.data)<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<node id="n1::n6">
<data key="d5"/>
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.process">
<y:Geometry height="40.0" width="206.97600000000006" x="-8.488" y="565.4688933333332"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="181.421875" x="12.777062500000028" y="10.6494140625">butter.cornfield.publish(project id)<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
</graph>
</node>
<node id="n2">
<data key="d5"/>
<data key="d6">
<y:GenericNode configuration="com.yworks.flowchart.cloud">
<y:Geometry height="185.93560000000025" width="206.9760000000001" x="942.6252125076669" y="980.4483866666665"/>
<y:Fill color="#E8EEF7" color2="#B7C9E3" transparent="false"/>
<y:BorderStyle color="#000000" type="line" width="1.0"/>
<y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="66.033203125" x="70.47139843750006" y="83.61721406250012">Amazon S3<y:LabelModel>
<y:SmartNodeLabelModel distance="4.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
</y:ModelParameter>
</y:NodeLabel>
</y:GenericNode>
</data>
</node>
<edge id="n1::e0" source="n1::n0" target="n1::n2">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e1" source="n1::n2" target="n1::n3">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e2" source="n1::n3" target="n1::n4">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e3" source="n1::n4" target="n1::n5">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e4" source="n1::n5" target="n1::n1">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n1::e5" source="n1::n1" target="n1::n6">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="100.05859375" x="-80.02929687499997" y="76.8987881217447">if save succeeded<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n0::e0" source="n0::n2" target="n0::n3">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n0::e1" source="n0::n3" target="n0::n4">
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e0" source="n1::n1" target="n0::n2">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n0::e2" source="n0::n0" target="n0::n1::n6">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n0::n1::e0" source="n0::n1::n6" target="n0::n1::n0">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="94.05859375" x="-77.02929136132872" y="17.031730221353996">if find succeeded<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n0::n1::e1" source="n0::n1::n0" target="n0::n1::n1">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="331.4464966250001" y="832.5393866666665"/>
<y:Point x="331.4464966250001" y="881.9233866666665"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n0::n1::e2" source="n0::n1::n1" target="n0::n1::n2">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="331.4464966250001" y="899.2702232888892"/>
<y:Point x="331.4464966250001" y="951.9233866666665"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n0::n1::e3" source="n0::n1::n2" target="n0::n1::n3">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n0::n1::e4" source="n0::n1::n3" target="n0::n1::n4">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="100.046875" x="-80.02343198632866" y="22.15361342447909">if write succeeded<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="right" ratio="0.5" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n0::n1::e5" source="n0::n1::n4" target="n0::n1::n5">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n0::e3" source="n0::n1::n5" target="n0::n0">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0">
<y:Point x="325.9954118826669" y="1194.9089866666666"/>
<y:Point x="325.9954118826669" y="641.0733333333335"/>
</y:Path>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:EdgeLabel alignment="center" configuration="AutoFlippingLabel" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="33.40234375" modelName="custom" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="53.365234375" x="-83.45043864069811" y="-16.70112075520842">response
formed<y:LabelModel>
<y:SmartEdgeLabelModel autoRotationEnabled="false" defaultAngle="0.0" defaultDistance="10.0"/>
</y:LabelModel>
<y:ModelParameter>
<y:SmartEdgeLabelModelParameter angle="0.0" distance="30.0" distanceToCenter="true" position="center" ratio="0.5" segment="0"/>
</y:ModelParameter>
<y:PreferredPlacementDescriptor angle="0.0" angleOffsetOnRightSide="0" angleReference="absolute" angleRotationOnRightSide="co" distance="-1.0" frozen="true" placement="anywhere" side="anywhere" sideReference="relative_to_edge_flow"/>
</y:EdgeLabel>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n0::n1::e6" source="n0::n1::n3" target="n0::n1::n7">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e1" source="n0::n1::n7" target="n2">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="n0::n1::e7" source="n0::n1::n4" target="n0::n1::n8">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e2" source="n0::n1::n8" target="n2">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
<edge id="e3" source="n1::n6" target="n0::n0">
<data key="d9"/>
<data key="d10">
<y:PolyLineEdge>
<y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
<y:LineStyle color="#000000" type="line" width="1.0"/>
<y:Arrows source="none" target="standard"/>
<y:BendStyle smoothed="false"/>
</y:PolyLineEdge>
</data>
</edge>
</graph>
<data key="d0">
<y:Resources/>
</data>
</graphml>

Двоичные данные
docs/UML/images/butter.dashboard.jpg Executable file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 70 KiB

Просмотреть файл

@ -0,0 +1,151 @@
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill-opacity="1" color-rendering="auto" color-interpolation="auto" stroke="black" text-rendering="auto" stroke-linecap="square" width="591" stroke-miterlimit="10" stroke-opacity="1" shape-rendering="auto" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" height="618" font-family="'Dialog'" font-style="normal" stroke-linejoin="miter" font-size="12" stroke-dashoffset="0" image-rendering="auto">
<!--Generated by ySVG-->
<defs id="genericDefs"/>
<g>
<defs id="defs1">
<linearGradient x1="284.6243" gradientUnits="userSpaceOnUse" x2="506.9603" y1="233.2423" y2="273.2423" id="linearGradient1" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(255,204,153)" offset="0%"/>
<stop stop-opacity="1" stop-color="red" offset="100%"/>
</linearGradient>
<linearGradient x1="292.3043" gradientUnits="userSpaceOnUse" x2="499.2803" y1="127.5607" y2="167.5607" id="linearGradient2" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="319.7923" gradientUnits="userSpaceOnUse" x2="471.7923" y1="392.4423" y2="475.3923" id="linearGradient3" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(255,204,153)" offset="0%"/>
<stop stop-opacity="1" stop-color="red" offset="100%"/>
</linearGradient>
<linearGradient x1="317.3091" gradientUnits="userSpaceOnUse" x2="474.2755" y1="212.4423" y2="233.2423" id="linearGradient4" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="317.3091" gradientUnits="userSpaceOnUse" x2="474.2755" y1="273.2423" y2="294.0423" id="linearGradient5" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="292.3043" gradientUnits="userSpaceOnUse" x2="499.2803" y1="322.4423" y2="362.4423" id="linearGradient6" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="292.3043" gradientUnits="userSpaceOnUse" x2="499.2803" y1="20.3151" y2="60.3151" id="linearGradient7" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="20.3151" y2="60.3151" id="linearGradient8" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="45.9927" gradientUnits="userSpaceOnUse" x2="144.0073" y1="-44.1873" y2="-4.1873" id="linearGradient9" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="413.9173" y2="453.9173" id="linearGradient10" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath1">
<path d="M0 0 L591 0 L591 618 L0 618 L0 0 Z"/>
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath2">
<path d="M-39 -97 L552 -97 L552 521 L-39 521 L-39 -97 Z"/>
</clipPath>
</defs>
<g fill="white" transform="translate(39,97)" stroke="white">
<rect x="-39" width="591" height="618" y="-97" clip-path="url(#clipPath2)" stroke="none"/>
</g>
<g fill="rgb(245,245,245)" transform="matrix(1,0,0,1,39,97)" stroke="rgb(245,245,245)">
<rect x="254.6243" y="-81.5637" clip-path="url(#clipPath2)" width="282.336" rx="4" ry="4" height="586.956" stroke="none"/>
<rect x="254.6243" y="-81.5637" clip-path="url(#clipPath2)" fill="rgb(235,235,235)" width="282.336" height="22.3765" stroke="none"/>
</g>
<g font-size="15" stroke-miterlimit="1.45" font-family="sans-serif" transform="matrix(1,0,0,1,39,97)" stroke-linecap="butt">
<text x="448.2855" xml:space="preserve" y="-64.4832" clip-path="url(#clipPath2)" stroke="none">CORNFIELD</text>
<rect x="254.6243" y="-81.5637" clip-path="url(#clipPath2)" fill="none" width="282.336" stroke-dasharray="6,2" rx="4" ry="4" height="586.956"/>
</g>
<g fill="rgb(225,225,225)" transform="matrix(1,0,0,1,39,97)" stroke="rgb(225,225,225)">
<rect x="269.6243" y="83.3122" clip-path="url(#clipPath2)" width="252.336" rx="4" ry="4" height="407.0801" stroke="none"/>
<rect x="269.6243" y="83.3122" clip-path="url(#clipPath2)" fill="rgb(235,235,235)" width="252.336" height="22.3765" stroke="none"/>
</g>
<g font-size="15" stroke-miterlimit="1.45" font-family="sans-serif" transform="matrix(1,0,0,1,39,97)" stroke-linecap="butt">
<text x="348.1854" xml:space="preserve" y="100.3928" clip-path="url(#clipPath2)" stroke="none">Dashboard route in app.js</text>
<rect x="269.6243" y="83.3122" clip-path="url(#clipPath2)" fill="none" width="252.336" stroke-dasharray="6,2" rx="4" ry="4" height="407.0801"/>
</g>
<g fill="url(#linearGradient1)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,97)" stroke-linecap="butt" stroke="url(#linearGradient1)">
<path d="M294.8243 233.2423 L506.9603 233.2423 L496.7603 273.2423 L284.6243 273.2423 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M294.8243 233.2423 L506.9603 233.2423 L496.7603 273.2423 L284.6243 273.2423 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="301.0872" y="257.9561" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">userProjects.push(sanitized(name))</text>
</g>
<g fill="url(#linearGradient2)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,97)" stroke-linecap="butt" stroke="url(#linearGradient2)">
<path d="M292.3043 127.5607 L499.2803 127.5607 L499.2803 167.5607 L292.3043 167.5607 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M292.3043 127.5607 L499.2803 127.5607 L499.2803 167.5607 L292.3043 167.5607 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="343.4417" y="152.2746" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">User.findAllProjects</text>
</g>
<g fill="url(#linearGradient3)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,97)" stroke-linecap="butt" stroke="url(#linearGradient3)">
<path d="M319.7923 392.4423 L471.7923 392.4423 L471.7923 475.3923 L319.7923 475.3923 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M319.7923 392.4423 L471.7923 392.4423 L471.7923 475.3923 L319.7923 475.3923 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="347.7718" y="423.93" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">[JADE templating]</text>
<text x="351.1145" y="438.6312" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">Performs its own</text>
<text x="329.4348" y="453.3323" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">HTML Entity sanitization.</text>
</g>
<g fill="url(#linearGradient4)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,97)" stroke-linecap="butt" stroke="url(#linearGradient4)">
<path d="M327.3091 212.4423 L464.2755 212.4423 L474.2755 222.4423 L474.2755 233.2423 L317.3091 233.2423 L317.3091 222.4423 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M327.3091 212.4423 L464.2755 212.4423 L474.2755 222.4423 L474.2755 233.2423 L317.3091 233.2423 L317.3091 222.4423 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="333.5745" y="227.5562" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">for each "doc" in "docs"</text>
</g>
<g fill="url(#linearGradient5)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,97)" stroke-linecap="butt" stroke="url(#linearGradient5)">
<path d="M317.3091 273.2423 L474.2755 273.2423 L474.2755 284.0423 L464.2755 294.0423 L327.3091 294.0423 L317.3091 284.0423 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M317.3091 273.2423 L474.2755 273.2423 L474.2755 284.0423 L464.2755 294.0423 L327.3091 294.0423 L317.3091 284.0423 Z" clip-path="url(#clipPath2)" stroke="black"/>
</g>
<g fill="url(#linearGradient6)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,97)" stroke-linecap="butt" stroke="url(#linearGradient6)">
<path d="M292.3043 322.4423 L499.2803 322.4423 L499.2803 362.4423 L292.3043 362.4423 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M292.3043 322.4423 L499.2803 322.4423 L499.2803 362.4423 L292.3043 362.4423 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="331.1048" y="347.1562" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">res.render(userProjects)</text>
</g>
<g fill="url(#linearGradient7)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,97)" stroke-linecap="butt" stroke="url(#linearGradient7)">
<path d="M292.3043 20.3151 L499.2803 20.3151 L499.2803 60.3151 L292.3043 60.3151 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M292.3043 20.3151 L499.2803 20.3151 L499.2803 60.3151 L292.3043 60.3151 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="328.4622" y="45.029" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">app.js // get('/dashboard')</text>
</g>
<g stroke-linecap="butt" transform="matrix(1,0,0,1,39,97)" stroke-miterlimit="1.45">
<path fill="none" d="M395.7923 167.5941 L395.7923 204.4563" clip-path="url(#clipPath2)"/>
<path d="M395.7923 212.4563 L400.7923 200.4563 L395.7923 203.4563 L390.7923 200.4563 Z" clip-path="url(#clipPath2)" stroke="none"/>
<text x="304.263" xml:space="preserve" y="194.7154" font-family="sans-serif" clip-path="url(#clipPath2)" stroke="none">docs = all user projects</text>
<path fill="none" d="M395.7923 294.0644 L395.7923 314.458" clip-path="url(#clipPath2)"/>
<path d="M395.7923 322.458 L400.7923 310.458 L395.7923 313.458 L390.7923 310.458 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M395.7923 362.4078 L395.7923 384.4711" clip-path="url(#clipPath2)"/>
<path d="M395.7923 392.4711 L400.7923 380.4711 L395.7923 383.4711 L390.7923 380.4711 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M346.9962 60.3029 L317.7795 72.2705 L317.7795 113.5025 L342.6357 124.354" clip-path="url(#clipPath2)"/>
<path d="M349.9674 127.5548 L340.9703 118.1712 L341.7192 123.9539 L336.9692 127.3359 Z" clip-path="url(#clipPath2)" stroke="none"/>
</g>
<g fill="rgb(245,245,245)" transform="matrix(1,0,0,1,39,97)" stroke="rgb(245,245,245)">
<rect x="-23.488" y="-81.5637" clip-path="url(#clipPath2)" width="236.976" rx="4" ry="4" height="586.956" stroke="none"/>
<rect x="-23.488" y="-81.5637" clip-path="url(#clipPath2)" fill="rgb(235,235,235)" width="236.976" height="22.3765" stroke="none"/>
</g>
<g font-size="15" stroke-miterlimit="1.45" font-family="sans-serif" transform="matrix(1,0,0,1,39,97)" stroke-linecap="butt">
<text x="169.8132" xml:space="preserve" y="-64.4832" clip-path="url(#clipPath2)" stroke="none">USER</text>
<rect x="-23.488" y="-81.5637" clip-path="url(#clipPath2)" fill="none" width="236.976" stroke-dasharray="6,2" rx="4" ry="4" height="586.956"/>
</g>
<g fill="url(#linearGradient8)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,97)" stroke-linecap="butt" stroke="url(#linearGradient8)">
<path d="M-8.488 20.3151 L198.488 20.3151 L198.488 60.3151 L-8.488 60.3151 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M-8.488 20.3151 L198.488 20.3151 L198.488 60.3151 L-8.488 60.3151 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="42.9658" y="45.029" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">get dashboard URL</text>
</g>
<g fill="url(#linearGradient9)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,97)" stroke-linecap="butt" stroke="url(#linearGradient9)">
<ellipse rx="49.0073" ry="20" clip-path="url(#clipPath2)" cx="95" cy="-24.1873" stroke="none"/>
<ellipse clip-path="url(#clipPath2)" fill="none" rx="49.0073" cx="95" ry="20" cy="-24.1873" stroke="black"/>
<text x="51.9717" y="-19.4734" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">View dashboard</text>
</g>
<g fill="url(#linearGradient10)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,97)" stroke-linecap="butt" stroke="url(#linearGradient10)">
<rect x="-8.488" y="413.9173" clip-path="url(#clipPath2)" width="206.976" rx="20" ry="20" height="40" stroke="none"/>
<rect x="-8.488" y="413.9173" clip-path="url(#clipPath2)" fill="none" width="206.976" rx="20" ry="20" height="40" stroke="black"/>
<text x="50.6328" y="438.6312" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">Dashboard page</text>
</g>
<g stroke-linecap="butt" transform="matrix(1,0,0,1,39,97)" stroke-miterlimit="1.45">
<path fill="none" d="M198.5075 40.3151 L284.2852 40.3151" clip-path="url(#clipPath2)"/>
<path d="M292.2852 40.3151 L280.2852 35.3151 L283.2852 40.3151 L280.2852 45.3151 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M95 -4.1878 L95 12.2801" clip-path="url(#clipPath2)"/>
<path d="M95 20.2801 L100 8.2801 L95 11.2801 L90 8.2801 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M319.8231 433.9173 L206.4922 433.9173" clip-path="url(#clipPath2)"/>
<path d="M198.4922 433.9173 L210.4922 438.9173 L207.4922 433.9173 L210.4922 428.9173 Z" clip-path="url(#clipPath2)" stroke="none"/>
</g>
</g>
</svg>

После

Ширина:  |  Высота:  |  Размер: 15 KiB

Двоичные данные
docs/UML/images/butter.remix.jpg Executable file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 192 KiB

369
docs/UML/images/butter.remix.svg Executable file
Просмотреть файл

@ -0,0 +1,369 @@
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill-opacity="1" color-rendering="auto" color-interpolation="auto" stroke="black" text-rendering="auto" stroke-linecap="square" width="1010" stroke-miterlimit="10" stroke-opacity="1" shape-rendering="auto" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" height="1771" font-family="'Dialog'" font-style="normal" stroke-linejoin="miter" font-size="12" stroke-dashoffset="0" image-rendering="auto">
<!--Generated by ySVG-->
<defs id="genericDefs"/>
<g>
<defs id="defs1">
<linearGradient x1="589.0671" gradientUnits="userSpaceOnUse" x2="910.6888" y1="657.4896" y2="697.4896" id="linearGradient1" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="589.0671" gradientUnits="userSpaceOnUse" x2="910.6888" y1="727.4896" y2="767.4896" id="linearGradient2" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(255,204,153)" offset="0%"/>
<stop stop-opacity="1" stop-color="red" offset="100%"/>
</linearGradient>
<linearGradient x1="574.0671" gradientUnits="userSpaceOnUse" x2="741.4582" y1="562.0636" y2="602.0636" id="linearGradient3" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="580.0422" gradientUnits="userSpaceOnUse" x2="901.6639" y1="802.4009" y2="842.4009" id="linearGradient4" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="574.0671" gradientUnits="userSpaceOnUse" x2="741.4582" y1="450.5635" y2="490.5635" id="linearGradient5" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="559.0671" gradientUnits="userSpaceOnUse" x2="726.4582" y1="130.5995" y2="234.5923" id="linearGradient6" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="66.6067" y2="106.6067" id="linearGradient7" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="130.5995" y2="170.5995" id="linearGradient8" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="194.5923" y2="234.5923" id="linearGradient9" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="875.5929" y2="915.5929" id="linearGradient10" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="55" gradientUnits="userSpaceOnUse" x2="135" y1="-7.7907" y2="32.2093" id="linearGradient11" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="258.5851" y2="298.5851" id="linearGradient12" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="322.5779" y2="362.5779" id="linearGradient13" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="450.5635" y2="490.5635" id="linearGradient14" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="386.5707" y2="426.5707" id="linearGradient15" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="945.5929" y2="985.5929" id="linearGradient16" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="1015.5929" y2="1074.9929" id="linearGradient17" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="140.937" gradientUnits="userSpaceOnUse" x2="343.1581" y1="1104.9929" y2="1137.2329" id="linearGradient18" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(255,204,153)" offset="0%"/>
<stop stop-opacity="1" stop-color="red" offset="100%"/>
</linearGradient>
<linearGradient x1="140.937" gradientUnits="userSpaceOnUse" x2="343.1581" y1="1228.1298" y2="1244.8497" id="linearGradient19" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="1540.7325" y2="1580.7325" id="linearGradient20" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="140.937" gradientUnits="userSpaceOnUse" x2="343.1581" y1="1464.3269" y2="1481.0469" id="linearGradient21" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="1629.5736" y2="1669.5736" id="linearGradient22" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="140.937" gradientUnits="userSpaceOnUse" x2="343.1581" y1="1167.2329" y2="1191.7129" id="linearGradient23" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="140.937" gradientUnits="userSpaceOnUse" x2="343.1581" y1="1269.3298" y2="1293.8098" id="linearGradient24" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="140.937" gradientUnits="userSpaceOnUse" x2="343.1581" y1="1244.8499" y2="1269.3298" id="linearGradient25" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="287.4362" gradientUnits="userSpaceOnUse" x2="489.6572" y1="1393.127" y2="1417.6069" id="linearGradient26" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(255,204,153)" offset="0%"/>
<stop stop-opacity="1" stop-color="red" offset="100%"/>
</linearGradient>
<linearGradient x1="287.4362" gradientUnits="userSpaceOnUse" x2="489.6572" y1="1368.647" y2="1393.127" id="linearGradient27" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="287.4362" gradientUnits="userSpaceOnUse" x2="489.6572" y1="1344.1669" y2="1368.6469" id="linearGradient28" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="287.4362" gradientUnits="userSpaceOnUse" x2="489.6572" y1="1327.4469" y2="1344.1669" id="linearGradient29" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="287.4362" gradientUnits="userSpaceOnUse" x2="489.6572" y1="1417.6069" y2="1434.3269" id="linearGradient30" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath1">
<path d="M0 0 L1010 0 L1010 1771 L0 1771 L0 0 Z"/>
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath2">
<path d="M-54 -71 L956 -71 L956 1700 L-54 1700 L-54 -71 Z"/>
</clipPath>
</defs>
<g fill="white" transform="translate(54,71)" stroke="white">
<rect x="-54" width="1010" height="1771" y="-71" clip-path="url(#clipPath2)" stroke="none"/>
</g>
<g fill="rgb(245,245,245)" transform="matrix(1,0,0,1,54,71)" stroke="rgb(245,245,245)">
<rect x="527.5766" y="-55.7937" clip-path="url(#clipPath2)" width="413.1122" rx="4" ry="4" height="978.0998" stroke="none"/>
<rect x="527.5766" y="-55.7937" clip-path="url(#clipPath2)" fill="rgb(235,235,235)" width="413.1122" height="22.3765" stroke="none"/>
</g>
<g font-size="15" stroke-miterlimit="1.45" font-family="sans-serif" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt">
<text x="852.014" xml:space="preserve" y="-38.7132" clip-path="url(#clipPath2)" stroke="none">CORNFIELD</text>
<rect x="527.5766" y="-55.7937" clip-path="url(#clipPath2)" fill="none" width="413.1122" stroke-dasharray="6,2" rx="4" ry="4" height="978.0998"/>
</g>
<g fill="rgb(225,225,225)" transform="matrix(1,0,0,1,54,71)" stroke="rgb(225,225,225)">
<rect x="542.5766" y="520.5635" clip-path="url(#clipPath2)" width="383.1122" rx="4" ry="4" height="386.7425" stroke="none"/>
<rect x="542.5766" y="520.5635" clip-path="url(#clipPath2)" fill="rgb(235,235,235)" width="383.1122" height="22.3765" stroke="none"/>
</g>
<g font-size="15" stroke-miterlimit="1.45" font-family="sans-serif" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt">
<text x="771.9603" xml:space="preserve" y="537.6441" clip-path="url(#clipPath2)" stroke="none">Remix route in index.js</text>
<rect x="542.5766" y="520.5635" clip-path="url(#clipPath2)" fill="none" width="383.1122" stroke-dasharray="6,2" rx="4" ry="4" height="386.7425"/>
</g>
<g fill="url(#linearGradient1)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient1)">
<path d="M599.2671 657.4896 L910.6888 657.4896 L900.4888 697.4896 L589.0671 697.4896 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M599.2671 657.4896 L910.6888 657.4896 L900.4888 697.4896 L589.0671 697.4896 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="658.0146" y="682.2034" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">project = stringified JSON from DB</text>
</g>
<g fill="url(#linearGradient2)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient2)">
<path d="M599.2671 727.4896 L910.6888 727.4896 L900.4888 767.4896 L589.0671 767.4896 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M599.2671 727.4896 L910.6888 727.4896 L900.4888 767.4896 L589.0671 767.4896 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="612.9941" y="752.2034" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">projectJSON = sanitizedHTMLinJSON(project.data)</text>
</g>
<g fill="url(#linearGradient3)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient3)">
<path d="M574.0671 562.0636 L741.4582 562.0636 L741.4582 602.0636 L574.0671 602.0636 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M574.0671 562.0636 L741.4582 562.0636 L741.4582 602.0636 L574.0671 602.0636 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="621.748" y="579.4269" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">User.findById</text>
<text x="586.3954" y="594.1281" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">(finds a project, not a user)</text>
</g>
<g fill="url(#linearGradient4)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient4)">
<path d="M590.2422 802.4009 L901.664 802.4009 L891.464 842.4009 L580.0422 842.4009 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M590.2422 802.4009 L901.664 802.4009 L891.464 842.4009 L580.0422 842.4009 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="643.4791" y="827.1147" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">(further administrative value parsing)</text>
</g>
<g fill="url(#linearGradient5)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient5)">
<path d="M574.0671 450.5635 L741.4582 450.5635 L741.4582 490.5635 L574.0671 490.5635 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M574.0671 450.5635 L741.4582 450.5635 L741.4582 490.5635 L574.0671 490.5635 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="580.1054" y="475.2774" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">index.js // app.get('api/remix')</text>
</g>
<g fill="url(#linearGradient6)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient6)">
<path d="M559.0671 130.5995 L726.4582 130.5995 L726.4582 234.5923 L559.0671 234.5923 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M559.0671 130.5995 L726.4582 130.5995 L726.4582 234.5923 L559.0671 234.5923 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="570.3964" y="187.3098" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">/templates/basic/index.html</text>
</g>
<g stroke-linecap="butt" transform="matrix(1,0,0,1,54,71)" stroke-miterlimit="1.45">
<path fill="none" d="M589.8234 694.4062 L554.8219 698.1056 L554.8219 747.4896 L586.2045 747.4896" clip-path="url(#clipPath2)"/>
<path d="M594.2045 747.4896 L582.2045 742.4896 L585.2045 747.4896 L582.2045 752.4896 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M657.7626 602.0534 L657.7626 624.0956 L708.4359 653.468" clip-path="url(#clipPath2)"/>
<path d="M715.3572 657.4799 L707.4826 647.1362 L707.5707 652.9665 L702.4678 655.7878 Z" clip-path="url(#clipPath2)" stroke="none"/>
<text x="588.619" xml:space="preserve" y="649.4791" font-family="sans-serif" clip-path="url(#clipPath2)" stroke="none">if find succeeded</text>
<path fill="none" d="M589.2014 767.0766 L554.5289 771.3033 L554.5289 815.3698 L578.6046 816.2783" clip-path="url(#clipPath2)"/>
<path d="M586.5989 816.58 L574.796 811.131 L577.6053 816.2406 L574.4188 821.1239 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M657.7626 490.5715 L657.7626 554.0944" clip-path="url(#clipPath2)"/>
<path d="M657.7626 562.0944 L662.7626 550.0944 L657.7626 553.0944 L652.7626 550.0944 Z" clip-path="url(#clipPath2)" stroke="none"/>
</g>
<g fill="rgb(245,245,245)" transform="matrix(1,0,0,1,54,71)" stroke="rgb(245,245,245)">
<rect x="-38.488" y="-55.7937" clip-path="url(#clipPath2)" width="551.0646" rx="4" ry="4" height="1740.3673" stroke="none"/>
<rect x="-38.488" y="-55.7937" clip-path="url(#clipPath2)" fill="rgb(235,235,235)" width="551.0646" height="22.3765" stroke="none"/>
</g>
<g font-size="15" stroke-miterlimit="1.45" font-family="sans-serif" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt">
<text x="468.9018" xml:space="preserve" y="-38.7132" clip-path="url(#clipPath2)" stroke="none">USER</text>
<rect x="-38.488" y="-55.7937" clip-path="url(#clipPath2)" fill="none" width="551.0646" stroke-dasharray="6,2" rx="4" ry="4" height="1740.3673"/>
</g>
<g fill="url(#linearGradient7)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient7)">
<path d="M-8.488 66.6067 L198.488 66.6067 L198.488 106.6067 L-8.488 106.6067 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M-8.488 66.6067 L198.488 66.6067 L198.488 106.6067 L-8.488 106.6067 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="22.6602" y="91.3206" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">src/embed.js // remixClick()</text>
</g>
<g fill="url(#linearGradient8)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient8)">
<path d="M-8.488 130.5995 L198.488 130.5995 L198.488 170.5995 L-8.488 170.5995 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M-8.488 130.5995 L198.488 130.5995 L198.488 170.5995 L-8.488 170.5995 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="20.9756" y="155.3134" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">window.open( [remix URL] )</text>
</g>
<g fill="url(#linearGradient9)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient9)">
<path d="M-8.488 194.5923 L198.488 194.5923 L198.488 234.5923 L-8.488 234.5923 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M-8.488 194.5923 L198.488 194.5923 L198.488 234.5923 L-8.488 234.5923 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="42.6318" y="219.3062" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">page loads butter.js</text>
</g>
<g fill="url(#linearGradient10)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient10)">
<path d="M-8.488 875.5929 L198.488 875.5929 L198.488 915.5929 L-8.488 915.5929 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M-8.488 875.5929 L198.488 875.5929 L198.488 915.5929 L-8.488 915.5929 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="21.3008" y="900.3068" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">build page from JSON reply</text>
</g>
<g fill="url(#linearGradient11)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient11)">
<ellipse rx="40" ry="20" clip-path="url(#clipPath2)" cx="95" cy="12.2093" stroke="none"/>
<ellipse clip-path="url(#clipPath2)" fill="none" rx="40" cx="95" ry="20" cy="12.2093" stroke="black"/>
<text x="63.3301" y="16.9231" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">Press remix</text>
</g>
<g fill="url(#linearGradient12)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient12)">
<path d="M-8.488 258.5851 L198.488 258.5851 L198.488 298.5851 L-8.488 298.5851 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M-8.488 258.5851 L198.488 258.5851 L198.488 298.5851 L-8.488 298.5851 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="39.9688" y="283.299" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">butter loads config.js</text>
</g>
<g fill="url(#linearGradient13)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient13)">
<path d="M-8.488 322.5779 L198.488 322.5779 L198.488 362.5779 L-8.488 362.5779 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M-8.488 322.5779 L198.488 322.5779 L198.488 362.5779 L-8.488 362.5779 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="36.3066" y="347.2918" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">config.js loads main.js</text>
</g>
<g fill="url(#linearGradient14)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient14)">
<path d="M-8.488 450.5635 L198.488 450.5635 L198.488 490.5635 L-8.488 490.5635 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M-8.488 450.5635 L198.488 450.5635 L198.488 490.5635 L-8.488 490.5635 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="7.2939" y="475.2774" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">main.js // loadForSavedDataURL</text>
</g>
<g fill="url(#linearGradient15)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient15)">
<path d="M-8.488 386.5707 L198.488 386.5707 L198.488 426.5707 L-8.488 426.5707 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M-8.488 386.5707 L198.488 386.5707 L198.488 426.5707 L-8.488 426.5707 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="23.2959" y="411.2846" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">main.js // attemptDataLoad</text>
</g>
<g fill="url(#linearGradient16)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient16)">
<path d="M-8.488 945.5929 L198.488 945.5929 L198.488 985.5929 L-8.488 985.5929 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M-8.488 945.5929 L198.488 945.5929 L198.488 985.5929 L-8.488 985.5929 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="45.6494" y="970.3068" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">main.js // doImport</text>
</g>
<g fill="url(#linearGradient17)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient17)">
<path d="M-8.488 1015.5929 L198.488 1015.5929 L198.488 1074.9929 L-8.488 1074.9929 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M-8.488 1015.5929 L198.488 1015.5929 L198.488 1074.9929 L-8.488 1074.9929 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="54.6582" y="1035.3057" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">project.import()</text>
<text x="87.5" y="1050.0068" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">--&gt;</text>
<text x="33.3125" y="1064.708" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">project.js // _this.import</text>
</g>
<g fill="url(#linearGradient18)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient18)">
<path d="M140.937 1104.9929 L343.1581 1104.9929 L343.1581 1137.2329 L140.937 1137.2329 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M140.937 1104.9929 L343.1581 1104.9929 L343.1581 1137.2329 L140.937 1137.2329 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="147.6647" y="1125.8268" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">reconstitute sanitized project name </text>
</g>
<g fill="url(#linearGradient19)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient19)">
<path d="M149.297 1228.1298 L334.7981 1228.1298 L343.1581 1236.4897 L343.1581 1244.8499 L140.937 1244.8499 L140.937 1236.4897 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M149.297 1228.1298 L334.7981 1228.1298 L343.1581 1236.4897 L343.1581 1244.8499 L140.937 1244.8499 L140.937 1236.4897 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="187.6901" y="1241.2036" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">for each media track</text>
</g>
<g fill="url(#linearGradient20)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient20)">
<path d="M-8.488 1540.7325 L198.488 1540.7325 L198.488 1580.7325 L-8.488 1580.7325 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M-8.488 1540.7325 L198.488 1540.7325 L198.488 1580.7325 L-8.488 1580.7325 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="62.6562" y="1565.4464" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">useProject()</text>
</g>
<g fill="url(#linearGradient21)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient21)">
<path d="M140.937 1464.3269 L343.1581 1464.3269 L343.1581 1472.6869 L334.7981 1481.0469 L149.297 1481.0469 L140.937 1472.6869 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M140.937 1464.3269 L343.1581 1464.3269 L343.1581 1472.6869 L334.7981 1481.0469 L149.297 1481.0469 L140.937 1472.6869 Z" clip-path="url(#clipPath2)" stroke="black"/>
</g>
<g fill="url(#linearGradient22)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient22)">
<path d="M-8.488 1629.5736 L198.488 1629.5736 L198.488 1669.5736 L-8.488 1669.5736 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M-8.488 1629.5736 L198.488 1629.5736 L198.488 1669.5736 L-8.488 1669.5736 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="14.0381" y="1646.9369" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">_this.dispatch( "ready", _this );</text>
<text x="25.6367" y="1661.6381" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">(_this is a Butter instance)</text>
</g>
<g fill="url(#linearGradient23)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient23)">
<path d="M140.937 1167.2329 L343.1581 1167.2329 L343.1581 1191.7129 L140.937 1191.7129 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M140.937 1167.2329 L343.1581 1167.2329 L343.1581 1191.7129 L140.937 1191.7129 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="203.0241" y="1184.1868" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">target injection</text>
</g>
<g fill="url(#linearGradient24)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient24)">
<path d="M140.937 1269.3298 L343.1581 1269.3298 L343.1581 1293.8098 L140.937 1293.8098 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M140.937 1269.3298 L343.1581 1269.3298 L343.1581 1293.8098 L140.937 1293.8098 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="177.1784" y="1286.2837" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">media.json = mediaData</text>
</g>
<g fill="url(#linearGradient25)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient25)">
<path d="M140.937 1244.8499 L343.1581 1244.8499 L343.1581 1269.3298 L140.937 1269.3298 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M140.937 1244.8499 L343.1581 1244.8499 L343.1581 1269.3298 L140.937 1269.3298 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="178.3591" y="1261.8037" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">project.js // new Media()</text>
</g>
<g fill="url(#linearGradient26)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient26)">
<path d="M287.4362 1393.127 L489.6573 1393.127 L489.6573 1417.6069 L287.4362 1417.6069 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M287.4362 1393.127 L489.6573 1393.127 L489.6573 1417.6069 L287.4362 1417.6069 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="305.1854" y="1410.0808" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">this.sanitizeTrackEventData(...)</text>
</g>
<g fill="url(#linearGradient27)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient27)">
<path d="M287.4362 1368.647 L489.6573 1368.647 L489.6573 1393.127 L287.4362 1393.127 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M287.4362 1368.647 L489.6573 1368.647 L489.6573 1393.127 L287.4362 1393.127 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="311.5223" y="1385.6008" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">newTrack.addTrackEvent(...)</text>
</g>
<g fill="url(#linearGradient28)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient28)">
<path d="M287.4362 1344.1669 L489.6573 1344.1669 L489.6573 1368.647 L287.4362 1368.647 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M287.4362 1344.1669 L489.6573 1344.1669 L489.6573 1368.647 L287.4362 1368.647 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="324.0321" y="1361.1208" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">newTrack = new Track()</text>
</g>
<g fill="url(#linearGradient29)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient29)">
<path d="M295.7962 1327.4469 L481.2972 1327.4469 L489.6573 1335.8069 L489.6573 1344.1669 L287.4362 1344.1669 L287.4362 1335.8069 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M295.7962 1327.4469 L481.2972 1327.4469 L489.6573 1335.8069 L489.6573 1344.1669 L287.4362 1344.1669 L287.4362 1335.8069 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="335.8534" y="1340.5208" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">for each track event</text>
</g>
<g fill="url(#linearGradient30)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,54,71)" stroke-linecap="butt" stroke="url(#linearGradient30)">
<path d="M287.4362 1417.6069 L489.6573 1417.6069 L489.6573 1425.9669 L481.2972 1434.3269 L295.7962 1434.3269 L287.4362 1425.9669 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M287.4362 1417.6069 L489.6573 1417.6069 L489.6573 1425.9669 L481.2972 1434.3269 L295.7962 1434.3269 L287.4362 1425.9669 Z" clip-path="url(#clipPath2)" stroke="black"/>
</g>
<g stroke-linecap="butt" transform="matrix(1,0,0,1,54,71)" stroke-miterlimit="1.45">
<path fill="none" d="M95 106.6357 L95 122.6355" clip-path="url(#clipPath2)"/>
<path d="M95 130.6355 L100 118.6355 L95 121.6355 L90 118.6355 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M198.5141 150.5995 L495.5609 150.5995 L551.2457 162.7034" clip-path="url(#clipPath2)"/>
<path d="M559.0632 164.4026 L548.399 156.9679 L550.2686 162.491 L546.275 166.7397 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M559.0385 200.9767 L497.0193 214.5923 L206.4984 214.5923" clip-path="url(#clipPath2)"/>
<path d="M198.4984 214.5923 L210.4984 219.5923 L207.4984 214.5923 L210.4984 209.5923 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M686.2646 842.4054 L541.1259 895.5929 L206.4988 895.5929" clip-path="url(#clipPath2)"/>
<path d="M198.4988 895.5929 L210.4988 900.5929 L207.4988 895.5929 L210.4988 890.5929 Z" clip-path="url(#clipPath2)" stroke="none"/>
<text x="690.1881" xml:space="preserve" y="918.5237" font-family="sans-serif" clip-path="url(#clipPath2)" stroke="none">JSON object</text>
<path fill="none" d="M95 32.2254 L95 58.612" clip-path="url(#clipPath2)"/>
<path d="M95 66.612 L100 54.612 L95 57.612 L90 54.612 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M95 234.6213 L95 250.6211" clip-path="url(#clipPath2)"/>
<path d="M95 258.6211 L100 246.6211 L95 249.6211 L90 246.6211 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M95 298.6141 L95 314.6139" clip-path="url(#clipPath2)"/>
<path d="M95 322.6139 L100 310.6139 L95 313.6139 L90 310.6139 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M198.4914 470.5635 L566.088 470.5635" clip-path="url(#clipPath2)"/>
<path d="M574.088 470.5635 L562.088 465.5635 L565.088 470.5635 L562.088 475.5635 Z" clip-path="url(#clipPath2)" stroke="none"/>
<text x="205.0445" xml:space="preserve" y="489.252" font-family="sans-serif" clip-path="url(#clipPath2)" stroke="none">XHR(remixURL)</text>
<path fill="none" stroke-dasharray="6,2" d="M95 490.5646 L95 875.5689" clip-path="url(#clipPath2)"/>
<path fill="none" d="M95 362.6069 L95 378.6067" clip-path="url(#clipPath2)"/>
<path d="M95 386.6067 L100 374.6067 L95 377.6067 L90 374.6067 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M95 426.5997 L95 442.5995" clip-path="url(#clipPath2)"/>
<path d="M95 450.5995 L100 438.5995 L95 441.5995 L90 438.5995 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M95 915.588 L95 937.6202" clip-path="url(#clipPath2)"/>
<path d="M95 945.6202 L100 933.6202 L95 936.6202 L90 933.6202 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M95 985.5568 L95 1007.5707" clip-path="url(#clipPath2)"/>
<path d="M95 1015.5707 L100 1003.5707 L95 1006.5707 L90 1003.5707 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M95 1075.0211 L95 1121.1129 L132.9165 1121.1129" clip-path="url(#clipPath2)"/>
<path d="M140.9165 1121.1129 L128.9165 1116.1129 L131.9165 1121.1129 L128.9165 1126.1129 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" stroke-dasharray="6,2" d="M95 1074.9652 L95 1540.7389" clip-path="url(#clipPath2)"/>
<path fill="none" d="M242.0476 1481.0132 L242.0476 1510.9203 L95 1510.9203 L95 1532.7395" clip-path="url(#clipPath2)"/>
<path d="M95 1540.7395 L100 1528.7395 L95 1531.7395 L90 1528.7395 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M95 1580.7305 L95 1621.5728" clip-path="url(#clipPath2)"/>
<path d="M95 1629.5728 L100 1617.5728 L95 1620.5728 L90 1617.5728 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M242.0476 1137.2133 L242.0476 1159.2159" clip-path="url(#clipPath2)"/>
<path d="M242.0476 1167.2159 L247.0476 1155.2159 L242.0476 1158.2159 L237.0476 1155.2159 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M242.0476 1191.6948 L242.0476 1220.1345" clip-path="url(#clipPath2)"/>
<path d="M242.0476 1228.1345 L247.0476 1216.1345 L242.0476 1219.1345 L237.0476 1216.1345 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" stroke-dasharray="6,2" d="M242.0476 1293.8412 L242.0476 1464.3472" clip-path="url(#clipPath2)"/>
<path fill="none" d="M242.0476 1293.8314 L242.0476 1335.8069 L279.4351 1335.8069" clip-path="url(#clipPath2)"/>
<path d="M287.4351 1335.8069 L275.4351 1330.8069 L278.4351 1335.8069 L275.4351 1340.8069 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M287.4185 1425.9669 L241.7118 1425.9669 L241.9301 1456.3378" clip-path="url(#clipPath2)"/>
<path d="M241.9876 1464.3375 L246.9012 1452.3019 L241.9229 1455.3378 L236.9014 1452.3738 Z" clip-path="url(#clipPath2)" stroke="none"/>
</g>
</g>
</svg>

После

Ширина:  |  Высота:  |  Размер: 38 KiB

Двоичные данные
docs/UML/images/butter.save.jpg Executable file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 170 KiB

311
docs/UML/images/butter.save.svg Executable file
Просмотреть файл

@ -0,0 +1,311 @@
<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill-opacity="1" color-rendering="auto" color-interpolation="auto" stroke="black" text-rendering="auto" stroke-linecap="square" width="1204" stroke-miterlimit="10" stroke-opacity="1" shape-rendering="auto" fill="black" stroke-dasharray="none" font-weight="normal" stroke-width="1" height="1352" font-family="'Dialog'" font-style="normal" stroke-linejoin="miter" font-size="12" stroke-dashoffset="0" image-rendering="auto">
<!--Generated by ySVG-->
<defs id="genericDefs"/>
<g>
<defs id="defs1">
<linearGradient x1="55" gradientUnits="userSpaceOnUse" x2="135" y1="-3.3933" y2="36.6067" id="linearGradient1" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="352.9712" y2="392.9712" id="linearGradient2" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="66.6067" y2="106.6067" id="linearGradient3" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="130.5995" y2="170.5995" id="linearGradient4" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="194.5923" y2="234.5923" id="linearGradient5" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="258.5851" y2="328.9784" id="linearGradient6" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="-8.488" gradientUnits="userSpaceOnUse" x2="198.488" y1="565.4689" y2="605.4689" id="linearGradient7" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="365.6917" gradientUnits="userSpaceOnUse" x2="657.0808" y1="791.9234" y2="831.9234" id="linearGradient8" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="365.6917" gradientUnits="userSpaceOnUse" x2="657.0808" y1="861.9234" y2="901.9234" id="linearGradient9" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(255,204,153)" offset="0%"/>
<stop stop-opacity="1" stop-color="red" offset="100%"/>
</linearGradient>
<linearGradient x1="365.6917" gradientUnits="userSpaceOnUse" x2="657.0808" y1="931.9234" y2="971.9234" id="linearGradient10" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="407.8983" gradientUnits="userSpaceOnUse" x2="614.8743" y1="1001.9234" y2="1041.9233" id="linearGradient11" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="407.8983" gradientUnits="userSpaceOnUse" x2="614.8743" y1="1104.9089" y2="1144.9089" id="linearGradient12" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="407.8983" gradientUnits="userSpaceOnUse" x2="614.8743" y1="1174.9089" y2="1214.9089" id="linearGradient13" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="407.8983" gradientUnits="userSpaceOnUse" x2="614.8743" y1="699.2458" y2="739.2458" id="linearGradient14" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="702.7498" gradientUnits="userSpaceOnUse" x2="854.7498" y1="980.4484" y2="1063.3983" id="linearGradient15" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(255,204,153)" offset="0%"/>
<stop stop-opacity="1" stop-color="red" offset="100%"/>
</linearGradient>
<linearGradient x1="702.7498" gradientUnits="userSpaceOnUse" x2="854.7498" y1="1083.434" y2="1166.3839" id="linearGradient16" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(255,204,153)" offset="0%"/>
<stop stop-opacity="1" stop-color="red" offset="100%"/>
</linearGradient>
<linearGradient x1="320.2543" gradientUnits="userSpaceOnUse" x2="472.2543" y1="565.4689" y2="605.4689" id="linearGradient17" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="320.2543" gradientUnits="userSpaceOnUse" x2="472.2543" y1="352.9712" y2="392.9712" id="linearGradient18" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="320.2543" gradientUnits="userSpaceOnUse" x2="472.2543" y1="417.4736" y2="457.4736" id="linearGradient19" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="320.2543" gradientUnits="userSpaceOnUse" x2="472.2543" y1="481.976" y2="536.976" id="linearGradient20" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="486.8743" gradientUnits="userSpaceOnUse" x2="614.8743" y1="352.9712" y2="535.4689" id="linearGradient21" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<linearGradient x1="942.6252" gradientUnits="userSpaceOnUse" x2="1149.6012" y1="980.4484" y2="1166.3839" id="linearGradient22" spreadMethod="pad">
<stop stop-opacity="1" stop-color="rgb(232,238,247)" offset="0%"/>
<stop stop-opacity="1" stop-color="rgb(183,201,227)" offset="100%"/>
</linearGradient>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath1">
<path d="M0 0 L1204 0 L1204 1352 L0 1352 L0 0 Z"/>
</clipPath>
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath2">
<path d="M-39 -71 L1165 -71 L1165 1281 L-39 1281 L-39 -71 Z"/>
</clipPath>
</defs>
<g fill="white" transform="translate(39,71)" stroke="white">
<rect x="-39" width="1204" height="1352" y="-71" clip-path="url(#clipPath2)" stroke="none"/>
</g>
<g fill="rgb(245,245,245)" transform="matrix(1,0,0,1,39,71)" stroke="rgb(245,245,245)">
<rect x="-23.488" y="-55.7937" clip-path="url(#clipPath2)" width="236.976" rx="4" ry="4" height="676.2626" stroke="none"/>
<rect x="-23.488" y="-55.7937" clip-path="url(#clipPath2)" fill="rgb(235,235,235)" width="236.976" height="22.3765" stroke="none"/>
</g>
<g font-size="15" stroke-miterlimit="1.45" font-family="sans-serif" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt">
<text x="169.8132" xml:space="preserve" y="-38.7132" clip-path="url(#clipPath2)" stroke="none">USER</text>
<rect x="-23.488" y="-55.7937" clip-path="url(#clipPath2)" fill="none" width="236.976" stroke-dasharray="6,2" rx="4" ry="4" height="676.2626"/>
</g>
<g fill="url(#linearGradient1)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient1)">
<ellipse rx="40" ry="20" clip-path="url(#clipPath2)" cx="95" cy="16.6067" stroke="none"/>
<ellipse clip-path="url(#clipPath2)" fill="none" rx="40" cx="95" ry="20" cy="16.6067" stroke="black"/>
<text x="61.6484" y="21.3206" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">Save project</text>
</g>
<g fill="url(#linearGradient2)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient2)">
<path d="M-8.488 352.9712 L198.488 352.9712 L198.488 392.9712 L-8.488 392.9712 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M-8.488 352.9712 L198.488 352.9712 L198.488 392.9712 L-8.488 392.9712 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="-2.0488" y="377.6851" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">butter.cornfield.save(stringified data)</text>
</g>
<g fill="url(#linearGradient3)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient3)">
<path d="M-8.488 66.6067 L198.488 66.6067 L198.488 106.6067 L-8.488 106.6067 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M-8.488 66.6067 L198.488 66.6067 L198.488 106.6067 L-8.488 106.6067 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="12.3037" y="91.3206" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">src/ui/header.js // saveProject()</text>
</g>
<g fill="url(#linearGradient4)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient4)">
<path d="M-8.488 130.5995 L198.488 130.5995 L198.488 170.5995 L-8.488 170.5995 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M-8.488 130.5995 L198.488 130.5995 L198.488 170.5995 L-8.488 170.5995 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="22.9707" y="147.9628" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">src/ui/header.js // prepare()</text>
<text x="-5.0576" y="162.664" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">VIA UserData.authenticationRequired</text>
</g>
<g fill="url(#linearGradient5)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient5)">
<path d="M-8.488 194.5923 L198.488 194.5923 L198.488 234.5923 L-8.488 234.5923 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M-8.488 194.5923 L198.488 194.5923 L198.488 234.5923 L-8.488 234.5923 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="26.3105" y="219.3062" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">src/ui/userdata.js // save()</text>
</g>
<g fill="url(#linearGradient6)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient6)">
<path d="M-8.488 258.5851 L198.488 258.5851 L198.488 328.9784 L-8.488 328.9784 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M-8.488 258.5851 L198.488 258.5851 L198.488 328.9784 L-8.488 328.9784 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="41.6445" y="276.4439" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">butter.project.save()</text>
<text x="77.9902" y="291.1451" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">calling</text>
<text x="42.9863" y="305.8462" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">src/core/project.js //</text>
<text x="37.9707" y="320.5474" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">_this.save(_this.data)</text>
</g>
<g fill="url(#linearGradient7)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient7)">
<path d="M-8.488 565.4689 L198.488 565.4689 L198.488 605.4689 L-8.488 605.4689 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M-8.488 565.4689 L198.488 565.4689 L198.488 605.4689 L-8.488 605.4689 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="6.2891" y="590.1827" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">butter.cornfield.publish(project id)</text>
</g>
<g stroke-linecap="butt" transform="matrix(1,0,0,1,39,71)" stroke-miterlimit="1.45">
<path fill="none" d="M95 36.6018 L95 58.6341" clip-path="url(#clipPath2)"/>
<path d="M95 66.6341 L100 54.6341 L95 57.6341 L90 54.6341 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M95 106.6357 L95 122.6355" clip-path="url(#clipPath2)"/>
<path d="M95 130.6355 L100 118.6355 L95 121.6355 L90 118.6355 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M95 170.6285 L95 186.6283" clip-path="url(#clipPath2)"/>
<path d="M95 194.6283 L100 182.6283 L95 185.6283 L90 182.6283 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M95 234.583 L95 250.6036" clip-path="url(#clipPath2)"/>
<path d="M95 258.6036 L100 246.6036 L95 249.6036 L90 246.6036 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M95 329.0071 L95 345.007" clip-path="url(#clipPath2)"/>
<path d="M95 353.007 L100 341.007 L95 344.007 L90 341.007 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M95 392.9707 L95 557.4953" clip-path="url(#clipPath2)"/>
<path d="M95 565.4953 L100 553.4953 L95 556.4953 L90 553.4953 Z" clip-path="url(#clipPath2)" stroke="none"/>
<text x="16.9707" xml:space="preserve" y="483.9339" font-family="sans-serif" clip-path="url(#clipPath2)" stroke="none">if save succeeded</text>
</g>
<g fill="rgb(245,245,245)" transform="matrix(1,0,0,1,39,71)" stroke="rgb(245,245,245)">
<rect x="305.2543" y="315.5947" clip-path="url(#clipPath2)" width="579.4955" rx="4" ry="4" height="950.0356" stroke="none"/>
<rect x="305.2543" y="315.5947" clip-path="url(#clipPath2)" fill="rgb(235,235,235)" width="579.4955" height="22.3765" stroke="none"/>
</g>
<g font-size="15" stroke-miterlimit="1.45" font-family="sans-serif" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt">
<text x="796.075" xml:space="preserve" y="332.6753" clip-path="url(#clipPath2)" stroke="none">CORNFIELD</text>
<rect x="305.2543" y="315.5947" clip-path="url(#clipPath2)" fill="none" width="579.4955" stroke-dasharray="6,2" rx="4" ry="4" height="950.0356"/>
</g>
<g fill="rgb(225,225,225)" transform="matrix(1,0,0,1,39,71)" stroke="rgb(225,225,225)">
<rect x="350.6917" y="654.9973" clip-path="url(#clipPath2)" width="519.0581" rx="4" ry="4" height="595.633" stroke="none"/>
<rect x="350.6917" y="654.9973" clip-path="url(#clipPath2)" fill="rgb(235,235,235)" width="519.0581" height="22.3765" stroke="none"/>
</g>
<g font-size="15" stroke-miterlimit="1.45" font-family="sans-serif" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt">
<text x="695.9749" xml:space="preserve" y="672.0779" clip-path="url(#clipPath2)" stroke="none">Publication route in app.js</text>
<rect x="350.6917" y="654.9973" clip-path="url(#clipPath2)" fill="none" width="519.0581" stroke-dasharray="6,2" rx="4" ry="4" height="595.633"/>
</g>
<g fill="url(#linearGradient8)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient8)">
<path d="M375.8917 791.9234 L657.0809 791.9234 L646.8809 831.9234 L365.6917 831.9234 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M375.8917 791.9234 L657.0809 791.9234 L646.8809 831.9234 L365.6917 831.9234 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="419.523" y="816.6373" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">project = stringified JSON from DB</text>
</g>
<g fill="url(#linearGradient9)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient9)">
<path d="M375.8917 861.9234 L657.0809 861.9234 L646.8809 901.9234 L365.6917 901.9234 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M375.8917 861.9234 L657.0809 861.9234 L646.8809 901.9234 L365.6917 901.9234 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="377.8306" y="886.6373" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">projectData = sanitizedHTMLinJSON(project.data)</text>
</g>
<g fill="url(#linearGradient10)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient10)">
<path d="M375.8917 931.9234 L657.0809 931.9234 L646.8809 971.9234 L365.6917 971.9234 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M375.8917 931.9234 L657.0809 931.9234 L646.8809 971.9234 L365.6917 971.9234 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="406.8345" y="956.6373" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">popcornString = flat HTML source code</text>
</g>
<g fill="url(#linearGradient11)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient11)">
<path d="M407.8983 1001.9234 L614.8743 1001.9234 L614.8743 1041.9233 L407.8983 1041.9233 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M407.8983 1001.9234 L614.8743 1001.9234 L614.8743 1041.9233 L407.8983 1041.9233 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="416.0103" y="1026.6372" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">writeEmbed( { ... popcornString ...} )</text>
</g>
<g fill="url(#linearGradient12)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient12)">
<path d="M407.8983 1104.9089 L614.8743 1104.9089 L614.8743 1144.9089 L407.8983 1144.9089 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M407.8983 1104.9089 L614.8743 1104.9089 L614.8743 1144.9089 L407.8983 1144.9089 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="457.3687" y="1129.6228" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">writeEmbedShell(...)</text>
</g>
<g fill="url(#linearGradient13)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient13)">
<path d="M407.8983 1174.9089 L614.8743 1174.9089 L614.8743 1214.9089 L407.8983 1214.9089 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M407.8983 1174.9089 L614.8743 1174.9089 L614.8743 1214.9089 L407.8983 1214.9089 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="486.7095" y="1199.6228" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">finished()</text>
</g>
<g fill="url(#linearGradient14)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient14)">
<path d="M407.8983 699.2458 L614.8743 699.2458 L614.8743 739.2458 L407.8983 739.2458 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M407.8983 699.2458 L614.8743 699.2458 L614.8743 739.2458 L407.8983 739.2458 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="468.7036" y="723.9597" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">User.findProject</text>
</g>
<g fill="url(#linearGradient15)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient15)">
<path d="M702.7498 980.4484 L854.7498 980.4484 L854.7498 1063.3984 L702.7498 1063.3984 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M702.7498 980.4484 L854.7498 980.4484 L854.7498 1063.3984 L702.7498 1063.3984 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="730.7292" y="1011.9361" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">[JADE templating]</text>
<text x="734.072" y="1026.6372" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">Performs its own</text>
<text x="712.3923" y="1041.3384" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">HTML Entity sanitization.</text>
</g>
<g fill="url(#linearGradient16)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient16)">
<path d="M702.7498 1083.434 L854.7498 1083.434 L854.7498 1166.384 L702.7498 1166.384 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M702.7498 1083.434 L854.7498 1083.434 L854.7498 1166.384 L702.7498 1166.384 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="730.7292" y="1114.9216" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">[JADE templating]</text>
<text x="734.072" y="1129.6228" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">Performs its own</text>
<text x="712.3923" y="1144.324" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">HTML Entity sanitization.</text>
</g>
<g fill="url(#linearGradient17)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient17)">
<path d="M320.2543 565.4689 L472.2543 565.4689 L472.2543 605.4689 L320.2543 605.4689 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M320.2543 565.4689 L472.2543 565.4689 L472.2543 605.4689 L320.2543 605.4689 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="370.9095" y="582.8322" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">index.js //</text>
<text x="326.9203" y="597.5333" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">app.post('api/publish/:id?')</text>
</g>
<g fill="url(#linearGradient18)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient18)">
<path d="M320.2543 352.9712 L472.2543 352.9712 L472.2543 392.9712 L320.2543 392.9712 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M320.2543 352.9712 L472.2543 352.9712 L472.2543 392.9712 L320.2543 392.9712 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="370.9095" y="370.3345" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">index.js //</text>
<text x="327.9252" y="385.0356" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">app.post('api/project/:id?')</text>
</g>
<g fill="url(#linearGradient19)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient19)">
<path d="M320.2543 417.4736 L472.2543 417.4736 L472.2543 457.4736 L320.2543 457.4736 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M320.2543 417.4736 L472.2543 417.4736 L472.2543 457.4736 L320.2543 457.4736 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="346.5697" y="434.8369" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">User.createProject</text>
<text x="344.8939" y="449.5381" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">User.updateProject</text>
</g>
<g fill="url(#linearGradient20)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient20)">
<path d="M320.2543 481.976 L472.2543 481.976 L472.2543 536.976 L320.2543 536.976 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M320.2543 481.976 L472.2543 481.976 L472.2543 536.976 L320.2543 536.976 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="378.5824" y="499.4887" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">user.js</text>
<text x="359.9027" y="514.1899" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">Project object</text>
<text x="333.8871" y="528.8911" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">save project data to DB</text>
</g>
<g fill="url(#linearGradient21)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient21)">
<rect x="486.8743" width="128" height="182.4977" y="352.9712" clip-path="url(#clipPath2)" stroke="none"/>
</g>
<g stroke-width="2" transform="matrix(1,0,0,1,39,71)">
<path fill="none" d="M502.8743 352.9712 L486.8743 352.9712 L486.8743 535.4689 L502.8743 535.4689" clip-path="url(#clipPath2)"/>
</g>
<g stroke-miterlimit="1.45" font-family="sans-serif" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt">
<text x="499.5168" xml:space="preserve" y="434.2327" clip-path="url(#clipPath2)" stroke="none">This only saves the</text>
<text x="508.8508" xml:space="preserve" y="448.9339" clip-path="url(#clipPath2)" stroke="none">timeline data as</text>
<text x="507.5266" xml:space="preserve" y="463.6351" clip-path="url(#clipPath2)" stroke="none">stringified JSON</text>
</g>
<g fill="url(#linearGradient22)" stroke-miterlimit="1.45" transform="matrix(1,0,0,1,39,71)" stroke-linecap="butt" stroke="url(#linearGradient22)">
<path d="M968.4972 1078.9943 C942.6252 1026.9323 968.4972 980.4484 1010.9273 1013.9168 C1010.9273 980.4484 1081.2991 980.4484 1081.2991 1013.9168 C1123.7292 980.4484 1149.6012 1026.9323 1123.7292 1067.8381 C1149.6012 1119.9001 1123.7292 1166.384 1091.6479 1132.9155 C1081.2991 1166.384 1010.9273 1166.384 1021.2761 1132.9155 C968.4972 1166.384 942.6252 1119.9001 968.4972 1078.9943 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M968.4972 1078.9943 C942.6252 1026.9323 968.4972 980.4484 1010.9273 1013.9168 C1010.9273 980.4484 1081.2991 980.4484 1081.2991 1013.9168 C1123.7292 980.4484 1149.6012 1026.9323 1123.7292 1067.8381 C1149.6012 1119.9001 1123.7292 1166.384 1091.6479 1132.9155 C1081.2991 1166.384 1010.9273 1166.384 1021.2761 1132.9155 C968.4972 1166.384 942.6252 1119.9001 968.4972 1078.9943 Z" clip-path="url(#clipPath2)" stroke="black"/>
<text x="1015.0966" y="1078.13" clip-path="url(#clipPath2)" fill="black" font-family="sans-serif" stroke="none" xml:space="preserve">Amazon S3</text>
</g>
<g stroke-linecap="butt" transform="matrix(1,0,0,1,39,71)" stroke-miterlimit="1.45">
<path fill="none" d="M366.5471 828.5179 L331.4465 832.5394 L331.4465 881.9234 L362.7644 881.9234" clip-path="url(#clipPath2)"/>
<path d="M370.7644 881.9234 L358.7644 876.9234 L361.7644 881.9234 L358.7644 886.9234 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M367.2499 895.8187 L331.4465 899.2702 L331.4465 951.9234 L362.7644 951.9234" clip-path="url(#clipPath2)"/>
<path d="M370.7644 951.9234 L358.7644 946.9234 L361.7644 951.9234 L358.7644 956.9234 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M511.3863 971.9185 L511.3863 993.9507" clip-path="url(#clipPath2)"/>
<path d="M511.3863 1001.9507 L516.3862 989.9507 L511.3863 992.9507 L506.3863 989.9507 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M511.3863 1041.912 L511.3863 1096.9297" clip-path="url(#clipPath2)"/>
<path d="M511.3863 1104.9297 L516.3862 1092.9297 L511.3863 1095.9297 L506.3863 1092.9297 Z" clip-path="url(#clipPath2)" stroke="none"/>
<text x="433.3628" xml:space="preserve" y="1078.13" font-family="sans-serif" clip-path="url(#clipPath2)" stroke="none">if write succeeded</text>
<path fill="none" d="M511.3863 1144.9041 L511.3863 1166.9363" clip-path="url(#clipPath2)"/>
<path d="M511.3863 1174.9363 L516.3862 1162.9363 L511.3863 1165.9363 L506.3863 1162.9363 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M511.3863 739.2023 L511.3863 783.9322" clip-path="url(#clipPath2)"/>
<path d="M511.3863 791.9322 L516.3862 779.9322 L511.3863 782.9322 L506.3863 779.9322 Z" clip-path="url(#clipPath2)" stroke="none"/>
<text x="436.357" xml:space="preserve" y="770.2985" font-family="sans-serif" clip-path="url(#clipPath2)" stroke="none">if find succeeded</text>
<path fill="none" d="M614.8787 1021.9234 L694.7753 1021.9234" clip-path="url(#clipPath2)"/>
<path d="M702.7753 1021.9234 L690.7753 1016.9234 L693.7753 1021.9234 L690.7753 1026.9233 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M614.8787 1124.9089 L694.7753 1124.9089" clip-path="url(#clipPath2)"/>
<path d="M702.7753 1124.9089 L690.7753 1119.9089 L693.7753 1124.9089 L690.7753 1129.9089 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M407.8734 1194.9089 L325.9954 1194.9089 L325.9954 641.0733 L364.6976 610.4435" clip-path="url(#clipPath2)"/>
<path d="M370.9707 605.4789 L358.4581 609.0052 L363.9135 611.0641 L364.6639 616.8466 Z" clip-path="url(#clipPath2)" stroke="none"/>
<text x="326.4229" xml:space="preserve" y="1192.2722" font-family="sans-serif" clip-path="url(#clipPath2)" stroke="none">response</text>
<text x="332.4317" xml:space="preserve" y="1206.9734" font-family="sans-serif" clip-path="url(#clipPath2)" stroke="none">formed</text>
<path fill="none" d="M198.5194 585.4689 L312.2209 585.4689" clip-path="url(#clipPath2)"/>
<path d="M320.2209 585.4689 L308.2209 580.4689 L311.2209 585.4689 L308.2209 590.4689 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M413.4847 605.4897 L488.9346 693.1582" clip-path="url(#clipPath2)"/>
<path d="M494.1531 699.2218 L490.1151 686.8649 L488.2823 692.4003 L482.5356 693.388 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M198.5194 372.9712 L312.2209 372.9712" clip-path="url(#clipPath2)"/>
<path d="M320.2209 372.9712 L308.2209 367.9712 L311.2209 372.9712 L308.2209 377.9712 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M396.2543 392.9707 L396.2543 409.4386" clip-path="url(#clipPath2)"/>
<path d="M396.2543 417.4386 L401.2543 405.4386 L396.2543 408.4386 L391.2543 405.4386 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M396.2543 457.4782 L396.2543 473.9791" clip-path="url(#clipPath2)"/>
<path d="M396.2543 481.9791 L401.2543 469.9791 L396.2543 472.9791 L391.2543 469.9791 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M854.7617 1036.5629 L952.5325 1055.3931" clip-path="url(#clipPath2)"/>
<path d="M960.3881 1056.906 L949.5503 1049.7268 L951.5505 1055.204 L947.6591 1059.5464 Z" clip-path="url(#clipPath2)" stroke="none"/>
<path fill="none" d="M854.7617 1110.2695 L955.1486 1090.9355" clip-path="url(#clipPath2)"/>
<path d="M963.0042 1089.4225 L950.2751 1086.7823 L954.1666 1091.1246 L952.1664 1096.6018 Z" clip-path="url(#clipPath2)" stroke="none"/>
</g>
</g>
</svg>

После

Ширина:  |  Высота:  |  Размер: 32 KiB