iqvoc 4.13.0 → 4.13.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -1
- data/Gemfile +9 -10
- data/Gemfile.lock +206 -167
- data/README.md +7 -6
- data/app/assets/javascripts/framework.js +3 -3
- data/app/assets/javascripts/iqvoc/hover_menues.js +14 -0
- data/app/assets/javascripts/iqvoc/iqvoc.js +46 -41
- data/app/assets/javascripts/iqvoc/manifest.js +2 -1
- data/app/assets/javascripts/iqvoc/treeview.js +2 -1
- data/app/assets/stylesheets/iqvoc/components/_entity_select.scss +5 -8
- data/app/assets/stylesheets/iqvoc/components/_simplete.scss +2 -1
- data/app/assets/stylesheets/iqvoc/components/_treeview.scss +1 -0
- data/app/assets/stylesheets/iqvoc/hacks/_hacks.scss +1 -1
- data/app/controllers/collections/versions_controller.rb +1 -1
- data/app/controllers/collections_controller.rb +1 -1
- data/app/controllers/concepts/alphabetical_controller.rb +1 -1
- data/app/controllers/concepts/scheme_controller.rb +2 -1
- data/app/controllers/concepts/versions_controller.rb +1 -1
- data/app/controllers/concepts_controller.rb +9 -3
- data/app/controllers/hierarchy_controller.rb +1 -1
- data/app/controllers/search_results_controller.rb +3 -0
- data/app/controllers/triplestore_sync_controller.rb +2 -2
- data/app/controllers/users_controller.rb +1 -1
- data/app/helpers/application_helper.rb +6 -3
- data/app/helpers/concepts_helper.rb +3 -3
- data/app/helpers/link_helper.rb +7 -7
- data/app/helpers/navigation_helper.rb +24 -13
- data/app/models/abstract_user.rb +1 -1
- data/app/models/concept/base.rb +10 -1
- data/app/models/concept/skos/base.rb +0 -10
- data/app/models/concept/validations.rb +6 -4
- data/app/models/concerns/versioning.rb +1 -1
- data/app/models/dataset/adaptors/iqvoc/http_adaptor.rb +1 -1
- data/app/models/dataset/adaptors/iqvoc/label_adaptor.rb +1 -1
- data/app/models/dataset/adaptors/iqvoc/search_adaptor.rb +1 -1
- data/app/models/labeling/skos/base.rb +14 -10
- data/app/models/user_session.rb +0 -3
- data/app/services/rdf_sync_service.rb +3 -3
- data/app/views/concepts/alphabetical/_search_result.html.erb +3 -1
- data/app/views/concepts/hierarchical/_treeview.html.erb +4 -1
- data/app/views/concepts/scheme/show.html.erb +1 -3
- data/app/views/errors/server_error.html.erb +1 -2
- data/app/views/partials/collection/_member.html.erb +1 -1
- data/app/views/partials/concept/relation/_base.html.erb +4 -4
- data/app/views/partials/concept/relation/skos/_narrower.html.erb +1 -1
- data/app/views/partials/concept/relation/skos/broader/_mono.html.erb +2 -2
- data/app/views/partials/concept/relation/skos/broader/_poly.html.erb +2 -2
- data/app/views/partials/labeling/skos/_base.html.erb +1 -1
- data/app/views/partials/labeling/skos/_edit_base.html.erb +2 -1
- data/app/views/partials/labeling/skos/_search_result.html.erb +3 -0
- data/app/views/partials/match/_panel.html.erb +2 -2
- data/app/views/partials/notation/_base.html.erb +1 -1
- data/app/views/search_results/sections/_options.html.erb +10 -0
- data/app/views/search_results/sections/_terms.html.erb +1 -1
- data/app/views/search_results/sections/_type.html.erb +1 -1
- data/bin/bundle +3 -0
- data/bin/delayed_job +5 -0
- data/bin/rails +4 -0
- data/bin/rake +4 -0
- data/bin/setup +36 -0
- data/bin/update +31 -0
- data/bin/yarn +17 -0
- data/config/application.rb +15 -10
- data/config/boot.rb +2 -2
- data/config/cable.yml +1 -1
- data/config/database.yml +14 -19
- data/config/engine.rb +0 -1
- data/config/environment.rb +1 -1
- data/config/initializers/backtrace_silencers.rb +4 -3
- data/config/initializers/content_security_policy.rb +5 -0
- data/config/initializers/filter_parameter_logging.rb +3 -1
- data/config/initializers/permissions_policy.rb +11 -0
- data/config/initializers/wrap_parameters.rb +3 -3
- data/config/initializers/zeitwerk.rb +6 -0
- data/config/locales/activerecord.de.yml +2 -2
- data/config/locales/de.yml +7 -3
- data/config/locales/en.yml +5 -1
- data/config/puma.rb +10 -4
- data/db/migrate/20220107114201_add_fk_constraint_to_active_storage_attachments_for_blob_id.active_storage.rb +10 -0
- data/db/schema.rb +6 -6
- data/iqvoc.gemspec +10 -11
- data/lib/iqvoc/configuration/core.rb +9 -2
- data/lib/iqvoc/configuration/instance_configuration.rb +1 -1
- data/lib/iqvoc/environments/development.rb +18 -7
- data/lib/iqvoc/environments/production.rb +35 -12
- data/lib/iqvoc/environments/test.rb +14 -7
- data/lib/iqvoc/version.rb +1 -1
- data/lib/tasks/sync.rake +1 -1
- data/test/authentication.rb +1 -1
- data/test/controllers/hierarchy_test.rb +4 -4
- data/test/integration/client_edit_concept_test.rb +1 -1
- data/test/integration/concept_collection_assignment_test.rb +6 -6
- data/test/integration/search_test.rb +3 -3
- data/test/integration_test_helper.rb +2 -2
- data/test/models/rdf_sync_test.rb +3 -3
- data/test/models/zeitwerk_compliance_test.rb +7 -0
- metadata +83 -250
- data/config/initializers/new_framework_defaults_5_1.rb +0 -14
- data/config/initializers/sqlite3_booleans.rb +0 -1
- data/public/422.html +0 -58
- data/public/assets/fonts/FiraMono-Regular-0b6138c5b386dc9125473fd851926f29.ttf +0 -0
- data/public/assets/fonts/FiraMono-Regular-690950e8d89c92cba41eeeb13f1de93e.woff +0 -0
- data/public/assets/fonts/FiraMono-Regular-98f97ed2dbf9d94d4fa5df048434b88d.eot +0 -0
- data/public/assets/fonts/FiraMono-Regular.eot +0 -0
- data/public/assets/fonts/FiraMono-Regular.ttf +0 -0
- data/public/assets/fonts/FiraMono-Regular.woff +0 -0
- data/public/assets/fonts/FiraSans-Bold-0de5f536bd0dc370449c0c67a49a6fe7.eot +0 -0
- data/public/assets/fonts/FiraSans-Bold-25037ef8d155e38b5df0c242a4c6cf2d.ttf +0 -0
- data/public/assets/fonts/FiraSans-Bold-494219a9639084eb9528ff47f79fcda1.woff +0 -0
- data/public/assets/fonts/FiraSans-Bold.eot +0 -0
- data/public/assets/fonts/FiraSans-Bold.ttf +0 -0
- data/public/assets/fonts/FiraSans-Bold.woff +0 -0
- data/public/assets/fonts/FiraSans-BoldItalic-5b3b812df9e1cb2b1f34baad65a2bdfb.ttf +0 -0
- data/public/assets/fonts/FiraSans-BoldItalic-90b8087c48feff2e828f658c49de5399.eot +0 -0
- data/public/assets/fonts/FiraSans-BoldItalic-b10e46158d50bf9b78968112acf87310.woff +0 -0
- data/public/assets/fonts/FiraSans-BoldItalic.eot +0 -0
- data/public/assets/fonts/FiraSans-BoldItalic.ttf +0 -0
- data/public/assets/fonts/FiraSans-BoldItalic.woff +0 -0
- data/public/assets/fonts/FiraSans-Book-659d252627051e785260ba445da8930f.woff +0 -0
- data/public/assets/fonts/FiraSans-Book-abc65ceb7bfaed729bff7a9d1367b7d4.eot +0 -0
- data/public/assets/fonts/FiraSans-Book-f0410501d5ecc5fe66bcdbc02b482c81.ttf +0 -0
- data/public/assets/fonts/FiraSans-Book.eot +0 -0
- data/public/assets/fonts/FiraSans-Book.ttf +0 -0
- data/public/assets/fonts/FiraSans-Book.woff +0 -0
- data/public/assets/fonts/FiraSans-ExtraLight-140f15ee97cb2099ff01c2b57dcd1a24.woff +0 -0
- data/public/assets/fonts/FiraSans-ExtraLight-28e5c2679df66406ebd117fbdded6753.eot +0 -0
- data/public/assets/fonts/FiraSans-ExtraLight-c15de70ebceffce178cbd2e82aa2c373.ttf +0 -0
- data/public/assets/fonts/FiraSans-ExtraLight.eot +0 -0
- data/public/assets/fonts/FiraSans-ExtraLight.ttf +0 -0
- data/public/assets/fonts/FiraSans-ExtraLight.woff +0 -0
- data/public/assets/fonts/FiraSans-Italic-ac4cb18fe14a7c90f29cdd2ce499ba59.woff +0 -0
- data/public/assets/fonts/FiraSans-Italic-bdea00fee0da5ca9176061e00c26a0da.eot +0 -0
- data/public/assets/fonts/FiraSans-Italic-e7e76a0ee170fd29b5d8100753eff569.ttf +0 -0
- data/public/assets/fonts/FiraSans-Italic.eot +0 -0
- data/public/assets/fonts/FiraSans-Italic.ttf +0 -0
- data/public/assets/fonts/FiraSans-Italic.woff +0 -0
- data/public/assets/fonts/FiraSans-Light-20adaf630b690c3e3184daaeae585f22.woff +0 -0
- data/public/assets/fonts/FiraSans-Light-3689e18b38d335ec0c43823adb6a2984.eot +0 -0
- data/public/assets/fonts/FiraSans-Light-55b04531e7a9ecdf58090d70b94b68e2.ttf +0 -0
- data/public/assets/fonts/FiraSans-Light-SC-098407a72b7ad46f7c2480d7ac11baf2.eot +0 -0
- data/public/assets/fonts/FiraSans-Light-SC-82763fe2ce9e6b897556c6f3c2aceb29.woff2 +0 -0
- data/public/assets/fonts/FiraSans-Light-SC-c73985985f0501c1845a5185b180fe6b.woff +0 -0
- data/public/assets/fonts/FiraSans-Light-SC-c9563f48d9cccd91f07e46801c27130f.ttf +0 -0
- data/public/assets/fonts/FiraSans-Light-SC.eot +0 -0
- data/public/assets/fonts/FiraSans-Light-SC.ttf +0 -0
- data/public/assets/fonts/FiraSans-Light-SC.woff +0 -0
- data/public/assets/fonts/FiraSans-Light-SC.woff2 +0 -0
- data/public/assets/fonts/FiraSans-Light.eot +0 -0
- data/public/assets/fonts/FiraSans-Light.ttf +0 -0
- data/public/assets/fonts/FiraSans-Light.woff +0 -0
- data/public/assets/fonts/FiraSans-Medium-082fab59048189168006bf2e914ba8b7.woff +0 -0
- data/public/assets/fonts/FiraSans-Medium-11706edfe8651c355b413bd24b4b5e10.eot +0 -0
- data/public/assets/fonts/FiraSans-Medium-3a0dacdeaba1b4c054f2d6cb5061965d.ttf +0 -0
- data/public/assets/fonts/FiraSans-Medium.eot +0 -0
- data/public/assets/fonts/FiraSans-Medium.ttf +0 -0
- data/public/assets/fonts/FiraSans-Medium.woff +0 -0
- data/public/assets/fonts/FiraSans-MediumItalic-6c8a2646d72641226527d574a8485b66.woff +0 -0
- data/public/assets/fonts/FiraSans-MediumItalic-b81e92794a6878b6c578d97b3ad5e6d7.ttf +0 -0
- data/public/assets/fonts/FiraSans-MediumItalic-eae7f4a3c4db9fe83025909ebfae5ad9.eot +0 -0
- data/public/assets/fonts/FiraSans-MediumItalic.eot +0 -0
- data/public/assets/fonts/FiraSans-MediumItalic.ttf +0 -0
- data/public/assets/fonts/FiraSans-MediumItalic.woff +0 -0
- data/public/assets/fonts/FiraSans-Regular-537188a19aeebdd74a92e114af7a02cb.ttf +0 -0
- data/public/assets/fonts/FiraSans-Regular-5d6a923de9be80ff5c2995cc03d93127.woff +0 -0
- data/public/assets/fonts/FiraSans-Regular-db689e5fea21ed4b7890811151968dc6.eot +0 -0
- data/public/assets/fonts/FiraSans-Regular.eot +0 -0
- data/public/assets/fonts/FiraSans-Regular.ttf +0 -0
- data/public/assets/fonts/FiraSans-Regular.woff +0 -0
- data/public/assets/fonts/FiraSans-UltraLight-3baefce4c224a0f0b26cdafe37dfa55d.eot +0 -0
- data/public/assets/fonts/FiraSans-UltraLight-e3909a352b87f853bb464836adfd602a.ttf +0 -0
- data/public/assets/fonts/FiraSans-UltraLight-f7289beeaa2353caf487553ee8b8ef03.woff +0 -0
- data/public/assets/fonts/FiraSans-UltraLight.eot +0 -0
- data/public/assets/fonts/FiraSans-UltraLight.ttf +0 -0
- data/public/assets/fonts/FiraSans-UltraLight.woff +0 -0
- data/public/assets/fonts/FontAwesome.otf +0 -0
- data/public/assets/fonts/fontawesome-webfont.eot +0 -0
- data/public/assets/fonts/fontawesome-webfont.svg +0 -2671
- data/public/assets/fonts/fontawesome-webfont.ttf +0 -0
- data/public/assets/fonts/fontawesome-webfont.woff +0 -0
- data/public/assets/fonts/fontawesome-webfont.woff2 +0 -0
- data/public/assets/images/ajax-loader-30d8e72bfdae694b1938658e1b087df0.gif +0 -0
- data/public/assets/images/ajax-loader.gif +0 -0
- data/public/assets/images/iqvoc_logo-165f17a46cf0a1bf9464db9d136fb843.svg +0 -41
- data/public/assets/images/iqvoc_logo.svg +0 -41
- data/public/assets/images/treeview-default-line-5e3c0e0c48f48c23c45aef7b72c739c0.gif +0 -0
- data/public/assets/images/treeview-default-line.gif +0 -0
- data/public/assets/javascripts/bootstrap.bundle.min-68b3c2f1c1f636f947fff1229d3ffbf5.js +0 -7
- data/public/assets/javascripts/bootstrap.bundle.min.js +0 -42
- data/public/assets/javascripts/jquery-17e41799d7fba03a313ca6b67d8a0954.js +0 -26
- data/public/assets/javascripts/jquery-d52dc3a9171f1fc89dd0f8e35e42c9d2.js +0 -26
- data/public/assets/javascripts/jquery.js +0 -10875
- data/public/assets/javascripts/manifest-7708201f7c24d5186cd075c3317f9b70.js +0 -7311
- data/public/assets/javascripts/manifest-89894d9f630fa57378a0c28e2a3d9ea9.js +0 -7325
- data/public/assets/javascripts/manifest.js +0 -5660
- data/public/assets/manifest.json +0 -1
- data/public/assets/stylesheets/manifest-893c7de3dee9ed1295bc1b5b4c1f0c34.css +0 -13
- data/public/assets/stylesheets/manifest-94b7be92a9b1cfeafea4ea71af910324.css +0 -13
- data/public/assets/stylesheets/manifest-e576edf92efaaad86b15b565fa473d0b.css +0 -7
- data/public/assets/stylesheets/manifest.css +0 -14314
- data/public/export/12750.nt +0 -28
- data/public/export/17385303752427181100115432751692126521.nt +0 -28
- data/public/export/181196830007276319343907883650755121680.nt +0 -28
- data/public/export/194669028845730209313058462140064732442.nt +0 -28
- data/public/export/21988.nt +0 -28
- data/public/export/230655012044692637365356891394989635995.nt +0 -28
- data/public/export/233590502327750705645106563554497694497.nt +0 -28
- data/public/export/245884359537367641918690456207690070316.nt +0 -28
- data/public/export/250386066048669747259363837063223215204.nt +0 -28
- data/public/export/256041066575224861739818511470898486442.nt +0 -28
- data/public/export/287138383024694264939471429022965897163.nt +0 -28
- data/public/export/31892.nt +0 -28
- data/public/export/333774437366008328346740356666975078086.nt +0 -28
- data/public/export/34639390376251419382098415225771775708.nt +0 -28
- data/public/export/4098.nt +0 -28
- data/public/export/47070.nt +0 -28
- data/public/export/49947.nt +0 -28
- data/public/export/5793.nt +0 -28
- data/public/export/64089124325772410079516909502763866955.nt +0 -28
- data/public/export/64718.nt +0 -28
- data/public/export/71200590939430584664474292378126383577.nt +0 -28
- data/public/export/81965533953024918329855744567916239964.nt +0 -28
- data/public/favicon.ico +0 -0
- data/public/robots.txt +0 -5
- data/public/uploads/import/213b73161661ebbad4e5ee3f543ae617.nt +0 -259
- data/public/uploads/import/22ad4d7419b7914c7319c46a66839f77.nt +0 -259
- data/public/uploads/import/22b78e01b9b5876851578cf9a8373c07.nt +0 -259
- data/public/uploads/import/2ab75781f8141010699dd272f681b245.nt +0 -259
- data/public/uploads/import/4c7fe47a2c21a681fd8f0eb3af0ebf19.nt +0 -259
- data/public/uploads/import/5265d7cb194f017c592a68914ecf8d9f.nt +0 -259
- data/public/uploads/import/5cb5414a66e4ae5dbe05eb763c367bd1.nt +0 -259
- data/public/uploads/import/6b042e00c2e2abf9241d2ece3e67ed27.nt +0 -259
- data/public/uploads/import/749edd3918db157202b00f89418b87d1.nt +0 -259
- data/public/uploads/import/7aeb9d76b78ba67674caa53a96e1caa0.nt +0 -259
- data/public/uploads/import/7b7fc425b8926e586ca10d0f1385aa4e.nt +0 -259
- data/public/uploads/import/8319d34702375718b20e72a6af71c503.nt +0 -259
- data/public/uploads/import/9ec48f5aaece8d2a8770439e34199b19.nt +0 -259
- data/public/uploads/import/a22750632c35587057285920142c2db8.nt +0 -259
- data/public/uploads/import/a6d9eeb5e76ce0032614c8142a33c90b.nt +0 -259
- data/public/uploads/import/a7ec826e32e80d1fc61f5e89f7442199.nt +0 -259
- data/public/uploads/import/af2ac8cb84a194da9871ea701f915a25.nt +0 -259
- data/public/uploads/import/b50c67ef8cb51fa12812ac2601faaa75.nt +0 -259
- data/public/uploads/import/b66560ac9cc4aecd50f82d4fcec8bde4.nt +0 -259
- data/public/uploads/import/c1a12245a41d9105585fb48a0b5244ab.nt +0 -259
- data/public/uploads/import/c4b23750b9f72a7f93bcd979a9afded3.nt +0 -259
- data/public/uploads/import/d1edac76626a35a6e72a592c98e97b1a.nt +0 -259
- data/public/uploads/import/eca92dbeff4aec30e3072103bb5f565f.nt +0 -259
- data/public/uploads/import/f7996f8826062cd8dcfc8fac70e830b9.nt +0 -259
- data/public/uploads/tmp/1609926599-187261935008931-0002-5418/hobbies.nt +0 -259
- data/public/uploads/tmp/1610450700-516890595554445-0002-2685/hobbies.nt +0 -259
- data/public/uploads/tmp/1610450844-597126333235543-0001-0714/hobbies.nt +0 -259
- data/public/uploads/tmp/1611054155-443031323634581-0001-9192/hobbies.nt +0 -259
- data/public/uploads/tmp/1611225485-767301590714814-0002-6904/hobbies.nt +0 -259
- data/public/uploads/tmp/1611225661-919900076415463-0002-0657/hobbies.nt +0 -259
- data/public/uploads/tmp/1611227389-36557097935032-0002-4613/hobbies.nt +0 -259
- data/public/uploads/tmp/1611585376-822293462114758-0001-9752/hobbies.nt +0 -259
- data/public/uploads/tmp/1611585431-703460698560673-0002-7522/hobbies.nt +0 -259
- data/public/uploads/tmp/1611586554-483369300394995-0002-0872/hobbies.nt +0 -259
- data/public/uploads/tmp/1619777137-609890333749067-0002-0264/hobbies.nt +0 -259
- data/public/uploads/tmp/1627291050-163284787457980-0001-2701/hobbies.nt +0 -259
- data/public/uploads/tmp/1627291589-952446089963663-0002-3171/hobbies.nt +0 -259
- data/public/uploads/tmp/1627291819-788250283200541-0002-2503/hobbies.nt +0 -259
- data/public/uploads/tmp/1627292534-103362378955855-0001-7089/hobbies.nt +0 -259
- data/public/uploads/tmp/1627293799-506613299368066-0002-1247/hobbies.nt +0 -259
- data/public/uploads/tmp/1627293863-868842521367397-0001-4656/hobbies.nt +0 -259
- data/public/uploads/tmp/1636993960-338364327912413-0002-8049/hobbies.nt +0 -259
- data/public/uploads/tmp/1641550181-434480636271400-0002-7928/hobbies.nt +0 -259
- data/public/uploads/tmp/1641550416-6444469569098-0002-2156/hobbies.nt +0 -259
- data/public/uploads/tmp/1641550691-848542458162760-0002-6815/hobbies.nt +0 -259
- data/public/uploads/tmp/1641550716-647719127292471-0002-9954/hobbies.nt +0 -259
- data/public/uploads/tmp/1641551058-78248622355227-0002-3663/hobbies.nt +0 -259
- data/public/uploads/tmp/1641551220-744894908610606-0001-3879/hobbies.nt +0 -259
@@ -9,52 +9,57 @@ jQuery(document).ready(function($) {
|
|
9
9
|
var locale = document.documentElement.getAttribute("lang");
|
10
10
|
|
11
11
|
var langWidget = $("ul.lang-widget")[0];
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
btn
|
19
|
-
|
20
|
-
|
21
|
-
el.append(label);
|
22
|
-
return label[0];
|
23
|
-
});
|
24
|
-
$("input:radio", langWidget).on("change", function(ev) {
|
25
|
-
window.location = $(this).closest("label").find("a").attr("href");
|
26
|
-
});
|
27
|
-
// secondary language
|
28
|
-
var toggleSections = function(langSelected) {
|
29
|
-
$(".translation[lang]").each(function(i, node) {
|
30
|
-
var el = $(node),
|
31
|
-
lang = el.attr("lang");
|
32
|
-
if(lang && lang !== locale && $.inArray(lang, langSelected) === -1) {
|
33
|
-
el.addClass("hidden");
|
34
|
-
} else {
|
35
|
-
el.removeClass("hidden");
|
12
|
+
|
13
|
+
if (langWidget) {
|
14
|
+
// primary language (converting links to radio buttons)
|
15
|
+
$("a", langWidget).each(function(i, node) {
|
16
|
+
var link = $(node);
|
17
|
+
var el = link.closest("li");
|
18
|
+
var btn = $('<input type="radio" name="primary_language">');
|
19
|
+
if(link.hasClass("active")) {
|
20
|
+
btn[0].checked = true;
|
36
21
|
}
|
22
|
+
var label = $("<label />").append(btn).append(link);
|
23
|
+
el.append(label);
|
24
|
+
return label[0];
|
37
25
|
});
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
26
|
+
|
27
|
+
$("input:radio", langWidget).on("change", function(ev) {
|
28
|
+
window.location = $(this).closest("label").find("a").attr("href");
|
29
|
+
});
|
30
|
+
|
31
|
+
// secondary language
|
32
|
+
var toggleSections = function(langSelected) {
|
33
|
+
$(".translation[lang]").each(function(i, node) {
|
34
|
+
var el = $(node),
|
35
|
+
lang = el.attr("lang");
|
36
|
+
if(lang && lang !== locale && $.inArray(lang, langSelected) === -1) {
|
37
|
+
el.addClass("hidden");
|
38
|
+
} else {
|
39
|
+
el.removeClass("hidden");
|
46
40
|
}
|
47
41
|
});
|
42
|
+
};
|
43
|
+
var updateNoteLangs = function(langSelected) {
|
44
|
+
$(".inline_note.new select[id*=language]").each(function(i, sel) { // NB: new notes only!
|
45
|
+
$(sel).find("option").each(function(i, opt) {
|
46
|
+
var el = $(opt),
|
47
|
+
lang = el.val();
|
48
|
+
if(lang !== locale && $.inArray(lang, langSelected) === -1) {
|
49
|
+
el.remove();
|
50
|
+
}
|
51
|
+
});
|
52
|
+
});
|
53
|
+
};
|
54
|
+
$(document).on("lang_selected", function(ev, data) {
|
55
|
+
toggleSections(data.langs);
|
56
|
+
updateNoteLangs(data.langs);
|
48
57
|
});
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
var langSelector = new IQVOC.LanguageSelector(langWidget, "lang_selected");
|
55
|
-
if($("#new_concept, #edit_concept").length) { // edit mode
|
56
|
-
// disable secondary language selection to avoid excessive state complexity
|
57
|
-
$(":checkbox", langSelector.container).prop("disabled", true);
|
58
|
+
var langSelector = new IQVOC.LanguageSelector(langWidget, "lang_selected");
|
59
|
+
if($("#new_concept, #edit_concept").length) { // edit mode
|
60
|
+
// disable secondary language selection to avoid excessive state complexity
|
61
|
+
$(":checkbox", langSelector.container).prop("disabled", true);
|
62
|
+
}
|
58
63
|
}
|
59
64
|
|
60
65
|
// hide broader relations for top+ terms (mutually exclusive in mono hierarchies)
|
@@ -15,6 +15,7 @@ import 'jqtree/tree.jquery.js';
|
|
15
15
|
|
16
16
|
var dragabbleSupport = $(container).data('dragabble');
|
17
17
|
var polyhierarchySupport = $(container).data('polyhierarchy-support');
|
18
|
+
var conceptModalPreviewEnabled = $(container).data('concept-modal-preview-enabled');
|
18
19
|
var saveLabel = $(container).data('save-label');
|
19
20
|
var copyLabel = $(container).data('copy-label');
|
20
21
|
var undoLabel = $(container).data('undo-label');
|
@@ -65,7 +66,7 @@ import 'jqtree/tree.jquery.js';
|
|
65
66
|
link.addClass('published');
|
66
67
|
}
|
67
68
|
|
68
|
-
if (link[0]) {
|
69
|
+
if (link[0] && conceptModalPreviewEnabled) {
|
69
70
|
var teaserLink = buildTeaserLink(node, link[0]);
|
70
71
|
$li.find('.jqtree-element').append(teaserLink);
|
71
72
|
}
|
@@ -30,8 +30,9 @@
|
|
30
30
|
list-style-type: none;
|
31
31
|
margin-top: 5px;
|
32
32
|
padding-left: 0;
|
33
|
+
|
33
34
|
li {
|
34
|
-
|
35
|
+
display: inline-block;
|
35
36
|
}
|
36
37
|
}
|
37
38
|
|
@@ -40,11 +41,7 @@
|
|
40
41
|
padding: 0;
|
41
42
|
}
|
42
43
|
|
43
|
-
.
|
44
|
-
|
45
|
-
|
46
|
-
}
|
47
|
-
.sections .entity_list li:last-child:after,
|
48
|
-
.relation-body .entity_list li:last-child:after {
|
49
|
-
content: "";
|
44
|
+
.relation-body .entity_list li:not(:last-child):after {
|
45
|
+
content: ",";
|
46
|
+
margin-left: -0.2rem;
|
50
47
|
}
|
@@ -12,6 +12,7 @@ simplete-suggestions {
|
|
12
12
|
position: absolute;
|
13
13
|
width: 100%;
|
14
14
|
display: block;
|
15
|
+
z-index: 100;
|
15
16
|
|
16
17
|
.search-results {
|
17
18
|
overflow-y: auto;
|
@@ -34,4 +35,4 @@ simplete-suggestions {
|
|
34
35
|
li.search-result:hover {
|
35
36
|
background-color: $gray-200;
|
36
37
|
}
|
37
|
-
}
|
38
|
+
}
|
@@ -125,7 +125,7 @@ class CollectionsController < ApplicationController
|
|
125
125
|
# set to_review to false if someone edits a concepts
|
126
126
|
concept_params["to_review"] = "false"
|
127
127
|
|
128
|
-
if @collection.
|
128
|
+
if @collection.update(concept_params)
|
129
129
|
flash[:success] = I18n.t('txt.controllers.collections.save.success')
|
130
130
|
redirect_to collection_path(@collection, published: 0)
|
131
131
|
else
|
@@ -61,7 +61,7 @@ class Concepts::AlphabeticalController < ConceptsController
|
|
61
61
|
|
62
62
|
def find_labelings
|
63
63
|
letter = (@letters.include?('A')) ? 'a' : @letters.first
|
64
|
-
query = (params[:prefix] || letter)
|
64
|
+
query = (params[:prefix] || letter)&.mb_chars&.downcase.to_s
|
65
65
|
|
66
66
|
Iqvoc::Concept.pref_labeling_class
|
67
67
|
.concept_published
|
@@ -42,6 +42,7 @@ class Concepts::SchemeController < ApplicationController
|
|
42
42
|
@top_concepts = Iqvoc::Concept.base_class
|
43
43
|
.preload(:pref_labels)
|
44
44
|
.tops
|
45
|
+
.not_expired
|
45
46
|
.published.sort_by {|c| c.pref_label }
|
46
47
|
|
47
48
|
respond_to do |format|
|
@@ -59,7 +60,7 @@ class Concepts::SchemeController < ApplicationController
|
|
59
60
|
@scheme = Iqvoc::Concept.root_class.instance
|
60
61
|
authorize! :update, @scheme
|
61
62
|
|
62
|
-
if @scheme.
|
63
|
+
if @scheme.update(concept_params)
|
63
64
|
flash[:success] = t('txt.controllers.concept_scheme.save.success')
|
64
65
|
redirect_to scheme_path
|
65
66
|
else
|
@@ -147,7 +147,7 @@ class ConceptsController < ApplicationController
|
|
147
147
|
authorize! :create, Iqvoc::Concept.base_class
|
148
148
|
|
149
149
|
@concept = Iqvoc::Concept.base_class.new
|
150
|
-
@concept.reverse_match_service = Services::ReverseMatchService.new(request.host, request.protocol)
|
150
|
+
@concept.reverse_match_service = Services::ReverseMatchService.new(request.host, request.protocol) if match_sync_enabled?
|
151
151
|
@concept.assign_attributes(concept_params)
|
152
152
|
@datasets = datasets_as_json
|
153
153
|
|
@@ -185,14 +185,14 @@ class ConceptsController < ApplicationController
|
|
185
185
|
def update
|
186
186
|
@concept = Iqvoc::Concept.base_class.by_origin(params[:id]).unpublished.last!
|
187
187
|
authorize! :update, @concept
|
188
|
-
@concept.reverse_match_service = Services::ReverseMatchService.new(request.host, request.protocol)
|
188
|
+
@concept.reverse_match_service = Services::ReverseMatchService.new(request.host, request.protocol) if match_sync_enabled?
|
189
189
|
|
190
190
|
@datasets = datasets_as_json
|
191
191
|
|
192
192
|
# set to_review to false if someone edits a concepts
|
193
193
|
concept_params["to_review"] = "false"
|
194
194
|
|
195
|
-
if @concept.
|
195
|
+
if @concept.update(concept_params)
|
196
196
|
flash[:success] = I18n.t('txt.controllers.versioned_concept.update_success')
|
197
197
|
redirect_to concept_path(published: 0, id: @concept)
|
198
198
|
else
|
@@ -247,4 +247,10 @@ class ConceptsController < ApplicationController
|
|
247
247
|
# TODO: relations (XL only)
|
248
248
|
}
|
249
249
|
end
|
250
|
+
|
251
|
+
private
|
252
|
+
|
253
|
+
def match_sync_enabled?
|
254
|
+
Iqvoc.config['sources.create_reverse_matches']
|
255
|
+
end
|
250
256
|
end
|
@@ -164,7 +164,7 @@ class HierarchyController < ApplicationController
|
|
164
164
|
@relation_class = @relation_class.narrower_class unless direction == 'up'
|
165
165
|
|
166
166
|
respond_to do |format|
|
167
|
-
format.any(:html, :rdf, :ttl) { render 'hierarchy/show' }
|
167
|
+
format.any(:html, :rdf, :ttl, :nt) { render 'hierarchy/show' }
|
168
168
|
end
|
169
169
|
end
|
170
170
|
|
@@ -44,6 +44,8 @@ class SearchResultsController < ApplicationController
|
|
44
44
|
param 'ds[]', String ,
|
45
45
|
desc: 'Specifies one or more external data sets (connected thesauri)'\
|
46
46
|
'to include in search.'
|
47
|
+
param :include_expired, String,
|
48
|
+
desc: 'Specifies if expired concepts should be included (defaults to false).'
|
47
49
|
example <<-DOC
|
48
50
|
GET /search.ttl
|
49
51
|
200
|
@@ -176,5 +178,6 @@ class SearchResultsController < ApplicationController
|
|
176
178
|
controller.params['qt'] = 'contains' if controller.params['qt'].nil?
|
177
179
|
controller.params['for'] = 'all' if controller.params['for'].nil?
|
178
180
|
controller.params['l'] = langs.keys if controller.params['l'].nil?
|
181
|
+
controller.params['include_expired'] = (controller.params['include_expired'] == "true")
|
179
182
|
end
|
180
183
|
end
|
@@ -15,7 +15,7 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
17
|
class TriplestoreSyncController < ApplicationController
|
18
|
-
include
|
18
|
+
include RdfSyncService::Helper
|
19
19
|
|
20
20
|
def index
|
21
21
|
authorize! :sync, :triplestore
|
@@ -40,7 +40,7 @@ class TriplestoreSyncController < ApplicationController
|
|
40
40
|
end
|
41
41
|
|
42
42
|
# per-class pagination
|
43
|
-
@candidates =
|
43
|
+
@candidates = RdfSyncService.candidates.map do |records|
|
44
44
|
records.page(params[:page])
|
45
45
|
end
|
46
46
|
end
|
@@ -50,7 +50,7 @@ class UsersController < ApplicationController
|
|
50
50
|
# could not change his own role and permissions
|
51
51
|
params = can?(:manage, User) ? user_params : user_params.except(:active, :role, :comment)
|
52
52
|
|
53
|
-
if @user.
|
53
|
+
if @user.update(params)
|
54
54
|
flash[:success] = I18n.t('txt.controllers.users.successfully_updated')
|
55
55
|
redirect_to can?(:manage, User) ? users_path : dashboard_path
|
56
56
|
else
|
@@ -54,16 +54,19 @@ module ApplicationHelper
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
-
def page_header(args = {})
|
57
|
+
def page_header(args = {}, &block)
|
58
58
|
if title = args[:title]
|
59
59
|
content_for(:title, strip_tags(title))
|
60
60
|
end
|
61
61
|
|
62
62
|
content_for :page_header do
|
63
63
|
content_tag :div, class: 'page-header' do
|
64
|
-
content_tag :h1 do
|
65
|
-
("#{title} #{content_tag(:small, args[:desc])}").html_safe
|
64
|
+
res = content_tag :h1 do
|
65
|
+
("#{title} #{content_tag(:small, args[:desc]) if args[:desc]}").html_safe
|
66
66
|
end
|
67
|
+
res << capture(&block) if block_given?
|
68
|
+
|
69
|
+
res
|
67
70
|
end
|
68
71
|
end
|
69
72
|
end
|
@@ -82,7 +82,7 @@ module ConceptsHelper
|
|
82
82
|
concept.never_published? ? t("txt.views.versioning.delete") : t("txt.views.versioning.delete_copy")
|
83
83
|
end
|
84
84
|
|
85
|
-
def concept_header(concept)
|
85
|
+
def concept_header(concept, &block)
|
86
86
|
desc = concept.class.model_name.human
|
87
87
|
|
88
88
|
if concept.expired_at
|
@@ -91,7 +91,7 @@ module ConceptsHelper
|
|
91
91
|
|
92
92
|
title = concept.pref_label || concept.origin
|
93
93
|
|
94
|
-
page_header
|
94
|
+
page_header(title: title.to_s, desc: desc.html_safe, &block)
|
95
95
|
end
|
96
96
|
|
97
97
|
private
|
@@ -120,7 +120,7 @@ module ConceptsHelper
|
|
120
120
|
render(association_class.partial_name(concept), further_options.merge(concept: concept, klass: association_class))
|
121
121
|
end
|
122
122
|
end
|
123
|
-
html = render partial: '/partials/match/panel', locals: { body: matches_html }
|
123
|
+
html = render partial: '/partials/match/panel', locals: { body: matches_html, klass: Match::SKOS::Base }
|
124
124
|
if String.new(html).squish.present?
|
125
125
|
((hash[association_classes.first.view_section(concept)] ||= {})[association_classes.first.view_section_sort_key(concept)] ||= '') << html.html_safe
|
126
126
|
end
|
data/app/helpers/link_helper.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
module LinkHelper
|
2
2
|
def link_to_object(object, name, html_options = nil, &block)
|
3
3
|
path = case object
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
when Iqvoc::Concept.base_class
|
5
|
+
concept_url(id: object)
|
6
|
+
when Iqvoc::Collection.base_class
|
7
|
+
collection_url(id: object)
|
8
|
+
when Label::Base
|
9
|
+
label_url(id: object)
|
10
|
+
end
|
11
11
|
|
12
12
|
link_to name, path, html_options, &block
|
13
13
|
end
|
@@ -26,18 +26,13 @@ module NavigationHelper
|
|
26
26
|
# :items - a list of hashes to be used as second-level navigation items
|
27
27
|
def nav_items(items)
|
28
28
|
items.map do |item|
|
29
|
-
if
|
29
|
+
if nav_item_authorized?(item)
|
30
30
|
if item[:items]
|
31
31
|
content_tag :li, class: 'nav-item dropdown' do
|
32
|
-
raw(
|
33
|
-
content_tag(:i), '#',
|
34
|
-
class: 'nav-link dropdown-toggle',
|
35
|
-
role: 'button',
|
36
|
-
'aria-haspopup': true,
|
37
|
-
'aria-expanded': false,
|
38
|
-
data: { toggle: 'dropdown' }) +
|
32
|
+
raw(nav_link(item, has_children: true) +
|
39
33
|
content_tag(:div,
|
40
|
-
item[:items].
|
34
|
+
item[:items].select { |i| nav_item_authorized?(i) }
|
35
|
+
.map { |i| nav_link(i, class: 'dropdown-item') }.join.html_safe,
|
41
36
|
class: 'dropdown-menu'))
|
42
37
|
end
|
43
38
|
else
|
@@ -90,14 +85,30 @@ module NavigationHelper
|
|
90
85
|
active = item[:active?] ? instance_eval(&item[:active?]) : (item[:controller] ? params[:controller] == item[:controller] : false)
|
91
86
|
css = 'nav-item'
|
92
87
|
css << ' active' if active
|
93
|
-
content_tag :li,
|
88
|
+
content_tag :li, class: css do
|
89
|
+
nav_link(item)
|
90
|
+
end
|
94
91
|
end
|
95
92
|
|
96
|
-
def
|
93
|
+
def nav_link(item, opts = {})
|
97
94
|
active = item[:active?] ? instance_eval(&item[:active?]) : (item[:controller] ? params[:controller] == item[:controller] : false)
|
98
|
-
|
95
|
+
|
96
|
+
css = opts[:class] || 'nav-link'
|
99
97
|
css << ' active' if active
|
100
|
-
|
98
|
+
css << ' dropdown-toggle' if opts[:has_children]
|
99
|
+
|
100
|
+
link_opts = {
|
101
|
+
class: css
|
102
|
+
}
|
103
|
+
|
104
|
+
dropdown_opts = {
|
105
|
+
role: 'button',
|
106
|
+
'aria-haspopup': true,
|
107
|
+
'aria-expanded': false
|
108
|
+
}
|
109
|
+
link_opts.merge!(dropdown_opts) if opts[:has_children]
|
110
|
+
|
111
|
+
link_to(element_value(item[:text]), element_value(item[:href] || '#'), link_opts)
|
101
112
|
end
|
102
113
|
|
103
114
|
def nav_item_authorized?(item)
|
data/app/models/abstract_user.rb
CHANGED
data/app/models/concept/base.rb
CHANGED
@@ -358,6 +358,15 @@ class Concept::Base < ApplicationRecord
|
|
358
358
|
|
359
359
|
# ********** Scopes
|
360
360
|
|
361
|
+
def self.expired(time = Time.now)
|
362
|
+
where(arel_table[:expired_at].lt(time))
|
363
|
+
end
|
364
|
+
|
365
|
+
def self.not_expired(time = Time.now)
|
366
|
+
col = arel_table[:expired_at]
|
367
|
+
where((col.eq(nil)).or(col.gteq(time)))
|
368
|
+
end
|
369
|
+
|
361
370
|
def self.tops
|
362
371
|
where(top_term: true)
|
363
372
|
end
|
@@ -506,7 +515,7 @@ class Concept::Base < ApplicationRecord
|
|
506
515
|
@labels ||= labelings.each_with_object({}) do |labeling, hash|
|
507
516
|
((hash[labeling.class.name.to_s] ||= {})[labeling.target.language] ||= []) << labeling.target if labeling.target
|
508
517
|
end
|
509
|
-
((@labels && @labels[labeling_class] && @labels[labeling_class][lang]) || []).select{ |l| l.published? || !only_published }
|
518
|
+
((@labels && @labels[labeling_class] && @labels[labeling_class][lang]) || []).select{ |l| l.published? || !only_published }
|
510
519
|
end
|
511
520
|
|
512
521
|
def related_concepts_for_relation_class(relation_class, only_published = true)
|
@@ -31,16 +31,6 @@ class Concept::SKOS::Base < Concept::Base
|
|
31
31
|
return subject
|
32
32
|
end
|
33
33
|
|
34
|
-
# ********** Scopes
|
35
|
-
def self.expired(time = Time.now)
|
36
|
-
where(arel_table[:expired_at].lt(time))
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.not_expired(time = Time.now)
|
40
|
-
col = arel_table[:expired_at]
|
41
|
-
where((col.eq(nil)).or(col.gteq(time)))
|
42
|
-
end
|
43
|
-
|
44
34
|
def self.recent(limit = 5)
|
45
35
|
self
|
46
36
|
.published
|
@@ -91,10 +91,12 @@ module Concept
|
|
91
91
|
if validatable_for_publishing?
|
92
92
|
alt_labels = alt_labelings.collect { |l| l.target }
|
93
93
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
94
|
+
pref_labels.each do |pref_label|
|
95
|
+
if alt_labels.include? pref_label
|
96
|
+
errors.add :base,
|
97
|
+
I18n.t('txt.models.concept.pref_label_defined_in_alt_labels',
|
98
|
+
label: pref_label.value)
|
99
|
+
end
|
98
100
|
end
|
99
101
|
end
|
100
102
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class Dataset::Adaptors::Iqvoc::SearchAdaptor < Dataset::Adaptors::Iqvoc::
|
1
|
+
class Dataset::Adaptors::Iqvoc::SearchAdaptor < Dataset::Adaptors::Iqvoc::HttpAdaptor
|
2
2
|
def search(raw_params = {})
|
3
3
|
languages = raw_params.fetch(:languages, I18n.locale)
|
4
4
|
languages = Array.wrap(languages).flatten.join(',')
|
@@ -69,16 +69,20 @@ class Labeling::SKOS::Base < Labeling::Base
|
|
69
69
|
scope = scope.includes(:owner)
|
70
70
|
|
71
71
|
scope = case params[:for]
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
72
|
+
when 'concept'
|
73
|
+
scope.merge(Iqvoc::Concept.base_class.published)
|
74
|
+
when 'collection'
|
75
|
+
scope.merge(Iqvoc::Collection.base_class.published)
|
76
|
+
else
|
77
|
+
# no additional conditions
|
78
|
+
scope
|
79
|
+
end
|
80
|
+
|
81
|
+
scope = if params[:include_expired]
|
82
|
+
scope.merge(Concept::Base.not_expired).or(scope.merge(Concept::Base.expired))
|
83
|
+
else
|
84
|
+
scope.merge(Concept::Base.not_expired)
|
85
|
+
end
|
82
86
|
|
83
87
|
if params[:change_note_date_from].present? || params[:change_note_date_to].present?
|
84
88
|
change_note_relation = Iqvoc.change_note_class_name.to_relation_name
|
data/app/models/user_session.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
|
3
|
-
class
|
3
|
+
class RdfSyncService
|
4
4
|
delegate :url_helpers, to: 'Rails.application.routes'
|
5
5
|
|
6
6
|
ADAPTORS = { # XXX: inappropriate?
|
@@ -105,11 +105,11 @@ class RDFSyncService
|
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
108
|
-
module
|
108
|
+
module RdfSyncService::Helper # TODO: rename -- XXX: does not belong here!?
|
109
109
|
def triplestore_syncer
|
110
110
|
base_url = root_url(lang: nil) # XXX: brittle in the face of future changes?
|
111
111
|
|
112
|
-
return
|
112
|
+
return RdfSyncService.new(base_url, Iqvoc.config['triplestore.url'],
|
113
113
|
username: Iqvoc.config['triplestore.username'].presence,
|
114
114
|
password: Iqvoc.config['triplestore.password'].presence,
|
115
115
|
view_context: view_context) # fugly, but necessary; cf. RDFSync#serialize
|
@@ -2,7 +2,9 @@
|
|
2
2
|
<p>
|
3
3
|
<%= link_to result.label.to_s, rdf_path(result.concept, lang: nil, format: nil),
|
4
4
|
alt: result.concept.origin, data: { 'resource-path': result.path, 'resource-url': rdf_url(result.concept, lang: nil, format: nil) }, class: 'concept-item-link' %>
|
5
|
-
|
5
|
+
<% if Iqvoc.concept_modal_preview_enabled? %>
|
6
|
+
<a href="<%= glance_concept_url(result.concept, format: :html) %>" class="dashboard-glance-link"><i class="fa fa-search-plus"></i></a>
|
7
|
+
<% end %>
|
6
8
|
|
7
9
|
<% if result.concept.additional_info.present? %>
|
8
10
|
<span class="additional_info">(<%= result.concept.additional_info %>)</span>
|