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

174 lines
4.7 KiB
JavaScript
Raw Normal View History

2016-04-14 06:05:50 +00:00
/* global Metamaps, $ */
2016-09-22 10:31:56 +00:00
import Active from './Active'
import Control from './Control'
import Create from './Create'
import JIT from './JIT'
import Map from './Map'
import Selected from './Selected'
import Settings from './Settings'
import Visualize from './Visualize'
2016-04-14 06:05:50 +00:00
/*
* Metamaps.Synapse.js.erb
*
* Dependencies:
* - Metamaps.Backbone
* - Metamaps.Mappings
* - Metamaps.Synapses
* - Metamaps.Topics
*/
const Synapse = {
2016-04-14 06:16:16 +00:00
// this function is to retrieve a synapse JSON object from the database
// @param id = the id of the synapse to retrieve
get: function (id, callback) {
// if the desired topic is not yet in the local topic repository, fetch it
if (Metamaps.Synapses.get(id) == undefined) {
if (!callback) {
var e = $.ajax({
url: '/synapses/' + id + '.json',
async: false
})
Metamaps.Synapses.add($.parseJSON(e.responseText))
return Metamaps.Synapses.get(id)
} else {
return $.ajax({
url: '/synapses/' + id + '.json',
success: function (data) {
Metamaps.Synapses.add(data)
callback(Metamaps.Synapses.get(id))
}
})
}
} else {
if (!callback) {
return Metamaps.Synapses.get(id)
} else {
return callback(Metamaps.Synapses.get(id))
}
2016-04-14 06:05:50 +00:00
}
2016-04-14 06:16:16 +00:00
},
/*
*
*
*/
renderSynapse: function (mapping, synapse, node1, node2, createNewInDB) {
2016-09-22 10:31:56 +00:00
var self = Synapse
2016-04-14 06:16:16 +00:00
var edgeOnViz
var newedge = synapse.createEdge(mapping)
2016-09-22 10:31:56 +00:00
Visualize.mGraph.graph.addAdjacence(node1, node2, newedge.data)
edgeOnViz = Visualize.mGraph.graph.getAdjacence(node1.id, node2.id)
2016-04-14 06:16:16 +00:00
synapse.set('edge', edgeOnViz)
synapse.updateEdge() // links the synapse and the mapping to the edge
2016-09-22 10:31:56 +00:00
Control.selectEdge(edgeOnViz)
2016-04-14 06:16:16 +00:00
var mappingSuccessCallback = function (mappingModel, response) {
var newSynapseData = {
mappingid: mappingModel.id,
mappableid: mappingModel.get('mappable_id')
}
2016-09-22 10:31:56 +00:00
$(document).trigger(JIT.events.newSynapse, [newSynapseData])
2016-04-14 06:16:16 +00:00
}
var synapseSuccessCallback = function (synapseModel, response) {
2016-09-22 10:31:56 +00:00
if (Active.Map) {
2016-04-14 06:16:16 +00:00
mapping.save({ mappable_id: synapseModel.id }, {
success: mappingSuccessCallback
})
}
}
2016-09-22 10:31:56 +00:00
if (!Settings.sandbox && createNewInDB) {
2016-04-14 06:16:16 +00:00
if (synapse.isNew()) {
synapse.save(null, {
success: synapseSuccessCallback,
error: function (model, response) {
console.log('error saving synapse to database')
}
})
2016-09-22 10:31:56 +00:00
} else if (!synapse.isNew() && Active.Map) {
2016-04-14 06:16:16 +00:00
mapping.save(null, {
success: mappingSuccessCallback
})
}
}
},
createSynapseLocally: function () {
var self = Synapse,
2016-04-14 06:16:16 +00:00
topic1,
topic2,
node1,
node2,
synapse,
mapping
2016-09-22 10:31:56 +00:00
$(document).trigger(Map.events.editedByActiveMapper)
2016-04-14 06:16:16 +00:00
// for each node in this array we will create a synapse going to the position2 node.
var synapsesToCreate = []
2016-09-22 10:31:56 +00:00
topic2 = Metamaps.Topics.get(Create.newSynapse.topic2id)
2016-04-14 06:16:16 +00:00
node2 = topic2.get('node')
2016-09-22 10:31:56 +00:00
var len = Selected.Nodes.length
2016-04-14 06:16:16 +00:00
if (len == 0) {
2016-09-22 10:31:56 +00:00
topic1 = Metamaps.Topics.get(Create.newSynapse.topic1id)
2016-04-14 06:16:16 +00:00
synapsesToCreate[0] = topic1.get('node')
} else if (len > 0) {
2016-09-22 10:31:56 +00:00
synapsesToCreate = Selected.Nodes
2016-04-14 06:16:16 +00:00
}
for (var i = 0; i < synapsesToCreate.length; i++) {
node1 = synapsesToCreate[i]
topic1 = node1.getData('topic')
synapse = new Metamaps.Backbone.Synapse({
2016-09-22 10:31:56 +00:00
desc: Create.newSynapse.description,
2016-04-14 06:16:16 +00:00
node1_id: topic1.isNew() ? topic1.cid : topic1.id,
node2_id: topic2.isNew() ? topic2.cid : topic2.id,
})
Metamaps.Synapses.add(synapse)
mapping = new Metamaps.Backbone.Mapping({
mappable_type: 'Synapse',
mappable_id: synapse.cid,
})
Metamaps.Mappings.add(mapping)
// this function also includes the creation of the synapse in the database
self.renderSynapse(mapping, synapse, node1, node2, true)
} // for each in synapsesToCreate
2016-09-22 10:31:56 +00:00
Create.newSynapse.hide()
2016-04-14 06:16:16 +00:00
},
getSynapseFromAutocomplete: function (id) {
var self = Synapse,
2016-04-14 06:16:16 +00:00
topic1,
topic2,
node1,
node2
var synapse = self.get(id)
var mapping = new Metamaps.Backbone.Mapping({
mappable_type: 'Synapse',
mappable_id: synapse.id,
})
Metamaps.Mappings.add(mapping)
2016-09-22 10:31:56 +00:00
topic1 = Metamaps.Topics.get(Create.newSynapse.topic1id)
2016-04-14 06:16:16 +00:00
node1 = topic1.get('node')
2016-09-22 10:31:56 +00:00
topic2 = Metamaps.Topics.get(Create.newSynapse.topic2id)
2016-04-14 06:16:16 +00:00
node2 = topic2.get('node')
2016-09-22 10:31:56 +00:00
Create.newSynapse.hide()
2016-04-14 06:16:16 +00:00
self.renderSynapse(mapping, synapse, node1, node2, true)
}
}
export default Synapse