PageSourceSearch

https://shop.duden.de/theme/a9dd922003eb7771b776d292d2b01149/js/qu…ck-order.file-upload-modal.plugin.71c51c.js

js duden.de collected 2026-10-01 08:28:00 UTC 21,562 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[44021],{857:e=>{var t=function(e){var t;return!!e&&"object"==typeof e&&"[object RegExp]"!==(t=Object.prototype.toString.call(e))&&"[object Date]"!==t&&e.$$typeof!==s},s="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function i(e,t){return!1!==t.clone&&t.isMergeableObject(e)?a(Array.isArray(e)?[]:{},e,t):e}function n(e,t,s){return e.concat(t).map(function(e){return i(e,s)})}function o(e){return Object.keys(e).concat(Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter(function(t){return Object.propertyIsEnumerable.call(e,t)}):[])}function r(e,t){try{return t in e}catch(e){return!1}}function a(e,s,l){(l=l||{}).arrayMerge=l.arrayMerge||n,l.isMergeableObject=l.isMergeableObject||t,l.cloneUnlessOtherwiseSpecified=i;var d,u,c=Array.isArray(s);return c!==Array.isArray(e)?i(s,l):c?l.arrayMerge(e,s,l):(u={},(d=l).isMergeableObject(e)&&o(e).forEach(function(t){u[t]=i(e[t],d)}),o(s).forEach(function(t){(!r(e,t)||Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))&&(r(e,t)&&d.isMergeableObject(s[t])?u[t]=(function(e,t){if(!t.customMerge)return a;var s=t.customMerge(e);return"function"==typeof s?s:a})(t,d)(e[t],s[t],d):u[t]=i(s[t],d))}),u)}a.all=function(e,t){if(!Array.isArray(e))throw Error("first argument should be an array");return e.reduce(function(e,s){return a(e,s,t)},{})},e.exports=a},49:(e,t,s)=>{s.d(t,{Z:()=>n});var i=s(140);class n{static isNode(e){return"object"==typeof e&&null!==e&&(e===document||e===window||e instanceof Node)}static hasAttribute(e,t){if(!n.isNode(e))throw Error("The element must be a valid HTML Node!");return"function"==typeof e.hasAttribute&&e.hasAttribute(t)}static getAttribute(e,t){let s=!(arguments.length>2)||void 0===arguments[2]||arguments[2];if(s&&!1===n.hasAttribute(e,t))throw Error('The required property "'.concat(t,'" does not exist!'));if("function"!=typeof e.getAttribute){if(s)throw Error("This node doesn't support the getAttribute function!");return}return e.getAttribute(t)}static getDataAttribute(e,t){let s=!(arguments.length>2)||void 0===arguments[2]||arguments[2],o=t.replace(/^data(|-)/,""),r=i.Z.toLowerCamelCase(o,"-");if(!n.isNode(e)){if(s)throw Error("The passed node is not a valid HTML Node!");return}if(void 0===e.dataset){if(s)throw Error("This node doesn't support the dataset attribute!");return}let a=e.dataset[r];if(void 0===a){if(s)throw Error('The required data attribute "'.concat(t,'" does not exist on ').concat(e,"!"));return a}return i.Z.parsePrimitive(a)}static querySelector(e,t){let s=!(arguments.length>2)||void 0===arguments[2]||arguments[2];if(s&&!n.isNode(e))throw Error("The parent node is not a valid HTML Node!");let i=e.querySelector(t)||!1;if(s&&!1===i)throw Error('The required element "'.concat(t,'" does not exist in parent node!'));return i}static querySelectorAll(e,t){let s=!(arguments.length>2)||void 0===arguments[2]||arguments[2];if(s&&!n.isNode(e))throw Error("The parent node is not a valid HTML Node!");let i=e.querySelectorAll(t);if(0===i.length&&(i=!1),s&&!1===i)throw Error('At least one item of "'.concat(t,'" must exist in parent node!'));return i}static getFocusableElements(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document.body;return e.querySelectorAll('\n            input:not([tabindex^="-"]):not([disabled]):not([type="hidden"]),\n            select:not([tabindex^="-"]):not([disabled]),\n            textarea:not([tabindex^="-"]):not([disabled]),\n            button:not([tabindex^="-"]):not([disabled]),\n            a[href]:not([tabindex^="-"]):not([disabled]),\n            [tabindex]:not([tabindex^="-"]):not([disabled])\n        ')}static getFirstFocusableElement(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document.body;return this.getFocusableElements(e)[0]}static getLastFocusableElement(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document,t=this.getFocusableElements(e);return t[t.length-1]}}},140:(e,t,s)=>{s.d(t,{Z:()=>i});class i{static ucFirst(e){return e.charAt(0).toUpperCase()+e.slice(1)}static lcFirst(e){return e.charAt(0).toLowerCase()+e.slice(1)}static toDashCase(e){return e.replace(/([A-Z])/g,"-$1").replace(/^-/,"").toLowerCase()}static toLowerCamelCase(e,t){let s=i.toUpperCamelCase(e,t);return i.lcFirst(s)}static toUpperCamelCase(e,t){return t?e.split(t).map(e=>i.ucFirst(e.toLowerCase())).join(""):i.ucFirst(e.toLowerCase())}static parsePrimitive(e){try{return/^\d+(.|,)\d+$/.test(e)&&(e=e.replace(",",".")),JSON.parse(e)}catch(t){return e.toString()}}}},293:(e,t,s)=>{s.d(t,{Z:()=>l});var i=s(857),n=s.n(i),o=s(49),r=s(140);class a{publish(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=new CustomEvent(e,{detail:t,cancelable:s});return this.el.dispatchEvent(i),i}subscribe(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=this,n=e.split("."),o=s.scope?t.bind(s.scope):t;if(s.once&&!0===s.once){let t=o;o=function(s){i.unsubscribe(e),t(s)}}return this.el.addEventListener(n[0],o),this.listeners.push({splitEventName:n,opts:s,cb:o}),!0}unsubscribe(e){let t=e.split(".");return this.listeners=this.listeners.reduce((e,s)=>([...s.splitEventName].sort().toString()===t.sort().toString()?this.el.removeEventListener(s.splitEventName[0],s.cb):e.push(s),e),[]),!0}
1reset(){return this.listeners.forEach(e=>{this.el.removeEventListener(e.splitEventName[0],e.cb)}),this.listeners=[],!0}get el(){return this._el}set el(e){this._el=e}get listeners(){return this._listeners}set listeners(e){this._listeners=e}constructor(e=document){this._el=e,e.$emitter=this,this._listeners=[]}}class l{init(){throw Error('The "init" method for the plugin "'.concat(this._pluginName,'" is not defined.'))}update(){}_init(){this._initialized||(this.init(),this._initialized=!0)}_update(){this._initialized&&this.update()}_mergeOptions(e){let t=r.Z.toDashCase(this._pluginName),s=o.Z.getDataAttribute(this.el,"data-".concat(t,"-config"),!1),i=o.Z.getAttribute(this.el,"data-".concat(t,"-options"),!1),a=[this.constructor.options,this.options,e];s&&a.push(window.PluginConfigManager.get(this._pluginName,s));try{i&&a.push(JSON.parse(i))}catch(e){throw console.error(this.el),Error('The data attribute "data-'.concat(t,'-options" could not be parsed to json: ').concat(e.message))}return n().all(a.filter(e=>e instanceof Object&&!(e instanceof Array)).map(e=>e||{}))}_registerInstance(){window.PluginManager.getPluginInstancesFromElement(this.el).set(this._pluginName,this),window.PluginManager.getPlugin(this._pluginName,!1).get("instances").push(this)}_getPluginName(e){return e||(e=this.constructor.name),e}constructor(e,t={},s=!1){if(!o.Z.isNode(e))throw Error("There is no valid element given.");this.el=e,this.$emitter=new a(this.el),this._pluginName=this._getPluginName(s),this.options=this._mergeOptions(t),this._initialized=!1,this._registerInstance(),this._init()}}},107:(e,t,s)=>{s.d(t,{Z:()=>i});class i{get(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"application/json",i=this._createPreparedRequest("GET",e,s);return this._sendRequest(i,null,t)}post(e,t,s){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"application/json";i=this._getContentType(t,i);let n=this._createPreparedRequest("POST",e,i);return this._sendRequest(n,t,s)}delete(e,t,s){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"application/json";i=this._getContentType(t,i);let n=this._createPreparedRequest("DELETE",e,i);return this._sendRequest(n,t,s)}patch(e,t,s){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"application/json";i=this._getContentType(t,i);let n=this._createPreparedRequest("PATCH",e,i);return this._sendRequest(n,t,s)}abort(){if(this._request)return this._request.abort()}setErrorHandlingInternal(e){this._errorHandlingInternal=e}_registerOnLoaded(e,t){t&&(!0===this._errorHandlingInternal?(e.addEventListener("load",()=>{t(e.responseText,e)}),e.addEventListener("abort",()=>{console.warn("the request to ".concat(e.responseURL," was aborted"))}),e.addEventListener("error",()=>{console.warn("the request to ".concat(e.responseURL," failed with status ").concat(e.status))}),e.addEventListener("timeout",()=>{console.warn("the request to ".concat(e.responseURL," timed out"))})):e.addEventListener("loadend",()=>{t(e.responseText,e)}))}_sendRequest(e,t,s){return this._registerOnLoaded(e,s),e.send(t),e}_getContentType(e,t){return e instanceof FormData&&(t=!1),t}_createPreparedRequest(e,t,s){return this._request=new XMLHttpRequest,this._request.open(e,t),this._request.setRequestHeader("X-Requested-With","XMLHttpRequest"),s&&this._request.setRequestHeader("Content-type",s),this._request}constructor(){this._request=null,this._errorHandlingInternal=!1}}},21:(e,t,s)=>{s.r(t),s.d(t,{default:()=>o});var i=s(293),n=s(107);class o extends i.Z{init(){this.input=this.el.querySelector(this.options.selectors.fileInput),this.uploadContainer=this.el.querySelector(this.options.selectors.uploadContainer),this.uploadContent=this.el.querySelector(this.options.selectors.uploadContent),this.uploadArea=this.el.querySelector(this.options.selectors.uploadArea),this.addButton=this.el.querySelector(this.options.selectors.addButton),this.applyButton=this.el.querySelector(this.options.selectors.applyButton),this.messageElement=this.el.querySelector(".".concat(this.options.selectors.messageElement)),this.iconSuccess=this.el.querySelector(this.options.selectors.iconSuccess).innerHTML,this.iconError=this.el.querySelector(this.options.selectors.iconError).innerHTML,this.uploadDuplicatedProducts=this.el.querySelector(this.options.selectors.uploadDuplicatedProducts),this.uploadOptions=this.el.querySelector(this.options.selectors.uploadOptions),this.uploadModalLabel=this.el.querySelector(this.options.selectors.uploadModalLabel),this.uploadTable=this.el.querySelector(this.options.selectors.uploadTable),this.uploadSelection=this.el.querySelector(this.options.selectors.uploadSelection),this.uploadModalDuplicatedTitle=this.el.querySelector(this.options.selectors.uploadModalDuplicatedTitle),this.httpClient=new n.Z,this.isCancel=!1,this.quantityMapping=[],this._getBaseQuickOrder(),this._registerEvents()}_registerEvents(){this.removeButton=this.uploadArea.querySelector(this.options.selectors.removeButton),this.input.addEventListener("change",this._onFileInputChanged.bind(this)),this.removeButton.addEventListener("click",this._removeFileUpload.bind(this)),this.el.addEventListener("hide.bs.modal",this._closeModal.bind(this)),this.el.addEventListener("show.bs.modal",this._openModal.bind(this)),this.addButton.addEventListener("click",this._addProducts.bind(this)),this.applyButton.addEventListener("click",this._finalResult.bind(this))}_removeFileUpload(){this.httpClient.abort(),this.messageElement.innerHTML="",this.uploadArea.hidden=!1,this._endUpload()}_closeModal(){this.uploadModalDuplicatedTitle.hidden=!0,this.uploadDuplicatedProducts.hidden=!0,this.uploadOptions.hidden=!0,this.applyButton.hidden=!0,this.addButton.hidden=!1,this.responseData=null,this.duplicatedProducts=null,this.checkedRadio=null,this.uploadSelection.innerHTML="";let e=this.uploadTable.querySelector("tbody"),t=this.uploadOptions.querySelector('input[type="radio"]');e&&this.uploadTable.removeChild(e),t&&(t.checked=!0),this._removeFileUpload()}_openModal(){this._baseQuickOrder.products.length>0&&(this.manualProducts=this._baseQuickOrder.products,this.uploadOptions.hidden=!1)}_onFileInputChanged(e){this._startUpload();let t=e.target.files.length>0?e.target.files[0]:null;this._handleFileUpload(t),this.input.value=""}_handleFileUpload(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return!e||"text/csv"!==e.type||e.size>104857600?(this._endUpload(),this._handleMessage(this.iconError,this._getSnippet("error"),this.options.selectors.messageErrorState,this.options.snippets.uploadErrorAriaLabel)):(this._successU
1pload(e),this._handleMessage(this.iconSuccess,this._getSnippet("success"),this.options.selectors.messageSuccessState,"",!0))}_generateUploadElement(e){let t=document.createElement("div");return t.setAttribute("class",this.options.selectors.uploadElement),t.innerHTML=e,t}_startUpload(){this.messageElement.innerHTML="",this.messageElement.classList.forEach(e=>{e.includes("".concat(this.options.selectors.messageElement,"--"))&&this.messageElement.classList.remove(e)}),this.uploadElement&&(this.uploadContent.removeChild(this.uploadElement),this.uploadElement=null),this.uploadElement=this._generateUploadElement(this._getSnippet("loading")),this.uploadContent.appendChild(this.uploadElement),this.uploadContainer.classList.add(this.options.selectors.modifierUploadState)}_endUpload(){this.addButton.disabled=!0,this.input.disabled=!1,this.uploadElement&&(this.uploadContent.removeChild(this.uploadElement),this.uploadElement=null),this.uploadContainer.classList.remove(this.options.selectors.modifierUploadState),this.uploadContainer.classList.remove(this.options.selectors.modifierUploadSuccessState)}_successUpload(e){this._endUpload(),this.uploadElement=this._generateUploadElement(e.name),this.fileUpload=e,this.input.disabled=!0,this.addButton.disabled=!1,this.uploadContent.appendChild(this.uploadElement),this.uploadContainer.classList.add(this.options.selectors.modifierUploadSuccessState)}_handleMessage(e,t,s){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"",n=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o=document.createElement("div"),r=document.createElement("div");this.messageElement.ariaLabel=i,this.messageElement.classList.add(s),o.setAttribute("class",this.options.selectors.messageText),o.setAttribute("role","alert"),o.textContent=t,r.setAttribute("class",this.options.selectors.messageIcon),r.innerHTML=e,this.messageElement.appendChild(r),this.messageElement.appendChild(o),this.messageElement.setAttribute("role","alert"),this.messageElement.classList.remove("visually-hidden"),n&&this.messageElement.classList.add("visually-hidden")}_finalResult(){if(!this.uploadTable.tBodies.length)return!1;this.responseData.quantityMapping={},Array.from(this.uploadTable.tBodies[0].rows).forEach(e=>{let t=e.querySelector(".quick-order-upload__product-number").textContent,s=e.querySelector(".form-check-input:checked").value;this.responseData.quantityMapping[t]=Number(s)}),this.uploadCSVItem(this.responseData)}_findDuplicatedProducts(e,t){let s=[];return e.forEach(e=>{let i=e.productNumber;i in t&&s.push({productNumber:i,name:e.name,csvQuantity:t[i],manualQuantity:parseInt(e.quantity)})}),s}_createDuplicatedStructure(e){let t=document.createElement("tbody");e.forEach(e=>{let s=this.options.snippets.hiddenText.manual.replace("%quantity%",e.manualQuantity).replace("%productnumber%",e.productNumber),i=this.options.snippets.hiddenText.csv.replace("%quantity%",e.csvQuantity).replace("%productnumber%",e.productNumber),n=this.options.snippets.hiddenText.combined.replace("%quantity%",e.manualQuantity+e.csvQuantity).replace("%productnumber%",e.productNumber),o='\n                <tr>\n                    <td>\n                        <div class="quick-order-upload__product-name">\n                            <span class="quick-order-upload__product-number">'.concat(e.productNumber,"</span>\n                            <span>").concat(e.name,"</span>\n                        </div>\n                    </td>\n                    <td>").concat(this._createRadioInput(e.productNumber,e.manualQuantity,"manual",!0,s),"</td>\n                    <td>").concat(this._createRadioInput(e.productNumber,e.csvQuantity,"csv",!1,i),"</td>\n                    <td>").concat(this._createRadioInput(e.productNumber,e.csvQuantity+e.manualQuantity,"combined",!1,n),"</td>\n                </tr>\n            ");t.insertAdjacentHTML("beforeend",o);let r='\n                <label class="quick-order-upload__product-name">\n                    <span class="quick-order-upload__product-number">'.concat(e.productNumber,"</span>\n                    <span>").concat(e.name,'</span>\n                </label>\n                <select name="').concat(e.productNumber,'" class="form-select">\n                    <option value="').concat(e.csvQuantity,'" id="').concat(e.productNumber,'-csv">\n                        ').concat(this._getSnippet("csv")+" ("+e.csvQuantity+")",'\n                    </option>\n                    <option value="').concat(e.csvQuantity+e.manualQuantity,'" id="').concat(e.productNumber,'-combined">\n                        ').concat(this._getSnippet("combined")," (").concat(e.csvQuantity+e.manualQuantity,')\n                    </option>\n                    <option value="').concat(e.manualQuantity,'" id="').concat(e.productNumber,'-manual">\n                        ').concat(this._getSnippet("current")+" ("+e.manualQuantity+")","\n                    </option>\n                </select>\n            ");this.uploadSelection.insertAdjacentHTML("beforeend",r)}),this.uploadTable.appendChild(t),Array.from(this.uploadTable.querySelectorAll('input[type="radio"]')).forEac
1h(e=>{e.addEventListener("click",()=>{this.uploadSelection.querySelector('select[name="'.concat(e.name,'"] #').concat(e.id)).selected=!0})}),Array.from(this.uploadSelection.querySelectorAll("select")).forEach(e=>{e.addEventListener("change",e=>{let t=e.target.selectedOptions[0];this.uploadTable.querySelector('input[type="radio"][id="'.concat(t.id,'"]')).checked=!0})})}_createRadioInput(e,t,s){let i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",o="".concat(e,"-").concat(s);return'\n            <div class="form-check">\n                <input\n                    type="radio"\n                    class="form-check-input"\n                    id="'.concat(o,'"\n                    name="').concat(e,'"\n                    value="').concat(t,'"\n                    ').concat(i?"checked":"",'\n                >\n                <label class="form-check-label" for="').concat(o,'">\n                    <span aria-hidden="true">').concat(t,'</span>\n                    <span class="visually-hidden">').concat(n,"</span>\n                </label>\n            </div>\n        ")}_uploadRequestCallback(e){let t={};try{t=JSON.parse(e)}catch(e){return this._endUpload(),this.messageElement.innerHTML="",this.messageElement.classList.forEach(e=>{e.includes("".concat(this.options.selectors.messageElement,"--"))&&this.messageElement.classList.remove(e)}),this.messageElement.classList.remove("visually-hidden"),this._handleMessage(this.iconError,this._getSnippet("error"),this.options.selectors.messageErrorState,this.options.snippets.uploadErrorAriaLabel),!1}if(this.checkedRadio&&(t.option=this.checkedRadio.value),this.checkedRadio&&"add"===this.checkedRadio.value&&(this.quantityMapping=this._getProductNumberQuantityMapping(t.products),this.duplicatedProducts=this._findDuplicatedProducts(this.manualProducts,this.quantityMapping)),this.duplicatedProducts&&this.duplicatedProducts.length>0){this.uploadArea.hidden=!0,this.uploadOptions.hidden=!0,this.addButton.hidden=!0,this.uploadDuplicatedProducts.hidden=!1,this.applyButton.hidden=!1,this.uploadModalDuplicatedTitle.hidden=!1,this.responseData=t,this._createDuplicatedStructure(this.duplicatedProducts);return}return this.uploadCSVItem(t),!0}uploadCSVItem(e){this.fileUpload=null,bootstrap.Modal.getInstance(this.el).hide(),this._baseQuickOrder.handleUploadCSVItems(e)}_addProducts(){if(!this.uploadOptions.hidden){let e=this.uploadOptions.querySelectorAll('input[type="radio"]');for(let t=0;t<e.length;t++)if(e[t].checked){this.checkedRadio=e[t];break}}this.addButton.disabled=!0;let e=new FormData;e.append("file",this.fileUpload),this.httpClient.post(window.router["frontend.account.quick-order.upload"],e,this._uploadRequestCallback.bind(this))}_getSnippet(e){return this.options.snippets?this.options.snippets[e]:""}_getProductNumberQuantityMapping(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t={};return e.forEach(e=>{t[e.productNumber]=e.quantity}),t}_getBaseQuickOrder(){this._baseQuickOrder=window.PluginManager.getPluginInstanceFromElement(document.querySelector('[data-b2b-base-quick-order="true"]'),"B2bBaseQuickOrder")}}o.options={selectors:{fileInput:".quick-order-upload__input",uploadArea:".quick-order-upload",uploadElement:"quick-order-upload__uploading",uploadContainer:".quick-order-upload__container",modifierUploadState:"quick-order-upload__container--uploading",modifierUploadSuccessState:"quick-order-upload__container--success",messageElement:"quick-order-upload__message",messageIcon:"quick-order-upload__message-icon",messageText:"quick-order-upload__message-text",messageErrorState:"quick-order-upload__message--error",messageSuccessState:"quick-order-upload__message--success",iconSuccess:".quick-order-upload__icon-success",iconError:".quick-order-upload__icon-error",selectButton:".quick-order-upload__btn-select",uploadContent:".quick-order-upload__content",removeButton:".quick-order-upload__btn-remove",addButton:".quick-order-upload__btn-add",applyButton:".quick-order-upload__btn-apply",uploadModal:"#quickOrderUploadModal",uploadModalLabel:"#quickOrderUploadModalLabel",uploadOptions:".quick-order-upload__options",uploadDuplicatedProducts:".quick-order-upload__duplicated-products",uploadTable:".quick-order-upload__table",uploadSelection:".quick-order-upload__selection",uploadModalDuplicatedTitle:".quick-order-upload__duplicated-title"}}}}]);

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.