@@ -366,25 +366,36 @@ <h3>Persons:</h3>
366366 }
367367}
368368
369+ function selectNext ( event , element ) {
370+ if ( event . code !== "Enter" ) return ;
371+
372+ element . classList . add ( "searching" ) ;
373+ const elements = [ ...document . querySelectorAll ( ".searching, .selectable" ) ] . filter ( e => e . offsetParent != null ) ;
374+ element . classList . remove ( "searching" ) ;
375+ const next = elements [ ( elements . indexOf ( element ) + ( ! event . shiftKey ? 1 : elements . length - 1 ) ) % elements . length ] ;
376+ next . center ( ) ;
377+ next . select ( ) ;
378+ }
379+
369380// generators
370381
371382function build ( ) {
372383
373384 document . getElementById ( "items" ) . innerHTML = data . items . map ( item => `<div id="id_${ item . id } " class="block">
374385 <div class="flex">
375- <input class="itemName" type="text" value="" oninput="changeItemName(this, ${ item . id } )" />
386+ <input class="itemName selectable " type="text" value="" oninput="changeItemName(this, ${ item . id } )" onkeydown="selectNext(event, this )" />
376387 <span>Price:</span>
377- <input class="itemPrice" type="number" oninput="changeItemPrice(this, ${ item . id } )" min="0" step="any" value="" />
388+ <input class="itemPrice selectable " type="number" oninput="changeItemPrice(this, ${ item . id } )" onkeydown="selectNext(event, this )" min="0" step="any" value="" />
378389 <span>Amount:</span>
379- <input class="itemAmount" type="number" oninput="changeItemAmount(this, ${ item . id } )" min="0" step="any" value="" />
390+ <input class="itemAmount selectable " type="number" oninput="changeItemAmount(this, ${ item . id } )" onkeydown="selectNext(event, this )" min="0" step="any" value="" />
380391 <button onclick="deleteItem(${ item . id } )">X</button>
381392 </div>
382393 <hr>
383394 ${ data . persons . map ( person => `<div id="id_${ item . id } _${ person . id } " class="flex">
384395 <button onclick="centerById(${ person . id } )">></button>
385- <input class="personName" type="text" value="" oninput="changePersonName(this, ${ person . id } )" />
396+ <input class="personName" type="text" value="" oninput="changePersonName(this, ${ person . id } )" onkeydown="selectNext(event, this)" />
386397 <span>Amount:</span>
387- <input class="personAmount" type="number" onchange="changePersonAmount(this, ${ person . id } , ${ item . id } )" min="0" step="any" value="" />
398+ <input class="personAmount selectable " type="number" onchange="changePersonAmount(this, ${ person . id } , ${ item . id } )" onkeydown="selectNext(event, this )" min="0" step="any" value="" />
388399 <button onclick="increasePersonAmount(${ person . id } , ${ item . id } , 1)">+</button>
389400 <button onclick="increasePersonAmount(${ person . id } , ${ item . id } , -1)">-</button>
390401 </div>` ) . join ( "\n" ) }
@@ -397,15 +408,15 @@ <h3>Persons:</h3>
397408
398409 document . getElementById ( "persons" ) . innerHTML = data . persons . map ( person => `<div id="id_${ person . id } " class="block">
399410 <div class="flex">
400- <input class="personName" type="text" value="" oninput="changePersonName(this, ${ person . id } )" />
411+ <input class="personName selectable " type="text" value="" oninput="changePersonName(this, ${ person . id } )" onkeydown="selectNext(event, this )" />
401412 <button onclick="deletePerson(${ person . id } )">X</button>
402413 </div>
403414 <hr>
404415 ${ data . items . map ( item => `<div id="id_${ person . id } _${ item . id } " class="flex">
405416 <button onclick="centerById(${ item . id } )">></button>
406- <input class="itemName" type="text" value="" oninput="changeItemName(this, ${ item . id } )" />
417+ <input class="itemName" type="text" value="" oninput="changeItemName(this, ${ item . id } )" onkeydown="selectNext(event, this)" />
407418 <span>Amount:</span>
408- <input class="personAmount" type="number" onchange="changePersonAmount(this, ${ person . id } , ${ item . id } )" min="0" step="any" value="" />
419+ <input class="personAmount selectable " type="number" onchange="changePersonAmount(this, ${ person . id } , ${ item . id } )" onkeydown="selectNext(event, this )" min="0" step="any" value="" />
409420 <button onclick="increasePersonAmount(${ person . id } , ${ item . id } , 1)">+</button>
410421 <button onclick="increasePersonAmount(${ person . id } , ${ item . id } , -1)">-</button>
411422 <span class="itemPending"></span>
0 commit comments