aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/javascript/controllers/thing_controller.js26
-rw-r--r--test/system/things_test.rb28
2 files changed, 46 insertions, 8 deletions
diff --git a/app/javascript/controllers/thing_controller.js b/app/javascript/controllers/thing_controller.js
index 9c19eb6..ca957ba 100644
--- a/app/javascript/controllers/thing_controller.js
+++ b/app/javascript/controllers/thing_controller.js
@@ -33,14 +33,30 @@ export default class extends Controller {
return;
}
- const authors = text.split(',').map(function(author) {
- return author.split(' ').pop().trim();
- });
-
- this.firstPart = authors.join('');
+ this.firstPart = text.split(',').map(this.parseAuthor).join('');
this.identifierTarget.value = `${this.firstPart}${this.lastPart}`;
}
+ // Returns the author compressed as expected for "target" autocompletion.
+ parseAuthor(author) {
+ // First of all try to match a pair of "_". If these are found, then we have
+ // to return whatever is in there with no spaces.
+ let idx = author.indexOf('_');
+
+ if (idx > -1) {
+ let idx2 = author.indexOf('_', idx + 1);
+ if (idx2 > -1) {
+ return author.substring(idx + 1, idx2).replace(' ', '');
+ }
+ }
+
+ // There was no pair of underscores, let's proceed by picking on the last
+ // name.
+ return author
+ .split(' ').pop().trim() // Pick the last element.
+ .replace('-', ''); // "Last-Other" => "LastOther"
+ }
+
// Update the information we get from the year field so to autocomplete it
// into the "target" field if possible.
yearUpdate() {
diff --git a/test/system/things_test.rb b/test/system/things_test.rb
index dafe45d..bb9d4ef 100644
--- a/test/system/things_test.rb
+++ b/test/system/things_test.rb
@@ -121,7 +121,7 @@ class ThingsTest < ApplicationSystemTestCase
assert_text I18n.t('activerecord.attributes.thing.access')
end
- test '"target" gets generated from last name' do
+ test 'js: "target" gets generated from last name' do
visit new_thing_url
fill_in I18n.t('activerecord.attributes.thing.authors'), with: 'Name LastName'
@@ -131,7 +131,7 @@ class ThingsTest < ApplicationSystemTestCase
assert_equal 'LastName', text
end
- test '"target" gets generated from last name and year' do
+ test 'js: "target" gets generated from last name and year' do
visit new_thing_url
fill_in I18n.t('activerecord.attributes.thing.authors'), with: 'Name LastName'
@@ -142,7 +142,7 @@ class ThingsTest < ApplicationSystemTestCase
assert_equal 'LastName2024', text
end
- test '"target" gets generated from multiple names and year' do
+ test 'js: "target" gets generated from multiple names and year' do
visit new_thing_url
fill_in I18n.t('activerecord.attributes.thing.authors'), with: 'Name LastName, John Smith'
@@ -152,4 +152,26 @@ class ThingsTest < ApplicationSystemTestCase
assert_equal 'LastNameSmith2024', text
end
+
+ test 'js: hyphenated names are treated together on "target" automation' do
+ visit new_thing_url
+
+ fill_in I18n.t('activerecord.attributes.thing.authors'), with: 'Name Last-Other, John Smith'
+ fill_in I18n.t('activerecord.attributes.thing.year'), with: '2024'
+
+ text = find_field(I18n.t('activerecord.attributes.thing.target')).value
+
+ assert_equal 'LastOtherSmith2024', text
+ end
+
+ test 'js: names surrounded by underscores are treated together on "target" automation' do
+ visit new_thing_url
+
+ fill_in I18n.t('activerecord.attributes.thing.authors'), with: 'Name _Last Other_, John Smith'
+ fill_in I18n.t('activerecord.attributes.thing.year'), with: '2024'
+
+ text = find_field(I18n.t('activerecord.attributes.thing.target')).value
+
+ assert_equal 'LastOtherSmith2024', text
+ end
end