metamaps--metamaps/frontend/src/Metamaps/Synapse.js

100 lines
3.3 KiB
JavaScript
Raw Normal View History

/* global $ */
2016-04-14 14:05:50 +08:00
2016-09-22 18:31:56 +08:00
import Active from './Active'
import Control from './Control'
import Create from './Create'
2016-10-03 08:32:37 +08:00
import DataModel from './DataModel'
2017-01-11 23:17:57 -05:00
import Engine from './Engine'
2016-09-22 18:31:56 +08:00
import JIT from './JIT'
import Map from './Map'
import Selected from './Selected'
import Settings from './Settings'
import Visualize from './Visualize'
const noOp = () => {}
const Synapse = {
2016-04-14 14:16:16 +08:00
// this function is to retrieve a synapse JSON object from the database
// @param id = the id of the synapse to retrieve
2016-11-07 15:25:08 -05:00
get: function(id, callback = noOp) {
2016-04-14 14:16:16 +08:00
// if the desired topic is not yet in the local topic repository, fetch it
2016-11-07 15:25:08 -05:00
if (DataModel.Synapses.get(id) === undefined) {
$.ajax({
url: '/synapses/' + id + '.json',
2016-11-07 15:25:08 -05:00
success: function(data) {
DataModel.Synapses.add(data)
callback(DataModel.Synapses.get(id))
}
})
} else callback(DataModel.Synapses.get(id))
2016-04-14 14:16:16 +08:00
},
2017-02-04 04:13:59 +00:00
renderSynapse: function(mapping, synapse, node1, node2, fromRemote) {
const newedge = synapse.createEdge(mapping)
Visualize.mGraph.graph.addAdjacence(node1, node2, newedge.data)
const edgeOnViz = Visualize.mGraph.graph.getAdjacence(node1.id, node2.id)
2016-04-14 14:16:16 +08:00
synapse.set('edge', edgeOnViz)
synapse.updateEdge() // links the synapse and the mapping to the edge
2017-02-04 04:13:59 +00:00
if (!fromRemote && synapse.isNew()) {
synapse.save(null, {
success: synapseModel => Active.Map && mapping.save({ mappable_id: synapseModel.id })
})
} else if (!fromRemote && !synapse.isNew() && Active.Map) {
mapping.save()
2016-04-14 14:16:16 +08:00
}
},
2017-02-04 04:13:59 +00:00
createSynapseLocally: function(topic1id, topic2id, manual) {
2016-11-07 15:25:08 -05:00
var self = Synapse
2016-09-22 18:31:56 +08:00
$(document).trigger(Map.events.editedByActiveMapper)
2016-04-14 14:16:16 +08:00
// for each node in this array we will create a synapse going to the position2 node.
2017-02-04 04:13:59 +00:00
const synapsesToCreate = []
const topic2 = DataModel.Topics.get(topic2id)
const node2 = topic2.get('node')
if (Selected.Nodes.length === 0) {
synapsesToCreate.push(DataModel.Topics.get(topic1id).get('node'))
} else {
synapsesToCreate.concat(Selected.Nodes)
}
synapsesToCreate.forEach(node1 => {
2017-02-04 04:13:59 +00:00
const topic1 = node1.getData('topic')
const synapse = new DataModel.Synapse({
desc: Create.newSynapse.description || '',
2017-02-04 04:13:59 +00:00
topic1_id: topic1.id,
topic2_id: topic2.id
2016-04-14 14:16:16 +08:00
})
DataModel.Synapses.add(synapse)
2017-02-04 04:13:59 +00:00
const mapping = new DataModel.Mapping({
2016-04-14 14:16:16 +08:00
mappable_type: 'Synapse',
2016-11-07 15:25:08 -05:00
mappable_id: synapse.cid
2016-04-14 14:16:16 +08:00
})
DataModel.Mappings.add(mapping)
2016-04-14 14:16:16 +08:00
// this function also includes the creation of the synapse in the database
2017-02-04 04:13:59 +00:00
self.renderSynapse(mapping, synapse, node1, node2)
}) // for each in synapsesToCreate
2017-02-04 04:13:59 +00:00
if (manual) {
Engine.runLayout()
Create.newSynapse.hide()
}
2016-04-14 14:16:16 +08:00
},
2016-11-07 15:25:08 -05:00
getSynapseFromAutocomplete: function(id) {
var self = Synapse
2016-04-14 14:16:16 +08:00
self.get(id, synapse => {
2016-11-07 15:25:08 -05:00
const mapping = new DataModel.Mapping({
mappable_type: 'Synapse',
2016-11-07 15:25:08 -05:00
mappable_id: synapse.id
})
DataModel.Mappings.add(mapping)
2016-11-07 15:25:08 -05:00
const topic1 = DataModel.Topics.get(Create.newSynapse.topic1id)
const node1 = topic1.get('node')
const topic2 = DataModel.Topics.get(Create.newSynapse.topic2id)
const node2 = topic2.get('node')
Create.newSynapse.hide()
2017-02-04 04:13:59 +00:00
self.renderSynapse(mapping, synapse, node1, node2)
Engine.runLayout()
2016-04-14 14:16:16 +08:00
})
}
}
export default Synapse