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'; ...@@ -130,7 +130,6 @@ import streamerService from './services/streamer';
import tagsService from './services/tags'; import tagsService from './services/tags';
import threadsService from './services/threads'; import threadsService from './services/threads';
import toastMessenger from './services/toast-messenger'; import toastMessenger from './services/toast-messenger';
import unicodeService from './services/unicode';
import viewFilterService from './services/view-filter'; import viewFilterService from './services/view-filter';
// Redux store. // Redux store.
...@@ -167,7 +166,6 @@ function startApp(config) { ...@@ -167,7 +166,6 @@ function startApp(config) {
.register('tags', tagsService) .register('tags', tagsService)
.register('threadsService', threadsService) .register('threadsService', threadsService)
.register('toastMessenger', toastMessenger) .register('toastMessenger', toastMessenger)
.register('unicode', unicodeService)
.register('viewFilter', viewFilterService) .register('viewFilter', viewFilterService)
.register('store', store); .register('store', store);
......
import ViewFilter from '../view-filter'; import ViewFilter, { $imports } from '../view-filter';
function isoDateWithAge(age) { function isoDateWithAge(age) {
return new Date(Date.now() - age * 1000).toISOString(); return new Date(Date.now() - age * 1000).toISOString();
...@@ -27,6 +27,14 @@ describe('sidebar/services/view-filter', () => { ...@@ -27,6 +27,14 @@ describe('sidebar/services/view-filter', () => {
normalize: sinon.stub().returnsArg(0), normalize: sinon.stub().returnsArg(0),
}; };
viewFilter = new ViewFilter(fakeUnicode); viewFilter = new ViewFilter(fakeUnicode);
$imports.$mock({
'../util/unicode': fakeUnicode,
});
});
afterEach(() => {
$imports.$restore();
}); });
describe('#filter', () => { describe('#filter', () => {
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
*/ */
import { quote } from '../util/annotation-metadata'; import { quote } from '../util/annotation-metadata';
import * as unicodeUtils from '../util/unicode';
// Prevent Babel inserting helper code after `@ngInject` comment below which // Prevent Babel inserting helper code after `@ngInject` comment below which
// breaks browserify-ngannotate. // breaks browserify-ngannotate.
...@@ -35,8 +36,8 @@ function displayName(ann) { ...@@ -35,8 +36,8 @@ function displayName(ann) {
* against the parsed query by the `filter` method of this class. Annotations * against the parsed query by the `filter` method of this class. Annotations
* which do not match the filter are then hidden. * 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. * Normalize a field value or query term for comparison.
*/ */
...@@ -44,7 +45,7 @@ export default function ViewFilter(unicode) { ...@@ -44,7 +45,7 @@ export default function ViewFilter(unicode) {
if (typeof val !== 'string') { if (typeof val !== 'string') {
return val; return val;
} }
return unicode.fold(unicode.normalize(val)).toLowerCase(); return unicodeUtils.fold(unicodeUtils.normalize(val)).toLowerCase();
} }
/** /**
......
...@@ -39,15 +39,6 @@ describe('annotation threading', function () { ...@@ -39,15 +39,6 @@ describe('annotation threading', function () {
let rootThread; let rootThread;
beforeEach(function () { beforeEach(function () {
const fakeUnicode = {
normalize: function (s) {
return s;
},
fold: function (s) {
return s;
},
};
const fakeFeatures = { const fakeFeatures = {
flagEnabled: sinon.stub().returns(true), flagEnabled: sinon.stub().returns(true),
}; };
...@@ -59,8 +50,7 @@ describe('annotation threading', function () { ...@@ -59,8 +50,7 @@ describe('annotation threading', function () {
.register('annotationsService', () => {}) .register('annotationsService', () => {})
.register('viewFilter', viewFilterFactory) .register('viewFilter', viewFilterFactory)
.register('features', { value: fakeFeatures }) .register('features', { value: fakeFeatures })
.register('settings', { value: {} }) .register('settings', { value: {} });
.register('unicode', { value: fakeUnicode });
store = container.get('store'); store = container.get('store');
rootThread = container.get('rootThread'); rootThread = container.get('rootThread');
......
import unicodeFactory from '../unicode'; import * as unicode from '../unicode';
const unicode = unicodeFactory(); describe('sidebar/util/unicode', () => {
describe('fold', () => {
describe('unicode', () => {
describe('#fold', () => {
it('removes hungarian marks', () => { it('removes hungarian marks', () => {
const text = 'Fürge rőt róka túlszökik zsíros étkű kutyán'; const text = 'Fürge rőt róka túlszökik zsíros étkű kutyán';
const decoded = unicode.fold(unicode.normalize(text)); const decoded = unicode.fold(unicode.normalize(text));
......
...@@ -9,10 +9,18 @@ ...@@ -9,10 +9,18 @@
// eslint-disable-next-line no-misleading-character-class // 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; 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() { * @param {string} str
return { * @return {string}
normalize: str => str.normalize('NFKD'), */
fold: str => str.replace(COMBINING_MARKS, ''), 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