API Introduce $FromEnd variable for iterators

This commit is contained in:
Damian Mooyman 2015-04-09 16:39:49 +12:00
parent 2cc9d02f75
commit e91606e494
4 changed files with 31 additions and 3 deletions

View File

@ -296,8 +296,11 @@ iteration.
* `$Even`, `$Odd`: Returns boolean, handy for zebra striping
* `$EvenOdd`: Returns a string, either 'even' or 'odd'. Useful for CSS classes.
* `$First`, `$Last`, `$Middle`: Booleans about the position in the list
* `$FirstLast`: Returns a string, "first", "last", or "". Useful for CSS classes.
* `$Pos`: The current position in the list (integer). Will start at 1.
* `$FirstLast`: Returns a string, "first", "last", "first last" (if both), or "". Useful for CSS classes.
* `$Pos`: The current position in the list (integer).
Will start at 1, but can take a starting index as a parameter.
* `$FromEnd`: The position of the item from the end (integer).
Last item defaults to 1, but can be passed as a parameter.
* `$TotalItems`: Number of items in the list (integer)
:::ss

View File

@ -460,3 +460,4 @@ coding conventions. E.g. `DB::requireTable` is now `DB::require_table`
This is in order to promote better referencing of elements across the codebase.
See `FulltextSearchable->enable` for example.
* `FormField` subclasses must now use `validate(Validator $validator)` as the interface has changed for this function
* `$FromEnd` iterator variable now available in templates.

View File

@ -830,7 +830,19 @@ after')
//test Pos
$result = $this->render('<% loop Set %>$Pos<% end_loop %>',$data);
$this->assertEquals("12345678910",$result,"Even and Odd is returned in sequence numbers rendered in order");
$this->assertEquals("12345678910", $result, '$Pos is rendered in order');
//test Pos
$result = $this->render('<% loop Set %>$Pos(0)<% end_loop %>',$data);
$this->assertEquals("0123456789", $result, '$Pos(0) is rendered in order');
//test FromEnd
$result = $this->render('<% loop Set %>$FromEnd<% end_loop %>',$data);
$this->assertEquals("10987654321", $result, '$FromEnd is rendered in order');
//test FromEnd
$result = $this->render('<% loop Set %>$FromEnd(0)<% end_loop %>',$data);
$this->assertEquals("9876543210", $result, '$FromEnd(0) rendered in order');
//test Total
$result = $this->render('<% loop Set %>$TotalItems<% end_loop %>',$data);

View File

@ -206,6 +206,7 @@ class SSViewer_BasicIteratorSupport implements TemplateIteratorProvider {
'Odd',
'EvenOdd',
'Pos',
'FromEnd',
'TotalItems',
'Modulus',
'MultipleOf',
@ -312,6 +313,17 @@ class SSViewer_BasicIteratorSupport implements TemplateIteratorProvider {
return $this->iteratorPos + $startIndex;
}
/**
* Return the position of this item from the last item in the list. The position of the final
* item is $endIndex, which defaults to 1.
*
* @param integer $endIndex Value of the last item
* @return int
*/
public function FromEnd($endIndex = 1) {
return $this->iteratorTotalItems - $this->iteratorPos + $endIndex - 1;
}
/**
* Return the total number of "sibling" items in the dataset.
*