diff --git a/Gemfile b/Gemfile index d8f544316..e28a8437a 100644 --- a/Gemfile +++ b/Gemfile @@ -62,6 +62,7 @@ gem 'logging', '~> 2.0.0' gem 'nested_form_fields' gem 'nokogiri', '~> 1.16.5' # HTML/XML parser gem 'noticed' +gem 'oj' gem 'rails_autolink', '~> 1.1', '>= 1.1.6' gem 'rgl' # Graph framework for project diagram calculations gem 'roo', '~> 2.10.0' # Spreadsheet parser diff --git a/Gemfile.lock b/Gemfile.lock index 83e1acc9f..82d0e20e7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -97,9 +97,9 @@ GEM erubi (~> 1.4) rails-dom-testing (~> 2.0) rails-html-sanitizer (~> 1.1, >= 1.2.0) - active_model_serializers (0.10.13) - actionpack (>= 4.1, < 7.1) - activemodel (>= 4.1, < 7.1) + active_model_serializers (0.10.14) + actionpack (>= 4.1) + activemodel (>= 4.1) case_transform (>= 0.2) jsonapi-renderer (>= 0.1.1.beta1, < 0.3) activejob (7.0.8.4) @@ -195,6 +195,7 @@ GEM erubi (>= 1.0.0) rack (>= 0.9.0) rouge (>= 1.0.0) + bigdecimal (3.1.8) bindata (2.5.0) binding_of_caller (1.0.0) debug_inspector (>= 0.0.1) @@ -202,7 +203,7 @@ GEM msgpack (~> 1.2) brakeman (6.1.2) racc - builder (3.2.4) + builder (3.3.0) bullet (7.0.7) activesupport (>= 3.0.0) uniform_notifier (~> 1.11) @@ -316,7 +317,7 @@ GEM railties (>= 5) down (5.4.1) addressable (~> 2.8) - erubi (1.12.0) + erubi (1.13.0) et-orbi (1.2.11) tzinfo execjs (2.8.1) @@ -364,7 +365,7 @@ GEM httparty (0.21.0) mini_mime (>= 1.0.0) multi_xml (>= 0.5.2) - i18n (1.14.5) + i18n (1.14.6) concurrent-ruby (~> 1.0) i18n-js (3.9.2) i18n (>= 0.6.6) @@ -372,7 +373,7 @@ GEM mini_magick (>= 4.9.5, < 5) ruby-vips (>= 2.0.17, < 3) iniparse (1.5.0) - jbuilder (2.11.5) + jbuilder (2.13.0) actionview (>= 5.0.0) activesupport (>= 5.0.0) jmespath (1.6.2) @@ -435,8 +436,7 @@ GEM mime-types-data (3.2023.0218.1) mini_magick (4.12.0) mini_mime (1.1.5) - mini_portile2 (2.8.7) - minitest (5.23.1) + minitest (5.25.1) msgpack (1.7.1) multi_json (1.15.0) multi_test (1.1.0) @@ -475,6 +475,9 @@ GEM rack (>= 1.2, < 4) snaky_hash (~> 2.0) version_gem (~> 1.1) + oj (3.16.6) + bigdecimal (>= 3.0) + ostruct (>= 0.2) omniauth (2.1.2) hashie (>= 3.4.6) rack (>= 2.2.3) @@ -509,6 +512,7 @@ GEM validate_url webfinger (~> 2.0) orm_adapter (0.5.0) + ostruct (0.6.0) overcommit (0.60.0) childprocess (>= 0.6.3, < 5) iniparse (~> 1.4) @@ -835,6 +839,7 @@ DEPENDENCIES newrelic_rpm nokogiri (~> 1.16.5) noticed + oj omniauth (~> 2.1) omniauth-azure-activedirectory-v2 omniauth-linkedin-oauth2 diff --git a/app/assets/javascripts/my_modules/repositories.js b/app/assets/javascripts/my_modules/repositories.js index 233b0e7e3..b34d7630f 100644 --- a/app/assets/javascripts/my_modules/repositories.js +++ b/app/assets/javascripts/my_modules/repositories.js @@ -433,10 +433,10 @@ var MyModuleRepositories = (function() { } function initSimpleTable() { - $('#assigned-items-container').on('shown.bs.collapse', '.assigned-repository-container.readable-repository', function() { + $('#assigned-items-container').on('shown.bs.collapse', '.assigned-repository-container', function() { var repositoryContainer = $(this); - var repositoryTable = repositoryContainer.find('.repository-table'); - var initializedTable = repositoryContainer.find('.dataTables_wrapper .repository-table'); + var repositoryTable = repositoryContainer.find('.table'); + var initializedTable = repositoryContainer.find('.dataTables_wrapper table'); // do not try to re-initialized already initialized table if (initializedTable.length) { diff --git a/app/assets/javascripts/repositories/repository_datatable.js b/app/assets/javascripts/repositories/repository_datatable.js index 9850f40af..933bed39a 100644 --- a/app/assets/javascripts/repositories/repository_datatable.js +++ b/app/assets/javascripts/repositories/repository_datatable.js @@ -317,9 +317,7 @@ var RepositoryDatatable = (function(global) { checkAvailableColumns(); - RepositoryDatatableRowEditor.switchRowToEditMode(row); - - changeToEditMode(); + RepositoryDatatableRowEditor.switchRowToEditMode(row, changeToEditMode); }); } @@ -692,6 +690,7 @@ var RepositoryDatatable = (function(global) { }, rowCallback: function(row, data) { $(row).attr('data-editable', data.recordEditable); + $(row).attr('data-info-url', data.recordInfoUrl); $(row).attr('data-manage-stock-url', data.manageStockUrl); // Get row ID let rowId = data.DT_RowId; @@ -1003,10 +1002,8 @@ var RepositoryDatatable = (function(global) { $(TABLE_ID).find('.repository-row-edit-icon').remove(); rowsSelected.forEach(function(rowNumber) { - RepositoryDatatableRowEditor.switchRowToEditMode(TABLE.row('#' + rowNumber)); + RepositoryDatatableRowEditor.switchRowToEditMode(TABLE.row('#' + rowNumber), changeToEditMode); }); - - changeToEditMode(); }) .on('click', '#assignRepositoryRecords', function(e) { e.preventDefault(); diff --git a/app/assets/javascripts/repositories/row_editor.js b/app/assets/javascripts/repositories/row_editor.js index 48a9517c8..490b6f63d 100644 --- a/app/assets/javascripts/repositories/row_editor.js +++ b/app/assets/javascripts/repositories/row_editor.js @@ -173,11 +173,17 @@ var RepositoryDatatableRowEditor = (function() { TABLE.columns.adjust(); } - function switchRowToEditMode(row) { + function enableEditMode(row, isEditable) { + if (!isEditable) { + HelperModule.flashAlertMsg(I18n.t('repositories.table.row_locked'), 'danger'); + return false; + } + let $row = $(row.node()); let itemId = row.id(); let formId = `repositoryRowForm${itemId}`; let requestUrl = $(TABLE.table().node()).data('current-uri'); + let rowForm = $(`