added ability to add synapse from any page on which there is a map
This commit is contained in:
parent
adf24530d8
commit
dfb92b89a5
22 changed files with 213 additions and 312 deletions
261
README.rdoc
261
README.rdoc
|
@ -1,261 +0,0 @@
|
|||
== Welcome to Rails
|
||||
|
||||
Rails is a web-application framework that includes everything needed to create
|
||||
database-backed web applications according to the Model-View-Control pattern.
|
||||
|
||||
This pattern splits the view (also called the presentation) into "dumb"
|
||||
templates that are primarily responsible for inserting pre-built data in between
|
||||
HTML tags. The model contains the "smart" domain objects (such as Account,
|
||||
Product, Person, Post) that holds all the business logic and knows how to
|
||||
persist themselves to a database. The controller handles the incoming requests
|
||||
(such as Save New Account, Update Product, Show Post) by manipulating the model
|
||||
and directing data to the view.
|
||||
|
||||
In Rails, the model is handled by what's called an object-relational mapping
|
||||
layer entitled Active Record. This layer allows you to present the data from
|
||||
database rows as objects and embellish these data objects with business logic
|
||||
methods. You can read more about Active Record in
|
||||
link:files/vendor/rails/activerecord/README.html.
|
||||
|
||||
The controller and view are handled by the Action Pack, which handles both
|
||||
layers by its two parts: Action View and Action Controller. These two layers
|
||||
are bundled in a single package due to their heavy interdependence. This is
|
||||
unlike the relationship between the Active Record and Action Pack that is much
|
||||
more separate. Each of these packages can be used independently outside of
|
||||
Rails. You can read more about Action Pack in
|
||||
link:files/vendor/rails/actionpack/README.html.
|
||||
|
||||
|
||||
== Getting Started
|
||||
|
||||
1. At the command prompt, create a new Rails application:
|
||||
<tt>rails new myapp</tt> (where <tt>myapp</tt> is the application name)
|
||||
|
||||
2. Change directory to <tt>myapp</tt> and start the web server:
|
||||
<tt>cd myapp; rails server</tt> (run with --help for options)
|
||||
|
||||
3. Go to http://localhost:3000/ and you'll see:
|
||||
"Welcome aboard: You're riding Ruby on Rails!"
|
||||
|
||||
4. Follow the guidelines to start developing your application. You can find
|
||||
the following resources handy:
|
||||
|
||||
* The Getting Started Guide: http://guides.rubyonrails.org/getting_started.html
|
||||
* Ruby on Rails Tutorial Book: http://www.railstutorial.org/
|
||||
|
||||
|
||||
== Debugging Rails
|
||||
|
||||
Sometimes your application goes wrong. Fortunately there are a lot of tools that
|
||||
will help you debug it and get it back on the rails.
|
||||
|
||||
First area to check is the application log files. Have "tail -f" commands
|
||||
running on the server.log and development.log. Rails will automatically display
|
||||
debugging and runtime information to these files. Debugging info will also be
|
||||
shown in the browser on requests from 127.0.0.1.
|
||||
|
||||
You can also log your own messages directly into the log file from your code
|
||||
using the Ruby logger class from inside your controllers. Example:
|
||||
|
||||
class WeblogController < ActionController::Base
|
||||
def destroy
|
||||
@weblog = Weblog.find(params[:id])
|
||||
@weblog.destroy
|
||||
logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!")
|
||||
end
|
||||
end
|
||||
|
||||
The result will be a message in your log file along the lines of:
|
||||
|
||||
Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1!
|
||||
|
||||
More information on how to use the logger is at http://www.ruby-doc.org/core/
|
||||
|
||||
Also, Ruby documentation can be found at http://www.ruby-lang.org/. There are
|
||||
several books available online as well:
|
||||
|
||||
* Programming Ruby: http://www.ruby-doc.org/docs/ProgrammingRuby/ (Pickaxe)
|
||||
* Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide)
|
||||
|
||||
These two books will bring you up to speed on the Ruby language and also on
|
||||
programming in general.
|
||||
|
||||
|
||||
== Debugger
|
||||
|
||||
Debugger support is available through the debugger command when you start your
|
||||
Mongrel or WEBrick server with --debugger. This means that you can break out of
|
||||
execution at any point in the code, investigate and change the model, and then,
|
||||
resume execution! You need to install ruby-debug to run the server in debugging
|
||||
mode. With gems, use <tt>sudo gem install ruby-debug</tt>. Example:
|
||||
|
||||
class WeblogController < ActionController::Base
|
||||
def index
|
||||
@posts = Post.all
|
||||
debugger
|
||||
end
|
||||
end
|
||||
|
||||
So the controller will accept the action, run the first line, then present you
|
||||
with a IRB prompt in the server window. Here you can do things like:
|
||||
|
||||
>> @posts.inspect
|
||||
=> "[#<Post:0x14a6be8
|
||||
@attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>,
|
||||
#<Post:0x14a6620
|
||||
@attributes={"title"=>"Rails", "body"=>"Only ten..", "id"=>"2"}>]"
|
||||
>> @posts.first.title = "hello from a debugger"
|
||||
=> "hello from a debugger"
|
||||
|
||||
...and even better, you can examine how your runtime objects actually work:
|
||||
|
||||
>> f = @posts.first
|
||||
=> #<Post:0x13630c4 @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>
|
||||
>> f.
|
||||
Display all 152 possibilities? (y or n)
|
||||
|
||||
Finally, when you're ready to resume execution, you can enter "cont".
|
||||
|
||||
|
||||
== Console
|
||||
|
||||
The console is a Ruby shell, which allows you to interact with your
|
||||
application's domain model. Here you'll have all parts of the application
|
||||
configured, just like it is when the application is running. You can inspect
|
||||
domain models, change values, and save to the database. Starting the script
|
||||
without arguments will launch it in the development environment.
|
||||
|
||||
To start the console, run <tt>rails console</tt> from the application
|
||||
directory.
|
||||
|
||||
Options:
|
||||
|
||||
* Passing the <tt>-s, --sandbox</tt> argument will rollback any modifications
|
||||
made to the database.
|
||||
* Passing an environment name as an argument will load the corresponding
|
||||
environment. Example: <tt>rails console production</tt>.
|
||||
|
||||
To reload your controllers and models after launching the console run
|
||||
<tt>reload!</tt>
|
||||
|
||||
More information about irb can be found at:
|
||||
link:http://www.rubycentral.org/pickaxe/irb.html
|
||||
|
||||
|
||||
== dbconsole
|
||||
|
||||
You can go to the command line of your database directly through <tt>rails
|
||||
dbconsole</tt>. You would be connected to the database with the credentials
|
||||
defined in database.yml. Starting the script without arguments will connect you
|
||||
to the development database. Passing an argument will connect you to a different
|
||||
database, like <tt>rails dbconsole production</tt>. Currently works for MySQL,
|
||||
PostgreSQL and SQLite 3.
|
||||
|
||||
== Description of Contents
|
||||
|
||||
The default directory structure of a generated Ruby on Rails application:
|
||||
|
||||
|-- app
|
||||
| |-- assets
|
||||
| |-- images
|
||||
| |-- javascripts
|
||||
| `-- stylesheets
|
||||
| |-- controllers
|
||||
| |-- helpers
|
||||
| |-- mailers
|
||||
| |-- models
|
||||
| `-- views
|
||||
| `-- layouts
|
||||
|-- config
|
||||
| |-- environments
|
||||
| |-- initializers
|
||||
| `-- locales
|
||||
|-- db
|
||||
|-- doc
|
||||
|-- lib
|
||||
| `-- tasks
|
||||
|-- log
|
||||
|-- public
|
||||
|-- script
|
||||
|-- test
|
||||
| |-- fixtures
|
||||
| |-- functional
|
||||
| |-- integration
|
||||
| |-- performance
|
||||
| `-- unit
|
||||
|-- tmp
|
||||
| |-- cache
|
||||
| |-- pids
|
||||
| |-- sessions
|
||||
| `-- sockets
|
||||
`-- vendor
|
||||
|-- assets
|
||||
`-- stylesheets
|
||||
`-- plugins
|
||||
|
||||
app
|
||||
Holds all the code that's specific to this particular application.
|
||||
|
||||
app/assets
|
||||
Contains subdirectories for images, stylesheets, and JavaScript files.
|
||||
|
||||
app/controllers
|
||||
Holds controllers that should be named like weblogs_controller.rb for
|
||||
automated URL mapping. All controllers should descend from
|
||||
ApplicationController which itself descends from ActionController::Base.
|
||||
|
||||
app/models
|
||||
Holds models that should be named like post.rb. Models descend from
|
||||
ActiveRecord::Base by default.
|
||||
|
||||
app/views
|
||||
Holds the template files for the view that should be named like
|
||||
weblogs/index.html.erb for the WeblogsController#index action. All views use
|
||||
eRuby syntax by default.
|
||||
|
||||
app/views/layouts
|
||||
Holds the template files for layouts to be used with views. This models the
|
||||
common header/footer method of wrapping views. In your views, define a layout
|
||||
using the <tt>layout :default</tt> and create a file named default.html.erb.
|
||||
Inside default.html.erb, call <% yield %> to render the view using this
|
||||
layout.
|
||||
|
||||
app/helpers
|
||||
Holds view helpers that should be named like weblogs_helper.rb. These are
|
||||
generated for you automatically when using generators for controllers.
|
||||
Helpers can be used to wrap functionality for your views into methods.
|
||||
|
||||
config
|
||||
Configuration files for the Rails environment, the routing map, the database,
|
||||
and other dependencies.
|
||||
|
||||
db
|
||||
Contains the database schema in schema.rb. db/migrate contains all the
|
||||
sequence of Migrations for your schema.
|
||||
|
||||
doc
|
||||
This directory is where your application documentation will be stored when
|
||||
generated using <tt>rake doc:app</tt>
|
||||
|
||||
lib
|
||||
Application specific libraries. Basically, any kind of custom code that
|
||||
doesn't belong under controllers, models, or helpers. This directory is in
|
||||
the load path.
|
||||
|
||||
public
|
||||
The directory available for the web server. Also contains the dispatchers and the
|
||||
default HTML files. This should be set as the DOCUMENT_ROOT of your web
|
||||
server.
|
||||
|
||||
script
|
||||
Helper scripts for automation and generation.
|
||||
|
||||
test
|
||||
Unit and functional tests along with fixtures. When using the rails generate
|
||||
command, template test files will be generated for you and placed in this
|
||||
directory.
|
||||
|
||||
vendor
|
||||
External libraries that the application depends on. Also includes the plugins
|
||||
subdirectory. If the app has frozen rails, those gems also go here, under
|
||||
vendor/rails/. This directory is in the load path.
|
|
@ -94,6 +94,7 @@ function initFD(){
|
|||
Edge: {
|
||||
overridable: true,
|
||||
color: '#d1d1d1',
|
||||
//type: 'arrow',
|
||||
lineWidth: 0.4
|
||||
},
|
||||
//Native canvas text styling
|
||||
|
@ -265,18 +266,14 @@ function initFD(){
|
|||
// load JSON data.
|
||||
fd.loadJSON(json);
|
||||
// compute positions incrementally and animate.
|
||||
fd.computeIncremental({
|
||||
iter: 40,
|
||||
property: 'end',
|
||||
onStep: function(perc){
|
||||
},
|
||||
onComplete: function(){
|
||||
fd.animate({
|
||||
fd.compute()
|
||||
|
||||
$(document).ready(function() {
|
||||
fd.animate({
|
||||
modes: ['linear'],
|
||||
transition: $jit.Trans.Elastic.easeOut,
|
||||
duration: 2500
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
// end
|
||||
}
|
||||
|
|
|
@ -22,14 +22,27 @@
|
|||
$(document).ready(function() {
|
||||
$('.nodemargin').css('padding-top',$('.focus').css('height'));
|
||||
|
||||
|
||||
// if there's an add topic directly to page form loaded on the page you're on then let the user add one
|
||||
$('#newtopic').click(function(event){
|
||||
obj = document.getElementById('new_item');
|
||||
if (obj != null) {
|
||||
obj1 = document.getElementById('new_item');
|
||||
if (obj1 != null) {
|
||||
$('#new_synapse').css('display','none');
|
||||
$('#new_item').fadeIn('fast');
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
// if there's an add synapse directly to page form loaded on the page you're on then let the user add one
|
||||
$('#newsynapse').click(function(event){
|
||||
obj2 = document.getElementById('new_synapse');
|
||||
if (obj2 != null) {
|
||||
$('#new_item').css('display','none');
|
||||
$('#new_synapse').fadeIn('fast');
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
var sliding = false;
|
||||
$(".legend").hover(
|
||||
function () {
|
||||
|
|
|
@ -32,8 +32,8 @@ a {color:#2d6a5d; text-decoration:none;}
|
|||
|
||||
.new_session, .new_user, .new_item, .new_synapse, .edit_item, .edit_synapse { display: block; width: 350px; margin: 0 auto; background: #D1D1D1; padding: 20px; border-radius: 15px; color: #000; border:2px solid #000; }
|
||||
|
||||
.anypage .new_item { display: none; position:absolute; left:50%; top:50%; margin:-175px 0 0 -195px; border:2px solid #000; }
|
||||
#closenewtopic { position:absolute; top: 3px; right:3px; }
|
||||
.anypage .new_item, .anypage .new_synapse { display: none; position:absolute; left:50%; top:0; margin:200px 0 0 -195px; border:2px solid #000; }
|
||||
#closenewtopic, #closenewsynapse { position:absolute; top: 3px; right:3px; }
|
||||
|
||||
|
||||
label, select, input, textarea { display:block; }
|
||||
|
|
|
@ -16,9 +16,8 @@ class SynapsesController < ApplicationController
|
|||
def new
|
||||
@synapse = Synapse.new
|
||||
@user = current_user
|
||||
@allitems = Item.all
|
||||
|
||||
respond_with(@synapse, @allitems)
|
||||
respond_with(@synapse)
|
||||
end
|
||||
|
||||
# GET /synapse/:id
|
||||
|
@ -26,7 +25,7 @@ class SynapsesController < ApplicationController
|
|||
@synapse = Synapse.find(params[:id])
|
||||
|
||||
if @synapse
|
||||
@synapsejson = @synapse.self_as_json.html_safe
|
||||
@synapsejson = @synapse.selfplusnodes_as_json.html_safe
|
||||
end
|
||||
|
||||
respond_to do |format|
|
||||
|
|
2
app/models/map.rb
Normal file
2
app/models/map.rb
Normal file
|
@ -0,0 +1,2 @@
|
|||
class Map < ActiveRecord::Base
|
||||
end
|
|
@ -6,6 +6,15 @@ belongs_to :item1, :class_name => "Item", :foreign_key => "node1_id"
|
|||
belongs_to :item2, :class_name => "Item", :foreign_key => "node2_id"
|
||||
|
||||
def self_as_json
|
||||
Jbuilder.encode do |json|
|
||||
@synapsedata = Hash.new
|
||||
@synapsedata['$desc'] = self.desc
|
||||
@synapsedata['$category'] = self.category
|
||||
json.data @synapsedata
|
||||
end
|
||||
end
|
||||
|
||||
def selfplusnodes_as_json
|
||||
Jbuilder.encode do |json|
|
||||
@items = Array.new
|
||||
@items.push(self.item1)
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<div class="anypage">
|
||||
<%= form_for Item.new, url: items_path, remote: true do |form| %>
|
||||
<button id="closenewtopic" onclick="$('#new_item').fadeOut('fast'); $('#new_item')[0].reset(); return false;">close</button>
|
||||
<h3>Add Item</h3>
|
||||
<h3>Add Topic</h3>
|
||||
<label for="category">Category</label>
|
||||
<%= select_tag "category", options_from_collection_for_select(ItemCategory.all, "id", "name") %>
|
||||
<%= select_tag "category", options_from_collection_for_select(ItemCategory.order("name ASC").all, "id", "name") %>
|
||||
<label for="item_name">Title</label>
|
||||
<%= form.text_field :name %>
|
||||
<label for="item_desc">Description</label>
|
||||
|
|
|
@ -2,32 +2,44 @@ $('#new_item').fadeOut('fast');
|
|||
$('#new_item')[0].reset()
|
||||
|
||||
// if there's a map, add the node to that, if its in card view add card
|
||||
obj = document.getElementById('container');
|
||||
map2 = document.getElementById('container');
|
||||
|
||||
|
||||
if (obj != null) {
|
||||
if (map2 != null) {
|
||||
var newnode = <%= @item.self_as_json.html_safe %>;
|
||||
console.log(newnode);
|
||||
|
||||
if (fd != null) {
|
||||
fd.graph.addNode(newnode);
|
||||
var temp = fd.graph.getNode('<%= @item.id %>');
|
||||
temp.setData('dim', 1, 'start');
|
||||
temp.setData('dim', 40, 'end');
|
||||
fd.fx.animate({
|
||||
modes: ['node-property:dim'],
|
||||
duration: 400
|
||||
});
|
||||
fd.graph.addNode(newnode);
|
||||
var temp = fd.graph.getNode('<%= @item.id %>');
|
||||
temp.setData('dim', 1, 'start');
|
||||
temp.setData('dim', 40, 'end');
|
||||
temp.setPos(new $jit.Complex(0, 0), 'current');
|
||||
temp.setPos(new $jit.Complex(0, 0), 'start');
|
||||
temp.setPos(new $jit.Complex(0, 0), 'end');
|
||||
fd.fx.plotNode(temp, fd.canvas);
|
||||
fd.fx.animate({
|
||||
modes: ['node-property:dim'],
|
||||
duration: 400
|
||||
});
|
||||
}
|
||||
else if (rg != null) {
|
||||
rg.graph.addNode(newnode);
|
||||
var temp = rggraph.getNode('<%= @item.id %>');
|
||||
temp.setData('dim', 1, 'start');
|
||||
temp.setData('dim', 40, 'end');
|
||||
rg.fx.animate({
|
||||
modes: ['node-property:dim'],
|
||||
duration: 400
|
||||
});
|
||||
}
|
||||
rg.graph.addNode(newnode);
|
||||
var temp = rg.graph.getNode('<%= @item.id %>');
|
||||
temp.setData('dim', 1, 'start');
|
||||
temp.setData('dim', 40, 'end');
|
||||
temp.setPos(new $jit.Polar(5.54, 347.6), 'current');
|
||||
temp.setPos(new $jit.Polar(5.54, 347.6), 'start');
|
||||
temp.setPos(new $jit.Polar(5.54, 347.6), 'end');
|
||||
rg.fx.plotNode(temp, rg.canvas);
|
||||
rg.fx.animate({
|
||||
modes: ['node-property:dim'],
|
||||
duration: 400
|
||||
});
|
||||
}
|
||||
// add the new node to the synapse select list
|
||||
$("#node1_id").prepend("<option value='<%= @item.id %>'><%= @item.name %></option>");
|
||||
$("#node2_id").prepend("<option value='<%= @item.id %>'><%= @item.name %></option>");
|
||||
|
||||
}
|
||||
else {
|
||||
$('#cards').prepend('<%= escape_javascript(render(@item)) %>');
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<%= form_for @item, url: item_url do |form| %>
|
||||
<h3>Edit Item</h3>
|
||||
<label for="category">Category</label>
|
||||
<%= select "category", "item_category_id", ItemCategory.all.collect {|p| [ p.name, p.id ] }, { :selected => @item.item_category.id } %>
|
||||
<%= select "category", "item_category_id", ItemCategory.order("name ASC").all.collect {|p| [ p.name, p.id ] }, { :selected => @item.item_category.id } %>
|
||||
<label for="item_name">Title</label>
|
||||
<%= form.text_field :name %>
|
||||
<label for="item_desc">Description</label>
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<div class="nothidden">
|
||||
<%= form_for @item || Item.new, url: items_path do |form| %>
|
||||
<h3>Add Item</h3>
|
||||
<h3>Add Topic</h3>
|
||||
<label for="category">Category</label>
|
||||
<%= select_tag "category", options_from_collection_for_select(ItemCategory.all, "id", "name") %>
|
||||
<%= select_tag "category", options_from_collection_for_select(ItemCategory.order("name ASC").all, "id", "name") %>
|
||||
<label for="item_name">Title</label>
|
||||
<%= form.text_field :name %>
|
||||
<label for="item_desc">Description</label>
|
||||
|
|
|
@ -34,4 +34,5 @@
|
|||
});
|
||||
</script>
|
||||
|
||||
<%= render :partial => 'items/new' %>
|
||||
<%= render :partial => 'items/new' %>
|
||||
<%= render :partial => 'synapses/new' %>
|
||||
|
|
|
@ -61,7 +61,7 @@
|
|||
<li><%= link_to "My Synapses", usersynapses_path %></li>
|
||||
<li><%= link_to "My Topics", userobjects_path %></li>
|
||||
<li>|</li>
|
||||
<li><%= link_to "Add Synapse", new_synapse_path %></li>
|
||||
<li><%= link_to "Add Synapse", new_synapse_path, id: "newsynapse" %></li>
|
||||
<li>|</li>
|
||||
<li><%= link_to "Add Topic", new_item_path, id: "newtopic" %></li>
|
||||
<li>|</li>
|
||||
|
|
|
@ -19,3 +19,5 @@
|
|||
<% end %>
|
||||
|
||||
<%= render :partial => 'items/new' %>
|
||||
<%= render :partial => 'synapses/new' %>
|
||||
|
||||
|
|
|
@ -15,3 +15,4 @@
|
|||
</script>
|
||||
|
||||
<%= render :partial => 'items/new' %>
|
||||
<%= render :partial => 'synapses/new' %>
|
||||
|
|
18
app/views/synapses/_new.html.erb
Normal file
18
app/views/synapses/_new.html.erb
Normal file
|
@ -0,0 +1,18 @@
|
|||
<div class="anypage">
|
||||
<%= form_for Synapse.new, url: synapses_url, remote: true do |form| %>
|
||||
<button id="closenewsynapse" onclick="$('#new_synapse').fadeOut('fast'); $('#new_synapse')[0].reset(); return false;">close</button>
|
||||
<h3>Add Synapse Between Topics</h3>
|
||||
<%= hidden_field_tag(:category, "Item") %>
|
||||
<% if Item.all.count > 0 %>
|
||||
<label for="node1_id">Choose First Item</label>
|
||||
<%= select_tag :node1_id, options_from_collection_for_select(Item.order("name ASC").all, "id", "name") %>
|
||||
<% end %>
|
||||
<label for="item_desc">Describe The Connection</label>
|
||||
<%= form.text_field :desc, class: "description" %>
|
||||
<% if Item.all.count > 0 %>
|
||||
<label for="node2_id">Choose Second Item</label>
|
||||
<%= select_tag :node2_id, options_from_collection_for_select(Item.order("name ASC").all, "id", "name") %>
|
||||
<% end %>
|
||||
<%= form.submit "Add Synapse", class: "add" %>
|
||||
<% end %>
|
||||
</div>
|
82
app/views/synapses/create.js.erb
Normal file
82
app/views/synapses/create.js.erb
Normal file
|
@ -0,0 +1,82 @@
|
|||
$('#new_synapse').fadeOut('fast');
|
||||
$('#new_synapse')[0].reset();
|
||||
|
||||
// if there's a map, add the synapse to that
|
||||
map1 = document.getElementById('container');
|
||||
|
||||
if (map1 != null) {
|
||||
|
||||
var mymap, newnode, select1, select2, option, temp1, temp2, temp;
|
||||
if (fd != null) {
|
||||
mymap = fd;
|
||||
}
|
||||
else if (rg != null) {
|
||||
mymap = rg;
|
||||
}
|
||||
|
||||
temp1 = mymap.graph.getNode(<%= @synapse.item1.id %>);
|
||||
if (temp1 == null) {
|
||||
newnode = <%= @synapse.item1.self_as_json.html_safe %>;
|
||||
mymap.graph.addNode(newnode);
|
||||
temp = mymap.graph.getNode('<%= @synapse.item1.id %>');
|
||||
temp.setData('dim', 1, 'start');
|
||||
temp.setData('dim', 40, 'end');
|
||||
if (mymap == fd) {
|
||||
temp.setPos(new $jit.Complex(0, 0), 'current');
|
||||
temp.setPos(new $jit.Complex(0, 0), 'start');
|
||||
temp.setPos(new $jit.Complex(0, 0), 'end');
|
||||
}
|
||||
else if (mymap == rg) {
|
||||
temp.setPos(new $jit.Polar(5.54, 347.6), 'current');
|
||||
temp.setPos(new $jit.Polar(5.54, 347.6), 'start');
|
||||
temp.setPos(new $jit.Polar(5.54, 347.6), 'end');
|
||||
}
|
||||
mymap.fx.plotNode(temp, mymap.canvas);
|
||||
temp1 = mymap.graph.getNode(<%= @synapse.item1.id %>);
|
||||
// add the new node to the synapse select list
|
||||
$("#node1_id").prepend("<option value='<%= @synapse.item1.id %>'><%= @synapse.item1.name %></option>");
|
||||
$("#node2_id").prepend("<option value='<%= @synapse.item1.id %>'><%= @synapse.item1.name %></option>");
|
||||
}
|
||||
temp2 = mymap.graph.getNode(<%= @synapse.item2.id %>);
|
||||
if (temp2 == null) {
|
||||
newnode = <%= @synapse.item2.self_as_json.html_safe %>;
|
||||
mymap.graph.addNode(newnode);
|
||||
temp = mymap.graph.getNode('<%= @synapse.item2.id %>');
|
||||
temp.setData('dim', 1, 'start');
|
||||
temp.setData('dim', 40, 'end');
|
||||
if (mymap == fd) {
|
||||
temp.setPos(new $jit.Complex(0, 0), 'current');
|
||||
temp.setPos(new $jit.Complex(0, 0), 'start');
|
||||
temp.setPos(new $jit.Complex(0, 0), 'end');
|
||||
}
|
||||
else if (mymap == rg) {
|
||||
temp.setPos(new $jit.Polar(5.54, 347.6), 'current');
|
||||
temp.setPos(new $jit.Polar(5.54, 347.6), 'start');
|
||||
temp.setPos(new $jit.Polar(5.54, 347.6), 'end');
|
||||
}
|
||||
mymap.fx.plotNode(temp, mymap.canvas);
|
||||
temp2 = mymap.graph.getNode(<%= @synapse.item2.id %>);
|
||||
// add the new node to the synapse select list
|
||||
$("#node1_id").prepend("<option value='<%= @synapse.item2.id %>'><%= @synapse.item2.name %></option>");
|
||||
$("#node2_id").prepend("<option value='<%= @synapse.item2.id %>'><%= @synapse.item2.name %></option>");
|
||||
}
|
||||
mymap.graph.addAdjacence(temp1, temp2, {});
|
||||
temp = mymap.graph.getAdjacence(temp1.id, temp2.id);
|
||||
temp.setDataset('start', {
|
||||
lineWidth: 0.4,
|
||||
color: '#d1d1d1'
|
||||
});
|
||||
temp.setDataset('end', {
|
||||
lineWidth: 3,
|
||||
color: '#36acfb'
|
||||
});
|
||||
temp.setDataset('current', {
|
||||
desc: '<%= @synapse.desc %>',
|
||||
category: '<%= @synapse.category %>'
|
||||
});
|
||||
mymap.fx.plotLine(temp, mymap.canvas);
|
||||
mymap.fx.animate({
|
||||
modes: ['node-property:dim','edge-property:lineWidth:color'],
|
||||
duration: 400
|
||||
});
|
||||
}
|
|
@ -2,13 +2,13 @@
|
|||
<h3>Edit Synapse</h3>
|
||||
<% if @collection.count > 0 %>
|
||||
<label for="node1_id">Choose First <%= @synapse.category %></label>
|
||||
<%= select "node1_id", "node1", @collection.map {|p| [ p.name, p.id ] }, { :selected => @synapse.node1_id } %>
|
||||
<%= select "node1_id", "node1", @collection.order("name ASC").map {|p| [ p.name, p.id ] }, { :selected => @synapse.node1_id } %>
|
||||
<% end %>
|
||||
<label for="item_desc">Describe The Connection</label>
|
||||
<%= form.text_field :desc, class: "description" %>
|
||||
<% if @collection.count > 0 %>
|
||||
<label for="node2_id">Choose Second <%= @synapse.category %></label>
|
||||
<%= select "node2_id", "node2", @collection.map {|p| [ p.name, p.id ] }, { :selected => @synapse.node2_id } %>
|
||||
<%= select "node2_id", "node2", @collection.order("name ASC").map {|p| [ p.name, p.id ] }, { :selected => @synapse.node2_id } %>
|
||||
<% end %>
|
||||
<%= form.submit "Update", class: "update" %>
|
||||
<% end %>
|
|
@ -1,16 +1,16 @@
|
|||
<div class="newsynapses">
|
||||
<%= form_for @synapse, url: synapses_url do |form| %>
|
||||
<h3>Add Synapse Between Items</h3>
|
||||
<h3>Add Synapse Between Topics</h3>
|
||||
<%= hidden_field_tag(:category, "Item") %>
|
||||
<% if @allitems.count > 0 %>
|
||||
<% if Item.all.count > 0 %>
|
||||
<label for="node1_id">Choose First Item</label>
|
||||
<%= select_tag :node1_id, options_from_collection_for_select(@allitems, "id", "name") %>
|
||||
<%= select_tag :node1_id, options_from_collection_for_select(Item.order("name ASC").all, "id", "name") %>
|
||||
<% end %>
|
||||
<label for="item_desc">Describe The Connection</label>
|
||||
<%= form.text_field :desc, class: "description" %>
|
||||
<% if @allitems.count > 0 %>
|
||||
<% if Item.all.count > 0 %>
|
||||
<label for="node2_id">Choose Second Item</label>
|
||||
<%= select_tag :node2_id, options_from_collection_for_select(@allitems, "id", "name") %>
|
||||
<%= select_tag :node2_id, options_from_collection_for_select(Item.order("name ASC").all, "id", "name") %>
|
||||
<% end %>
|
||||
<%= form.submit "Add Synapse", class: "add" %>
|
||||
<% end %>
|
||||
|
|
8
db/migrate/20121023231434_create_maps.rb
Normal file
8
db/migrate/20121023231434_create_maps.rb
Normal file
|
@ -0,0 +1,8 @@
|
|||
class CreateMaps < ActiveRecord::Migration
|
||||
def change
|
||||
create_table :maps do |t|
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
11
test/fixtures/maps.yml
vendored
Normal file
11
test/fixtures/maps.yml
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
|
||||
|
||||
# This model initially had no columns defined. If you add columns to the
|
||||
# model remove the '{}' from the fixture names and add the columns immediately
|
||||
# below each fixture, per the syntax in the comments below
|
||||
#
|
||||
one: {}
|
||||
# column: value
|
||||
#
|
||||
two: {}
|
||||
# column: value
|
7
test/unit/map_test.rb
Normal file
7
test/unit/map_test.rb
Normal file
|
@ -0,0 +1,7 @@
|
|||
require 'test_helper'
|
||||
|
||||
class MapTest < ActiveSupport::TestCase
|
||||
# test "the truth" do
|
||||
# assert true
|
||||
# end
|
||||
end
|
Loading…
Reference in a new issue