Commit dd676034 authored by Lyza Danger Gardner's avatar Lyza Danger Gardner Committed by Lyza Gardner

Move unicode from services to util

parent 9edc2928
......@@ -130,7 +130,6 @@ import streamerService from './services/streamer';
import tagsService from './services/tags';
import threadsService from './services/threads';
import toastMessenger from './services/toast-messenger';
import unicodeService from './services/unicode';
import viewFilterService from './services/view-filter';
// Redux store.
......@@ -167,7 +166,6 @@ function startApp(config) {
.register('tags', tagsService)
.register('threadsService', threadsService)
.register('toastMessenger', toastMessenger)
.register('unicode', unicodeService)
.register('viewFilter', viewFilterService)
.register('store', store);
......
import ViewFilter from '../view-filter';
import ViewFilter, { $imports } from '../view-filter';
function isoDateWithAge(age) {
return new Date(Date.now() - age * 1000).toISOString();
......@@ -27,6 +27,14 @@ describe('sidebar/services/view-filter', () => {
normalize: sinon.stub().returnsArg(0),
};
viewFilter = new ViewFilter(fakeUnicode);
$imports.$mock({
'../util/unicode': fakeUnicode,
});
});
afterEach(() => {
$imports.$restore();
});
describe('#filter', () => {
......
......@@ -3,6 +3,7 @@
*/
import { quote } from '../util/annotation-metadata';
import * as unicodeUtils from '../util/unicode';
// Prevent Babel inserting helper code after `@ngInject` comment below which
// breaks browserify-ngannotate.
......@@ -35,8 +36,8 @@ function displayName(ann) {
* against the parsed query by the `filter` method of this class. Annotations
* which do not match the filter are then hidden.
*/
// @ngInject
export default function ViewFilter(unicode) {
export default function ViewFilter() {
/**
* Normalize a field value or query term for comparison.
*/
......@@ -44,7 +45,7 @@ export default function ViewFilter(unicode) {
if (typeof val !== 'string') {
return val;
}
return unicode.fold(unicode.normalize(val)).toLowerCase();
return unicodeUtils.fold(unicodeUtils.normalize(val)).toLowerCase();
}
/**
......
......@@ -39,15 +39,6 @@ describe('annotation threading', function () {
let rootThread;
beforeEach(function () {
const fakeUnicode = {
normalize: function (s) {
return s;
},
fold: function (s) {
return s;
},
};
const fakeFeatures = {
flagEnabled: sinon.stub().returns(true),
};
......@@ -59,8 +50,7 @@ describe('annotation threading', function () {
.register('annotationsService', () => {})
.register('viewFilter', viewFilterFactory)
.register('features', { value: fakeFeatures })
.register('settings', { value: {} })
.register('unicode', { value: fakeUnicode });
.register('settings', { value: {} });
store = container.get('store');
rootThread = container.get('rootThread');
......
import unicodeFactory from '../unicode';
import * as unicode from '../unicode';
const unicode = unicodeFactory();
describe('unicode', () => {
describe('#fold', () => {
describe('sidebar/util/unicode', () => {
describe('fold', () => {
it('removes hungarian marks', () => {
const text = 'Fürge rőt róka túlszökik zsíros étkű kutyán';
const decoded = unicode.fold(unicode.normalize(text));
......
......@@ -9,10 +9,18 @@
// eslint-disable-next-line no-misleading-character-class
const COMBINING_MARKS = /[\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08E4-\u08FE\u0900-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C01-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C82\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D02\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u18A9\u1920-\u192B\u1930-\u193B\u19B0-\u19C0\u19C8\u19C9\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1DC0-\u1DE6\u1DFC-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C4\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE26]/g;
// @ngInject
export default function unicode() {
return {
normalize: str => str.normalize('NFKD'),
fold: str => str.replace(COMBINING_MARKS, ''),
};
/**
* @param {string} str
* @return {string}
*/
export function fold(str) {
return str.replace(COMBINING_MARKS, '');
}
/**
* @param {string} str
* @return {string}
*/
export function normalize(str) {
return str.normalize('NFKD');
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment