PageSourceSearch

https://media.bohle.com/theme/357306dd70f308cf3c819fcaee950100/js/…/text-translator.js?1790694090

js bohle.com collected 2026-10-10 01:01:47 UTC 11,954 bytes, 9 lines download raw bytes

1var __typeError=msg=>{throw TypeError(msg)};var __privateAdd=(obj,member,value)=>member.has(obj)?__typeError("Cannot add the same private member more than once"):member instanceof WeakSet?member.add(obj):member.set(obj,value);(()=>{"use strict";var _e;var e={156:e2=>{var t2=function(e3){var t3;return!!e3&&typeof e3=="object"&&(t3=Object.prototype.toString.call(e3))!=="[object RegExp]"&&t3!=="[object Date]"&&e3.$$typeof!==r2},r2=typeof Symbol=="function"&&Symbol.for?Symbol.for("react.element"):60103;function i2(e3,t3){return t3.clone!==!1&&t3.isMergeableObject(e3)?o2(Array.isArray(e3)?[]:{},e3,t3):e3}function n2(e3,t3,r3){return e3.concat(t3).map(function(e4){return i2(e4,r3)})}function s2(e3){return Object.keys(e3).concat(Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e3).filter(function(t3){return Object.propertyIsEnumerable.call(e3,t3)}):[])}function a2(e3,t3){try{return t3 in e3}catch(e4){return!1}}function o2(e3,r3,l2){(l2=l2||{}).arrayMerge=l2.arrayMerge||n2,l2.isMergeableObject=l2.isMergeableObject||t2,l2.cloneUnlessOtherwiseSpecified=i2;var c2,u2,d2=Array.isArray(r3);return d2!==Array.isArray(e3)?i2(r3,l2):d2?l2.arrayMerge(e3,r3,l2):(u2={},(c2=l2).isMergeableObject(e3)&&s2(e3).forEach(function(t3){u2[t3]=i2(e3[t3],c2)}),s2(r3).forEach(function(t3){(!a2(e3,t3)||Object.hasOwnProperty.call(e3,t3)&&Object.propertyIsEnumerable.call(e3,t3))&&(a2(e3,t3)&&c2.isMergeableObject(r3[t3])?u2[t3]=(function(e4,t4){if(!t4.customMerge)return o2;var r4=t4.customMerge(e4);return typeof r4=="function"?r4:o2})(t3,c2)(e3[t3],r3[t3],c2):u2[t3]=i2(r3[t3],c2))}),u2)}o2.all=function(e3,t3){if(!Array.isArray(e3))throw Error("first argument should be an array");return e3.reduce(function(e4,r3){return o2(e4,r3,t3)},{})},e2.exports=o2}},t={};function r(i2){var n2=t[i2];if(n2!==void 0)return n2.exports;var s2=t[i2]={exports:{}};return e[i2](s2,s2.exports,r),s2.exports}r.n=e2=>{var t2=e2&&e2.__esModule?()=>e2.default:()=>e2;return r.d(t2,{a:t2}),t2},r.d=(e2,t2)=>{for(var i2 in t2)r.o(t2,i2)&&!r.o(e2,i2)&&Object.defineProperty(e2,i2,{enumerable:!0,get:t2[i2]})},r.o=(e2,t2)=>Object.prototype.hasOwnProperty.call(e2,t2);var i=r(156),n=r.n(i);class s{static ucFirst(e2){return e2.charAt(0).toUpperCase()+e2.slice(1)}static lcFirst(e2){return e2.charAt(0).toLowerCase()+e2.slice(1)}static toDashCase(e2){return e2.replace(/([A-Z])/g,"-$1").replace(/^-/,"").toLowerCase()}static toLowerCamelCase(e2,t2){let r2=s.toUpperCamelCase(e2,t2);return s.lcFirst(r2)}static toUpperCamelCase(e2,t2){return t2?e2.split(t2).map(e3=>s.ucFirst(e3.toLowerCase())).join(""):s.ucFirst(e2.toLowerCase())}static parsePrimitive(e2){try{return/^\d+(.|,)\d+$/.test(e2)&&(e2=e2.replace(",",".")),JSON.parse(e2)}catch(t2){return e2.toString()}}}class a{constructor(e2=document){this._el=e2,e2.$emitter=this,this._listeners=[]}publish(e2){let t2=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r2=arguments.length>2&&arguments[2]!==void 0&&arguments[2],i2=new CustomEvent(e2,{detail:t2,cancelable:r2});return this.el.dispatchEvent(i2),i2}subscribe(e2,t2){let r2=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},i2=this,n2=e2.split("."),s2=r2.scope?t2.bind(r2.scope):t2;if(r2.once&&r2.once===!0){let t3=s2;s2=function(r3){i2.unsubscribe(e2),t3(r3)}}return this.el.addEventListener(n2[0],s2),this.listeners.push({splitEventName:n2,opts:r2,cb:s2}),!0}unsubscribe(e2){let t2=e2.split(".");return this.listeners=this.listeners.reduce((e3,r2)=>([...r2.splitEventName].sort().toString()===t2.sort().toString()?this.el.removeEventListener(r2.splitEventName[0],r2.cb):e3.push(r2),e3),[]),!0}reset(){return this.listeners.forEach(e2=>{this.el.removeEventListener(e2.splitEventName[0],e2.cb)}),this.listeners=[],!0}get el(){return this._el}set el(e2){this._el=e2}get listeners(){return this._listeners}set listeners(e2){this._listeners=e2}}class o{constructor(e2,t2={},r2=!1){if(!(e2 instanceof Node)){console.warn(`There is no valid element given while trying to create a plugin instance for "${r2}".`);return}this.el=e2,this.$emitter=new a(this.el),this._pluginName=this._getPluginName(r2),this.options=this._mergeOptions(t2),this._initialized=!1,this._registerInstance(),this._init()}init(){console.warn(`The "init" method for the plugin "${this._pluginName}" is not defined. The plugin will not be initialized.`)}update(){}
1_init(){this._initialized||(this.init(),this._initialized=!0)}_update(){this._initialized&&this.update()}_mergeOptions(e2){let t2=[this.constructor.options,this.options,e2];return t2.push(this._getConfigFromDataAttribute()),t2.push(this._getOptionsFromDataAttribute()),n().all(t2.filter(e3=>e3 instanceof Object&&!(e3 instanceof Array)).map(e3=>e3||{}))}_getConfigFromDataAttribute(){let e2={};if(typeof this.el.getAttribute!="function")return e2;let t2=s.toDashCase(this._pluginName),r2=this.el.getAttribute(`data-${t2}-config`);return r2?window.PluginConfigManager.get(this._pluginName,r2):e2}_getOptionsFromDataAttribute(){let e2={};if(typeof this.el.getAttribute!="function")return e2;let t2=s.toDashCase(this._pluginName),r2=this.el.getAttribute(`data-${t2}-options`);if(r2)try{return JSON.parse(r2)}catch(e3){console.error(`The data attribute "data-${t2}-options" could not be parsed to json: ${e3.message}`)}return e2}_registerInstance(){window.PluginManager.getPluginInstancesFromElement(this.el).set(this._pluginName,this),window.PluginManager.getPlugin(this._pluginName,!1).get("instances").push(this)}_getPluginName(e2){return e2||(e2=this.constructor.name),e2}}class l{constructor(){this._request=null,this._errorHandlingInternal=!1}get(e2,t2){let r2=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"application/json",i2=this._createPreparedRequest("GET",e2,r2);return this._sendRequest(i2,null,t2)}post(e2,t2,r2){let i2=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"application/json";i2=this._getContentType(t2,i2);let n2=this._createPreparedRequest("POST",e2,i2);return this._sendRequest(n2,t2,r2)}delete(e2,t2,r2){let i2=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"application/json";i2=this._getContentType(t2,i2);let n2=this._createPreparedRequest("DELETE",e2,i2);return this._sendRequest(n2,t2,r2)}patch(e2,t2,r2){let i2=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"application/json";i2=this._getContentType(t2,i2);let n2=this._createPreparedRequest("PATCH",e2,i2);return this._sendRequest(n2,t2,r2)}
1abort(){if(this._request)return this._request.abort()}setErrorHandlingInternal(e2){this._errorHandlingInternal=e2}_registerOnLoaded(e2,t2){t2&&(this._errorHandlingInternal===!0?(e2.addEventListener("load",()=>{t2(e2.responseText,e2)}),e2.addEventListener("abort",()=>{console.warn(`the request to ${e2.responseURL} was aborted`)}),e2.addEventListener("error",()=>{console.warn(`the request to ${e2.responseURL} failed with status ${e2.status}`)}),e2.addEventListener("timeout",()=>{console.warn(`the request to ${e2.responseURL} timed out`)})):e2.addEventListener("loadend",()=>{t2(e2.responseText,e2)}))}_sendRequest(e2,t2,r2){return this._registerOnLoaded(e2,r2),e2.send(t2),e2}_getContentType(e2,t2){return e2 instanceof FormData&&(t2=!1),t2}_createPreparedRequest(e2,t2,r2){return this._request=new XMLHttpRequest,this._request.open(e2,t2),this._request.setRequestHeader("X-Requested-With","XMLHttpRequest"),r2&&this._request.setRequestHeader("Content-type",r2),this._request}}let c="loader",u={BEFORE:"before",INNER:"inner"};class d{constructor(e2,t2=u.BEFORE){this.parent=e2 instanceof Element?e2:document.body.querySelector(e2),this.position=t2}create(){if(!this.exists()){if(this.position===u.INNER){this._previousHTML=this.parent.innerHTML,this.parent.innerHTML=d.getTemplate();return}this.parent.insertAdjacentHTML(this._getPosition(),d.getTemplate())}}remove(){if(this.position===u.INNER){this.parent.innerHTML=this._previousHTML;return}this.parent.querySelectorAll(`.${c}`).forEach(e2=>e2.remove())}exists(){return this.parent.querySelectorAll(`.${c}`).length>0}_getPosition(){return this.position===u.BEFORE?"afterbegin":"beforeend"}static getTemplate(){return`<div class="${c}" role="status">
2                    <span class="visually-hidden">Loading...</span>
3                </div>`}static SELECTOR_CLASS(){return c}}let p="element-loader-backdrop";class h extends d{static create(e2){e2.classList.add("has-element-loader"),h.exists(e2)||(h.appendLoader(e2),setTimeout(()=>{let t2=e2.querySelector(`.${p}`);t2&&t2.classList.add("element-loader-backdrop-open")},1))}static remove(e2){e2.classList.remove("has-element-loader");let t2=e2.querySelector(`.${p}`);t2&&t2.remove()}static exists(e2){return e2.querySelectorAll(`.${p}`).length>0}static getTemplate(){return`
4        <div class="${p}">
5            <div class="loader" role="status">
6                <span class="visually-hidden">Loading...</span>
7            </div>
8        </div>
9        `}static appendLoader(e2){e2.insertAdjacentHTML("beforeend",h.getTemplate())}}const _g=class _g extends o{init(){this.reviewTranslateOptions=JSON.parse(this.el.dataset.reviewTranslator),this.alertWrapper=document.querySelector(_g.options.alertWrapperSelector),document.body.addEventListener("click",this._onClickButton.bind(this))}_onClickButton(e2){var _a,_b,_c;let t2=e2.target;if(t2.tagName!=="BUTTON"||((_a=t2.dataset)==null?void 0:_a.reviewId)===void 0)return;let r2=t2.closest(_g.options.reviewItemSelector),i2=t2.dataset.reviewId,n2=this.reviews.find(e3=>e3.id===i2);n2===void 0&&(this.reviews.push({id:i2,originalTitle:r2.querySelector(_g.options.reviewTitleSelector).innerHTML,originalContent:r2.querySelector(_g.options.reviewContentSelector).innerHTML,originalComment:(_c=(_b=r2.querySelector(_g.options.reviewCommentSelector))==null?void 0:_b.innerHTML)!=null?_c:null,isTranslated:!1}),n2=this.reviews.find(e3=>e3.id===i2)),this._translate(n2,r2)}_translate(e2,t2){if(e2!=null&&e2.translatedTitle||e2!=null&&e2.translatedContent){this._updateText(e2);return}h.create(t2),new l().post(_g.options.reviewTranslateUrl,JSON.stringify({reviewId:e2.id}),(e3,r2)=>{r2.status==200?(this.alertWrapper.hidden=!0,this._processTranslation(e3)):this.alertWrapper.hidden=!1,h.remove(t2)})}_processTranslation(e2){let t2=JSON.parse(e2),r2=this.reviews.find(e3=>e3.id===t2.id);r2.translatedTitle=t2.title,r2.translatedContent=t2.content,r2.translatedComment=t2.comment,r2.translatedLanguageName=t2.language_name,this._updateText(r2)}_updateText(e2){let t2=document.querySelector(`[data-review-id="${e2.id}"]`),r2=t2.closest(_g.options.reviewItemSelector),i2=e2.isTranslated?e2.originalTitle:e2.translatedTitle,n2=e2.isTranslated?e2.originalContent:e2.translatedContent,s2=e2.isTranslated?e2.originalComment:" "+this.reviewTranslateOptions.snippets.ourFeedback+e2.translatedComment,a2=e2.isTranslated?this.reviewTranslateOptions.snippets.translateTo:this.reviewTranslateOptions.snippets.revertToOriginal,o2=e2.isTranslated?"":this.reviewTranslateOptions.snippets.translatedFrom.replace("%language%",e2.translatedLanguageName);r2.querySelector(_g.options.reviewTitleSelector).innerHTML=i2,r2.querySelector(_g.options.reviewContentSelector).innerHTML=n2,r2.querySelector(_g.options.translatedFromSelector).innerHTML=o2;let l2=r2.querySelector(_g.options.reviewCommentSelector);l2!==null&&(l2.innerHTML=s2),t2.innerHTML=a2,e2.isTranslated=!e2.isTranslated}constructor(...e2){super(...e2),this.reviews=[]}};_e=new WeakMap,__privateAdd(_g,_e,_g.options={reviewItemSelector:".product-detail-review-item",buttonSelector:"[data-review-id]",reviewTranslateUrl:window.router["frontend.product.review.translate"],reviewTitleSelector:".product-detail-review-item-title >
9 .h5",reviewContentSelector:".product-detail-review-item-content",reviewCommentSelector:".product-detail-review-item-comment .blockquote-footer",alertWrapperSelector:".review-tab-pane-alert-wrapper",translatedFromSelector:".swag-text-translator_translated-from"});let g=_g;window.PluginManager.register("ReviewTranslator",g,"[data-review-translator]")})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.