introduce new block attribute to control sorting direction (#25) (#27)
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Stefan Kalscheuer 2024-08-16 18:39:04 +02:00
parent b29a2b169c
commit d6ae2fe437
Signed by: stefan
GPG Key ID: 3887EC2A53B55430
4 changed files with 43 additions and 4 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

@ -86,6 +86,10 @@
type: 'boolean', type: 'boolean',
default: false, default: false,
}, },
sort: {
type: 'string',
// implicit default: 'desc', left empty here for backwards compatibility of the block
},
}, },
edit: withSelect( function( select ) { edit: withSelect( function( select ) {
return { return {
@ -166,6 +170,26 @@
}, },
} }
), ),
el(
wp.components.SelectControl,
{
label: __( 'Output direction', 'stklcode-liveticker' ),
value: props.attributes.sort,
options: [
{
value: 'desc',
label: __( 'newest first', 'stklcode-liveticker' ),
},
{
value: 'asc',
label: __( 'oldest first', 'stklcode-liveticker' ),
},
],
onChange: function( val ) {
props.setAttributes( { sort: val } );
},
}
),
]; ];
} }
@ -183,6 +207,7 @@
'data-sclt-ticker': props.attributes.ticker, 'data-sclt-ticker': props.attributes.ticker,
'data-sclt-limit': props.attributes.unlimited ? 0 : props.attributes.limit, 'data-sclt-limit': props.attributes.unlimited ? 0 : props.attributes.limit,
'data-sclt-last': 0, 'data-sclt-last': 0,
'data-sclt-sort': props.attributes.sort,
} }
); );
}, },

View File

@ -1,5 +1,5 @@
/** /**
* Contructor of the scLiveticker object. * Constructor of the scLiveticker object.
* *
* @class * @class
*/ */
@ -73,6 +73,7 @@
var parseElement = function( elem, widget, n ) { var parseElement = function( elem, widget, n ) {
var list = elem.querySelector( 'ul' ); var list = elem.querySelector( 'ul' );
var last = elem.getAttribute( 'data-sclt-last' ); var last = elem.getAttribute( 'data-sclt-last' );
var sort = elem.getAttribute( 'data-sclt-sort' );
elem.id = 'sclt-' + n; elem.id = 'sclt-' + n;
@ -92,11 +93,16 @@
); );
} }
if ( 'asc' !== sort && 'desc' !== 'sort' ) {
sort = 'desc';
}
return { return {
id: n, id: n,
ticker: elem.getAttribute( 'data-sclt-ticker' ), ticker: elem.getAttribute( 'data-sclt-ticker' ),
limit: elem.getAttribute( 'data-sclt-limit' ), limit: elem.getAttribute( 'data-sclt-limit' ),
lastPoll: last, lastPoll: last,
sort: sort,
ticks: list, ticks: list,
isWidget: widget, isWidget: widget,
updating: false, updating: false,
@ -210,8 +216,11 @@
if ( old ) { if ( old ) {
// Replace entry, if it already exists (i.e. has been updated). // Replace entry, if it already exists (i.e. has been updated).
t.ticks.replaceChild( li, old ); t.ticks.replaceChild( li, old );
} else if ( 'asc' === t.sort ) {
// Append new tick as last element to container.
t.ticks.appendChild( li );
} else { } else {
// Prepend new tick to container. // Prepend new tick as fist element to container.
t.ticks.insertBefore( li, t.ticks.firstChild ); t.ticks.insertBefore( li, t.ticks.firstChild );
} }
@ -220,8 +229,13 @@
t.ticks.parentNode.setAttribute( 'data-sclt-last', u.date_gmt ); t.ticks.parentNode.setAttribute( 'data-sclt-last', u.date_gmt );
// Remove tail, if limit is set. // Remove tail, if limit is set.
if ( 0 < t.limit ) { if ( 0 < t.limit && t.limit < t.ticks.children.length ) {
[].slice.call( t.ticks.getElementsByTagName( 'li' ), t.limit ).forEach( if ( 'asc' === t.sort ) {
old = [].slice.call( t.ticks.children, 0, -t.limit );
} else {
old = [].slice.call( t.ticks.children, t.limit );
}
old.forEach(
function( l ) { function( l ) {
l.remove(); l.remove();
} }