From de62a08307136d06fe74881738b51b7605c48897 Mon Sep 17 00:00:00 2001 From: Devin Howard Date: Thu, 14 Apr 2016 14:12:12 +0800 Subject: [PATCH] Metamaps.Topic --- app/assets/javascripts/application.js | 1 + .../javascripts/src/Metamaps.Topic.js.erb | 371 ++++++++++++++++++ app/assets/javascripts/src/Metamaps.js.erb | 349 ---------------- 3 files changed, 372 insertions(+), 349 deletions(-) create mode 100644 app/assets/javascripts/src/Metamaps.Topic.js.erb diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index e4bb6a7d..da6b650a 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -25,6 +25,7 @@ //= require ./src/views/room //= require ./src/JIT //= require ./src/Metamaps +//= require ./src/Metamaps.Topic //= require ./src/Metamaps.Synapse //= require ./src/Metamaps.Map //= require ./src/Metamaps.Account diff --git a/app/assets/javascripts/src/Metamaps.Topic.js.erb b/app/assets/javascripts/src/Metamaps.Topic.js.erb new file mode 100644 index 00000000..c4f49276 --- /dev/null +++ b/app/assets/javascripts/src/Metamaps.Topic.js.erb @@ -0,0 +1,371 @@ +/* global Metamaps, $ */ + +/* + * Metamaps.Topic.js.erb + * + * Dependencies: + * - Metamaps.Active + * - Metamaps.Backbone + * - Metamaps.Backbone + * - Metamaps.Create + * - Metamaps.Creators + * - Metamaps.Famous + * - Metamaps.Filter + * - Metamaps.GlobalUI + * - Metamaps.JIT + * - Metamaps.Mappings + * - Metamaps.Selected + * - Metamaps.Settings + * - Metamaps.SynapseCard + * - Metamaps.Synapses + * - Metamaps.TopicCard + * - Metamaps.Topics + * - Metamaps.Util + * - Metamaps.Visualize + * - Metamaps.tempInit + * - Metamaps.tempNode + * - Metamaps.tempNode2 + */ + +Metamaps.Topic = { + // this function is to retrieve a topic JSON object from the database + // @param id = the id of the topic to retrieve + get: function (id, callback) { + // if the desired topic is not yet in the local topic repository, fetch it + if (Metamaps.Topics.get(id) == undefined) { + //console.log("Ajax call!"); + if (!callback) { + var e = $.ajax({ + url: "/topics/" + id + ".json", + async: false + }); + Metamaps.Topics.add($.parseJSON(e.responseText)); + return Metamaps.Topics.get(id); + } else { + return $.ajax({ + url: "/topics/" + id + ".json", + success: function (data) { + Metamaps.Topics.add(data); + callback(Metamaps.Topics.get(id)); + } + }); + } + } else { + if (!callback) { + return Metamaps.Topics.get(id); + } else { + return callback(Metamaps.Topics.get(id)); + } + } + }, + launch: function (id) { + var bb = Metamaps.Backbone; + var start = function (data) { + Metamaps.Active.Topic = new bb.Topic(data.topic); + Metamaps.Creators = new bb.MapperCollection(data.creators); + Metamaps.Topics = new bb.TopicCollection([data.topic].concat(data.relatives)); + Metamaps.Synapses = new bb.SynapseCollection(data.synapses); + Metamaps.Backbone.attachCollectionEvents(); + + // set filter mapper H3 text + $('#filter_by_mapper h3').html('CREATORS'); + + // build and render the visualization + Metamaps.Visualize.type = "RGraph"; + Metamaps.JIT.prepareVizData(); + + // update filters + Metamaps.Filter.reset(); + + // reset selected arrays + Metamaps.Selected.reset(); + + // these three update the actual filter box with the right list items + Metamaps.Filter.checkMetacodes(); + Metamaps.Filter.checkSynapses(); + Metamaps.Filter.checkMappers(); + } + + $.ajax({ + url: "/topics/" + id + "/network.json", + success: start + }); + }, + end: function () { + if (Metamaps.Active.Topic) { + $('.rightclickmenu').remove(); + Metamaps.TopicCard.hideCard(); + Metamaps.SynapseCard.hideCard(); + Metamaps.Filter.close(); + } + }, + centerOn: function (nodeid) { + if (!Metamaps.Visualize.mGraph.busy) { + Metamaps.Visualize.mGraph.onClick(nodeid, { + hideLabels: false, + duration: 1000, + onComplete: function () { + + } + }); + } + }, + fetchRelatives: function(node, metacode_id) { + + var topics = Metamaps.Topics.map(function(t){ return t.id }); + var topics_string = topics.join(); + + var creators = Metamaps.Creators.map(function(t){ return t.id }); + var creators_string = creators.join(); + + var topic = node.getData('topic'); + + var successCallback = function(data) { + if (data.creators.length > 0) Metamaps.Creators.add(data.creators); + if (data.topics.length > 0) Metamaps.Topics.add(data.topics); + if (data.synapses.length > 0) Metamaps.Synapses.add(data.synapses); + + var topicColl = new Metamaps.Backbone.TopicCollection(data.topics); + topicColl.add(topic); + var synapseColl = new Metamaps.Backbone.SynapseCollection(data.synapses); + + var graph = Metamaps.JIT.convertModelsToJIT(topicColl, synapseColl)[0]; + Metamaps.Visualize.mGraph.op.sum(graph, { + type: 'fade', + duration: 500, + hideLabels: false + }); + + var i, l, t, s; + + Metamaps.Visualize.mGraph.graph.eachNode(function (n) { + t = Metamaps.Topics.get(n.id); + t.set({ node: n }, { silent: true }); + t.updateNode(); + + n.eachAdjacency(function (edge) { + if(!edge.getData('init')) { + edge.setData('init', true); + + l = edge.getData('synapseIDs').length; + for (i = 0; i < l; i++) { + s = Metamaps.Synapses.get(edge.getData('synapseIDs')[i]); + s.set({ edge: edge }, { silent: true }); + s.updateEdge(); + } + } + }); + }); + }; + + var paramsString = metacode_id ? "metacode=" + metacode_id + "&" : ""; + paramsString += "network=" + topics_string + "&creators=" + creators_string; + + $.ajax({ + type: "Get", + url: "/topics/" + topic.id + "/relatives.json?" + paramsString, + success: successCallback, + error: function () { + + } + }); + }, + /* + * + * + */ + renderTopic: function (mapping, topic, createNewInDB, permitCreateSynapseAfter) { + var self = Metamaps.Topic; + + var nodeOnViz, tempPos; + + var newnode = topic.createNode(); + + var midpoint = {}, pixelPos; + + if (!$.isEmptyObject(Metamaps.Visualize.mGraph.graph.nodes)) { + Metamaps.Visualize.mGraph.graph.addNode(newnode); + nodeOnViz = Metamaps.Visualize.mGraph.graph.getNode(newnode.id); + topic.set('node', nodeOnViz, {silent: true}); + topic.updateNode(); // links the topic and the mapping to the node + + nodeOnViz.setData("dim", 1, "start"); + nodeOnViz.setData("dim", 25, "end"); + if (Metamaps.Visualize.type === "RGraph") { + tempPos = new $jit.Complex(mapping.get('xloc'), mapping.get('yloc')); + tempPos = tempPos.toPolar(); + nodeOnViz.setPos(tempPos, "current"); + nodeOnViz.setPos(tempPos, "start"); + nodeOnViz.setPos(tempPos, "end"); + } else if (Metamaps.Visualize.type === "ForceDirected") { + nodeOnViz.setPos(new $jit.Complex(mapping.get('xloc'), mapping.get('yloc')), "current"); + nodeOnViz.setPos(new $jit.Complex(mapping.get('xloc'), mapping.get('yloc')), "start"); + nodeOnViz.setPos(new $jit.Complex(mapping.get('xloc'), mapping.get('yloc')), "end"); + } + if (Metamaps.Create.newTopic.addSynapse && permitCreateSynapseAfter) { + Metamaps.Create.newSynapse.topic1id = Metamaps.tempNode.getData('topic').id; + + // position the form + midpoint.x = Metamaps.tempNode.pos.getc().x + (nodeOnViz.pos.getc().x - Metamaps.tempNode.pos.getc().x) / 2; + midpoint.y = Metamaps.tempNode.pos.getc().y + (nodeOnViz.pos.getc().y - Metamaps.tempNode.pos.getc().y) / 2; + pixelPos = Metamaps.Util.coordsToPixels(midpoint); + $('#new_synapse').css('left', pixelPos.x + "px"); + $('#new_synapse').css('top', pixelPos.y + "px"); + // show the form + Metamaps.Create.newSynapse.open(); + Metamaps.Visualize.mGraph.fx.animate({ + modes: ["node-property:dim"], + duration: 500, + onComplete: function () { + Metamaps.tempNode = null; + Metamaps.tempNode2 = null; + Metamaps.tempInit = false; + } + }); + } else { + Metamaps.Visualize.mGraph.fx.plotNode(nodeOnViz, Metamaps.Visualize.mGraph.canvas); + Metamaps.Visualize.mGraph.fx.animate({ + modes: ["node-property:dim"], + duration: 500, + onComplete: function () { + + } + }); + } + } else { + Metamaps.Visualize.mGraph.loadJSON(newnode); + nodeOnViz = Metamaps.Visualize.mGraph.graph.getNode(newnode.id); + topic.set('node', nodeOnViz, {silent: true}); + topic.updateNode(); // links the topic and the mapping to the node + + nodeOnViz.setData("dim", 1, "start"); + nodeOnViz.setData("dim", 25, "end"); + nodeOnViz.setPos(new $jit.Complex(mapping.get('xloc'), mapping.get('yloc')), "current"); + nodeOnViz.setPos(new $jit.Complex(mapping.get('xloc'), mapping.get('yloc')), "start"); + nodeOnViz.setPos(new $jit.Complex(mapping.get('xloc'), mapping.get('yloc')), "end"); + Metamaps.Visualize.mGraph.fx.plotNode(nodeOnViz, Metamaps.Visualize.mGraph.canvas); + Metamaps.Visualize.mGraph.fx.animate({ + modes: ["node-property:dim"], + duration: 500, + onComplete: function () { + + } + }); + } + + var mappingSuccessCallback = function (mappingModel, response) { + var newTopicData = { + mappingid: mappingModel.id, + mappableid: mappingModel.get('mappable_id') + }; + + $(document).trigger(Metamaps.JIT.events.newTopic, [newTopicData]); + }; + var topicSuccessCallback = function (topicModel, response) { + if (Metamaps.Active.Map) { + mapping.save({ mappable_id: topicModel.id }, { + success: mappingSuccessCallback, + error: function (model, response) { + console.log('error saving mapping to database'); + } + }); + } + + if (Metamaps.Create.newTopic.addSynapse) { + Metamaps.Create.newSynapse.topic2id = topicModel.id; + } + }; + + if (!Metamaps.Settings.sandbox && createNewInDB) { + if (topic.isNew()) { + topic.save(null, { + success: topicSuccessCallback, + error: function (model, response) { + console.log('error saving topic to database'); + } + }); + } else if (!topic.isNew() && Metamaps.Active.Map) { + mapping.save(null, { + success: mappingSuccessCallback + }); + } + } + }, + createTopicLocally: function () { + var self = Metamaps.Topic; + + if (Metamaps.Create.newTopic.name === "") { + Metamaps.GlobalUI.notifyUser("Please enter a topic title..."); + return; + } + + // hide the 'double-click to add a topic' message + Metamaps.Famous.viz.hideInstructions(); + + $(document).trigger(Metamaps.Map.events.editedByActiveMapper); + + var metacode = Metamaps.Metacodes.get(Metamaps.Create.newTopic.metacode); + + var topic = new Metamaps.Backbone.Topic({ + name: Metamaps.Create.newTopic.name, + metacode_id: metacode.id + }); + Metamaps.Topics.add(topic); + + var mapping = new Metamaps.Backbone.Mapping({ + xloc: Metamaps.Create.newTopic.x, + yloc: Metamaps.Create.newTopic.y, + mappable_id: topic.cid, + mappable_type: "Topic", + }); + Metamaps.Mappings.add(mapping); + + //these can't happen until the value is retrieved, which happens in the line above + Metamaps.Create.newTopic.hide(); + + self.renderTopic(mapping, topic, true, true); // this function also includes the creation of the topic in the database + }, + getTopicFromAutocomplete: function (id) { + var self = Metamaps.Topic; + + $(document).trigger(Metamaps.Map.events.editedByActiveMapper); + + Metamaps.Create.newTopic.hide(); + + var topic = self.get(id); + + var mapping = new Metamaps.Backbone.Mapping({ + xloc: Metamaps.Create.newTopic.x, + yloc: Metamaps.Create.newTopic.y, + mappable_type: "Topic", + mappable_id: topic.id, + }); + Metamaps.Mappings.add(mapping); + + self.renderTopic(mapping, topic, true, true); + }, + getTopicFromSearch: function (event, id) { + var self = Metamaps.Topic; + + $(document).trigger(Metamaps.Map.events.editedByActiveMapper); + + var topic = self.get(id); + + var nextCoords = Metamaps.Map.getNextCoord(); + var mapping = new Metamaps.Backbone.Mapping({ + xloc: nextCoords.x, + yloc: nextCoords.y, + mappable_type: "Topic", + mappable_id: topic.id, + }); + Metamaps.Mappings.add(mapping); + + self.renderTopic(mapping, topic, true, true); + + Metamaps.GlobalUI.notifyUser('Topic was added to your map!'); + + event.stopPropagation(); + event.preventDefault(); + return false; + } +}; // end Metamaps.Topic diff --git a/app/assets/javascripts/src/Metamaps.js.erb b/app/assets/javascripts/src/Metamaps.js.erb index 407cbcbf..5f3cc313 100644 --- a/app/assets/javascripts/src/Metamaps.js.erb +++ b/app/assets/javascripts/src/Metamaps.js.erb @@ -4223,352 +4223,3 @@ Metamaps.Organize = { } else alert('please call function with a valid layout dammit!'); } }; // end Metamaps.Organize - - -/* - * - * TOPIC - * - */ -Metamaps.Topic = { - // this function is to retrieve a topic JSON object from the database - // @param id = the id of the topic to retrieve - get: function (id, callback) { - // if the desired topic is not yet in the local topic repository, fetch it - if (Metamaps.Topics.get(id) == undefined) { - //console.log("Ajax call!"); - if (!callback) { - var e = $.ajax({ - url: "/topics/" + id + ".json", - async: false - }); - Metamaps.Topics.add($.parseJSON(e.responseText)); - return Metamaps.Topics.get(id); - } else { - return $.ajax({ - url: "/topics/" + id + ".json", - success: function (data) { - Metamaps.Topics.add(data); - callback(Metamaps.Topics.get(id)); - } - }); - } - } else { - if (!callback) { - return Metamaps.Topics.get(id); - } else { - return callback(Metamaps.Topics.get(id)); - } - } - }, - launch: function (id) { - var bb = Metamaps.Backbone; - var start = function (data) { - Metamaps.Active.Topic = new bb.Topic(data.topic); - Metamaps.Creators = new bb.MapperCollection(data.creators); - Metamaps.Topics = new bb.TopicCollection([data.topic].concat(data.relatives)); - Metamaps.Synapses = new bb.SynapseCollection(data.synapses); - Metamaps.Backbone.attachCollectionEvents(); - - // set filter mapper H3 text - $('#filter_by_mapper h3').html('CREATORS'); - - // build and render the visualization - Metamaps.Visualize.type = "RGraph"; - Metamaps.JIT.prepareVizData(); - - // update filters - Metamaps.Filter.reset(); - - // reset selected arrays - Metamaps.Selected.reset(); - - // these three update the actual filter box with the right list items - Metamaps.Filter.checkMetacodes(); - Metamaps.Filter.checkSynapses(); - Metamaps.Filter.checkMappers(); - } - - $.ajax({ - url: "/topics/" + id + "/network.json", - success: start - }); - }, - end: function () { - if (Metamaps.Active.Topic) { - $('.rightclickmenu').remove(); - Metamaps.TopicCard.hideCard(); - Metamaps.SynapseCard.hideCard(); - Metamaps.Filter.close(); - } - }, - centerOn: function (nodeid) { - if (!Metamaps.Visualize.mGraph.busy) { - Metamaps.Visualize.mGraph.onClick(nodeid, { - hideLabels: false, - duration: 1000, - onComplete: function () { - - } - }); - } - }, - fetchRelatives: function(node, metacode_id) { - - var topics = Metamaps.Topics.map(function(t){ return t.id }); - var topics_string = topics.join(); - - var creators = Metamaps.Creators.map(function(t){ return t.id }); - var creators_string = creators.join(); - - var topic = node.getData('topic'); - - var successCallback = function(data) { - if (data.creators.length > 0) Metamaps.Creators.add(data.creators); - if (data.topics.length > 0) Metamaps.Topics.add(data.topics); - if (data.synapses.length > 0) Metamaps.Synapses.add(data.synapses); - - var topicColl = new Metamaps.Backbone.TopicCollection(data.topics); - topicColl.add(topic); - var synapseColl = new Metamaps.Backbone.SynapseCollection(data.synapses); - - var graph = Metamaps.JIT.convertModelsToJIT(topicColl, synapseColl)[0]; - Metamaps.Visualize.mGraph.op.sum(graph, { - type: 'fade', - duration: 500, - hideLabels: false - }); - - var i, l, t, s; - - Metamaps.Visualize.mGraph.graph.eachNode(function (n) { - t = Metamaps.Topics.get(n.id); - t.set({ node: n }, { silent: true }); - t.updateNode(); - - n.eachAdjacency(function (edge) { - if(!edge.getData('init')) { - edge.setData('init', true); - - l = edge.getData('synapseIDs').length; - for (i = 0; i < l; i++) { - s = Metamaps.Synapses.get(edge.getData('synapseIDs')[i]); - s.set({ edge: edge }, { silent: true }); - s.updateEdge(); - } - } - }); - }); - }; - - var paramsString = metacode_id ? "metacode=" + metacode_id + "&" : ""; - paramsString += "network=" + topics_string + "&creators=" + creators_string; - - $.ajax({ - type: "Get", - url: "/topics/" + topic.id + "/relatives.json?" + paramsString, - success: successCallback, - error: function () { - - } - }); - }, - /* - * - * - */ - renderTopic: function (mapping, topic, createNewInDB, permitCreateSynapseAfter) { - var self = Metamaps.Topic; - - var nodeOnViz, tempPos; - - var newnode = topic.createNode(); - - var midpoint = {}, pixelPos; - - if (!$.isEmptyObject(Metamaps.Visualize.mGraph.graph.nodes)) { - Metamaps.Visualize.mGraph.graph.addNode(newnode); - nodeOnViz = Metamaps.Visualize.mGraph.graph.getNode(newnode.id); - topic.set('node', nodeOnViz, {silent: true}); - topic.updateNode(); // links the topic and the mapping to the node - - nodeOnViz.setData("dim", 1, "start"); - nodeOnViz.setData("dim", 25, "end"); - if (Metamaps.Visualize.type === "RGraph") { - tempPos = new $jit.Complex(mapping.get('xloc'), mapping.get('yloc')); - tempPos = tempPos.toPolar(); - nodeOnViz.setPos(tempPos, "current"); - nodeOnViz.setPos(tempPos, "start"); - nodeOnViz.setPos(tempPos, "end"); - } else if (Metamaps.Visualize.type === "ForceDirected") { - nodeOnViz.setPos(new $jit.Complex(mapping.get('xloc'), mapping.get('yloc')), "current"); - nodeOnViz.setPos(new $jit.Complex(mapping.get('xloc'), mapping.get('yloc')), "start"); - nodeOnViz.setPos(new $jit.Complex(mapping.get('xloc'), mapping.get('yloc')), "end"); - } - if (Metamaps.Create.newTopic.addSynapse && permitCreateSynapseAfter) { - Metamaps.Create.newSynapse.topic1id = Metamaps.tempNode.getData('topic').id; - - // position the form - midpoint.x = Metamaps.tempNode.pos.getc().x + (nodeOnViz.pos.getc().x - Metamaps.tempNode.pos.getc().x) / 2; - midpoint.y = Metamaps.tempNode.pos.getc().y + (nodeOnViz.pos.getc().y - Metamaps.tempNode.pos.getc().y) / 2; - pixelPos = Metamaps.Util.coordsToPixels(midpoint); - $('#new_synapse').css('left', pixelPos.x + "px"); - $('#new_synapse').css('top', pixelPos.y + "px"); - // show the form - Metamaps.Create.newSynapse.open(); - Metamaps.Visualize.mGraph.fx.animate({ - modes: ["node-property:dim"], - duration: 500, - onComplete: function () { - Metamaps.tempNode = null; - Metamaps.tempNode2 = null; - Metamaps.tempInit = false; - } - }); - } else { - Metamaps.Visualize.mGraph.fx.plotNode(nodeOnViz, Metamaps.Visualize.mGraph.canvas); - Metamaps.Visualize.mGraph.fx.animate({ - modes: ["node-property:dim"], - duration: 500, - onComplete: function () { - - } - }); - } - } else { - Metamaps.Visualize.mGraph.loadJSON(newnode); - nodeOnViz = Metamaps.Visualize.mGraph.graph.getNode(newnode.id); - topic.set('node', nodeOnViz, {silent: true}); - topic.updateNode(); // links the topic and the mapping to the node - - nodeOnViz.setData("dim", 1, "start"); - nodeOnViz.setData("dim", 25, "end"); - nodeOnViz.setPos(new $jit.Complex(mapping.get('xloc'), mapping.get('yloc')), "current"); - nodeOnViz.setPos(new $jit.Complex(mapping.get('xloc'), mapping.get('yloc')), "start"); - nodeOnViz.setPos(new $jit.Complex(mapping.get('xloc'), mapping.get('yloc')), "end"); - Metamaps.Visualize.mGraph.fx.plotNode(nodeOnViz, Metamaps.Visualize.mGraph.canvas); - Metamaps.Visualize.mGraph.fx.animate({ - modes: ["node-property:dim"], - duration: 500, - onComplete: function () { - - } - }); - } - - var mappingSuccessCallback = function (mappingModel, response) { - var newTopicData = { - mappingid: mappingModel.id, - mappableid: mappingModel.get('mappable_id') - }; - - $(document).trigger(Metamaps.JIT.events.newTopic, [newTopicData]); - }; - var topicSuccessCallback = function (topicModel, response) { - if (Metamaps.Active.Map) { - mapping.save({ mappable_id: topicModel.id }, { - success: mappingSuccessCallback, - error: function (model, response) { - console.log('error saving mapping to database'); - } - }); - } - - if (Metamaps.Create.newTopic.addSynapse) { - Metamaps.Create.newSynapse.topic2id = topicModel.id; - } - }; - - if (!Metamaps.Settings.sandbox && createNewInDB) { - if (topic.isNew()) { - topic.save(null, { - success: topicSuccessCallback, - error: function (model, response) { - console.log('error saving topic to database'); - } - }); - } else if (!topic.isNew() && Metamaps.Active.Map) { - mapping.save(null, { - success: mappingSuccessCallback - }); - } - } - }, - createTopicLocally: function () { - var self = Metamaps.Topic; - - if (Metamaps.Create.newTopic.name === "") { - Metamaps.GlobalUI.notifyUser("Please enter a topic title..."); - return; - } - - // hide the 'double-click to add a topic' message - Metamaps.Famous.viz.hideInstructions(); - - $(document).trigger(Metamaps.Map.events.editedByActiveMapper); - - var metacode = Metamaps.Metacodes.get(Metamaps.Create.newTopic.metacode); - - var topic = new Metamaps.Backbone.Topic({ - name: Metamaps.Create.newTopic.name, - metacode_id: metacode.id - }); - Metamaps.Topics.add(topic); - - var mapping = new Metamaps.Backbone.Mapping({ - xloc: Metamaps.Create.newTopic.x, - yloc: Metamaps.Create.newTopic.y, - mappable_id: topic.cid, - mappable_type: "Topic", - }); - Metamaps.Mappings.add(mapping); - - //these can't happen until the value is retrieved, which happens in the line above - Metamaps.Create.newTopic.hide(); - - self.renderTopic(mapping, topic, true, true); // this function also includes the creation of the topic in the database - }, - getTopicFromAutocomplete: function (id) { - var self = Metamaps.Topic; - - $(document).trigger(Metamaps.Map.events.editedByActiveMapper); - - Metamaps.Create.newTopic.hide(); - - var topic = self.get(id); - - var mapping = new Metamaps.Backbone.Mapping({ - xloc: Metamaps.Create.newTopic.x, - yloc: Metamaps.Create.newTopic.y, - mappable_type: "Topic", - mappable_id: topic.id, - }); - Metamaps.Mappings.add(mapping); - - self.renderTopic(mapping, topic, true, true); - }, - getTopicFromSearch: function (event, id) { - var self = Metamaps.Topic; - - $(document).trigger(Metamaps.Map.events.editedByActiveMapper); - - var topic = self.get(id); - - var nextCoords = Metamaps.Map.getNextCoord(); - var mapping = new Metamaps.Backbone.Mapping({ - xloc: nextCoords.x, - yloc: nextCoords.y, - mappable_type: "Topic", - mappable_id: topic.id, - }); - Metamaps.Mappings.add(mapping); - - self.renderTopic(mapping, topic, true, true); - - Metamaps.GlobalUI.notifyUser('Topic was added to your map!'); - - event.stopPropagation(); - event.preventDefault(); - return false; - } -}; // end Metamaps.Topic