Jamesmontalvo3 has submitted this change and it was merged.
Change subject: Added capability to assign levels for counters
......................................................................
Added capability to assign levels for counters
Added unit tests for new levels.
The following wikitext:
{{#counter:list-with-levels|level prefix=:}} Start lev 1
{{#counter:}} Stay lev 1
{{#counter:|level=2}} Jump to lev 2
{{#counter:}} Stay lev 2
{{#counter:|level=1}} Drop to lev 1
{{#counter:|level=2}} back to lev 2
{{#counter:|level=3}} jump to lev 3
Results in:
:1
:2
::1
::2
:3
::1
:::1
This allows you to have hierarchical lists. Furthermore,
if you add "format=outline" to the first #counter you can
get output like:
:1
:2
::2.1
::2.2
:3
::3.1
:::3.1.1
Change-Id: If8f16fa961b0ec730d7dc38c6b885f7ec290bd47
---
M NumerAlpha.class.php
M NumerAlpha.php
M i18n/en.json
M tests/phpunit/NumerAlphaTest.php
4 files changed, 276 insertions(+), 80 deletions(-)
Approvals:
Jamesmontalvo3: Verified; Looks good to me, approved
diff --git a/NumerAlpha.class.php b/NumerAlpha.class.php
old mode 100644
new mode 100755
index e994297..d38a8c9
--- a/NumerAlpha.class.php
+++ b/NumerAlpha.class.php
@@ -68,7 +68,9 @@
}
if ( ! isset( self::$lists[ $name ] ) ) {
- self::$lists[ $name ] = array();
+ self::$lists[ $name ] = array(
+ 'levels' => array(),
+ );
}
foreach( $rawArgs as $rawArg ) {
@@ -87,6 +89,9 @@
break;
case wfMessage(
'ext-numeralpha-list-set-label' )->text():
$newCountValue = intVal( $value
);
+ if ( $newCountValue < 1 ) {
+ $newCountValue = 1;
+ }
break;
case wfMessage(
'ext-numeralpha-list-pad-length' )->text():
self::$lists[ $name ][
'padlength' ] = intVal( $value );
@@ -100,22 +105,77 @@
case wfMessage(
'ext-numeralpha-list-suffix' )->text():
self::$lists[ $name ][ 'suffix'
] = $value;
break;
+ case wfMessage(
'ext-numeralpha-list-level-label' )->text():
+ self::$lists[ $name ][ 'level'
] = intVal($value);
+ break;
+ case wfMessage(
'ext-numeralpha-list-level-prefix-label' )->text():
+ self::$lists[ $name ][ 'level
prefix' ] = $value;
+ break;
+ case wfMessage(
'ext-numeralpha-list-format-label' )->text():
+ if ( $value === wfMessage(
'ext-numeralpha-list-format-outline' )->text() ) {
+ self::$lists[ $name ][
'format' ] = 'outline';
+ }
+ else {
+ self::$lists[ $name ][
'format' ] = 'standard';
+ }
+ break;
}
}
}
- // either set count value or increment existing value
- if ( isset( $newCountValue ) ) {
- self::$lists[ $name ][ 'count' ] = $newCountValue;
+ // if level not specifed, use the previous level if there is one
+ if ( isset( self::$lists[ $name ][ 'level' ] ) ) {
+ $farts = true;
}
- else if ( isset( self::$lists[ $name ][ 'count' ] ) ) {
- self::$lists[ $name ][ 'count' ]++;
+ elseif ( isset( self::$lists[ $name ][ 'prev-level' ] ) ) {
+ self::$lists[ $name ][ 'level' ] = self::$lists[ $name
][ 'prev-level' ];
}
+ // otherwise set level to 1
else {
- self::$lists[ $name ][ 'count' ] = 1;
+ self::$lists[ $name ][ 'level' ] = 1;
}
+ self::$lists[ $name ][ 'prev-level' ] = self::$lists[ $name ][
'level' ];
+
+ // if user inputs level 1, equates to array index zero
+ $levelIndex = self::$lists[ $name ][ 'level' ] - 1;
+
+ // if level has been used before (and hasn't been reset due to
lower
+ // level being used) then increase the count on this level
+ if ( isset( self::$lists[ $name ][ 'levels' ][ $levelIndex ] )
) {
+ self::$lists[ $name ][ 'levels' ][ $levelIndex ]++;
+ }
+
+ // @todo FIXME this shoudln't be necessary
+ else {
+ self::$lists[ $name ][ 'levels' ][ $levelIndex ] = 1;
+ }
+
+ // Make sure all levels are set. Fill in blanks with 1.
+ // Is this excessive?
+ for ( $i = 0; $i <= $levelIndex; $i++ ) {
+ if ( ! isset( self::$lists[ $name ][ 'levels' ][ $i ] )
) {
+ self::$lists[ $name ][ 'levels' ][ $i ] = 1;
+ }
+ }
+
+ // if indices exist beyond the desired level, cut the array of
levels
+ // down just to the zeroth index through the desired index
+ if ( isset( self::$lists[ $name ][ 'levels' ][ $levelIndex + 1
] ) ) {
+ self::$lists[ $name ][ 'levels' ] = array_slice(
+ self::$lists[ $name ][ 'levels' ],
+ 0,
+ self::$lists[ $name ][ 'level' ] // AKA
$levelIndex + 1
+ );
+ }
+
+ // despite all the level-working above, if user has specified a
new
+ // count value, override:
+ if ( isset( $newCountValue ) ) {
+ self::$lists[ $name ][ 'levels' ][ $levelIndex ] =
$newCountValue;
+ }
+
// set default list type if not already set
if ( ! isset( self::$lists[ $name ][ 'type' ] ) ) {
@@ -142,6 +202,29 @@
}
if ( ! isset( self::$lists[ $name ][ 'suffix' ] ) ) {
self::$lists[ $name ][ 'suffix' ] = '';
+ }
+
+ // level prefix = string applied before counter, x times per
level
+ if ( ! isset( self::$lists[ $name ][ 'level prefix' ] ) ) {
+ self::$lists[ $name ][ 'level prefix' ] = '';
+ }
+ self::$lists[ $name ][ 'full level prefix' ] = str_repeat(
+ self::$lists[ $name ][ 'level prefix' ],
+ self::$lists[ $name ][ 'level' ]
+ );
+
+
+ // This if-statement determines if we're using standard or
outline format
+ // self::$lists[ $name ][ 'count' ] is the display for the
counter.
+ // The name sucks, but is here for now due to historical naming.
+ if ( ! isset( self::$lists[ $name ][ 'format' ] ) ||
self::$lists[ $name ][ 'format' ] == 'standard' ) {
+ self::$lists[ $name ][ 'count' ] = self::$lists[ $name
][ 'levels' ][ $levelIndex ];
+ }
+ else {
+ self::$lists[ $name ][ 'count' ] = implode(
+ wfMessage(
'ext-numeralpha-list-format-outline-glue' ),
+ self::$lists[ $name ][ 'levels' ]
+ );
}
return self::$lists[ $name ];
@@ -180,7 +263,7 @@
STR_PAD_LEFT // this may require internationalization...
);
- return htmlspecialchars( $list[ 'prefix' ] . $counterValue .
$list[ 'suffix' ] );
+ return htmlspecialchars( $list['full level prefix'] . $list[
'prefix' ] . $counterValue . $list[ 'suffix' ] );
}
@@ -195,7 +278,7 @@
$num = $num / 26;
}
- return htmlspecialchars( $list[ 'prefix' ] . $alpha . $list[
'suffix' ] );
+ return htmlspecialchars( $list['full level prefix'] . $list[
'prefix' ] . $alpha . $list[ 'suffix' ] );
}
@@ -221,11 +304,11 @@
);
foreach ($equival as $roma => $val) {
$concordances = intval($num / $val);
- $result .= str_repeat($roma, $concordances);
- $num = $num % $val;
+ $result .= str_repeat($roma, $concordances);
+ $num = $num % $val;
}
- return htmlspecialchars( $list[ 'prefix' ] . $result . $list[
'suffix' ] );
+ return htmlspecialchars( $list['full level prefix'] . $list[
'prefix' ] . $result . $list[ 'suffix' ] );
}
diff --git a/NumerAlpha.php b/NumerAlpha.php
old mode 100644
new mode 100755
index 4bc92fd..b80ee42
--- a/NumerAlpha.php
+++ b/NumerAlpha.php
@@ -18,8 +18,8 @@
// Tell everybody who we are
$GLOBALS['wgExtensionCredits']['parserhook'][] = array(
'name' => 'NumerAlpha',
- 'version' => '0.6.0',
- 'author' => array( 'Thierry G. Veilleux', 'James Montalvo' ),
+ 'version' => '0.7.0',
+ 'author' => array( 'Thierry G. Veilleux',
'[https://www.mediawiki.org/wiki/User:Jamesmontalvo3 James Montalvo]',
'Emanspeaks' ),
'descriptionmsg' => 'numeralpha-desc',
'url' => 'https://www.mediawiki.org/wiki/Extension:NumerAlpha'
);
diff --git a/i18n/en.json b/i18n/en.json
old mode 100644
new mode 100755
index 960091b..32240c3
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -13,5 +13,11 @@
"ext-numeralpha-list-pad-length": "pad length",
"ext-numeralpha-list-pad-char": "pad character",
"ext-numeralpha-list-prefix": "prefix",
- "ext-numeralpha-list-suffix": "suffix"
+ "ext-numeralpha-list-suffix": "suffix",
+ "ext-numeralpha-list-level-label": "level",
+ "ext-numeralpha-list-level-prefix-label": "level prefix",
+ "ext-numeralpha-list-format-label": "format",
+ "ext-numeralpha-list-format-standard": "standard",
+ "ext-numeralpha-list-format-outline": "outline",
+ "ext-numeralpha-list-format-outline-glue": "."
}
diff --git a/tests/phpunit/NumerAlphaTest.php b/tests/phpunit/NumerAlphaTest.php
old mode 100644
new mode 100755
index 6f7eb53..a36b555
--- a/tests/phpunit/NumerAlphaTest.php
+++ b/tests/phpunit/NumerAlphaTest.php
@@ -5,79 +5,186 @@
*/
class NumerAlphaTest extends MediaWikiTestCase {
- protected function setUp() {
- parent::setUp();
- }
+ protected function setUp() {
+ parent::setUp();
+ }
- protected function tearDown() {
- parent::tearDown();
- }
+ protected function tearDown() {
+ parent::tearDown();
+ }
- public function testNumeralValues () {
+ public function testNumeralValues () {
- $parser = new Parser();
- $frame = new PPFrame_DOM( new Preprocessor_DOM( $parser ) );
+ $parser = new Parser();
+ $frame = new PPFrame_DOM( new Preprocessor_DOM( $parser ) );
- $this->assertEquals(
- '1',
- NumerAlpha::renderCounter( $parser, $frame, array( ' First list '
) ),
- 'First item of "First list" should equal 1'
- );
- $this->assertEquals(
- '2',
- NumerAlpha::renderCounter( $parser, $frame, array() ),
- 'Implied "First list" second item should equal 2'
- );
- $this->assertEquals(
- '1',
- NumerAlpha::renderCounter( $parser, $frame, array( ' Second list '
) ),
- 'First it of "Second list" should equal 1'
- );
- $this->assertEquals(
- '2',
- NumerAlpha::renderCounter( $parser, $frame, array() ),
- 'Implied "Second list" second item should equal 2'
- );
- $this->assertEquals(
- '3',
- NumerAlpha::renderCounter( $parser, $frame, array( ' First list
' ) ),
- '"First list" third item should equal 3'
- );
+ $this->assertEquals(
+ '1',
+ NumerAlpha::renderCounter( $parser, $frame, array( '
First list ' ) ),
+ 'First item of "First list" should equal 1'
+ );
+ $this->assertEquals(
+ '2',
+ NumerAlpha::renderCounter( $parser, $frame, array() ),
+ 'Implied "First list" second item should equal 2'
+ );
+ $this->assertEquals(
+ '1',
+ NumerAlpha::renderCounter( $parser, $frame, array( '
Second list ' ) ),
+ 'First it of "Second list" should equal 1'
+ );
+ $this->assertEquals(
+ '2',
+ NumerAlpha::renderCounter( $parser, $frame, array() ),
+ 'Implied "Second list" second item should equal 2'
+ );
+ $this->assertEquals(
+ '3',
+ NumerAlpha::renderCounter( $parser, $frame, array( '
First list ' ) ),
+ '"First list" third item should equal 3'
+ );
- $thirdListArgs = array(
- 'Third list',
- ' pad length = 2 ',
- ' pad character = x ',
- );
- $this->assertEquals(
- 'x1',
- NumerAlpha::renderCounter( $parser, $frame, $thirdListArgs ),
- '"Third list" first item should equal x1'
- );
- $this->assertEquals(
- 'x2',
- NumerAlpha::renderCounter( $parser, $frame, array() ),
- '"Third list" second item should equal x2'
- );
- $this->assertEquals(
- 'xxxx3',
- NumerAlpha::renderCounter( $parser, $frame, array( ' ', ' pad
length = 5 ' ) ),
- '"Third list" third item should equal xxxx3'
- );
- $this->assertEquals(
- '00004',
- NumerAlpha::renderCounter( $parser, $frame, array( ' ', ' pad
character = 0 ' ) ),
- '"Third list" fourth item should equal 00004'
- );
+ $thirdListArgs = array(
+ 'Third list',
+ ' pad length = 2 ',
+ ' pad character = x ',
+ );
+ $this->assertEquals(
+ 'x1',
+ NumerAlpha::renderCounter( $parser, $frame,
$thirdListArgs ),
+ '"Third list" first item should equal x1'
+ );
+ $this->assertEquals(
+ 'x2',
+ NumerAlpha::renderCounter( $parser, $frame, array() ),
+ '"Third list" second item should equal x2'
+ );
+ $this->assertEquals(
+ 'xxxx3',
+ NumerAlpha::renderCounter( $parser, $frame, array( '
', ' pad length = 5 ' ) ),
+ '"Third list" third item should equal xxxx3'
+ );
+ $this->assertEquals(
+ '00004',
+ NumerAlpha::renderCounter( $parser, $frame, array( '
', ' pad character = 0 ' ) ),
+ '"Third list" fourth item should equal 00004'
+ );
- $this->assertEquals(
- '(4)',
- NumerAlpha::renderCounter( $parser, $frame, array( ' First list
', ' prefix = ( ', 'suffix = )' ) ),
- '"Third list" third item should equal (4)'
- );
+ $this->assertEquals(
+ '(4)',
+ NumerAlpha::renderCounter( $parser, $frame, array( '
First list ', ' prefix = ( ', 'suffix = )' ) ),
+ '"Third list" third item should equal (4)'
+ );
+ /** list with standard format showing levels
+ {{#counter:list-with-levels|level prefix=:}} Start lev 1
+ {{#counter:}} Stay lev 1
+ {{#counter:|level=2}} Jump to lev 2
+ {{#counter:}} Stay lev 2
+ {{#counter:|level=1}} Drop to lev 1
+ {{#counter:|level=2}} back to lev 2
+ {{#counter:|level=3}} jump to lev 3
- }
+ Results in:
+ :1
+ :2
+ ::1
+ ::2
+ :3
+ ::1
+ :::1
+
+ */
+ $this->assertEquals(
+ ':1',
+ NumerAlpha::renderCounter( $parser, $frame, array(
'list-with-levels', ' level prefix = : ' ) ),
+ '"list-with-levels" first item should equal 1 at level
1'
+ );
+ $this->assertEquals(
+ ':2',
+ NumerAlpha::renderCounter( $parser, $frame, array() ),
+ '"list-with-levels" second item should equal 2,
remembering last counter and maintains level'
+ );
+ $this->assertEquals(
+ '::1',
+ NumerAlpha::renderCounter( $parser, $frame,
array('','level=2') ),
+ '"list-with-levels" first item at level 2 should equal
1'
+ );
+ $this->assertEquals(
+ '::2',
+ NumerAlpha::renderCounter( $parser, $frame, array() ),
+ '"list-with-levels" second item at level 2 should equal
2, remembering last counter and maintains level'
+ );
+ $this->assertEquals(
+ ':3',
+ NumerAlpha::renderCounter( $parser, $frame, array('', '
level =1') ),
+ '"list-with-levels" third item at level 1 should equal
3, remembers level'
+ );
+ $this->assertEquals(
+ '::1',
+ NumerAlpha::renderCounter( $parser, $frame, array('', '
level = 2 ') ),
+ '"list-with-levels" should equal 1, previous higher
level increment resets lower level counters'
+ );
+ $this->assertEquals(
+ ':::1',
+ NumerAlpha::renderCounter( $parser, $frame, array('
','level=3') ),
+ '"list-with-levels" should equal 1, increasing level
resets counter'
+ );
+
+ /** outline-format list with levels and non-standard level
prefix
+ {{#counter:outline-list-with-levels|level
prefix=_|format=outline}} Start lev 1
+ {{#counter:}} Stay lev 1
+ {{#counter:|level=2}} Jump to lev 2
+ {{#counter:}} Stay lev 2
+ {{#counter:|level=1}} Drop to lev 1
+ {{#counter:|level=2}} back to lev 2
+ {{#counter:|level=3}} jump to lev 3
+
+ Results in:
+ _1
+ _2
+ __2.1
+ __2.2
+ _3
+ __3.1
+ ___3.1.1
+ */
+ $this->assertEquals(
+ '_1',
+ NumerAlpha::renderCounter( $parser, $frame, array(
'outline-list-with-levels', ' level prefix = _ ' ) ),
+ '"outline-list-with-levels" first item should equal 1
at level 1'
+ );
+ $this->assertEquals(
+ '_2',
+ NumerAlpha::renderCounter( $parser, $frame, array() ),
+ '"outline-list-with-levels" second item should equal 2,
remembering last counter and maintains level'
+ );
+ $this->assertEquals(
+ '__1',
+ NumerAlpha::renderCounter( $parser, $frame,
array('','level=2') ),
+ '"outline-list-with-levels" first item at level 2
should equal 1'
+ );
+ $this->assertEquals(
+ '__2',
+ NumerAlpha::renderCounter( $parser, $frame, array() ),
+ '"outline-list-with-levels" second item at level 2
should equal 2, remembering last counter and maintains level'
+ );
+ $this->assertEquals(
+ '_3',
+ NumerAlpha::renderCounter( $parser, $frame, array('', '
level =1') ),
+ '"outline-list-with-levels" third item at level 1
should equal 3, remembers level'
+ );
+ $this->assertEquals(
+ '__1',
+ NumerAlpha::renderCounter( $parser, $frame, array('',
'level=2') ),
+ '"outline-list-with-levels" should equal 1, previous
higher level increment resets lower level counters'
+ );
+ $this->assertEquals(
+ '___1',
+ NumerAlpha::renderCounter( $parser, $frame, array('
','level=3') ),
+ '"outline-list-with-levels" should equal 1, increasing
level resets counter'
+ );
+ }
}
\ No newline at end of file
--
To view, visit https://gerrit.wikimedia.org/r/228419
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: If8f16fa961b0ec730d7dc38c6b885f7ec290bd47
Gerrit-PatchSet: 7
Gerrit-Project: mediawiki/extensions/NumerAlpha
Gerrit-Branch: master
Gerrit-Owner: Emanspeaks <[email protected]>
Gerrit-Reviewer: Emanspeaks <[email protected]>
Gerrit-Reviewer: Jaideraf <[email protected]>
Gerrit-Reviewer: Jamesmontalvo3 <[email protected]>
Gerrit-Reviewer: Siebrand <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits