iqvoc 4.0.2 → 4.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. data/CHANGELOG.md +6 -0
  2. data/Gemfile.lock +43 -47
  3. data/app/assets/javascripts/framework.js +1 -1
  4. data/app/assets/javascripts/iqvoc/extract_concepts.js +19 -0
  5. data/app/assets/javascripts/iqvoc/iqvoc.js +8 -12
  6. data/app/assets/javascripts/iqvoc/manifest.js +3 -0
  7. data/app/assets/javascripts/iqvoc/onebox.js +44 -0
  8. data/app/assets/javascripts/iqvoc/quicksearch.js +41 -0
  9. data/app/assets/stylesheets/framework.css +1 -1
  10. data/app/assets/stylesheets/iqvoc/bootstrap_extensions.css.scss +0 -7
  11. data/app/assets/stylesheets/iqvoc/components.css.scss +27 -1
  12. data/app/assets/stylesheets/iqvoc/manifest.css +0 -1
  13. data/app/controllers/application_controller.rb +1 -1
  14. data/app/controllers/concepts/alphabetical_controller.rb +5 -1
  15. data/app/controllers/concepts/untranslated_controller.rb +1 -1
  16. data/app/controllers/concepts_controller.rb +2 -0
  17. data/app/controllers/frontpage_controller.rb +23 -0
  18. data/app/controllers/instance_configuration_controller.rb +10 -2
  19. data/app/controllers/pages_controller.rb +21 -0
  20. data/app/controllers/rdf_controller.rb +0 -21
  21. data/app/helpers/concepts_helper.rb +1 -1
  22. data/app/helpers/navigation_helper.rb +0 -10
  23. data/app/helpers/rdf_helper.rb +1 -1
  24. data/app/models/concept/base.rb +2 -2
  25. data/app/models/concept/skos/base.rb +1 -1
  26. data/app/models/label/base.rb +5 -2
  27. data/app/models/labeling/base.rb +2 -2
  28. data/app/models/labeling/skos/base.rb +1 -1
  29. data/app/models/note/base.rb +0 -6
  30. data/app/models/note/skos/base.rb +20 -8
  31. data/app/views/concepts/alphabetical/index.html.erb +2 -2
  32. data/app/views/{rdf/show_concept.iqrdf → concepts/show.iqrdf} +1 -1
  33. data/app/views/concepts/show_published.html.erb +0 -1
  34. data/app/views/concepts/show_unpublished.html.erb +0 -1
  35. data/app/views/concepts/sidebars/_plural.html.erb +3 -3
  36. data/app/views/concepts/sidebars/_singular.html.erb +4 -5
  37. data/app/views/concepts/untranslated/index.html.erb +1 -1
  38. data/app/views/frontpage/index.html.erb +8 -0
  39. data/app/views/instance_configuration/index.html.erb +8 -5
  40. data/app/views/layouts/_navigation.html.erb +10 -8
  41. data/app/views/layouts/application.html.erb +3 -1
  42. data/app/views/pages/help.html.erb +75 -0
  43. data/app/views/partials/labeling/skos/_base.html.erb +2 -1
  44. data/config/initializers/language.rb +1 -1
  45. data/config/locales/de.yml +8 -0
  46. data/config/locales/en.yml +8 -0
  47. data/config/routes.rb +8 -6
  48. data/lib/generators/app/template.rb +1 -1
  49. data/lib/iqvoc/ability.rb +3 -0
  50. data/lib/iqvoc/configuration/collection.rb +2 -2
  51. data/lib/iqvoc/configuration/concept.rb +1 -1
  52. data/lib/iqvoc/configuration/core.rb +6 -4
  53. data/lib/iqvoc/configuration/label.rb +2 -2
  54. data/lib/iqvoc/controller_extensions.rb +1 -1
  55. data/lib/iqvoc/environments/development.rb +6 -0
  56. data/lib/iqvoc/environments/production.rb +6 -0
  57. data/lib/iqvoc/environments/test.rb +6 -0
  58. data/lib/iqvoc/instance_configuration.rb +3 -2
  59. data/lib/iqvoc/skos_importer.rb +23 -0
  60. data/lib/iqvoc/version.rb +1 -1
  61. data/lib/tasks/importer.rake +2 -2
  62. data/test/integration/alphabetical_test.rb +2 -2
  63. data/test/integration/browse_concepts_and_labels_test.rb +4 -4
  64. data/test/integration/untranslated_test.rb +3 -3
  65. data/test/unit/hygiene_test.rb +4 -0
  66. data/test/unit/instance_configuration_test.rb +17 -1
  67. data/test/unit/skos_import_test.rb +19 -0
  68. data/vendor/assets/images/jquery-ui/ui-icons_469bdd_256x240.png +0 -0
  69. data/vendor/assets/javascripts/{jquery-ui-1.8.20.custom.js → jquery-ui-1.8.23.custom.js} +124 -69
  70. data/vendor/assets/stylesheets/{jquery-ui-1.8.20.custom.css → jquery-ui-1.8.23.custom.css} +5 -7
  71. metadata +34 -31
  72. data/app/assets/javascripts/iqvoc/visualization.js +0 -321
  73. data/app/views/concepts/_visualization.html.erb +0 -11
  74. data/vendor/assets/javascripts/excanvas.js +0 -35
  75. data/vendor/assets/javascripts/jit_rgraph.js +0 -153
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 4.0.3
2
+
3
+ * New frontpage with quick search
4
+ * SKOS importer now supports blank nodes
5
+ * Bugfixes
6
+
1
7
  ## 4.0.2
2
8
 
3
9
  * Support for collections in SKOS importer (@fgimenez)
data/Gemfile.lock CHANGED
@@ -36,18 +36,16 @@ GEM
36
36
  activesupport (3.2.6)
37
37
  i18n (~> 0.6)
38
38
  multi_json (~> 1.0)
39
- addressable (2.2.8)
40
- ansi (1.4.2)
39
+ addressable (2.3.2)
40
+ ansi (1.4.3)
41
41
  arel (3.0.2)
42
- authlogic (3.1.2)
42
+ authlogic (3.1.3)
43
43
  activerecord (>= 3.0.0)
44
- activerecord (>= 3.0.7)
45
44
  activesupport (>= 3.0.0)
46
- activesupport (>= 3.0.7)
47
- awesome_print (1.0.2)
45
+ awesome_print (1.1.0)
48
46
  bouncy-castle-java (1.5.0146.1)
49
- builder (3.0.0)
50
- cancan (1.6.7)
47
+ builder (3.0.3)
48
+ cancan (1.6.8)
51
49
  capybara (1.1.2)
52
50
  mime-types (>= 1.16)
53
51
  nokogiri (>= 1.3.3)
@@ -55,36 +53,36 @@ GEM
55
53
  rack-test (>= 0.5.4)
56
54
  selenium-webdriver (~> 2.0)
57
55
  xpath (~> 0.1.4)
58
- capybara-screenshot (0.1.10)
56
+ capybara-screenshot (0.2.2)
59
57
  capybara (>= 1.0)
60
58
  capybara-webkit (0.12.1)
61
59
  capybara (>= 1.0.0, < 1.2)
62
60
  json
63
- childprocess (0.3.2)
64
- ffi (~> 1.0.6)
61
+ childprocess (0.3.5)
62
+ ffi (~> 1.0, >= 1.0.6)
65
63
  database_cleaner (0.8.0)
66
64
  erubis (2.7.0)
67
- excon (0.14.0)
65
+ excon (0.16.2)
68
66
  execjs (1.4.0)
69
67
  multi_json (~> 1.0)
70
- factory_girl (3.3.0)
68
+ factory_girl (4.1.0)
71
69
  activesupport (>= 3.0.0)
72
- factory_girl_rails (3.3.0)
73
- factory_girl (~> 3.3.0)
70
+ factory_girl_rails (4.1.0)
71
+ factory_girl (~> 4.1.0)
74
72
  railties (>= 3.0.0)
75
73
  fastercsv (1.5.5)
76
- ffi (1.0.11)
77
- ffi (1.0.11-java)
78
- heroku (2.26.6)
79
- heroku-api (~> 0.2.4)
74
+ ffi (1.1.5)
75
+ ffi (1.1.5-java)
76
+ heroku (2.31.2)
77
+ heroku-api (~> 0.3.4)
80
78
  launchy (>= 0.3.2)
81
- netrc (~> 0.7.2)
79
+ netrc (~> 0.7.7)
82
80
  rest-client (~> 1.6.1)
83
81
  rubyzip
84
- heroku-api (0.2.4)
85
- excon (~> 0.14.0)
82
+ heroku-api (0.3.5)
83
+ excon (~> 0.16.1)
86
84
  hike (1.2.1)
87
- i18n (0.6.0)
85
+ i18n (0.6.1)
88
86
  iq_rdf (0.1.5)
89
87
  builder
90
88
  bundler
@@ -93,33 +91,32 @@ GEM
93
91
  journey (1.0.4)
94
92
  jruby-openssl (0.7.7)
95
93
  bouncy-castle-java (>= 1.5.0146.1)
96
- json (1.7.3)
97
- json (1.7.3-java)
94
+ json (1.7.5)
95
+ json (1.7.5-java)
98
96
  kaminari (0.13.0)
99
97
  actionpack (>= 3.0.0)
100
98
  activesupport (>= 3.0.0)
101
- railties (>= 3.0.0)
102
- launchy (2.1.0)
103
- addressable (~> 2.2.6)
104
- launchy (2.1.0-java)
105
- addressable (~> 2.2.6)
106
- ffi (~> 1.0.9)
99
+ launchy (2.1.2)
100
+ addressable (~> 2.3)
101
+ launchy (2.1.2-java)
102
+ addressable (~> 2.3)
103
+ ffi (~> 1.1.1)
107
104
  spoon (~> 0.0.1)
108
105
  libv8 (3.3.10.4)
109
- libwebsocket (0.1.3)
106
+ libwebsocket (0.1.5)
110
107
  addressable
111
108
  mail (2.4.4)
112
109
  i18n (>= 0.4.0)
113
110
  mime-types (~> 1.16)
114
111
  treetop (~> 1.4.8)
115
- mime-types (1.18)
116
- minitest (3.0.1)
112
+ mime-types (1.19)
113
+ minitest (3.4.0)
117
114
  multi_json (1.3.6)
118
115
  mysql2 (0.3.11)
119
- netrc (0.7.4)
120
- nokogiri (1.5.3)
121
- nokogiri (1.5.3-java)
122
- pg (0.13.2)
116
+ netrc (0.7.7)
117
+ nokogiri (1.5.5)
118
+ nokogiri (1.5.5-java)
119
+ pg (0.14.1)
123
120
  polyglot (0.3.3)
124
121
  rack (1.4.1)
125
122
  rack-cache (1.2)
@@ -150,15 +147,14 @@ GEM
150
147
  json (~> 1.4)
151
148
  rest-client (1.6.7)
152
149
  mime-types (>= 1.16)
153
- rubyzip (0.9.8)
154
- sass (3.1.19)
150
+ rubyzip (0.9.9)
151
+ sass (3.2.1)
155
152
  sass-rails (3.2.5)
156
153
  railties (~> 3.2.0)
157
154
  sass (>= 3.1.10)
158
155
  tilt (~> 1.3)
159
- selenium-webdriver (2.22.1)
156
+ selenium-webdriver (2.25.0)
160
157
  childprocess (>= 0.2.5)
161
- ffi (~> 1.0)
162
158
  libwebsocket (~> 0.1.3)
163
159
  multi_json (~> 1.0)
164
160
  rubyzip
@@ -174,19 +170,19 @@ GEM
174
170
  rack (~> 1.0)
175
171
  tilt (~> 1.1, != 1.3.0)
176
172
  sqlite3 (1.3.6)
177
- therubyracer (0.10.1)
173
+ therubyracer (0.10.2)
178
174
  libv8 (~> 3.3.10)
179
- thor (0.15.3)
175
+ thor (0.16.0)
180
176
  tilt (1.3.3)
181
177
  treetop (1.4.10)
182
178
  polyglot
183
179
  polyglot (>= 0.3.1)
184
- turn (0.9.5)
180
+ turn (0.9.6)
185
181
  ansi
186
182
  tzinfo (0.3.33)
187
- uglifier (1.2.4)
183
+ uglifier (1.3.0)
188
184
  execjs (>= 0.3.0)
189
- multi_json (>= 1.0.2)
185
+ multi_json (~> 1.0, >= 1.0.2)
190
186
  view_marker (1.0.0)
191
187
  rails
192
188
  xpath (0.1.4)
@@ -1,6 +1,6 @@
1
1
  //= require jquery-1.7.1
2
2
  //= require rails
3
- //= require jquery-ui-1.8.20.custom
3
+ //= require jquery-ui-1.8.23.custom
4
4
  //= require jquery-ui.datepicker-de
5
5
  //= require jquery.treeview
6
6
  //= require jquery.treeview.async
@@ -0,0 +1,19 @@
1
+ /*jslint vars: true, white: true */
2
+ /*global jQuery, IQVOC */
3
+
4
+ IQVOC.extractConcepts = function(html) {
5
+ "use strict";
6
+ var $ = jQuery;
7
+
8
+ // disable scripts (adapted from jQuery's `load`)
9
+ var rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;
10
+ html = html.replace(rscript, "");
11
+
12
+ var concepts = $("<div />").append(html).find("ul.concepts li");
13
+ concepts = concepts.map(function(i, node) {
14
+ var el = $("a", node);
15
+ return { value: el.attr("href"), label: $.trim(el.text()) };
16
+ });
17
+
18
+ return concepts.length ? Array.prototype.slice.call(concepts, 0) : [];
19
+ };
@@ -26,18 +26,18 @@ var createNote = function(ev) {
26
26
 
27
27
  clone.find("label").each(function(index, element) {
28
28
  var el = $(element);
29
- if (el.attr("for")) {
29
+ if(el.attr("for")) {
30
30
  el.attr("for", el.attr("for").replace(/_\d+_/, newIdCount));
31
31
  }
32
- })
32
+ });
33
33
 
34
34
  clone.find(inputSelector).each(function(index, element) {
35
35
  var el = $(element);
36
36
  el.val("");
37
- if (el.attr("id")) {
37
+ if(el.attr("id")) {
38
38
  el.attr("id", el.attr("id").replace(/_\d+_/, newIdCount));
39
39
  }
40
- if (el.attr("name")) {
40
+ if(el.attr("name")) {
41
41
  el.attr("name", el.attr("name").replace(/\[\d+\]/, newNameCount));
42
42
  }
43
43
  });
@@ -67,15 +67,9 @@ return {
67
67
  jQuery(document).ready(function($) {
68
68
  "use strict";
69
69
 
70
- var locale = document.documentElement.getAttribute("lang");
70
+ IQVOC.quicksearch(".quicksearch");
71
71
 
72
- if(IQVOC.visualization) {
73
- IQVOC.visualization.init("infovis", function(container) {
74
- if(IQVOC.Storage.getItem("visualization") === "enlarged") {
75
- container.data("widget").toggleSize(true);
76
- }
77
- });
78
- }
72
+ var locale = document.documentElement.getAttribute("lang");
79
73
 
80
74
  // language selection
81
75
  $("#language_selection .dropdown-toggle").click(function(ev) { // use Bootstrap's Dropwdown, but without the side-effects
@@ -202,4 +196,6 @@ jQuery(document).ready(function($) {
202
196
  }
203
197
  });
204
198
  });
199
+
200
+ IQVOC.onebox(".onebox");
205
201
  });
@@ -1,4 +1,7 @@
1
1
  //= require iqvoc/iqvoc
2
+ //= require iqvoc/extract_concepts
3
+ //= require iqvoc/quicksearch
4
+ //= require iqvoc/onebox
2
5
  //= require iqvoc/langselect
3
6
  //= require iqvoc/entityselect
4
7
  //= require iqvoc/entityselect_qualified
@@ -0,0 +1,44 @@
1
+ /*jslint vars: true, browser: true, white: true */
2
+ /*global jQuery, IQVOC */
3
+
4
+ IQVOC.onebox = (function($) {
5
+
6
+ "use strict";
7
+
8
+ var renderResults = function(concepts, container) {
9
+ container.empty();
10
+ $.each(concepts, function(i, concept) {
11
+ var link = $("<a />").attr("href", concept.value).text(concept.label);
12
+ $("<li />").append(link).appendTo(container);
13
+ });
14
+ };
15
+
16
+ var getConcepts = function(input, container) {
17
+ var form = input.closest("form");
18
+ $.ajax({
19
+ type: form.attr("method"),
20
+ url: form.attr("action"),
21
+ data: form.serialize(),
22
+ success: function(data, status, xhr) {
23
+ renderResults(IQVOC.extractConcepts(data), container);
24
+ }
25
+ });
26
+ };
27
+
28
+ return function(selector, options) {
29
+ var container = $(selector);
30
+ var input = container.find("input[type=search]");
31
+ var initialValue = input.val();
32
+ var resultList = $("<ul />").addClass("results").appendTo(container);
33
+
34
+ input.keyup(function() {
35
+ if (input.val().length == 0) {
36
+ resultList.empty();
37
+ }
38
+ else if (input.val().length > 0 && input.val() != initialValue) {
39
+ setTimeout(function() { getConcepts(input, resultList) }, 200);
40
+ }
41
+ });
42
+ };
43
+
44
+ }(jQuery));
@@ -0,0 +1,41 @@
1
+ /*jslint vars: true, browser: true, white: true */
2
+ /*global jQuery, IQVOC */
3
+
4
+ IQVOC.quicksearch = (function($) {
5
+
6
+ "use strict";
7
+
8
+ var defaults = {
9
+ minLength: 3,
10
+ autoFocus: true,
11
+ source: getConcepts,
12
+ focus: function(ev, ui) { ev.preventDefault(); },
13
+ select: onSelect
14
+ };
15
+
16
+ function onSelect(ev, ui) {
17
+ if(ui.item.value) {
18
+ $(ev.target).val(ui.item.label);
19
+ document.location = ui.item.value;
20
+ }
21
+ ev.preventDefault();
22
+ }
23
+
24
+ function getConcepts(req, callback) {
25
+ var form = $(this.element).closest("form");
26
+ $.ajax({
27
+ type: form.attr("method"),
28
+ url: form.attr("action"),
29
+ data: form.serialize(),
30
+ success: function(data, status, xhr) {
31
+ callback(IQVOC.extractConcepts(data));
32
+ }
33
+ });
34
+ }
35
+
36
+ return function(selector, options) {
37
+ options = options ? $.extend(defaults, options) : defaults;
38
+ $(selector).autocomplete(options);
39
+ };
40
+
41
+ }(jQuery));
@@ -2,5 +2,5 @@
2
2
  *= require bootstrap/bootstrap
3
3
  *= require bootstrap/bootstrap-responsive
4
4
  *= require jquery.treeview
5
- *= require jquery-ui-1.8.20.custom
5
+ *= require jquery-ui-1.8.23.custom
6
6
  */
@@ -51,13 +51,6 @@
51
51
  }
52
52
  }
53
53
 
54
- // Hide search form
55
- @media (max-width: 1200px) {
56
- .navbar-search {
57
- display: none;
58
- }
59
- }
60
-
61
54
  // Unify topbar margin on all viewports
62
55
  @media (min-width: 980px) {
63
56
  .navbar-fixed-top {
@@ -1,3 +1,30 @@
1
+ .navbar {
2
+ .quicksearch {
3
+ }
4
+ }
5
+
6
+ .onebox {
7
+ padding-top: 80px;
8
+ margin-top: 2em;
9
+ text-align: center;
10
+
11
+ background: asset-data-url("iqvoc_logo.png") top center no-repeat;
12
+
13
+ .logo {
14
+ margin: 2em 0 1em 0;
15
+ }
16
+
17
+ input {
18
+ min-width: 60%;
19
+ }
20
+
21
+ ul {
22
+ margin-left: 0;
23
+ list-style: none;
24
+ text-align: left;
25
+ }
26
+ }
27
+
1
28
  tr.highlightable {
2
29
  cursor: pointer;
3
30
  }
@@ -79,4 +106,3 @@ dt {
79
106
  }
80
107
  }
81
108
  }
82
-
@@ -9,5 +9,4 @@
9
9
  *= require iqvoc/note
10
10
  *= require iqvoc/entity_select
11
11
  *= require iqvoc/hacks
12
- *= require iqvoc/visualization
13
12
  */
@@ -14,7 +14,7 @@
14
14
  # See the License for the specific language governing permissions and
15
15
  # limitations under the License.
16
16
 
17
- require "iqvoc/controller_extensions"
17
+ require 'iqvoc/controller_extensions'
18
18
 
19
19
  class ApplicationController < ActionController::Base
20
20
  include Iqvoc::ControllerExtensions
@@ -19,9 +19,13 @@ class Concepts::AlphabeticalController < ConceptsController
19
19
  def index
20
20
  authorize! :read, Concept::Base
21
21
 
22
+ params[:prefix] = params[:letter] if params[:prefix].nil? # legacy compatibility -- XXX: unnecessary!?
23
+
24
+ redirect_to(url_for :prefix => "a") unless params[:prefix]
25
+
22
26
  @pref_labelings = Iqvoc::Concept.pref_labeling_class.
23
27
  concept_published.
24
- label_begins_with(params[:letter]).
28
+ label_begins_with(params[:prefix]).
25
29
  by_label_language(I18n.locale).
26
30
  includes(:target).
27
31
  order("LOWER(#{Label::Base.table_name}.value)").
@@ -24,7 +24,7 @@ class Concepts::UntranslatedController < ConceptsController
24
24
  authorize! :read, Concept::Base
25
25
 
26
26
  scope = Iqvoc::Concept.pref_labeling_class.label_class.
27
- begins_with(params[:letter]).
27
+ begins_with(params[:prefix]).
28
28
  missing_translation(I18n.locale, Iqvoc::Concept.pref_labeling_languages.first)
29
29
 
30
30
  if I18n.locale.to_s == Iqvoc::Concept.pref_labeling_languages.first # TODO: Should be 404!
@@ -85,6 +85,8 @@ class ConceptsController < ApplicationController
85
85
  }
86
86
  render :json => concept_data
87
87
  end
88
+ format.ttl
89
+ format.rdf
88
90
  end
89
91
  end
90
92
 
@@ -0,0 +1,23 @@
1
+ # encoding: UTF-8
2
+
3
+ # Copyright 2011 innoQ Deutschland GmbH
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ class FrontpageController < ApplicationController
18
+
19
+ def index
20
+ @suppress_quicksearch = true
21
+ end
22
+
23
+ end
@@ -67,7 +67,7 @@ class InstanceConfigurationController < ApplicationController
67
67
  Iqvoc::InstanceConfiguration.validate_value(value)
68
68
  if default_value.is_a?(Array)
69
69
  return value.to_csv.strip
70
- else # String, Fixnum / Float
70
+ else # boolean, String, Fixnum / Float
71
71
  return value.to_s
72
72
  end
73
73
  end
@@ -89,7 +89,15 @@ class InstanceConfigurationController < ApplicationController
89
89
  # converts string to given (non-complex) type
90
90
  # raises TypeError on failure
91
91
  def convert_value(str, type)
92
- if type == String
92
+ if [TrueClass, FalseClass].include?(type)
93
+ if str == "true"
94
+ return true
95
+ elsif str == "false"
96
+ return false
97
+ else
98
+ raise TypeError, "expected boolean"
99
+ end
100
+ elsif type == String
93
101
  return str
94
102
  elsif type == Fixnum
95
103
  raise TypeError, "expected integer" unless str =~ /^[-+]?[0-9]+$/
@@ -0,0 +1,21 @@
1
+ # encoding: UTF-8
2
+
3
+ # Copyright 2011 innoQ Deutschland GmbH
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ class PagesController < ApplicationController
18
+ def help
19
+ authorize! :read, :help
20
+ end
21
+ end
@@ -27,25 +27,4 @@ class RdfController < ApplicationController
27
27
  end
28
28
  end
29
29
 
30
- def show
31
- scope = if params[:published] == "0"
32
- Iqvoc::Concept.base_class.unpublished
33
- else
34
- Iqvoc::Concept.base_class.published
35
- end
36
- if @concept = scope.by_origin(params[:id]).with_associations.last
37
- respond_to do |format|
38
- format.html do
39
- redirect_to concept_url(:id => @concept.origin, :published => params[:published])
40
- end
41
- format.any do
42
- authorize! :read, @concept
43
- render :show_concept
44
- end
45
- end
46
- else
47
- raise ActiveRecord::RecordNotFound.new("Concept '#{params[:id]}' not found.")
48
- end
49
- end
50
-
51
30
  end
@@ -30,7 +30,7 @@ module ConceptsHelper
30
30
  content_tag :ul, :class => 'letter-selector unstyled' do
31
31
  letters.map do |letter|
32
32
  content_tag :li, link_to(letter, yield(letter)),
33
- :class => ('active' if params[:letter] == letter.to_s.downcase)
33
+ :class => ('active' if params[:prefix] == letter.to_s.downcase)
34
34
  end.join("").html_safe
35
35
  end
36
36
  end
@@ -55,14 +55,4 @@ module NavigationHelper
55
55
  content_tag :li, content, :class => css_class
56
56
  end
57
57
 
58
- def quick_search_class
59
- klass = if Labeling.const_defined?(:SKOSXL)
60
- Labeling::SKOSXL::Base
61
- else
62
- Labeling::SKOS::Base
63
- end
64
-
65
- klass.name.parameterize
66
- end
67
-
68
58
  end
@@ -25,7 +25,7 @@ module RdfHelper
25
25
  hash[c.id] = c.origin
26
26
  end
27
27
 
28
- document << concept.build_rdf_subject(document, controller) do |c|
28
+ document << concept.build_rdf_subject(document, nil) do |c|
29
29
 
30
30
  concept.collection_members.each do |collection_member|
31
31
  if @rdf_helper_cached_collections[collection_member.collection_id]
@@ -449,7 +449,7 @@ class Concept::Base < ActiveRecord::Base
449
449
  def ensure_rooted_top_terms
450
450
  if @full_validation
451
451
  if narrower_relations.includes(:target). # XXX: inefficient?
452
- select { |rel| rel.target.top_term? }.any?
452
+ select { |rel| rel.target && rel.target.top_term? }.any?
453
453
  errors.add :base, I18n.t("txt.models.concept.top_term_rooted_error")
454
454
  end
455
455
  end
@@ -472,7 +472,7 @@ class Concept::Base < ActiveRecord::Base
472
472
  send(Iqvoc::Concept.pref_labeling_class_name.to_relation_name).map(&:target) +
473
473
  labelings.select{|l| l.is_a?(Iqvoc::Concept.pref_labeling_class)}.map(&:target)
474
474
  languages = {}
475
- pls.each do |pref_label|
475
+ pls.compact.each do |pref_label|
476
476
  lang = pref_label.language.to_s
477
477
  origin = (pref_label.origin || pref_label.id || pref_label.value).to_s
478
478
  if (languages.keys.include?(lang) && languages[lang] != origin)
@@ -21,7 +21,7 @@ class Concept::SKOS::Base < Concept::Base
21
21
 
22
22
  def build_rdf_subject(document, controller, &block)
23
23
  ns = IqRdf::Namespace.find_namespace_class(self.rdf_namespace)
24
- raise "Namespace '#{base_namespace}' is not defined in IqRdf document." unless ns
24
+ raise "Namespace '#{self.rdf_namespace}' is not defined in IqRdf document." unless ns
25
25
  subject = IqRdf.build_uri(self.origin, ns.build_uri(self.rdf_class), &block)
26
26
 
27
27
  # ensure skos:Concept type is present
@@ -42,8 +42,11 @@ class Label::Base < ActiveRecord::Base
42
42
  end
43
43
  end
44
44
 
45
- def self.begins_with(letter)
46
- where("LOWER(SUBSTR(#{Label::Base.table_name}.value, 1, 1)) = :letter", :letter => letter.to_s.downcase)
45
+ def self.begins_with(prefix)
46
+ prefix = prefix.to_s
47
+ table = Label::Base.table_name
48
+ where("LOWER(SUBSTR(#{table}.value, 1, :length)) = :prefix",
49
+ :length => prefix.length, :prefix => prefix.downcase)
47
50
  end
48
51
 
49
52
  def self.missing_translation(lang, main_lang)
@@ -45,8 +45,8 @@ class Labeling::Base < ActiveRecord::Base
45
45
  includes(:target).merge(Label::Base.published)
46
46
  end
47
47
 
48
- def self.label_begins_with(letter)
49
- includes(:target).merge(Label::Base.begins_with(letter))
48
+ def self.label_begins_with(prefix)
49
+ includes(:target).merge(Label::Base.begins_with(prefix))
50
50
  end
51
51
 
52
52
  def self.by_label_language(lang)
@@ -83,7 +83,7 @@ class Labeling::SKOS::Base < Labeling::Base
83
83
 
84
84
  def self.build_from_rdf(subject, predicate, object)
85
85
  raise "Labeling::SKOS::Base#build_from_rdf: Subject (#{subject}) must be a Concept." unless subject.is_a?(Concept::Base)
86
- raise "Labeling::SKOS::Base#build_from_rdf: Object (#{object}) must be a string literal" unless object =~ /^"(.+)"(@(.+))$/
86
+ raise "Labeling::SKOS::Base#build_from_rdf: Object (#{object}) must be a string literal" unless object =~ /^"(.+)"(@(.+))?$/
87
87
 
88
88
  lang = $3
89
89
  value = JSON.parse(%Q{["#{$1}"]})[0].gsub("\\n", "\n") # Trick to decode \uHHHHH chars