strip diacritics for user autocomplete
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
parent
5b027c6410
commit
ce04c745e5
1 changed files with 15 additions and 3 deletions
|
@ -3,6 +3,7 @@
|
||||||
Copyright 2016 Aviral Dasgupta
|
Copyright 2016 Aviral Dasgupta
|
||||||
Copyright 2017 Vector Creations Ltd
|
Copyright 2017 Vector Creations Ltd
|
||||||
Copyright 2017, 2018 New Vector Ltd
|
Copyright 2017, 2018 New Vector Ltd
|
||||||
|
Copyright 2018 Michael Telatynski <7t3chguy@gmail.com>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
@ -32,6 +33,10 @@ import type {SelectionRange} from "./Autocompleter";
|
||||||
|
|
||||||
const USER_REGEX = /@\S*/g;
|
const USER_REGEX = /@\S*/g;
|
||||||
|
|
||||||
|
function stripDiacritics(str: string): string {
|
||||||
|
return str.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
|
||||||
|
}
|
||||||
|
|
||||||
export default class UserProvider extends AutocompleteProvider {
|
export default class UserProvider extends AutocompleteProvider {
|
||||||
users: Array<RoomMember> = null;
|
users: Array<RoomMember> = null;
|
||||||
room: Room = null;
|
room: Room = null;
|
||||||
|
@ -107,7 +112,7 @@ export default class UserProvider extends AutocompleteProvider {
|
||||||
const fullMatch = command[0];
|
const fullMatch = command[0];
|
||||||
// Don't search if the query is a single "@"
|
// Don't search if the query is a single "@"
|
||||||
if (fullMatch && fullMatch !== '@') {
|
if (fullMatch && fullMatch !== '@') {
|
||||||
completions = this.matcher.match(fullMatch).map((user) => {
|
completions = this.matcher.match(stripDiacritics(fullMatch)).map((user) => {
|
||||||
const displayName = (user.name || user.userId || '').replace(' (IRC)', ''); // FIXME when groups are done
|
const displayName = (user.name || user.userId || '').replace(' (IRC)', ''); // FIXME when groups are done
|
||||||
return {
|
return {
|
||||||
// Length of completion should equal length of text in decorator. draft-js
|
// Length of completion should equal length of text in decorator. draft-js
|
||||||
|
@ -141,8 +146,15 @@ export default class UserProvider extends AutocompleteProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
const currentUserId = MatrixClientPeg.get().credentials.userId;
|
const currentUserId = MatrixClientPeg.get().credentials.userId;
|
||||||
this.users = this.room.getJoinedMembers().filter((member) => {
|
|
||||||
if (member.userId !== currentUserId) return true;
|
this.users = [];
|
||||||
|
this.room.getJoinedMembers().forEach(({userId, name, ...rest}) => {
|
||||||
|
if (userId === currentUserId) return; // skip self
|
||||||
|
this.users.push({
|
||||||
|
userId,
|
||||||
|
name: stripDiacritics(name),
|
||||||
|
...rest,
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
this.users = _sortBy(this.users, (member) =>
|
this.users = _sortBy(this.users, (member) =>
|
||||||
|
|
Loading…
Reference in a new issue