Commit d163ac26 authored by Filipa Lacerda's avatar Filipa Lacerda

Merge branch 'update-native-unicode-emojis-with-harmony-modules' into 'master'

Update emojis to use harmony modules (import/export)

See merge request !9784
parents 92bb0d8f ee993014
/* global Cookies */ /* global Cookies */
const emojiMap = require('emoji-map'); import emojiMap from 'emojis/digests.json';
const emojiAliases = require('emoji-aliases'); import emojiAliases from 'emojis/aliases.json';
const glEmoji = require('./behaviors/gl_emoji'); import { glEmojiTag } from './behaviors/gl_emoji';
const glEmojiTag = glEmoji.glEmojiTag;
const animationEndEventString = 'animationend webkitAnimationEnd MSAnimationEnd oAnimationEnd'; const animationEndEventString = 'animationend webkitAnimationEnd MSAnimationEnd oAnimationEnd';
const requestAnimationFrame = window.requestAnimationFrame || const requestAnimationFrame = window.requestAnimationFrame ||
...@@ -515,4 +513,4 @@ AwardsHandler.prototype.destroy = function destroy() { ...@@ -515,4 +513,4 @@ AwardsHandler.prototype.destroy = function destroy() {
$('.emoji-menu').remove(); $('.emoji-menu').remove();
}; };
module.exports = AwardsHandler; export default AwardsHandler;
const installCustomElements = require('document-register-element'); import installCustomElements from 'document-register-element';
const emojiMap = require('emoji-map'); import emojiMap from 'emojis/digests.json';
const emojiAliases = require('emoji-aliases'); import emojiAliases from 'emojis/aliases.json';
const generatedUnicodeSupportMap = require('./gl_emoji/unicode_support_map'); import { getUnicodeSupportMap } from './gl_emoji/unicode_support_map';
const spreadString = require('./gl_emoji/spread_string'); import { isEmojiUnicodeSupported } from './gl_emoji/is_emoji_unicode_supported';
installCustomElements(window); installCustomElements(window);
const generatedUnicodeSupportMap = getUnicodeSupportMap();
function emojiImageTag(name, src) { function emojiImageTag(name, src) {
return `<img class="emoji" title=":${name}:" alt=":${name}:" src="${src}" width="20" height="20" align="absmiddle" />`; return `<img class="emoji" title=":${name}:" alt=":${name}:" src="${src}" width="20" height="20" align="absmiddle" />`;
} }
...@@ -55,163 +57,49 @@ function glEmojiTag(inputName, options) { ...@@ -55,163 +57,49 @@ function glEmojiTag(inputName, options) {
`; `;
} }
// On Windows, flags render as two-letter country codes, see http://emojipedia.org/flags/ function installGlEmojiElement() {
const flagACodePoint = 127462; // parseInt('1F1E6', 16) const GlEmojiElementProto = Object.create(HTMLElement.prototype);
const flagZCodePoint = 127487; // parseInt('1F1FF', 16) GlEmojiElementProto.createdCallback = function createdCallback() {
function isFlagEmoji(emojiUnicode) { const emojiUnicode = this.textContent.trim();
const cp = emojiUnicode.codePointAt(0); const {
// Length 4 because flags are made of 2 characters which are surrogate pairs name,
return emojiUnicode.length === 4 && cp >= flagACodePoint && cp <= flagZCodePoint; unicodeVersion,
} fallbackSrc,
fallbackSpriteClass,
// Chrome <57 renders keycaps oddly } = this.dataset;
// See https://bugs.chromium.org/p/chromium/issues/detail?id=632294
// Same issue on Windows also fixed in Chrome 57, http://i.imgur.com/rQF7woO.png const isEmojiUnicode = this.childNodes && Array.prototype.every.call(
function isKeycapEmoji(emojiUnicode) { this.childNodes,
return emojiUnicode.length === 3 && emojiUnicode[2] === '\u20E3'; childNode => childNode.nodeType === 3,
} );
const hasImageFallback = fallbackSrc && fallbackSrc.length > 0;
// Check for a skin tone variation emoji which aren't always supported const hasCssSpriteFalback = fallbackSpriteClass && fallbackSpriteClass.length > 0;
const tone1 = 127995;// parseInt('1F3FB', 16)
const tone5 = 127999;// parseInt('1F3FF', 16) if (
function isSkinToneComboEmoji(emojiUnicode) { isEmojiUnicode &&
return emojiUnicode.length > 2 && spreadString(emojiUnicode).some((char) => { !isEmojiUnicodeSupported(generatedUnicodeSupportMap, emojiUnicode, unicodeVersion)
const cp = char.codePointAt(0); ) {
return cp >= tone1 && cp <= tone5; // CSS sprite fallback takes precedence over image fallback
}); if (hasCssSpriteFalback) {
} // IE 11 doesn't like adding multiple at once :(
this.classList.add('emoji-icon');
// macOS supports most skin tone emoji's but this.classList.add(fallbackSpriteClass);
// doesn't support the skin tone versions of horse racing } else if (hasImageFallback) {
const horseRacingCodePoint = 127943;// parseInt('1F3C7', 16) this.innerHTML = emojiImageTag(name, fallbackSrc);
function isHorceRacingSkinToneComboEmoji(emojiUnicode) { } else {
return spreadString(emojiUnicode)[0].codePointAt(0) === horseRacingCodePoint && const src = assembleFallbackImageSrc(name);
isSkinToneComboEmoji(emojiUnicode); this.innerHTML = emojiImageTag(name, src);
} }
// Check for `family_*`, `kiss_*`, `couple_*`
// For ex. Windows 8.1 Firefox 51.0.1, doesn't support these
const zwj = 8205; // parseInt('200D', 16)
const personStartCodePoint = 128102; // parseInt('1F466', 16)
const personEndCodePoint = 128105; // parseInt('1F469', 16)
function isPersonZwjEmoji(emojiUnicode) {
let hasPersonEmoji = false;
let hasZwj = false;
spreadString(emojiUnicode).forEach((character) => {
const cp = character.codePointAt(0);
if (cp === zwj) {
hasZwj = true;
} else if (cp >= personStartCodePoint && cp <= personEndCodePoint) {
hasPersonEmoji = true;
} }
}); };
return hasPersonEmoji && hasZwj;
}
// Helper so we don't have to run `isFlagEmoji` twice
// in `isEmojiUnicodeSupported` logic
function checkFlagEmojiSupport(unicodeSupportMap, emojiUnicode) {
const isFlagResult = isFlagEmoji(emojiUnicode);
return (
(unicodeSupportMap.flag && isFlagResult) ||
!isFlagResult
);
}
// Helper so we don't have to run `isSkinToneComboEmoji` twice
// in `isEmojiUnicodeSupported` logic
function checkSkinToneModifierSupport(unicodeSupportMap, emojiUnicode) {
const isSkinToneResult = isSkinToneComboEmoji(emojiUnicode);
return (
(unicodeSupportMap.skinToneModifier && isSkinToneResult) ||
!isSkinToneResult
);
}
// Helper func so we don't have to run `isHorceRacingSkinToneComboEmoji` twice
// in `isEmojiUnicodeSupported` logic
function checkHorseRacingSkinToneComboEmojiSupport(unicodeSupportMap, emojiUnicode) {
const isHorseRacingSkinToneResult = isHorceRacingSkinToneComboEmoji(emojiUnicode);
return (
(unicodeSupportMap.horseRacing && isHorseRacingSkinToneResult) ||
!isHorseRacingSkinToneResult
);
}
// Helper so we don't have to run `isPersonZwjEmoji` twice
// in `isEmojiUnicodeSupported` logic
function checkPersonEmojiSupport(unicodeSupportMap, emojiUnicode) {
const isPersonZwjResult = isPersonZwjEmoji(emojiUnicode);
return (
(unicodeSupportMap.personZwj && isPersonZwjResult) ||
!isPersonZwjResult
);
}
// Takes in a support map and determines whether
// the given unicode emoji is supported on the platform.
//
// Combines all the edge case tests into a one-stop shop method
function isEmojiUnicodeSupported(unicodeSupportMap = {}, emojiUnicode, unicodeVersion) {
const isOlderThanChrome57 = unicodeSupportMap.meta && unicodeSupportMap.meta.isChrome &&
unicodeSupportMap.meta.chromeVersion < 57;
// For comments about each scenario, see the comments above each individual respective function document.registerElement('gl-emoji', {
return unicodeSupportMap[unicodeVersion] && prototype: GlEmojiElementProto,
!(isOlderThanChrome57 && isKeycapEmoji(emojiUnicode)) && });
checkFlagEmojiSupport(unicodeSupportMap, emojiUnicode) &&
checkSkinToneModifierSupport(unicodeSupportMap, emojiUnicode) &&
checkHorseRacingSkinToneComboEmojiSupport(unicodeSupportMap, emojiUnicode) &&
checkPersonEmojiSupport(unicodeSupportMap, emojiUnicode);
} }
const GlEmojiElementProto = Object.create(HTMLElement.prototype); export {
GlEmojiElementProto.createdCallback = function createdCallback() { installGlEmojiElement,
const emojiUnicode = this.textContent.trim();
const {
name,
unicodeVersion,
fallbackSrc,
fallbackSpriteClass,
} = this.dataset;
const isEmojiUnicode = this.childNodes && Array.prototype.every.call(
this.childNodes,
childNode => childNode.nodeType === 3,
);
const hasImageFallback = fallbackSrc && fallbackSrc.length > 0;
const hasCssSpriteFalback = fallbackSpriteClass && fallbackSpriteClass.length > 0;
if (
isEmojiUnicode &&
!isEmojiUnicodeSupported(generatedUnicodeSupportMap, emojiUnicode, unicodeVersion)
) {
// CSS sprite fallback takes precedence over image fallback
if (hasCssSpriteFalback) {
// IE 11 doesn't like adding multiple at once :(
this.classList.add('emoji-icon');
this.classList.add(fallbackSpriteClass);
} else if (hasImageFallback) {
this.innerHTML = emojiImageTag(name, fallbackSrc);
} else {
const src = assembleFallbackImageSrc(name);
this.innerHTML = emojiImageTag(name, src);
}
}
};
document.registerElement('gl-emoji', {
prototype: GlEmojiElementProto,
});
module.exports = {
emojiImageTag,
glEmojiTag, glEmojiTag,
isEmojiUnicodeSupported, emojiImageTag,
isFlagEmoji,
isKeycapEmoji,
isSkinToneComboEmoji,
isHorceRacingSkinToneComboEmoji,
isPersonZwjEmoji,
}; };
import spreadString from './spread_string';
// On Windows, flags render as two-letter country codes, see http://emojipedia.org/flags/
const flagACodePoint = 127462; // parseInt('1F1E6', 16)
const flagZCodePoint = 127487; // parseInt('1F1FF', 16)
function isFlagEmoji(emojiUnicode) {
const cp = emojiUnicode.codePointAt(0);
// Length 4 because flags are made of 2 characters which are surrogate pairs
return emojiUnicode.length === 4 && cp >= flagACodePoint && cp <= flagZCodePoint;
}
// Chrome <57 renders keycaps oddly
// See https://bugs.chromium.org/p/chromium/issues/detail?id=632294
// Same issue on Windows also fixed in Chrome 57, http://i.imgur.com/rQF7woO.png
function isKeycapEmoji(emojiUnicode) {
return emojiUnicode.length === 3 && emojiUnicode[2] === '\u20E3';
}
// Check for a skin tone variation emoji which aren't always supported
const tone1 = 127995;// parseInt('1F3FB', 16)
const tone5 = 127999;// parseInt('1F3FF', 16)
function isSkinToneComboEmoji(emojiUnicode) {
return emojiUnicode.length > 2 && spreadString(emojiUnicode).some((char) => {
const cp = char.codePointAt(0);
return cp >= tone1 && cp <= tone5;
});
}
// macOS supports most skin tone emoji's but
// doesn't support the skin tone versions of horse racing
const horseRacingCodePoint = 127943;// parseInt('1F3C7', 16)
function isHorceRacingSkinToneComboEmoji(emojiUnicode) {
return spreadString(emojiUnicode)[0].codePointAt(0) === horseRacingCodePoint &&
isSkinToneComboEmoji(emojiUnicode);
}
// Check for `family_*`, `kiss_*`, `couple_*`
// For ex. Windows 8.1 Firefox 51.0.1, doesn't support these
const zwj = 8205; // parseInt('200D', 16)
const personStartCodePoint = 128102; // parseInt('1F466', 16)
const personEndCodePoint = 128105; // parseInt('1F469', 16)
function isPersonZwjEmoji(emojiUnicode) {
let hasPersonEmoji = false;
let hasZwj = false;
spreadString(emojiUnicode).forEach((character) => {
const cp = character.codePointAt(0);
if (cp === zwj) {
hasZwj = true;
} else if (cp >= personStartCodePoint && cp <= personEndCodePoint) {
hasPersonEmoji = true;
}
});
return hasPersonEmoji && hasZwj;
}
// Helper so we don't have to run `isFlagEmoji` twice
// in `isEmojiUnicodeSupported` logic
function checkFlagEmojiSupport(unicodeSupportMap, emojiUnicode) {
const isFlagResult = isFlagEmoji(emojiUnicode);
return (
(unicodeSupportMap.flag && isFlagResult) ||
!isFlagResult
);
}
// Helper so we don't have to run `isSkinToneComboEmoji` twice
// in `isEmojiUnicodeSupported` logic
function checkSkinToneModifierSupport(unicodeSupportMap, emojiUnicode) {
const isSkinToneResult = isSkinToneComboEmoji(emojiUnicode);
return (
(unicodeSupportMap.skinToneModifier && isSkinToneResult) ||
!isSkinToneResult
);
}
// Helper func so we don't have to run `isHorceRacingSkinToneComboEmoji` twice
// in `isEmojiUnicodeSupported` logic
function checkHorseRacingSkinToneComboEmojiSupport(unicodeSupportMap, emojiUnicode) {
const isHorseRacingSkinToneResult = isHorceRacingSkinToneComboEmoji(emojiUnicode);
return (
(unicodeSupportMap.horseRacing && isHorseRacingSkinToneResult) ||
!isHorseRacingSkinToneResult
);
}
// Helper so we don't have to run `isPersonZwjEmoji` twice
// in `isEmojiUnicodeSupported` logic
function checkPersonEmojiSupport(unicodeSupportMap, emojiUnicode) {
const isPersonZwjResult = isPersonZwjEmoji(emojiUnicode);
return (
(unicodeSupportMap.personZwj && isPersonZwjResult) ||
!isPersonZwjResult
);
}
// Takes in a support map and determines whether
// the given unicode emoji is supported on the platform.
//
// Combines all the edge case tests into a one-stop shop method
function isEmojiUnicodeSupported(unicodeSupportMap = {}, emojiUnicode, unicodeVersion) {
const isOlderThanChrome57 = unicodeSupportMap.meta && unicodeSupportMap.meta.isChrome &&
unicodeSupportMap.meta.chromeVersion < 57;
// For comments about each scenario, see the comments above each individual respective function
return unicodeSupportMap[unicodeVersion] &&
!(isOlderThanChrome57 && isKeycapEmoji(emojiUnicode)) &&
checkFlagEmojiSupport(unicodeSupportMap, emojiUnicode) &&
checkSkinToneModifierSupport(unicodeSupportMap, emojiUnicode) &&
checkHorseRacingSkinToneComboEmojiSupport(unicodeSupportMap, emojiUnicode) &&
checkPersonEmojiSupport(unicodeSupportMap, emojiUnicode);
}
export {
isEmojiUnicodeSupported,
isFlagEmoji,
isKeycapEmoji,
isSkinToneComboEmoji,
isHorceRacingSkinToneComboEmoji,
isPersonZwjEmoji,
};
...@@ -47,4 +47,4 @@ function spreadString(str) { ...@@ -47,4 +47,4 @@ function spreadString(str) {
return arr; return arr;
} }
module.exports = spreadString; export default spreadString;
...@@ -68,7 +68,7 @@ const chromeVersion = chromeMatches && chromeMatches[1] && parseInt(chromeMatche ...@@ -68,7 +68,7 @@ const chromeVersion = chromeMatches && chromeMatches[1] && parseInt(chromeMatche
// See 32px, https://i.imgur.com/htY6Zym.png // See 32px, https://i.imgur.com/htY6Zym.png
// See 16px, https://i.imgur.com/FPPsIF8.png // See 16px, https://i.imgur.com/FPPsIF8.png
const fontSize = 16; const fontSize = 16;
function testUnicodeSupportMap(testMap) { function generateUnicodeSupportMap(testMap) {
const testMapKeys = Object.keys(testMap); const testMapKeys = Object.keys(testMap);
const numTestEntries = testMapKeys const numTestEntries = testMapKeys
.reduce((list, testKey) => list.concat(testMap[testKey]), []).length; .reduce((list, testKey) => list.concat(testMap[testKey]), []).length;
...@@ -138,17 +138,24 @@ function testUnicodeSupportMap(testMap) { ...@@ -138,17 +138,24 @@ function testUnicodeSupportMap(testMap) {
return resultMap; return resultMap;
} }
let unicodeSupportMap; function getUnicodeSupportMap() {
const userAgentFromCache = window.localStorage.getItem('gl-emoji-user-agent'); let unicodeSupportMap;
try { const userAgentFromCache = window.localStorage.getItem('gl-emoji-user-agent');
unicodeSupportMap = JSON.parse(window.localStorage.getItem('gl-emoji-unicode-support-map')); try {
} catch (err) { unicodeSupportMap = JSON.parse(window.localStorage.getItem('gl-emoji-unicode-support-map'));
// swallow } catch (err) {
} // swallow
if (!unicodeSupportMap || userAgentFromCache !== navigator.userAgent) { }
unicodeSupportMap = testUnicodeSupportMap(unicodeSupportTestMap); if (!unicodeSupportMap || userAgentFromCache !== navigator.userAgent) {
window.localStorage.setItem('gl-emoji-user-agent', navigator.userAgent); unicodeSupportMap = generateUnicodeSupportMap(unicodeSupportTestMap);
window.localStorage.setItem('gl-emoji-unicode-support-map', JSON.stringify(unicodeSupportMap)); window.localStorage.setItem('gl-emoji-user-agent', navigator.userAgent);
window.localStorage.setItem('gl-emoji-unicode-support-map', JSON.stringify(unicodeSupportMap));
}
return unicodeSupportMap;
} }
module.exports = unicodeSupportMap; export {
getUnicodeSupportMap,
generateUnicodeSupportMap,
};
require('string.prototype.codepointat'); import 'string.prototype.codepointat';
require('string.fromcodepoint'); import 'string.fromcodepoint';
/* eslint-disable func-names, space-before-function-paren, no-template-curly-in-string, comma-dangle, object-shorthand, quotes, dot-notation, no-else-return, one-var, no-var, no-underscore-dangle, one-var-declaration-per-line, no-param-reassign, no-useless-escape, prefer-template, consistent-return, wrap-iife, prefer-arrow-callback, camelcase, no-unused-vars, no-useless-return, vars-on-top, max-len */ /* eslint-disable func-names, space-before-function-paren, no-template-curly-in-string, comma-dangle, object-shorthand, quotes, dot-notation, no-else-return, one-var, no-var, no-underscore-dangle, one-var-declaration-per-line, no-param-reassign, no-useless-escape, prefer-template, consistent-return, wrap-iife, prefer-arrow-callback, camelcase, no-unused-vars, no-useless-return, vars-on-top, max-len */
const emojiMap = require('emoji-map'); import emojiMap from 'emojis/digests.json';
const emojiAliases = require('emoji-aliases'); import emojiAliases from 'emojis/aliases.json';
const glEmoji = require('./behaviors/gl_emoji'); import { glEmojiTag } from '~/behaviors/gl_emoji';
const glEmojiTag = glEmoji.glEmojiTag;
// Creates the variables for setting up GFM auto-completion // Creates the variables for setting up GFM auto-completion
(function() { (function() {
......
/* eslint-disable func-names, space-before-function-paren, no-var, quotes, consistent-return, prefer-arrow-callback, comma-dangle, object-shorthand, no-new, max-len, no-multi-spaces, import/newline-after-import */ /* eslint-disable func-names, space-before-function-paren, no-var, quotes, consistent-return, prefer-arrow-callback, comma-dangle, object-shorthand, no-new, max-len, no-multi-spaces, import/newline-after-import, import/first */
/* global bp */ /* global bp */
/* global Cookies */ /* global Cookies */
/* global Flash */ /* global Flash */
...@@ -13,19 +13,20 @@ import Dropzone from 'dropzone'; ...@@ -13,19 +13,20 @@ import Dropzone from 'dropzone';
import Sortable from 'vendor/Sortable'; import Sortable from 'vendor/Sortable';
// libraries with import side-effects // libraries with import side-effects
require('mousetrap'); import 'mousetrap';
require('mousetrap/plugins/pause/mousetrap-pause'); import 'mousetrap/plugins/pause/mousetrap-pause';
require('vendor/fuzzaldrin-plus'); import 'vendor/fuzzaldrin-plus';
require('es6-promise').polyfill(); import promisePolyfill from 'es6-promise';
// extensions // extensions
require('./extensions/string'); import './extensions/string';
require('./extensions/array'); import './extensions/array';
require('./extensions/custom_event'); import './extensions/custom_event';
require('./extensions/element'); import './extensions/element';
require('./extensions/jquery'); import './extensions/jquery';
require('./extensions/object'); import './extensions/object';
require('es6-promise').polyfill();
promisePolyfill.polyfill();
// expose common libraries as globals (TODO: remove these) // expose common libraries as globals (TODO: remove these)
window.jQuery = jQuery; window.jQuery = jQuery;
...@@ -37,174 +38,171 @@ window.Dropzone = Dropzone; ...@@ -37,174 +38,171 @@ window.Dropzone = Dropzone;
window.Sortable = Sortable; window.Sortable = Sortable;
// shortcuts // shortcuts
require('./shortcuts'); import './shortcuts';
require('./shortcuts_navigation'); import './shortcuts_blob';
require('./shortcuts_dashboard_navigation'); import './shortcuts_dashboard_navigation';
require('./shortcuts_issuable'); import './shortcuts_navigation';
require('./shortcuts_network'); import './shortcuts_find_file';
import './shortcuts_issuable';
import './shortcuts_network';
// behaviors // behaviors
require('./behaviors/autosize'); import './behaviors/autosize';
require('./behaviors/details_behavior'); import './behaviors/details_behavior';
require('./behaviors/quick_submit'); import './behaviors/quick_submit';
require('./behaviors/requires_input'); import './behaviors/requires_input';
require('./behaviors/toggler_behavior'); import './behaviors/toggler_behavior';
require('./behaviors/bind_in_out'); import './behaviors/bind_in_out';
import { installGlEmojiElement } from './behaviors/gl_emoji';
installGlEmojiElement();
// blob // blob
require('./blob/blob_ci_yaml'); import './blob/blob_ci_yaml';
require('./blob/blob_dockerfile_selector'); import './blob/blob_dockerfile_selector';
require('./blob/blob_dockerfile_selectors'); import './blob/blob_dockerfile_selectors';
require('./blob/blob_file_dropzone'); import './blob/blob_file_dropzone';
require('./blob/blob_gitignore_selector'); import './blob/blob_gitignore_selector';
require('./blob/blob_gitignore_selectors'); import './blob/blob_gitignore_selectors';
require('./blob/blob_license_selector'); import './blob/blob_license_selector';
require('./blob/blob_license_selectors'); import './blob/blob_license_selectors';
require('./blob/template_selector'); import './blob/template_selector';
// templates // templates
require('./templates/issuable_template_selector'); import './templates/issuable_template_selector';
require('./templates/issuable_template_selectors'); import './templates/issuable_template_selectors';
// commit // commit
require('./commit/file.js'); import './commit/file';
require('./commit/image_file.js'); import './commit/image_file';
// lib/utils // lib/utils
require('./lib/utils/animate'); import './lib/utils/animate';
require('./lib/utils/bootstrap_linked_tabs'); import './lib/utils/bootstrap_linked_tabs';
require('./lib/utils/common_utils'); import './lib/utils/common_utils';
require('./lib/utils/datetime_utility'); import './lib/utils/datetime_utility';
require('./lib/utils/notify'); import './lib/utils/notify';
require('./lib/utils/pretty_time'); import './lib/utils/pretty_time';
require('./lib/utils/text_utility'); import './lib/utils/text_utility';
require('./lib/utils/type_utility'); import './lib/utils/type_utility';
require('./lib/utils/url_utility'); import './lib/utils/url_utility';
// u2f // u2f
require('./u2f/authenticate'); import './u2f/authenticate';
require('./u2f/error'); import './u2f/error';
require('./u2f/register'); import './u2f/register';
require('./u2f/util'); import './u2f/util';
// droplab // droplab
require('./droplab/droplab'); import './droplab/droplab';
require('./droplab/droplab_ajax'); import './droplab/droplab_ajax';
require('./droplab/droplab_ajax_filter'); import './droplab/droplab_ajax_filter';
require('./droplab/droplab_filter'); import './droplab/droplab_filter';
// everything else // everything else
require('./abuse_reports'); import './abuse_reports';
require('./activities'); import './activities';
require('./admin'); import './admin';
require('./ajax_loading_spinner'); import './ajax_loading_spinner';
require('./api'); import './api';
require('./aside'); import './aside';
require('./autosave'); import './autosave';
const AwardsHandler = require('./awards_handler'); import AwardsHandler from './awards_handler';
require('./breakpoints'); import './breakpoints';
require('./broadcast_message'); import './broadcast_message';
require('./build'); import './build';
require('./build_artifacts'); import './build_artifacts';
require('./build_variables'); import './build_variables';
require('./ci_lint_editor'); import './ci_lint_editor';
require('./commit'); import './commit';
require('./commits'); import './commits';
require('./compare'); import './compare';
require('./compare_autocomplete'); import './compare_autocomplete';
require('./confirm_danger_modal'); import './confirm_danger_modal';
require('./copy_as_gfm'); import './copy_as_gfm';
require('./copy_to_clipboard'); import './copy_to_clipboard';
require('./create_label'); import './create_label';
require('./diff'); import './diff';
require('./dispatcher'); import './dispatcher';
require('./dropzone_input'); import './dropzone_input';
require('./due_date_select'); import './due_date_select';
require('./files_comment_button'); import './files_comment_button';
require('./flash'); import './flash';
require('./gfm_auto_complete'); import './gfm_auto_complete';
require('./gl_dropdown'); import './gl_dropdown';
require('./gl_field_error'); import './gl_field_error';
require('./gl_field_errors'); import './gl_field_errors';
require('./gl_form'); import './gl_form';
require('./group_avatar'); import './group_avatar';
require('./group_label_subscription'); import './group_label_subscription';
require('./groups_select'); import './groups_select';
require('./header'); import './header';
require('./importer_status'); import './importer_status';
require('./issuable'); import './issuable';
require('./issuable_context'); import './issuable_context';
require('./issuable_form'); import './issuable_form';
require('./issue'); import './issue';
require('./issue_status_select'); import './issue_status_select';
require('./issues_bulk_assignment'); import './issues_bulk_assignment';
require('./label_manager'); import './label_manager';
require('./labels'); import './labels';
require('./labels_select'); import './labels_select';
require('./layout_nav'); import './layout_nav';
require('./line_highlighter'); import './line_highlighter';
require('./logo'); import './logo';
require('./member_expiration_date'); import './member_expiration_date';
require('./members'); import './members';
require('./merge_request'); import './merge_request';
require('./merge_request_tabs'); import './merge_request_tabs';
require('./merge_request_widget'); import './merge_request_widget';
require('./merged_buttons'); import './merged_buttons';
require('./milestone'); import './milestone';
require('./milestone_select'); import './milestone_select';
require('./mini_pipeline_graph_dropdown'); import './mini_pipeline_graph_dropdown';
require('./namespace_select'); import './namespace_select';
require('./new_branch_form'); import './new_branch_form';
require('./new_commit_form'); import './new_commit_form';
require('./notes'); import './notes';
require('./notifications_dropdown'); import './notifications_dropdown';
require('./notifications_form'); import './notifications_form';
require('./pager'); import './pager';
require('./pipelines'); import './pipelines';
require('./preview_markdown'); import './preview_markdown';
require('./project'); import './project';
require('./project_avatar'); import './project_avatar';
require('./project_find_file'); import './project_find_file';
require('./project_fork'); import './project_fork';
require('./project_import'); import './project_import';
require('./project_label_subscription'); import './project_label_subscription';
require('./project_new'); import './project_new';
require('./project_select'); import './project_select';
require('./project_show'); import './project_show';
require('./project_variables'); import './project_variables';
require('./projects_list'); import './projects_list';
require('./render_gfm'); import './render_gfm';
require('./render_math'); import './render_math';
require('./right_sidebar'); import './right_sidebar';
require('./search'); import './search';
require('./search_autocomplete'); import './search_autocomplete';
require('./shortcuts'); import './signin_tabs_memoizer';
require('./shortcuts_blob'); import './single_file_diff';
require('./shortcuts_dashboard_navigation'); import './smart_interval';
require('./shortcuts_find_file'); import './snippets_list';
require('./shortcuts_issuable'); import './star';
require('./shortcuts_navigation'); import './subbable_resource';
require('./shortcuts_network'); import './subscription';
require('./signin_tabs_memoizer'); import './subscription_select';
require('./single_file_diff'); import './syntax_highlight';
require('./smart_interval'); import './task_list';
require('./snippets_list'); import './todos';
require('./star'); import './tree';
require('./subbable_resource'); import './user';
require('./subscription'); import './user_tabs';
require('./subscription_select'); import './username_validator';
require('./syntax_highlight'); import './users_select';
require('./task_list'); import './version_check_image';
require('./todos'); import './visibility_select';
require('./tree'); import './wikis';
require('./user'); import './zen_mode';
require('./user_tabs');
require('./username_validator');
require('./users_select');
require('./version_check_image');
require('./visibility_select');
require('./wikis');
require('./zen_mode');
(function () { (function () {
document.addEventListener('beforeunload', function () { document.addEventListener('beforeunload', function () {
......
...@@ -133,8 +133,7 @@ var config = { ...@@ -133,8 +133,7 @@ var config = {
extensions: ['.js', '.es6', '.js.es6'], extensions: ['.js', '.es6', '.js.es6'],
alias: { alias: {
'~': path.join(ROOT_PATH, 'app/assets/javascripts'), '~': path.join(ROOT_PATH, 'app/assets/javascripts'),
'emoji-map$': path.join(ROOT_PATH, 'fixtures/emojis/digests.json'), 'emojis': path.join(ROOT_PATH, 'fixtures/emojis'),
'emoji-aliases$': path.join(ROOT_PATH, 'fixtures/emojis/aliases.json'),
'empty_states': path.join(ROOT_PATH, 'app/views/shared/empty_states'), 'empty_states': path.join(ROOT_PATH, 'app/views/shared/empty_states'),
'icons': path.join(ROOT_PATH, 'app/views/shared/icons'), 'icons': path.join(ROOT_PATH, 'app/views/shared/icons'),
'vendor': path.join(ROOT_PATH, 'vendor/assets/javascripts'), 'vendor': path.join(ROOT_PATH, 'vendor/assets/javascripts'),
......
/* eslint-disable space-before-function-paren, no-var, one-var, one-var-declaration-per-line, no-unused-expressions, comma-dangle, new-parens, no-unused-vars, quotes, jasmine/no-spec-dupes, prefer-template, max-len */ /* eslint-disable space-before-function-paren, no-var, one-var, one-var-declaration-per-line, no-unused-expressions, comma-dangle, new-parens, no-unused-vars, quotes, jasmine/no-spec-dupes, prefer-template, max-len */
require('es6-promise').polyfill(); import promisePolyfill from 'es6-promise';
import AwardsHandler from '~/awards_handler';
const AwardsHandler = require('~/awards_handler'); promisePolyfill.polyfill();
(function() { (function() {
var awardsHandler, lazyAssert, urlRoot, openAndWaitForEmojiMenu; var awardsHandler, lazyAssert, urlRoot, openAndWaitForEmojiMenu;
......
import '~/extensions/string';
import '~/extensions/array';
require('~/extensions/string'); import { glEmojiTag } from '~/behaviors/gl_emoji';
require('~/extensions/array'); import {
isEmojiUnicodeSupported,
const glEmoji = require('~/behaviors/gl_emoji'); isFlagEmoji,
isKeycapEmoji,
const glEmojiTag = glEmoji.glEmojiTag; isSkinToneComboEmoji,
const isEmojiUnicodeSupported = glEmoji.isEmojiUnicodeSupported; isHorceRacingSkinToneComboEmoji,
const isFlagEmoji = glEmoji.isFlagEmoji; isPersonZwjEmoji,
const isKeycapEmoji = glEmoji.isKeycapEmoji; } from '~/behaviors/gl_emoji/is_emoji_unicode_supported';
const isSkinToneComboEmoji = glEmoji.isSkinToneComboEmoji;
const isHorceRacingSkinToneComboEmoji = glEmoji.isHorceRacingSkinToneComboEmoji;
const isPersonZwjEmoji = glEmoji.isPersonZwjEmoji;
const emptySupportMap = { const emptySupportMap = {
personZwj: false, personZwj: false,
......
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