wontomedia 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +14 -7
- data/VERSION.yml +2 -2
- data/app/controllers/admin_controller.rb +5 -4
- data/app/controllers/items_controller.rb +128 -35
- data/app/helpers/connections_helper.rb +18 -0
- data/app/helpers/format_helper.rb +6 -0
- data/app/helpers/items_helper.rb +6 -6
- data/app/views/admin/index.html.erb +4 -3
- data/app/views/connections/index.html.erb +6 -3
- data/app/views/connections/show.html.erb +6 -4
- data/app/views/items/_content_examples.html.erb +2 -1
- data/app/views/items/_show_outbound_links.html.erb +1 -1
- data/app/views/items/edit.html.erb +1 -1
- data/app/views/items/index.html.erb +2 -1
- data/app/views/items/show.html.erb +24 -19
- data/app/views/layouts/_navigation_menu.html.erb +8 -15
- data/assets/wontomedia-sample.rb +3 -0
- data/config/caliper.yml +24 -0
- data/config/routes.rb +24 -13
- data/db/fixtures/connections.yml +138 -0
- data/db/fixtures/items.yml +348 -21
- data/default-custom/app/views/items/home.html.erb +2 -1
- data/default-custom/app/views/{items/_home_extern_list.html.erb → layouts/_local_navigation.html.erb} +12 -13
- data/lib/helpers/tripple_navigation.rb +23 -0
- data/public/javascripts/forConnectionsForms.js +1 -1
- data/public/javascripts/forItemsForms.js +2 -1
- data/public/javascripts/itemCreatePopup.js +1 -1
- data/public/robots.txt +5 -5
- metadata +6 -5
- /data/{public → default-custom/public}/favicon.ico +0 -0
data/Rakefile
CHANGED
@@ -156,7 +156,7 @@ namespace :test do
|
|
156
156
|
# now some new "umbrella" test tasks
|
157
157
|
|
158
158
|
desc "Execute all development tests in test/unit."
|
159
|
-
Rake::TestTask.new(:
|
159
|
+
Rake::TestTask.new(:devs => "db:test:prepare") do |t|
|
160
160
|
t.libs << "test"
|
161
161
|
t.pattern = 'test/unit/**/*_test.rb'
|
162
162
|
t.verbose = true
|
@@ -170,16 +170,23 @@ namespace :test do
|
|
170
170
|
ruby File.join( "policy", "ckFilesUtils", "ckCustomizationFilesPresent.rb" )
|
171
171
|
end
|
172
172
|
|
173
|
+
# alias
|
174
|
+
task :integrations => :integration
|
175
|
+
|
173
176
|
desc "Execute all the tests for Ruby code."
|
174
|
-
task :
|
175
|
-
"test:
|
177
|
+
task :ruby_tests => [ "test:devs", "test:dbmigrations", "test:functionals",
|
178
|
+
"test:integrations", "build", "cucumber:static_ok"]
|
176
179
|
end # namespace :test
|
177
180
|
|
178
181
|
|
179
182
|
|
180
|
-
#
|
183
|
+
# replace Rail's basic test task so that we get a reasonable execution order
|
181
184
|
Rake::Task[:test].clear!
|
182
185
|
desc 'Run all unit, functional, integration, and policy checks'
|
183
|
-
task :
|
184
|
-
|
185
|
-
|
186
|
+
task :tests => [ "test:policies", "asset:packager:build_all",
|
187
|
+
# above two have side effects necessary for setup
|
188
|
+
"test:devs", "test:dbmigrations", "test:functionals",
|
189
|
+
"test:javascripts", "test:integrations", "build",
|
190
|
+
"cucumber:ok" ]
|
191
|
+
# alias
|
192
|
+
task :test => :tests
|
data/VERSION.yml
CHANGED
@@ -18,6 +18,7 @@
|
|
18
18
|
#++
|
19
19
|
|
20
20
|
|
21
|
+
require Rails.root.join( 'lib', 'helpers', 'item_helper')
|
21
22
|
require 'yaml'
|
22
23
|
|
23
24
|
# There is no model matching this controller. It is intended to
|
@@ -28,8 +29,8 @@ class AdminController < ApplicationController
|
|
28
29
|
# GET /admin/
|
29
30
|
#
|
30
31
|
# This action renders the primary administration page. This page
|
31
|
-
# includes links to <tt>/items.yaml</tt> and
|
32
|
-
# <tt>/connections.n3</tt> so that an administrator can download the
|
32
|
+
# includes links to <tt>/w/items.yaml</tt> and
|
33
|
+
# <tt>/w/connections.n3</tt> so that an administrator can download the
|
33
34
|
# complete content of a wontology for backup. It also includes form
|
34
35
|
# controls for uploading <tt>.yaml</tt> files of Item records and
|
35
36
|
# <tt>.n3</tt> files of Connection records to be added to the
|
@@ -117,14 +118,14 @@ class AdminController < ApplicationController
|
|
117
118
|
:flags => 0
|
118
119
|
)
|
119
120
|
if e.nil?
|
120
|
-
|
121
|
+
err_str = "Couldn't create connection for #{$1} #{$2} #{$3}.\n"
|
121
122
|
logger.error(err_str)
|
122
123
|
flash[:error] << err_str
|
123
124
|
else
|
124
125
|
if e.save
|
125
126
|
count += 1
|
126
127
|
else
|
127
|
-
|
128
|
+
err_str = "Couldn't save connection for #{$1} #{$2} #{$3}.\n"
|
128
129
|
logger.error(err_str)
|
129
130
|
flash[:error] << err_str
|
130
131
|
end
|
@@ -107,19 +107,19 @@ class ItemsController < ApplicationController
|
|
107
107
|
render :action => (@popup_flag ? "newpop" : "new" )
|
108
108
|
else
|
109
109
|
if @popup_flag
|
110
|
-
@connection_list = []; @item_hash = {};
|
110
|
+
@connection_list = []; @item_hash = {};
|
111
111
|
flash.now[:notice] = 'Item was successfully created.'
|
112
112
|
render :action => "show", :layout => "popup"
|
113
113
|
else
|
114
114
|
flash[:notice] = 'Item was successfully created.'
|
115
|
-
redirect_to
|
115
|
+
redirect_to item_by_name_path(@item.name)
|
116
116
|
end
|
117
117
|
end
|
118
118
|
end
|
119
119
|
|
120
120
|
# GET /items/1
|
121
121
|
#
|
122
|
-
#
|
122
|
+
# +show+ is capable of rendering in multiple
|
123
123
|
# formats. <tt>/items/1</tt> and <tt>/items/1.html</tt> yield a
|
124
124
|
# human-readable page in HTML markup. <tt>/items/1.json</tt>
|
125
125
|
# renders all fields from the specified Item as JSON-format text,
|
@@ -128,13 +128,91 @@ class ItemsController < ApplicationController
|
|
128
128
|
# returned. When a full web page is generated, information is
|
129
129
|
# included about all other Items which are involved in Connections
|
130
130
|
# that directly reference the requested Item.
|
131
|
+
#
|
132
|
+
# As for all controller actions, 'show' populates instance variables
|
133
|
+
# for the view to use in generating the page. However, unlike most
|
134
|
+
# of the other controller methods, the data packaging that the show
|
135
|
+
# action does for the its view is relatively extensive and several
|
136
|
+
# instance variables are created:
|
137
|
+
#
|
138
|
+
# * *@item* this variable is populated with a single Item object
|
139
|
+
# that holds the model for the page being generated
|
140
|
+
# * *@item_hash* is a hash that contains additional Item objects
|
141
|
+
# that will be required to render the output page. It is indexed
|
142
|
+
# with Item.id values.
|
143
|
+
# * *@inverses_map* is a hash indexed by Connection objects which
|
144
|
+
# contains other Connection objects. Each time 'show' generates a
|
145
|
+
# Connection object for one connection that is implied by the
|
146
|
+
# existence of another connection involving *@item*, it creates an
|
147
|
+
# entry in this hash. The new entry is indexed by the new
|
148
|
+
# Connection object (which has no "id" as it has not been saved to
|
149
|
+
# the database) and whose value is the Connection object that
|
150
|
+
# implies the new connection. This allows the view to create
|
151
|
+
# links to an implied connection's "source" connection without
|
152
|
+
# having to go back through the database.
|
153
|
+
# * *@connection_list* is an _array_ of _arrays_ of Connection.id
|
154
|
+
# values. Each array within @connection_list represents a
|
155
|
+
# different logically-similar group of connections, and they are
|
156
|
+
# expected (although it is really up to the view) to be rendered
|
157
|
+
# into the page from top to bottom in the order they occur in the
|
158
|
+
# array.
|
159
|
+
# - The first array of Connections inside of @connection_list
|
160
|
+
# includes all connections that reference *@item* as their
|
161
|
+
# subject item, _and_ which have a predicate item that inherits
|
162
|
+
# from value_relationship. (Assuming that's a non-empty set.)
|
163
|
+
# - The next some-number-of arrays inside of @connection_list
|
164
|
+
# contain (some of) the remaining Connections (if any) that
|
165
|
+
# reference *@item* as their subject. Connections are grouped
|
166
|
+
# together based on their references to a common predicate item:
|
167
|
+
# all of the Connections whose subject is *@item* and which have
|
168
|
+
# the _same_ value for *predicate_id*. Based on this definition,
|
169
|
+
# all of the arrays in this portion of @connection_list will
|
170
|
+
# have two or more element Connection objects. The arrays in
|
171
|
+
# this group are placed into @connection_list in order based on
|
172
|
+
# the number of Connections in the array: larger arrays are
|
173
|
+
# sorted ahead of smaller ones.
|
174
|
+
# - The next array in @connection_list, assuming there are
|
175
|
+
# Connection objects for it, contains any Connections that
|
176
|
+
# reference *@item* as their subject that haven't been included
|
177
|
+
# in one of the arrays above. Given the above definitions, the
|
178
|
+
# view can expect that all of the *predicate_id* values in the
|
179
|
+
# Connections in this array will be different.
|
180
|
+
# - The next array in @connection_list contains all of the
|
181
|
+
# Connection objects whose *object_id* values are equal to
|
182
|
+
# *@item*. Like all the other, this array won't be placed into
|
183
|
+
# @connection_list if it would be empty. Also, in the event of
|
184
|
+
# that a Connection references *@item* as both its subject and
|
185
|
+
# object, that Connection will be included in the appropriate
|
186
|
+
# one of the preceding arrays. (In generally, the criteria for
|
187
|
+
# placing Connections into the individual arrays contained by
|
188
|
+
# @connection_list are "greedy"; a Connection will be placed
|
189
|
+
# in only one array, and it will be the earliest-generated array
|
190
|
+
# for which it qualifies.) Connections are sorted within this
|
191
|
+
# array so that ones who share the same *predicate_id* value are
|
192
|
+
# in adjacent positions.
|
193
|
+
# - The final array that may be in @connection_list includes all
|
194
|
+
# of the (remaining) Connections which, given the definitions
|
195
|
+
# above, all reference *@item* as their predicate.
|
196
|
+
#
|
197
|
+
# Before connections are packaged and the items necessary for their
|
198
|
+
# display are gathered, the show action will create temporary,
|
199
|
+
# not-saved-to-the-database Connection objects to represent
|
200
|
+
# connections implied by existing connection that have the current
|
201
|
+
# *@item* as their object. This allows implied connections to be
|
202
|
+
# included in the list of connections-with-@item-as-subject near the
|
203
|
+
# top of the list of *@item*'s connections.
|
131
204
|
def show
|
132
205
|
begin
|
133
|
-
@item =
|
206
|
+
@item = params[:name].nil? ?
|
207
|
+
Item.find(params[:id]) : Item.find_by_name(params[:name])
|
134
208
|
rescue
|
135
209
|
render :file => "#{RAILS_ROOT}/public/404.html", :status => 404
|
136
210
|
return
|
137
211
|
end
|
212
|
+
if @item.nil?
|
213
|
+
render :file => "#{RAILS_ROOT}/public/404.html", :status => 404
|
214
|
+
return
|
215
|
+
end
|
138
216
|
|
139
217
|
if request.format.json?
|
140
218
|
# huge kludge for testability. Need to ensure that we don't respond
|
@@ -149,6 +227,7 @@ class ItemsController < ApplicationController
|
|
149
227
|
return
|
150
228
|
end
|
151
229
|
|
230
|
+
# all of the connections we might want to display
|
152
231
|
used_as_subj = Connection.all( :conditions =>
|
153
232
|
[ "subject_id = ?", @item.id ])
|
154
233
|
used_as_pred = Connection.all( :conditions =>
|
@@ -156,42 +235,52 @@ class ItemsController < ApplicationController
|
|
156
235
|
used_as_obj = Connection.all( :conditions =>
|
157
236
|
[ "obj_id = ?", @item.id ])
|
158
237
|
|
238
|
+
@inverses_map = {}
|
239
|
+
# create Connection objects for any implied connections we want to list
|
240
|
+
used_as_obj.each do |connection|
|
241
|
+
if inverse_property_id = TrippleNavigation.
|
242
|
+
propertys_inverse( connection.predicate_id )
|
243
|
+
new_connection = Connection.new(
|
244
|
+
:subject_id => connection.obj_id,
|
245
|
+
:predicate_id => inverse_property_id,
|
246
|
+
:obj_id => connection.subject_id
|
247
|
+
)
|
248
|
+
used_as_subj << new_connection
|
249
|
+
@inverses_map[new_connection] = connection
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
# find all of the Items referenced by the connections the view will list
|
159
254
|
@item_hash = {}
|
160
|
-
@connection_hash = {}
|
161
255
|
[ used_as_subj, used_as_pred, used_as_obj ].each do |connection_array|
|
162
256
|
connection_array.each do |connection|
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
unless @item_hash.has_key? item.id
|
168
|
-
@item_hash[item.id] = item
|
169
|
-
end
|
257
|
+
[ connection.subject, connection.predicate, connection.obj ].
|
258
|
+
each do |item|
|
259
|
+
unless @item_hash.has_key? item.id
|
260
|
+
@item_hash[item.id] = item
|
170
261
|
end
|
171
262
|
end
|
172
263
|
end
|
173
264
|
end
|
174
265
|
|
266
|
+
|
175
267
|
# now that we've got all the connections to display, order and group them
|
176
268
|
# @connection_list should be an array of arrays, each internal array is
|
177
269
|
# a "section" of the display page, containing .id's of connections
|
178
270
|
@connection_list = []
|
179
|
-
|
180
271
|
value_id = Item.find_by_name("value_relationship").id
|
181
272
|
spo_id = Item.find_by_name("sub_property_of").id
|
182
273
|
|
183
274
|
# first group, all connections *from* this item with value-type predicates
|
184
275
|
connections = []
|
185
|
-
connections_to_delete = []
|
186
276
|
used_as_subj.each do |connection|
|
187
277
|
if TrippleNavigation.check_properties(
|
188
278
|
:does => connection.predicate_id, :via => spo_id,
|
189
279
|
:inherit_from => value_id )
|
190
|
-
connections << connection
|
191
|
-
connections_to_delete << connection
|
280
|
+
connections << connection
|
192
281
|
end
|
193
282
|
end
|
194
|
-
used_as_subj -=
|
283
|
+
used_as_subj -= connections # if done incrementally, breaks iterator
|
195
284
|
unless connections.empty?
|
196
285
|
@connection_list << connections
|
197
286
|
end
|
@@ -208,7 +297,7 @@ class ItemsController < ApplicationController
|
|
208
297
|
else
|
209
298
|
pred_counts[connection.predicate_id] += 1
|
210
299
|
end
|
211
|
-
connection_using_pred[connection.predicate_id] = connection
|
300
|
+
connection_using_pred[connection.predicate_id] = connection
|
212
301
|
end
|
213
302
|
subj_connections = pred_counts.keys
|
214
303
|
subj_connections.sort! { |a,b| pred_counts[b] <=> pred_counts[a] }
|
@@ -219,7 +308,7 @@ class ItemsController < ApplicationController
|
|
219
308
|
used_as_subj.each do |connection|
|
220
309
|
# lazy, more hashes would eliminate rescan
|
221
310
|
if connection.predicate_id == predicate_id
|
222
|
-
connections << connection
|
311
|
+
connections << connection
|
223
312
|
end
|
224
313
|
end
|
225
314
|
unless connections.empty?
|
@@ -237,34 +326,38 @@ class ItemsController < ApplicationController
|
|
237
326
|
end
|
238
327
|
|
239
328
|
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
@connection_hash[a].obj_id <=> @connection_hash[b].obj_id
|
329
|
+
used_as_obj.sort! do |a,b|
|
330
|
+
if a.predicate_id == b.predicate_id
|
331
|
+
a.obj_id <=> b.obj_id
|
244
332
|
else
|
245
|
-
|
333
|
+
a.predicate_id <=> b.predicate_id
|
246
334
|
end
|
247
335
|
end
|
248
|
-
unless
|
249
|
-
@connection_list <<
|
336
|
+
unless used_as_obj.empty?
|
337
|
+
@connection_list << used_as_obj
|
250
338
|
end
|
251
339
|
|
252
340
|
|
253
|
-
|
254
|
-
|
255
|
-
@connection_list << pred_connections
|
341
|
+
unless used_as_pred.empty?
|
342
|
+
@connection_list << used_as_pred
|
256
343
|
end
|
257
344
|
end
|
258
345
|
|
259
346
|
# GET /items/1/edit
|
260
347
|
def edit
|
261
348
|
begin
|
262
|
-
@
|
263
|
-
|
349
|
+
@item = params[:name].nil? ?
|
350
|
+
Item.find(params[:id]) : Item.find_by_name(params[:name])
|
264
351
|
rescue
|
265
352
|
render :file => "#{RAILS_ROOT}/public/404.html", :status => 404
|
266
353
|
return
|
267
354
|
end
|
355
|
+
if @item.nil?
|
356
|
+
render :file => "#{RAILS_ROOT}/public/404.html", :status => 404
|
357
|
+
return
|
358
|
+
end
|
359
|
+
|
360
|
+
@this_is_non_information_page = true
|
268
361
|
end
|
269
362
|
|
270
363
|
# PUT /items/1
|
@@ -286,7 +379,7 @@ class ItemsController < ApplicationController
|
|
286
379
|
|
287
380
|
if (@item.flags & Item::DATA_IS_UNALTERABLE) != 0
|
288
381
|
flash[:error] = 'This Item cannot be altered.'
|
289
|
-
redirect_to
|
382
|
+
redirect_to item_by_name_path(@item.name)
|
290
383
|
elsif (!params[:item].nil? && !params[:item][:name].nil? &&
|
291
384
|
params[:item][:name] =~ /[:.]/ ) ||
|
292
385
|
!@item.update_attributes(params[:item])
|
@@ -295,7 +388,7 @@ class ItemsController < ApplicationController
|
|
295
388
|
render :action => "edit"
|
296
389
|
else
|
297
390
|
flash[:notice] = 'Item was successfully updated.'
|
298
|
-
redirect_to
|
391
|
+
redirect_to item_by_name_path(@item.name)
|
299
392
|
end
|
300
393
|
end
|
301
394
|
|
@@ -310,13 +403,13 @@ class ItemsController < ApplicationController
|
|
310
403
|
|
311
404
|
if (@item.flags & Item::DATA_IS_UNALTERABLE) != 0
|
312
405
|
flash[:error] = 'This Item cannot be altered.'
|
313
|
-
redirect_to
|
406
|
+
redirect_to item_by_name_path(@item.name)
|
314
407
|
elsif !(Connection.all( :conditions =>
|
315
408
|
[ "subject_id = ? OR predicate_id = ? OR obj_id = ?",
|
316
409
|
@item.id, @item.id, @item.id ]).empty?)
|
317
410
|
flash[:error] = 'This Item is in use by 1+ Connections. ' +
|
318
411
|
'Those must be modified or deleted first.'
|
319
|
-
redirect_to
|
412
|
+
redirect_to item_by_name_path(@item.name)
|
320
413
|
else
|
321
414
|
@item.destroy
|
322
415
|
redirect_to items_url
|
@@ -64,4 +64,22 @@ module ConnectionsHelper
|
|
64
64
|
@delete_help_icon_used = true
|
65
65
|
end
|
66
66
|
end
|
67
|
+
|
68
|
+
# This method appends its output directly to the page being built.
|
69
|
+
# It takes a Connection model instance and creates an HTML link to
|
70
|
+
# that connection. It should be used as an alternative to
|
71
|
+
# "generate_connection_links()" for those cases where instead of
|
72
|
+
# generating links to the Connection the user is looking at, we're
|
73
|
+
# generating a link to the Connection that _implied_ whatever the
|
74
|
+
# user is looking at. A popup help icon will be added on the first
|
75
|
+
# call to generate_inverse_link for a particular page.
|
76
|
+
def generate_inverse_link(con)
|
77
|
+
concat(
|
78
|
+
link_with_help_icon({
|
79
|
+
:destination => link_to( 'View source', connection_path(con) ),
|
80
|
+
:already_generated => @viewsource_help_icon_used,
|
81
|
+
:help_alt => 'Help view source',
|
82
|
+
:which_help =>'ConnectionViewSource' }) )
|
83
|
+
@viewsource_help_icon_used = true
|
84
|
+
end
|
67
85
|
end
|
data/app/helpers/items_helper.rb
CHANGED
@@ -33,12 +33,12 @@ module ItemsHelper
|
|
33
33
|
# argument Item is different from the page's item, then the +title+
|
34
34
|
# will be displayed as a link to _that_ Item's +show+ page.
|
35
35
|
def self_string_or_other_link(item_id)
|
36
|
-
|
37
|
-
title = h filter_parenthetical
|
36
|
+
item = @item_hash[item_id]
|
37
|
+
title = h filter_parenthetical item.title
|
38
38
|
if item_id == @item.id # self
|
39
|
-
text_with_tooltip title, h(
|
39
|
+
text_with_tooltip title, h( item.name )
|
40
40
|
else # other
|
41
|
-
link_with_tooltip title, h(
|
41
|
+
link_with_tooltip title, h( item.name ), item_by_name_path(item.name)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
@@ -82,8 +82,8 @@ module ItemsHelper
|
|
82
82
|
if (item.flags & Item::DATA_IS_UNALTERABLE) == 0
|
83
83
|
concat(
|
84
84
|
link_with_help_icon({
|
85
|
-
:destination => link_to( 'Edit…',
|
86
|
-
:rel => 'nofollow'),
|
85
|
+
:destination => link_to( 'Edit…',
|
86
|
+
edit_item_by_name_path(item.name), :rel => 'nofollow'),
|
87
87
|
:already_generated => @edit_help_icon_used,
|
88
88
|
:help_alt => 'Help edit item',
|
89
89
|
:which_help => 'ItemEdit' }) )
|
@@ -57,15 +57,18 @@
|
|
57
57
|
<% content_tag :tr, :id => connection.id do %>
|
58
58
|
<td class='firstrow secondrow'><%=
|
59
59
|
link_with_tooltip "#{h filter_parenthetical connection.subject.title}",
|
60
|
-
h( connection.subject.name ),
|
60
|
+
h( connection.subject.name ),
|
61
|
+
item_by_name_path(connection.subject.name) -%></td>
|
61
62
|
<td class='firstrow secondrow'><%=
|
62
63
|
link_with_tooltip(
|
63
64
|
"#{h filter_parenthetical connection.predicate.title}",
|
64
|
-
h( connection.predicate.name ),
|
65
|
+
h( connection.predicate.name ),
|
66
|
+
item_by_name_path(connection.predicate.name) )
|
65
67
|
-%></td>
|
66
68
|
<td class='firstrow secondrow'><%=
|
67
69
|
link_with_tooltip "#{h filter_parenthetical connection.obj.title}",
|
68
|
-
h( connection.obj.name ),
|
70
|
+
h( connection.obj.name ), item_by_name_path(connection.obj.name)
|
71
|
+
-%></td>
|
69
72
|
<td class='firstrow secondrow' style="font-size: 80%">
|
70
73
|
<% generate_connection_links(connection) %></td>
|
71
74
|
<!--
|
@@ -43,7 +43,8 @@
|
|
43
43
|
<tr><td>
|
44
44
|
<b>Subject:</b>
|
45
45
|
</td><td>
|
46
|
-
<%= link_to "<b>#{h @subject.title}</b>",
|
46
|
+
<%= link_to "<b>#{h @subject.title}</b>",
|
47
|
+
item_by_name_path(@subject.name) %> —
|
47
48
|
(<b><%= h @subject.name %></b>)
|
48
49
|
<p>
|
49
50
|
<%= h @subject.description %>
|
@@ -53,7 +54,8 @@
|
|
53
54
|
<tr><td>
|
54
55
|
<b>Predicate:</b>
|
55
56
|
</td><td>
|
56
|
-
<%= link_to "<b>#{h @predicate.title}</b>",
|
57
|
+
<%= link_to "<b>#{h @predicate.title}</b>",
|
58
|
+
item_by_name_path(@predicate.name) %>
|
57
59
|
— (<b><%= h @predicate.name %></b>)
|
58
60
|
<p>
|
59
61
|
<%= h @predicate.description %>
|
@@ -63,8 +65,8 @@
|
|
63
65
|
<tr><td>
|
64
66
|
<b>Object:</b>
|
65
67
|
</td><td>
|
66
|
-
<%= link_to "<b>#{h @obj.title}</b>",
|
67
|
-
(<b><%= h @obj.name %></b>)
|
68
|
+
<%= link_to "<b>#{h @obj.title}</b>", item_by_name_path(@obj.name) %>
|
69
|
+
— (<b><%= h @obj.name %></b>)
|
68
70
|
<p>
|
69
71
|
<%= h @obj.description %>
|
70
72
|
</p>
|
@@ -40,7 +40,8 @@
|
|
40
40
|
<% nouns_listed = 0
|
41
41
|
@nouns.each do |item| %>
|
42
42
|
<p class="item-title">
|
43
|
-
<%= link_to "#{h filter_parenthetical item.title}",
|
43
|
+
<%= link_to "#{h filter_parenthetical item.title}",
|
44
|
+
item_by_name_path(item.name) %>
|
44
45
|
</p>
|
45
46
|
<p class="item-desc">
|
46
47
|
<% desc = h item.description
|
@@ -22,7 +22,7 @@
|
|
22
22
|
<ul>
|
23
23
|
<% if (@item.flags & Item::DATA_IS_UNALTERABLE) == 0 %>
|
24
24
|
<li>
|
25
|
-
<%= link_to 'Edit this item',
|
25
|
+
<%= link_to 'Edit this item', edit_item_by_name_path(@item.name),
|
26
26
|
:rel => 'nofollow' -%><%=
|
27
27
|
popup_help_icon "Help edit items", "Help:Popup/ItemEdit" -%>
|
28
28
|
</li>
|
@@ -43,7 +43,7 @@
|
|
43
43
|
<% end %>
|
44
44
|
|
45
45
|
<div class="horizontal-link-list"><ul>
|
46
|
-
<li><%= link_to 'Cancel, show item',
|
46
|
+
<li><%= link_to 'Cancel, show item', item_by_name_path(@item.name),
|
47
47
|
:rel => 'nofollow' -%></li>
|
48
48
|
<li><%= link_to 'Cancel, show item list', items_path,
|
49
49
|
:rel => 'nofollow' -%></li>
|
@@ -53,7 +53,8 @@
|
|
53
53
|
<% content_tag :tr, :id => h(item.name) do %>
|
54
54
|
<td class="firstrow"><%= wrap_item_name h item.name -%></td>
|
55
55
|
<td class="firstrow" style="font-weight: bold; width: 62%;">
|
56
|
-
<%= link_to filter_parenthetical(h item.title),
|
56
|
+
<%= link_to filter_parenthetical(h item.title),
|
57
|
+
item_by_name_path(item.name) -%></td>
|
57
58
|
<td class="firstrow" style="font-size: 80%;">
|
58
59
|
<% generate_item_links(item) %>
|
59
60
|
</td>
|
@@ -102,11 +102,9 @@
|
|
102
102
|
connection_array = array_of_arrays_of_connections.next
|
103
103
|
|
104
104
|
# check ID of first connection's subject item against "this" item's ID
|
105
|
-
break if
|
106
|
-
|
107
|
-
connection_array.each do |connection_id|
|
108
|
-
e = @connection_hash[connection_id]
|
105
|
+
break if connection_array[0].subject_id != @item.id
|
109
106
|
|
107
|
+
connection_array.each do |connection|
|
110
108
|
unless list_open_output
|
111
109
|
list_open_output = true
|
112
110
|
|
@@ -124,28 +122,32 @@
|
|
124
122
|
<ul style="list-style-type: none;">
|
125
123
|
<% end
|
126
124
|
|
127
|
-
if last_predicate_id !=
|
125
|
+
if last_predicate_id != connection.predicate_id
|
128
126
|
if last_predicate_id %>
|
129
127
|
</ul>
|
130
128
|
</li>
|
131
129
|
<% end %>
|
132
130
|
<li>
|
133
|
-
<%=
|
134
|
-
link_with_tooltip (h filter_parenthetical
|
135
|
-
h(
|
131
|
+
<%= item = @item_hash[connection.predicate_id]
|
132
|
+
link_with_tooltip (h filter_parenthetical item.title ),
|
133
|
+
h( item.name ), item_by_name_path(item.name) %>
|
136
134
|
<ul style="list-style-type: circle;">
|
137
135
|
<% end %>
|
138
136
|
|
139
137
|
<li>
|
140
138
|
<div style="float: right; font-size: 80%; margin-right: 6em;">
|
141
|
-
<%
|
139
|
+
<% if connection.id
|
140
|
+
generate_connection_links(connection)
|
141
|
+
else
|
142
|
+
generate_inverse_link(@inverses_map[connection])
|
143
|
+
end %>
|
142
144
|
</div>
|
143
|
-
<%=
|
144
|
-
link_with_tooltip (h filter_parenthetical
|
145
|
-
h(
|
145
|
+
<%= item = @item_hash[connection.obj_id]
|
146
|
+
link_with_tooltip (h filter_parenthetical item.title ),
|
147
|
+
h( item.name ), item_by_name_path(item.name) %>
|
146
148
|
</li>
|
147
149
|
|
148
|
-
<% last_predicate_id =
|
150
|
+
<% last_predicate_id = connection.predicate_id
|
149
151
|
|
150
152
|
end # .each over connection_array
|
151
153
|
end # while over array-of-connection_array's
|
@@ -181,17 +183,20 @@
|
|
181
183
|
end %>
|
182
184
|
|
183
185
|
<tbody>
|
184
|
-
<% connection_array.each do |
|
186
|
+
<% connection_array.each do |connection| %>
|
185
187
|
<tr>
|
186
188
|
<td>
|
187
|
-
<%=
|
188
|
-
self_string_or_other_link(e.subject_id) %>
|
189
|
+
<%= self_string_or_other_link(connection.subject_id) %>
|
189
190
|
</td><td class="connectioncolumn">
|
190
|
-
<%= self_string_or_other_link(
|
191
|
+
<%= self_string_or_other_link(connection.predicate_id) %>
|
191
192
|
</td><td>
|
192
|
-
<%= self_string_or_other_link(
|
193
|
+
<%= self_string_or_other_link(connection.obj_id) %>
|
193
194
|
</td><td style="font-size: 80%">
|
194
|
-
<%
|
195
|
+
<% if connection.id
|
196
|
+
generate_connection_links(connection)
|
197
|
+
else
|
198
|
+
generate_inverse_link(@inverses_map[connection])
|
199
|
+
end %>
|
195
200
|
</td>
|
196
201
|
</tr>
|
197
202
|
<% end %>
|