merge
This commit is contained in:
commit
5c813beafe
66 changed files with 3102 additions and 1695 deletions
7
.gitignore
vendored
7
.gitignore
vendored
|
@ -4,10 +4,14 @@
|
|||
# or operating system, you probably want to add a global ignore instead:
|
||||
# git config --global core.excludesfile ~/.gitignore_global
|
||||
|
||||
#assety stuff
|
||||
realtime/node_modules
|
||||
public/assets
|
||||
|
||||
#secrets
|
||||
config/database.yml
|
||||
config/secrets.yml
|
||||
.env
|
||||
#public/assets
|
||||
|
||||
# Ignore bundler config
|
||||
.bundle
|
||||
|
@ -20,5 +24,4 @@ log/*.log
|
|||
tmp
|
||||
|
||||
.DS_Store
|
||||
|
||||
.vagrant
|
||||
|
|
40
Gemfile
40
Gemfile
|
@ -1,15 +1,12 @@
|
|||
source 'https://rubygems.org'
|
||||
ruby '2.1.3'
|
||||
|
||||
gem 'rails', '3.2.17'
|
||||
|
||||
# Bundle edge Rails instead:
|
||||
# gem 'rails', :git => 'git://github.com/rails/rails.git'
|
||||
gem 'rails', '4.2.4'
|
||||
|
||||
gem 'devise'
|
||||
gem 'redis'
|
||||
gem 'pg'
|
||||
gem 'cancan'
|
||||
gem 'cancancan'
|
||||
gem 'formula'
|
||||
gem 'formtastic'
|
||||
gem 'json'
|
||||
|
@ -22,6 +19,10 @@ gem 'dotenv'
|
|||
gem 'paperclip'
|
||||
gem 'aws-sdk'
|
||||
|
||||
gem 'jquery-rails'
|
||||
gem 'jquery-ui-rails'
|
||||
gem 'jbuilder'
|
||||
|
||||
#gem 'therubyracer' #optional
|
||||
#gem 'rb-readline'
|
||||
|
||||
|
@ -29,12 +30,12 @@ gem 'aws-sdk'
|
|||
# in production environments by default.
|
||||
group :assets do
|
||||
gem 'sass-rails'
|
||||
gem 'coffee-rails', '~> 3.2.1'
|
||||
gem 'coffee-rails'
|
||||
|
||||
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
|
||||
# gem 'therubyracer'
|
||||
|
||||
gem 'uglifier', '>= 1.0.3'
|
||||
gem 'uglifier'
|
||||
end
|
||||
|
||||
group :test do
|
||||
|
@ -44,22 +45,13 @@ end
|
|||
|
||||
group :production do #this is used on heroku
|
||||
#gem 'rmagick'
|
||||
gem 'rails_12factor'
|
||||
end
|
||||
|
||||
gem 'jquery-rails', '2.1.2'
|
||||
|
||||
# To use ActiveModel has_secure_password
|
||||
# gem 'bcrypt-ruby', '~> 3.0.0'
|
||||
|
||||
# To use Jbuilder templates for JSON
|
||||
gem 'jbuilder', '0.8.2'
|
||||
|
||||
# Use unicorn as the web server
|
||||
# gem 'unicorn'
|
||||
|
||||
# Deploy with Capistrano
|
||||
# gem 'capistrano'
|
||||
|
||||
# To use debugger
|
||||
# gem 'ruby-debug19', :require => 'ruby-debug'
|
||||
|
||||
group :development, :test do
|
||||
gem 'pry-rails'
|
||||
gem 'pry-byebug'
|
||||
gem 'better_errors'
|
||||
gem 'binding_of_caller'
|
||||
gem 'quiet_assets'
|
||||
end
|
||||
|
|
File diff suppressed because one or more lines are too long
2451
app/assets/javascripts/lib/typeahead.bundle.js
Normal file
2451
app/assets/javascripts/lib/typeahead.bundle.js
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -3127,7 +3127,7 @@ var Canvas;
|
|||
ctx = base.getCtx(),
|
||||
scale = base.scaleOffsetX;
|
||||
//var pattern = new Image();
|
||||
//pattern.src = "/assets/cubes.png";
|
||||
//pattern.src = "<%= asset_path('cubes.png') %>";
|
||||
//var ptrn = ctx.createPattern(pattern, 'repeat');
|
||||
//ctx.fillStyle = ptrn;
|
||||
ctx.fillStyle = Metamaps.Settings.colors.background;
|
|
@ -495,7 +495,7 @@ Metamaps.GlobalUI.Search = {
|
|||
dataset.push({
|
||||
value: "No results",
|
||||
label: "No results",
|
||||
typeImageURL: "/assets/icons/wildcard.png",
|
||||
typeImageURL: "<%= asset_path('icons/wildcard.png') %>",
|
||||
rtype: "noresult"
|
||||
});
|
||||
}
|
||||
|
@ -549,7 +549,7 @@ Metamaps.GlobalUI.Search = {
|
|||
filter: function (dataset) {
|
||||
if (dataset.length == 0) {
|
||||
dataset.push({
|
||||
profile: "/assets/user.png",
|
||||
profile: "<%= asset_path('user.png') %>",
|
||||
|
||||
value: "No results",
|
||||
label: "No results",
|
||||
|
@ -616,7 +616,7 @@ Metamaps.GlobalUI.Search = {
|
|||
var self = Metamaps.GlobalUI.Search;
|
||||
|
||||
function toggleResultSet(set) {
|
||||
var s = $('.tt-dataset-' + set + ' .tt-suggestions');
|
||||
var s = $('.tt-dataset-' + set + ' .tt-dataset');
|
||||
if (s.css('height') == '0px') {
|
||||
s.css({
|
||||
'height': 'auto',
|
|
@ -29,10 +29,10 @@ Metamaps.JIT = {
|
|||
$(".takeScreenshot").click(Metamaps.Map.exportImage);
|
||||
|
||||
self.topicDescImage = new Image();
|
||||
self.topicDescImage.src = '/assets/topic_description_signifier.png';
|
||||
self.topicDescImage.src = '<%= asset_path('topic_description_signifier.png') %>';
|
||||
|
||||
self.topicLinkImage = new Image();
|
||||
self.topicLinkImage.src = '/assets/topic_link_signifier.png';
|
||||
self.topicLinkImage.src = '<%= asset_path('topic_link_signifier.png') %>';
|
||||
},
|
||||
/**
|
||||
* convert our topic JSON into something JIT can use
|
|
@ -37,7 +37,7 @@ Metamaps.Settings = {
|
|||
background: '#18202E',
|
||||
text: '#DDD'
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
Metamaps.Touch = {
|
||||
|
@ -157,7 +157,7 @@ Metamaps.Backbone.init = function () {
|
|||
this.on('saved', this.savedEvent);
|
||||
this.on('nowPrivate', function(){
|
||||
var removeTopicData = {
|
||||
topicid: this.id
|
||||
mappableid: this.id
|
||||
};
|
||||
|
||||
$(document).trigger(Metamaps.JIT.events.removeTopic, [removeTopicData]);
|
||||
|
@ -165,7 +165,7 @@ Metamaps.Backbone.init = function () {
|
|||
this.on('noLongerPrivate', function(){
|
||||
var newTopicData = {
|
||||
mappingid: this.getMapping().id,
|
||||
topicid: this.id
|
||||
mappableid: this.id
|
||||
};
|
||||
|
||||
$(document).trigger(Metamaps.JIT.events.newTopic, [newTopicData]);
|
||||
|
@ -194,7 +194,8 @@ Metamaps.Backbone.init = function () {
|
|||
|
||||
return Metamaps.Mappings.findWhere({
|
||||
map_id: Metamaps.Active.Map.id,
|
||||
topic_id: this.isNew() ? this.cid : this.id
|
||||
mappable_type: "Topic",
|
||||
mappable_id: this.isNew() ? this.cid : this.id
|
||||
});
|
||||
},
|
||||
createNode: function () {
|
||||
|
@ -320,14 +321,14 @@ Metamaps.Backbone.init = function () {
|
|||
this.on('noLongerPrivate', function(){
|
||||
var newSynapseData = {
|
||||
mappingid: this.getMapping().id,
|
||||
synapseid: this.id
|
||||
mappableid: this.id
|
||||
};
|
||||
|
||||
$(document).trigger(Metamaps.JIT.events.newSynapse, [newSynapseData]);
|
||||
});
|
||||
this.on('nowPrivate', function(){
|
||||
$(document).trigger(Metamaps.JIT.events.removeSynapse, [{
|
||||
synapseid: this.id
|
||||
mappableid: this.id
|
||||
}]);
|
||||
});
|
||||
|
||||
|
@ -336,7 +337,7 @@ Metamaps.Backbone.init = function () {
|
|||
prepareLiForFilter: function () {
|
||||
var li = '';
|
||||
li += '<li data-id="' + this.get('desc') + '">';
|
||||
li += '<img src="/assets/synapse16.png"';
|
||||
li += '<img src="<%= asset_path('synapse16.png') %>"';
|
||||
li += ' alt="synapse icon" />';
|
||||
li += '<p>' + this.get('desc') + '</p></li>';
|
||||
return li;
|
||||
|
@ -370,7 +371,8 @@ Metamaps.Backbone.init = function () {
|
|||
|
||||
return Metamaps.Mappings.findWhere({
|
||||
map_id: Metamaps.Active.Map.id,
|
||||
synapse_id: this.isNew() ? this.cid : this.id
|
||||
mappable_type: "Synapse",
|
||||
mappable_id: this.isNew() ? this.cid : this.id
|
||||
});
|
||||
},
|
||||
createEdge: function () {
|
||||
|
@ -457,11 +459,11 @@ Metamaps.Backbone.init = function () {
|
|||
return Metamaps.Map.get(this.get('map_id'));
|
||||
},
|
||||
getTopic: function () {
|
||||
if (this.get('category') === 'Topic') return Metamaps.Topic.get(this.get('topic_id'));
|
||||
if (this.get('mappable_type') === 'Topic') return Metamaps.Topic.get(this.get('mappable_id'));
|
||||
else return false;
|
||||
},
|
||||
getSynapse: function () {
|
||||
if (this.get('category') === 'Synapse') return Metamaps.Synapse.get(this.get('synapse_id'));
|
||||
if (this.get('mappable_type') === 'Synapse') return Metamaps.Synapse.get(this.get('mappable_id'));
|
||||
else return false;
|
||||
}
|
||||
});
|
||||
|
@ -664,24 +666,36 @@ Metamaps.Create = {
|
|||
Metamaps.Create.newTopic.name = $(this).val();
|
||||
});
|
||||
|
||||
var topicBloodhound = new Bloodhound({
|
||||
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
|
||||
queryTokenizer: Bloodhound.tokenizers.whitespace,
|
||||
remote: {
|
||||
url: '/topics/autocomplete_topic?term=%QUERY',
|
||||
wildcard: '%QUERY',
|
||||
},
|
||||
});
|
||||
|
||||
// initialize the autocomplete results for the metacode spinner
|
||||
$('#topic_name').typeahead(
|
||||
{
|
||||
highlight: true,
|
||||
minLength: 2,
|
||||
},
|
||||
[{
|
||||
name: 'topic_autocomplete',
|
||||
limit: 8,
|
||||
template: $('#topicAutocompleteTemplate').html(),
|
||||
remote: {
|
||||
url: '/topics/autocomplete_topic?term=%QUERY'
|
||||
display: function (s) { return s.label; },
|
||||
templates: {
|
||||
suggestion: function(s) {
|
||||
return Hogan.compile($('#topicAutocompleteTemplate').html()).render(s);
|
||||
},
|
||||
},
|
||||
engine: Hogan
|
||||
source: topicBloodhound,
|
||||
}]
|
||||
);
|
||||
|
||||
// tell the autocomplete to submit the form with the topic you clicked on if you pick from the autocomplete
|
||||
$('#topic_name').bind('typeahead:selected', function (event, datum, dataset) {
|
||||
$('#topic_name').bind('typeahead:select', function (event, datum, dataset) {
|
||||
Metamaps.Topic.getTopicFromAutocomplete(datum.id);
|
||||
});
|
||||
|
||||
|
@ -714,7 +728,7 @@ Metamaps.Create = {
|
|||
},
|
||||
hide: function () {
|
||||
$('#new_topic').fadeOut('fast');
|
||||
$("#topic_name").typeahead('setQuery', '');
|
||||
$("#topic_name").typeahead('val', '');
|
||||
Metamaps.Create.newTopic.beingCreated = false;
|
||||
}
|
||||
},
|
||||
|
@ -726,35 +740,62 @@ Metamaps.Create = {
|
|||
Metamaps.Create.newSynapse.description = $(this).val();
|
||||
});
|
||||
|
||||
var synapseBloodhound = new Bloodhound({
|
||||
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
|
||||
queryTokenizer: Bloodhound.tokenizers.whitespace,
|
||||
remote: {
|
||||
url: '/search/synapses?term=%QUERY',
|
||||
wildcard: '%QUERY',
|
||||
},
|
||||
});
|
||||
var existingSynapseBloodhound = new Bloodhound({
|
||||
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
|
||||
queryTokenizer: Bloodhound.tokenizers.whitespace,
|
||||
remote: {
|
||||
url: '/search/synapses?topic1id=%TOPIC1&topic2id=%TOPIC2',
|
||||
prepare: function(query, settings) {
|
||||
var self = Metamaps.Create.newSynapse;
|
||||
if (Metamaps.Selected.Nodes.length < 2) {
|
||||
settings.url = settings.url.replace("%TOPIC1", self.topic1id).replace("%TOPIC2", self.topic2id);
|
||||
return settings;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
// initialize the autocomplete results for synapse creation
|
||||
$('#synapse_desc').typeahead(
|
||||
{
|
||||
highlight: true,
|
||||
minLength: 2,
|
||||
},
|
||||
[{
|
||||
name: 'synapse_autocomplete',
|
||||
template: "<div class='genericSynapseDesc'>{{label}}</div>",
|
||||
remote: {
|
||||
url: '/search/synapses?term=%QUERY'
|
||||
display: function(s) { return s.label; },
|
||||
templates: {
|
||||
suggestion: function(s) {
|
||||
return Hogan.compile("<div class='genericSynapseDesc'>{{label}}</div>").render(s);
|
||||
},
|
||||
},
|
||||
engine: Hogan
|
||||
source: synapseBloodhound,
|
||||
},
|
||||
{
|
||||
name: 'existing_synapses',
|
||||
limit: 50,
|
||||
template: $('#synapseAutocompleteTemplate').html(),
|
||||
remote: {
|
||||
url: '/search/synapses',
|
||||
replace: function () {
|
||||
return self.getSearchQuery();
|
||||
}
|
||||
display: function(s) { return s.label; },
|
||||
templates: {
|
||||
suggestion: function(s) {
|
||||
return Hogan.compile($('#synapseAutocompleteTemplate').html()).render(s);
|
||||
},
|
||||
header: "<h3>Existing synapses</h3>"
|
||||
},
|
||||
engine: Hogan,
|
||||
header: "<h3>Existing synapses</h3>"
|
||||
source: existingSynapseBloodhound,
|
||||
}]
|
||||
);
|
||||
|
||||
$('#synapse_desc').bind('typeahead:selected', function (event, datum, dataset) {
|
||||
$('#synapse_desc').bind('typeahead:select', function (event, datum, dataset) {
|
||||
if (datum.id) { // if they clicked on an existing synapse get it
|
||||
Metamaps.Synapse.getSynapseFromAutocomplete(datum.id);
|
||||
}
|
||||
|
@ -777,7 +818,7 @@ Metamaps.Create = {
|
|||
},
|
||||
hide: function () {
|
||||
$('#new_synapse').fadeOut('fast');
|
||||
$("#synapse_desc").typeahead('setQuery', '');
|
||||
$("#synapse_desc").typeahead('val', '');
|
||||
Metamaps.Create.newSynapse.beingCreated = false;
|
||||
Metamaps.Create.newTopic.addSynapse = false;
|
||||
Metamaps.Create.newSynapse.topic1id = 0;
|
||||
|
@ -785,13 +826,6 @@ Metamaps.Create = {
|
|||
Metamaps.Mouse.synapseStartCoordinates = [];
|
||||
Metamaps.Visualize.mGraph.plot();
|
||||
},
|
||||
getSearchQuery: function () {
|
||||
var self = Metamaps.Create.newSynapse;
|
||||
|
||||
if (Metamaps.Selected.Nodes.length < 2) {
|
||||
return '/search/synapses?topic1id=' + self.topic1id + '&topic2id=' + self.topic2id;
|
||||
} else return '';
|
||||
}
|
||||
}
|
||||
}; // end Metamaps.Create
|
||||
|
||||
|
@ -1534,8 +1568,6 @@ Metamaps.SynapseCard = {
|
|||
////////////////////// END TOPIC AND SYNAPSE CARDS //////////////////////////////////
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
*
|
||||
* VISUALIZE
|
||||
|
@ -2511,7 +2543,7 @@ Metamaps.Realtime = {
|
|||
|
||||
if (!self.status) return;
|
||||
|
||||
function test() {
|
||||
function waitThenRenderTopic() {
|
||||
if (topic && mapping && mapper) {
|
||||
Metamaps.Topic.renderTopic(mapping, topic, false, false);
|
||||
}
|
||||
|
@ -2529,7 +2561,7 @@ Metamaps.Realtime = {
|
|||
Metamaps.Mapper.get(data.mapperid, mapperCallback);
|
||||
}
|
||||
$.ajax({
|
||||
url: "/topics/" + data.topicid + ".json",
|
||||
url: "/topics/" + data.mappableid + ".json",
|
||||
success: function (response) {
|
||||
Metamaps.Topics.add(response);
|
||||
topic = Metamaps.Topics.get(response.id);
|
||||
|
@ -2549,7 +2581,7 @@ Metamaps.Realtime = {
|
|||
}
|
||||
});
|
||||
|
||||
test();
|
||||
waitThenRenderTopic();
|
||||
},
|
||||
// removeTopic
|
||||
sendDeleteTopic: function (data) {
|
||||
|
@ -2576,7 +2608,7 @@ Metamaps.Realtime = {
|
|||
|
||||
if (!self.status) return;
|
||||
|
||||
var topic = Metamaps.Topics.get(data.topicid);
|
||||
var topic = Metamaps.Topics.get(data.mappableid);
|
||||
if (topic) {
|
||||
var node = topic.get('node');
|
||||
var mapping = topic.getMapping();
|
||||
|
@ -2604,7 +2636,7 @@ Metamaps.Realtime = {
|
|||
|
||||
if (!self.status) return;
|
||||
|
||||
function test() {
|
||||
function waitThenRenderSynapse() {
|
||||
if (synapse && mapping && mapper) {
|
||||
topic1 = synapse.getTopic1();
|
||||
node1 = topic1.get('node');
|
||||
|
@ -2627,7 +2659,7 @@ Metamaps.Realtime = {
|
|||
Metamaps.Mapper.get(data.mapperid, mapperCallback);
|
||||
}
|
||||
$.ajax({
|
||||
url: "/synapses/" + data.synapseid + ".json",
|
||||
url: "/synapses/" + data.mappableid + ".json",
|
||||
success: function (response) {
|
||||
Metamaps.Synapses.add(response);
|
||||
synapse = Metamaps.Synapses.get(response.id);
|
||||
|
@ -2646,7 +2678,7 @@ Metamaps.Realtime = {
|
|||
cancel = true;
|
||||
}
|
||||
});
|
||||
test();
|
||||
waitThenRenderSynapse();
|
||||
},
|
||||
// deleteSynapse
|
||||
sendDeleteSynapse: function (data) {
|
||||
|
@ -2674,7 +2706,7 @@ Metamaps.Realtime = {
|
|||
|
||||
if (!self.status) return;
|
||||
|
||||
var synapse = Metamaps.Synapses.get(data.synapseid);
|
||||
var synapse = Metamaps.Synapses.get(data.mappableid);
|
||||
if (synapse) {
|
||||
var edge = synapse.get('edge');
|
||||
var mapping = synapse.getMapping();
|
||||
|
@ -2784,12 +2816,12 @@ Metamaps.Control = {
|
|||
|
||||
var permToDelete = Metamaps.Active.Mapper.id === topic.get('user_id') || Metamaps.Active.Mapper.get('admin');
|
||||
if (permToDelete) {
|
||||
var topicid = topic.id;
|
||||
var mappableid = topic.id;
|
||||
var mapping = node.getData('mapping');
|
||||
topic.destroy();
|
||||
Metamaps.Mappings.remove(mapping);
|
||||
$(document).trigger(Metamaps.JIT.events.deleteTopic, [{
|
||||
topicid: topicid
|
||||
mappableid: mappableid
|
||||
}]);
|
||||
Metamaps.Control.hideNode(nodeid);
|
||||
} else {
|
||||
|
@ -2828,12 +2860,12 @@ Metamaps.Control = {
|
|||
}
|
||||
|
||||
var topic = node.getData('topic');
|
||||
var topicid = topic.id;
|
||||
var mappableid = topic.id;
|
||||
var mapping = node.getData('mapping');
|
||||
mapping.destroy();
|
||||
Metamaps.Topics.remove(topic);
|
||||
$(document).trigger(Metamaps.JIT.events.removeTopic, [{
|
||||
topicid: topicid
|
||||
mappableid: mappableid
|
||||
}]);
|
||||
Metamaps.Control.hideNode(nodeid);
|
||||
},
|
||||
|
@ -2957,7 +2989,7 @@ Metamaps.Control = {
|
|||
Metamaps.Control.hideEdge(edge);
|
||||
}
|
||||
|
||||
var synapseid = synapse.id;
|
||||
var mappableid = synapse.id;
|
||||
synapse.destroy();
|
||||
|
||||
// the server will destroy the mapping, we just need to remove it here
|
||||
|
@ -2968,7 +3000,7 @@ Metamaps.Control = {
|
|||
delete edge.data.$displayIndex;
|
||||
}
|
||||
$(document).trigger(Metamaps.JIT.events.deleteSynapse, [{
|
||||
synapseid: synapseid
|
||||
mappableid: mappableid
|
||||
}]);
|
||||
} else {
|
||||
Metamaps.GlobalUI.notifyUser('Only synapses you created can be deleted');
|
||||
|
@ -3013,7 +3045,7 @@ Metamaps.Control = {
|
|||
|
||||
var synapse = edge.getData("synapses")[index];
|
||||
var mapping = edge.getData("mappings")[index];
|
||||
var synapseid = synapse.id;
|
||||
var mappableid = synapse.id;
|
||||
mapping.destroy();
|
||||
|
||||
Metamaps.Synapses.remove(synapse);
|
||||
|
@ -3024,7 +3056,7 @@ Metamaps.Control = {
|
|||
delete edge.data.$displayIndex;
|
||||
}
|
||||
$(document).trigger(Metamaps.JIT.events.removeSynapse, [{
|
||||
synapseid: synapseid
|
||||
mappableid: mappableid
|
||||
}]);
|
||||
},
|
||||
hideSelectedEdges: function () {
|
||||
|
@ -4024,14 +4056,14 @@ Metamaps.Topic = {
|
|||
var mappingSuccessCallback = function (mappingModel, response) {
|
||||
var newTopicData = {
|
||||
mappingid: mappingModel.id,
|
||||
topicid: mappingModel.get('topic_id')
|
||||
mappableid: mappingModel.get('mappable_id')
|
||||
};
|
||||
|
||||
$(document).trigger(Metamaps.JIT.events.newTopic, [newTopicData]);
|
||||
};
|
||||
var topicSuccessCallback = function (topicModel, response) {
|
||||
if (Metamaps.Active.Map) {
|
||||
mapping.save({ topic_id: topicModel.id }, {
|
||||
mapping.save({ mappable_id: topicModel.id }, {
|
||||
success: mappingSuccessCallback,
|
||||
error: function (model, response) {
|
||||
console.log('error saving mapping to database');
|
||||
|
@ -4081,10 +4113,10 @@ Metamaps.Topic = {
|
|||
Metamaps.Topics.add(topic);
|
||||
|
||||
var mapping = new Metamaps.Backbone.Mapping({
|
||||
category: "Topic",
|
||||
xloc: Metamaps.Create.newTopic.x,
|
||||
yloc: Metamaps.Create.newTopic.y,
|
||||
topic_id: topic.cid
|
||||
mappable_id: topic.cid,
|
||||
mappable_type: "Topic",
|
||||
});
|
||||
Metamaps.Mappings.add(mapping);
|
||||
|
||||
|
@ -4103,10 +4135,10 @@ Metamaps.Topic = {
|
|||
var topic = self.get(id);
|
||||
|
||||
var mapping = new Metamaps.Backbone.Mapping({
|
||||
category: "Topic",
|
||||
xloc: Metamaps.Create.newTopic.x,
|
||||
yloc: Metamaps.Create.newTopic.y,
|
||||
topic_id: topic.id
|
||||
mappable_type: "Topic",
|
||||
mappable_id: topic.id,
|
||||
});
|
||||
Metamaps.Mappings.add(mapping);
|
||||
|
||||
|
@ -4121,10 +4153,10 @@ Metamaps.Topic = {
|
|||
|
||||
var nextCoords = Metamaps.Map.getNextCoord();
|
||||
var mapping = new Metamaps.Backbone.Mapping({
|
||||
category: "Topic",
|
||||
xloc: nextCoords.x,
|
||||
yloc: nextCoords.y,
|
||||
topic_id: topic.id
|
||||
mappable_type: "Topic",
|
||||
mappable_id: topic.id,
|
||||
});
|
||||
Metamaps.Mappings.add(mapping);
|
||||
|
||||
|
@ -4195,14 +4227,14 @@ Metamaps.Synapse = {
|
|||
var mappingSuccessCallback = function (mappingModel, response) {
|
||||
var newSynapseData = {
|
||||
mappingid: mappingModel.id,
|
||||
synapseid: mappingModel.get('synapse_id')
|
||||
mappableid: mappingModel.get('mappable_id')
|
||||
};
|
||||
|
||||
$(document).trigger(Metamaps.JIT.events.newSynapse, [newSynapseData]);
|
||||
};
|
||||
var synapseSuccessCallback = function (synapseModel, response) {
|
||||
if (Metamaps.Active.Map) {
|
||||
mapping.save({ synapse_id: synapseModel.id }, {
|
||||
mapping.save({ mappable_id: synapseModel.id }, {
|
||||
success: mappingSuccessCallback
|
||||
});
|
||||
}
|
||||
|
@ -4252,15 +4284,15 @@ Metamaps.Synapse = {
|
|||
node1 = synapsesToCreate[i];
|
||||
topic1 = node1.getData('topic');
|
||||
synapse = new Metamaps.Backbone.Synapse({
|
||||
desc: Metamaps.Create.newSynapse.description,
|
||||
desc: Metamaps.Create.newSynapse.description,// || "",
|
||||
node1_id: topic1.isNew() ? topic1.cid : topic1.id,
|
||||
node2_id: topic2.isNew() ? topic2.cid : topic2.id,
|
||||
});
|
||||
Metamaps.Synapses.add(synapse);
|
||||
|
||||
mapping = new Metamaps.Backbone.Mapping({
|
||||
category: "Synapse",
|
||||
synapse_id: synapse.cid
|
||||
mappable_type: "Synapse",
|
||||
mappable_id: synapse.cid,
|
||||
});
|
||||
Metamaps.Mappings.add(mapping);
|
||||
|
||||
|
@ -4280,8 +4312,8 @@ Metamaps.Synapse = {
|
|||
var synapse = self.get(id);
|
||||
|
||||
var mapping = new Metamaps.Backbone.Mapping({
|
||||
category: "Synapse",
|
||||
synapse_id: synapse.id
|
||||
mappable_type: "Synapse",
|
||||
mappable_id: synapse.id,
|
||||
});
|
||||
Metamaps.Mappings.add(mapping);
|
||||
|
||||
|
@ -4761,7 +4793,7 @@ Metamaps.Map.InfoBox = {
|
|||
obj["map_creator_tip"] = isCreator ? self.changePermissionText : "";
|
||||
obj["contributors_class"] = Metamaps.Mappers.length > 1 ? "multiple" : "";
|
||||
obj["contributors_class"] += Metamaps.Mappers.length === 2 ? " mTwo" : "";
|
||||
obj["contributor_image"] = Metamaps.Mappers.length > 0 ? Metamaps.Mappers.models[0].get("image") : "/assets/user.png";
|
||||
obj["contributor_image"] = Metamaps.Mappers.length > 0 ? Metamaps.Mappers.models[0].get("image") : "<%= asset_path('user.png') %>";
|
||||
obj["contributor_list"] = self.createContributorList();
|
||||
obj["user_name"] = isCreator ? "You" : map.get("user_name");
|
||||
obj["created_at"] = map.get("created_at_clean");
|
||||
|
@ -4858,7 +4890,7 @@ Metamaps.Map.InfoBox = {
|
|||
if (Metamaps.Mappers.length === 2) contributors_class = "multiple mTwo";
|
||||
else if (Metamaps.Mappers.length > 2) contributors_class = "multiple";
|
||||
|
||||
var contributors_image = "/assets/user.png";
|
||||
var contributors_image = "<%= asset_path('user.png') %>";
|
||||
if (Metamaps.Mappers.length > 0) {
|
||||
// get the first contributor and use their image
|
||||
contributors_image = Metamaps.Mappers.models[0].get("image");
|
||||
|
@ -5039,7 +5071,7 @@ Metamaps.Account = {
|
|||
var self = Metamaps.Account;
|
||||
|
||||
$('.userImageDiv canvas').remove();
|
||||
$('.userImageDiv img').attr('src', '/assets/user.png').show();
|
||||
$('.userImageDiv img').attr('src', '<%= asset_path('user.png') %>').show();
|
||||
$('.userImageMenu').hide();
|
||||
|
||||
var input = $('#user_image');
|
|
@ -78,7 +78,7 @@ html {
|
|||
|
||||
}
|
||||
body {
|
||||
background: #d8d9da url(shattered_@2X.png);
|
||||
background: #d8d9da url(<%= asset_data_uri('shattered_@2X.png') %>);
|
||||
font-family: 'din-medium', helvetica, sans-serif;
|
||||
color: #424242;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
|
@ -300,7 +300,7 @@ input[type="submit"]:active {
|
|||
display: none;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
background-image: url(photo.png);
|
||||
background-image: url(<%= asset_data_uri('photo.png') %>);
|
||||
position: absolute;
|
||||
top: 22px;
|
||||
left: 22px;
|
||||
|
@ -413,7 +413,7 @@ input[type="submit"]:active {
|
|||
|
||||
}
|
||||
.accountName:hover .nameEdit:after {
|
||||
background:url(edit.png)no-repeat;
|
||||
background: url(<%= asset_data_uri('edit.png') %>) no-repeat;
|
||||
content:" ";
|
||||
position:absolute;
|
||||
width:25px;
|
||||
|
@ -547,7 +547,7 @@ input[type="submit"]:active {
|
|||
display: block;
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
background-image: url(metacodesettings_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('metacodesettings_sprite.png') %>);
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
top: 20px;
|
||||
|
@ -652,7 +652,7 @@ label {
|
|||
box-shadow: 6px 6px 8px rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
.headertop .tab {
|
||||
background: url(tab.png) no-repeat 0 0;
|
||||
background: url('tab.png') no-repeat 0 0;
|
||||
position: absolute;
|
||||
top: -11px;
|
||||
right: -2px;
|
||||
|
@ -719,7 +719,7 @@ label {
|
|||
.accountInnerArrow {
|
||||
width:16px;
|
||||
height:16px;
|
||||
background-image: url(arrowdown_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('arrowdown_sprite.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
position:absolute;
|
||||
top: 8px;
|
||||
|
@ -783,7 +783,7 @@ label {
|
|||
position:absolute;
|
||||
pointer-events:none;
|
||||
background-repeat:no-repeat;
|
||||
background-image: url(user_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('user_sprite.png') %>);
|
||||
}
|
||||
.accountSettings .accountIcon {
|
||||
background-position: 0 0;
|
||||
|
@ -813,7 +813,7 @@ li.accountInvite span {
|
|||
padding: 9px 0 9px 62px;
|
||||
}
|
||||
.accountImage {
|
||||
background-image: url(user.png);
|
||||
background-image: url(<%= asset_data_uri 'user.png' %>);
|
||||
background-size: 84px 84px;
|
||||
background-repeat: no-repeat;
|
||||
height:84px;
|
||||
|
@ -1145,7 +1145,7 @@ h3.realtimeBoxTitle {
|
|||
position: absolute;
|
||||
top: 4px;
|
||||
right: 0;
|
||||
background-image: url('junto24_sprite.png');
|
||||
background-image: url(<%= asset_data_uri('junto24_sprite.png') %>);
|
||||
}
|
||||
.realtimeMapperList .littleRtOff .littleJuntoIcon {
|
||||
background-position: 0 0;
|
||||
|
@ -1222,7 +1222,7 @@ h3.realtimeBoxTitle {
|
|||
position: absolute;
|
||||
top: 0;
|
||||
left: 4px;
|
||||
background-image: url(context_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('context_sprite.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
|
@ -1238,7 +1238,7 @@ h3.realtimeBoxTitle {
|
|||
}
|
||||
|
||||
.rightclickmenu .rc-center .rc-icon {
|
||||
background-image: url(context_topicview_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('context_topicview_sprite.png') %>);
|
||||
}
|
||||
.rightclickmenu .rc-popout .rc-icon {
|
||||
background-position: 0 -72px;
|
||||
|
@ -1251,7 +1251,7 @@ h3.realtimeBoxTitle {
|
|||
}
|
||||
.rightclickmenu .rc-siblings .rc-icon {
|
||||
background-position: 0 -24px;
|
||||
background-image: url(context_topicview_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('context_topicview_sprite.png') %>);
|
||||
}
|
||||
.rightclickmenu .expandLi {
|
||||
position: absolute;
|
||||
|
@ -1259,7 +1259,7 @@ h3.realtimeBoxTitle {
|
|||
right: 8px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background-image: url(arrowright_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('arrowright_sprite.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 -32px;
|
||||
}
|
||||
|
@ -1294,7 +1294,7 @@ h3.realtimeBoxTitle {
|
|||
position: absolute;
|
||||
top: 0;
|
||||
left: 4px;
|
||||
background-image: url(permissions32_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('permissions32_sprite.png') %>);
|
||||
background-size: 72px 48px;
|
||||
background-repeat: no-repeat;
|
||||
width: 24px;
|
||||
|
@ -1339,7 +1339,7 @@ h3.realtimeBoxTitle {
|
|||
right: 4px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background-image: url(arrowright_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('arrowright_sprite.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 -32px;
|
||||
}
|
||||
|
@ -1373,13 +1373,14 @@ h3.realtimeBoxTitle {
|
|||
|
||||
/* topic and synapse autocomplete */
|
||||
|
||||
#new_topic .tt-suggestion.tt-is-under-cursor,
|
||||
#new_topic .tt-suggestion.tt-is-under-mouse-cursor,
|
||||
#new_synapse .tt-suggestion.tt-is-under-cursor,
|
||||
#new_synapse .tt-suggestion.tt-is-under-mouse-cursor {
|
||||
#new_topic .tt-suggestion:hover,
|
||||
#new_topic .tt-suggestion.tt-cursor,
|
||||
#new_synapse .tt-suggestion:hover,
|
||||
#new_synapse .tt-suggestion.tt-cursor {
|
||||
background: #E0E0E0;
|
||||
}
|
||||
#new_topic .tt-suggestion,
|
||||
#new_synapse .tt-dataset h3,
|
||||
#new_synapse .tt-suggestion {
|
||||
background: #F5F5F5;
|
||||
position: relative;
|
||||
|
@ -1418,15 +1419,15 @@ h3.realtimeBoxTitle {
|
|||
top: 8px;
|
||||
right: 8px;
|
||||
background-repeat: no-repeat;
|
||||
background-image: url(arrowright_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('arrowright_sprite.png') %>);
|
||||
background-position: 0 -32px;
|
||||
}
|
||||
#new_topic .tt-suggestion.tt-is-under-cursor .expandTopicMetadata,
|
||||
#new_topic .tt-suggestion.tt-is-under-mouse-cursor .expandTopicMetadata {
|
||||
#new_topic .tt-suggestion:hover .expandTopicMetadata,
|
||||
#new_topic .tt-suggestion.tt-cursor .expandTopicMetadata {
|
||||
display: block;
|
||||
}
|
||||
#new_topic .tt-suggestion.tt-is-under-cursor .topicMetadata,
|
||||
#new_topic .tt-suggestion.tt-is-under-mouse-cursor .topicMetadata {
|
||||
#new_topic .tt-suggestion:hover .topicMetadata,
|
||||
#new_topic .tt-suggestion.tt-cursor .topicMetadata {
|
||||
display: block;
|
||||
}
|
||||
#new_topic .topicMetadata {
|
||||
|
@ -1444,7 +1445,7 @@ h3.realtimeBoxTitle {
|
|||
width: 32px;
|
||||
height: 32px;
|
||||
background-repeat: no-repeat;
|
||||
background-image: url(permissions32_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('permissions32_sprite.png') %>);
|
||||
position: absolute;
|
||||
bottom: 4px;
|
||||
right: 4px;
|
||||
|
@ -1464,7 +1465,7 @@ h3.realtimeBoxTitle {
|
|||
#new_topic .topicNumMaps {
|
||||
height: 14px;
|
||||
padding: 1px 0 1px 32px;
|
||||
background-image: url(metamap16.png);
|
||||
background-image: url(<%= asset_data_uri('metamap16.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 8px 0;
|
||||
position: absolute;
|
||||
|
@ -1473,7 +1474,7 @@ h3.realtimeBoxTitle {
|
|||
#new_topic .topicNumSynapses {
|
||||
height: 14px;
|
||||
padding: 1px 0 1px 32px;
|
||||
background-image: url(synapse16.png);
|
||||
background-image: url(<%= asset_data_uri('synapse16.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 8px 0;
|
||||
position: absolute;
|
||||
|
@ -1563,7 +1564,7 @@ h3.realtimeBoxTitle {
|
|||
width: 32px;
|
||||
height: 32px;
|
||||
background-repeat: no-repeat;
|
||||
background-image: url(permissions32_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('permissions32_sprite.png') %>);
|
||||
}
|
||||
/* map info box */
|
||||
/* map info box */
|
||||
|
@ -1603,7 +1604,7 @@ h3.realtimeBoxTitle {
|
|||
resize: none;
|
||||
}
|
||||
.mapInfoBox.canEdit #mapInfoName:hover {
|
||||
background-image: url(edit.png);
|
||||
background-image: url(<%= asset_data_uri('edit.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-position: bottom right;
|
||||
cursor: text;
|
||||
|
@ -1757,11 +1758,11 @@ h3.realtimeBoxTitle {
|
|||
}
|
||||
|
||||
.mapTopics {
|
||||
background-image: url(topic32.png);
|
||||
background-image: url(<%= asset_data_uri('topic32.png') %>);
|
||||
background-position: 13px center;
|
||||
}
|
||||
.mapSynapses {
|
||||
background-image: url(synapse32padded.png);
|
||||
background-image: url(<%= asset_data_uri('synapse32padded.png') %>);
|
||||
background-position: 13px center;
|
||||
}
|
||||
.mapInfoBox .mapPermission {
|
||||
|
@ -1771,7 +1772,7 @@ h3.realtimeBoxTitle {
|
|||
padding: 0;
|
||||
margin: 8px 30px 8px 10px;
|
||||
position: relative;
|
||||
background-image: url(permissions32_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('permissions32_sprite.png') %>);
|
||||
}
|
||||
.mapInfoBox .mapPermission.commons {
|
||||
background-position: 0 0;
|
||||
|
@ -1783,12 +1784,12 @@ h3.realtimeBoxTitle {
|
|||
background-position: -32px 0;
|
||||
}
|
||||
.yourMap .mapPermission:hover {
|
||||
background-image: url(arrowperms_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('arrowperms_sprite.png') %>);
|
||||
cursor: pointer;
|
||||
background-position: -32px 0;
|
||||
}
|
||||
.yourMap .mapPermission.minimize {
|
||||
background-image: url(arrowperms_sprite.png) !important;
|
||||
background-image: url(<%= asset_data_uri('arrowperms_sprite.png') %>) !important;
|
||||
cursor: pointer;
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
@ -1803,7 +1804,7 @@ h3.realtimeBoxTitle {
|
|||
width: 32px;
|
||||
height: 32px;
|
||||
background-repeat: no-repeat;
|
||||
background-image: url(permissions32_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('permissions32_sprite.png') %>);
|
||||
}
|
||||
.mapInfoBox .mapPermission .permissionSelect .commons {
|
||||
background-position: 0 0;
|
||||
|
@ -1850,7 +1851,7 @@ h3.realtimeBoxTitle {
|
|||
width: 340px;
|
||||
}
|
||||
.mapInfoBox.canEdit .mapInfoDesc:hover {
|
||||
background-image: url(edit.png);
|
||||
background-image: url(<%= asset_data_uri('edit.png') %>);
|
||||
background-position: top right;
|
||||
background-repeat: no-repeat;
|
||||
cursor: text;
|
||||
|
@ -1895,7 +1896,7 @@ h3.realtimeBoxTitle {
|
|||
.mapInfoShareIcon {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
background-image: url(share_sprite_mapinfo.png);
|
||||
background-image: url(<%= asset_data_uri('share_sprite_mapinfo.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
margin: 4px auto 0;
|
||||
background-position: 0 -24px;
|
||||
|
@ -1916,7 +1917,7 @@ and it won't be important on password protected instances */
|
|||
width: 16px;
|
||||
height: 16px;
|
||||
margin: 8px auto 0;
|
||||
background-image: url(remove_mapinfo_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('remove_mapinfo_sprite.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-position: -16px 0;
|
||||
}
|
||||
|
@ -1977,7 +1978,7 @@ and it won't be important on password protected instances */
|
|||
border: solid 2px #000;
|
||||
}
|
||||
#lightbox_overlay #lightbox_main a#lightbox_close {
|
||||
background-image: url(xlightbox.png);
|
||||
background-image: url(<%= asset_data_uri('xlightbox.png') %>);
|
||||
cursor: pointer;
|
||||
height: 32px;
|
||||
outline-style: none;
|
||||
|
@ -2076,7 +2077,7 @@ and it won't be important on password protected instances */
|
|||
color: #00bcd4;
|
||||
}
|
||||
.lightbox_links .lightboxAboutIcon {
|
||||
background-image: url(about_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('about_sprite.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
width:32px;
|
||||
height:32px;
|
||||
|
@ -2351,15 +2352,15 @@ and it won't be important on password protected instances */
|
|||
opacity: 0.7;
|
||||
}
|
||||
#chromeIcon {
|
||||
background: url(/assets/browser_icons.png) no-repeat;
|
||||
background: url(<%= asset_data_uri 'browser_icons.png' %>) no-repeat;
|
||||
}
|
||||
|
||||
#fireFoxIcon {
|
||||
background: url(/assets/browser_icons.png) no-repeat -105px 0;
|
||||
background: url(<%= asset_data_uri 'browser_icons.png' %>) no-repeat -105px 0;
|
||||
}
|
||||
|
||||
#safariIcon {
|
||||
background: url(/assets/browser_icons.png) no-repeat -220px 0;
|
||||
background: url(<%= asset_data_uri 'browser_icons.png' %>) no-repeat -220px 0;
|
||||
}
|
||||
|
||||
#chromeIcon:hover{
|
||||
|
@ -2496,7 +2497,7 @@ and it won't be important on password protected instances */
|
|||
position: relative;
|
||||
}
|
||||
.new_map .mapPermIcon {
|
||||
background-image: url(permissions64sprite.png);
|
||||
background-image: url(<%= asset_data_uri('permissions64sprite.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
width:64px;
|
||||
height:64px;
|
||||
|
@ -2611,7 +2612,7 @@ and it won't be important on password protected instances */
|
|||
}
|
||||
|
||||
#zoomIn {
|
||||
background: #424242 url(zoom_sprite.png) no-repeat;
|
||||
background: #424242 url(<%= asset_data_uri('zoom_sprite.png') %>) no-repeat;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
display: inline-block;
|
||||
|
@ -2623,7 +2624,7 @@ and it won't be important on password protected instances */
|
|||
}
|
||||
|
||||
#zoomOut {
|
||||
background: #424242 url(zoom_sprite.png) no-repeat;
|
||||
background: #424242 url(<%= asset_data_uri('zoom_sprite.png') %>) no-repeat;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
display: inline-block;
|
||||
|
@ -2635,7 +2636,7 @@ and it won't be important on password protected instances */
|
|||
}
|
||||
|
||||
#centerMap {
|
||||
background: #424242 url(extents_sprite.png) no-repeat;
|
||||
background: #424242 url(<%= asset_data_uri('extents_sprite.png') %>) no-repeat;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
display: inline-block;
|
||||
|
@ -2940,7 +2941,7 @@ and it won't be important on password protected instances */
|
|||
.compassArrow {
|
||||
display: none;
|
||||
background-repeat: no-repeat;
|
||||
background-image: url(compass_arrow.png);
|
||||
background-image: url(<%= asset_data_uri('compass_arrow.png') %>);
|
||||
width: 48px;
|
||||
height: 32px;
|
||||
position: absolute;
|
|
@ -85,7 +85,7 @@
|
|||
padding: 0 16px;
|
||||
}
|
||||
.canEdit #titleActivator:hover {
|
||||
background-image: url(edit.png);
|
||||
background-image: url(<%= asset_data_uri('edit.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-position: bottom right;
|
||||
cursor: text;
|
||||
|
@ -148,7 +148,7 @@
|
|||
margin-right: 8px;
|
||||
}
|
||||
.canEdit .CardOnGraph .best_in_place_desc:hover {
|
||||
background-image: url(edit.png);
|
||||
background-image: url(<%= asset_data_uri('edit.png') %>);
|
||||
background-position: top right;
|
||||
background-repeat: no-repeat;
|
||||
cursor: text;
|
||||
|
@ -244,7 +244,7 @@
|
|||
left: 0;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
background-image: url(map32_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('map32_sprite.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 0;
|
||||
cursor: pointer;
|
||||
|
@ -335,7 +335,7 @@
|
|||
left: 0;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
background-image: url(synapse32_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('synapse32_sprite.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 0;
|
||||
}
|
||||
|
@ -382,7 +382,7 @@
|
|||
min-width: 32px;
|
||||
margin-top: 8px;
|
||||
margin-left: 8px;
|
||||
background-image: url(permissions32_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('permissions32_sprite.png') %>);
|
||||
background-position: 0 0;
|
||||
}
|
||||
.mapPerm.co {
|
||||
|
@ -396,12 +396,12 @@
|
|||
}
|
||||
|
||||
.yourTopic .mapPerm:hover, .yourEdge .mapPerm:hover {
|
||||
background-image: url(arrowperms_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('arrowperms_sprite.png') %>);
|
||||
background-position: -32px 0;
|
||||
cursor:pointer;
|
||||
}
|
||||
.yourTopic .mapPerm.minimize, .yourEdge .mapPerm.minimize {
|
||||
background-image: url(arrowperms_sprite.png) !important;
|
||||
background-image: url(<%= asset_data_uri('arrowperms_sprite.png') %>) !important;
|
||||
background-position: 0 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
@ -417,7 +417,7 @@ cursor: pointer;
|
|||
height: 32px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 0;
|
||||
background-image: url(permissions32_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('permissions32_sprite.png') %>);
|
||||
}
|
||||
.mapPerm .permissionSelect .commons {
|
||||
background-position: 0 0;
|
||||
|
@ -462,7 +462,7 @@ cursor: pointer;
|
|||
right: 16px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background-image: url(arrowright_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('arrowright_sprite.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 -32px;
|
||||
}
|
||||
|
@ -542,7 +542,7 @@ background-color: #E0E0E0;
|
|||
right: 8px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background-image: url(arrowright_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('arrowright_sprite.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 -32px;
|
||||
}
|
||||
|
@ -648,10 +648,10 @@ background-color: #E0E0E0;
|
|||
left: 12px;
|
||||
}
|
||||
#linkIcon {
|
||||
background-image: url(link_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('link_sprite.png') %>);
|
||||
}
|
||||
#uploadIcon {
|
||||
background-image: url(upload_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('upload_sprite.png') %>);
|
||||
}
|
||||
#addlink:hover #linkIcon, #addupload:hover #uploadIcon {
|
||||
background-position: 0 -24px;
|
||||
|
@ -690,7 +690,7 @@ font-family: 'din-regular', helvetica, sans-serif;
|
|||
height: 24px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 0;
|
||||
background-image: url(link_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('link_sprite.png') %>);
|
||||
pointer-events: none;
|
||||
z-index: 1;
|
||||
}
|
||||
|
@ -703,7 +703,7 @@ font-family: 'din-regular', helvetica, sans-serif;
|
|||
height: 32px;
|
||||
cursor: pointer;
|
||||
float:none;
|
||||
background-image: url(remove.png);
|
||||
background-image: url(<%= asset_data_uri('remove.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
}
|
||||
|
@ -740,7 +740,7 @@ font-family: 'din-regular', helvetica, sans-serif;
|
|||
}
|
||||
|
||||
#linkremove {
|
||||
background-image: url(/assets/remove.png);
|
||||
background-image: url(<%= asset_data_uri 'remove.png' %>);
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
width: 24px;
|
||||
|
@ -781,7 +781,7 @@ font-family: 'din-regular', helvetica, sans-serif;
|
|||
}
|
||||
|
||||
#editSynUpperBar {
|
||||
background: #FFFFFF url(synapse32.png) no-repeat 8px center;
|
||||
background: #FFFFFF url(<%= asset_data_uri('synapse32.png') %>) no-repeat 8px center;
|
||||
min-height: 48px;
|
||||
height: 48px;
|
||||
border-bottom: 1px solid #222222;
|
||||
|
@ -814,7 +814,7 @@ font-family: 'din-regular', helvetica, sans-serif;
|
|||
}
|
||||
|
||||
.canEdit #edit_synapse_desc:hover {
|
||||
background-image: url(edit.png);
|
||||
background-image: url(<%= asset_data_uri('edit.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 164px center;
|
||||
cursor: text;
|
||||
|
@ -841,7 +841,7 @@ font-family: 'din-regular', helvetica, sans-serif;
|
|||
height: 24px;
|
||||
top: 12px;
|
||||
right: 8px;
|
||||
background-image: url(arrowdown_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('arrowdown_sprite.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 4px -12px;
|
||||
}
|
||||
|
@ -923,11 +923,11 @@ font-family: 'din-regular', helvetica, sans-serif;
|
|||
background-repeat: no-repeat;
|
||||
}
|
||||
#edit_synapse_right {
|
||||
background-image: url(synapsedirectionright_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('synapsedirectionright_sprite.png') %>);
|
||||
right: 16px;
|
||||
}
|
||||
#edit_synapse_left {
|
||||
background-image: url(synapsedirectionleft_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('synapsedirectionleft_sprite.png') %>);
|
||||
right: 56px;
|
||||
}
|
||||
#edit_synapse_left.checked, #edit_synapse_right.checked {
|
||||
|
@ -1103,7 +1103,7 @@ font-family: 'din-regular', helvetica, sans-serif;
|
|||
}
|
||||
|
||||
.mapperMetadata {
|
||||
background: url(profile_card_sprite.png) no-repeat center 0;
|
||||
background: url(<%= asset_data_uri('profile_card_sprite.png') %>) no-repeat center 0;
|
||||
height: 64px;
|
||||
width: 160px;
|
||||
margin: 16px auto 0;
|
|
@ -1,20 +1,20 @@
|
|||
@font-face {
|
||||
font-family: 'din-medium';
|
||||
src: url('/assets/Fonts/din.eot');
|
||||
src: url('/assets/Fonts/din.eot?#iefix') format('embedded-opentype'),
|
||||
url('/assets/Fonts/din.woff') format('woff'),
|
||||
url('/assets/Fonts/din.ttf') format('truetype'),
|
||||
url('/assets/Fonts/din.svg#din-medium') format('svg');
|
||||
src: url(<%= asset_path 'Fonts/din.eot' %>);
|
||||
src: url(<%= asset_path 'Fonts/din.eot?#iefix' %>) format('embedded-opentype'),
|
||||
url(<%= asset_path 'Fonts/din.woff' %>) format('woff'),
|
||||
url(<%= asset_path 'Fonts/din.ttf' %>) format('truetype'),
|
||||
url(<%= asset_path 'Fonts/din.svg#din-medium' %>) format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'din-regular';
|
||||
src: url('/assets/Fonts/din-reg.eot');
|
||||
src: url('/assets/Fonts/din-reg.eot?#iefix') format('embedded-opentype'),
|
||||
url('/assets/Fonts/din-reg.woff') format('woff'),
|
||||
url('/assets/Fonts/din-reg.ttf') format('truetype'),
|
||||
url('/assets/Fonts/din-reg.svg#din-reg') format('svg');
|
||||
src: url(<%= asset_path 'Fonts/din-reg.eot' %>);
|
||||
src: url(<%= asset_path 'Fonts/din-reg.eot?#iefix' %>) format('embedded-opentype'),
|
||||
url(<%= asset_path 'Fonts/din-reg.woff' %>) format('woff'),
|
||||
url(<%= asset_path 'Fonts/din-reg.ttf' %>) format('truetype'),
|
||||
url(<%= asset_path 'Fonts/din-reg.svg#din-reg' %>) format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
@ -134,7 +134,7 @@
|
|||
width: 40px;
|
||||
height: 32px;
|
||||
background-color: #757575;
|
||||
background-image: url(home_light.png);
|
||||
background-image: url(<%= asset_data_uri('home_light.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
border-top-left-radius: 2px;
|
||||
|
@ -142,7 +142,7 @@
|
|||
float:left;
|
||||
}
|
||||
.homeButton:hover {
|
||||
background-image: url(home_light.png);
|
||||
background-image: url(<%= asset_data_uri('home_light.png') %>);
|
||||
}
|
||||
.homeButton a {
|
||||
display:block;
|
||||
|
@ -176,7 +176,7 @@
|
|||
border-top-right-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
height: 32px;
|
||||
background: #4fb5c0 url('search.png') no-repeat center center;
|
||||
background: #4fb5c0 url(<%= asset_data_uri('search.png') %>) no-repeat center center;
|
||||
background-size: 32px 32px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
@ -288,7 +288,7 @@
|
|||
.sidebarSearch .tt-dropdown-menu .minimizeResults, .sidebarSearch .tt-dropdown-menu .maximizeResults {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
background-image: url(arrowpermswhite_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('arrowpermswhite_sprite.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
|
@ -301,7 +301,7 @@
|
|||
.sidebarSearch .tt-dropdown-menu .maximizeResults {
|
||||
background-position: -32px 0;
|
||||
}
|
||||
.sidebarSearch .tt-suggestions {
|
||||
.sidebarSearch .tt-dataset {
|
||||
overflow: visible;
|
||||
}
|
||||
.sidebarSearch .tt-suggestion {
|
||||
|
@ -310,7 +310,7 @@
|
|||
padding: 8px 0;
|
||||
}
|
||||
.sidebarSearch .tt-is-under-cursor,
|
||||
.sidebarSearch .tt-is-under-mouse-cursor {
|
||||
.sidebarSearch .tt-suggestion:hover {
|
||||
background: #E0E0E0;
|
||||
}
|
||||
|
||||
|
@ -425,7 +425,7 @@
|
|||
display:none;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
background: url(addtopic_sprite.png);
|
||||
background: url(<%= asset_data_uri('addtopic_sprite.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-size: 48px 24px;
|
||||
top: 12px;
|
||||
|
@ -442,7 +442,7 @@
|
|||
.sidebarSearch div.topicCount {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
background: url(topic16.png);
|
||||
background: url(<%= asset_data_uri('topic16.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 center;
|
||||
top: 0;
|
||||
|
@ -455,7 +455,7 @@
|
|||
.sidebarSearch div.mapCount {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
background: url(metamap16.png);
|
||||
background: url(<%= asset_data_uri('metamap16.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 center;
|
||||
left: 0;
|
||||
|
@ -466,7 +466,7 @@
|
|||
.sidebarSearch div.synapseCount {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
background: url(synapse16.png);
|
||||
background: url(<%= asset_data_uri('synapse16.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 center;
|
||||
top: 24px;
|
||||
|
@ -573,7 +573,7 @@
|
|||
.sidebarSearch div.mapPermission {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
background-image: url(permissions32_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('permissions32_sprite.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
background-size: 72px 48px !important;
|
||||
top: 24px;
|
||||
|
@ -665,7 +665,7 @@
|
|||
.upperRightIcon {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
background-image: url('topright_sprite.png');
|
||||
background-image: url(<%= asset_data_uri('topright_sprite.png') %>);
|
||||
background-repeat: no-repeat;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
@ -816,12 +816,12 @@
|
|||
}
|
||||
|
||||
.fullWidthWrapper.withPartners {
|
||||
background: url(homepage_bg_fade.png) no-repeat center -300px;
|
||||
background: url(<%= asset_data_uri('homepage_bg_fade.png') %>) no-repeat center -300px;
|
||||
}
|
||||
.homeWrapper.homePartners {
|
||||
padding: 64px 0 280px;
|
||||
height: 96px;
|
||||
background: url(partner_logos.png) no-repeat 0 64px;
|
||||
background: url(<%= asset_data_uri('partner_logos.png') %>) no-repeat 0 64px;
|
||||
}
|
||||
|
||||
.github-fork-ribbon-wrapper {
|
||||
|
@ -863,7 +863,7 @@
|
|||
cursor: pointer;
|
||||
}
|
||||
.openCheatsheet {
|
||||
background-image: url('help_sprite.png');
|
||||
background-image: url(<%= asset_data_uri('help_sprite.png') %>);
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
.openCheatsheet:hover {
|
||||
|
@ -872,7 +872,7 @@
|
|||
.mapInfoIcon {
|
||||
position: relative;
|
||||
top: 56px; /* puts it just offscreen */
|
||||
background-image: url('mapinfo_sprite.png');
|
||||
background-image: url(<%= asset_data_uri('mapinfo_sprite.png') %>);
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
.mapInfoIcon:hover {
|
||||
|
@ -918,7 +918,7 @@
|
|||
.takeScreenshot {
|
||||
margin-bottom: 5px;
|
||||
border-radius: 2px;
|
||||
background-image: url(screenshot_sprite.png);
|
||||
background-image: url(<%= asset_data_uri 'screenshot_sprite.png' %>);
|
||||
display: none;
|
||||
}
|
||||
.takeScreenshot:hover {
|
||||
|
@ -931,7 +931,7 @@
|
|||
.zoomExtents {
|
||||
margin-bottom:5px;
|
||||
border-radius: 2px;
|
||||
background-image: url(extents_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('extents_sprite.png') %>);
|
||||
}
|
||||
|
||||
.zoomExtents:hover {
|
||||
|
@ -1076,7 +1076,7 @@
|
|||
}
|
||||
|
||||
.zoomIn {
|
||||
background-image: url(zoom_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('zoom_sprite.png') %>);
|
||||
background-position: 0 /…0;
|
||||
border-top-left-radius: 2px;
|
||||
border-top-right-radius: 2px;
|
||||
|
@ -1085,7 +1085,7 @@
|
|||
background-position: -32px 0;
|
||||
}
|
||||
.zoomOut {
|
||||
background-image: url(zoom_sprite.png);
|
||||
background-image: url(<%= asset_data_uri('zoom_sprite.png') %>);
|
||||
background-position:0 -32px;
|
||||
border-bottom-left-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
|
@ -1163,15 +1163,15 @@
|
|||
left:5px;
|
||||
}
|
||||
.exploreMapsCenter .myMaps .exploreMapsIcon {
|
||||
background-image: url(exploremaps_sprite.png);
|
||||
background-image: url(<%= asset_data_uri 'exploremaps_sprite.png' %>);
|
||||
background-position: 0 0;
|
||||
}
|
||||
.exploreMapsCenter .activeMaps .exploreMapsIcon {
|
||||
background-image: url(exploremaps_sprite.png);
|
||||
background-image: url(<%= asset_data_uri 'exploremaps_sprite.png' %>);
|
||||
background-position: -32px 0;
|
||||
}
|
||||
.exploreMapsCenter .featuredMaps .exploreMapsIcon {
|
||||
background-image: url(exploremaps_sprite.png);
|
||||
background-image: url(<%= asset_data_uri 'exploremaps_sprite.png' %>);
|
||||
background-position: -64px 0;
|
||||
}
|
||||
.myMaps:hover .exploreMapsIcon, .myMaps.active .exploreMapsIcon {
|
||||
|
@ -1212,7 +1212,7 @@
|
|||
|
||||
/* feedback */
|
||||
body a#barometer_tab {
|
||||
background-image: url(feedback_sprite.png);
|
||||
background-image: url(<%= asset_path 'feedback_sprite.png' %>);
|
||||
background-position: 0 0;
|
||||
background-color: transparent;
|
||||
height: 110px;
|
|
@ -243,25 +243,25 @@ body .ui-tooltip { border-width: 2px; }
|
|||
.ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; }
|
||||
.ui-widget .ui-widget { font-size: 1em; }
|
||||
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; }
|
||||
.ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; }
|
||||
.ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(<%= asset_data_uri('ui-bg_flat_75_ffffff_40x100.png') %>)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; }
|
||||
.ui-widget-content a { color: #222222/*{fcContent}*/; }
|
||||
.ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; }
|
||||
.ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(<%= asset_data_uri('images/ui-bg_highlight-soft_75_cccccc_1x100.png') %>)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; }
|
||||
.ui-widget-header a { color: #222222/*{fcHeader}*/; }
|
||||
|
||||
/* Interaction states
|
||||
----------------------------------*/
|
||||
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; }
|
||||
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(<%= asset_data_uri('images/ui-bg_glass_75_e6e6e6_1x400.png') %>)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; }
|
||||
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; }
|
||||
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 0px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; }
|
||||
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 0px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(<%= asset_data_uri('images/ui-bg_glass_75_dadada_1x400.png') %>)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; }
|
||||
.ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited { color: #212121/*{fcHover}*/; text-decoration: none; }
|
||||
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; }
|
||||
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(<%= asset_data_uri('images/ui-bg_glass_65_ffffff_1x400.png') %>)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; }
|
||||
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; }
|
||||
|
||||
/* Interaction Cues
|
||||
----------------------------------*/
|
||||
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; }
|
||||
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(<%= asset_data_uri('images/ui-bg_glass_55_fbf9ee_1x400.png') %>)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; }
|
||||
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; }
|
||||
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; }
|
||||
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(<%= asset_data_uri('images/ui-bg_glass_95_fef1ec_1x400.png') %>)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; }
|
||||
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; }
|
||||
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; }
|
||||
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
|
||||
|
@ -273,14 +273,14 @@ body .ui-tooltip { border-width: 2px; }
|
|||
----------------------------------*/
|
||||
|
||||
/* states and images */
|
||||
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }
|
||||
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; }
|
||||
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; }
|
||||
.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; }
|
||||
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; }
|
||||
.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; }
|
||||
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; }
|
||||
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; }
|
||||
.ui-icon { width: 16px; height: 16px; background-image: url(<%= asset_data_uri('images/ui-icons_222222_256x240.png') %>)/*{iconsContent}*/; }
|
||||
.ui-widget-content .ui-icon {background-image: url(<%= asset_data_uri('images/ui-icons_222222_256x240.png') %>)/*{iconsContent}*/; }
|
||||
.ui-widget-header .ui-icon {background-image: url(<%= asset_data_uri('images/ui-icons_222222_256x240.png') %>)/*{iconsHeader}*/; }
|
||||
.ui-state-default .ui-icon { background-image: url(<%= asset_data_uri('images/ui-icons_888888_256x240.png') %>)/*{iconsDefault}*/; }
|
||||
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(<%= asset_data_uri('images/ui-icons_454545_256x240.png') %>)/*{iconsHover}*/; }
|
||||
.ui-state-active .ui-icon {background-image: url(<%= asset_data_uri('images/ui-icons_454545_256x240.png') %>)/*{iconsActive}*/; }
|
||||
.ui-state-highlight .ui-icon {background-image: url(<%= asset_data_uri('images/ui-icons_2e83ff_256x240.png') %>)/*{iconsHighlight}*/; }
|
||||
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(<%= asset_data_uri('images/ui-icons_cd0a0a_256x240.png') %>)/*{iconsError}*/; }
|
||||
|
||||
/* positioning */
|
||||
.ui-icon-carat-1-n { background-position: 0 0; }
|
||||
|
@ -470,5 +470,5 @@ body .ui-tooltip { border-width: 2px; }
|
|||
.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; }
|
||||
|
||||
/* Overlays */
|
||||
.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; }
|
||||
.ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; }
|
||||
.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(<%= asset_data_uri('images/ui-bg_flat_0_aaaaaa_40x100.png') %>)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; }
|
||||
.ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/<%= asset_data_uri('ui-bg_flat_0_aaaaaa_40x100.png') %>)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; }
|
|
@ -162,7 +162,7 @@
|
|||
.mCSB_scrollTools .mCSB_buttonDown,
|
||||
.mCSB_scrollTools .mCSB_buttonLeft,
|
||||
.mCSB_scrollTools .mCSB_buttonRight{
|
||||
background-image:url(mCSB_buttons.png);
|
||||
background-image:url(<%= asset_data_uri('mCSB_buttons.png') %>);
|
||||
background-repeat:no-repeat;
|
||||
opacity:0.4;
|
||||
filter:"alpha(opacity=40)"; -ms-filter:"alpha(opacity=40)"; /* old ie */
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
}
|
||||
|
||||
div.uv-icon.uv-bottom-left {
|
||||
background-image:url(feedback_sprite.png);
|
||||
background-image:url(<%= asset_data_uri 'feedback_sprite.png' %>);
|
||||
background-repeat: no-repeat;
|
||||
color:#FFFFFF;
|
||||
cursor:pointer;
|
|
@ -37,7 +37,7 @@ private
|
|||
end
|
||||
|
||||
def require_admin
|
||||
unless authenticated? && user.admin
|
||||
unless authenticated? && admin?
|
||||
redirect_to root_url, notice: "You need to be an admin for that."
|
||||
return false
|
||||
end
|
||||
|
|
|
@ -68,25 +68,20 @@ class MainController < ApplicationController
|
|||
else
|
||||
search = term.downcase + '%'
|
||||
|
||||
if !user
|
||||
@topics = Topic.where('LOWER("name") like ?', search).where('metacode_id = ?', filterByMetacode.id).order('"name"')
|
||||
@topics2 = Topic.where('LOWER("name") like ?', '%' + search).where('metacode_id = ?', filterByMetacode.id).order('"name"')
|
||||
@topics3 = Topic.where('LOWER("desc") like ?', '%' + search).where('metacode_id = ?', filterByMetacode.id).order('"name"')
|
||||
@topics4 = Topic.where('LOWER("link") like ?', '%' + search).where('metacode_id = ?', filterByMetacode.id).order('"name"')
|
||||
@topics = @topics + (@topics2 - @topics)
|
||||
@topics = @topics + (@topics3 - @topics)
|
||||
@topics = @topics + (@topics4 - @topics)
|
||||
|
||||
elsif user
|
||||
@topics = Topic.where('LOWER("name") like ?', search).where('metacode_id = ? AND user_id = ?', filterByMetacode.id, user).order('"name"')
|
||||
@topics2 = Topic.where('LOWER("name") like ?', '%' + search).where('metacode_id = ? AND user_id = ?', filterByMetacode.id, user).order('"name"')
|
||||
@topics3 = Topic.where('LOWER("desc") like ?', '%' + search).where('metacode_id = ? AND user_id = ?', filterByMetacode.id, user).order('"name"')
|
||||
@topics4 = Topic.where('LOWER("link") like ?', '%' + search).where('metacode_id = ? AND user_id = ?', filterByMetacode.id, user).order('"name"')
|
||||
@topics = @topics + (@topics2 - @topics)
|
||||
@topics = @topics + (@topics3 - @topics)
|
||||
@topics = @topics + (@topics4 - @topics)
|
||||
|
||||
if user
|
||||
@topics = Set.new(Topic.where('LOWER("name") like ?', search).where('metacode_id = ? AND user_id = ?', filterByMetacode.id, user).order('"name"'))
|
||||
@topics2 = Set.new(Topic.where('LOWER("name") like ?', '%' + search).where('metacode_id = ? AND user_id = ?', filterByMetacode.id, user).order('"name"'))
|
||||
@topics3 = Set.new(Topic.where('LOWER("desc") like ?', '%' + search).where('metacode_id = ? AND user_id = ?', filterByMetacode.id, user).order('"name"'))
|
||||
@topics4 = Set.new(Topic.where('LOWER("link") like ?', '%' + search).where('metacode_id = ? AND user_id = ?', filterByMetacode.id, user).order('"name"'))
|
||||
else
|
||||
@topics = Set.new(Topic.where('LOWER("name") like ?', search).where('metacode_id = ?', filterByMetacode.id).order('"name"'))
|
||||
@topics2 = Set.new(Topic.where('LOWER("name") like ?', '%' + search).where('metacode_id = ?', filterByMetacode.id).order('"name"'))
|
||||
@topics3 = Set.new(Topic.where('LOWER("desc") like ?', '%' + search).where('metacode_id = ?', filterByMetacode.id).order('"name"'))
|
||||
@topics4 = Set.new(Topic.where('LOWER("link") like ?', '%' + search).where('metacode_id = ?', filterByMetacode.id).order('"name"'))
|
||||
end
|
||||
|
||||
#get unique elements only through the magic of Sets
|
||||
@topics = (@topics + @topics2 + @topics3 + @topics4).to_a
|
||||
end
|
||||
elsif desc
|
||||
search = '%' + term.downcase + '%'
|
||||
|
@ -127,7 +122,7 @@ class MainController < ApplicationController
|
|||
end
|
||||
|
||||
#read this next line as 'delete a topic if its private and you're either 1. logged out or 2. logged in but not the topic creator
|
||||
@topics.delete_if {|t| t.permission == "private" && (!authenticated? || (authenticated? && @current.id != t.user_id)) }
|
||||
@topics.to_a.delete_if {|t| t.permission == "private" && (!authenticated? || (authenticated? && @current.id != t.user_id)) }
|
||||
|
||||
render json: autocomplete_array_json(@topics)
|
||||
end
|
||||
|
@ -163,7 +158,7 @@ class MainController < ApplicationController
|
|||
end
|
||||
|
||||
#read this next line as 'delete a map if its private and you're either 1. logged out or 2. logged in but not the map creator
|
||||
@maps.delete_if {|m| m.permission == "private" && (!authenticated? || (authenticated? && @current.id != m.user_id)) }
|
||||
@maps.to_a.delete_if {|m| m.permission == "private" && (!authenticated? || (authenticated? && @current.id != m.user_id)) }
|
||||
|
||||
render json: autocomplete_map_array_json(@maps)
|
||||
end
|
||||
|
@ -194,12 +189,12 @@ class MainController < ApplicationController
|
|||
topic2id = params[:topic2id]
|
||||
|
||||
if term && !term.empty?
|
||||
@synapses = Synapse.select('DISTINCT "desc"').where('LOWER("desc") like ?', '%' + term.downcase + '%').order('"desc"')
|
||||
@synapses = Synapse.where('LOWER("desc") like ?', '%' + term.downcase + '%').order('"desc"')
|
||||
|
||||
# remove any duplicate synapse types that just differ by
|
||||
# leading or trailing whitespaces
|
||||
collectedDesc = []
|
||||
@synapses.delete_if {|s|
|
||||
@synapses.to_a.uniq(&:desc).delete_if {|s|
|
||||
desc = s.desc == nil || s.desc == "" ? "" : s.desc.strip
|
||||
if collectedDesc.index(desc) == nil
|
||||
collectedDesc.push(desc)
|
||||
|
@ -211,23 +206,20 @@ class MainController < ApplicationController
|
|||
|
||||
#limit to 5 results
|
||||
@synapses = @synapses.slice(0,5)
|
||||
|
||||
render json: autocomplete_synapse_generic_json(@synapses)
|
||||
|
||||
elsif topic1id && !topic1id.empty?
|
||||
@one = Synapse.where('node1_id = ? AND node2_id = ?', topic1id, topic2id)
|
||||
@two = Synapse.where('node2_id = ? AND node1_id = ?', topic1id, topic2id)
|
||||
@synapses = @one + @two
|
||||
@synapses.sort! {|s1,s2| s1.desc <=> s2.desc }
|
||||
@synapses.sort! {|s1,s2| s1.desc <=> s2.desc }.to_a
|
||||
|
||||
#read this next line as 'delete a synapse if its private and you're either 1. logged out or 2. logged in but not the synapse creator
|
||||
@synapses.delete_if {|s| s.permission == "private" && (!authenticated? || (authenticated? && @current.id != s.user_id)) }
|
||||
|
||||
render json: autocomplete_synapse_array_json(@synapses)
|
||||
#permissions
|
||||
@synapses.delete_if {|s| s.permission == "private" && !authenticated? }
|
||||
@synapses.delete_if {|s| s.permission == "private" && authenticated? && @current.id != s.user_id }
|
||||
else
|
||||
@synapses = []
|
||||
render json: autocomplete_synapse_array_json(@synapses)
|
||||
end
|
||||
|
||||
render json: autocomplete_synapse_array_json(@synapses)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -13,7 +13,7 @@ class MappingsController < ApplicationController
|
|||
|
||||
# POST /mappings.json
|
||||
def create
|
||||
@mapping = Mapping.new(params[:mapping])
|
||||
@mapping = Mapping.new(mapping_params)
|
||||
|
||||
@mapping.map.touch(:updated_at)
|
||||
|
||||
|
@ -30,7 +30,7 @@ class MappingsController < ApplicationController
|
|||
|
||||
@mapping.map.touch(:updated_at)
|
||||
|
||||
if @mapping.update_attributes(params[:mapping])
|
||||
if @mapping.update_attributes(mapping_params)
|
||||
head :no_content
|
||||
else
|
||||
render json: @mapping.errors, status: :unprocessable_entity
|
||||
|
@ -48,4 +48,10 @@ class MappingsController < ApplicationController
|
|||
|
||||
head :no_content
|
||||
end
|
||||
|
||||
private
|
||||
# Never trust parameters from the scary internet, only allow the white list through.
|
||||
def mapping_params
|
||||
params.require(:mapping).permit(:id, :xloc, :yloc, :mappable_id, :mappable_type, :map_id, :user_id)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -72,14 +72,10 @@ class MapsController < ApplicationController
|
|||
respond_to do |format|
|
||||
format.html {
|
||||
@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.delete_if {|m|
|
||||
if m.category == "Synapse"
|
||||
object = m.synapse
|
||||
elsif m.category == "Topic"
|
||||
object = m.topic
|
||||
end
|
||||
@alltopics = @map.topics.to_a.delete_if {|t| t.permission == "private" && (!authenticated? || (authenticated? && @current.id != t.user_id)) }
|
||||
@allsynapses = @map.synapses.to_a.delete_if {|s| s.permission == "private" && (!authenticated? || (authenticated? && @current.id != s.user_id)) }
|
||||
@allmappings = @map.mappings.to_a.delete_if {|m|
|
||||
object = m.mappable
|
||||
!object || (object.permission == "private" && (!authenticated? || (authenticated? && @current.id != object.user_id)))
|
||||
}
|
||||
|
||||
|
@ -100,14 +96,10 @@ class MapsController < ApplicationController
|
|||
end
|
||||
|
||||
@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.delete_if {|m|
|
||||
if m.category == "Synapse"
|
||||
object = m.synapse
|
||||
elsif m.category == "Topic"
|
||||
object = m.topic
|
||||
end
|
||||
@alltopics = @map.topics.to_a.delete_if {|t| t.permission == "private" && (!authenticated? || (authenticated? && @current.id != t.user_id)) }
|
||||
@allsynapses = @map.synapses.to_a.delete_if {|s| s.permission == "private" && (!authenticated? || (authenticated? && @current.id != s.user_id)) }
|
||||
@allmappings = @map.mappings.to_a.delete_if {|m|
|
||||
object = m.mappable
|
||||
!object || (object.permission == "private" && (!authenticated? || (authenticated? && @current.id != object.user_id)))
|
||||
}
|
||||
|
||||
|
@ -141,10 +133,9 @@ class MapsController < ApplicationController
|
|||
@all.each do |topic|
|
||||
topic = topic.split('/')
|
||||
@mapping = Mapping.new()
|
||||
@mapping.category = "Topic"
|
||||
@mapping.user = @user
|
||||
@mapping.map = @map
|
||||
@mapping.topic = Topic.find(topic[0])
|
||||
@mapping.mappable = Topic.find(topic[0])
|
||||
@mapping.xloc = topic[1]
|
||||
@mapping.yloc = topic[2]
|
||||
@mapping.save
|
||||
|
@ -155,10 +146,9 @@ class MapsController < ApplicationController
|
|||
@synAll = @synAll.split(',')
|
||||
@synAll.each do |synapse_id|
|
||||
@mapping = Mapping.new()
|
||||
@mapping.category = "Synapse"
|
||||
@mapping.user = @user
|
||||
@mapping.map = @map
|
||||
@mapping.synapse = Synapse.find(synapse_id)
|
||||
@mapping.mappable = Synapse.find(synapse_id)
|
||||
@mapping.save
|
||||
end
|
||||
end
|
||||
|
@ -180,7 +170,7 @@ class MapsController < ApplicationController
|
|||
respond_to do |format|
|
||||
if !@map
|
||||
format.json { render json: "unauthorized" }
|
||||
elsif @map.update_attributes(params[:map])
|
||||
elsif @map.update_attributes(map_params)
|
||||
format.json { head :no_content }
|
||||
else
|
||||
format.json { render json: @map.errors, status: :unprocessable_entity }
|
||||
|
@ -218,15 +208,7 @@ class MapsController < ApplicationController
|
|||
|
||||
@map = Map.find(params[:id]).authorize_to_delete(@current)
|
||||
|
||||
if @map
|
||||
@mappings = @map.mappings
|
||||
|
||||
@mappings.each do |mapping|
|
||||
mapping.delete
|
||||
end
|
||||
|
||||
@map.delete
|
||||
end
|
||||
@map.delete if @map
|
||||
|
||||
respond_to do |format|
|
||||
format.json {
|
||||
|
@ -238,4 +220,11 @@ class MapsController < ApplicationController
|
|||
}
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Never trust parameters from the scary internet, only allow the white list through.
|
||||
def map_params
|
||||
params.require(:map).permit(:id, :name, :arranged, :desc, :permission, :user_id)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -45,7 +45,7 @@ class MetacodeSetsController < ApplicationController
|
|||
# POST /metacode_sets.json
|
||||
def create
|
||||
@user = current_user
|
||||
@metacode_set = MetacodeSet.new(params[:metacode_set])
|
||||
@metacode_set = MetacodeSet.new(metacode_set_params)
|
||||
@metacode_set.user_id = @user.id
|
||||
|
||||
respond_to do |format|
|
||||
|
@ -70,7 +70,7 @@ class MetacodeSetsController < ApplicationController
|
|||
@metacode_set = MetacodeSet.find(params[:id])
|
||||
|
||||
respond_to do |format|
|
||||
if @metacode_set.update_attributes(params[:metacode_set])
|
||||
if @metacode_set.update_attributes(metacode_set_params)
|
||||
|
||||
# build an array of the IDs of the metacodes currently in the set
|
||||
@currentMetacodes = @metacode_set.metacodes.map{ |m| m.id.to_s }
|
||||
|
@ -116,4 +116,11 @@ class MetacodeSetsController < ApplicationController
|
|||
format.json { head :no_content }
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def metacode_set_params
|
||||
params.require(:metacode_set).permit(:desc, :mapperContributed, :name)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -5,8 +5,10 @@ class MetacodesController < ApplicationController
|
|||
# GET /metacodes
|
||||
# GET /metacodes.json
|
||||
def index
|
||||
|
||||
@metacodes = Metacode.order("name").all
|
||||
@metacodes.map do |metacode|
|
||||
metacode.icon = ActionController::Base.helpers.asset_path(metacode.icon)
|
||||
end
|
||||
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
|
@ -51,7 +53,7 @@ class MetacodesController < ApplicationController
|
|||
# POST /metacodes
|
||||
# POST /metacodes.json
|
||||
def create
|
||||
@metacode = Metacode.new(params[:metacode])
|
||||
@metacode = Metacode.new(metacode_params)
|
||||
|
||||
respond_to do |format|
|
||||
if @metacode.save
|
||||
|
@ -70,7 +72,7 @@ class MetacodesController < ApplicationController
|
|||
@metacode = Metacode.find(params[:id])
|
||||
|
||||
respond_to do |format|
|
||||
if @metacode.update_attributes(params[:metacode])
|
||||
if @metacode.update_attributes(metacode_params)
|
||||
format.html { redirect_to metacodes_url, notice: 'Metacode was successfully updated.' }
|
||||
format.json { head :no_content }
|
||||
else
|
||||
|
@ -93,4 +95,11 @@ class MetacodesController < ApplicationController
|
|||
# format.json { head :no_content }
|
||||
# end
|
||||
# end
|
||||
|
||||
private
|
||||
|
||||
# Never trust parameters from the scary internet, only allow the white list through.
|
||||
def metacode_params
|
||||
params.require(:metacode).permit(:id, :name, :icon, :color)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -21,7 +21,8 @@ class SynapsesController < ApplicationController
|
|||
# POST /synapses
|
||||
# POST /synapses.json
|
||||
def create
|
||||
@synapse = Synapse.new(params[:synapse])
|
||||
@synapse = Synapse.new(synapse_params)
|
||||
@synapse.update_attribute :desc, "" if @synapse.desc.nil?
|
||||
|
||||
respond_to do |format|
|
||||
if @synapse.save
|
||||
|
@ -36,9 +37,10 @@ class SynapsesController < ApplicationController
|
|||
# PUT /synapses/1.json
|
||||
def update
|
||||
@synapse = Synapse.find(params[:id])
|
||||
@synapse.update_attribute :desc, "" if @synapse.desc.nil?
|
||||
|
||||
respond_to do |format|
|
||||
if @synapse.update_attributes(params[:synapse])
|
||||
if @synapse.update_attributes(synapse_params)
|
||||
format.json { head :no_content }
|
||||
else
|
||||
format.json { render json: @synapse.errors, status: :unprocessable_entity }
|
||||
|
@ -50,18 +52,16 @@ class SynapsesController < ApplicationController
|
|||
def destroy
|
||||
@current = current_user
|
||||
@synapse = Synapse.find(params[:id]).authorize_to_delete(@current)
|
||||
|
||||
if @synapse
|
||||
@synapse.mappings.each do |m|
|
||||
m.map.touch(:updated_at)
|
||||
m.delete
|
||||
end
|
||||
|
||||
@synapse.delete
|
||||
end
|
||||
@synapse.delete if @synapse
|
||||
|
||||
respond_to do |format|
|
||||
format.json { head :no_content }
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def synapse_params
|
||||
params.require(:synapse).permit(:id, :desc, :category, :weight, :permission, :node1_id, :node2_id, :user_id)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -10,12 +10,11 @@ class TopicsController < ApplicationController
|
|||
@current = current_user
|
||||
term = params[:term]
|
||||
if term && !term.empty?
|
||||
# !connor term here needs to have .downcase
|
||||
@topics = Topic.where('LOWER("name") like ?', term.downcase + '%').order('"name"')
|
||||
|
||||
#read this next line as 'delete a topic if its private and you're either
|
||||
#1. logged out or 2. logged in but not the topic creator
|
||||
@topics.delete_if {|t| t.permission == "private" &&
|
||||
@topics.to_a.delete_if {|t| t.permission == "private" &&
|
||||
(!authenticated? || (authenticated? && @current.id != t.user_id)) }
|
||||
else
|
||||
@topics = []
|
||||
|
@ -35,7 +34,7 @@ class TopicsController < ApplicationController
|
|||
respond_to do |format|
|
||||
format.html {
|
||||
@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)) }
|
||||
@allsynapses = @topic.synapses.to_a.delete_if {|s| s.permission == "private" && (!authenticated? || (authenticated? && @current.id != s.user_id)) }
|
||||
|
||||
@allcreators = []
|
||||
@alltopics.each do |t|
|
||||
|
@ -64,8 +63,8 @@ class TopicsController < ApplicationController
|
|||
redirect_to root_url, notice: "Access denied. That topic is private." and return
|
||||
end
|
||||
|
||||
@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)) }
|
||||
@alltopics = @topic.relatives.to_a.delete_if {|t| t.permission == "private" && (!authenticated? || (authenticated? && @current.id != t.user_id)) }
|
||||
@allsynapses = @topic.synapses.to_a.delete_if {|s| s.permission == "private" && (!authenticated? || (authenticated? && @current.id != s.user_id)) }
|
||||
@allcreators = []
|
||||
@allcreators.push(@topic.user)
|
||||
@alltopics.each do |t|
|
||||
|
@ -101,7 +100,7 @@ class TopicsController < ApplicationController
|
|||
|
||||
@topicsAlreadyHas = params[:network] ? params[:network].split(',') : []
|
||||
|
||||
@alltopics = @topic.relatives.delete_if {|t|
|
||||
@alltopics = @topic.relatives.to_a.delete_if {|t|
|
||||
@topicsAlreadyHas.index(t.id.to_s) != nil ||
|
||||
(t.permission == "private" && (!authenticated? || (authenticated? && @current.id != t.user_id)))
|
||||
}
|
||||
|
@ -133,7 +132,7 @@ class TopicsController < ApplicationController
|
|||
|
||||
@topicsAlreadyHas = params[:network] ? params[:network].split(',') : []
|
||||
|
||||
@alltopics = @topic.relatives.delete_if {|t|
|
||||
@alltopics = @topic.relatives.to_a.delete_if {|t|
|
||||
@topicsAlreadyHas.index(t.id.to_s) != nil ||
|
||||
(params[:metacode] && t.metacode_id.to_s != params[:metacode]) ||
|
||||
(t.permission == "private" && (!authenticated? || (authenticated? && @current.id != t.user_id)))
|
||||
|
@ -141,7 +140,7 @@ class TopicsController < ApplicationController
|
|||
|
||||
@alltopics.uniq!
|
||||
|
||||
@allsynapses = @topic.synapses.delete_if {|s|
|
||||
@allsynapses = @topic.synapses.to_a.delete_if {|s|
|
||||
(s.topic1 == @topic && @alltopics.index(s.topic2) == nil) ||
|
||||
(s.topic2 == @topic && @alltopics.index(s.topic1) == nil)
|
||||
}
|
||||
|
@ -172,7 +171,7 @@ class TopicsController < ApplicationController
|
|||
# POST /topics
|
||||
# POST /topics.json
|
||||
def create
|
||||
@topic = Topic.new(params[:topic])
|
||||
@topic = Topic.new(topic_params)
|
||||
|
||||
respond_to do |format|
|
||||
if @topic.save
|
||||
|
@ -189,7 +188,7 @@ class TopicsController < ApplicationController
|
|||
@topic = Topic.find(params[:id])
|
||||
|
||||
respond_to do |format|
|
||||
if @topic.update_attributes(params[:topic])
|
||||
if @topic.update_attributes(topic_params)
|
||||
format.json { head :no_content }
|
||||
else
|
||||
format.json { render json: @topic.errors, status: :unprocessable_entity }
|
||||
|
@ -201,36 +200,16 @@ class TopicsController < ApplicationController
|
|||
def destroy
|
||||
@current = current_user
|
||||
@topic = Topic.find(params[:id]).authorize_to_delete(@current)
|
||||
|
||||
if @topic
|
||||
@synapses = @topic.synapses
|
||||
@mappings = @topic.mappings
|
||||
|
||||
@synapses.each do |synapse|
|
||||
synapse.mappings.each do |m|
|
||||
|
||||
@map = m.map
|
||||
@map.touch(:updated_at)
|
||||
|
||||
m.delete
|
||||
end
|
||||
|
||||
synapse.delete
|
||||
end
|
||||
|
||||
@mappings.each do |mapping|
|
||||
|
||||
@map = mapping.map
|
||||
@map.touch(:updated_at)
|
||||
|
||||
mapping.delete
|
||||
end
|
||||
|
||||
@topic.delete
|
||||
end
|
||||
@topic.delete if @topic
|
||||
|
||||
respond_to do |format|
|
||||
format.json { head :no_content }
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def topic_params
|
||||
params.require(:topic).permit(:id, :name, :desc, :link, :permission, :user_id, :metacode_id)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -98,4 +98,11 @@ class UsersController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def user_params
|
||||
params.require(:user).permit(:name, :email, :image, :password,
|
||||
:password_confirmation, :code, :joinedwithcode, :remember_me)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -1,2 +1,18 @@
|
|||
module ApplicationHelper
|
||||
def get_metacodeset
|
||||
@m = user.settings.metacodes
|
||||
set = @m[0].include?("metacodeset") ? MetacodeSet.find(@m[0].sub("metacodeset-","").to_i) : false
|
||||
return set
|
||||
end
|
||||
|
||||
def user_metacodes
|
||||
@m = user.settings.metacodes
|
||||
set = get_metacodeset
|
||||
if set
|
||||
@metacodes = set.metacodes
|
||||
else
|
||||
@metacodes = Metacode.where(id: @m).to_a
|
||||
end
|
||||
@metacodes.sort! {|m1,m2| m2.name.downcase <=> m1.name.downcase }.rotate!(-1)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -16,7 +16,7 @@ module MapsHelper
|
|||
map['rtype'] = "map"
|
||||
|
||||
contributorTip = ''
|
||||
firstContributorImage = '/assets/user.png'
|
||||
firstContributorImage = asset_path('user.png')
|
||||
if m.contributors.count > 0
|
||||
firstContributorImage = m.contributors[0].image.url(:thirtytwo)
|
||||
m.contributors.each_with_index do |c, index|
|
||||
|
|
|
@ -10,7 +10,7 @@ module TopicsHelper
|
|||
topic['value'] = t.name
|
||||
topic['description'] = t.desc.truncate(70) # make this return matched results
|
||||
topic['type'] = t.metacode.name
|
||||
topic['typeImageURL'] = t.metacode.icon
|
||||
topic['typeImageURL'] = t.metacode.asset_path_icon
|
||||
topic['permission'] = t.permission
|
||||
topic['mapCount'] = t.maps.count
|
||||
topic['synapseCount'] = t.synapses.count
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
class InMetacodeSet < ActiveRecord::Base
|
||||
belongs_to :metacode, :class_name => "Metacode", :foreign_key => "metacode_id"
|
||||
belongs_to :metacode_set, :class_name => "MetacodeSet", :foreign_key => "metacode_set_id"
|
||||
# attr_accessible :title, :body
|
||||
end
|
||||
|
|
|
@ -2,18 +2,17 @@ class Map < ActiveRecord::Base
|
|||
|
||||
belongs_to :user
|
||||
|
||||
has_many :topicmappings, :class_name => 'Mapping', :conditions => {:category => 'Topic'}
|
||||
has_many :synapsemappings, :class_name => 'Mapping', :conditions => {:category => 'Synapse'}
|
||||
|
||||
has_many :topics, :through => :topicmappings
|
||||
has_many :synapses, :through => :synapsemappings
|
||||
has_many :topicmappings, -> { Mapping.topicmapping }, class_name: :Mapping, dependent: :destroy
|
||||
has_many :synapsemappings, -> { Mapping.synapsemapping }, class_name: :Mapping, dependent: :destroy
|
||||
has_many :topics, through: :topicmappings, source: :mappable, source_type: "Topic"
|
||||
has_many :synapses, through: :synapsemappings, source: :mappable, source_type: "Synapse"
|
||||
|
||||
# This method associates the attribute ":image" with a file attachment
|
||||
has_attached_file :screenshot, :styles => {
|
||||
:thumb => ['188x126#', :png]
|
||||
#:full => ['940x630#', :png]
|
||||
},
|
||||
:default_url => "/assets/missing-map.png"
|
||||
:default_url => ActionController::Base.helpers.asset_path('missing-map.png')
|
||||
|
||||
# Validate the attached image is image/jpg, image/png, etc
|
||||
validates_attachment_content_type :screenshot, :content_type => /\Aimage\/.*\Z/
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
class Mapping < ActiveRecord::Base
|
||||
|
||||
belongs_to :topic, :class_name => "Topic", :foreign_key => "topic_id"
|
||||
belongs_to :synapse, :class_name => "Synapse", :foreign_key => "synapse_id"
|
||||
scope :topicmapping, -> { where(mappable_type: :Topic) }
|
||||
scope :synapsemapping, -> { where(mappable_type: :Synapse) }
|
||||
|
||||
belongs_to :mappable, polymorphic: true
|
||||
|
||||
belongs_to :map, :class_name => "Map", :foreign_key => "map_id"
|
||||
|
||||
belongs_to :user
|
||||
|
|
|
@ -14,4 +14,18 @@ class Metacode < ActiveRecord::Base
|
|||
return false
|
||||
end
|
||||
|
||||
def asset_path_icon
|
||||
if icon.start_with?('http')
|
||||
icon
|
||||
else
|
||||
ActionController::Base.helpers.asset_path icon
|
||||
end
|
||||
end
|
||||
|
||||
#output json with asset_paths merged in
|
||||
def as_json(options)
|
||||
json = super(options.merge!(methods: :asset_path_icon))
|
||||
json["icon"] = json["asset_path_icon"]
|
||||
json.except("asset_path_icon")
|
||||
end
|
||||
end
|
|
@ -1,6 +1,5 @@
|
|||
class MetacodeSet < ActiveRecord::Base
|
||||
belongs_to :user
|
||||
attr_accessible :desc, :mapperContributed, :name
|
||||
has_many :in_metacode_sets
|
||||
has_many :metacodes, :through => :in_metacode_sets
|
||||
end
|
||||
|
|
|
@ -5,9 +5,11 @@ class Synapse < ActiveRecord::Base
|
|||
belongs_to :topic1, :class_name => "Topic", :foreign_key => "node1_id"
|
||||
belongs_to :topic2, :class_name => "Topic", :foreign_key => "node2_id"
|
||||
|
||||
has_many :mappings
|
||||
has_many :mappings, as: :mappable, dependent: :destroy
|
||||
has_many :maps, :through => :mappings
|
||||
|
||||
validates :desc, length: { minimum: 0, allow_nil: false }
|
||||
|
||||
def user_name
|
||||
self.user.name
|
||||
end
|
||||
|
|
|
@ -3,12 +3,12 @@ class Topic < ActiveRecord::Base
|
|||
|
||||
belongs_to :user
|
||||
|
||||
has_many :synapses1, :class_name => 'Synapse', :foreign_key => 'node1_id'
|
||||
has_many :synapses2, :class_name => 'Synapse', :foreign_key => 'node2_id'
|
||||
has_many :synapses1, :class_name => 'Synapse', :foreign_key => 'node1_id', dependent: :destroy
|
||||
has_many :synapses2, :class_name => 'Synapse', :foreign_key => 'node2_id', dependent: :destroy
|
||||
has_many :topics1, :through => :synapses2, :source => :topic1
|
||||
has_many :topics2, :through => :synapses1, :source => :topic2
|
||||
|
||||
has_many :mappings
|
||||
has_many :mappings, as: :mappable, dependent: :destroy
|
||||
has_many :maps, :through => :mappings
|
||||
|
||||
# This method associates the attribute ":image" with a file attachment
|
||||
|
|
|
@ -11,8 +11,6 @@ class User < ActiveRecord::Base
|
|||
|
||||
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :registerable
|
||||
|
||||
attr_accessible :name, :email, :image, :password, :password_confirmation, :code, :joinedwithcode, :remember_me
|
||||
|
||||
serialize :settings, UserPreference
|
||||
|
||||
validates :password, :presence => true,
|
||||
|
@ -37,7 +35,7 @@ class User < ActiveRecord::Base
|
|||
:ninetysix => ['96x96#', :png],
|
||||
:onetwentyeight => ['128x128#', :png]
|
||||
},
|
||||
:default_url => "/assets/user.png"
|
||||
:default_url => ActionController::Base.helpers.asset_path('user.png')
|
||||
|
||||
# Validate the attached image is image/jpg, image/png, etc
|
||||
validates_attachment_content_type :image, :content_type => /\Aimage\/.*\Z/
|
||||
|
|
|
@ -129,7 +129,7 @@
|
|||
<script type="text/template" id="mapSearchTemplate">
|
||||
<div class="result{{rtype}}">
|
||||
<div class="searchResIconWrapper">
|
||||
<img class="icon" src="/assets/metamap36c.png">
|
||||
<img class="icon" src="<%= asset_path('metamap36c.png') %>">
|
||||
</div>
|
||||
<div class="resultText">
|
||||
<p class="resultTitle">{{label}}</p>
|
||||
|
@ -196,6 +196,7 @@
|
|||
</script>
|
||||
|
||||
<script type="text/template" id="topicAutocompleteTemplate">
|
||||
<div>
|
||||
<img class="autocompleteSection topicType" width="24" height="24" src="{{typeImageURL}}" alt="{{type}}" title="{{type}}" />
|
||||
<p class="autocompleteSection topicTitle">{{label}}</p>
|
||||
<div class="expandTopicMetadata"></div>
|
||||
|
@ -209,6 +210,7 @@
|
|||
<div class="topicPermission {{permission}}"></div>
|
||||
</div>
|
||||
<div class="clearfloat"></div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
|
||||
|
@ -234,7 +236,7 @@
|
|||
<div class="metacodeSelect">{{{metacode_select}}}</div>
|
||||
</div>
|
||||
<div class="linkItem contributor">
|
||||
<a href="/explore/mapper/{{userid}}"><img src="/assets/user.png" class="contributorIcon" width="32" height="32" /></a>
|
||||
<a href="/explore/mapper/{{userid}}"><img src="<%= asset_path('user.png') %>" class="contributorIcon" width="32" height="32" /></a>
|
||||
<div class="contributorName">{{username}}</div>
|
||||
</div>
|
||||
<div class="linkItem mapCount">
|
||||
|
|
|
@ -8,12 +8,12 @@
|
|||
<%= @map && @map.permission != 'private' ? " shareable" : "" %>">
|
||||
|
||||
<% if @map %>
|
||||
<div class="mapInfoName" id="mapInfoName"><%= best_in_place @map, :name, :type => :textarea, :activator => "#mapInfoName", :classes => 'best_in_place_name' %></div>
|
||||
<div class="mapInfoName" id="mapInfoName"><%= best_in_place @map, :name, :as => :textarea, :activator => "#mapInfoName", :class => 'best_in_place_name' %></div>
|
||||
|
||||
<div class="mapInfoStat">
|
||||
<div class="infoStatIcon mapContributors hoverForTip">
|
||||
<% if @map.contributors.count == 0 %>
|
||||
<img id="mapContribs" width="25" height="25" src="/assets/user.png" />
|
||||
<img id="mapContribs" width="25" height="25" src="<%= asset_path('user.png'); %>" />
|
||||
<% elsif @map.contributors.count == 1 %>
|
||||
<img id="mapContribs" width="25" height="25" src="<%= @map.contributors[0].image.url(:thirtytwo) %>" />
|
||||
<% elsif @map.contributors.count == 2 %>
|
||||
|
@ -23,7 +23,7 @@
|
|||
<% end %>
|
||||
<span><%= @map.contributors.count %></span>
|
||||
<div class="tip"> <ul><% @map.contributors.each_with_index do |c, index| %>
|
||||
<li ><a href="/explore/mapper/<%= c.id %>" > <img class="rtUserImage" width="25" height="25" src="<%= c.image.url(:thirtytwo) %>" />
|
||||
<li ><a href="/explore/mapper/<%= c.id %>" > <img class="rtUserImage" width="25" height="25" src="<%= asset_path c.image.url(:thirtytwo) %>" />
|
||||
<%= c.name %></a>
|
||||
</li>
|
||||
<% end %></ul></div>
|
||||
|
@ -42,7 +42,7 @@
|
|||
|
||||
<div class="mapInfoDesc" id="mapInfoDesc">
|
||||
<% if (authenticated? && @map.authorize_to_edit(user)) || (!authenticated? && @map.desc != "" && @map.desc != nil )%>
|
||||
<%= best_in_place @map, :desc, :activator => "#mapInfoDesc", :type => :textarea, :nil => "Click to add description...", :classes => 'best_in_place_desc' %>
|
||||
<%= best_in_place @map, :desc, :activator => "#mapInfoDesc", :as => :textarea, :placeholder => "Click to add description...", :class => 'best_in_place_desc' %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -1,19 +1,10 @@
|
|||
<%= form_for Topic.new, url: topics_url, remote: true do |form| %>
|
||||
<div class="openMetacodeSwitcher openLightbox" data-open="switchMetacodes"></div>
|
||||
<div id="metacodeImg">
|
||||
<% @m = user.settings.metacodes %>
|
||||
<% set = @m[0].include?("metacodeset") ? MetacodeSet.find(@m[0].sub("metacodeset-","").to_i) : false %>
|
||||
<% if set %>
|
||||
<% @metacodes = set.metacodes %>
|
||||
<% else %>
|
||||
<% @metacodes = [] %>
|
||||
<% @m.each do |m| %>
|
||||
<% @metacodes.push(Metacode.find(m.to_i)) %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% @metacodes.sort! {|m1,m2| m2.name.downcase <=> m1.name.downcase }.rotate!(-1) %>
|
||||
<% @metacodes = user_metacodes() %>
|
||||
<% set = get_metacodeset() %>
|
||||
<% @metacodes.each do |metacode| %>
|
||||
<img class="cloudcarousel" width="40" height="40" src="<%= metacode.icon %>" alt="<%= metacode.name %>" title="<%= metacode.name %>" data-id="<%= metacode.id %>" />
|
||||
<img class="cloudcarousel" width="40" height="40" src="<%= asset_path metacode.icon %>" alt="<%= metacode.name %>" title="<%= metacode.name %>" data-id="<%= metacode.id %>" />
|
||||
<% end %>
|
||||
</div>
|
||||
<%= form.text_field :name, :maxlength => 140, :placeholder => "title..." %>
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
<% while $i < (Metacode.all.length / 4) do %>
|
||||
<li id="<%= @m[$i].id %>" <% if not @m[$i].inMetacodeSet(@metacode_set) %>class="toggledOff"<% end %>
|
||||
onclick="Metamaps.Admin.liClickHandler.call(this);">
|
||||
<img src="<%= @m[$i].icon %>" alt="<%= @m[$i].name %>" />
|
||||
<img src="<%= asset_path @m[$i].icon %>" alt="<%= @m[$i].name %>" />
|
||||
<p><%= @m[$i].name.downcase %></p>
|
||||
<div class="clearfloat"></div>
|
||||
</li>
|
||||
|
@ -48,7 +48,7 @@
|
|||
<% while $i < (Metacode.all.length / 4 * 2) do %>
|
||||
<li id="<%= @m[$i].id %>" <% if not @m[$i].inMetacodeSet(@metacode_set) %>class="toggledOff"<% end %>
|
||||
onclick="Metamaps.Admin.liClickHandler.call(this);">
|
||||
<img src="<%= @m[$i].icon %>" alt="<%= @m[$i].name %>" />
|
||||
<img src="<%= asset_path @m[$i].icon %>" alt="<%= @m[$i].name %>" />
|
||||
<p><%= @m[$i].name.downcase %></p>
|
||||
<div class="clearfloat"></div>
|
||||
</li>
|
||||
|
@ -59,7 +59,7 @@
|
|||
<% while $i < (Metacode.all.length / 4 * 3) do %>
|
||||
<li id="<%= @m[$i].id %>" <% if not @m[$i].inMetacodeSet(@metacode_set) %>class="toggledOff"<% end %>
|
||||
onclick="Metamaps.Admin.liClickHandler.call(this);">
|
||||
<img src="<%= @m[$i].icon %>" alt="<%= @m[$i].name %>" />
|
||||
<img src="<%= asset_path @m[$i].icon %>" alt="<%= @m[$i].name %>" />
|
||||
<p><%= @m[$i].name.downcase %></p>
|
||||
<div class="clearfloat"></div>
|
||||
</li>
|
||||
|
@ -70,7 +70,7 @@
|
|||
<% while $i < Metacode.all.length do %>
|
||||
<li id="<%= @m[$i].id %>" <% if not @m[$i].inMetacodeSet(@metacode_set) %>class="toggledOff"<% end %>
|
||||
onclick="Metamaps.Admin.liClickHandler.call(this);">
|
||||
<img src="<%= @m[$i].icon %>" alt="<%= @m[$i].name %>" />
|
||||
<img src="<%= asset_path @m[$i].icon %>" alt="<%= @m[$i].name %>" />
|
||||
<p><%= @m[$i].name.downcase %></p>
|
||||
<div class="clearfloat"></div>
|
||||
</li>
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
<td class='metacodeSetDesc'><%= metacode_set.desc %></td>
|
||||
<td>
|
||||
<% metacode_set.metacodes.each_with_index do |metacode, index| %>
|
||||
<img class='metacodeSetImage' src='<%= metacode.icon %>' />
|
||||
<img class='metacodeSetImage' src='<%= asset_path metacode.icon %>' />
|
||||
<% if (index+1)%4 == 0 %>
|
||||
<div class='clearfloat'></div>
|
||||
<% end %>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<% @metacodes.each do |metacode| %>
|
||||
<tr>
|
||||
<td><%= metacode.name %></td>
|
||||
<td class="iconURL"><%= metacode.icon %></td>
|
||||
<td class="iconURL"><%= asset_path metacode.icon %></td>
|
||||
<% if metacode.color %>
|
||||
<td class="iconColor" style="background-color: <%= metacode.color %>">
|
||||
<%= metacode.color %>
|
||||
|
@ -22,7 +22,7 @@
|
|||
<% else %>
|
||||
<td></td>
|
||||
<% end %>
|
||||
<td><img width='40' src='<%= metacode.icon %>' /></td>
|
||||
<td><img width='40' src='<%= asset_path metacode.icon %>' /></td>
|
||||
<td><%= link_to 'Edit', edit_metacode_path(metacode), :data => { :bypass => 'true'} %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
|
|
|
@ -61,7 +61,7 @@
|
|||
<span class="csTitle">Change Topic permission:</span> Click on 'Permission' icon (only for topic creator)
|
||||
</div>
|
||||
<div class="csItem indented">
|
||||
<span class="csTitle">Open Topic view:</span> Click on <img src="/assets/synapse16.png" width="16" align="middle" /> icon within topic card bar
|
||||
<span class="csTitle">Open Topic view:</span> Click on <img src="<%= asset_path 'synapse16.png' %>" width="16" align="middle" /> icon within topic card bar
|
||||
</div>
|
||||
<div class="csItem indented">
|
||||
<span class="csTitle">Close 'Topic' card:</span> Click on canvas
|
||||
|
|
|
@ -70,13 +70,13 @@
|
|||
|
||||
@metacodes.each_with_index do |metacode, index|
|
||||
@metacodelist += '<li data-id="' + metacode.id.to_s + '">'
|
||||
@metacodelist += '<img src="' + metacode.icon + '" data-id="' + metacode.id.to_s + '" alt="' + metacode.name + '" />'
|
||||
@metacodelist += '<img src="' + asset_path(metacode.icon) + '" data-id="' + metacode.id.to_s + '" alt="' + metacode.name + '" />'
|
||||
@metacodelist += '<p>' + metacode.name.downcase + '</p></li>'
|
||||
end
|
||||
@synapses.each_with_index do |synapse, index|
|
||||
d = synapse.desc || ""
|
||||
@synapselist += '<li data-id="' + d + '">'
|
||||
@synapselist += '<img src="/assets/synapse16.png" alt="synapse icon" /><p>' + d
|
||||
@synapselist += '<img src="' + asset_path('synapse16.png') + '" alt="synapse icon" /><p>' + d
|
||||
@synapselist += '</p></li>'
|
||||
end
|
||||
@mappers.each_with_index do |mapper, index|
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<ul>
|
||||
<% set.metacodes.sort { |a, b| a.name <=> b.name }.each do |m| %>
|
||||
<li data-id="<%= m.id.to_s %>">
|
||||
<img width="24" height="24" src="<%= m.icon %>" alt="<%= m.name %>" />
|
||||
<img width="24" height="24" src="<%= asset_path m.icon %>" alt="<%= m.name %>" />
|
||||
<div class="mSelectName"><%= m.name %></div>
|
||||
<div class="clearfloat"></div>
|
||||
</li>
|
||||
|
@ -26,7 +26,7 @@
|
|||
<ul>
|
||||
<% Metacode.order("name").all.each do |m| %>
|
||||
<li data-id="<%= m.id.to_s %>">
|
||||
<img width="24" height="24" src="<%= m.icon %>" alt="<%= m.name %>" />
|
||||
<img width="24" height="24" src="<%= asset_path m.icon %>" alt="<%= m.name %>" />
|
||||
<div class="mSelectName"><%= m.name %></div>
|
||||
<div class="clearfloat"></div>
|
||||
</li>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
data-metacodes="<%= m.metacodes.map(&:id).join(',') %>">
|
||||
<% @list = '' %>
|
||||
<% m.metacodes.sort{|x,y| x.name <=> y.name }.each_with_index do |m, index| %>
|
||||
<% @list += '<li><img src="' + m.icon + '" alt="' + m.name + '" /><p>' + m.name.downcase + '</p><div class="clearfloat"></div></li>' %>
|
||||
<% @list += '<li><img src="' + asset_path(m.icon) + '" alt="' + m.name + '" /><p>' + m.name.downcase + '</p><div class="clearfloat"></div></li>' %>
|
||||
<% end %>
|
||||
<div class="metacodeSwitchTab">
|
||||
<p class="setDesc"><%= m.desc %></p>
|
||||
|
@ -53,7 +53,7 @@
|
|||
<% else %>
|
||||
<% mClass = "toggledOff" %>
|
||||
<% end %>
|
||||
<% @list += '<li id="' + m.id.to_s + '" data-name="' + m.name + '" class="' + mClass + '"><img src="' + m.icon + '" alt="' + m.name + '" /><p>' + m.name.downcase + '</p><div class="clearfloat"></div></li>' %>
|
||||
<% @list += '<li id="' + m.id.to_s + '" data-name="' + m.name + '" class="' + mClass + '"><img src="' + asset_path(m.icon) + '" alt="' + m.name + '" /><p>' + m.name.downcase + '</p><div class="clearfloat"></div></li>' %>
|
||||
<% end %>
|
||||
|
||||
<div class="customMetacodeList">
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
<% end %>
|
||||
<% @metacodes.sort! {|m1,m2| m2.name.downcase <=> m1.name.downcase }.rotate!(-1) %>
|
||||
<% @metacodes.each do |metacode| %>
|
||||
<img class="cloudcarousel" width="40" height="40" src="<%= metacode.icon %>" alt="<%= metacode.name %>" title="<%= metacode.name %>"/>
|
||||
<img class="cloudcarousel" width="40" height="40" src="<%= asset_path metacode.icon %>" alt="<%= metacode.name %>" title="<%= metacode.name %>"/>
|
||||
<% end %>
|
||||
</div>
|
||||
<%= form.text_field :name, :maxlength => 140, :placeholder => "title..." %>
|
||||
|
|
|
@ -2,12 +2,7 @@ require File.expand_path('../boot', __FILE__)
|
|||
|
||||
require 'rails/all'
|
||||
|
||||
if defined?(Bundler)
|
||||
# If you precompile assets before deploying to production, use this line
|
||||
Bundler.require(*Rails.groups(:assets => %w(development test)))
|
||||
# If you want your assets lazily compiled in production, use this line
|
||||
# Bundler.require(:default, :assets, Rails.env)
|
||||
end
|
||||
Bundler.require(:default, Rails.env)
|
||||
|
||||
module Metamaps
|
||||
class Application < Rails::Application
|
||||
|
@ -44,14 +39,7 @@ module Metamaps
|
|||
# like if you have constraints or database-specific column types
|
||||
# config.active_record.schema_format = :sql
|
||||
|
||||
# Enforce whitelist mode for mass assignment.
|
||||
# This will create an empty whitelist of attributes available for mass-assignment for all models
|
||||
# in your app. As such, your models will need to explicitly whitelist or blacklist accessible
|
||||
# parameters by using an attr_accessible or attr_protected declaration.
|
||||
# config.active_record.whitelist_attributes = true
|
||||
|
||||
# Enable the asset pipeline
|
||||
config.assets.enabled = true
|
||||
config.assets.initialize_on_precompile = false
|
||||
|
||||
# Version of your assets, change this if you want to expire all your assets
|
||||
|
@ -60,5 +48,6 @@ module Metamaps
|
|||
config.generators do |g|
|
||||
g.test_framework :rspec
|
||||
end
|
||||
config.active_record.raise_in_transactional_callbacks = true
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,4 +1,12 @@
|
|||
require 'rubygems'
|
||||
require 'rails/commands/server'
|
||||
module Rails
|
||||
class Server
|
||||
def default_options
|
||||
super.merge(Host: '0.0.0.0', Port: 3000)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Set up gems listed in the Gemfile.
|
||||
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
Metamaps::Application.configure do
|
||||
# Settings specified here will take precedence over those in config/application.rb
|
||||
|
||||
config.log_level = :info
|
||||
config.eager_load = false
|
||||
|
||||
# In the development environment your application's code is reloaded on
|
||||
# every request. This slows down response time but is perfect for development
|
||||
# since you don't have to restart the web server when you make code changes.
|
||||
config.cache_classes = false
|
||||
|
||||
# Log error messages when you accidentally call methods on nil.
|
||||
config.whiny_nils = true
|
||||
|
||||
# Show full error reports and disable caching
|
||||
config.consider_all_requests_local = true
|
||||
config.action_controller.perform_caching = false
|
||||
|
@ -40,19 +40,6 @@ Metamaps::Application.configure do
|
|||
# Print deprecation notices to the Rails logger
|
||||
config.active_support.deprecation = :log
|
||||
|
||||
# Only use best-standards-support built into browsers
|
||||
config.action_dispatch.best_standards_support = :builtin
|
||||
|
||||
# Raise exception on mass assignment protection for Active Record models
|
||||
config.active_record.mass_assignment_sanitizer = :strict
|
||||
|
||||
# Log the query plan for queries taking more than this (works
|
||||
# with SQLite, MySQL, and PostgreSQL)
|
||||
config.active_record.auto_explain_threshold_in_seconds = 0.5
|
||||
|
||||
# Do not compress assets
|
||||
config.assets.compress = false
|
||||
|
||||
# Expands the lines which load the assets
|
||||
config.assets.debug = true
|
||||
end
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
Metamaps::Application.configure do
|
||||
# Settings specified here will take precedence over those in config/application.rb
|
||||
|
||||
config.log_level = :warn
|
||||
config.eager_load = true
|
||||
config.assets.js_compressor = :uglifier
|
||||
|
||||
# Code is not reloaded between requests
|
||||
config.cache_classes = true
|
||||
|
||||
|
@ -9,7 +13,9 @@ Metamaps::Application.configure do
|
|||
config.action_controller.perform_caching = true
|
||||
|
||||
# Disable Rails's static asset server (Apache or nginx will already do this)
|
||||
config.serve_static_assets = false
|
||||
config.serve_static_files = true
|
||||
|
||||
config.assets.compile = false
|
||||
|
||||
# Compress JavaScripts and CSS
|
||||
config.assets.compress = true
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
Metamaps::Application.configure do
|
||||
# Settings specified here will take precedence over those in config/application.rb
|
||||
|
||||
config.eager_load = false
|
||||
|
||||
# The test environment is used exclusively to run your application's
|
||||
# test suite. You never need to work with it otherwise. Remember that
|
||||
# your test database is "scratch space" for the test suite and is wiped
|
||||
|
@ -11,9 +13,6 @@ Metamaps::Application.configure do
|
|||
config.serve_static_assets = true
|
||||
config.static_cache_control = "public, max-age=3600"
|
||||
|
||||
# Log error messages when you accidentally call methods on nil
|
||||
config.whiny_nils = true
|
||||
|
||||
# Show full error reports and disable caching
|
||||
config.consider_all_requests_local = true
|
||||
config.action_controller.perform_caching = false
|
||||
|
@ -29,9 +28,12 @@ Metamaps::Application.configure do
|
|||
# ActionMailer::Base.deliveries array.
|
||||
config.action_mailer.delivery_method = :test
|
||||
|
||||
# Raise exception on mass assignment protection for Active Record models
|
||||
config.active_record.mass_assignment_sanitizer = :strict
|
||||
|
||||
# Print deprecation notices to the stderr
|
||||
config.active_support.deprecation = :stderr
|
||||
|
||||
#assets config
|
||||
config.assets.compile = true
|
||||
config.assets.compress = false
|
||||
config.assets.debug = false
|
||||
config.assets.digest = false
|
||||
end
|
||||
|
|
|
@ -4,4 +4,4 @@
|
|||
# If you change this key, all old signed cookies will become invalid!
|
||||
# Make sure the secret is at least 30 characters and all random,
|
||||
# no regular words or you'll be exposed to dictionary attacks.
|
||||
Metamaps::Application.config.secret_token = '267c8a84f63963282f45bc3010eaddf027abfab58fc759d6e239c8005f85ee99d6d01b1ab6394cdee9ca7f8c9213a0cf91d3d8d3350f096123e2caccbcc0924f'
|
||||
Metamaps::Application.config.secret_key_base = '267c8a84f63963282f45bc3010eaddf027abfab58fc759d6e239c8005f85ee99d6d01b1ab6394cdee9ca7f8c9213a0cf91d3d8d3350f096123e2caccbcc0924f'
|
||||
|
|
|
@ -2,12 +2,12 @@ Metamaps::Application.routes.draw do
|
|||
|
||||
root to: 'main#home', via: :get
|
||||
|
||||
match 'request', to: 'main#requestinvite', via: :get, as: :request
|
||||
get 'request', to: 'main#requestinvite', as: :request
|
||||
|
||||
match 'search/topics', to: 'main#searchtopics', via: :get, as: :searchtopics
|
||||
match 'search/maps', to: 'main#searchmaps', via: :get, as: :searchmaps
|
||||
match 'search/mappers', to: 'main#searchmappers', via: :get, as: :searchmappers
|
||||
match 'search/synapses', to: 'main#searchsynapses', via: :get, as: :searchsynapses
|
||||
get 'search/topics', to: 'main#searchtopics', as: :searchtopics
|
||||
get 'search/maps', to: 'main#searchmaps', as: :searchmaps
|
||||
get 'search/mappers', to: 'main#searchmappers', as: :searchmappers
|
||||
get 'search/synapses', to: 'main#searchsynapses', as: :searchsynapses
|
||||
|
||||
resources :mappings, except: [:index, :new, :edit]
|
||||
resources :metacode_sets, :except => [:show]
|
||||
|
@ -16,28 +16,28 @@ Metamaps::Application.routes.draw do
|
|||
resources :topics, except: [:index, :new, :edit] do
|
||||
get :autocomplete_topic, :on => :collection
|
||||
end
|
||||
match 'topics/:id/network', to: 'topics#network', via: :get, as: :network
|
||||
match 'topics/:id/relative_numbers', to: 'topics#relative_numbers', via: :get, as: :relative_numbers
|
||||
match 'topics/:id/relatives', to: 'topics#relatives', via: :get, as: :relatives
|
||||
get 'topics/:id/network', to: 'topics#network', as: :network
|
||||
get 'topics/:id/relative_numbers', to: 'topics#relative_numbers', as: :relative_numbers
|
||||
get 'topics/:id/relatives', to: 'topics#relatives', as: :relatives
|
||||
|
||||
match 'explore/active', to: 'maps#index', via: :get, as: :activemaps
|
||||
match 'explore/featured', to: 'maps#index', via: :get, as: :featuredmaps
|
||||
match 'explore/mine', to: 'maps#index', via: :get, as: :mymaps
|
||||
match 'explore/mapper/:id', to: 'maps#index', via: :get, as: :usermaps
|
||||
get 'explore/active', to: 'maps#index', as: :activemaps
|
||||
get 'explore/featured', to: 'maps#index', as: :featuredmaps
|
||||
get 'explore/mine', to: 'maps#index', as: :mymaps
|
||||
get 'explore/mapper/:id', to: 'maps#index', as: :usermaps
|
||||
resources :maps, except: [:new, :edit]
|
||||
match 'maps/:id/contains', to: 'maps#contains', via: :get, as: :contains
|
||||
match 'maps/:id/upload_screenshot', to: 'maps#screenshot', via: :post, as: :screenshot
|
||||
get 'maps/:id/contains', to: 'maps#contains', as: :contains
|
||||
get 'maps/:id/upload_screenshot', to: 'maps#screenshot', as: :screenshot
|
||||
|
||||
devise_for :users, controllers: { registrations: 'users/registrations', passwords: 'users/passwords', sessions: 'devise/sessions' }, :skip => [:sessions]
|
||||
devise_for :users, controllers: { registrations: 'users/registrations', passwords: 'users/passwords', sessions: 'devise/sessions' }, :skip => :sessions
|
||||
|
||||
devise_scope :user do
|
||||
get 'login' => 'devise/sessions#new', :as => :new_user_session
|
||||
post 'login' => 'devise/sessions#create', :as => :user_session
|
||||
get 'logout' => 'devise/sessions#destroy', :as => :destroy_user_session
|
||||
get 'join' => 'devise/registrations#new', :as => :new_user_registration
|
||||
get 'join' => 'devise/registrations#new', :as => :new_user_registration_path
|
||||
end
|
||||
|
||||
match 'users/:id/details', to: 'users#details', via: :get, as: :details
|
||||
match 'user/updatemetacodes', to: 'users#updatemetacodes', via: :post, as: :updatemetacodes
|
||||
get 'users/:id/details', to: 'users#details', as: :details
|
||||
post 'user/updatemetacodes', to: 'users#updatemetacodes', as: :updatemetacodes
|
||||
resources :users, except: [:index, :destroy]
|
||||
end
|
||||
|
|
12
config/secrets.yml.default
Normal file
12
config/secrets.yml.default
Normal file
|
@ -0,0 +1,12 @@
|
|||
defaults: &defaults
|
||||
missing_map_png_url: '/assets/missing-map.png'
|
||||
user_png_url: '/assets/user.png'
|
||||
|
||||
development:
|
||||
<<: *defaults
|
||||
|
||||
test:
|
||||
<<: *defaults
|
||||
|
||||
production:
|
||||
<<: *defaults
|
32
db/migrate/20151001024122_mapping_polymorphism.rb
Normal file
32
db/migrate/20151001024122_mapping_polymorphism.rb
Normal file
|
@ -0,0 +1,32 @@
|
|||
class MappingPolymorphism < ActiveRecord::Migration
|
||||
def up
|
||||
add_column :mappings, :mappable_id, :integer
|
||||
add_column :mappings, :mappable_type, :string
|
||||
add_index :mappings, [:mappable_id, :mappable_type]
|
||||
|
||||
Mapping.find_each do |mapping|
|
||||
if mapping.synapse_id.nil? and mapping.topic_id.nil?
|
||||
puts "Mapping id=#{mapping.id} has no valid id, skipping!"
|
||||
next
|
||||
end
|
||||
if not mapping.synapse_id.nil? and not mapping.topic_id.nil?
|
||||
puts "Mapping id=#{mapping.id} has both topic and synapse ids, skipping!"
|
||||
next
|
||||
end
|
||||
|
||||
unless mapping.synapse_id.nil?
|
||||
mapping.mappable = Synapse.find(mapping.synapse_id)
|
||||
else
|
||||
next if mapping.topic_id == 0
|
||||
mapping.mappable = Topic.find(mapping.topic_id)
|
||||
end
|
||||
mapping.save
|
||||
end
|
||||
end
|
||||
|
||||
def down
|
||||
remove_index :mappings, [:mappable_id, :mappable_type]
|
||||
remove_column :mappings, :mappable_id, :integer
|
||||
remove_column :mappings, :mappable_type, :string
|
||||
end
|
||||
end
|
16
db/migrate/20151023143719_add_missing_indexes.rb
Normal file
16
db/migrate/20151023143719_add_missing_indexes.rb
Normal file
|
@ -0,0 +1,16 @@
|
|||
class AddMissingIndexes < ActiveRecord::Migration
|
||||
def change
|
||||
add_index :topics, :user_id
|
||||
add_index :topics, :metacode_id
|
||||
add_index :synapses, [:node2_id, :node2_id]
|
||||
add_index :synapses, [:node1_id, :node1_id]
|
||||
add_index :synapses, :user_id
|
||||
add_index :synapses, :node1_id
|
||||
add_index :synapses, :node2_id
|
||||
add_index :mappings, [:map_id, :topic_id]
|
||||
add_index :mappings, [:map_id, :synapse_id]
|
||||
add_index :mappings, :map_id
|
||||
add_index :mappings, :user_id
|
||||
add_index :maps, :user_id
|
||||
end
|
||||
end
|
|
@ -0,0 +1,8 @@
|
|||
class RemoveAssetPathsFromMetacodes < ActiveRecord::Migration
|
||||
def change
|
||||
Metacode.all.each do |metacode|
|
||||
metacode.icon = metacode.icon.gsub(/^\/assets\//, '')
|
||||
metacode.save
|
||||
end
|
||||
end
|
||||
end
|
90
db/schema.rb
90
db/schema.rb
|
@ -9,21 +9,24 @@
|
|||
# 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).
|
||||
#
|
||||
# It's strongly recommended to check this file into your version control system.
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(:version => 20141121204712) do
|
||||
ActiveRecord::Schema.define(version: 20151025083043) do
|
||||
|
||||
create_table "in_metacode_sets", :force => true do |t|
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
||||
create_table "in_metacode_sets", force: :cascade do |t|
|
||||
t.integer "metacode_id"
|
||||
t.integer "metacode_set_id"
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
end
|
||||
|
||||
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_id"], name: "index_in_metacode_sets_on_metacode_id", using: :btree
|
||||
add_index "in_metacode_sets", ["metacode_set_id"], name: "index_in_metacode_sets_on_metacode_set_id", using: :btree
|
||||
|
||||
create_table "mappings", :force => true do |t|
|
||||
create_table "mappings", force: :cascade do |t|
|
||||
t.text "category"
|
||||
t.integer "xloc"
|
||||
t.integer "yloc"
|
||||
|
@ -31,18 +34,26 @@ ActiveRecord::Schema.define(:version => 20141121204712) do
|
|||
t.integer "synapse_id"
|
||||
t.integer "map_id"
|
||||
t.integer "user_id"
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.integer "mappable_id"
|
||||
t.string "mappable_type"
|
||||
end
|
||||
|
||||
create_table "maps", :force => true do |t|
|
||||
add_index "mappings", ["map_id", "synapse_id"], name: "index_mappings_on_map_id_and_synapse_id", using: :btree
|
||||
add_index "mappings", ["map_id", "topic_id"], name: "index_mappings_on_map_id_and_topic_id", using: :btree
|
||||
add_index "mappings", ["map_id"], name: "index_mappings_on_map_id", using: :btree
|
||||
add_index "mappings", ["mappable_id", "mappable_type"], name: "index_mappings_on_mappable_id_and_mappable_type", using: :btree
|
||||
add_index "mappings", ["user_id"], name: "index_mappings_on_user_id", using: :btree
|
||||
|
||||
create_table "maps", force: :cascade do |t|
|
||||
t.text "name"
|
||||
t.boolean "arranged"
|
||||
t.text "desc"
|
||||
t.text "permission"
|
||||
t.integer "user_id"
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.boolean "featured"
|
||||
t.string "screenshot_file_name"
|
||||
t.string "screenshot_content_type"
|
||||
|
@ -50,26 +61,28 @@ ActiveRecord::Schema.define(:version => 20141121204712) do
|
|||
t.datetime "screenshot_updated_at"
|
||||
end
|
||||
|
||||
create_table "metacode_sets", :force => true do |t|
|
||||
add_index "maps", ["user_id"], name: "index_maps_on_user_id", using: :btree
|
||||
|
||||
create_table "metacode_sets", force: :cascade do |t|
|
||||
t.string "name"
|
||||
t.text "desc"
|
||||
t.integer "user_id"
|
||||
t.boolean "mapperContributed"
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
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", using: :btree
|
||||
|
||||
create_table "metacodes", :force => true do |t|
|
||||
create_table "metacodes", force: :cascade do |t|
|
||||
t.text "name"
|
||||
t.string "icon"
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.string "color"
|
||||
end
|
||||
|
||||
create_table "synapses", :force => true do |t|
|
||||
create_table "synapses", force: :cascade do |t|
|
||||
t.text "desc"
|
||||
t.text "category"
|
||||
t.text "weight"
|
||||
|
@ -77,19 +90,25 @@ ActiveRecord::Schema.define(:version => 20141121204712) do
|
|||
t.integer "node1_id"
|
||||
t.integer "node2_id"
|
||||
t.integer "user_id"
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
end
|
||||
|
||||
create_table "topics", :force => true do |t|
|
||||
add_index "synapses", ["node1_id", "node1_id"], name: "index_synapses_on_node1_id_and_node1_id", using: :btree
|
||||
add_index "synapses", ["node1_id"], name: "index_synapses_on_node1_id", using: :btree
|
||||
add_index "synapses", ["node2_id", "node2_id"], name: "index_synapses_on_node2_id_and_node2_id", using: :btree
|
||||
add_index "synapses", ["node2_id"], name: "index_synapses_on_node2_id", using: :btree
|
||||
add_index "synapses", ["user_id"], name: "index_synapses_on_user_id", using: :btree
|
||||
|
||||
create_table "topics", force: :cascade do |t|
|
||||
t.text "name"
|
||||
t.text "desc"
|
||||
t.text "link"
|
||||
t.text "permission"
|
||||
t.integer "user_id"
|
||||
t.integer "metacode_id"
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.string "image_file_name"
|
||||
t.string "image_content_type"
|
||||
t.integer "image_file_size"
|
||||
|
@ -100,25 +119,28 @@ ActiveRecord::Schema.define(:version => 20141121204712) do
|
|||
t.datetime "audio_updated_at"
|
||||
end
|
||||
|
||||
create_table "users", :force => true do |t|
|
||||
add_index "topics", ["metacode_id"], name: "index_topics_on_metacode_id", using: :btree
|
||||
add_index "topics", ["user_id"], name: "index_topics_on_user_id", using: :btree
|
||||
|
||||
create_table "users", force: :cascade do |t|
|
||||
t.string "name"
|
||||
t.string "email"
|
||||
t.text "settings"
|
||||
t.string "code", :limit => 8
|
||||
t.string "joinedwithcode", :limit => 8
|
||||
t.string "code", limit: 8
|
||||
t.string "joinedwithcode", limit: 8
|
||||
t.string "crypted_password"
|
||||
t.string "password_salt"
|
||||
t.string "persistence_token"
|
||||
t.string "perishable_token"
|
||||
t.datetime "created_at", :null => false
|
||||
t.datetime "updated_at", :null => false
|
||||
t.string "encrypted_password", :limit => 128, :default => ""
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.string "encrypted_password", limit: 128, default: ""
|
||||
t.string "remember_token"
|
||||
t.datetime "remember_created_at"
|
||||
t.string "reset_password_token"
|
||||
t.datetime "last_sign_in_at"
|
||||
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.string "current_sign_in_ip"
|
||||
t.datetime "reset_password_sent_at"
|
||||
|
@ -130,6 +152,6 @@ ActiveRecord::Schema.define(:version => 20141121204712) do
|
|||
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, using: :btree
|
||||
|
||||
end
|
||||
|
|
24
metamaps-qa-steps.txt
Normal file
24
metamaps-qa-steps.txt
Normal file
|
@ -0,0 +1,24 @@
|
|||
Metamaps Test Suite
|
||||
|
||||
1) Log in to the interface
|
||||
2) Create an account using your join code
|
||||
3) Check your user's "generation"
|
||||
4) Create three maps: private, public, and another public
|
||||
5) Change the last map's permissions to commons
|
||||
6) Change a map's name
|
||||
7) Create a topic on map #1
|
||||
8) Verify (in a private window or another browser) that the second user can't acccess map #1
|
||||
9) Create a topic on map #2
|
||||
10) Verify that the second user can't edit map #2
|
||||
11) Create a topic on map #3
|
||||
12) Verify that the second can edit map #3
|
||||
13) Pull a topic from map #1 to map #3
|
||||
14) Create a private topic on map #1
|
||||
15) Verify that the private topic can be pulled from map #1 by the same user
|
||||
16) Verify that the private topic can't be pulled from map #1 by another user
|
||||
17) Login as admin. Change metacode sets.
|
||||
18) Add a number of topics to one of your maps. Reload to see if they are still there.
|
||||
19) Add a number of synapses to one of your maps. Reload to see if they are still there.
|
||||
20) Rearrange one of your maps. Reload to see if the layout is preserved.
|
||||
21) Set the screenshot for one of your maps, and verify the index of maps is updated.
|
||||
22) Open two browsers on map #3 and verify that realtime editing works.
|
Loading…
Reference in a new issue