Browse Source

Fix prettier formatting

master
Joe Attardi 4 years ago
parent
commit
3eab130d0b
  1. 49
      .eslintrc.js
  2. 4
      .prettierrc
  3. 2
      examples/src/index.js
  4. 4
      src/categoryButtons.test.ts
  5. 4
      src/categoryButtons.ts
  6. 14
      src/emoji.test.ts
  7. 4
      src/emoji.ts
  8. 6
      src/emojiArea.test.ts
  9. 10
      src/emojiArea.ts
  10. 4
      src/emojiContainer.test.ts
  11. 4
      src/emojiContainer.ts
  12. 4
      src/i18n.ts
  13. 4
      src/icons.ts
  14. 20
      src/index.ts
  15. 2
      src/preview.ts
  16. 8
      src/recent.ts
  17. 14
      src/search.test.ts
  18. 8
      src/search.ts
  19. 2
      src/variantPopup.test.ts
  20. 4
      src/variantPopup.ts

49
.eslintrc.js

@ -1,24 +1,27 @@
module.exports = { module.exports = {
"parser": "@typescript-eslint/parser", parser: '@typescript-eslint/parser',
"env": { env: {
"browser": true, browser: true,
"es6": true, es6: true,
"node": true, node: true,
"jest": true jest: true
}, },
"extends": ["eslint:recommended", "plugin:prettier/recommended", "plugin:@typescript-eslint/eslint-recommended", "plugin:@typescript-eslint/recommended"], extends: [
"globals": { 'eslint:recommended',
"Atomics": "readonly", 'plugin:prettier/recommended',
"SharedArrayBuffer": "readonly" 'plugin:@typescript-eslint/eslint-recommended',
}, 'plugin:@typescript-eslint/recommended'
"parserOptions": { ],
"ecmaVersion": 2018, globals: {
"sourceType": "module" Atomics: 'readonly',
}, SharedArrayBuffer: 'readonly'
"rules": { },
"no-console": "error" parserOptions: {
}, ecmaVersion: 2018,
"plugins": [ sourceType: 'module'
"@typescript-eslint" },
] rules: {
}; 'no-console': 'error'
},
plugins: ['@typescript-eslint']
};

4
.prettierrc

@ -1,3 +1,5 @@
{ {
"singleQuote": true "arrowParens": "avoid",
"singleQuote": true,
"trailingComma": "none"
} }

2
examples/src/index.js

@ -1,6 +1,6 @@
hljs.initHighlightingOnLoad(); hljs.initHighlightingOnLoad();
var EmojiButton = require('@joeattardi/emoji-button'); import { EmojiButton } from '@joeattardi/emoji-button';
window.addEventListener('DOMContentLoaded', function () { window.addEventListener('DOMContentLoaded', function () {
var button = document.querySelector('#native-button'); var button = document.querySelector('#native-button');

4
src/categoryButtons.test.ts

@ -40,7 +40,7 @@ describe('CategoryButtons', () => {
test('should only render specified categories if they are specified', () => { test('should only render specified categories if they are specified', () => {
const container = new CategoryButtons( const container = new CategoryButtons(
{ {
categories: ['smileys', 'animals'], categories: ['smileys', 'animals']
}, },
emitter, emitter,
i18n i18n
@ -56,7 +56,7 @@ describe('CategoryButtons', () => {
const container = new CategoryButtons( const container = new CategoryButtons(
{ {
categories: ['smileys', 'animals'], categories: ['smileys', 'animals'],
showRecents: true, showRecents: true
}, },
emitter, emitter,
i18n i18n

4
src/categoryButtons.ts

@ -22,7 +22,7 @@ const categoryIcons: { [key in I18NCategory]: string } = {
travel: icons.building, travel: icons.building,
objects: icons.lightbulb, objects: icons.lightbulb,
symbols: icons.music, symbols: icons.music,
flags: icons.flag, flags: icons.flag
}; };
export class CategoryButtons { export class CategoryButtons {
@ -56,7 +56,7 @@ export class CategoryButtons {
}); });
}); });
container.addEventListener('keydown', (event) => { container.addEventListener('keydown', event => {
switch (event.key) { switch (event.key) {
case 'ArrowRight': case 'ArrowRight':
this.events.emit( this.events.emit(

14
src/emoji.test.ts

@ -11,7 +11,7 @@ describe('Emoji', () => {
emoji: '😄', emoji: '😄',
name: 'smile', name: 'smile',
category: 0, category: 0,
version: '11.0', version: '11.0'
}; };
const options: EmojiButtonOptions = { showRecents: true, style: 'native' }; const options: EmojiButtonOptions = { showRecents: true, style: 'native' };
@ -24,15 +24,15 @@ describe('Emoji', () => {
expect(element.innerHTML).toEqual(testEmoji.emoji); expect(element.innerHTML).toEqual(testEmoji.emoji);
}); });
test('should emit the EMOJI event when clicked', (done) => { test('should emit the EMOJI event when clicked', done => {
const emoji = new Emoji(testEmoji, false, false, events, options); const emoji = new Emoji(testEmoji, false, false, events, options);
const element = emoji.render(); const element = emoji.render();
events.on(EMOJI, (e) => { events.on(EMOJI, e => {
expect(e).toEqual({ expect(e).toEqual({
emoji: testEmoji, emoji: testEmoji,
showVariants: false, showVariants: false,
button: element, button: element
}); });
done(); done();
}); });
@ -40,11 +40,11 @@ describe('Emoji', () => {
element.dispatchEvent(new MouseEvent('click')); element.dispatchEvent(new MouseEvent('click'));
}); });
test('should emit the SHOW_PREVIEW event on mouseover if showPreview is true', (done) => { test('should emit the SHOW_PREVIEW event on mouseover if showPreview is true', done => {
const emoji = new Emoji(testEmoji, false, true, events, options); const emoji = new Emoji(testEmoji, false, true, events, options);
const element = emoji.render(); const element = emoji.render();
events.on(SHOW_PREVIEW, (e) => { events.on(SHOW_PREVIEW, e => {
expect(e).toEqual(testEmoji); expect(e).toEqual(testEmoji);
done(); done();
}); });
@ -52,7 +52,7 @@ describe('Emoji', () => {
element.dispatchEvent(new MouseEvent('mouseover')); element.dispatchEvent(new MouseEvent('mouseover'));
}); });
test('should emit the HIDE_PREVIEW event on mouseout if showPreview is true', (done) => { test('should emit the HIDE_PREVIEW event on mouseout if showPreview is true', done => {
const emoji = new Emoji(testEmoji, false, true, events, options); const emoji = new Emoji(testEmoji, false, true, events, options);
const element = emoji.render(); const element = emoji.render();

4
src/emoji.ts

@ -12,7 +12,7 @@ const CLASS_EMOJI = 'emoji-picker__emoji';
// Options for twemoji.parse(emoji, twemojiOptions) // Options for twemoji.parse(emoji, twemojiOptions)
const twemojiOptions = { const twemojiOptions = {
ext: '.svg', ext: '.svg',
folder: 'svg', folder: 'svg'
}; };
export class Emoji { export class Emoji {
@ -59,7 +59,7 @@ export class Emoji {
this.events.emit(EMOJI, { this.events.emit(EMOJI, {
emoji: this.emoji, emoji: this.emoji,
showVariants: this.showVariants, showVariants: this.showVariants,
button: this.emojiButton, button: this.emojiButton
}); });
} }

6
src/emojiArea.test.ts

@ -10,7 +10,7 @@ const emitter = new Emitter();
describe('EmojiArea', () => { describe('EmojiArea', () => {
test('renders an emoji list for each category', () => { test('renders an emoji list for each category', () => {
const emojiArea = new EmojiArea(emitter, i18n, { const emojiArea = new EmojiArea(emitter, i18n, {
emojiVersion: '11.0', emojiVersion: '11.0'
}).render(); }).render();
const containers = emojiArea.querySelectorAll('.emoji-picker__container'); const containers = emojiArea.querySelectorAll('.emoji-picker__container');
@ -28,7 +28,7 @@ describe('EmojiArea', () => {
test('only renders emoji lists for specified categories', () => { test('only renders emoji lists for specified categories', () => {
const emojiArea = new EmojiArea(emitter, i18n, { const emojiArea = new EmojiArea(emitter, i18n, {
emojiVersion: '11.0', emojiVersion: '11.0',
categories: ['smileys', 'animals'], categories: ['smileys', 'animals']
}).render(); }).render();
const containers = emojiArea.querySelectorAll('.emoji-picker__container'); const containers = emojiArea.querySelectorAll('.emoji-picker__container');
@ -48,7 +48,7 @@ describe('EmojiArea', () => {
const emojiArea = new EmojiArea(emitter, i18n, { const emojiArea = new EmojiArea(emitter, i18n, {
emojiVersion: '11.0', emojiVersion: '11.0',
categories: ['smileys', 'animals'], categories: ['smileys', 'animals'],
showRecents: true, showRecents: true
}).render(); }).render();
const containers = emojiArea.querySelectorAll('.emoji-picker__container'); const containers = emojiArea.querySelectorAll('.emoji-picker__container');

10
src/emojiArea.ts

@ -11,13 +11,13 @@ import {
I18NStrings, I18NStrings,
EmojiButtonOptions, EmojiButtonOptions,
EmojiRecord, EmojiRecord,
RecentEmoji, RecentEmoji
} from './types'; } from './types';
import { createElement } from './util'; import { createElement } from './util';
import { load } from './recent'; import { load } from './recent';
const emojiCategories: { [key: string]: EmojiRecord[] } = {}; const emojiCategories: { [key: string]: EmojiRecord[] } = {};
emojiData.emoji.forEach((emoji) => { emojiData.emoji.forEach(emoji => {
let categoryList = emojiCategories[emojiData.categories[emoji.category]]; let categoryList = emojiCategories[emojiData.categories[emoji.category]];
if (!categoryList) { if (!categoryList) {
categoryList = emojiCategories[emojiData.categories[emoji.category]] = []; categoryList = emojiCategories[emojiData.categories[emoji.category]] = [];
@ -69,14 +69,14 @@ export class EmojiArea {
emojiCategories.recents = load(); emojiCategories.recents = load();
} }
this.categories.forEach((category) => this.categories.forEach(category =>
this.addCategory(category, emojiCategories[category]) this.addCategory(category, emojiCategories[category])
); );
requestAnimationFrame(() => { requestAnimationFrame(() => {
this.headerOffsets = Array.prototype.map.call( this.headerOffsets = Array.prototype.map.call(
this.headers, this.headers,
(header) => header.offsetTop header => header.offsetTop
) as number[]; ) as number[];
this.selectCategory('smileys', false); this.selectCategory('smileys', false);
@ -271,7 +271,7 @@ export class EmojiArea {
return; return;
} }
let closestHeaderIndex = this.headerOffsets.findIndex( let closestHeaderIndex = this.headerOffsets.findIndex(
(offset) => offset > Math.round(this.emojis.scrollTop) offset => offset > Math.round(this.emojis.scrollTop)
); );
if (closestHeaderIndex === 0) { if (closestHeaderIndex === 0) {

4
src/emojiContainer.test.ts

@ -6,13 +6,13 @@ describe('EmojiContainer', () => {
test('should render all the given emojis', () => { test('should render all the given emojis', () => {
const emojis = [ const emojis = [
{ emoji: '⚡️', version: '12.1', name: 'zap', category: 0 }, { emoji: '⚡️', version: '12.1', name: 'zap', category: 0 },
{ emoji: '👍', version: '12.1', name: 'thumbs up', category: 0 }, { emoji: '👍', version: '12.1', name: 'thumbs up', category: 0 }
]; ];
const events = new Emitter(); const events = new Emitter();
const container = new EmojiContainer(emojis, false, events, { const container = new EmojiContainer(emojis, false, events, {
emojiVersion: '12.1', emojiVersion: '12.1'
}).render(); }).render();
expect(container.querySelectorAll('.emoji-picker__emoji').length).toBe(2); expect(container.querySelectorAll('.emoji-picker__emoji').length).toBe(2);
}); });

4
src/emojiContainer.ts

@ -17,7 +17,7 @@ export class EmojiContainer {
private options: EmojiButtonOptions private options: EmojiButtonOptions
) { ) {
this.emojis = emojis.filter( this.emojis = emojis.filter(
(e) => e =>
!(e as EmojiRecord).version || !(e as EmojiRecord).version ||
parseFloat((e as EmojiRecord).version as string) <= parseFloat((e as EmojiRecord).version as string) <=
parseFloat(options.emojiVersion as string) parseFloat(options.emojiVersion as string)
@ -26,7 +26,7 @@ export class EmojiContainer {
render(): HTMLElement { render(): HTMLElement {
const emojiContainer = createElement('div', CLASS_EMOJI_CONTAINER); const emojiContainer = createElement('div', CLASS_EMOJI_CONTAINER);
this.emojis.forEach((emoji) => this.emojis.forEach(emoji =>
emojiContainer.appendChild( emojiContainer.appendChild(
new Emoji( new Emoji(
emoji, emoji,

4
src/i18n.ts

@ -12,7 +12,7 @@ export const i18n: I18NStrings = {
travel: 'Travel & Places', travel: 'Travel & Places',
objects: 'Objects', objects: 'Objects',
symbols: 'Symbols', symbols: 'Symbols',
flags: 'Flags', flags: 'Flags'
}, },
notFound: 'No emojis found', notFound: 'No emojis found'
}; };

4
src/icons.ts

@ -7,14 +7,14 @@ import {
faMusic, faMusic,
faSearch, faSearch,
faTimes, faTimes,
faUser, faUser
} from '@fortawesome/free-solid-svg-icons'; } from '@fortawesome/free-solid-svg-icons';
import { import {
faBuilding, faBuilding,
faFlag, faFlag,
faFrown, faFrown,
faLightbulb, faLightbulb,
faSmile, faSmile
} from '@fortawesome/free-regular-svg-icons'; } from '@fortawesome/free-regular-svg-icons';
library.add( library.add(

20
src/index.ts

@ -11,7 +11,7 @@ import {
EMOJI, EMOJI,
SHOW_SEARCH_RESULTS, SHOW_SEARCH_RESULTS,
HIDE_SEARCH_RESULTS, HIDE_SEARCH_RESULTS,
HIDE_VARIANT_POPUP, HIDE_VARIANT_POPUP
} from './events'; } from './events';
import { EmojiPreview } from './preview'; import { EmojiPreview } from './preview';
import { Search } from './search'; import { Search } from './search';
@ -29,7 +29,7 @@ const CLASS_PICKER_CONTENT = 'emoji-picker__content';
// Options for twemoji.parse(emoji, twemojiOptions) // Options for twemoji.parse(emoji, twemojiOptions)
const twemojiOptions = { const twemojiOptions = {
ext: '.svg', ext: '.svg',
folder: 'svg', folder: 'svg'
}; };
const DEFAULT_OPTIONS: EmojiButtonOptions = { const DEFAULT_OPTIONS: EmojiButtonOptions = {
@ -53,15 +53,15 @@ const DEFAULT_OPTIONS: EmojiButtonOptions = {
'travel', 'travel',
'objects', 'objects',
'symbols', 'symbols',
'flags', 'flags'
], ],
style: 'native', style: 'native',
emojisPerRow: 8, emojisPerRow: 8,
rows: 6, rows: 6,
emojiSize: '1.8em', emojiSize: '1.8em'
}; };
export default class EmojiButton { export class EmojiButton {
pickerVisible: boolean; pickerVisible: boolean;
private events = new Emitter(); private events = new Emitter();
@ -90,7 +90,7 @@ export default class EmojiButton {
this.i18n = { this.i18n = {
...i18n, ...i18n,
...options.i18n, ...options.i18n
}; };
this.onDocumentClick = this.onDocumentClick.bind(this); this.onDocumentClick = this.onDocumentClick.bind(this);
@ -131,7 +131,7 @@ export default class EmojiButton {
initialFocus: initialFocus:
this.options.showSearch && this.options.autoFocusSearch this.options.showSearch && this.options.autoFocusSearch
? '.emoji-picker__search' ? '.emoji-picker__search'
: '.emoji-picker__emoji[tabindex="0"]', : '.emoji-picker__emoji[tabindex="0"]'
}); });
const pickerContent = createElement('div', CLASS_PICKER_CONTENT); const pickerContent = createElement('div', CLASS_PICKER_CONTENT);
@ -142,7 +142,7 @@ export default class EmojiButton {
this.i18n, this.i18n,
this.options, this.options,
emojiData.emoji, emojiData.emoji,
(this.options.categories || []).map((category) => (this.options.categories || []).map(category =>
emojiData.categories.indexOf(category) emojiData.categories.indexOf(category)
) )
).render(); ).render();
@ -183,7 +183,7 @@ export default class EmojiButton {
EMOJI, EMOJI,
({ ({
emoji, emoji,
showVariants, showVariants
}: { }: {
emoji: EmojiRecord; emoji: EmojiRecord;
showVariants: boolean; showVariants: boolean;
@ -319,7 +319,7 @@ export default class EmojiButton {
document.body.appendChild(this.overlay); document.body.appendChild(this.overlay);
} else { } else {
this.popper = createPopper(referenceEl, this.wrapper, { this.popper = createPopper(referenceEl, this.wrapper, {
placement: options.position || this.options.position, placement: options.position || this.options.position
}); });
} }

2
src/preview.ts

@ -13,7 +13,7 @@ const CLASS_PREVIEW_NAME = 'emoji-picker__preview-name';
// Options for twemoji.parse(emoji, twemojiOptions) // Options for twemoji.parse(emoji, twemojiOptions)
const twemojiOptions = { const twemojiOptions = {
ext: '.svg', ext: '.svg',
folder: 'svg', folder: 'svg'
}; };
export class EmojiPreview { export class EmojiPreview {

8
src/recent.ts

@ -5,7 +5,7 @@ const LOCAL_STORAGE_KEY = 'emojiPicker.recent';
export function load(): Array<RecentEmoji> { export function load(): Array<RecentEmoji> {
const recentJson = localStorage.getItem(LOCAL_STORAGE_KEY); const recentJson = localStorage.getItem(LOCAL_STORAGE_KEY);
const recents = recentJson ? JSON.parse(recentJson) : []; const recents = recentJson ? JSON.parse(recentJson) : [];
return recents.filter((recent) => !!recent.emoji); return recents.filter(recent => !!recent.emoji);
} }
export function save( export function save(
@ -17,7 +17,7 @@ export function save(
const recent = { const recent = {
emoji: emoji.emoji, emoji: emoji.emoji,
name: emoji.name, name: emoji.name,
key: (emoji as RecentEmoji).key || emoji.name, key: (emoji as RecentEmoji).key || emoji.name
}; };
localStorage.setItem( localStorage.setItem(
@ -25,9 +25,7 @@ export function save(
JSON.stringify( JSON.stringify(
[ [
recent, recent,
...recents.filter( ...recents.filter((r: RecentEmoji) => !!r.emoji && r.key !== recent.key)
(r: RecentEmoji) => !!r.emoji && r.key !== recent.key
),
].slice(0, options.recentsCount) ].slice(0, options.recentsCount)
) )
); );

14
src/search.test.ts

@ -9,7 +9,7 @@ import { EmojiButtonOptions, EmojiRecord } from './types';
describe('Search', () => { describe('Search', () => {
const emojis: EmojiRecord[] = [ const emojis: EmojiRecord[] = [
{ category: 0, emoji: '⚡️', name: 'zap', version: '12.1' }, { category: 0, emoji: '⚡️', name: 'zap', version: '12.1' },
{ category: 1, emoji: '😀', name: 'grinning', version: '12.1' }, { category: 1, emoji: '😀', name: 'grinning', version: '12.1' }
]; ];
const options: EmojiButtonOptions = { emojiVersion: '12.1', style: 'native' }; const options: EmojiButtonOptions = { emojiVersion: '12.1', style: 'native' };
@ -23,8 +23,8 @@ describe('Search', () => {
searchField = search.querySelector('.emoji-picker__search'); searchField = search.querySelector('.emoji-picker__search');
}); });
test('should render search results', (done) => { test('should render search results', done => {
events.on(SHOW_SEARCH_RESULTS, (searchResultsContainer) => { events.on(SHOW_SEARCH_RESULTS, searchResultsContainer => {
const searchResults = searchResultsContainer.querySelectorAll( const searchResults = searchResultsContainer.querySelectorAll(
'.emoji-picker__emoji' '.emoji-picker__emoji'
); );
@ -37,9 +37,9 @@ describe('Search', () => {
searchField.dispatchEvent(new KeyboardEvent('keyup')); searchField.dispatchEvent(new KeyboardEvent('keyup'));
}); });
test('should not show search results for the unselected categories', (done) => { test('should not show search results for the unselected categories', done => {
search = new Search(events, i18n, options, emojis, [0]).render(); search = new Search(events, i18n, options, emojis, [0]).render();
events.on(SHOW_SEARCH_RESULTS, (searchResultsContainer) => { events.on(SHOW_SEARCH_RESULTS, searchResultsContainer => {
const searchResults = searchResultsContainer.querySelectorAll( const searchResults = searchResultsContainer.querySelectorAll(
'.emoji-picker__emoji' '.emoji-picker__emoji'
); );
@ -51,8 +51,8 @@ describe('Search', () => {
searchField.dispatchEvent(new KeyboardEvent('keyup')); searchField.dispatchEvent(new KeyboardEvent('keyup'));
}); });
test('should render a not found message when there are no results', (done) => { test('should render a not found message when there are no results', done => {
events.on(SHOW_SEARCH_RESULTS, (searchResultsContainer) => { events.on(SHOW_SEARCH_RESULTS, searchResultsContainer => {
expect( expect(
searchResultsContainer.classList.contains( searchResultsContainer.classList.contains(
'emoji-picker__search-not-found' 'emoji-picker__search-not-found'

8
src/search.ts

@ -7,7 +7,7 @@ import {
HIDE_PREVIEW, HIDE_PREVIEW,
HIDE_VARIANT_POPUP, HIDE_VARIANT_POPUP,
SHOW_SEARCH_RESULTS, SHOW_SEARCH_RESULTS,
HIDE_SEARCH_RESULTS, HIDE_SEARCH_RESULTS
} from './events'; } from './events';
import { createElement } from './util'; import { createElement } from './util';
import { I18NStrings, EmojiButtonOptions, EmojiRecord } from './types'; import { I18NStrings, EmojiButtonOptions, EmojiRecord } from './types';
@ -55,7 +55,7 @@ export class Search {
) { ) {
this.emojisPerRow = this.options.emojisPerRow || 8; this.emojisPerRow = this.options.emojisPerRow || 8;
this.emojiData = emojiData.filter( this.emojiData = emojiData.filter(
(e) => e =>
e.version && e.version &&
parseFloat(e.version) <= parseFloat(options.emojiVersion as string) && parseFloat(e.version) <= parseFloat(options.emojiVersion as string) &&
e.category !== undefined && e.category !== undefined &&
@ -166,7 +166,7 @@ export class Search {
this.searchIcon.innerHTML = icons.times; this.searchIcon.innerHTML = icons.times;
this.searchIcon.style.cursor = 'pointer'; this.searchIcon.style.cursor = 'pointer';
const searchResults = this.emojiData.filter( const searchResults = this.emojiData.filter(
(emoji) => emoji =>
emoji.name emoji.name
.toLowerCase() .toLowerCase()
.indexOf(this.searchField.value.toLowerCase()) >= 0 .indexOf(this.searchField.value.toLowerCase()) >= 0
@ -188,7 +188,7 @@ export class Search {
) as HTMLElement).tabIndex = 0; ) as HTMLElement).tabIndex = 0;
this.focusedEmojiIndex = 0; this.focusedEmojiIndex = 0;
this.resultsContainer.addEventListener('keydown', (event) => this.resultsContainer.addEventListener('keydown', event =>
this.handleResultsKeydown(event) this.handleResultsKeydown(event)
); );

2
src/variantPopup.test.ts

@ -8,7 +8,7 @@ describe('VariantPopup', () => {
category: 0, category: 0,
emoji: '👍', emoji: '👍',
variations: ['👍🏻', '👍🏿'], variations: ['👍🏻', '👍🏿'],
version: '11.0', version: '11.0'
}; };
let events; let events;

4
src/variantPopup.ts

@ -60,7 +60,7 @@ export class VariantPopup {
{ {
name: this.emoji.name, name: this.emoji.name,
emoji: variation, emoji: variation,
key: this.emoji.name + index, key: this.emoji.name + index
}, },
false, false,
false, false,
@ -78,7 +78,7 @@ export class VariantPopup {
setTimeout(() => firstEmoji.focus()); setTimeout(() => firstEmoji.focus());
this.popup.addEventListener('keydown', (event) => { this.popup.addEventListener('keydown', event => {
if (event.key === 'ArrowRight') { if (event.key === 'ArrowRight') {
this.setFocusedEmoji( this.setFocusedEmoji(
Math.min( Math.min(

Loading…
Cancel
Save