good start on more persistent permissions throughout the platform

This commit is contained in:
Connor Turland 2013-01-23 13:43:01 -05:00
parent aa911d4bdf
commit 02ac167444
14 changed files with 153 additions and 78 deletions

View file

@ -20,8 +20,15 @@ function onCreateLabelHandler(domElement, node) {
var showCard = document.createElement('div'); var showCard = document.createElement('div');
showCard.className = 'showcard topic_' + node.id; showCard.className = 'showcard topic_' + node.id;
showCard.innerHTML = html; if (authorizeToEdit(node)) {
showCard.style.display = "none"; var perm = document.createElement('div');
perm.className = 'permission canEdit';
perm.innerHTML = html;
showCard.appendChild(perm);
} else {
showCard.innerHTML = html;
}
showCard.style.display = "none";
domElement.appendChild(showCard); domElement.appendChild(showCard);
// Create a 'name' button and add it to the main node label // Create a 'name' button and add it to the main node label

View file

@ -0,0 +1,5 @@
function authorizeToEdit(obj) {
if (userid && (obj.data.$permission == "commons" || obj.data.$userid == userid)) return true;
else return false;
}

View file

@ -1,46 +1,54 @@
function editEdge(edge, e) { function editEdge(edge, e) {
//reset so we don't interfere with other edges if (authorizeToEdit(edge)) {
$('#edit_synapse').remove(); //reset so we don't interfere with other edges
$('#edit_synapse').remove();
deselectEdge(edge); //so the label is missing while editing deselectEdge(edge); //so the label is missing while editing
var edit_div = document.createElement('div'); var perm = document.createElement('div');
edit_div.setAttribute('id', 'edit_synapse'); perm.className = 'permission canEdit';
$('.main .wrapper').append(edit_div); var edit_div = document.createElement('div');
$('#edit_synapse').attr('class', 'best_in_place best_in_place_desc'); edit_div.setAttribute('id', 'edit_synapse');
$('#edit_synapse').attr('data-object', 'synapse'); perm.appendChild(edit_div);
$('#edit_synapse').attr('data-attribute', 'desc'); $('.main .wrapper').append(perm);
$('#edit_synapse').attr('data-type', 'input'); $('#edit_synapse').attr('class', 'best_in_place best_in_place_desc');
//TODO how to get blank data-nil $('#edit_synapse').attr('data-object', 'synapse');
$('#edit_synapse').attr('data-nil', ' '); $('#edit_synapse').attr('data-attribute', 'desc');
$('#edit_synapse').attr('data-url', '/synapses/' + edge.getData("id")); $('#edit_synapse').attr('data-type', 'input');
$('#edit_synapse').html(edge.getData("desc")); //TODO how to get blank data-nil
$('#edit_synapse').attr('data-nil', ' ');
$('#edit_synapse').attr('data-url', '/synapses/' + edge.getData("id"));
$('#edit_synapse').html(edge.getData("desc"));
$('#edit_synapse').css('position', 'absolute'); $('#edit_synapse').css('position', 'absolute');
$('#edit_synapse').css('left', e.clientX); $('#edit_synapse').css('left', e.clientX);
$('#edit_synapse').css('top', e.clientY); $('#edit_synapse').css('top', e.clientY);
$('#edit_synapse').bind("ajax:success", function() { $('#edit_synapse').bind("ajax:success", function() {
var desc = $(this).html(); var desc = $(this).html();
edge.setData("desc", desc); edge.setData("desc", desc);
selectEdge(edge); selectEdge(edge);
Mconsole.plot(); Mconsole.plot();
$('#edit_synapse').remove(); $('#edit_synapse').remove();
}); });
$('#edit_synapse').focusout(function() { $('#edit_synapse').focusout(function() {
//in case they cancel //in case they cancel
$('#edit_synapse').hide(); $('#edit_synapse').hide();
}); });
//css stuff above moves it, this activates it //css stuff above moves it, this activates it
$('#edit_synapse').click(); $('#edit_synapse').click();
$('#edit_synapse form').submit(function() { $('#edit_synapse form').submit(function() {
//hide it once form submits. //hide it once form submits.
//If you don't do this, and data is unchanged, it'll show up on canvas //If you don't do this, and data is unchanged, it'll show up on canvas
$('#edit_synapse').hide(); $('#edit_synapse').hide();
}); });
$('#edit_synapse input').focus(); $('#edit_synapse input').focus();
$('#edit_synapse').show(); $('#edit_synapse').show();
}
else if (! authorizeToEdit(edge)) {
alert("You don't have the permissions to edit this synapse.");
}
} }
function deselectAllEdges() { function deselectAllEdges() {

View file

@ -87,21 +87,25 @@ var labelType, useGradients, nativeTextSupport, animate, json, Mconsole = null,
// controls the sliding hover of the settings for cards // controls the sliding hover of the settings for cards
var sliding2 = false; var sliding2 = false;
var lT2; var lT1,lT2;
$(".permActivator").hover( $(".permActivator").hover(
function () { function () {
clearTimeout(lT2); clearTimeout(lT2);
if (! sliding2) { that = this;
sliding2 = true; lT1 = setTimeout(function() {
$(this).animate({ if (! sliding2) {
width: '203px', sliding2 = true;
height: '37px' $(that).animate({
}, 300, function() { width: '203px',
sliding2 = false; height: '37px'
}); }, 300, function() {
} sliding2 = false;
});
}
}, 300);
}, },
function () { function () {
clearTimeout(lT1);
that = this; that = this;
lT2 = setTimeout(function() { lT2 = setTimeout(function() {
if (! sliding2) { if (! sliding2) {
@ -116,6 +120,24 @@ var labelType, useGradients, nativeTextSupport, animate, json, Mconsole = null,
},800); },800);
} }
); );
//bind best_in_place ajax callbacks
$('.best_in_place_permission').bind("ajax:success", function() {
var permission = $(this).html();
var el = $(this).parents('.cardSettings').find('.mapPerm');
el.attr('title', permission);
if (permission == "commons") el.html("co");
else if (permission == "public") el.html("pu");
else if (permission == "private") el.html("pr");
});
//bind best_in_place ajax callbacks
$('.best_in_place_metacode').bind("ajax:success", function() {
var metacode = $(this).html();
//changing img alt, img src for top card (topic view page)
//and on-canvas card. Also changing image of node
$(this).parents('.CardOnGraph').find('img.icon').attr('alt', metacode);
$(this).parents('.CardOnGraph').find('img.icon').attr('src', imgArray[metacode].src);
});
// this is to save the layout of maps when you're on a map page // this is to save the layout of maps when you're on a map page
$("#saveLayout").click(function(event) { $("#saveLayout").click(function(event) {

View file

@ -72,39 +72,40 @@
padding-bottom:5px; padding-bottom:5px;
} }
.CardOnGraph .best_in_place_name { .best_in_place_name {
max-width:130px; max-width:130px;
float:left; float:left;
} }
.CardOnGraph .best_in_place_name input{ .best_in_place_name input{
max-width:130px; max-width:130px;
} }
.CardOnGraph .desc { .desc {
font-size:15px; font-size:15px;
font-family:Arial, Helvetica, sans-serif; font-family:Arial, Helvetica, sans-serif;
} }
.CardOnGraph .desc h3 { .desc h3 {
font-style:normal; font-style:normal;
margin-top:5px; margin-top:5px;
} }
.CardOnGraph .best_in_place_desc input { .best_in_place_desc input {
float: right; float: right;
margin: 2px 0px 0px 2px; margin: 2px 0px 0px 2px;
padding: 1px 5px; padding: 1px 5px;
} }
.CardOnGraph .best_in_place_desc { .best_in_place_desc {
width:155px; width:155px;
display:block; display:block;
margin-top:2px; margin-top:2px;
} }
.CardOnGraph .best_in_place_desc input[value="Save"] { .best_in_place_desc textarea{
margin-right: -8px; width:150px;
display:block;
} }
.CardOnGraph .link { .CardOnGraph .link {
@ -139,7 +140,7 @@ margin-right: -8px;
.cardSettings { .cardSettings {
position: absolute; position: absolute;
left: 12px; left: 12px;
top: 13px; top: 12px;
} }
.editSettings { .editSettings {
@ -152,6 +153,7 @@ margin-right: -8px;
opacity: 0.98; opacity: 0.98;
box-shadow: 4px 4px 5px #888888; box-shadow: 4px 4px 5px #888888;
border: 1px solid #AAA; border: 1px solid #AAA;
z-index: 5;
} }
.editSettings span { .editSettings span {
@ -163,6 +165,9 @@ margin-right: -8px;
height: 16px; height: 16px;
background: url('settings.png') no-repeat 0 0; background: url('settings.png') no-repeat 0 0;
overflow:hidden; overflow:hidden;
position: absolute;
left: 0px;
top: 30px;
} }
.mapPerm { .mapPerm {
@ -172,7 +177,7 @@ margin-right: -8px;
border: 1px solid #AAA; border: 1px solid #AAA;
position: absolute; position: absolute;
left: -7px; left: -7px;
top: 18px; top: 0px;
width:16px; width:16px;
text-align:center; text-align:center;
} }

View file

@ -46,6 +46,7 @@ end
@synapsedata['$userid'] = synapse.user.id @synapsedata['$userid'] = synapse.user.id
@synapsedata['$username'] = synapse.user.name @synapsedata['$username'] = synapse.user.name
@synapsedata['$direction'] = [synapse.node1_id.to_s(), synapse.node2_id.to_s()] @synapsedata['$direction'] = [synapse.node1_id.to_s(), synapse.node2_id.to_s()]
@synapsedata['$permission'] = synapse.permission
json.data @synapsedata json.data @synapsedata
end end
@ -65,6 +66,7 @@ end
@topicdata['$xloc'] = @mapping.xloc @topicdata['$xloc'] = @mapping.xloc
@topicdata['$yloc'] = @mapping.yloc @topicdata['$yloc'] = @mapping.yloc
@topicdata['$mappingid'] = @mapping.id @topicdata['$mappingid'] = @mapping.id
@topicdata['$permission'] = topic.permission
json.data @topicdata json.data @topicdata
json.id topic.id json.id topic.id
json.name topic.name json.name topic.name

View file

@ -16,10 +16,11 @@ has_many :maps, :through => :mappings
@synapsedata['$desc'] = self.desc @synapsedata['$desc'] = self.desc
@synapsedata['$showDesc'] = false @synapsedata['$showDesc'] = false
@synapsedata['$category'] = self.category @synapsedata['$category'] = self.category
@synapsedata['$id'] = synapse.id @synapsedata['$id'] = self.id
@synapsedata['$userid'] = synapse.user.id @synapsedata['$userid'] = self.user.id
@synapsedata['$username'] = synapse.user.name @synapsedata['$username'] = self.user.name
@synapsedata['$direction'] = [synapse.node1_id.to_s(), synapse.node2_id.to_s()] @synapsedata['$direction'] = [self.node1_id.to_s(), self.node2_id.to_s()]
@synapsedata['$permission'] = self.permission
json.data @synapsedata json.data @synapsedata
end end
end end
@ -43,6 +44,7 @@ has_many :maps, :through => :mappings
@synapsedata['$userid'] = synapse.user.id @synapsedata['$userid'] = synapse.user.id
@synapsedata['$username'] = synapse.user.name @synapsedata['$username'] = synapse.user.name
@synapsedata['$direction'] = [synapse.node1_id.to_s(), synapse.node2_id.to_s()] @synapsedata['$direction'] = [synapse.node1_id.to_s(), synapse.node2_id.to_s()]
@synapsedata['$permission'] = synapse.permission
json.data @synapsedata json.data @synapsedata
end end
@ -58,6 +60,7 @@ has_many :maps, :through => :mappings
@topicdata['$inmaps'] = @inmaps @topicdata['$inmaps'] = @inmaps
@topicdata['$userid'] = topic.user.id @topicdata['$userid'] = topic.user.id
@topicdata['$username'] = topic.user.name @topicdata['$username'] = topic.user.name
@topicdata['$permission'] = topic.permission
json.data @topicdata json.data @topicdata
json.id topic.id json.id topic.id
json.name topic.name json.name topic.name

View file

@ -28,7 +28,7 @@ belongs_to :metacode
def mk_permission def mk_permission
if self.permission == "commons" if self.permission == "commons"
"cc" "co"
elsif self.permission == "public" elsif self.permission == "public"
"pu" "pu"
elsif self.permission == "private" elsif self.permission == "private"
@ -58,11 +58,12 @@ belongs_to :metacode
@topicdata = Hash.new @topicdata = Hash.new
@topicdata['$desc'] = self.desc @topicdata['$desc'] = self.desc
@topicdata['$link'] = self.link @topicdata['$link'] = self.link
@topicdata['$metacode'] = self.metacode.name @topicdata['$metacode'] = self.metacode.name
@topicdata['$inmaps'] = @inmaps @topicdata['$inmaps'] = @inmaps
@topicdata['$userid'] = self.user.id @topicdata['$userid'] = self.user.id
@topicdata['$username'] = self.user.name @topicdata['$username'] = self.user.name
@topicdata['$permission'] = self.permission
json.data @topicdata json.data @topicdata
json.id self.id json.id self.id
json.name self.name json.name self.name
@ -87,6 +88,7 @@ belongs_to :metacode
@topicdata['$xloc'] = @mapping.xloc @topicdata['$xloc'] = @mapping.xloc
@topicdata['$yloc'] = @mapping.yloc @topicdata['$yloc'] = @mapping.yloc
@topicdata['$mappingid'] = @mapping.id @topicdata['$mappingid'] = @mapping.id
@topicdata['$permission'] = self.permission
json.data @topicdata json.data @topicdata
json.id self.id json.id self.id
json.name self.name json.name self.name
@ -113,6 +115,7 @@ belongs_to :metacode
@synapsedata['$userid'] = synapse.user.id @synapsedata['$userid'] = synapse.user.id
@synapsedata['$username'] = synapse.user.name @synapsedata['$username'] = synapse.user.name
@synapsedata['$direction'] = [synapse.node1_id.to_s(), synapse.node2_id.to_s()] @synapsedata['$direction'] = [synapse.node1_id.to_s(), synapse.node2_id.to_s()]
@synapsedata['$permission'] = synapse.permission
json.data @synapsedata json.data @synapsedata
end end
@ -128,6 +131,7 @@ belongs_to :metacode
@topicdata['$inmaps'] = @inmaps @topicdata['$inmaps'] = @inmaps
@topicdata['$userid'] = topic.user.id @topicdata['$userid'] = topic.user.id
@topicdata['$username'] = topic.user.name @topicdata['$username'] = topic.user.name
@topicdata['$permission'] = topic.permission
json.data @topicdata json.data @topicdata
json.id topic.id json.id topic.id
json.name topic.name json.name topic.name
@ -146,6 +150,7 @@ belongs_to :metacode
@topicdata['$inmaps'] = @inmaps @topicdata['$inmaps'] = @inmaps
@topicdata['$userid'] = topic.user.id @topicdata['$userid'] = topic.user.id
@topicdata['$username'] = topic.user.name @topicdata['$username'] = topic.user.name
@topicdata['$permission'] = topic.permission
json.data @topicdata json.data @topicdata
json.id topic.id json.id topic.id
json.name topic.name json.name topic.name

View file

@ -11,7 +11,7 @@
<title>Metamaps</title> <title>Metamaps</title>
<% if authenticated? %> <% if authenticated? %>
<script type="text/javascript"> <script type="text/javascript">
var userid = "<%= user.id %>"; var userid = <%= user.id %>;
var username = "<%= user.name %>"; var username = "<%= user.name %>";
</script> </script>
<% else %> <% else %>

View file

@ -12,19 +12,19 @@
<p class="type">Map</p> <p class="type">Map</p>
<%= image_tag 'map.png', :class => 'icon', :size => '50x50' %> <%= image_tag 'map.png', :class => 'icon', :size => '50x50' %>
<div class="cardSettings"> <div class="cardSettings">
<div class="mapPerm" title="<%= map.permission %>"><%= map.mk_permission %></div>
<% if map.user == user %> <% if map.user == user %>
<div class="permActivator"> <div class="permActivator">
<div class="editSettings"> <div class="editSettings">
<span>Permissions:&nbsp;</span> <span>Permissions:&nbsp;</span>
<span title="Click to Edit"><%= best_in_place map, :permission, :type => :select, :collection => [['commons', 'commons'], ['public','public'], ['private','private']] %></span> <span title="Click to Edit"><%= best_in_place map, :permission, :type => :select, :collection => [['commons', 'commons'], ['public','public'], ['private','private']], :classes => 'best_in_place_permission' %></span>
<div class="clearfloat"></div> <div class="clearfloat"></div>
</div> </div>
</div> </div>
<% end %> <% end %>
<div class="mapPerm"><%= map.mk_permission %></div>
</div> </div>
<span class="title"> <span class="title">
<span><%= best_in_place map, :name, :type => :input %></span> <span><%= best_in_place map, :name, :type => :input, :classes => 'best_in_place_name' %></span>
<a href="/maps/<%=map.id %>" class="topic-go-arrow"> <a href="/maps/<%=map.id %>" class="topic-go-arrow">
<img class="topic-go-arrow" <img class="topic-go-arrow"
title="Go to map" title="Go to map"
@ -39,7 +39,7 @@
<div class="scroll"> <div class="scroll">
<div class="desc"> <div class="desc">
<p class="mapdata"><%= map.topics.count %> topics and <%= map.synapses.count %> synapses</p> <p class="mapdata"><%= map.topics.count %> topics and <%= map.synapses.count %> synapses</p>
<p><%= best_in_place map, :desc, :type => :textarea, :nil => "<span class='gray'>Click to add description.</span>" %></p> <p><%= best_in_place map, :desc, :type => :textarea, :nil => "<span class='gray'>Click to add description.</span>", :classes => 'best_in_place_desc' %></p>
</div> </div>
</div> </div>

View file

@ -9,7 +9,9 @@
<%= form.text_field :name %> <%= form.text_field :name %>
<label for="map_desc">Description</label> <label for="map_desc">Description</label>
<%= form.text_area :desc, class: "description", :rows => 5 %> <%= form.text_area :desc, class: "description", :rows => 5 %>
<label for="map_perm">Permission</label> <% if @map.user == user %>
<%= form.select :permission, options_for_select(['commons', 'public', 'private'], @map.permission) %> <label for="map_perm">Permission</label>
<%= form.select :permission, options_for_select(['commons', 'public', 'private'], @map.permission) %>
<% end %>
<%= form.submit "Update", class: "update" %> <%= form.submit "Update", class: "update" %>
<% end %> <% end %>

View file

@ -19,7 +19,9 @@
<label for="node2_id">Choose Second Topic</label> <label for="node2_id">Choose Second Topic</label>
<%= select "node2_id", "node2", Topic.order("name ASC").visibleToUser(user, nil).map {|p| [ p.name, p.id ] }, { :selected => @synapse.node2_id } %> <%= select "node2_id", "node2", Topic.order("name ASC").visibleToUser(user, nil).map {|p| [ p.name, p.id ] }, { :selected => @synapse.node2_id } %>
<% end %> <% end %>
<label for="synapse_permission">Permission</label> <% if @synapse.user == user %>
<%= form.select :permission, options_for_select(['commons', 'public', 'private'], @synapse.permission) %> <label for="synapse_permission">Permission</label>
<%= form.select :permission, options_for_select(['commons', 'public', 'private'], @synapse.permission) %>
<% end %>
<%= form.submit "Update", class: "update" %> <%= form.submit "Update", class: "update" %>
<% end %> <% end %>

View file

@ -19,7 +19,19 @@
data-collection='[["Action","Action"],["Activity","Activity"],["Bizarre","Bizarre"],["Catalyst","Catalyst"],["Closed","Closed"],["Experience","Experience"],["Future Dev","Future Dev"],["Group","Group"],["Idea","Idea"],["Implication","Implication"],["Insight","Insight"],["Intention","Intention"],["Knowledge","Knowledge"],["Location","Location"],["Open Issue","Open Issue"],["Opinion","Opinion"],["Opportunity","Opportunity"],["Person","Person"],["Platform","Platform"],["Problem","Problem"],["Question","Question"],["Reference","Reference"],["Requirement","Requirement"],["Resource","Resource"],["Role","Role"],["Task","Task"],["Tool","Tool"],["Trajectory","Trajectory"]]' data-collection='[["Action","Action"],["Activity","Activity"],["Bizarre","Bizarre"],["Catalyst","Catalyst"],["Closed","Closed"],["Experience","Experience"],["Future Dev","Future Dev"],["Group","Group"],["Idea","Idea"],["Implication","Implication"],["Insight","Insight"],["Intention","Intention"],["Knowledge","Knowledge"],["Location","Location"],["Open Issue","Open Issue"],["Opinion","Opinion"],["Opportunity","Opportunity"],["Person","Person"],["Platform","Platform"],["Problem","Problem"],["Question","Question"],["Reference","Reference"],["Requirement","Requirement"],["Resource","Resource"],["Role","Role"],["Task","Task"],["Tool","Tool"],["Trajectory","Trajectory"]]'
data-attribute="metacode" data-attribute="metacode"
data-type="select"><%= topic.metacode.name %></p> data-type="select"><%= topic.metacode.name %></p>
<%= image_tag topic.metacode.icon, :class => 'icon', :size => '50x50' %> <%= image_tag topic.metacode.icon, :class => 'icon', :size => '50x50' %>
<div class="cardSettings">
<div class="mapPerm" title="<%= topic.permission %>"><%= topic.mk_permission %></div>
<% if topic.user == user %>
<div class="permActivator">
<div class="editSettings">
<span>Permissions:&nbsp;</span>
<span title="Click to Edit"><%= best_in_place topic, :permission, :type => :select, :collection => [['commons', 'commons'], ['public','public'], ['private','private']], :classes => 'best_in_place_permission' %></span>
<div class="clearfloat"></div>
</div>
</div>
<% end %>
</div>
<span class="title"> <span class="title">
<span class="best_in_place best_in_place_name" <span class="best_in_place best_in_place_name"
data-url="/topics/<%=topic.id %>" data-url="/topics/<%=topic.id %>"

View file

@ -14,7 +14,9 @@
<%= form.text_area :desc, class: "description", :rows => 5 %> <%= form.text_area :desc, class: "description", :rows => 5 %>
<label for="topic_link">Link</label> <label for="topic_link">Link</label>
<%= form.text_field :link, class: "link" %> <%= form.text_field :link, class: "link" %>
<label for="topic_permission">Permission</label> <% if @topic.user == user %>
<%= form.select :permission, options_for_select(['commons', 'public', 'private'], @topic.permission) %> <label for="topic_permission">Permission</label>
<%= form.select :permission, options_for_select(['commons', 'public', 'private'], @topic.permission) %>
<% end %>
<%= form.submit "Update", class: "update" %> <%= form.submit "Update", class: "update" %>
<% end %> <% end %>