diff options
| author | Miquel Sabaté Solà <msabate@suse.com> | 2024-03-20 11:57:02 +0100 |
|---|---|---|
| committer | Miquel Sabaté Solà <msabate@suse.com> | 2024-03-20 11:57:02 +0100 |
| commit | 37d4967780f5b3dd06bb05337149811d7d7f8788 (patch) | |
| tree | 64623bf68c0e53314c339e87d9273d646f439baa | |
| parent | c0646186c2049e75ae932966aa0604d712b4f4c6 (diff) | |
| download | operum-37d4967780f5b3dd06bb05337149811d7d7f8788.tar.gz operum-37d4967780f5b3dd06bb05337149811d7d7f8788.zip | |
Handle special characters in "target" completion
Hyphens should be suppressed and underscores are to be taken as pairs
which contain the real value to be picked.
Signed-off-by: Miquel Sabaté Solà <msabate@suse.com>
| -rw-r--r-- | app/javascript/controllers/thing_controller.js | 26 | ||||
| -rw-r--r-- | test/system/things_test.rb | 28 |
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 |
