Benutzer:TMg/characterSearch.js
Erscheinungsbild
Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
mw.loader.using( 'mediawiki.searchSuggest', function() {
mw.util.addCSS( '.unicode-label a { color: #FFF; padding: 0 .5em; text-decoration: none; }' +
'.unicode-label a:hover { background: #555; border-radius: 2px; }' );
$( '#searchInput' ).suggestions( {
special: {
render: function( q ) {
var spaces = {
'0009': 'CHARACTER TABULATION',
'0020': 'SPACE',
'00A0': 'NO-BREAK SPACE',
'00AD': 'SOFT HYPHEN',
'2000': 'EN QUAD',
'2001': 'EM QUAD',
'2002': 'EN SPACE',
'2003': 'EM SPACE',
'2004': 'THREE-PER-EM SPACE',
'2005': 'FOUR-PER-EM SPACE',
'2006': 'SIX-PER-EM SPACE',
'2007': 'FIGURE SPACE',
'2008': 'PUNCTUATION SPACE',
'2009': 'THIN SPACE',
'200A': 'HAIR SPACE',
'200B': 'ZERO WIDTH SPACE',
'200C': 'ZERO WIDTH NON-JOINER',
'200D': 'ZERO WIDTH JOINER',
'200E': 'LEFT-TO-RIGHT MARK',
'200F': 'RIGHT-TO-LEFT MARK',
'2028': 'LINE SEPARATOR',
'2029': 'PARAGRAPH SEPARATOR',
'202A': 'LEFT-TO-RIGHT EMBEDDING',
'202B': 'RIGHT-TO-LEFT EMBEDDING',
'202C': 'POP DIRECTIONAL FORMATTING',
'202D': 'LEFT-TO-RIGHT OVERRIDE',
'202E': 'RIGHT-TO-LEFT OVERRIDE',
'202F': 'NARROW NO-BREAK SPACE',
'205F': 'MEDIUM MATHEMATICAL SPACE',
'2060': 'WORD JOINER',
'2061': 'FUNCTION APPLICATION',
'2062': 'INVISIBLE TIMES',
'2063': 'INVISIBLE SEPARATOR',
'2064': 'INVISIBLE PLUS',
'206A': 'INHIBIT SYMMETRIC SWAPPING',
'206B': 'ACTIVATE SYMMETRIC SWAPPING',
'206C': 'INHIBIT ARABIC FORM SHAPING',
'206D': 'ACTIVATE ARABIC FORM SHAPING',
'206E': 'NATIONAL DIGIT SHAPES',
'206F': 'NOMINAL DIGIT SHAPES',
'3000': 'IDEOGRAPHIC SPACE',
'FEFF': 'ZERO WIDTH NO-BREAK SPACE'
};
var punctuation = {
'002D': 'HYPHEN-MINUS',
'005F': 'LOW LINE',
'00AF': 'MACRON',
'02C9': 'MODIFIER LETTER MACRON',
'02CD': 'MODIFIER LETTER LOW MACRON',
'02D7': 'MODIFIER LETTER MINUS SIGN',
'2010': 'HYPHEN',
'2011': 'NON-BREAKING HYPHEN',
'2012': 'FIGURE DASH',
'2013': 'EN DASH',
'2014': 'EM DASH',
'2015': 'HORIZONTAL BAR',
'2016': 'DOUBLE VERTICAL LINE',
'2017': 'DOUBLE LOW LINE',
'2018': 'LEFT SINGLE QUOTATION MARK',
'2019': 'RIGHT SINGLE QUOTATION MARK',
'201A': 'SINGLE LOW-9 QUOTATION MARK',
'201B': 'SINGLE HIGH-REVERSED-9 QUOTATION MARK',
'201C': 'LEFT DOUBLE QUOTATION MARK',
'201D': 'RIGHT DOUBLE QUOTATION MARK',
'201E': 'DOUBLE LOW-9 QUOTATION MARK',
'201F': 'DOUBLE HIGH-REVERSED-9 QUOTATION MARK',
'2020': 'DAGGER',
'2021': 'DOUBLE DAGGER',
'2022': 'BULLET',
'2023': 'TRIANGULAR BULLET',
'2024': 'ONE DOT LEADER',
'2025': 'TWO DOT LEADER',
'2026': 'HORIZONTAL ELLIPSIS',
'2027': 'HYPHENATION POINT',
'2030': 'PER MILLE SIGN',
'2031': 'PER TEN THOUSAND SIGN',
'2032': 'PRIME',
'2033': 'DOUBLE PRIME',
'2034': 'TRIPLE PRIME',
'2035': 'REVERSED PRIME',
'2036': 'REVERSED DOUBLE PRIME',
'2037': 'REVERSED TRIPLE PRIME',
'2038': 'CARET',
'2039': 'SINGLE LEFT-POINTING ANGLE QUOTATION MARK',
'203A': 'SINGLE RIGHT-POINTING ANGLE QUOTATION MARK',
'203B': 'REFERENCE MARK',
'203C': 'DOUBLE EXCLAMATION MARK',
'203D': 'INTERROBANG',
'203E': 'OVERLINE',
'203F': 'UNDERTIE',
'2040': 'CHARACTER TIE',
'2041': 'CARET INSERTION POINT',
'2042': 'ASTERISM',
'2043': 'HYPHEN BULLET',
'2045': 'LEFT SQUARE BRACKET WITH QUILL',
'2046': 'RIGHT SQUARE BRACKET WITH QUILL',
'2047': 'DOUBLE QUESTION MARK',
'2048': 'QUESTION EXCLAMATION MARK',
'2049': 'EXCLAMATION QUESTION MARK',
'204A': 'TIRONIAN SIGN ET',
'204B': 'REVERSED PILCROW SIGN',
'204C': 'BLACK LEFTWARDS BULLET',
'204D': 'BLACK RIGHTWARDS BULLET',
'204E': 'LOW ASTERISK',
'204F': 'REVERSED SEMICOLON',
'2050': 'CLOSE UP',
'2051': 'TWO ASTERISKS ALIGNED VERTICALLY',
'2053': 'SWUNG DASH',
'2054': 'INVERTED UNDERTIE',
'2055': 'FLOWER PUNCTUATION MARK',
'2056': 'THREE DOT PUNCTUATION',
'2057': 'QUADRUPLE PRIME',
'2058': 'FOUR DOT PUNCTUATION',
'2059': 'FIVE DOT PUNCTUATION',
'205A': 'TWO DOT PUNCTUATION',
'205B': 'FOUR DOT MARK',
'205C': 'DOTTED CROSS',
'205D': 'TRICOLON',
'205E': 'VERTICAL FOUR DOTS',
'207B': 'SUPERSCRIPT MINUS SIGN',
'208B': 'SUBSCRIPT MINUS SIGN',
'2212': 'MINUS SIGN',
'23AF': 'HORIZONTAL LINE EXTENSION',
'23E4': 'STRAIGHTNESS',
'2796': 'HEAVY MINUS SIGN',
'29FF': 'MINY',
'2E3A': 'TWO-EM DASH',
'2E3B': 'THREE-EM DASH',
'FE63': 'SMALL HYPHEN-MINUS',
'FF0D': 'FULLWIDTH HYPHEN-MINUS'
};
/* Try to shrink the character set to the least common characters */
var t = q ? q.replace( /[ -\u024F]+/g, '' )
|| q.replace( /[ -\xFF]+/g, '' )
|| q.replace( /[ -\]_a-~§°²³µ]+/g, '' )
|| q.replace( /[\w:]+/g, '' )
|| q.charAt( q.length - 1 ) : '', h = '';
/* Analyze up to 10 characters */
for ( var a = [], i = 0; i < 10 && i < t.length; i++ ) {
var c = t.charCodeAt( i );
/* Skip duplicates */
if ( a[c] ) {
continue;
}
a[c] = true;
var u = c.toString( 16 ).toUpperCase();
/* Don't use slice( -4 ) because of compatibility reasons */
u = '0000'.slice( u.length ) + u;
h += '<a href="' + mw.util.getUrl( t.charAt( i ) ) + '">'
+ ( spaces[u] || t.charAt( i ) )
+ '<\/a>'
+ '<a href="' + mw.util.getUrl( 'Special:Search/' + u + ' prefix:Unicode' ) + '"';
if ( punctuation[u] ) {
h += ' title="U+' + u + '"';
}
h += '>'
+ ( punctuation[u] || 'U+' + u )
+ '<\/a>\n';
}
if ( this.children().length <= 0 ) {
this.append(
$( '<div>' ).addClass( 'special-label' ).text( mw.msg( 'searchsuggest-containing' ) ),
$( '<div>' ).addClass( 'special-query' ).text( q ),
$( '<div>' ).addClass( 'unicode-label' ).css( {
'background': '#333', 'border-top': '1px solid #AAA', 'cursor': 'default',
'margin': '.25em -.25em -.25em', 'padding': '.25em', 'white-space': 'pre'
} ).html( h ) ).show();
} else {
this.find( '.special-query' ).text( q );
this.find( '.unicode-label' ).html( h );
}
if ( !this.parent().hasClass( 'mw-searchSuggest-link' ) ) {
this.wrap( $( '<a>' ).addClass( 'mw-searchSuggest-link' ) );
}
this.parent().attr( 'href', mw.util.getUrl( 'Special:Search/' + q, { 'fulltext': 1 } ) );
},
select: function( $i ) {
$i.closest( 'form' ).append( $( '<input type="hidden" name="fulltext" value="1" />' ) );
return true;
}
}
} );
} );