added filtering back to topic view
This commit is contained in:
parent
3bb8256f8f
commit
9b0304c403
7 changed files with 174 additions and 46 deletions
|
@ -908,6 +908,9 @@ Metamaps.JIT = {
|
|||
};
|
||||
}
|
||||
}
|
||||
else if ((e.button == 2 || (e.button == 0 && e.altKey) || e.buttons == 2) && Metamaps.Active.Topic) {
|
||||
Metamaps.GlobalUI.notifyUser("Cannot create in Topic view.");
|
||||
}
|
||||
else if ((e.button == 2 || (e.button == 0 && e.altKey) || e.buttons == 2) && !authorized) {
|
||||
Metamaps.GlobalUI.notifyUser("Cannot edit Public map.");
|
||||
}
|
||||
|
@ -1002,6 +1005,10 @@ Metamaps.JIT = {
|
|||
Metamaps.GlobalUI.notifyUser("Cannot edit Public map.");
|
||||
return;
|
||||
}
|
||||
else if (Metamaps.Active.Topic) {
|
||||
Metamaps.GlobalUI.notifyUser("Cannot create in Topic view.");
|
||||
return;
|
||||
}
|
||||
// DOUBLE CLICK
|
||||
//pop up node creation :)
|
||||
Metamaps.Create.newTopic.addSynapse = false;
|
||||
|
|
|
@ -477,6 +477,9 @@ Metamaps.Backbone.init = function () {
|
|||
|
||||
Metamaps.Mappers = Metamaps.Mappers ? new self.MapperCollection(Metamaps.Mappers) : new self.MapperCollection();
|
||||
|
||||
// this is for topic view
|
||||
Metamaps.Creators = Metamaps.Creators ? new self.MapperCollection(Metamaps.Creators) : new self.MapperCollection();
|
||||
|
||||
if (Metamaps.Active.Map) {
|
||||
Metamaps.Mappings = Metamaps.Mappings ? new self.MappingCollection(Metamaps.Mappings) : new self.MappingCollection();
|
||||
|
||||
|
@ -3146,12 +3149,30 @@ Metamaps.Filter = {
|
|||
var removed = [];
|
||||
var added = [];
|
||||
|
||||
Metamaps[collection].each(function(model) {
|
||||
var prop = model.get(propertyToCheck) ? model.get(propertyToCheck).toString() : false;
|
||||
if (prop && newList.indexOf(prop) === -1) {
|
||||
newList.push(prop);
|
||||
}
|
||||
});
|
||||
// the first option enables us to accept
|
||||
// ['Topics', 'Synapses'] as 'collection'
|
||||
if (typeof collection === "object") {
|
||||
Metamaps[collection[0]].each(function(model) {
|
||||
var prop = model.get(propertyToCheck) ? model.get(propertyToCheck).toString() : false;
|
||||
if (prop && newList.indexOf(prop) === -1) {
|
||||
newList.push(prop);
|
||||
}
|
||||
});
|
||||
Metamaps[collection[1]].each(function(model) {
|
||||
var prop = model.get(propertyToCheck) ? model.get(propertyToCheck).toString() : false;
|
||||
if (prop && newList.indexOf(prop) === -1) {
|
||||
newList.push(prop);
|
||||
}
|
||||
});
|
||||
}
|
||||
else if (typeof collection === "string") {
|
||||
Metamaps[collection].each(function(model) {
|
||||
var prop = model.get(propertyToCheck) ? model.get(propertyToCheck).toString() : false;
|
||||
if (prop && newList.indexOf(prop) === -1) {
|
||||
newList.push(prop);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
removed = _.difference(self.filters[filtersToUse], newList);
|
||||
added = _.difference(newList, self.filters[filtersToUse]);
|
||||
|
@ -3194,7 +3215,14 @@ Metamaps.Filter = {
|
|||
},
|
||||
checkMappers: function () {
|
||||
var self = Metamaps.Filter;
|
||||
self.updateFilters('Mappings', 'user_id', 'Mappers', 'mappers', 'mapper');
|
||||
var onMap = Metamaps.Active.Map ? true : false;
|
||||
if (onMap) {
|
||||
self.updateFilters('Mappings', 'user_id', 'Mappers', 'mappers', 'mapper');
|
||||
}
|
||||
else {
|
||||
// on topic view
|
||||
self.updateFilters(['Topics', 'Synapses'], 'user_id', 'Creators', 'mappers', 'mapper');
|
||||
}
|
||||
},
|
||||
checkSynapses: function () {
|
||||
var self = Metamaps.Filter;
|
||||
|
@ -3275,7 +3303,11 @@ Metamaps.Filter = {
|
|||
if (Metamaps.Active.Map) {
|
||||
onMap = true;
|
||||
}
|
||||
else passesMapper = true; // for when you're on a topic page
|
||||
else if (Metamaps.Active.Topic) {
|
||||
onMap = false;
|
||||
}
|
||||
|
||||
var opacityForFilter = onMap ? 0 : 0.4;
|
||||
|
||||
Metamaps.Topics.each(function(topic) {
|
||||
var n = topic.get('node');
|
||||
|
@ -3285,10 +3317,21 @@ Metamaps.Filter = {
|
|||
else passesMetacode = true;
|
||||
|
||||
if (onMap) {
|
||||
// when on a map,
|
||||
// we filter by mapper according to the person who added the
|
||||
// topic or synapse to the map
|
||||
var user_id = topic.getMapping().get("user_id").toString();
|
||||
if (visible.mappers.indexOf(user_id) == -1) passesMapper = false;
|
||||
else passesMapper = true;
|
||||
}
|
||||
else {
|
||||
// when on a topic view,
|
||||
// we filter by mapper according to the person who created the
|
||||
// topic or synapse
|
||||
var user_id = topic.get("user_id").toString();
|
||||
if (visible.mappers.indexOf(user_id) == -1) passesMapper = false;
|
||||
else passesMapper = true;
|
||||
}
|
||||
|
||||
if (passesMetacode && passesMapper) {
|
||||
if (n) {
|
||||
|
@ -3299,7 +3342,7 @@ Metamaps.Filter = {
|
|||
else {
|
||||
if (n) {
|
||||
Metamaps.Control.deselectNode(n, true);
|
||||
n.setData('alpha', 0, 'end');
|
||||
n.setData('alpha', opacityForFilter, 'end');
|
||||
n.eachAdjacency(function(e){
|
||||
Metamaps.Control.deselectEdge(e, true);
|
||||
});
|
||||
|
@ -3316,10 +3359,13 @@ Metamaps.Filter = {
|
|||
else passesSynapse = true;
|
||||
|
||||
if (onMap) {
|
||||
var user_id = synapse.getMapping().get("user_id").toString();
|
||||
if (visible.mappers.indexOf(user_id) == -1) passesMapper = false;
|
||||
else passesMapper = true;
|
||||
// when on a map,
|
||||
// we filter by mapper according to the person who added the
|
||||
// topic or synapse to the map
|
||||
user_id = synapse.getMapping().get("user_id").toString();
|
||||
}
|
||||
if (visible.mappers.indexOf(user_id) == -1) passesMapper = false;
|
||||
else passesMapper = true;
|
||||
|
||||
var color = Metamaps.Settings.colors.synapses.normal;
|
||||
if (passesSynapse && passesMapper) {
|
||||
|
@ -3332,10 +3378,10 @@ Metamaps.Filter = {
|
|||
else {
|
||||
if (e) {
|
||||
Metamaps.Control.deselectEdge(e, true);
|
||||
e.setData('alpha', 0, 'end');
|
||||
e.setData('alpha', opacityForFilter, 'end');
|
||||
}
|
||||
else console.log(synapse);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// run the animation
|
||||
|
@ -3586,10 +3632,14 @@ Metamaps.Topic = {
|
|||
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();
|
||||
|
@ -3616,6 +3666,7 @@ Metamaps.Topic = {
|
|||
$('.rightclickmenu').remove();
|
||||
Metamaps.TopicCard.hideCard();
|
||||
Metamaps.SynapseCard.hideCard();
|
||||
Metamaps.Filter.close();
|
||||
}
|
||||
},
|
||||
centerOn: function (nodeid) {
|
||||
|
@ -4044,6 +4095,9 @@ Metamaps.Map = {
|
|||
$('.wrapper').addClass('commonsMap');
|
||||
}
|
||||
|
||||
// set filter mapper H3 text
|
||||
$('#filter_by_mapper h3').html('MAPPERS');
|
||||
|
||||
// build and render the visualization
|
||||
Metamaps.Visualize.type = "ForceDirected";
|
||||
Metamaps.JIT.prepareVizData();
|
||||
|
@ -4082,6 +4136,7 @@ Metamaps.Map = {
|
|||
Metamaps.SynapseCard.hideCard();
|
||||
Metamaps.Create.newTopic.hide();
|
||||
Metamaps.Create.newSynapse.hide();
|
||||
Metamaps.Filter.close();
|
||||
Metamaps.Realtime.endActiveMap();
|
||||
}
|
||||
},
|
||||
|
@ -4090,31 +4145,37 @@ Metamaps.Map = {
|
|||
|
||||
var nodes_data = "",
|
||||
synapses_data = "";
|
||||
var synapses_array = new Array();
|
||||
var nodes_array = [];
|
||||
var synapses_array = [];
|
||||
// collect the unfiltered topics
|
||||
Metamaps.Visualize.mGraph.graph.eachNode(function (n) {
|
||||
//don't add to the map if it was filtered out
|
||||
// TODO
|
||||
//if (categoryVisible[n.getData('metacode')] == false) {
|
||||
// return;
|
||||
//}
|
||||
|
||||
var x, y;
|
||||
if (n.pos.x && n.pos.y) {
|
||||
x = n.pos.x;
|
||||
y = n.pos.y;
|
||||
} else {
|
||||
var x = Math.cos(n.pos.theta) * n.pos.rho;
|
||||
var y = Math.sin(n.pos.theta) * n.pos.rho;
|
||||
// if the opacity is less than 1 then it's filtered
|
||||
if (n.getData('alpha') === 1) {
|
||||
var id = n.getData('topic').id;
|
||||
nodes_array.push(id);
|
||||
var x, y;
|
||||
if (n.pos.x && n.pos.y) {
|
||||
x = n.pos.x;
|
||||
y = n.pos.y;
|
||||
} else {
|
||||
var x = Math.cos(n.pos.theta) * n.pos.rho;
|
||||
var y = Math.sin(n.pos.theta) * n.pos.rho;
|
||||
}
|
||||
nodes_data += id + '/' + x + '/' + y + ',';
|
||||
}
|
||||
nodes_data += n.id + '/' + x + '/' + y + ',';
|
||||
n.eachAdjacency(function (adj) {
|
||||
synapses_array.push(adj.getData("synapses")[0].id); // TODO
|
||||
});
|
||||
});
|
||||
// collect the unfiltered synapses
|
||||
Metamaps.Synapses.each(function(synapse){
|
||||
var desc = synapse.get("desc");
|
||||
|
||||
//get unique values only
|
||||
synapses_array = $.grep(synapses_array, function (value, key) {
|
||||
return $.inArray(value, synapses_array) === key;
|
||||
var descNotFiltered = Metamaps.Filter.visible.synapses.indexOf(desc) > -1;
|
||||
// make sure that both topics are being added, otherwise, it
|
||||
// doesn't make sense to add the synapse
|
||||
var topicsNotFiltered = nodes_array.indexOf(synapse.get('node1_id')) > -1;
|
||||
topicsNotFiltered = topicsNotFiltered && nodes_array.indexOf(synapse.get('node2_id')) > -1;
|
||||
if (descNotFiltered && topicsNotFiltered) {
|
||||
synapses_array.push(synapse.id);
|
||||
}
|
||||
});
|
||||
|
||||
synapses_data = synapses_array.join();
|
||||
|
@ -4310,10 +4371,11 @@ Metamaps.Map = {
|
|||
}
|
||||
today = mm+'/'+dd+'/'+yyyy;
|
||||
|
||||
var mapName = map.get("name").split(" ").join([separator = '-']);
|
||||
var downloadMessage = "";
|
||||
downloadMessage += "Captured map screenshot! ";
|
||||
downloadMessage += "<a href='" + imageData.encoded_image + "' ";
|
||||
downloadMessage += "download='map-" + map.id + "-screenshot-" + today + ".png'>DOWNLOAD</a>";
|
||||
downloadMessage += "download='metamap-" + map.id + "-" + mapName + "-" + today + ".png'>DOWNLOAD</a>";
|
||||
Metamaps.GlobalUI.notifyUser(downloadMessage);
|
||||
|
||||
$.ajax({
|
||||
|
|
|
@ -577,7 +577,7 @@
|
|||
top: 0;
|
||||
}
|
||||
|
||||
.topicPage .sidebarCollaborate, .topicPage .sidebarFilter {
|
||||
.topicPage .sidebarCollaborate {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
|
|
@ -83,7 +83,14 @@ class MapsController < ApplicationController
|
|||
@allmappers = @map.contributors
|
||||
@alltopics = @map.topics.delete_if {|t| t.permission == "private" && (!authenticated? || (authenticated? && @current.id != t.user_id)) }
|
||||
@allsynapses = @map.synapses.delete_if {|s| s.permission == "private" && (!authenticated? || (authenticated? && @current.id != s.user_id)) }
|
||||
@allmappings = @map.mappings
|
||||
@allmappings = @map.mappings.delete_if {|m|
|
||||
if m.category == "Synapse"
|
||||
object = m.synapse
|
||||
elsif m.category == "Topic"
|
||||
object = m.topic
|
||||
end
|
||||
object.permission == "private" && (!authenticated? || (authenticated? && @current.id != object.user_id))
|
||||
}
|
||||
|
||||
respond_with(@allmappers, @allmappings, @allsynapses, @alltopics, @map)
|
||||
}
|
||||
|
@ -104,7 +111,14 @@ class MapsController < ApplicationController
|
|||
@allmappers = @map.contributors
|
||||
@alltopics = @map.topics.delete_if {|t| t.permission == "private" && (!authenticated? || (authenticated? && @current.id != t.user_id)) }
|
||||
@allsynapses = @map.synapses.delete_if {|s| s.permission == "private" && (!authenticated? || (authenticated? && @current.id != s.user_id)) }
|
||||
@allmappings = @map.mappings
|
||||
@allmappings = @map.mappings.delete_if {|m|
|
||||
if m.category == "Synapse"
|
||||
object = m.synapse
|
||||
elsif m.category == "Topic"
|
||||
object = m.topic
|
||||
end
|
||||
object.permission == "private" && (!authenticated? || (authenticated? && @current.id != object.user_id))
|
||||
}
|
||||
|
||||
@json = Hash.new()
|
||||
@json['map'] = @map
|
||||
|
|
|
@ -29,7 +29,7 @@ class TopicsController < ApplicationController
|
|||
@topic = Topic.find(params[:id]).authorize_to_show(@current)
|
||||
|
||||
if not @topic
|
||||
redirect_to root_url and return
|
||||
redirect_to root_url, notice: "Access denied. That topic is private." and return
|
||||
end
|
||||
|
||||
respond_to do |format|
|
||||
|
@ -37,7 +37,19 @@ class TopicsController < ApplicationController
|
|||
@alltopics = ([@topic] + @topic.relatives).delete_if {|t| t.permission == "private" && (!authenticated? || (authenticated? && @current.id != t.user_id)) } # should limit to topics visible to user
|
||||
@allsynapses = @topic.synapses.delete_if {|s| s.permission == "private" && (!authenticated? || (authenticated? && @current.id != s.user_id)) }
|
||||
|
||||
respond_with(@allsynapses, @alltopics, @topic)
|
||||
@allcreators = []
|
||||
@alltopics.each do |t|
|
||||
if @allcreators.index(t.user) == nil
|
||||
@allcreators.push(t.user)
|
||||
end
|
||||
end
|
||||
@allsynapses.each do |s|
|
||||
if @allcreators.index(s.user) == nil
|
||||
@allcreators.push(s.user)
|
||||
end
|
||||
end
|
||||
|
||||
respond_with(@allsynapses, @alltopics, @allcreators, @topic)
|
||||
}
|
||||
format.json { render json: @topic }
|
||||
end
|
||||
|
@ -54,9 +66,22 @@ class TopicsController < ApplicationController
|
|||
|
||||
@alltopics = @topic.relatives.delete_if {|t| t.permission == "private" && (!authenticated? || (authenticated? && @current.id != t.user_id)) }
|
||||
@allsynapses = @topic.synapses.delete_if {|s| s.permission == "private" && (!authenticated? || (authenticated? && @current.id != s.user_id)) }
|
||||
|
||||
@allcreators = []
|
||||
@allcreators.push(@topic.user)
|
||||
@alltopics.each do |t|
|
||||
if @allcreators.index(t.user) == nil
|
||||
@allcreators.push(t.user)
|
||||
end
|
||||
end
|
||||
@allsynapses.each do |s|
|
||||
if @allcreators.index(s.user) == nil
|
||||
@allcreators.push(s.user)
|
||||
end
|
||||
end
|
||||
|
||||
@json = Hash.new()
|
||||
@json['topic'] = @topic
|
||||
@json['creators'] = @allcreators
|
||||
@json['relatives'] = @alltopics
|
||||
@json['synapses'] = @allsynapses
|
||||
|
||||
|
|
|
@ -17,22 +17,41 @@
|
|||
#and metacodes is filled with all the metacodes that are being used on the map.
|
||||
|
||||
if @map
|
||||
@map.topics.each_with_index do |topic, index|
|
||||
@alltopics.each_with_index do |topic, index|
|
||||
if @metacodes.index(topic.metacode) == nil
|
||||
@metacodes.push(topic.metacode)
|
||||
end
|
||||
end
|
||||
@map.synapses.each_with_index do |synapse, index|
|
||||
@allsynapses.each_with_index do |synapse, index|
|
||||
if @synapses.index{|s| s.desc == synapse.desc} == nil
|
||||
@synapses.push(synapse)
|
||||
end
|
||||
end
|
||||
@map.mappings.each_with_index do |mapping, index|
|
||||
@allmappings.each_with_index do |mapping, index|
|
||||
if @mappers.index(mapping.user) == nil
|
||||
@mappers.push(mapping.user)
|
||||
end
|
||||
end
|
||||
elsif @topic
|
||||
@alltopics.each_with_index do |topic, index|
|
||||
if @metacodes.index(topic.metacode) == nil
|
||||
@metacodes.push(topic.metacode)
|
||||
end
|
||||
if @mappers.index(topic.user) == nil
|
||||
@mappers.push(topic.user)
|
||||
end
|
||||
end
|
||||
@allsynapses.each_with_index do |synapse, index|
|
||||
if @synapses.index{|s| s.desc == synapse.desc} == nil
|
||||
@synapses.push(synapse)
|
||||
end
|
||||
if @mappers.index(synapse.user) == nil
|
||||
@mappers.push(synapse.user)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if @map || @topic
|
||||
@metacodes.sort! {|x,y|
|
||||
n1 = x.name || ""
|
||||
n2 = y.name || ""
|
||||
|
@ -70,7 +89,7 @@
|
|||
<div class="filterBox">
|
||||
<h2>FILTER BY</h2>
|
||||
<div id="filter_by_mapper" class="filterBySection">
|
||||
<h3>MAPPERS</h3>
|
||||
<h3><%= @map ? "MAPPERS" : @topic ? "CREATORS" : "" %></h3>
|
||||
<span class="hideAll hideAllMappers">NONE</span>
|
||||
<span class="showAll showAllMappers">ALL</span>
|
||||
<div class="clearfloat"></div>
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
Metamaps.currentSection = "topic";
|
||||
Metamaps.currentPage = <%= @topic.id.to_s %>;
|
||||
Metamaps.Active.Topic = <%= @topic.to_json.html_safe %>;
|
||||
Metamaps.Creators = <%= @allcreators.to_json.html_safe %>;
|
||||
Metamaps.Topics = <%= @alltopics.to_json.html_safe %>;
|
||||
Metamaps.Synapses = <%= @allsynapses.to_json.html_safe %>;
|
||||
Metamaps.Visualize.type = "RGraph";
|
||||
|
|
Loading…
Reference in a new issue