@google-translate-select/vue2
Version:
🚀 The package offer vue2 library for @google-translate-select!
3 lines (2 loc) • 4.86 kB
JavaScript
"use strict";const d=require("vue"),n=require("./index8.cjs"),o=require("./index7.cjs");require("./index9.cjs");const L=require("./index3.cjs"),i=n.createNamespace("select"),T=d.extend({name:i.n,inheritAttrs:!1,props:L.googleTranslateProps,data(){return{googleTranslateSelectEl:null,visible:!1,selectedLanguageCode:"",hoveredLanguageCode:"",setTimeoutId:-1,jsonCallbackFnName:"",scriptTag:null,googleTranslateOriginSelectObserve:{},htmlAttrLangObserve:{},ns:i,GOOGLE_TRANSLATE_ORIGINAL_DOM_ID:o.GOOGLE_TRANSLATE_ORIGINAL_DOM_ID}},computed:{getClass(){return[i.b(),o.GOOGLE_TRANSLATE_STOP_TRANSLATE_CLASSNAME,this.$attrs.class]},hasLanguages(){return this.languages&&this.languages.length},selectedLanguageOption(){return this.getSelectedLanguageOption()}},mounted(){this.googleTranslateSelectEl=this.$refs.googleTranslateSelectEl,this.createGoogleTranslate(),this.createHtmlAttrLangObserve();const e=this;this.trigger==="click"&&document.addEventListener("click",e.handleDropdownShowOrHideByClick)},beforeUnmount(){var t,a,s;(t=this.googleTranslateOriginSelectObserve)!=null&&t.stop&&this.googleTranslateOriginSelectObserve.stop(),(a=this.htmlAttrLangObserve)!=null&&a.stop&&this.htmlAttrLangObserve.stop(),(s=this.scriptTag)!=null&&s.unload&&this.scriptTag.unload();const e=this;this.trigger==="click"&&document.removeEventListener("click",e.handleDropdownShowOrHideByClick)},methods:{getSelectedLanguageOption(){const e=this.languages.find(t=>t.code===this.selectedLanguageCode);return e||this.languages.find(a=>a.code===this.defaultLanguageCode)},createStyle(){return n.createStyleTag("body { top: 0 !important; } .skiptranslate { display: none !important; }")},createJsonCallback(){const e=this,t=this.defaultPageLanguageCode,{jsonpCallbackName:a}=n.createGoogleTranslateJsonpCallback({pageLanguage:t},e.setSelectedLanguageCode);e.jsonCallbackFnName=a},createScript(){const e=this;return n.createScriptTag(`${o.GOOGLE_TRANSLATE_JSSDK_URL}?cb=${e.jsonCallbackFnName}`)},createGoogleTranslate(){this.createStyle(),this.createJsonCallback(),this.scriptTag=this.createScript()},createGoogleTranslateOriginSelectObserve(){this.googleTranslateOriginSelectObserve=n.useMutationObserver(document.querySelector(o.GOOGLE_TRANSLATE_ORIGINAL_SELECT_CLASSNAME),e=>{e.forEach(t=>{t.addedNodes[0]&&t.addedNodes[0].value&&this.selectedLanguageCode===t.addedNodes[0].value&&this.triggerTranslate(t.addedNodes[0].value)}),n.removeIcon()},{childList:!0,subtree:!0}),this.googleTranslateOriginSelectObserve.start()},createHtmlAttrLangObserve(){this.htmlAttrLangObserve=n.useMutationObserver(document.querySelector("html"),e=>{e.forEach(t=>{if(t.attributeName==="lang"){const a=t.target.getAttribute("lang"),s=t.oldValue;s!==a&&s&&s!=="auto"&&a==="auto"&&this.handleTranslate(this.selectedLanguageCode)}})},{attributes:!0,attributeOldValue:!0}),this.htmlAttrLangObserve.start()},triggerTranslate(e){if(!e)return;const t=n.isString(e)?e:e.value??"",a=document.querySelector(o.GOOGLE_TRANSLATE_ORIGINAL_SELECT_CLASSNAME),s=document.querySelector(`.${i.b()}`);!s||!a||s.innerHTML.length===0||a.options.length===0?this.createGoogleTranslateOriginSelectObserve():(a.value=t,n.GoogleTranslateFireEvent(a,"change"),this.googleTranslateOriginSelectObserve&&this.googleTranslateOriginSelectObserve.stop())},isLanguageCodeInLanguages(e){return this.languages.find(a=>a.code===e)?e:"en"},getBrowserLanguage(){const e=window.navigator.language||document.documentElement.lang||"en";return["zh-CN","zh-TW"].every(a=>a!==e)&&e.indexOf("-")>-1?e.split("-")[0]:e},getGoogleCookieLanguage(){const e=n.getCookie(o.GOOGLE_TRANSLATE_COOKIE_NAME);if(e){const t=e.split("/");return t[2]?t[2]:"en"}else return""},setSelectedLanguageCode(){const e=this.fetchBrowserLanguage,t=e?this.isLanguageCodeInLanguages(this.getBrowserLanguage()):"",a=this.getGoogleCookieLanguage(),s=!!a,r=()=>this.defaultLanguageCode?this.defaultLanguageCode:"en",u=()=>this.languages.find(l=>l.code===t)?t:r(),c=()=>this.languages.find(l=>l.code===a)?a:r();let g=r();s?g=c():e&&(g=u()),this.handleTranslate(g)},handleTranslate(e){this.triggerTranslate(e),this.selectedLanguageCode=e,this.$emit("select",this.getSelectedLanguageOption())},clearSettimeout(){const e=this;window.clearTimeout(e.setTimeoutId),this.setTimeoutId=-1},handleDropdownShowByHover(e){this.trigger==="hover"&&(this.clearSettimeout(),this.setTimeoutId=window.setTimeout(()=>{const t=e.target;this.googleTranslateSelectEl&&this.googleTranslateSelectEl.contains(t)&&(this.visible=!0)},0))},handleDropdownHideByHover(){this.trigger==="hover"&&(this.clearSettimeout(),this.setTimeoutId=window.setTimeout(()=>{this.visible=!1},this.animateTimeout))},handleDropdownShowOrHideByClick(e){const t=e.target;this.googleTranslateSelectEl&&this.googleTranslateSelectEl.contains(t)?this.visible=!0:this.visible=!1}}});module.exports=T;
//# sourceMappingURL=index4.cjs.map