2016-02-07 08:56:03 +00:00
|
|
|
/*
|
|
|
|
* Example tab-separated input:
|
|
|
|
* Some fields will be ignored
|
|
|
|
*
|
|
|
|
* id name metacode desc link user.name permission synapses
|
|
|
|
* 1 topic1 Catalyst admin commons 1->7
|
|
|
|
* 2 topic2 Event admin commons
|
|
|
|
* 5 topic Action admin commons
|
|
|
|
* 6 topic6 Action admin commons 6->7
|
|
|
|
* 7 topic7 Action admin commons 7->8 7<-6 7<-1
|
|
|
|
* 8 topic8 Action admin commons 8<-7
|
|
|
|
*/
|
|
|
|
|
|
|
|
Metamaps.Import = {
|
|
|
|
headersWhitelist: [
|
|
|
|
'name', 'metacode', 'desc', 'link', 'permission'
|
|
|
|
],
|
|
|
|
|
|
|
|
init: function() {
|
|
|
|
var self = Metamaps.Import;
|
|
|
|
$('body').bind('paste', function(e) {
|
|
|
|
var text = e.originalEvent.clipboardData.getData('text/plain');
|
|
|
|
var parsed = self.parseTabbedString(text);
|
|
|
|
|
2016-02-07 09:51:01 +00:00
|
|
|
if (parsed.length > 0 &&
|
|
|
|
confirm("Are you sure you want to create " + parsed.length +
|
|
|
|
" new topics?")) {
|
2016-02-07 08:56:03 +00:00
|
|
|
self.importTopics(parsed);
|
|
|
|
}//if
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
importTopics: function(parsedTopics) {
|
|
|
|
var self = Metamaps.Import;
|
|
|
|
|
|
|
|
var x = -200;
|
|
|
|
var y = -200;
|
|
|
|
parsedTopics.forEach(function(topic) {
|
|
|
|
self.createTopicWithParameters(
|
|
|
|
topic.name, topic.metacode, topic.permission,
|
|
|
|
topic.desc, topic.link, x, y
|
|
|
|
);
|
|
|
|
|
|
|
|
// update positions of topics
|
|
|
|
x += 50;
|
|
|
|
if (x > 200) {
|
|
|
|
y += 50;
|
|
|
|
x = -200;
|
|
|
|
}//if
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
parseTabbedString: function(text) {
|
|
|
|
var self = Metamaps.Import;
|
|
|
|
|
|
|
|
// determine line ending and split lines
|
|
|
|
var delim = "\n";
|
|
|
|
if (text.indexOf("\r\n") !== -1) {
|
|
|
|
delim = "\r\n";
|
|
|
|
}//if
|
|
|
|
var lines = text.split(delim);
|
|
|
|
|
|
|
|
// get csv-style headers to name the object fields
|
|
|
|
var headers = lines[0].split(' '); //tab character
|
|
|
|
|
|
|
|
var results = [];
|
|
|
|
lines.forEach(function(line, index) {
|
|
|
|
if (index === 0) return;
|
|
|
|
if (line == "") return;
|
|
|
|
|
|
|
|
var topic = {};
|
|
|
|
line.split(" ").forEach(function(field, index) {
|
|
|
|
if (self.headersWhitelist.indexOf(headers[index]) === -1) return;
|
|
|
|
topic[headers[index]] = field;
|
|
|
|
});
|
|
|
|
results.push(topic);
|
|
|
|
});
|
|
|
|
return results;
|
|
|
|
},
|
|
|
|
|
2016-02-07 09:51:01 +00:00
|
|
|
createTopicWithParameters: function(name, metacode_name, permission, desc,
|
|
|
|
link, xloc, yloc) {
|
2016-02-07 08:56:03 +00:00
|
|
|
var self = Metamaps.Topic;
|
|
|
|
|
|
|
|
var metacode = Metamaps.Metacodes.where({name: metacode_name})[0] || null;
|
|
|
|
if (metacode === null) return console.error("metacode not found");
|
|
|
|
|
|
|
|
var topic = new Metamaps.Backbone.Topic({
|
|
|
|
name: name,
|
|
|
|
metacode_id: metacode.id,
|
|
|
|
permission: permission || Metamaps.Active.Map.get('permission'),
|
|
|
|
desc: desc,
|
|
|
|
link: link
|
|
|
|
});
|
|
|
|
Metamaps.Topics.add(topic);
|
|
|
|
|
|
|
|
var mapping = new Metamaps.Backbone.Mapping({
|
|
|
|
xloc: xloc,
|
|
|
|
yloc: yloc,
|
|
|
|
mappable_id: topic.cid,
|
|
|
|
mappable_type: "Topic",
|
|
|
|
});
|
|
|
|
Metamaps.Mappings.add(mapping);
|
|
|
|
|
2016-02-07 09:51:01 +00:00
|
|
|
// this function also includes the creation of the topic in the database
|
|
|
|
self.renderTopic(mapping, topic, true, true);
|
2016-02-07 08:56:03 +00:00
|
|
|
},
|
|
|
|
};
|