Merge branch 'develop' of https://github.com/Connoropolous/metamaps_gen002
This commit is contained in:
commit
5725007e78
14 changed files with 282 additions and 196 deletions
6
LiveSiteUpdatesNotes.txt
Normal file
6
LiveSiteUpdatesNotes.txt
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
make sure that root individuals have same 'joinedwithcode' as 'code'
|
||||||
|
|
||||||
|
User.all.each do |u|
|
||||||
|
u.generation = u.get_generation
|
||||||
|
u.save
|
||||||
|
end
|
|
@ -2495,7 +2495,7 @@ Extras.Classes.Navigation = new Class({
|
||||||
//START METAMAPS CODE
|
//START METAMAPS CODE
|
||||||
var rightClick = e.button == 2 || (navigator.platform.indexOf("Mac") != -1 && e.ctrlKey);
|
var rightClick = e.button == 2 || (navigator.platform.indexOf("Mac") != -1 && e.ctrlKey);
|
||||||
// TODO make sure this works across browsers
|
// TODO make sure this works across browsers
|
||||||
if (!Metamaps.Mouse.boxStartCoordinates && ((e.button == 0 && e.shiftKey) || (e.button == 0 && e.ctrlKey) || (rightClick && e.ctrlKey))) {
|
if (!Metamaps.Mouse.boxStartCoordinates && ((e.button == 0 && e.shiftKey) || (e.button == 0 && e.ctrlKey) || rightClick)) {
|
||||||
Metamaps.Mouse.boxStartCoordinates = eventInfo.getPos();
|
Metamaps.Mouse.boxStartCoordinates = eventInfo.getPos();
|
||||||
//console.log('mouse down');
|
//console.log('mouse down');
|
||||||
}
|
}
|
||||||
|
@ -2525,13 +2525,13 @@ Extras.Classes.Navigation = new Class({
|
||||||
|
|
||||||
// START METAMAPS CODE
|
// START METAMAPS CODE
|
||||||
var rightClick = e.button == 2 || (navigator.platform.indexOf("Mac") != -1 && e.ctrlKey);
|
var rightClick = e.button == 2 || (navigator.platform.indexOf("Mac") != -1 && e.ctrlKey);
|
||||||
if (!Metamaps.Mouse.boxStartCoordinates && ((e.button == 0 && e.shiftKey) || (e.button == 0 && e.ctrlKey) || (rightClick && e.ctrlKey))) {
|
if (!Metamaps.Mouse.boxStartCoordinates && ((e.button == 0 && e.shiftKey) || (e.button == 0 && e.ctrlKey) || rightClick)) {
|
||||||
Metamaps.Visualize.mGraph.busy = true;
|
Metamaps.Visualize.mGraph.busy = true;
|
||||||
Metamaps.boxStartCoordinates = eventInfo.getPos();
|
Metamaps.boxStartCoordinates = eventInfo.getPos();
|
||||||
//console.log('mouse move');
|
//console.log('mouse move');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Metamaps.Mouse.boxStartCoordinates && ((e.button == 0 && e.shiftKey) || (e.button == 0 && e.ctrlKey) || (rightClick && e.ctrlKey))) {
|
if (Metamaps.Mouse.boxStartCoordinates && ((e.button == 0 && e.shiftKey) || (e.button == 0 && e.ctrlKey) || rightClick)) {
|
||||||
Metamaps.Visualize.mGraph.busy = true;
|
Metamaps.Visualize.mGraph.busy = true;
|
||||||
Metamaps.JIT.drawSelectBox(eventInfo,e);
|
Metamaps.JIT.drawSelectBox(eventInfo,e);
|
||||||
//console.log('mouse move');
|
//console.log('mouse move');
|
||||||
|
|
|
@ -374,14 +374,14 @@ Metamaps.JIT = {
|
||||||
$('.rightclickmenu').remove();
|
$('.rightclickmenu').remove();
|
||||||
|
|
||||||
if (Metamaps.Mouse.boxStartCoordinates) {
|
if (Metamaps.Mouse.boxStartCoordinates) {
|
||||||
if(e.ctrlKey && e.shiftKey){
|
if(e.ctrlKey){
|
||||||
Metamaps.Visualize.mGraph.busy = false;
|
Metamaps.Visualize.mGraph.busy = false;
|
||||||
Metamaps.Mouse.boxEndCoordinates = eventInfo.getPos();
|
Metamaps.Mouse.boxEndCoordinates = eventInfo.getPos();
|
||||||
Metamaps.JIT.zoomToBox(e);
|
Metamaps.JIT.zoomToBox(e);
|
||||||
//console.log('called zoom to box');
|
//console.log('called zoom to box');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (e.ctrlKey || e.shiftKey) {
|
else if (e.shiftKey) {
|
||||||
Metamaps.Visualize.mGraph.busy = false;
|
Metamaps.Visualize.mGraph.busy = false;
|
||||||
Metamaps.Mouse.boxEndCoordinates = eventInfo.getPos();
|
Metamaps.Mouse.boxEndCoordinates = eventInfo.getPos();
|
||||||
Metamaps.JIT.selectWithBox(e);
|
Metamaps.JIT.selectWithBox(e);
|
||||||
|
@ -410,10 +410,10 @@ Metamaps.JIT = {
|
||||||
// remove the rightclickmenu
|
// remove the rightclickmenu
|
||||||
$('.rightclickmenu').remove();
|
$('.rightclickmenu').remove();
|
||||||
|
|
||||||
if (Metamaps.Mouse.boxStartCoordinates && e.ctrlKey) {
|
if (Metamaps.Mouse.boxStartCoordinates) {
|
||||||
Metamaps.Visualize.mGraph.busy = false;
|
Metamaps.Visualize.mGraph.busy = false;
|
||||||
Metamaps.Mouse.boxEndCoordinates = eventInfo.getPos();
|
Metamaps.Mouse.boxEndCoordinates = eventInfo.getPos();
|
||||||
Metamaps.JIT.zoomToBox(e);
|
Metamaps.JIT.selectWithBox(e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1097,7 +1097,7 @@ Metamaps.JIT = {
|
||||||
eX = Metamaps.Mouse.boxEndCoordinates.x,
|
eX = Metamaps.Mouse.boxEndCoordinates.x,
|
||||||
eY = Metamaps.Mouse.boxEndCoordinates.y;
|
eY = Metamaps.Mouse.boxEndCoordinates.y;
|
||||||
|
|
||||||
if(!(e.shiftKey) && !(e.ctrlKey)){
|
if(!e.shiftKey){
|
||||||
Metamaps.Control.deselectAllNodes();
|
Metamaps.Control.deselectAllNodes();
|
||||||
Metamaps.Control.deselectAllEdges();
|
Metamaps.Control.deselectAllEdges();
|
||||||
}
|
}
|
||||||
|
@ -1108,7 +1108,7 @@ Metamaps.JIT = {
|
||||||
y = n.pos.y;
|
y = n.pos.y;
|
||||||
|
|
||||||
if ((sX < x && x < eX && sY < y && y < eY) || (sX > x && x > eX && sY > y && y > eY) || (sX > x && x > eX && sY < y && y < eY) || (sX < x && x < eX && sY > y && y > eY)) {
|
if ((sX < x && x < eX && sY < y && y < eY) || (sX > x && x > eX && sY > y && y > eY) || (sX > x && x > eX && sY < y && y < eY) || (sX < x && x < eX && sY > y && y > eY)) {
|
||||||
if(e.ctrlKey){
|
if(e.shiftKey){
|
||||||
if(n.selected){
|
if(n.selected){
|
||||||
Metamaps.Control.deselectNode(n);
|
Metamaps.Control.deselectNode(n);
|
||||||
}
|
}
|
||||||
|
@ -1211,7 +1211,7 @@ Metamaps.JIT = {
|
||||||
var node2id = synapse.get('edge').nodeTo.id;
|
var node2id = synapse.get('edge').nodeTo.id;
|
||||||
var edge = Metamaps.Visualize.mGraph.graph.getAdjacence(node1id, node2id);
|
var edge = Metamaps.Visualize.mGraph.graph.getAdjacence(node1id, node2id);
|
||||||
if(selectTest){
|
if(selectTest){
|
||||||
if(e.ctrlKey){
|
if(e.shiftKey){
|
||||||
if(Metamaps.Selected.Edges.indexOf(synapse.get('edge')) != -1 ){
|
if(Metamaps.Selected.Edges.indexOf(synapse.get('edge')) != -1 ){
|
||||||
Metamaps.Control.deselectEdge(synapse.get('edge'));
|
Metamaps.Control.deselectEdge(synapse.get('edge'));
|
||||||
}
|
}
|
||||||
|
@ -1273,23 +1273,19 @@ Metamaps.JIT = {
|
||||||
// wait a certain length of time, then check again, then run this code
|
// wait a certain length of time, then check again, then run this code
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
if (!Metamaps.JIT.nodeWasDoubleClicked()) {
|
if (!Metamaps.JIT.nodeWasDoubleClicked()) {
|
||||||
if (!e.shiftKey && !e.ctrlKey) {
|
|
||||||
|
var nodeAlreadySelected = node.selected;
|
||||||
|
|
||||||
|
if (!e.shiftKey) {
|
||||||
Metamaps.Control.deselectAllNodes();
|
Metamaps.Control.deselectAllNodes();
|
||||||
Metamaps.Control.deselectAllEdges();
|
Metamaps.Control.deselectAllEdges();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nodeAlreadySelected) {
|
||||||
|
Metamaps.Control.deselectNode(node);
|
||||||
|
} else {
|
||||||
Metamaps.Control.selectNode(node,e);
|
Metamaps.Control.selectNode(node,e);
|
||||||
}
|
}
|
||||||
else if(e.shiftKey && e.ctrlKey){
|
|
||||||
//no result
|
|
||||||
}
|
|
||||||
else if(e.ctrlKey){
|
|
||||||
if (node.selected) {
|
|
||||||
Metamaps.Control.deselectNode(node);
|
|
||||||
} else {
|
|
||||||
Metamaps.Control.selectNode(node,e);
|
|
||||||
}
|
|
||||||
}else if(e.shiftKey){
|
|
||||||
Metamaps.Control.selectNode(node,e);
|
|
||||||
}
|
|
||||||
|
|
||||||
//trigger animation to final styles
|
//trigger animation to final styles
|
||||||
Metamaps.Visualize.mGraph.fx.animate({
|
Metamaps.Visualize.mGraph.fx.animate({
|
||||||
|
@ -1531,22 +1527,17 @@ Metamaps.JIT = {
|
||||||
// wait a certain length of time, then check again, then run this code
|
// wait a certain length of time, then check again, then run this code
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
if (!Metamaps.JIT.nodeWasDoubleClicked()) {
|
if (!Metamaps.JIT.nodeWasDoubleClicked()) {
|
||||||
if (!e.shiftKey && !e.ctrlKey) {
|
|
||||||
|
var edgeAlreadySelected = Metamaps.Selected.Edges.indexOf(adj) !== -1;
|
||||||
|
|
||||||
|
if (!e.shiftKey) {
|
||||||
Metamaps.Control.deselectAllNodes();
|
Metamaps.Control.deselectAllNodes();
|
||||||
Metamaps.Control.deselectAllEdges();
|
Metamaps.Control.deselectAllEdges();
|
||||||
Metamaps.Control.selectEdge(adj);
|
|
||||||
}
|
}
|
||||||
else if (e.shiftKey && e.ctrlKey){
|
|
||||||
//no result
|
if (edgeAlreadySelected) {
|
||||||
}
|
Metamaps.Control.deselectEdge(adj);
|
||||||
else if (e.ctrlKey){
|
} else {
|
||||||
if (Metamaps.Selected.Edges.indexOf(adj) !== -1) {
|
|
||||||
Metamaps.Control.deselectEdge(adj);
|
|
||||||
} else {
|
|
||||||
Metamaps.Control.selectEdge(adj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (e.shiftKey){
|
|
||||||
Metamaps.Control.selectEdge(adj);
|
Metamaps.Control.selectEdge(adj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1861,7 +1852,7 @@ Metamaps.JIT = {
|
||||||
var x = n.pos.x,
|
var x = n.pos.x,
|
||||||
y = n.pos.y;
|
y = n.pos.y;
|
||||||
|
|
||||||
if (counter == 0){
|
if (counter == 0 && n.getData('alpha') == 1){
|
||||||
maxX = x;
|
maxX = x;
|
||||||
minX = x;
|
minX = x;
|
||||||
maxY = y;
|
maxY = y;
|
||||||
|
@ -1880,12 +1871,15 @@ Metamaps.JIT = {
|
||||||
}
|
}
|
||||||
var width = Math.max.apply(null, lineWidths) + 8;
|
var width = Math.max.apply(null, lineWidths) + 8;
|
||||||
|
|
||||||
maxX = Math.max(x + width /2,maxX);
|
// only adjust these values if the node is not filtered
|
||||||
maxY = Math.max(y + n.getData("height") + 5 + height,maxY);
|
if (n.getData('alpha') == 1) {
|
||||||
minX = Math.min(x - width /2,minX);
|
maxX = Math.max(x + width /2,maxX);
|
||||||
minY = Math.min(y - dim,minY);
|
maxY = Math.max(y + n.getData("height") + 5 + height,maxY);
|
||||||
|
minX = Math.min(x - width /2,minX);
|
||||||
|
minY = Math.min(y - dim,minY);
|
||||||
|
|
||||||
counter++;
|
counter++;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var spanX = maxX - minX;
|
var spanX = maxX - minX;
|
||||||
|
|
|
@ -1888,13 +1888,13 @@ Metamaps.Realtime = {
|
||||||
turnOn: function (notify) {
|
turnOn: function (notify) {
|
||||||
var self = Metamaps.Realtime;
|
var self = Metamaps.Realtime;
|
||||||
|
|
||||||
if (!self.status) {
|
if (notify) self.sendRealtimeOn();
|
||||||
if (notify) self.sendRealtimeOn();
|
$(".rtMapperSelf").removeClass('littleRtOff').addClass('littleRtOn');
|
||||||
$(".rtMapperSelf").removeClass('littleRtOff').addClass('littleRtOn');
|
$('.rtOn').addClass('active');
|
||||||
self.status = true;
|
$('.rtOff').removeClass('active');
|
||||||
$(".sidebarCollaborateIcon").addClass("blue");
|
self.status = true;
|
||||||
$(".collabCompass").show();
|
$(".sidebarCollaborateIcon").addClass("blue");
|
||||||
}
|
$(".collabCompass").show();
|
||||||
},
|
},
|
||||||
turnOff: function (silent) {
|
turnOff: function (silent) {
|
||||||
var self = Metamaps.Realtime;
|
var self = Metamaps.Realtime;
|
||||||
|
@ -1902,6 +1902,8 @@ Metamaps.Realtime = {
|
||||||
if (self.status) {
|
if (self.status) {
|
||||||
if (!silent) self.sendRealtimeOff();
|
if (!silent) self.sendRealtimeOff();
|
||||||
$(".rtMapperSelf").removeClass('littleRtOn').addClass('littleRtOff');
|
$(".rtMapperSelf").removeClass('littleRtOn').addClass('littleRtOff');
|
||||||
|
$('.rtOn').removeClass('active');
|
||||||
|
$('.rtOff').addClass('active');
|
||||||
self.status = false;
|
self.status = false;
|
||||||
$(".sidebarCollaborateIcon").removeClass("blue");
|
$(".sidebarCollaborateIcon").removeClass("blue");
|
||||||
$(".collabCompass").hide();
|
$(".collabCompass").hide();
|
||||||
|
@ -3111,6 +3113,8 @@ Metamaps.Filter = {
|
||||||
$('#filter_by_metacode ul').empty();
|
$('#filter_by_metacode ul').empty();
|
||||||
$('#filter_by_mapper ul').empty();
|
$('#filter_by_mapper ul').empty();
|
||||||
$('#filter_by_synapse ul').empty();
|
$('#filter_by_synapse ul').empty();
|
||||||
|
|
||||||
|
$('.filterBox .showAll').addClass('active');
|
||||||
},
|
},
|
||||||
/*
|
/*
|
||||||
Most of this data essentially depends on the ruby function which are happening for filter inside view filterBox
|
Most of this data essentially depends on the ruby function which are happening for filter inside view filterBox
|
||||||
|
@ -3239,36 +3243,48 @@ Metamaps.Filter = {
|
||||||
filterAllMetacodes: function (e) {
|
filterAllMetacodes: function (e) {
|
||||||
var self = Metamaps.Filter;
|
var self = Metamaps.Filter;
|
||||||
$('#filter_by_metacode ul li').addClass('toggledOff');
|
$('#filter_by_metacode ul li').addClass('toggledOff');
|
||||||
|
$('.showAllMetacodes').removeClass('active');
|
||||||
|
$('.hideAllMetacodes').addClass('active');
|
||||||
self.visible.metacodes = [];
|
self.visible.metacodes = [];
|
||||||
self.passFilters();
|
self.passFilters();
|
||||||
},
|
},
|
||||||
filterNoMetacodes: function (e) {
|
filterNoMetacodes: function (e) {
|
||||||
var self = Metamaps.Filter;
|
var self = Metamaps.Filter;
|
||||||
$('#filter_by_metacode ul li').removeClass('toggledOff');
|
$('#filter_by_metacode ul li').removeClass('toggledOff');
|
||||||
|
$('.showAllMetacodes').addClass('active');
|
||||||
|
$('.hideAllMetacodes').removeClass('active');
|
||||||
self.visible.metacodes = self.filters.metacodes.slice();
|
self.visible.metacodes = self.filters.metacodes.slice();
|
||||||
self.passFilters();
|
self.passFilters();
|
||||||
},
|
},
|
||||||
filterAllMappers: function (e) {
|
filterAllMappers: function (e) {
|
||||||
var self = Metamaps.Filter;
|
var self = Metamaps.Filter;
|
||||||
$('#filter_by_mapper ul li').addClass('toggledOff');
|
$('#filter_by_mapper ul li').addClass('toggledOff');
|
||||||
|
$('.showAllMappers').removeClass('active');
|
||||||
|
$('.hideAllMappers').addClass('active');
|
||||||
self.visible.mappers = [];
|
self.visible.mappers = [];
|
||||||
self.passFilters();
|
self.passFilters();
|
||||||
},
|
},
|
||||||
filterNoMappers: function (e) {
|
filterNoMappers: function (e) {
|
||||||
var self = Metamaps.Filter;
|
var self = Metamaps.Filter;
|
||||||
$('#filter_by_mapper ul li').removeClass('toggledOff');
|
$('#filter_by_mapper ul li').removeClass('toggledOff');
|
||||||
|
$('.showAllMappers').addClass('active');
|
||||||
|
$('.hideAllMappers').removeClass('active');
|
||||||
self.visible.mappers = self.filters.mappers.slice();
|
self.visible.mappers = self.filters.mappers.slice();
|
||||||
self.passFilters();
|
self.passFilters();
|
||||||
},
|
},
|
||||||
filterAllSynapses: function (e) {
|
filterAllSynapses: function (e) {
|
||||||
var self = Metamaps.Filter;
|
var self = Metamaps.Filter;
|
||||||
$('#filter_by_synapse ul li').addClass('toggledOff');
|
$('#filter_by_synapse ul li').addClass('toggledOff');
|
||||||
|
$('.showAllSynapses').removeClass('active');
|
||||||
|
$('.hideAllSynapses').addClass('active');
|
||||||
self.visible.synapses = [];
|
self.visible.synapses = [];
|
||||||
self.passFilters();
|
self.passFilters();
|
||||||
},
|
},
|
||||||
filterNoSynapses: function (e) {
|
filterNoSynapses: function (e) {
|
||||||
var self = Metamaps.Filter;
|
var self = Metamaps.Filter;
|
||||||
$('#filter_by_synapse ul li').removeClass('toggledOff');
|
$('#filter_by_synapse ul li').removeClass('toggledOff');
|
||||||
|
$('.showAllSynapses').addClass('active');
|
||||||
|
$('.hideAllSynapses').removeClass('active');
|
||||||
self.visible.synapses = self.filters.synapses.slice();
|
self.visible.synapses = self.filters.synapses.slice();
|
||||||
self.passFilters();
|
self.passFilters();
|
||||||
},
|
},
|
||||||
|
@ -3292,14 +3308,53 @@ Metamaps.Filter = {
|
||||||
toggleMetacode: function () {
|
toggleMetacode: function () {
|
||||||
var self = Metamaps.Filter;
|
var self = Metamaps.Filter;
|
||||||
self.toggleLi.call(this, 'metacodes');
|
self.toggleLi.call(this, 'metacodes');
|
||||||
|
|
||||||
|
if (self.visible.metacodes.length === self.filters.metacodes.length) {
|
||||||
|
$('.showAllMetacodes').addClass('active');
|
||||||
|
$('.hideAllMetacodes').removeClass('active');
|
||||||
|
}
|
||||||
|
else if (self.visible.metacodes.length === 0) {
|
||||||
|
$('.showAllMetacodes').removeClass('active');
|
||||||
|
$('.hideAllMetacodes').addClass('active');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$('.showAllMetacodes').removeClass('active');
|
||||||
|
$('.hideAllMetacodes').removeClass('active');
|
||||||
|
}
|
||||||
},
|
},
|
||||||
toggleMapper: function () {
|
toggleMapper: function () {
|
||||||
var self = Metamaps.Filter;
|
var self = Metamaps.Filter;
|
||||||
self.toggleLi.call(this, 'mappers');
|
self.toggleLi.call(this, 'mappers');
|
||||||
|
|
||||||
|
if (self.visible.mappers.length === self.filters.mappers.length) {
|
||||||
|
$('.showAllMappers').addClass('active');
|
||||||
|
$('.hideAllMappers').removeClass('active');
|
||||||
|
}
|
||||||
|
else if (self.visible.mappers.length === 0) {
|
||||||
|
$('.showAllMappers').removeClass('active');
|
||||||
|
$('.hideAllMappers').addClass('active');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$('.showAllMappers').removeClass('active');
|
||||||
|
$('.hideAllMappers').removeClass('active');
|
||||||
|
}
|
||||||
},
|
},
|
||||||
toggleSynapse: function () {
|
toggleSynapse: function () {
|
||||||
var self = Metamaps.Filter;
|
var self = Metamaps.Filter;
|
||||||
self.toggleLi.call(this, 'synapses');
|
self.toggleLi.call(this, 'synapses');
|
||||||
|
|
||||||
|
if (self.visible.synapses.length === self.filters.synapses.length) {
|
||||||
|
$('.showAllSynapses').addClass('active');
|
||||||
|
$('.hideAllSynapses').removeClass('active');
|
||||||
|
}
|
||||||
|
else if (self.visible.synapses.length === 0) {
|
||||||
|
$('.showAllSynapses').removeClass('active');
|
||||||
|
$('.hideAllSynapses').addClass('active');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$('.showAllSynapses').removeClass('active');
|
||||||
|
$('.hideAllSynapses').removeClass('active');
|
||||||
|
}
|
||||||
},
|
},
|
||||||
passFilters: function () {
|
passFilters: function () {
|
||||||
var self = Metamaps.Filter;
|
var self = Metamaps.Filter;
|
||||||
|
@ -4204,6 +4259,7 @@ Metamaps.Map = {
|
||||||
Metamaps.Create.newTopic.hide();
|
Metamaps.Create.newTopic.hide();
|
||||||
Metamaps.Create.newSynapse.hide();
|
Metamaps.Create.newSynapse.hide();
|
||||||
Metamaps.Filter.close();
|
Metamaps.Filter.close();
|
||||||
|
Metamaps.Map.InfoBox.close();
|
||||||
Metamaps.Realtime.endActiveMap();
|
Metamaps.Realtime.endActiveMap();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -1007,7 +1007,7 @@ h3.filterBox {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
font-size:12px;
|
font-size:12px;
|
||||||
}
|
}
|
||||||
.sidebarFilterBox span:hover {
|
.sidebarFilterBox span:hover, .sidebarFilterBox span.active {
|
||||||
color: #00BCD4;
|
color: #00BCD4;
|
||||||
}
|
}
|
||||||
.sidebarFilterBox ul {
|
.sidebarFilterBox ul {
|
||||||
|
@ -1104,7 +1104,7 @@ h3.realtimeBoxTitle {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size:12px;
|
font-size:12px;
|
||||||
}
|
}
|
||||||
.sidebarCollaborateBox .realtimeOnOff:hover {
|
.sidebarCollaborateBox .realtimeOnOff:hover, .sidebarCollaborateBox .realtimeOnOff.active {
|
||||||
color: #00bcd4;
|
color: #00bcd4;
|
||||||
}
|
}
|
||||||
.sidebarCollaborateBox .rtOff {
|
.sidebarCollaborateBox .rtOff {
|
||||||
|
|
|
@ -760,7 +760,7 @@
|
||||||
|
|
||||||
/* infoAndHelp */
|
/* infoAndHelp */
|
||||||
|
|
||||||
.mapPage .infoAndHelp, .topicPage .infoAndHelp{
|
.mapPage .infoAndHelp, .topicPage .infoAndHelp {
|
||||||
right: 70px;
|
right: 70px;
|
||||||
}
|
}
|
||||||
.mapPage .openCheatsheet .tooltipsAbove, .topicPage .openCheatsheet .tooltipsAbove {
|
.mapPage .openCheatsheet .tooltipsAbove, .topicPage .openCheatsheet .tooltipsAbove {
|
||||||
|
@ -818,6 +818,10 @@
|
||||||
right: 24px;
|
right: 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.topicPage .zoomExtents {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
.mapControl {
|
.mapControl {
|
||||||
width:32px;
|
width:32px;
|
||||||
height:32px;
|
height:32px;
|
||||||
|
|
|
@ -10,6 +10,7 @@ module UsersHelper
|
||||||
user['value'] = u.name
|
user['value'] = u.name
|
||||||
user['profile'] = u.image.url(:square)
|
user['profile'] = u.image.url(:square)
|
||||||
user['mapCount'] = u.maps.count
|
user['mapCount'] = u.maps.count
|
||||||
|
user['generation'] = u.generation
|
||||||
user['created_at'] = u.created_at.strftime("%m/%d/%Y")
|
user['created_at'] = u.created_at.strftime("%m/%d/%Y")
|
||||||
user['rtype'] = "mapper"
|
user['rtype'] = "mapper"
|
||||||
|
|
||||||
|
|
|
@ -28,12 +28,7 @@ class User < ActiveRecord::Base
|
||||||
validates_uniqueness_of :name # done by devise
|
validates_uniqueness_of :name # done by devise
|
||||||
validates_uniqueness_of :email # done by devise
|
validates_uniqueness_of :email # done by devise
|
||||||
|
|
||||||
if ActiveRecord::Base.connection.table_exists? 'users'
|
validates :joinedwithcode, :presence => true, :inclusion => { :in => $codes, :message => "%{value} is not valid" }, :on => :create
|
||||||
codes = ActiveRecord::Base.connection.execute("SELECT code FROM users").map {|user| user["code"] }
|
|
||||||
else
|
|
||||||
codes = []
|
|
||||||
end
|
|
||||||
validates :joinedwithcode, :presence => true, :inclusion => { :in => codes, :message => "%{value} is not valid" }, :on => :create
|
|
||||||
|
|
||||||
# This method associates the attribute ":image" with a file attachment
|
# This method associates the attribute ":image" with a file attachment
|
||||||
has_attached_file :image, :styles => {
|
has_attached_file :image, :styles => {
|
||||||
|
@ -54,6 +49,24 @@ class User < ActiveRecord::Base
|
||||||
def generate_code
|
def generate_code
|
||||||
#generate a random 8 letter/digit code that they can use to invite people
|
#generate a random 8 letter/digit code that they can use to invite people
|
||||||
self.code = rand(36**8).to_s(36)
|
self.code = rand(36**8).to_s(36)
|
||||||
|
|
||||||
|
$codes.push(self.code)
|
||||||
|
|
||||||
|
self.generation = self.get_generation
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_generation
|
||||||
|
if self.joinedwithcode == self.code
|
||||||
|
# if your joinedwithcode equals your code you must be GEN 0
|
||||||
|
gen = 0
|
||||||
|
elsif self.generation
|
||||||
|
# if your generation has already been calculated then just return that value
|
||||||
|
gen = self.generation
|
||||||
|
else
|
||||||
|
# if your generation hasn't been calculated, base it off the
|
||||||
|
# generation of the person whose code you joined with + 1
|
||||||
|
gen = User.find_by_code(self.joinedwithcode).get_generation + 1
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def settings
|
def settings
|
||||||
|
|
|
@ -149,7 +149,7 @@
|
||||||
<p>Mapping since: {{created_at}}</p>
|
<p>Mapping since: {{created_at}}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="mapperGeneration">
|
<div class="mapperGeneration">
|
||||||
<p>Generation: 1</p>
|
<p>Generation: {{generation}}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="mapCount">
|
<div class="mapCount">
|
||||||
{{mapCount}}
|
{{mapCount}}
|
||||||
|
|
|
@ -91,7 +91,7 @@
|
||||||
<div id="filter_by_mapper" class="filterBySection">
|
<div id="filter_by_mapper" class="filterBySection">
|
||||||
<h3><%= @map ? "MAPPERS" : @topic ? "CREATORS" : "" %></h3>
|
<h3><%= @map ? "MAPPERS" : @topic ? "CREATORS" : "" %></h3>
|
||||||
<span class="hideAll hideAllMappers">NONE</span>
|
<span class="hideAll hideAllMappers">NONE</span>
|
||||||
<span class="showAll showAllMappers">ALL</span>
|
<span class="active showAll showAllMappers">ALL</span>
|
||||||
<div class="clearfloat"></div>
|
<div class="clearfloat"></div>
|
||||||
<ul>
|
<ul>
|
||||||
<%= @mapperlist.html_safe %>
|
<%= @mapperlist.html_safe %>
|
||||||
|
@ -102,7 +102,7 @@
|
||||||
<div id="filter_by_metacode" class="filterBySection">
|
<div id="filter_by_metacode" class="filterBySection">
|
||||||
<h3>METACODES</h3>
|
<h3>METACODES</h3>
|
||||||
<span class="hideAll hideAllMetacodes">NONE</span>
|
<span class="hideAll hideAllMetacodes">NONE</span>
|
||||||
<span class="showAll showAllMetacodes">ALL</span>
|
<span class="active showAll showAllMetacodes">ALL</span>
|
||||||
<div class="clearfloat"></div>
|
<div class="clearfloat"></div>
|
||||||
<ul>
|
<ul>
|
||||||
<%= @metacodelist.html_safe %>
|
<%= @metacodelist.html_safe %>
|
||||||
|
@ -113,7 +113,7 @@
|
||||||
<div id="filter_by_synapse" class="filterBySection">
|
<div id="filter_by_synapse" class="filterBySection">
|
||||||
<h3>SYNAPSES</h3>
|
<h3>SYNAPSES</h3>
|
||||||
<span class="hideAll hideAllSynapses">NONE</span>
|
<span class="hideAll hideAllSynapses">NONE</span>
|
||||||
<span class="showAll showAllSynapses">ALL</span>
|
<span class="active showAll showAllSynapses">ALL</span>
|
||||||
<div class="clearfloat"></div>
|
<div class="clearfloat"></div>
|
||||||
<ul>
|
<ul>
|
||||||
<%= @synapselist.html_safe %>
|
<%= @synapselist.html_safe %>
|
||||||
|
|
4
config/initializers/access_codes.rb
Normal file
4
config/initializers/access_codes.rb
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
$codes = []
|
||||||
|
if ActiveRecord::Base.connection.table_exists? 'users'
|
||||||
|
$codes = ActiveRecord::Base.connection.execute("SELECT code FROM users").map {|user| user["code"] }
|
||||||
|
end
|
5
db/migrate/20141121204712_add_generation_to_users.rb
Normal file
5
db/migrate/20141121204712_add_generation_to_users.rb
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
class AddGenerationToUsers < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :users, :generation, :integer
|
||||||
|
end
|
||||||
|
end
|
269
db/schema.rb
269
db/schema.rb
|
@ -1,134 +1,135 @@
|
||||||
# encoding: UTF-8
|
# encoding: UTF-8
|
||||||
# This file is auto-generated from the current state of the database. Instead
|
# This file is auto-generated from the current state of the database. Instead
|
||||||
# of editing this file, please use the migrations feature of Active Record to
|
# of editing this file, please use the migrations feature of Active Record to
|
||||||
# incrementally modify your database, and then regenerate this schema definition.
|
# incrementally modify your database, and then regenerate this schema definition.
|
||||||
#
|
#
|
||||||
# Note that this schema.rb definition is the authoritative source for your
|
# Note that this schema.rb definition is the authoritative source for your
|
||||||
# database schema. If you need to create the application database on another
|
# database schema. If you need to create the application database on another
|
||||||
# system, you should be using db:schema:load, not running all the migrations
|
# system, you should be using db:schema:load, not running all the migrations
|
||||||
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
||||||
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
||||||
#
|
#
|
||||||
# It's strongly recommended to check this file into your version control system.
|
# It's strongly recommended to check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(:version => 20140930013020) do
|
ActiveRecord::Schema.define(:version => 20141121204712) do
|
||||||
|
|
||||||
create_table "in_metacode_sets", :force => true do |t|
|
create_table "in_metacode_sets", :force => true do |t|
|
||||||
t.integer "metacode_id"
|
t.integer "metacode_id"
|
||||||
t.integer "metacode_set_id"
|
t.integer "metacode_set_id"
|
||||||
t.datetime "created_at", :null => false
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "in_metacode_sets", ["metacode_id"], :name => "index_in_metacode_sets_on_metacode_id"
|
add_index "in_metacode_sets", ["metacode_id"], :name => "index_in_metacode_sets_on_metacode_id"
|
||||||
add_index "in_metacode_sets", ["metacode_set_id"], :name => "index_in_metacode_sets_on_metacode_set_id"
|
add_index "in_metacode_sets", ["metacode_set_id"], :name => "index_in_metacode_sets_on_metacode_set_id"
|
||||||
|
|
||||||
create_table "mappings", :force => true do |t|
|
create_table "mappings", :force => true do |t|
|
||||||
t.text "category"
|
t.text "category"
|
||||||
t.integer "xloc"
|
t.integer "xloc"
|
||||||
t.integer "yloc"
|
t.integer "yloc"
|
||||||
t.integer "topic_id"
|
t.integer "topic_id"
|
||||||
t.integer "synapse_id"
|
t.integer "synapse_id"
|
||||||
t.integer "map_id"
|
t.integer "map_id"
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
t.datetime "created_at", :null => false
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "maps", :force => true do |t|
|
create_table "maps", :force => true do |t|
|
||||||
t.text "name"
|
t.text "name"
|
||||||
t.boolean "arranged"
|
t.boolean "arranged"
|
||||||
t.text "desc"
|
t.text "desc"
|
||||||
t.text "permission"
|
t.text "permission"
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
t.datetime "created_at", :null => false
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
t.boolean "featured"
|
t.boolean "featured"
|
||||||
t.string "screenshot_file_name"
|
t.string "screenshot_file_name"
|
||||||
t.string "screenshot_content_type"
|
t.string "screenshot_content_type"
|
||||||
t.integer "screenshot_file_size"
|
t.integer "screenshot_file_size"
|
||||||
t.datetime "screenshot_updated_at"
|
t.datetime "screenshot_updated_at"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "metacode_sets", :force => true do |t|
|
create_table "metacode_sets", :force => true do |t|
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.text "desc"
|
t.text "desc"
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
t.boolean "mapperContributed"
|
t.boolean "mapperContributed"
|
||||||
t.datetime "created_at", :null => false
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "metacode_sets", ["user_id"], :name => "index_metacode_sets_on_user_id"
|
add_index "metacode_sets", ["user_id"], :name => "index_metacode_sets_on_user_id"
|
||||||
|
|
||||||
create_table "metacodes", :force => true do |t|
|
create_table "metacodes", :force => true do |t|
|
||||||
t.text "name"
|
t.text "name"
|
||||||
t.string "icon"
|
t.string "icon"
|
||||||
t.datetime "created_at", :null => false
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
t.string "color"
|
t.string "color"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "synapses", :force => true do |t|
|
create_table "synapses", :force => true do |t|
|
||||||
t.text "desc"
|
t.text "desc"
|
||||||
t.text "category"
|
t.text "category"
|
||||||
t.text "weight"
|
t.text "weight"
|
||||||
t.text "permission"
|
t.text "permission"
|
||||||
t.integer "node1_id"
|
t.integer "node1_id"
|
||||||
t.integer "node2_id"
|
t.integer "node2_id"
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
t.datetime "created_at", :null => false
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "topics", :force => true do |t|
|
create_table "topics", :force => true do |t|
|
||||||
t.text "name"
|
t.text "name"
|
||||||
t.text "desc"
|
t.text "desc"
|
||||||
t.text "link"
|
t.text "link"
|
||||||
t.text "permission"
|
t.text "permission"
|
||||||
t.integer "user_id"
|
t.integer "user_id"
|
||||||
t.integer "metacode_id"
|
t.integer "metacode_id"
|
||||||
t.datetime "created_at", :null => false
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
t.string "image_file_name"
|
t.string "image_file_name"
|
||||||
t.string "image_content_type"
|
t.string "image_content_type"
|
||||||
t.integer "image_file_size"
|
t.integer "image_file_size"
|
||||||
t.datetime "image_updated_at"
|
t.datetime "image_updated_at"
|
||||||
t.string "audio_file_name"
|
t.string "audio_file_name"
|
||||||
t.string "audio_content_type"
|
t.string "audio_content_type"
|
||||||
t.integer "audio_file_size"
|
t.integer "audio_file_size"
|
||||||
t.datetime "audio_updated_at"
|
t.datetime "audio_updated_at"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "users", :force => true do |t|
|
create_table "users", :force => true do |t|
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.string "email"
|
t.string "email"
|
||||||
t.text "settings"
|
t.text "settings"
|
||||||
t.string "code", :limit => 8
|
t.string "code", :limit => 8
|
||||||
t.string "joinedwithcode", :limit => 8
|
t.string "joinedwithcode", :limit => 8
|
||||||
t.string "crypted_password"
|
t.string "crypted_password"
|
||||||
t.string "password_salt"
|
t.string "password_salt"
|
||||||
t.string "persistence_token"
|
t.string "persistence_token"
|
||||||
t.string "perishable_token"
|
t.string "perishable_token"
|
||||||
t.datetime "created_at", :null => false
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
t.string "encrypted_password", :limit => 128, :default => ""
|
t.string "encrypted_password", :limit => 128, :default => ""
|
||||||
t.string "remember_token"
|
t.string "remember_token"
|
||||||
t.datetime "remember_created_at"
|
t.datetime "remember_created_at"
|
||||||
t.string "reset_password_token"
|
t.string "reset_password_token"
|
||||||
t.datetime "last_sign_in_at"
|
t.datetime "last_sign_in_at"
|
||||||
t.string "last_sign_in_ip"
|
t.string "last_sign_in_ip"
|
||||||
t.integer "sign_in_count", :default => 0
|
t.integer "sign_in_count", :default => 0
|
||||||
t.datetime "current_sign_in_at"
|
t.datetime "current_sign_in_at"
|
||||||
t.string "current_sign_in_ip"
|
t.string "current_sign_in_ip"
|
||||||
t.datetime "reset_password_sent_at"
|
t.datetime "reset_password_sent_at"
|
||||||
t.boolean "admin"
|
t.boolean "admin"
|
||||||
t.string "image_file_name"
|
t.string "image_file_name"
|
||||||
t.string "image_content_type"
|
t.string "image_content_type"
|
||||||
t.integer "image_file_size"
|
t.integer "image_file_size"
|
||||||
t.datetime "image_updated_at"
|
t.datetime "image_updated_at"
|
||||||
end
|
t.integer "generation"
|
||||||
|
end
|
||||||
add_index "users", ["reset_password_token"], :name => "index_users_on_reset_password_token", :unique => true
|
|
||||||
|
add_index "users", ["reset_password_token"], :name => "index_users_on_reset_password_token", :unique => true
|
||||||
end
|
|
||||||
|
end
|
||||||
|
|
2
test/fixtures/users.yml
vendored
2
test/fixtures/users.yml
vendored
|
@ -5,6 +5,7 @@ user:
|
||||||
email: user@user.com
|
email: user@user.com
|
||||||
encrypted_password: $2a$10$psR68SWYNy5ZKQPs9FrFM.HuRMrTXO/YFzv.HaUmdCsQZsQrG1XAW
|
encrypted_password: $2a$10$psR68SWYNy5ZKQPs9FrFM.HuRMrTXO/YFzv.HaUmdCsQZsQrG1XAW
|
||||||
code: qwertyui
|
code: qwertyui
|
||||||
|
joinedwithcode: qwertyui
|
||||||
admin: false
|
admin: false
|
||||||
|
|
||||||
admin:
|
admin:
|
||||||
|
@ -12,4 +13,5 @@ admin:
|
||||||
email: admin@admin.com
|
email: admin@admin.com
|
||||||
encrypted_password: $2a$10$psR68SWYNy5ZKQPs9FrFM.HuRMrTXO/YFzv.HaUmdCsQZsQrG1XAW
|
encrypted_password: $2a$10$psR68SWYNy5ZKQPs9FrFM.HuRMrTXO/YFzv.HaUmdCsQZsQrG1XAW
|
||||||
code: iuytrewq
|
code: iuytrewq
|
||||||
|
joinedwithcode: iuytrewq
|
||||||
admin: true
|
admin: true
|
||||||
|
|
Loading…
Reference in a new issue