User:Monster Domosed/common.js: Difference between revisions

Jump to navigation Jump to search
No edit summary
No edit summary
Line 112: Line 112:
}
}


function wrap( terms, template ) {
function wrap( terms, template, usedSet ) {


terms.slice()
terms.slice()
Line 120: Line 120:
.forEach( function ( term ) {
.forEach( function ( term ) {


var pattern = new RegExp(
var idx = 0;
'(?<!\\w)' + escapeRegExp( term ) + '(?!\\w)',
var found = false;
'g'
);


text = text.replace( pattern, function () {
while ( ( idx = text.indexOf( term, idx ) ) !== -1 ) {


if ( template.indexOf( 'HeroIcon' ) !== -1 ) usedHeroes.add( term );
var before = text[ idx - 1 ];
if ( template.indexOf( 'ItemIcon' ) !== -1 ) usedItems.add( term );
var after = text[ idx + term.length ];
if ( template.indexOf( 'AbilityIcon' ) !== -1 ) usedAbilities.add( term );


return protect(
var validBefore = !before || /\s|:|\.|\(|\[/ .test( before );
template.replace( '%s', term )
var validAfter = !after || /\s|\.|,|\)|\]/.test( after );
);
 
} );
if ( validBefore && validAfter ) {
 
found = true;
 
var replacement = protect(
template.replace( '%s', term )
);
 
text =
text.slice( 0, idx ) +
replacement +
text.slice( idx + term.length );
 
idx += replacement.length;
 
} else {
idx += 1;
}
}
 
if ( found ) {
usedSet.add( term );
}
} );
} );
}
}


wrap( abilities, L + 'AbilityIcon|%s' + R );
wrap( abilities, L + 'AbilityIcon|%s' + R, usedAbilities );
wrap( items, L + 'ItemIcon|%s' + R );
wrap( items, L + 'ItemIcon|%s' + R, usedItems );
wrap( heroes, L + 'HeroIcon|%s' + R );
wrap( heroes, L + 'HeroIcon|%s' + R, usedHeroes );


WIKI_LINKS.forEach( function ( pair ) {
WIKI_LINKS.forEach( function ( pair ) {
Line 170: Line 189:


var c = classify( entry, heroes, items, gameModes );
var c = classify( entry, heroes, items, gameModes );
var kind = c[ 0 ];
var name = c[ 1 ];


var body = formatBody(
var body = formatBody(
Line 183: Line 200:
);
);


if ( kind === 'general' ) {
if ( c[ 0 ] === 'general' ) {
general.push( body );
general.push( body );
} else if ( c[ 0 ] === 'mode' ) {


} else if ( kind === 'mode' ) {
if ( !modes[ c[ 1 ] ] ) {
 
modes[ c[ 1 ] ] = [];
if ( !modes[ name ] ) {
modeOrder.push( c[ 1 ] );
modes[ name ] = [];
modeOrder.push( name );
}
}


modes[ name ].push( body );
modes[ c[ 1 ] ].push( body );


} else if ( kind === 'item' ) {
} else if ( c[ 0 ] === 'item' ) {


if ( !itemSections[ name ] ) {
if ( !itemSections[ c[ 1 ] ] ) {
itemSections[ name ] = [];
itemSections[ c[ 1 ] ] = [];
itemOrder.push( name );
itemOrder.push( c[ 1 ] );
}
}


itemSections[ name ].push( body );
itemSections[ c[ 1 ] ].push( body );


} else if ( kind === 'hero' ) {
} else if ( c[ 0 ] === 'hero' ) {


if ( !heroSections[ name ] ) {
if ( !heroSections[ c[ 1 ] ] ) {
heroSections[ name ] = [];
heroSections[ c[ 1 ] ] = [];
heroOrder.push( name );
heroOrder.push( c[ 1 ] );
}
}


heroSections[ name ].push( body );
heroSections[ c[ 1 ] ].push( body );
}
}
} );
} );