@google-translate-select/vue3
Version:
🚀 The package offer vue3 library for @google-translate-select!
1 lines • 19.3 kB
Source Map (JSON)
{"version":3,"file":"index5.mjs","sources":["../../src/google-translate-select.vue?vue&type=script&lang.ts"],"sourcesContent":["\nimport {\n computed,\n defineComponent,\n onBeforeUnmount,\n onMounted,\n ref,\n unref,\n} 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 {\n CreateScriptTagReturn,\n UseMutationObserverReturn,\n} from '@google-translate-select/utils'\n\nconst ns = createNamespace('select')\n\nexport default defineComponent({\n name: ns.n,\n inheritAttrs: false,\n props: googleTranslateProps,\n emits: ['select'],\n setup(props, { emit, attrs }) {\n const googleTranslateSelectEl = ref<HTMLElement | null>(null)\n const visible = ref<boolean>(false)\n const selectedLanguageCode = ref<string>('')\n const hoveredLanguageCode = ref<string>('')\n const setTimeoutId = ref<number>(-1)\n const jsonCallbackFnName = ref<string>('')\n const scriptTag = ref<CreateScriptTagReturn | null>(null)\n const googleTranslateOriginSelectObserve =\n ref<Partial<UseMutationObserverReturn> | null>({})\n const htmlAttrLangObserve = ref<Partial<UseMutationObserverReturn> | null>(\n {}\n )\n\n const getClass = computed(() => {\n return [ns.b(), GOOGLE_TRANSLATE_STOP_TRANSLATE_CLASSNAME, attrs.class]\n })\n\n const hasLanguages = computed(\n () => props.languages && props.languages.length\n )\n\n /** cache current select language */\n const selectedLanguageOption = computed(() => getSelectedLanguageOption())\n\n /**\n * get current select language\n */\n function getSelectedLanguageOption() {\n const selectedLanguageOption = props.languages.find(\n (language) => language.code === unref(selectedLanguageCode)\n )\n if (selectedLanguageOption) {\n return selectedLanguageOption\n } else {\n const defaultSelectedLanguageOption = props.languages.find(\n (language) => language.code === props.defaultLanguageCode\n )\n return defaultSelectedLanguageOption!\n }\n }\n\n /**\n * dynamic insert style for GoogleTranslate\n */\n function createStyle() {\n return createStyleTag(\n `body { top: 0 !important; } .skiptranslate { display: none !important; }`\n )\n }\n\n /**\n * create jsonp callback for GoogleTranslate, when GoogleTranslate loaded callback will be triggered\n */\n function createJsonCallback() {\n const pageLanguage = props.defaultPageLanguageCode\n const { jsonpCallbackName } = createGoogleTranslateJsonpCallback(\n {\n pageLanguage,\n },\n setSelectedLanguageCode\n )\n jsonCallbackFnName.value = jsonpCallbackName\n }\n\n /**\n * pass jsonp callback to GoogleTranslate\n */\n function createScript() {\n return createScriptTag(\n `${GOOGLE_TRANSLATE_JSSDK_URL}?cb=${unref(jsonCallbackFnName)}`\n )\n }\n\n /**\n * GoogleTranslate init\n */\n function createGoogleTranslate() {\n createStyle()\n createJsonCallback()\n scriptTag.value = createScript()\n }\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 function createGoogleTranslateOriginSelectObserve() {\n googleTranslateOriginSelectObserve.value = 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 selectedLanguageCode.value ===\n (record.addedNodes[0] as HTMLOptionElement).value\n ) {\n triggerTranslate(\n (record.addedNodes[0] as HTMLOptionElement).value\n )\n }\n }\n })\n },\n {\n childList: true,\n subtree: true,\n }\n )\n\n unref(googleTranslateOriginSelectObserve)!.start!()\n }\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 function createHtmlAttrLangObserve() {\n htmlAttrLangObserve.value = 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 handleTranslate(unref(selectedLanguageCode))\n }\n }\n })\n removeIcon()\n },\n {\n attributes: true,\n attributeOldValue: true,\n }\n )\n\n unref(htmlAttrLangObserve)!.start!()\n }\n\n /**\n * Simulates the change event of select to manually trigger GoogleTranslate\n *\n * @param select\n */\n function 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 createGoogleTranslateOriginSelectObserve()\n } else {\n googleTranslateOriginalSelectEl.value = selectValue\n GoogleTranslateFireEvent(googleTranslateOriginalSelectEl, 'change')\n unref(googleTranslateOriginSelectObserve) &&\n unref(googleTranslateOriginSelectObserve)!.stop!()\n }\n }\n\n /**\n * Determines whether the current select language exists in the props.languages\n *\n * @param code\n */\n function isLanguageCodeInLanguages(code: string) {\n // 如果 code 不存在于语言列表中默认使用英语\n const result = props.languages.find((language) => language.code === code)\n return result ? code : 'en'\n }\n\n /**\n * Get browser language\n */\n function getBrowserLanguage() {\n const browserLanguage =\n window.navigator.language || document.documentElement.lang || 'en'\n\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 /**\n * After triggering GoogleTranslate Translate, a cookie called 'googtrans' is generated, such as '/en/tr'\n */\n function getGoogleCookieLanguage() {\n const googleTranslateCookie = getCookie(GOOGLE_TRANSLATE_COOKIE_NAME)\n\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 /**\n * Use browser language、cookie 'googtrans' to get language code\n */\n function setSelectedLanguageCode() {\n const isFetchBrowserLanguageOpen = props.fetchBrowserLanguage\n const browserLanguage = isFetchBrowserLanguageOpen\n ? isLanguageCodeInLanguages(getBrowserLanguage())\n : ''\n const googleCookieLanguage = getGoogleCookieLanguage()\n const isGoogleCookieLanguageExist = !!googleCookieLanguage\n\n const handleDefaultLanguage = () => {\n if (props.defaultLanguageCode) {\n return props.defaultLanguageCode\n } else {\n return 'en'\n }\n }\n\n const handleBrowserLanguageInLanguages = () => {\n const isBrowserLanguageInLanguages = !!props.languages.find(\n (language) => language.code === browserLanguage\n )\n if (isBrowserLanguageInLanguages) {\n return browserLanguage\n } else {\n return handleDefaultLanguage()\n }\n }\n\n const handleGoogleCookieLanguageInLanguages = () => {\n const isGoogleCookieLanguageInLanguages = !!props.languages.find(\n (language) => language.code === googleCookieLanguage\n )\n if (isGoogleCookieLanguageInLanguages) {\n return googleCookieLanguage\n } else {\n return handleDefaultLanguage()\n }\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\n handleTranslate(selectedCode)\n }\n\n function handleTranslate(code: string) {\n triggerTranslate(code)\n selectedLanguageCode.value = code\n\n emit('select', getSelectedLanguageOption())\n }\n\n function clearSettimeout() {\n clearTimeout(unref(setTimeoutId))\n setTimeoutId.value = -1\n }\n\n function handleDropdownShowByHover(e: Event) {\n if (props.trigger === 'hover') {\n clearSettimeout()\n setTimeoutId.value = window.setTimeout(() => {\n const target = e.target as HTMLElement\n if (\n unref(googleTranslateSelectEl) &&\n unref(googleTranslateSelectEl)?.contains(target)\n ) {\n visible.value = true\n }\n }, 0)\n }\n }\n\n function handleDropdownHideByHover() {\n if (props.trigger === 'hover') {\n clearSettimeout()\n setTimeoutId.value = window.setTimeout(() => {\n visible.value = false\n }, props.animateTimeout)\n }\n }\n\n function handleDropdownShowOrHideByClick(e: Event) {\n const target = e.target as HTMLElement\n if (\n unref(googleTranslateSelectEl) &&\n unref(googleTranslateSelectEl)?.contains(target)\n ) {\n visible.value = true\n } else {\n visible.value = false\n }\n }\n\n onMounted(() => {\n createGoogleTranslate()\n createHtmlAttrLangObserve()\n\n if (props.trigger === 'click')\n document.addEventListener('click', handleDropdownShowOrHideByClick)\n })\n\n onBeforeUnmount(() => {\n if (unref(googleTranslateOriginSelectObserve)?.stop) {\n unref(googleTranslateOriginSelectObserve)!.stop!()\n }\n\n if (unref(htmlAttrLangObserve)?.stop) {\n unref(htmlAttrLangObserve)!.stop!()\n }\n\n if (unref(scriptTag)?.unload) {\n unref(scriptTag)!.unload!()\n }\n if (props.trigger === 'click')\n document.removeEventListener('click', handleDropdownShowOrHideByClick)\n })\n\n return {\n ns,\n googleTranslateSelectEl,\n visible,\n selectedLanguageCode,\n hoveredLanguageCode,\n getClass,\n hasLanguages,\n selectedLanguageOption,\n handleTranslate,\n handleDropdownShowByHover,\n handleDropdownHideByHover,\n GOOGLE_TRANSLATE_ORIGINAL_DOM_ID,\n }\n },\n})\n"],"names":["ns","createNamespace","_sfc_main","defineComponent","googleTranslateProps","props","emit","attrs","googleTranslateSelectEl","ref","visible","selectedLanguageCode","hoveredLanguageCode","setTimeoutId","jsonCallbackFnName","scriptTag","googleTranslateOriginSelectObserve","htmlAttrLangObserve","getClass","computed","GOOGLE_TRANSLATE_STOP_TRANSLATE_CLASSNAME","hasLanguages","selectedLanguageOption","getSelectedLanguageOption","language","unref","createStyle","createStyleTag","createJsonCallback","pageLanguage","jsonpCallbackName","createGoogleTranslateJsonpCallback","setSelectedLanguageCode","createScript","createScriptTag","GOOGLE_TRANSLATE_JSSDK_URL","createGoogleTranslate","createGoogleTranslateOriginSelectObserve","useMutationObserver","GOOGLE_TRANSLATE_ORIGINAL_SELECT_CLASSNAME","records","record","triggerTranslate","createHtmlAttrLangObserve","currentValue","oldValue","handleTranslate","removeIcon","select","selectValue","isString","googleTranslateOriginalSelectEl","GoogleTranslateFireEvent","isLanguageCodeInLanguages","code","getBrowserLanguage","browserLanguage","l","getGoogleCookieLanguage","googleTranslateCookie","getCookie","GOOGLE_TRANSLATE_COOKIE_NAME","googleTranslateCookieResult","isFetchBrowserLanguageOpen","googleCookieLanguage","isGoogleCookieLanguageExist","handleDefaultLanguage","handleBrowserLanguageInLanguages","handleGoogleCookieLanguageInLanguages","selectedCode","clearSettimeout","handleDropdownShowByHover","target","_a","handleDropdownHideByHover","handleDropdownShowOrHideByClick","onMounted","onBeforeUnmount","_b","_c","GOOGLE_TRANSLATE_ORIGINAL_DOM_ID"],"mappings":"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"}