{"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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"}