testing ability to pull topics onto the canvas

This commit is contained in:
Connor Turland 2012-12-23 01:12:56 -05:00
parent 79f931bede
commit 783894461e
111 changed files with 395 additions and 140 deletions

View file

@ -194,7 +194,7 @@ $(document).ready(function() {
$('.sideOption').animate({
width: '305px',
height: '76px'
}, 700, function() {
}, 300, function() {
$('#topic_by_name_input').focus();
});
$('#closeFind, #findWhere').css('display','block');
@ -204,12 +204,16 @@ $(document).ready(function() {
// this sets up the closing of the find box, and the toggling between open and closed.
$('#closeFind').click(function(){
Mconsole.graph.eachNode( function (n) {
n.setData('isNew', false);
});
Mconsole.plot();
$('#closeFind, #findWhere').css('display','none');
$('.sideOption').css('cursor','pointer');
$('.sideOption').animate({
width: '45px',
height: '32px'
}, 700, function() {
}, 300, function() {
$('.sideOption').bind('click',function(){
firstVal = $('.sideOption option[value="name"]').attr('selected');
secondVal = $('.sideOption option[value="metacode"]').attr('selected');
@ -393,7 +397,30 @@ $(document).ready(function() {
secondVal = $('.sideOption .select_content').children("option[value='maps']").attr('selected');
thirdVal = $('.sideOption .select_content').children("option[value='mappers']").attr('selected');
if ( firstVal == 'selected') {
onCanvasSearch(null,data.item.id,null);
// grab the checkboxes to see if the search is on the canvas, in the commons, or both
firstNewVal = $("#onCanvas").attr('checked');
secondNewVal = $("#inCommons").attr('checked');
// only have the autocomplete enabled if they are searching in the commons
if (firstNewVal == "checked" && secondNewVal == "checked"){
onCanvasSearch(null,data.item.id,null);
$('#topicsByMap').val(data.item.id);
$('#topicsByUser').val("");
$('#get_topics_form').submit();
}
else if (firstNewVal == "checked"){
onCanvasSearch(null,data.item.id,null);
}
else if (secondNewVal == "checked"){
//hideAll();
$('#topicsByMap').val(data.item.id);
$('#topicsByUser').val("");
$('#get_topics_form').submit();
}
else {
alert('You either need to have searching On Your Canvas or In the Commons enabled');
}
}
else if ( secondVal == 'selected' ) {
if (data.item.id != undefined) {
@ -415,7 +442,30 @@ $(document).ready(function() {
secondVal = $('.sideOption .select_content').children("option[value='maps']").attr('selected');
thirdVal = $('.sideOption .select_content').children("option[value='mappers']").attr('selected');
if ( firstVal == 'selected') {
onCanvasSearch(null,null,data.item.id.toString());
// grab the checkboxes to see if the search is on the canvas, in the commons, or both
firstNewVal = $("#onCanvas").attr('checked');
secondNewVal = $("#inCommons").attr('checked');
// only have the autocomplete enabled if they are searching in the commons
if (firstNewVal == "checked" && secondNewVal == "checked"){
onCanvasSearch(null,null,data.item.id.toString());
$('#topicsByUser').val(data.item.id);
$('#topicsByMap').val("");
$('#get_topics_form').submit();
}
else if (firstNewVal == "checked"){
onCanvasSearch(null,null,data.item.id.toString());
}
else if (secondNewVal == "checked"){
//hideAll();
$('#topicsByUser').val(data.item.id);
$('#topicsByMap').val("");
$('#get_topics_form').submit();
}
else {
alert('You either need to have searching On Your Canvas or In the Commons enabled');
}
}
else if ( secondVal == 'selected' ) {

View file

@ -364,6 +364,42 @@ function graphSettings(type) {
return t;
}
// defining code to draw edges with arrows pointing in the middle of them
var renderMidArrow = function(from, to, dim, swap, canvas){
var ctx = canvas.getCtx();
// invert edge direction
if (swap) {
var tmp = from;
from = to;
to = tmp;
}
// vect represents a line from tip to tail of the arrow
var vect = new $jit.Complex(to.x - from.x, to.y - from.y);
// scale it
vect.$scale(dim / vect.norm());
// compute the midpoint of the edge line
var midPoint = new $jit.Complex((to.x + from.x) / 2, (to.y + from.y) / 2);
// move midpoint by half the "length" of the arrow so the arrow is centered on the midpoint
midPoint.x += (vect.x / 0.7);
midPoint.y += (vect.y / 0.7);
// compute the tail intersection point with the edge line
var intermediatePoint = new $jit.Complex(midPoint.x - vect.x,
midPoint.y - vect.y);
// vector perpendicular to vect
var normal = new $jit.Complex(-vect.y / 2, vect.x / 2);
var v1 = intermediatePoint.add(normal);
var v2 = intermediatePoint.$add(normal.$scale(-1));
ctx.beginPath();
ctx.moveTo(from.x, from.y);
ctx.lineTo(to.x, to.y);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(v1.x, v1.y);
ctx.lineTo(midPoint.x, midPoint.y);
ctx.lineTo(v2.x, v2.y);
ctx.stroke();
};
// defining custom node type
var nodeSettings = {
@ -379,8 +415,9 @@ var nodeSettings = {
if (isNew) {
ctx.beginPath();
ctx.arc(pos.x, pos.y, dim+3, 0, 2 * Math.PI, false);
ctx.fillStyle = 'green';
ctx.fill();
ctx.strokeStyle = 'white';
ctx.lineWidth = 2;
ctx.stroke();
}
ctx.drawImage(imgArray[cat], pos.x - dim, pos.y - dim, dim*2, dim*2);
@ -555,6 +592,7 @@ function clickDragOnTopicForceDirected(node, eventInfo, e) {
Mconsole.fx.plotNode(tempNode, Mconsole.canvas);
Mconsole.fx.plotNode(temp, Mconsole.canvas);
} else if (!temp) {
tempNode2 = null;
Mconsole.graph.eachNode(function (n) {
n.setData('dim', 25, 'current');
});

View file

@ -45,60 +45,27 @@ imgArray['Action'] = new Image(); imgArray['Action'].src = '/assets/action.png';
imgArray['Activity'] = new Image(); imgArray['Activity'].src = '/assets/activity.png';
// defining code to draw edges with arrows pointing in the middle of them
var renderMidArrow = function(from, to, dim, swap, canvas){
var ctx = canvas.getCtx();
// invert edge direction
if (swap) {
var tmp = from;
from = to;
to = tmp;
}
// vect represents a line from tip to tail of the arrow
var vect = new $jit.Complex(to.x - from.x, to.y - from.y);
// scale it
vect.$scale(dim / vect.norm());
// compute the midpoint of the edge line
var midPoint = new $jit.Complex((to.x + from.x) / 2, (to.y + from.y) / 2);
// move midpoint by half the "length" of the arrow so the arrow is centered on the midpoint
midPoint.x += (vect.x / 0.7);
midPoint.y += (vect.y / 0.7);
// compute the tail intersection point with the edge line
var intermediatePoint = new $jit.Complex(midPoint.x - vect.x,
midPoint.y - vect.y);
// vector perpendicular to vect
var normal = new $jit.Complex(-vect.y / 2, vect.x / 2);
var v1 = intermediatePoint.add(normal);
var v2 = intermediatePoint.$add(normal.$scale(-1));
// init custom node type
$jit.ForceDirected.Plot.NodeTypes.implement(nodeSettings);
//implement an edge type
$jit.ForceDirected.Plot.EdgeTypes.implement(edgeSettings);
// end
ctx.beginPath();
ctx.moveTo(from.x, from.y);
ctx.lineTo(to.x, to.y);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(v1.x, v1.y);
ctx.lineTo(midPoint.x, midPoint.y);
ctx.lineTo(v2.x, v2.y);
ctx.stroke();
};
// init custom node type
$jit.RGraph.Plot.NodeTypes.implement(nodeSettings);
//implement an edge type
$jit.RGraph.Plot.EdgeTypes.implement(edgeSettings);
// end
function initialize(type, loadLater){
if (loadLater == null) {
loadlater = false;
}
function initialize(type){
viewMode = "graph";
gType = type;
// init custom node type
$jit.ForceDirected.Plot.NodeTypes.implement(nodeSettings);
//implement an edge type
$jit.ForceDirected.Plot.EdgeTypes.implement(edgeSettings);
// end
// init custom node type
$jit.RGraph.Plot.NodeTypes.implement(nodeSettings);
//implement an edge type
$jit.RGraph.Plot.EdgeTypes.implement(edgeSettings);
// end
if ( type == "centered") {
// init Rgraph
Mconsole = new $jit.RGraph(graphSettings(type));
@ -113,61 +80,63 @@ function initialize(type){
}
// load JSON data.
Mconsole.loadJSON(json);
// choose how to plot and animate the data onto the screen
var chooseAnimate;
if ( type == "centered") {
// compute positions incrementally and animate.
//trigger small animation
Mconsole.graph.eachNode(function(n) {
var pos = n.getPos();
pos.setc(-200, -200);
});
Mconsole.compute('end');
if (!loadLater) {
Mconsole.loadJSON(json);
chooseAnimate = {
modes:['polar'],
duration: 2000
};
}
else if ( type == "arranged" ) {
// compute positions incrementally and animate.
Mconsole.graph.eachNode(function(n) {
var pos = n.getPos();
pos.setc(0, 0);
var newPos = new $jit.Complex();
newPos.x = n.data.$xloc;
newPos.y = n.data.$yloc;
n.setPos(newPos, 'end');
// choose how to plot and animate the data onto the screen
var chooseAnimate;
if ( type == "centered") {
// compute positions incrementally and animate.
//trigger small animation
Mconsole.graph.eachNode(function(n) {
var pos = n.getPos();
pos.setc(-200, -200);
});
Mconsole.compute('end');
chooseAnimate = {
modes:['polar'],
duration: 2000
};
}
else if ( type == "arranged" ) {
// compute positions incrementally and animate.
Mconsole.graph.eachNode(function(n) {
var pos = n.getPos();
pos.setc(0, 0);
var newPos = new $jit.Complex();
newPos.x = n.data.$xloc;
newPos.y = n.data.$yloc;
n.setPos(newPos, 'end');
});
chooseAnimate = {
modes: ['linear'],
transition: $jit.Trans.Quad.easeInOut,
duration: 2500
};
}
else if ( type == "chaotic" ) {
// compute positions incrementally and animate.
Mconsole.compute();
chooseAnimate = {
modes: ['linear'],
transition: $jit.Trans.Elastic.easeOut,
duration: 2500
};
}
$(document).ready(function() {
if ( type == "centered") {
Mconsole.fx.animate(chooseAnimate);
}
else if ( type == "arranged" || type == "chaotic") {
Mconsole.animate(chooseAnimate);
}
});
chooseAnimate = {
modes: ['linear'],
transition: $jit.Trans.Quad.easeInOut,
duration: 2500
};
}
else if ( type == "chaotic" ) {
// compute positions incrementally and animate.
Mconsole.compute()
chooseAnimate = {
modes: ['linear'],
transition: $jit.Trans.Elastic.easeOut,
duration: 2500
};
}
$(document).ready(function() {
if ( type == "centered") {
Mconsole.fx.animate(chooseAnimate);
}
else if ( type == "arranged" || type == "chaotic") {
Mconsole.animate(chooseAnimate);
}
});
// end
// end
}// if not loadLater
}

View file

@ -19,7 +19,7 @@
// other options are 'graph'
var viewMode = "list";
var labelType, useGradients, nativeTextSupport, animate, json, Mconsole, gType, tempNode = null, tempInit = false, tempNode2 = null;
var labelType, useGradients, nativeTextSupport, animate, json, Mconsole = null, gType, tempNode = null, tempInit = false, tempNode2 = null;
$(document).ready(function() {

View file

@ -397,7 +397,7 @@ input[type="submit"] {
#findWhere {
position:fixed;
top:25%;
left:40px;
left:90px;
display:none;
margin-top:-20px;
}
@ -486,6 +486,10 @@ input[type="submit"] {
opacity: 0.4;
}
#get_topics_form {
display:none;
}
/* --- styling the logo button ---*/
.logo {
position:fixed;

View file

@ -11,14 +11,7 @@ class MainController < ApplicationController
@current = current_user
if authenticated?
@synapses = Synapse.visibleToUser(@current, nil)
@synapses = @synapses.slice(0, 50)
@items = synapses_as_json(@current, @synapses).html_safe
respond_to do |format|
format.html { respond_with(@current) }
format.json { respond_with(@items) }
end
else
@maps = Map.visibleToUser(@current, nil)
@map = @maps.sample
@ -32,6 +25,21 @@ class MainController < ApplicationController
end
end
def search
@current = current_user
@items = Array.new()
if params[:topics_by_user_id] != ""
@user = User.find(params[:topics_by_user_id])
@items = Item.visibleToUser(@current, @user)
elsif params[:topics_by_map_id] != ""
@map = Map.find(params[:topics_by_map_id])
@items = @map.items.delete_if{|item| not item.authorize_to_view(@current)}
end
respond_to do |format|
format.js { respond_with(@items) }
end
end
def metamap
@current = current_user

View file

@ -13,7 +13,7 @@ var x = <%= @position['x'] %>;
var y = <%= @position['y'] %>;
if (Mconsole != null) {
if (!$.isEmptyObject(Mconsole.graph.nodes)) {
Mconsole.graph.addNode(newnode);
// set the animation for everything back to normal
@ -66,5 +66,16 @@ if (Mconsole != null) {
} else {
json = newnode;
initialize("chaotic");
Mconsole.loadJSON(json);
var temp = Mconsole.graph.getNode('<%= @item.id %>');
temp.setData('dim', 1, 'start');
temp.setData('dim', 25, 'end');
temp.setPos(new $jit.Complex(x, y), 'current');
temp.setPos(new $jit.Complex(x, y), 'start');
temp.setPos(new $jit.Complex(x, y), 'end');
Mconsole.fx.plotNode(temp, Mconsole.canvas);
Mconsole.fx.animate({
modes: ['node-property:dim'],
duration: 500
});
}

View file

@ -37,35 +37,33 @@
}
</script>
<% elsif @items %>
<div class="maps" id="container">
<div id="center-container">
<div id="infovis"></div>
<% elsif authenticated? %>
<div class="maps" id="container">
<div id="center-container">
<div id="infovis"></div>
</div>
</div>
</div>
<div class="clearfloat"></div>
<% if authenticated? %>
<%= render :partial => 'items/new' %>
<%= render :partial => 'synapses/new' %>
<% end %>
<script>
json = <%= @items %>;
<div class="clearfloat"></div>
<% if authenticated? %>
<%= render :partial => 'items/new' %>
<%= render :partial => 'synapses/new' %>
<% end %>
<script>
//if (json.length > 0) {
$(document).ready(function() {
initialize("chaotic");
});
initialize("chaotic", true);
});
//}
</script>
<% else %>
<h1><br>Shucks, there are no maps.<h1>
<% end %>
<span id="closeFind">close</span>
<form id="findWhere">
<span class="findWhereField"><input type="checkbox" id="onCanvas" checked="checked"><p>On my Canvas</p></span>
<span class="findWhereField"><input type="checkbox" id="inCommons"><p>In the Commons</p></span>
<span class="findWhereField"><input type="checkbox" id="onCanvas"><p>On my Canvas</p></span>
<span class="findWhereField"><input type="checkbox" id="inCommons" checked="checked"><p>In the Commons</p></span>
</form>
<div class="sideOption" id="sideOptionFind">
<span class="find_key">Find...</span>
@ -130,4 +128,8 @@
<li><img src="/assets/trajectory.png" alt="Trajectory" /><p>trajectory</p></li>
</ul>
</div>
<%= form_tag("/search", :method => "get", :id => 'get_topics_form', :class => 'get_topics_form', :remote => true) do %>
<%= text_field_tag(:topics_by_user_id, "", :id => "topicsByUser", :class => "getTopicsInput") %>
<%= text_field_tag(:topics_by_map_id, "", :id => "topicsByMap", :class => "getTopicsInput") %>
<% end %>
</div>

View file

@ -0,0 +1,48 @@
$('.getTopicsInput').attr('value','');
var h = Mconsole.canvas.element.clientHeight / 2;
var w = Mconsole.canvas.element.clientWidth / 2;
var myX = -w + 100;
var myY = -h + 100;
<% @items.each do |item| %>
if ($.isEmptyObject(Mconsole.graph.nodes)) {
json = <%= item.self_as_json.html_safe %>;
Mconsole.loadJSON(json);
var temp = Mconsole.graph.getNode('<%= item.id %>');
temp.setData('dim', 1, 'start');
temp.setData('dim', 25, 'end');
temp.setData('isNew',true);
temp.setPos(new $jit.Complex(myX, myY), 'current');
temp.setPos(new $jit.Complex(myX, myY), 'start');
temp.setPos(new $jit.Complex(myX, myY), 'end');
Mconsole.fx.plotNode(temp, Mconsole.canvas);
myX += 100;
}
else {
var temp = Mconsole.graph.getNode('<%= item.id %>');
if (temp == null) {
var newnode = <%= item.self_as_json.html_safe %>;
Mconsole.graph.addNode(newnode);
var temp = Mconsole.graph.getNode('<%= item.id %>');
temp.setData('dim', 1, 'start');
temp.setData('dim', 25, 'end');
temp.setData('isNew',true);
if (myX > (w-100)) {
myX = -w + 100;
myY += 100
}
temp.setPos(new $jit.Complex(myX, myY), 'current');
temp.setPos(new $jit.Complex(myX, myY), 'start');
temp.setPos(new $jit.Complex(myX, myY), 'end');
Mconsole.fx.plotNode(temp, Mconsole.canvas);
myX += 100;
}
}
<% end %>
Mconsole.fx.animate({
modes: ['node-property:dim'],
duration: 500
});

View file

@ -6,6 +6,8 @@ ISSAD::Application.routes.draw do
match 'invite', to: 'main#invite', via: :get, as: :invite
match 'search', to: 'main#search', via: :get, as: :search
match 'maps/:id/savelayout', to: 'maps#savelayout', via: :put, as: :savelayout
resource :session

BIN
public/assets/48px-all.zip Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

BIN
public/assets/action.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
public/assets/activity.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
public/assets/bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
public/assets/bizarre.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

BIN
public/assets/catalyst.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
public/assets/closed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
public/assets/col2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
public/assets/futuredev.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
public/assets/gradient.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
public/assets/group.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

BIN
public/assets/idea.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

BIN
public/assets/insight.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
public/assets/intention.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
public/assets/junto.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

BIN
public/assets/knowledge.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

BIN
public/assets/location.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

View file

@ -0,0 +1,49 @@
---
48px-all.zip: 48px-all-2dd6aaa6c99e01af92fd7aa61fbf642a.zip
96px-gen001.zip: 96px-gen001-a2e2d959694d5f3c98e717eb4f82d5dd.zip
action.png: action-02bd981b8466a7b2cb167afffc284703.png
activity.png: activity-27aedb9b5baea69ea88f1f2b5303862c.png
background.jpg: background-2fcc9f96ace4764a02278ada04bc0d9d.jpg
background2-for-repeating.jpg: background2-for-repeating-8d022369a362b364c9395039167f1ffd.jpg
background2.jpg: background2-c2b46d9ebc7d31aea8135e3c505aa1e9.jpg
bg.png: bg-eea3f1ec61623cbc3833f8fcbf114bf8.png
bizarre.png: bizarre-4154e4b7b2e0169cfc4af24c32119305.png
catalyst.png: catalyst-21e04cdb0f34140b3e00d0b98aca240c.png
closed.png: closed-11f6970ed42d52bc9352fa8860ab7479.png
col2.png: col2-4f58f5695026bcc1789ef2a87be40897.png
experience.png: experience-8068d2c812493d1852ee7e3c992365ce.png
futuredev.png: futuredev-e3c62458cfd457b0501dddc6d9b2d8d4.png
gradient.png: gradient-6c6f5be85356b9e5ff76658e56ccc0f9.png
group.png: group-70155e13e72ec389d64a4f80a8d62d24.png
idea.png: idea-283b58d94b9166856f2734e3c5426ca4.png
implication.png: implication-652ece8bc0b1060dd5ca0756393cf21e.png
insight.png: insight-858ccca7357b37837a257e0202319b27.png
intention.png: intention-a487d116bfcf64c7ac559ef89ed61544.png
junto.png: junto-3bca283ec5fe80ef34d6a888b7c676b4.png
knowledge.png: knowledge-eb4b1dc4412b210c286b934737b04f80.png
location.png: location-e1642892214a5cb4b2891f3837f437de.png
old icons/action.png: old icons/action-d55838ce24528a56dd241c285ef2349a.png
old icons/group.png: old icons/group-bd3f38a2d40c7aef4123fd61caa833c7.png
old icons/intention.png: old icons/intention-6fc1087e39981084643eb9d713f82d90.png
old icons/location.png: old icons/location-4f88b890ffc41fea38627f59f2c19a3e.png
old icons/person.png: old icons/person-be021351add736f73b07acc5880ecbf4.png
old icons/resource.png: old icons/resource-9e40d89dbf5a02859533b6c02eabe2d8.png
openissue.png: openissue-d9c50446b2dbd0587942ae298bda2a75.png
opinion.png: opinion-c65d63ce63d9c1dc01f60b2f9a4fecfe.png
opportunity.png: opportunity-4fe7c2f4f5cbe678058c76924ec43a7f.png
person.png: person-2cb4eace780426c21c109ca6475431ce.png
platform.png: platform-29f4dc32fb5f2a9f369b92d2f51ba005.png
problem.png: problem-d660aa3522f737dfd25487937bed6db1.png
question.png: question-bc1ccabf1e7cb8b4b6d6744fe096760c.png
reference.png: reference-c840b77477e0dc3fd431236766793a5f.png
requirement.png: requirement-d200e129a41fff36f64111f554abea72.png
resource.png: resource-4017b1e9535d80d205ceff916930cf5d.png
role.png: role-c474b1fcb4b4f836e7ca0db67e744dc3.png
task.png: task-0ac599d122a709a5e73990f1745019e0.png
tool.png: tool-45532482693a381d4da31c103392ee5b.png
topbg.png: topbg-eb18f5cf8dcfaf7dfd7e47f503956a5d.png
topbg2.png: topbg2-f9640f6cb183bb610d0954c7759ecc23.png
trajectory.png: trajectory-a7c520e746d4c1ffe401805b3d0cb6cd.png
application.js: application-6b4d80ff670302ae50174a88153db2fc.js
scroll/mCSB_buttons.png: scroll/mCSB_buttons-6eb1e766df3b6b28f5cb2a218697658f.png
application.css: application-b45ff6856d37792e0f8481681c27b764.css

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
public/assets/openissue.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

BIN
public/assets/opinion.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
public/assets/person.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

BIN
public/assets/platform.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
public/assets/problem.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

BIN
public/assets/question.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

BIN
public/assets/reference.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

BIN
public/assets/resource.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

BIN
public/assets/role.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Some files were not shown because too many files have changed in this diff Show more