@google-translate-select/vue2
Version:
🚀 The package offer vue2 library for @google-translate-select!
1 lines • 21.1 kB
Source Map (JSON)
{"version":3,"file":"index4.mjs","sources":["../../src/google-translate-select.vue"],"sourcesContent":["<template>\n <div\n v-if=\"hasLanguages\"\n ref=\"googleTranslateSelectEl\"\n :class=\"getClass\"\n @mouseenter=\"handleDropdownShowByHover\"\n @mouseleave=\"handleDropdownHideByHover\"\n >\n <div :class=\"[ns.b('dropdown')]\">\n <div :class=\"[ns.be('dropdown', 'activator')]\">\n <div :class=\"[ns.b('language')]\">\n <div :class=\"[ns.b('flag')]\">\n <div :class=\"[ns.be('flag', selectedLanguageOption.code)]\" />\n </div>\n {{ selectedLanguageOption.name }}\n </div>\n <div\n v-if=\"showArrow\"\n :class=\"[ns.b('icon'), visible ? ns.is('reverse') : '']\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1024 1024\">\n <path\n fill=\"currentColor\"\n d=\"M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z\"\n />\n </svg>\n </div>\n </div>\n <transition name=\"google-translate-select-zoom-in-top\">\n <div\n v-show=\"visible\"\n :class=\"[ns.be('dropdown', 'menu'), dropdownClassName]\"\n :style=\"dropdownStyle\"\n >\n <ul>\n <li\n v-for=\"language in languages\"\n :key=\"`language-${language.code}`\"\n :class=\"[\n ns.be('dropdown', 'menu__item'),\n hoveredLanguageCode === language.code ? 'hover' : '',\n selectedLanguageCode === language.code ? 'selected' : '',\n ]\"\n :data-language-code=\"language.code\"\n @click=\"() => handleTranslate(language.code)\"\n @mouseenter.stop=\"() => (hoveredLanguageCode = language.code)\"\n @mouseleave.stop=\"() => (hoveredLanguageCode = '')\"\n >\n <div :class=\"[ns.b('language')]\">\n <div :class=\"[ns.b('flag')]\">\n <div :class=\"[ns.be('flag', language.code)]\" />\n </div>\n {{ language.name }}\n </div>\n </li>\n </ul>\n </div>\n </transition>\n </div>\n <div :id=\"GOOGLE_TRANSLATE_ORIGINAL_DOM_ID\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport Vue from 'vue'\nimport {\n GoogleTranslateFireEvent,\n createGoogleTranslateJsonpCallback,\n createNamespace,\n createScriptTag,\n createStyleTag,\n getCookie,\n isString,\n removeIcon,\n useMutationObserver,\n} from '@google-translate-select/utils'\nimport {\n GOOGLE_TRANSLATE_COOKIE_NAME,\n GOOGLE_TRANSLATE_JSSDK_URL,\n GOOGLE_TRANSLATE_ORIGINAL_DOM_ID,\n GOOGLE_TRANSLATE_ORIGINAL_SELECT_CLASSNAME,\n GOOGLE_TRANSLATE_STOP_TRANSLATE_CLASSNAME,\n} from '@google-translate-select/constants'\nimport '@google-translate-select/theme-chalk/src/index.scss'\nimport { googleTranslateProps } from './types'\nimport type { UseMutationObserverReturn } from '@google-translate-select/utils'\nimport type { Language as ILanguage } from '@google-translate-select/constants'\n\ninterface Data {\n googleTranslateSelectEl: HTMLElement | null\n visible: boolean\n selectedLanguageCode: string\n hoveredLanguageCode: string\n setTimeoutId: number\n jsonCallbackFnName: string\n googleTranslateOriginSelectObserve: Partial<UseMutationObserverReturn> | null\n htmlAttrLangObserve: Partial<UseMutationObserverReturn> | null\n ns: typeof ns\n GOOGLE_TRANSLATE_ORIGINAL_DOM_ID: string\n}\n\nconst ns = createNamespace('select')\n\nexport default Vue.extend<\n Data,\n Record<string, any>,\n Record<string, any>,\n Record<string, any>\n>({\n name: ns.n,\n inheritAttrs: false,\n props: googleTranslateProps,\n data() {\n return {\n googleTranslateSelectEl: null,\n visible: false,\n selectedLanguageCode: '',\n hoveredLanguageCode: '',\n setTimeoutId: -1,\n jsonCallbackFnName: '',\n scriptTag: null,\n googleTranslateOriginSelectObserve: {},\n htmlAttrLangObserve: {},\n ns,\n GOOGLE_TRANSLATE_ORIGINAL_DOM_ID,\n }\n },\n computed: {\n getClass() {\n return [\n ns.b(),\n GOOGLE_TRANSLATE_STOP_TRANSLATE_CLASSNAME,\n this.$attrs.class,\n ]\n },\n hasLanguages() {\n return this.languages && this.languages.length\n },\n selectedLanguageOption() {\n return this.getSelectedLanguageOption()\n },\n },\n mounted() {\n this.googleTranslateSelectEl = this.$refs[\n 'googleTranslateSelectEl'\n ] as HTMLElement\n this.createGoogleTranslate()\n this.createHtmlAttrLangObserve()\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const _this = this\n if (this.trigger === 'click')\n document.addEventListener('click', _this.handleDropdownShowOrHideByClick)\n },\n // @ts-ignore\n beforeUnmount() {\n if (this.googleTranslateOriginSelectObserve?.stop) {\n this.googleTranslateOriginSelectObserve!.stop!()\n }\n\n if (this.htmlAttrLangObserve?.stop) {\n this.htmlAttrLangObserve!.stop!()\n }\n\n if (this.scriptTag?.unload) {\n this.scriptTag.unload()\n }\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const _this = this\n if (this.trigger === 'click')\n document.removeEventListener(\n 'click',\n _this.handleDropdownShowOrHideByClick\n )\n },\n methods: {\n /**\n * get current select language\n */\n getSelectedLanguageOption() {\n const selectedLanguageOption = this.languages.find(\n (language: ILanguage) => language.code === this.selectedLanguageCode\n )\n if (selectedLanguageOption) {\n return selectedLanguageOption\n } else {\n const defaultSelectedLanguageOption = this.languages.find(\n (language: ILanguage) => language.code === this.defaultLanguageCode\n )\n return defaultSelectedLanguageOption\n }\n },\n /**\n * dynamic insert style for GoogleTranslate\n */\n createStyle() {\n return createStyleTag(\n `body { top: 0 !important; } .skiptranslate { display: none !important; }`\n )\n },\n /**\n * create jsonp callback for GoogleTranslate, when GoogleTranslate loaded callback will be triggered\n */\n createJsonCallback() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const _this = this\n const pageLanguage = this.defaultPageLanguageCode\n const { jsonpCallbackName } = createGoogleTranslateJsonpCallback(\n {\n pageLanguage,\n },\n _this.setSelectedLanguageCode\n )\n _this.jsonCallbackFnName = jsonpCallbackName\n },\n /**\n * pass jsonp callback to GoogleTranslate\n */\n createScript() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const _this = this\n return createScriptTag(\n `${GOOGLE_TRANSLATE_JSSDK_URL}?cb=${_this.jsonCallbackFnName}`\n )\n },\n /**\n * GoogleTranslate init\n */\n createGoogleTranslate() {\n this.createStyle()\n this.createJsonCallback()\n this.scriptTag = this.createScript()\n },\n /**\n * Triggers translations by observe changes in the DOM of GoogleTranslate's original select.\n *\n * Because the callback function passed in JSONP can only be called after the GOOGLE_TRANSLATE_JSSDK_URL resource is loaded,\n * and the GOOGLE_TRANSLATE_JSSDK_URL will import the resource that generated the original DOM, observe is used here🤓\n */\n createGoogleTranslateOriginSelectObserve() {\n this.googleTranslateOriginSelectObserve = useMutationObserver(\n document.querySelector(GOOGLE_TRANSLATE_ORIGINAL_SELECT_CLASSNAME)!,\n (records) => {\n records.forEach((record) => {\n if (\n record.addedNodes[0] &&\n (record.addedNodes[0] as HTMLOptionElement).value\n ) {\n if (\n this.selectedLanguageCode ===\n (record.addedNodes[0] as HTMLOptionElement).value\n ) {\n this.triggerTranslate(\n (record.addedNodes[0] as HTMLOptionElement).value\n )\n }\n }\n })\n removeIcon()\n },\n {\n childList: true,\n subtree: true,\n }\n )\n this.googleTranslateOriginSelectObserve!.start!()\n },\n /**\n * When GoogleTranslate's original executes, the attribute 'lang' of HTML will have an auto state,\n * in order to overwrite the auto state, we call the 'handleTranslate' again\n */\n createHtmlAttrLangObserve() {\n this.htmlAttrLangObserve = useMutationObserver(\n document.querySelector('html')!,\n (records) => {\n records.forEach((record) => {\n if (record.attributeName === 'lang') {\n const currentValue = (record.target as HTMLElement).getAttribute(\n 'lang'\n )\n const oldValue = record.oldValue\n // 修复auto的中间状态,如果页面当中内容较多,gt会有一个翻译的过程,就会抛出lang = auto,此时我们手动再触发一次翻译覆盖掉上次未进行完的翻译操作\n if (\n oldValue !== currentValue &&\n oldValue &&\n oldValue !== 'auto' &&\n currentValue === 'auto'\n ) {\n this.handleTranslate(this.selectedLanguageCode)\n }\n }\n })\n },\n {\n attributes: true,\n attributeOldValue: true,\n }\n )\n\n this.htmlAttrLangObserve!.start!()\n },\n /**\n * Simulates the change event of select to manually trigger GoogleTranslate\n *\n * @param select\n */\n triggerTranslate(select: HTMLSelectElement | string) {\n if (!select) {\n return\n }\n const selectValue = isString(select) ? select : select.value ?? ''\n const googleTranslateOriginalSelectEl = document.querySelector(\n GOOGLE_TRANSLATE_ORIGINAL_SELECT_CLASSNAME\n ) as HTMLSelectElement | null\n const googleTranslateSelectEl = document.querySelector(`.${ns.b()}`)\n\n if (\n !googleTranslateSelectEl ||\n !googleTranslateOriginalSelectEl ||\n googleTranslateSelectEl.innerHTML.length === 0 ||\n googleTranslateOriginalSelectEl.options.length === 0\n ) {\n this.createGoogleTranslateOriginSelectObserve()\n } else {\n googleTranslateOriginalSelectEl.value = selectValue\n GoogleTranslateFireEvent(googleTranslateOriginalSelectEl, 'change')\n this.googleTranslateOriginSelectObserve &&\n this.googleTranslateOriginSelectObserve!.stop!()\n }\n },\n /**\n * Determines whether the current select language exists in the props.languages\n *\n * @param code\n */\n isLanguageCodeInLanguages(code: string) {\n // 如果 code 不存在于语言列表中默认使用英语\n const result = this.languages.find(\n (language: ILanguage) => language.code === code\n )\n return result ? code : 'en'\n },\n /**\n * Get browser language\n */\n getBrowserLanguage() {\n const browserLanguage =\n window.navigator.language || document.documentElement.lang || 'en'\n const filterLanguages = ['zh-CN', 'zh-TW']\n if (filterLanguages.every((l) => l !== browserLanguage)) {\n if (browserLanguage.indexOf('-') > -1) {\n return browserLanguage.split('-')[0]\n }\n }\n return browserLanguage\n },\n /**\n * After triggering GoogleTranslate Translate, a cookie called 'googtrans' is generated, such as '/en/tr'\n */\n getGoogleCookieLanguage() {\n const googleTranslateCookie = getCookie(GOOGLE_TRANSLATE_COOKIE_NAME)\n if (googleTranslateCookie) {\n const googleTranslateCookieResult = googleTranslateCookie.split('/')\n return googleTranslateCookieResult[2]\n ? googleTranslateCookieResult[2]\n : 'en'\n } else {\n return ''\n }\n },\n /**\n * Use browser language、cookie 'googtrans' to get language code\n */\n setSelectedLanguageCode() {\n const isFetchBrowserLanguageOpen = this.fetchBrowserLanguage\n const browserLanguage = isFetchBrowserLanguageOpen\n ? this.isLanguageCodeInLanguages(this.getBrowserLanguage())\n : ''\n const googleCookieLanguage = this.getGoogleCookieLanguage()\n const isGoogleCookieLanguageExist = !!googleCookieLanguage\n const handleDefaultLanguage = () => {\n if (this.defaultLanguageCode) {\n return this.defaultLanguageCode\n } else {\n return 'en'\n }\n }\n const handleBrowserLanguageInLanguages = () => {\n const isBrowserLanguageInLanguages = !!this.languages.find(\n (language: ILanguage) => language.code === browserLanguage\n )\n if (isBrowserLanguageInLanguages) {\n return browserLanguage\n } else {\n return handleDefaultLanguage()\n }\n }\n const handleGoogleCookieLanguageInLanguages = () => {\n const isGoogleCookieLanguageInLanguages = !!this.languages.find(\n (language: ILanguage) => language.code === googleCookieLanguage\n )\n if (isGoogleCookieLanguageInLanguages) {\n return googleCookieLanguage\n } else {\n return handleDefaultLanguage()\n }\n }\n let selectedCode = handleDefaultLanguage()\n if (!isGoogleCookieLanguageExist) {\n // 首次\n if (isFetchBrowserLanguageOpen)\n selectedCode = handleBrowserLanguageInLanguages()\n } else {\n // 非首次\n // 越过浏览器语言判断直接去列表中匹配\n selectedCode = handleGoogleCookieLanguageInLanguages()\n }\n this.handleTranslate(selectedCode)\n },\n handleTranslate(code: string) {\n this.triggerTranslate(code)\n this.selectedLanguageCode = code\n this.$emit('select', this.getSelectedLanguageOption())\n },\n clearSettimeout() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const _this = this\n window.clearTimeout(_this.setTimeoutId)\n this.setTimeoutId = -1\n },\n handleDropdownShowByHover(e: Event) {\n if (this.trigger === 'hover') {\n this.clearSettimeout()\n this.setTimeoutId = window.setTimeout(() => {\n const target = e.target as HTMLElement\n if (\n this.googleTranslateSelectEl &&\n this.googleTranslateSelectEl.contains(target)\n ) {\n this.visible = true\n }\n }, 0)\n }\n },\n handleDropdownHideByHover() {\n if (this.trigger === 'hover') {\n this.clearSettimeout()\n this.setTimeoutId = window.setTimeout(() => {\n this.visible = false\n }, this.animateTimeout)\n }\n },\n handleDropdownShowOrHideByClick(e: Event) {\n const target = e.target as HTMLElement\n if (\n this.googleTranslateSelectEl &&\n this.googleTranslateSelectEl.contains(target)\n ) {\n this.visible = true\n } else {\n this.visible = false\n }\n },\n },\n})\n</script>\n"],"names":["ns","createNamespace","__vue2_script","Vue","googleTranslateProps","GOOGLE_TRANSLATE_ORIGINAL_DOM_ID","GOOGLE_TRANSLATE_STOP_TRANSLATE_CLASSNAME","_this","_a","_b","_c","selectedLanguageOption","language","createStyleTag","pageLanguage","jsonpCallbackName","createGoogleTranslateJsonpCallback","createScriptTag","GOOGLE_TRANSLATE_JSSDK_URL","useMutationObserver","GOOGLE_TRANSLATE_ORIGINAL_SELECT_CLASSNAME","records","record","removeIcon","currentValue","oldValue","select","selectValue","isString","googleTranslateOriginalSelectEl","googleTranslateSelectEl","GoogleTranslateFireEvent","code","browserLanguage","l","googleTranslateCookie","getCookie","GOOGLE_TRANSLATE_COOKIE_NAME","googleTranslateCookieResult","isFetchBrowserLanguageOpen","googleCookieLanguage","isGoogleCookieLanguageExist","handleDefaultLanguage","handleBrowserLanguageInLanguages","handleGoogleCookieLanguageInLanguages","selectedCode","target"],"mappings":"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"}