Emojification: only replace sequences of emoji surrounded by whitespace
Fixes #903, #930
This commit is contained in:
parent
e7fdf05890
commit
98d4bd9613
1 changed files with 33 additions and 2 deletions
|
@ -28,9 +28,40 @@ weechat.directive('inputBar', function() {
|
|||
// Expose utils to be able to check if we're on a mobile UI
|
||||
$scope.utils = utils;
|
||||
|
||||
// E.g. Turn :smile: into the unicode equivalent
|
||||
// Emojify input. E.g. Turn :smile: into the unicode equivalent, but
|
||||
// don't do replacements in the middle of a word (e.g. std::io::foo)
|
||||
$scope.inputChanged = function() {
|
||||
$scope.command = emojione.shortnameToUnicode($scope.command);
|
||||
var emojiRegex = /^(?:[\uD800-\uDBFF][\uDC00-\uDFFF])+$/, // *only* emoji
|
||||
changed = false, // whether a segment was modified
|
||||
inputNode = $scope.getInputNode(),
|
||||
caretPos = inputNode.selectionStart,
|
||||
position = 0; // current position in text
|
||||
|
||||
// use capturing group in regex to include whitespace in output array
|
||||
var segments = $scope.command.split(/(\s+)/);
|
||||
for (var i = 0; i < segments.length; i ++) {
|
||||
if (/\s+/.test(segments[i]) || emojiRegex.test(segments[i])) {
|
||||
// ignore whitespace and emoji-only segments
|
||||
position += segments[i].length;
|
||||
continue;
|
||||
}
|
||||
// emojify segment
|
||||
var emojified = emojione.shortnameToUnicode(segments[i]);
|
||||
if (emojiRegex.test(emojified)) {
|
||||
// If result consists *only* of emoji, adjust caret
|
||||
// position and replace segment with emojified version
|
||||
caretPos = caretPos - segments[i].length + emojified.length;
|
||||
segments[i] = emojified;
|
||||
changed = true;
|
||||
}
|
||||
position += segments[i].length;
|
||||
}
|
||||
if (changed) { // Only re-assemble if something changed
|
||||
$scope.command = segments.join('');
|
||||
setTimeout(function() {
|
||||
inputNode.setSelectionRange(caretPos, caretPos);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue