{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/b2b/javascript/utilities.js","webpack:///./app/b2b/javascript/orion.js","webpack:///./app/b2b/javascript/shoppinglists-overlay-rows.js","webpack:///./app/b2b/javascript/clients/CartClient.js","webpack:///./app/b2b/javascript/api/b2bApiKey.js","webpack:///./app/b2b/javascript/api/checkout.js","webpack:///./app/b2b/javascript/api/checkout/orderitems.js","webpack:///./app/b2b/javascript/api/checkout/summary.js","webpack:///./app/b2b/javascript/api/complaints.js","webpack:///./app/b2b/javascript/api/downloads.js","webpack:///./app/b2b/javascript/api/newsletter.js","webpack:///(webpack)/buildin/global.js","webpack:///./app/b2b/javascript/api/orders.js","webpack:///./app/b2b/javascript/api/salesChargeback.js","webpack:///./app/b2b/javascript/api/shipping-addresses.js","webpack:///./app/b2b/javascript/account-addressbook.js","webpack:///./app/b2b/javascript/account-orders.js","webpack:///./app/b2b/javascript/account-shoppinglist.js","webpack:///./app/b2b/javascript/api-authorization-key-display.js","webpack:///./app/b2b/javascript/checkout-address.js","webpack:///./app/b2b/javascript/checkout-cart.js","webpack:///./app/b2b/javascript/downloads.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///./app/b2b/javascript/download-list-as-csv.js","webpack:///./app/b2b/javascript/invoice-notification-toggle.js","webpack:///./app/b2b/javascript/newsletter.js","webpack:///./app/b2b/javascript/shipping_address.js","webpack:///./app/b2b/javascript/shipping-address-edit.js","webpack:///./app/b2b/javascript/shoppinglist.js","webpack:///./app/b2b/javascript/street.js","webpack:///./app/b2b/javascript/download.js","webpack:///./app/b2b/javascript/clients/InvoiceClient.js","webpack:///./app/b2b/javascript/account-invoice-list.js","webpack:///./app/b2b/javascript/clients/InvoiceUnpaidClient.js","webpack:///./app/b2b/javascript/account-invoice-list-unpaid.js","webpack:///./app/b2b/javascript/clients/ShipmentTrackingClient.js","webpack:///./app/b2b/javascript/account-shipment-tracking.js","webpack:///./app/b2b/javascript/thirdParty/punycode.js","webpack:///./app/b2b/javascript/thirdParty/IPv6.js","webpack:///./app/b2b/javascript/thirdParty/SecondLevelDomains.js","webpack:///./app/b2b/javascript/copy-to-clipboard.js","webpack:///./node_modules/mustache/mustache.js","webpack:///./app/b2b/javascript/shoppinglists-tables-overlay.js","webpack:///./app/b2b/javascript/entry.desktop-appendix.js","webpack:///./app/b2b/javascript/complaint.js","webpack:///./app/b2b/javascript/global.js","webpack:///./app/b2b/javascript/api/cart.js","webpack:///./app/b2b/javascript/api/cart/orderitems.js","webpack:///./app/b2b/javascript/clients/ShoppinglistClient.js","webpack:///./app/b2b/javascript/api/customerScalarAttribute.js","webpack:///./app/b2b/javascript/api/shoppinglist.js","webpack:///./app/b2b/javascript/api/bonusitem.js","webpack:///./app/b2b/javascript/api/notifications.js","webpack:///./app/b2b/javascript/clients/OrderClient.js","webpack:///(webpack)/buildin/module.js","webpack:///./app/b2b/javascript/URI.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","getLanguageCode","document","querySelector","getAttribute","createElementFromHTML","htmlString","div","createElement","innerHTML","trim","firstChild","getFeedbackMessage","classList","iconClassList","message","_el$classList","title","arguments","length","undefined","useTextKeys","feedbackId","content","getTranslation","el","join","add","apply","_toConsumableArray","dataset","feedbackTextKeys","displayFeedbackMessage","feedbackEl","append","$","trigger","feedbackMessageExists","messageTextKey","titleTextKey","displaySuccessFeedbackMessage","allowDuplicates","displayInfoFeedbackMessage","displayErrorFeedbackMessage","element","hasAttribute","fetchFormValues","formElement","ignoreHidden","formElements","elements","values","filteredElements","filter","matches","forEach","index","indexOf","matchIndex","match","_slicedToArray","matchName","files","newValue","removeValue","arr","ele","stringToHTML","str","DOMParser","parseFromString","body","arrayToPrefixedUrlQuery","array","prefix","map","x","debounce","func","timer","_this","timeout","_len","args","Array","_key","clearTimeout","setTimeout","isArray","arg","toString","orion","list","f","result","q","elementsPerPage","attr","constants","ElementsPerPage","replace","ShoppinglistOverlayRows","overlay","_classCallCheck","this","shoppingListClient","ShoppinglistClient","overlayAddProductsButton","overlayAddListButton","overlayNoList","defaultRowTemplate","notDefaultRowTemplate","rowLabelSelector","rowDateSelector","rowQuantitySelector","defaultShoppingList","fetchAllShoppinglists","then","response","ok","json","data","renderShoppinglistRows","shoppingLists","catch","remove","shoppinglists","_this2","shoppinglist","clone","isDefault","cloneNode","setAttribute","id","htmlFor","dateCreated","productItemCount","CartClient","languageCode","_uri","_dataSrc","fetch","params","method","headers","JSON","stringify","extend","api","b2bApiKey","fetchApiKey","publicAccessId","timestamp","ajax","url","uri","type","jQuery","checkout","orderitems","readMarkup","productNumber","summary","read","complaints","downloads","language","newsletter","subscribeNewsletter","dataType","contentType","unsubscribeNewsletter","g","Function","e","window","orderlist","readItems","orderlistId","skip","take","draw","order","0","field","dir","Accept","salesChargeback","shippingAddresses","$addressDeleteOverlayTrigger","$addressDeleteOverlay","$deleteForm","urlPath","on","action","urlParam","$addressEntry","fetchAddressId","parents","eq","urlObject","URI","addSearch","href","Orders","_createClass","ordersClient","OrderClient","cartClient","shoppinglistTablesOverlay","ShoppinglistTablesOverlay","table","itemTables","childRows","selectedRows","$itemTableTemplate","listTemplate","itemElementTemplate","selector","itemSelector","deleteButtonSelector","addToCartButtonSelector","reorderButtonSelector","shoppinglistButtonSelector","orderIdMeta","1","class","icon","text","showEditCancelButton","showReorderButton","2","3","4","5","6","7","8","9","10","11","DataTable","dataSrc","orderStatusId","orderStatusClass","orderStatusIcon","orderStatusText","isAcceptedFixedPriceOffer","attributes","orderTimestamp","orderDate","Date","toLocaleDateString","getLocaleCode","day","month","year","pageLength","searching","lengthChange","datatableTexts","columnDefs","targets","orderable","render","row","Mustache","orderList","visible","drawCallback","every","nodes","to$","click","hide","initEvents","createdRow","$row","orderId","orionOrderReference","addClass","init","self","off","$tr","showOverlay","handleAddListToCartClick","fetchAllItems","initOverlay","handleItemClick","target","hasClass","toggleDetail","rows","_","each","k","matchOrderIdWithColumnName","column","ordersId","template","child","show","itemTable","start","sort","formatOrder","orderListItems","orderListItem","expiringProductFlag","promotionalPackingFlag","privateBrandFlag","posProductFlag","isOutOfStock","isAvailable","availability","dom","rowId","serverSide","processing","productNumberColumn","className","baseSrc","productImageUrl","newSrc","image","retinaImage","webPImage","webPRetinaImage","avifImage","avifRetinaImage","productImageUrlAvif","productImageUrlWebp","productImageUrlJpeg","productDetailsColumn","createdCell","td","cellData","rowData","$availabilityIcon","find","width","undiscountedPriceColumn","productUnknown","discountedPriceColumn","quantityColumn","subtotalPriceColumn","prev","grandTotalString","initComplete","initChildEvents","buttons","container","appendTo","footer","createSortSelection","EventOrderlistItemLoaded","fn","dataTable","Buttons","currentTable","filterSection","sortSelection","sortPlaceholder","selected","disabled","appendChild","columns","optionAscending","optionDescending","prependTo","closest","addEventListener","linkOderAddedBasket","location","linkOderReplaceBasket","orderReference","concat","dataLayer","push","event","cancelTransactionId","successMessage","promise","cancelOrder","handleRequestPromise","pushOrderCancellationToDatalayer","_this3","addToCart","linkToCartAddedItems","_this4","replaceCart","linkToCartReplaceItems","errorMessage","refreshAfterSuccess","tableRef","cb","handleErrorRequests","handleSuccessfulRequests","EventCartProductUpdated","error","refreshAfter","_this5","reload","$overlay","_this6","reorder","unbind","$body","removeClass","hideOverlay","handleCancelOrderClick","handleReplaceCartClick","$table","detach","destroy","tr","isShown","createChildTable","Shoppinglist","setAsDefaultButtonSelector","quantitySelector","createButtonSelector","createInputSelector","editNameButtonSelector","oldNameSelector","isDefaultCheckboxSelector","editNameInputSelector","jqXHR","status","clear","ordering","shoppinglistList","handleCreateButtonClick","count","handleSetAsDefaultClick","Number","parseInt","$qtyInput","shoppinglistId","quantity","val","handleQtyChange","updateItems","updateTableData","containers","disableFooterButtons","fetchShoppinglist","shoppinglistData","button","isEmpty","productItems","productItem","noveltyFlag","bargainProductFlag","discountBlock","isUpcoming","shoppinglistListItem","selectColumn","_cellData","$availability","suggestedRetailPriceColumn","shoppingListId","select","style","empty","enableFooterButtons","$csvButton","updateCsvButton","EventCsvDownloadButtonAppended","checkbox","contains","deselect","keys","selectedItems","handleShoppingListChoiceAddToCartClick","dt","indexes","pluck","includes","shoppinglistCount","feedbackMessage","newData","createShoppinglist","update","deleteShoppinglist","createToCartFeedback","_this7","addItemsToCart","_this8","_this9","listItems","toArray","upcomingItemsCount","unknownItemsCount","selectedItem","itemData","listItem","delete","selectedData","_this10","items","productNumbersArrayToBodyData","_this11","deleteItems","_this12","upcomingProducts","unknownProducts","createBlockedProductsFeedback","productNumbers","feedbackSelector","productsString","_this13","_this14","handleDeleteListClick","handleShoppingListChoiceDeleteClick","handleReplaceCartWithSelectionClick","handleAddItemsToCartClick","is","oldName","checked","newName","handleEditShoppingListClick","preventDefault","elementId","exec","$feedbackContainer","prepend","$that","done","parent","html","fail","$submitButton","$formArrangement","$formShipping","$formBilling","$formNewAddress","$formTriggers","$orderFormShippingMode","$orderFormShippingAddressId","$addressList","addressBox","deactivateSubmitButton","updateShippingAddressList","updateOrderFormShippingAddressId","prop","handleClick","EventFormValidationComplete","$data","$form","cache","statusCode","201","fixBackground","400","403","changeSelectedAddressFlag","activateSubmitButton","$element","targetId","fetchTargetId","$target","removeOrderFormShippingAddressId","setStates","$input","$id","404","$defaultId","$items","$address","defaultClass","selectedAttribute","$html","insertShippingAddressEntry","Cart","filteredProductsCount","filteredProducts","summaryTemplate","voucherCodeTemplate","fixedPriceOfferExpiryTemplate","quantityToSellingUnitSelector","summarySelector","summarySelectionInfoSelector","summaryContentSelector","actionsWrapperSelector","fixedPriceOfferAndShoppinglistAndSummaryWrapperSelector","fixedPriceOfferAndShoppinglistWrapperSelector","shoppinglistWrapperSelector","fixedPriceOfferWrapperSelector","actionsShoppinglistSelector","actionsCartSelector","checkoutButtonSelector","voucherInputSelector","voucherButtonSelector","selectAllButtonSelector","filters","urlSuffix","containsBulkyProducts","containsMarketplaceProducts","containsUnavailableProducts","filteredItemsFetched","bulkyFeedbackmessageShown","marketplaceFeedbackmessageShown","checkboxContainerBulky","checkboxContainerMarketplace","checkboxContainerAvailability","checkboxBulky","checkboxMarketplace","checkboxAvailability","filterResetButton","isFixedPriceOffer","isShoppinglistTablesOverlayInitialized","isAdvertisingMaterial","productType","recordsFiltered","notAvailableProductItemCount","checkoutDataTags","info","_type","basketListItem","isPreorder","sellingUnitColumn","$emptyText","handleSelectAllButtonView","prepareFilters","fetchSummaryData","handleFlags","actionsWrapper","fixedPriceOfferWrapper","shoppinglistWrapper","disable","tag","_e","_dt","$node","handleCancelFixedPriceOffer","initStaticEvents","showFeedbackMessageOrderInBasket","EventCartProductCreated","filterParam","limitParam","fetchItemsWithParams","updateFilters","handleFilters","isAllSelected","load","sellingUnit","newQty","getDataValueForRow","enable","resetFilters","handleDeleteSelectionClick","fetchSummary","cart","hasSavings","totalMoneySavedString","updateSummary","updateCheckoutButton","isMinimumOrderValueReached","summaryWrapper","summaryElement","basketSummaryData","summaryHTML","existingMinimumOrderDiv","minimumOrderDiv","checkoutButton","parentNode","insertBefore","nextSibling","products","withQty","obj","resp","Downloads","page","tabArticleData","tabBrochuresFlyer","tabEpaper","currentDate","fetchDownloads","downloadItems","ManagedDownloadList","processDownloads","download","downloadItem","managedDownload","checkValidity","validFromDatetime","validUntilDatetime","createDownloadElement","attachDownload","downloadCategory","fileIcon","newBadge","customerFlag","date","languages","querySelectorAll","description","fileExtension","badgeOffset","faqLink","copyLink","copyLinkButton","downloadButton","isNew","src","filename","split","textContent","replaceUmlaute","creationDatetime","dateArray","formatDate","managedDownloadId","copyLinkToClipboard","copyLinkFeedback","validFromDate","validUntilDate","category","__webpack_amd_options__","cartApi","shoppingListApi","orderListApi","$progressBar","indexArray","downloadCartAsCsv","cartProductItemCount","updateProgressBar","csv","itemArray","line","inArray","readCartItemsAndConvertToCsv","progress","convertToCsv","triggerCsvDownload","startCsvConversionForCart","downloadOrderlistAsCsv","orderlistProductItemCount","orderlistKey","orderLists","readOrderlistItemsAndConvertToCsv","startCsvConversionForOrderlist","downloadShoppingListAsCsv","initOrderListAsCsvEvents","shoppingListName","readHeaderData","shoppingListProductItemCount","readShoppingListItemsAndConvertToCsv","startCsvConversionForShoppingList","blob","Blob","navigator","msSaveBlob","URL","createObjectURL","display","progressValueRounded","Math","ceil","progressValuePercentage","css","InvoiceNotificationToggle","toggleTriggerSelector","wrapper","toggleTrigger","customerScalarAttribute","attributeName","fetchToggleTrigger","initToggle","disableToggleTrigger","attributeValue","enableToggleTrigger","handleToggleTriggerChange","updateNotificationAttribute","removeAttribute","isToggleActivated","activateNotifications","deactivateNotifications","$newsletterSwitch","$submitNewEmail","$submitNewEmailDialog","$newsletterEmailSubscriptionButton","$email","email","feedbackNewsletterAjaxSuccess","feedbackNewsletterAjaxError","inputEmail","oldEmail","$country","$shippingAddress","$shippingAddressDisabled","$shopCountryCodeMeta","$defaultShippingMode","shippingAddressShouldBeHidden","countryCode","myShopCountryCode","toLowerCase","updateViewShippingAdress","initialFormValues","allShippingAddresses","newTrigger","form","submit","orderFormShippingAddressId","$accountAddressNewEditUrl","fetchedFormValues","convertApiDataToFormData","loadingIndicator","updateList","handleClickEditTrigger","handleClickDeleteAddressEntry","handleClickNewTrigger","handleClickSubmit","xhr","apiData","shippingAddress","additionalLine","addressId","addressType","city","firstName","lastName","street","zipcode","populateForm","combinedName","dispatchEvent","Event","convertedShippingAddressData","shippingAddressesJson","_i","_Object$entries","entries","shippingAddressJson","getShippingAddressByAddressId","EventFormValidate","$container","apiShoppingList","apiCart","$cart","ghostAnimationRunning","model","view","$list","$li","next","$selectorProductImage","$img","$productNumber","requestAnimationFrame","offsetImage","offset","offsetCart","$ghostImage","insertAfter","offsetGhostImage","toTranslateStyle","left","top","transform","animateImageToCart","ClassProcessing","ClassBasketUpdated","always","$delete","thisView","thisModel","del","EventShoppingListProductDeleted","$item","$deleted","deleted","deleteItem","$undo","EventShoppingListProductCreated","undoDeleteItem","$street","$countryCode","metaName","metaElements","metaData","$meta","slice","thisMetaData","delegateUpdates","$el","updateAttributes","node","includeWhitespaceNodes","textNodes","nonWhitespaceMatcher","$parent","getTextNodes","nodeType","test","nodeValue","len","childNodes","updateText","triggerValidationParametersChanged","EventValidationParametersChanged","groupName","$terms","$termsTrigger","$downloadTriggers","$downloadCopyLinkTrigger","localStorage","getItem","scroll","scrollTop","height","scrollHeight","setItem","InvoiceClient","_dataResponse","ids","InvoiceList","invoiceListClient","invoiceDownloadButtonSelector","dataResponse","paging","invoiceListRow","customerPrivateFile","fileTypeInvoice","fileType","getDate","getMonth","getFullYear","creationDatetimeHours","getHours","getMinutes","invoiceList","invoiceListCreationDate","invoiceListNumber","noDatetime","hadDownloaded","hasNoticed","hasNoDatetime","downloadedDatetime","downloadedDatetimeHours","noticedDatetime","invoiceListStatus","downloaded","noticed","mandatorId","customerPrivateFileId","downloadLink","updateNoticedItems","updateDownloadedItem","itemIds","item","optionText","toUpperCase","InvoiceUnpaidClient","InvoiceListUnpaid","invoiceListUnpaidClient","jsonData","hasInvoiceDetails","balances","invoiceDate","invoiceListUnpaid","invoiceListUnpaidInvoiceDate","invoiceListUnpaidNumber","dueDate","invoiceListUnpaidDueDate","dueAmount","invoiceListUnpaidDueAmount","footerCallback","formatedMoneyStringToInt","notAssignable","accountBalance","formattedMoney","ShipmentTrackingClient","limit","AccountShipmentTracking","shipmentTrackingClient","invoice","createInvoiceDocumentLink","customerId","customerPrivateFileName","createShipmentCarrierLink","shipmentCarrier","trackingCode","shipmentTrackingList","invoiceDocumentIdColumn","shipmentDatetime","shipmentDatetimeColumn","parcelCountLTColumn","parcelCountGTColumn","parcelCount","trackingCodeColumnWithUrl","trackingCodeColumnWithoutUrl","shipmentTranslation","shippingAddressColumn","root","freeExports","_typeof","freeModule","freeGlobal","global","punycode","maxInt","regexPunycode","regexNonASCII","regexSeparators","errors","floor","stringFromCharCode","String","fromCharCode","RangeError","mapDomain","string","parts","ucs2decode","extra","output","counter","charCodeAt","ucs2encode","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","baseMinusTMin","base","decode","input","out","basic","j","oldi","w","baseMinusT","codePoint","inputLength","bias","lastIndexOf","splice","encode","handledCPCount","basicLength","currentValue","handledCPCountPlusOne","qMinusT","define","factory","_IPv6","IPv6","best","address","pos","_segments","segments","total","shift","pop","_best","_current","current","inzeroes","noConflict","_SecondLevelDomains","SecondLevelDomains","SLD","has","domain","tldOffset","sldOffset","sldList","$temp","execCommand","$copyLinkToClipboardTrigger","$copyTokenToClipboardTrigger","$copyApiKeyToClipboardTrigger","$copyTokenToClipboardTarget","copyTokenFeedback","$copyApiKeyToClipboardTarget","copyApiKeyFeedback","objectToString","isFunction","escapeRegExp","hasProperty","propName","regExpTest","RegExp","nonSpaceRe","isWhitespace","re","testRegExp","entityMap","whiteRe","spaceRe","equalsRe","curlyRe","tagRe","Scanner","tail","Context","parentContext","Writer","templateCache","_cache","set","eos","scan","substring","scanUntil","search","lookup","primitive","intermediateValue","names","context","lookupHit","clearCache","parse","tags","cacheKey","mustache","isCacheEnabled","tokens","openingTagRe","closingTagRe","closingCurlyRe","lineHasNonSpace","sections","spaces","hasTag","nonSpace","indentation","tagIndex","stripSpace","compileTags","tagsToCompile","Error","chr","token","openSection","scanner","valueLength","charAt","nestedTokens","collector","numTokens","nestTokens","lastToken","squashedTokens","squashTokens","parseTemplate","partials","config","getConfigTags","renderTokens","originalTemplate","symbol","buffer","renderSection","renderInverted","renderPartial","unescapedValue","escapedValue","rawValue","indentPartial","partial","filteredIndentation","partialByNl","indentedValue","escape","getConfigEscape","version","defaultWriter","TypeError","shoppingListoverlay","overlayNewListInput","overlayCloseButton","overlayListContainer","overlayItemCount","errorInputContainer","errorInputFeedback","shoppingListOverlayRows","productsMovedToShoppingListEvent","newShoppingListId","productList","showAddList","showAddProduct","addNewList","addProductsToList","checkInput","EventFocusOverlayClicked","innerText","currentShoppingListId","prepareBodyData","keepItemsCheckbox","defaultShoppingListId","productItemListId","EventShoppingListDefaultUpdated","productIndex","$productContainer","$additionalProductButton","$additionalProductForm","$hiddenProductForm","deleteAdditionalProductButtonText","$resetButton","$checkButton","$checkButtonText","$loadingIndicatorForm","$loadingIndicatorList","feedbackFormatValidationText","feedbackInvalidFileText","feedbackProductInvalidText","feedbackProductAvailabilityText","feedbackEmptyListText","feedbackFailureListText","$uploadFile","$dragAndDropField","listMessage","lockFurtherProcessing","addAdditionalProduct","stopPropagation","originalEvent","dataTransfer","dropEffect","handleFileSelect","$firstProductFormInputs","$otherProductForms","$products","validArray","availableProductsArray","notAvailableProductsArray","faultyArray","scrollIntoView","behavior","block","reason","productNumberValidation","checkIfProductNumberInvalid","quantityValidation","checkIfProductQuantityInvalid","reasonValidation","checkIfProductReasonInvalid","success","complete","notAvailableProducts","faultyProducts","$newForm","prepareProductForm","$removeButton","newProductForm","$title","$fields","children","$inputs","inputName","labelName","file","endsWith","$window","reader","FileReader","readAsText","onprogress","onload","rawCsvArray","invalidCsvLines","rawCsvLine","rawCsvLineArray","convertCsvLineToArray","csvLineProductnumber","editRawCsvLine","csvLineQuantity","csvLineReason","csvLine","csvLineValidation","createProductForms","invalidCsvLinesString","processCsvFile","csvLineArray","$productForm","cleanCsvLine","ajaxError","request","ajaxSend","ev","jqxhr","settings","parser","reg","pathname","loadPromise","loadSubmenus","force","shopProfileCode","classHidden","showExclusive","$elHide","toggleClass","y","fadeIn","runningProcessCount","hash","redirectAction","actionParts","encodeURIComponent","iFrameResize","documentElement","Cookies","enabled","$this","numericYear","currentYear","currentYearShort","isNaN","EventValidationFailedOnSubmit","$htmlBody","$offsetElement","$inputsFailed","outerHeight","animate","ready","handleLoginRedirectParameter","createShoppingList","_method","readAllItems","bonusitem","notifications","markAsRead","notificationId","markAllUnimportantAsRead","markAll","credentials","webpackPolyfill","deprecate","paths","require","_URI","_urlSupplied","_baseSupplied","absoluteTo","hasOwn","escapeRegEx","getType","filterArrayValues","arrayContains","arraysEqual","one","two","trimSlashes","escapeForDumbFirefox36","strictEncodeURIComponent","_parts","protocol","username","password","hostname","urn","port","path","query","fragment","duplicateQueryParameters","escapeQuerySpace","protocol_expression","idn_expression","punycode_expression","ip4_expression","ip6_expression","find_uri_expression","findUri","end","parens","defaultPorts","http","https","ftp","gopher","ws","wss","invalid_hostname_characters","domAttributes","getDomAttribute","nodeName","decodeURIComponent","iso8859","unescape","unicode","characters","expression","reserved","urnpath","encodeQuery","escaped","decodeQuery","_part","generateAccessor","_group","generateSegmentedPathFunction","_sep","_codingFuncName","_innerCodingFuncName","actualCodingFunc","generateSimpleAccessor","v","build","generatePrefixAccessor","decodePath","decodeUrnPath","recodePath","recodeUrnPath","encodeReserved","parseAuthority","parseHost","bracketPos","firstColon","firstSlash","nextColon","parseUserinfo","parseQuery","splits","buildAuthority","buildHost","buildUserinfo","buildQuery","unique","buildQueryParameter","addQuery","removeQuery","hasQuery","withinArray","Boolean","joinPaths","nonEmptySegments","segment","normalize","commonPath","min","withinString","callback","options","_start","_end","_trim","_parens","_attributeOpen","lastIndex","ignoreHtml","attributeOpen","max","parensEnd","parensMatch","parensMatchEnd","ignore","ensureValidHostname","toASCII","removeAll","unconflicted","URITemplate","deferBuild","_deferred_build","_string","valueOf","res","_object","what","ip","ip4","ip6","sld","idn","relative","_protocol","_port","_hostname","scheme","origin","authority","host","userinfo","resource","subdomain","sub","tld","ReferenceError","directory","decodePathSegment","mutatedDirectory","normalizePath","suffix","separator","absolute","unshift","segmentCoded","setQuery","setSearch","removeSearch","hasSearch","normalizeProtocol","normalizeQuery","normalizeFragment","normalizeHostname","normalizePort","_was_relative","_path","_parent","_pos","_leadingParents","normalizePathname","normalizeSearch","normalizeHash","readable","toUnicode","qp","kv","basedir","resolved","properties","relativeTo","relativeParts","baseParts","common","relativePath","basePath","equals","one_map","two_map","one_query","two_query"],"mappings":"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","file":"desktop-appendix.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/home/build/git-freya-live/htdocs/www.orion-wholesale.com/assets\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 250);\n","export function getLanguageCode()\n{\n return document.querySelector('html').getAttribute('lang');\n}\n\nfunction createElementFromHTML(htmlString)\n{\n var div = document.createElement('div');\n div.innerHTML = htmlString.trim();\n\n // Change this to div.childNodes to support multiple top-level nodes.\n return div.firstChild;\n}\n\nfunction getFeedbackMessage(classList, iconClassList, message, title = '', useTextKeys = false)\n{\n let feedbackId = message + title;\n\n message = useTextKeys ? getTranslation(message) : message;\n title = useTextKeys ? getTranslation(title) : title;\n\n let content =\n\t\t'

'\n\t\t\t+ message\n\t\t+ '

';\n\n if (title !== '')\n {\n content =\n\t\t\t'

'\n\t\t\t\t+ title\n\t\t\t+ '

'\n\t\t\t+ '

'\n\t\t\t\t+ message\n\t\t\t+ '

';\n }\n\n let el = createElementFromHTML(\n '
'\n\t\t\t+ ''\n\t\t\t+ content\n\t\t\t+ ''\n\t\t\t\t+ ''\n\t\t\t+ ''\n\t\t+ '
'\n );\n\n el.classList.add(...classList);\n\n if (useTextKeys)\n {\n el.dataset.feedbackTextKeys = feedbackId;\n }\n\n return el;\n}\n\nfunction displayFeedbackMessage(feedbackEl)\n{\n let body = document.querySelector('body');\n\n body.append(feedbackEl);\n $('body').trigger('feedback-added');\n}\n\nfunction feedbackMessageExists(messageTextKey, titleTextKey)\n{\n let value = messageTextKey + titleTextKey;\n let feedbacks = document.querySelector('[data-feedback-text-keys=\"' + value + '\"]');\n\n return feedbacks !== null;\n}\n\nexport function displaySuccessFeedbackMessage(message, title = '', useTextKeys = false, allowDuplicates = true)\n{\n if (useTextKeys && feedbackMessageExists(message, title) && !allowDuplicates)\n {\n return;\n }\n\n let feedbackEl = getFeedbackMessage(['success', 'js-feedback-autohide'], ['fa-check'], message, title, useTextKeys);\n\n displayFeedbackMessage(feedbackEl);\n\n return feedbackEl;\n}\n\nexport function displayInfoFeedbackMessage(message, title = '', useTextKeys = false, allowDuplicates = false)\n{\n if ((useTextKeys && feedbackMessageExists(message, title)) && !allowDuplicates)\n {\n return;\n }\n\n let feedbackEl = getFeedbackMessage(['info'], ['fa-info-circle'], message, title, useTextKeys);\n\n displayFeedbackMessage(feedbackEl);\n\n return feedbackEl;\n}\n\nexport function displayErrorFeedbackMessage(message, title = '', useTextKeys = false, allowDuplicates = false)\n{\n if ((useTextKeys && feedbackMessageExists(message, title)) && !allowDuplicates)\n {\n return;\n }\n\n let feedbackEl = getFeedbackMessage(['error'], ['fa-exclamation-circle'], message, title, useTextKeys);\n\n displayFeedbackMessage(feedbackEl);\n\n return feedbackEl;\n}\n\nexport function getTranslation(key)\n{\n let element = document.querySelector('meta[name=\"' + key + '\"]');\n\n if (element !== null && element.hasAttribute('content'))\n {\n return element.getAttribute('content');\n }\n else\n {\n console.warn('No translation key found for: ' + key);\n }\n\n return '';\n}\n\nexport function fetchFormValues(formElement, ignoreHidden = false)\n{\n var formElements = formElement.elements;\n var values = {};\n\n // .elements also gives us fieldsets, buttons etc. we dont need\n var filteredElements = [...formElements].filter(\n element =>\n element.matches('input')\n\t\t\t|| element.matches('textarea')\n\t\t\t|| element.matches('select')\n );\n\n filteredElements.forEach(function(element)\n {\n if (element.matches('[type=hidden]') && ignoreHidden)\n {\n return;\n }\n\n var name = element.getAttribute('name');\n var { value } = element;\n\n if (!name)\n {\n // works like `continue` in a forEach loop\n return;\n }\n\n let index = null;\n\n // Handle input names with array notation and assign `name` and `index` variable to create nested objects later\n if (name.indexOf('[') !== -1)\n {\n let matchIndex = name.match(/\\[([^\\]]+)]/);\n\n if (matchIndex)\n {\n [, index] = matchIndex;\n }\n\n let matchName = name.match(/^[^[]+/);\n\n if (matchName)\n {\n [name] = matchName;\n }\n }\n\n /**\n\t\t * For radio buttons and checkboxes we use the value only if it is checked.\n\t\t * Otherwise we unset the value variable. The values for inputs with same names are merged later.\n\t\t */\n if (element.matches('[type=radio]') || element.matches('[type=checkbox]'))\n {\n let checked = !!element.matches(':checked');\n\n if (!checked)\n {\n value = '';\n }\n }\n\n if (element.matches('[type=file]'))\n {\n value = element.files;\n }\n\n let newValue = value;\n\n // Create nested objects, if index is set\n if (index)\n {\n if (!values[name])\n {\n values[name] = {};\n }\n\n if (!values[name][index])\n {\n values[name][index] = '';\n }\n\n if (values[name][index] !== '')\n {\n newValue = values[name][index];\n\n if (value !== '')\n {\n newValue = values[name][index] + ',' + value;\n }\n }\n\n values[name][index] = newValue;\n }\n else\n {\n if (!values[name])\n {\n values[name] = '';\n }\n\n if (values[name] !== '')\n {\n newValue = values[name];\n\n if (value !== '')\n {\n newValue = values[name] + ',' + value;\n }\n }\n\n values[name] = newValue;\n }\n });\n\n return values;\n}\n\nexport function removeValue(arr, value)\n{\n return arr.filter(function(ele)\n {\n return ele !== value;\n });\n}\n\n/**\n * Convert a template string into HTML DOM nodes\n * @param {String} str The template string\n * @return {Node} The template HTML\n */\nexport function stringToHTML(str)\n{\n var parser = new DOMParser();\n var doc = parser.parseFromString(str, 'text/html');\n return doc.body.firstChild;\n}\n\n/**\n * Converts an array into a URL query string with a given prefix.\n * @param {Array} array - The array of values to be converted.\n * @param {string} prefix - The prefix to be added before each value.\n * @returns {string} The URL query string with the prefix and brackets.\n */\nexport function arrayToPrefixedUrlQuery(array, prefix)\n{\n return array.map(x => prefix + '[]=' + x).join('&');\n}\n\n/**\n * Debounce function to prevent multiple calls of a function\n * @param {function} func - The function to be called\n * @param {number} timeout - The timeout in ms\n * @returns {function} The debounced function\n */\nexport function debounce(func, timeout = 500)\n{\n let timer;\n\n return (...args) =>\n {\n clearTimeout(timer);\n timer = setTimeout(() =>\n {\n func.apply(this, args);\n }, timeout);\n };\n}\n","// polyfills - begin\nif (!Array.isArray)\n{\n Array.isArray = function(arg)\n {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n}\n// polyfills - end\n\nvar orion = {\n 'classHidden': 'hidden',\n\n 'map': function(list, f)\n {\n var\n i, l,\n result;\n\n if (Array.isArray(list))\n {\n result = [];\n for (i = 0, l = list.length; i < l; i += 1)\n {\n result[i] = f(list[i]);\n }\n }\n else\n {\n // assume list is an object hash\n result = {};\n for (i in list)\n {\n if (Object.prototype.hasOwnProperty.call(list, i))\n {\n result[i] = f(list[i]);\n }\n }\n }\n\n return result;\n },\n\n 'resetPaginationParameters': function(q)\n {\n var elementsPerPage = $('meta[name=elementsPerPage]').attr('content') || orion.constants.ElementsPerPage;\n\n return q.replace(/^(.*)--[0-9]+--[0-9]+(--.*)$/, '$1--0--' + elementsPerPage + '$2');\n },\n\n 'toPageCategory': function()\n {\n return $('meta[name=pageCategory]').attr('content');\n },\n\n 'getShopViewCode': function()\n {\n return $('meta[name=shop_view_code]').attr('content');\n },\n\n 'getShopId': function()\n {\n return $('meta[name=shop_id]').attr('content');\n },\n\n 'getShopProfileCode': function()\n {\n return $('meta[name=shop_profile_code]').attr('content');\n },\n\n 'getDefaultShoppingListId': function()\n {\n return $('meta[name=default_shopping_list_id]').attr('content');\n },\n\n 'getLocaleCode': function()\n {\n return $('meta[name=localeCode]').attr('content');\n },\n\n 'getCustomerId': function()\n {\n return $('meta[name=customer_id]').attr('content');\n },\n\n 'constants': {\n 'ClassBasketUpdated': 'basket-updated',\n 'ClassProcessing': 'processing',\n 'ElementsPerPage': 24,\n 'EventAgeConfirmed': 'age-confirmed',\n 'EventCartUpdated': 'cart-updated',\n 'EventCartProductCreated': 'cart-product-created',\n 'EventCartProductDeleted': 'cart-product-deleted',\n 'EventCartProductUpdated': 'cart-product-updated',\n 'EventCsvDownloadButtonAppended': 'csv-download-button-appended',\n 'EventDefaultShoppingListChanged': 'default-shopping-list-changed',\n 'EventDropdownOpened': 'dropdown-opened',\n 'EventFeedbackAdded': 'feedback-added',\n 'EventFiltersChanged': 'filters-changed',\n 'EventFilterMarkupAppended': 'filters-markup-appended',\n 'EventFiltersMarkupReplaced': 'filters-markup-replaced',\n 'EventFocusOverlayClicked': 'focus-overlay-clicked',\n 'EventFolddownClosed': 'folddown-closed',\n 'EventFolddownMobileOpening': 'folddown-mobile-opening',\n 'EventFolddownOpened': 'folddown-opened',\n 'EventFolddownRequested': 'folddown-requested',\n 'EventFoldupRequested': 'foldup-requested',\n 'EventFormValidate': 'form-validate',\n 'EventFormValidationComplete': 'form-validation-complete',\n 'EventFormInitNext': 'form-init-next',\n 'EventHoverviewMouseenter': 'hoverview-mouseenter',\n 'EventHoverviewMouseleave': 'hoverview-mouseleave',\n 'EventModalAppended': 'modal-appended',\n 'EventModalClosed': 'modal-closed',\n 'EventModalOpened': 'modal-opened',\n 'EventNavigatingToIndex': 'navigating-to-index',\n 'EventNavigationAppended': 'navigation-appended',\n 'EventOverlayClosed': 'overlay-closed',\n 'EventOverlayOpened': 'overlay-opened',\n 'EventProductImageUpdated': 'product-image-updated',\n 'EventProductListReloaded': 'product-list-reloaded',\n 'EventQChanged': 'q-changed',\n 'EventRequestNavigateToIndex': 'request-navigate-to-index',\n 'EventReset': 'orion.reset',\n 'EventShoppingListProductCreated': 'shoppinglist-product-created',\n 'EventShoppingListProductDeleted': 'shoppinglist-product-deleted',\n 'EventShoppingListProductUpdated': 'shoppinglist-product-updated',\n 'EventShoppingListDefaultUpdated': 'shoppinglist-default-updated',\n 'EventOrderlistItemLoaded': 'orderlist-item-loaded',\n 'EventSortCriteriumChanged': 'sort-criterium-changed',\n 'EventTabOpened': 'tab-opened',\n 'EventTilesviewVariationChanged': 'tilesview-variation-changed',\n 'EventValidationFailedOnSubmit': 'validation-failed-on-submit',\n 'EventValidationParametersChanged': 'validation-parameters-changed',\n 'EventWizardGoto': 'wizard-goto',\n 'EventWizardStepNextBefore': 'wizard-step-next-before',\n 'EventWizardStepNextAfter': 'wizard-step-next-after',\n 'EventWizardStepPrevBefore': 'wizard-step-prev-before',\n 'EventWizardStepPrevAfter': 'wizard-step-prev-after',\n 'EventProductImageIndexChanged': 'product-image-index-changed',\n 'EventProductImageLoad360Image': 'load360'\n }\n};\n","import ShoppinglistClient from './clients/ShoppinglistClient';\n\nexport default class ShoppinglistOverlayRows\n{\n constructor(overlay)\n {\n // API\n this.shoppingListClient = new ShoppinglistClient();\n\n // Elements\n this.overlay = overlay;\n this.overlayAddProductsButton = this.overlay.querySelector('.js-overlay-shoppinglist-products-button');\n this.overlayAddListButton = this.overlay.querySelector('.js-overlay-shoppinglist-add-list-button');\n this.overlayNoList = this.overlay.querySelector('.js-overlay-shoppinglist--no-shoppinglists');\n\n // Templates\n this.defaultRowTemplate = this.overlay.querySelector('#shoppinglist-overlay-row-default');\n this.notDefaultRowTemplate = this.overlay.querySelector('#shoppinglist-overlay-row-not-default');\n\n // Selectors\n this.rowLabelSelector = '.js-overlay-shoppinglist-row-label';\n this.rowDateSelector = '.js-create-shoppinglist-date';\n this.rowQuantitySelector = '.js-shoppinglist-quantity';\n\n // Helper\n this.defaultShoppingList = document.querySelector('meta[name=\"default_shopping_list_id\"]');\n }\n\n init()\n {\n this.shoppingListClient.fetchAllShoppinglists()\n .then((response) =>\n {\n if (response.ok)\n {\n return response.json();\n }\n })\n .then((data) =>\n {\n this.renderShoppinglistRows(data.shoppingLists);\n })\n .catch(() =>\n {\n console.log('No shopping lists found!');\n this.overlayNoList.classList.remove('hidden');\n this.overlayAddListButton.classList.remove('hidden');\n this.overlayAddProductsButton.classList.add('hidden');\n });\n }\n\n renderShoppinglistRows(shoppinglists)\n {\n this.overlay.querySelector('.list-container').innerHTML = '';\n\n shoppinglists.forEach(shoppinglist =>\n {\n let clone;\n\n if (shoppinglist.isDefault)\n {\n clone = this.defaultRowTemplate.cloneNode(true);\n clone.querySelector('input[name=shoppinglist]').setAttribute('checked', 'true');\n }\n else\n {\n clone = this.notDefaultRowTemplate.cloneNode(true);\n }\n\n clone.querySelector('input').id = 'shoppinglist-' + shoppinglist.id;\n clone.querySelector('input').value = shoppinglist.id;\n\n clone.querySelector('label').htmlFor = 'shoppinglist-' + shoppinglist.id;\n clone.querySelector('label .label').innerHTML = shoppinglist.name;\n\n clone.querySelector(this.rowDateSelector).innerHTML = shoppinglist.dateCreated;\n clone.querySelector(this.rowQuantitySelector).innerHTML = shoppinglist.productItemCount;\n\n\n clone.classList.remove('hidden');\n\n this.overlay.querySelector('.list-container').append(clone);\n });\n }\n}\n","import { getLanguageCode } from '../utilities';\n\nexport default class CartClient\n{\n constructor()\n {\n let languageCode = getLanguageCode();\n\n this._uri = '/api-cart-' + languageCode;\n this._dataSrc = 'cart';\n }\n\n get uri()\n {\n return this._uri;\n }\n\n get dataSrc()\n {\n return this._dataSrc;\n }\n\n /**\n\t * GET\n\t */\n fetchAll()\n {\n return fetch(this._uri + '/items/all');\n }\n\n fetchItemsWithParams(params)\n {\n return fetch(this._uri + '/items?' + params);\n }\n\n fetchSummary()\n {\n return fetch(this._uri);\n }\n\n /**\n\t * POST\n\t */\n\n /**\n\t * PUT\n\t */\n update(data)\n {\n return fetch(this._uri + '/items', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(data)\n });\n }\n\n /**\n\t * DELETE\n\t */\n\n /**\n\t * @returns {Promise}\n\t */\n delete()\n {\n return fetch(this._uri, {\n method: 'DELETE',\n });\n }\n\n deleteItems(data)\n {\n return fetch(this._uri + '/items', {\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(data)\n });\n }\n}\n","(function($)\n{\n $.extend(true, orion, {\n api: {\n b2bApiKey: {}\n }\n });\n\n var\n api = orion.api.b2bApiKey,\n uri = '/api-authorization-key-de';\n\n function fetchApiKey(publicAccessId, timestamp)\n {\n var promise = $.ajax({\n url : uri + '/' + publicAccessId + '/' + timestamp,\n type: 'GET'\n });\n\n return promise;\n }\n\n api.fetchApiKey = fetchApiKey;\n})(jQuery);\n","(function($)\n{\n $.extend(true, orion, {\n api: {\n checkout: {}\n }\n });\n\n /*\n\t * var\n\t * \tapi = orion.api.checkout,\n\t * \turi = \"/api-checkout\";\n\t */\n})(jQuery);\n","(function($)\n{\n $.extend(true, orion, {\n api: {\n checkout: {\n orderitems: {}\n }\n }\n });\n\n var\n api = orion.api.checkout.orderitems,\n uri = '/api-checkout/orderitems';\n\n function readMarkup(data)\n {\n var\n promise = $.ajax(uri + '/' + data.productNumber + '.html', {\n // \"cache\": false,\n 'method': 'GET'\n });\n\n return promise;\n }\n\n api.readMarkup = readMarkup;\n})(jQuery);\n","(function($)\n{\n $.extend(true, orion, {\n api: {\n checkout: {\n summary: {}\n }\n }\n });\n\n var\n api = orion.api.checkout.summary,\n uri = '/api-checkout/summary.html';\n\n function read(data)\n {\n var\n promise = $.ajax(uri, {\n 'method': 'GET',\n 'data': data || {},\n });\n\n return promise;\n }\n\n api.read = read;\n})(jQuery);\n","(function($)\n{\n $.extend(true, orion, {\n api: {\n complaints: {}\n }\n });\n\n var\n api = orion.api.complaints,\n uri = '/v1-api-complaints';\n\n function read()\n {\n return $.ajax(uri, {\n 'method': 'GET'\n });\n }\n\n api.read = read;\n})(jQuery);\n","(function($)\n{\n $.extend(true, orion, {\n api: {\n downloads: {}\n }\n });\n\n let\n api = orion.api.downloads,\n uri = '/api-managed-download-list',\n language = document.querySelector('html').getAttribute('lang');\n\n function read()\n {\n let\n promise = $.ajax(uri + '-' + language, {\n headers: {\n 'Accept': 'application/json',\n },\n method: 'GET'\n });\n\n return promise;\n }\n\n api.read = read;\n})(jQuery);\n","(function($)\n{\n /**\n\t * Extend the global orion object\n\t */\n $.extend(true, orion, {\n api: {\n newsletter: {}\n }\n });\n\n var\n api = orion.api.newsletter,\n uri = '/api-newsletter';\n\n /**\n\t * @return {Promise}\n\t */\n function subscribeNewsletter(data)\n {\n console.log(data);\n var\n promise = $.ajax(uri + '/subscribe', {\n 'cache': false,\n headers: {\n 'Accept': 'application/json'\n },\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n 'method': 'PUT'\n });\n\n console.log(promise);\n\n return promise;\n }\n\n /**\n\t * @return {Promise}\n\t */\n function unsubscribeNewsletter(data)\n {\n console.log(data);\n var\n promise = $.ajax(uri + '/unsubscribe', {\n 'cache': false,\n headers: {\n 'Accept': 'application/json'\n },\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n 'method': 'PUT'\n });\n\n console.log(promise);\n\n return promise;\n }\n\n api.subscribeNewsletter = subscribeNewsletter;\n api.unsubscribeNewsletter = unsubscribeNewsletter;\n})(jQuery);\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","(function($)\n{\n $.extend(true, orion, {\n api: {\n orderlist: {}\n }\n });\n\n var\n api = orion.api.orderlist,\n uri = '/api-orderlist';\n\n function read()\n {\n var promise = $.ajax(uri, {\n method: 'GET'\n });\n\n return promise;\n }\n\n function readItems(orderlistId, skip, take)\n {\n var promise = $.ajax(uri + '/' + orderlistId + '/items', {\n method: 'GET',\n data: {\n skip: skip,\n take: take,\n draw: 0,\n order: {\n 0: {\n field: 'productNumber',\n dir: 'asc'\n }\n }\n },\n headers: {\n Accept: 'application/json'\n }\n });\n\n return promise;\n }\n\n api.read = read;\n api.readItems = readItems;\n})(jQuery);\n","(function($)\n{\n $.extend(true, orion, {\n api: {\n salesChargeback: {}\n }\n });\n\n var\n api = orion.api.salesChargeback,\n uri = '/api-sales-chargeback';\n\n function read()\n {\n var\n promise = $.ajax(uri, {\n 'method': 'GET'\n });\n\n return promise;\n }\n\n api.read = read;\n})(jQuery);\n","(function($)\n{\n $.extend(true, orion, {\n api: {\n shippingAddresses: {}\n }\n });\n\n var\n api = orion.api.shippingAddresses,\n uri = '/api-customer-de/shipping-addresses';\n\n function read()\n {\n var\n promise = $.ajax(uri, {\n 'method': 'GET'\n });\n\n return promise;\n }\n\n api.read = read;\n})(jQuery);\n","jQuery(function($)\n{\n /**\n\t * @type {jQuery}\n\t */\n var $addressDeleteOverlayTrigger = $('.js-address-entry .overlay-trigger');\n\n /**\n\t * @type {jQuery}\n\t */\n var $addressDeleteOverlay = $('#overlay-delete-address');\n\n /**\n\t * @type {jQuery}\n\t */\n var $deleteForm = $('form', $addressDeleteOverlay);\n\n /**\n\t * @type {string}\n\t */\n var urlPath = $deleteForm.attr('action');\n\n /**\n\t * Fetch address id from address entry data-address-id attribute\n\t * @param {jQuery}\n\t * @return {string}\n\t */\n function fetchAddressId($addressEntry)\n {\n return $addressEntry.data('address-id');\n }\n\n /**\n\t * Assign form action to delete form in overlay\n\t * @param {string} action\n\t */\n function assignFormAction(action)\n {\n $deleteForm.attr('action', action);\n }\n\n /**\n\t * Fetches the address id, composes an url with the address id as parameter\n\t * and assigns it as action to the delete form\n\t */\n function handleClickDeleteAddressEntry()\n {\n var $this = $(this);\n var $addressEntry = $this.parents('.js-address-entry').eq(0);\n\n var addressId = fetchAddressId($addressEntry);\n var urlParam = { id: addressId };\n\n var urlObject = new URI(urlPath);\n\n urlObject.addSearch(urlParam);\n\n assignFormAction(urlObject.href());\n }\n\n $addressDeleteOverlayTrigger.on('click', handleClickDeleteAddressEntry);\n});\n","import Mustache from 'mustache';\nimport {\n displayErrorFeedbackMessage,\n displaySuccessFeedbackMessage,\n getTranslation\n} from './utilities';\nimport CartClient from './clients/CartClient';\nimport OrderClient from './clients/OrderClient';\nimport ShoppinglistTablesOverlay from './shoppinglists-tables-overlay';\n\nclass Orders\n{\n constructor()\n {\n this.ordersClient = new OrderClient();\n this.cartClient = new CartClient();\n this.shoppinglistTablesOverlay = new ShoppinglistTablesOverlay();\n\n this.data = [];\n\n this.table = undefined;\n this.itemTables = {};\n this.childRows = null;\n this.selectedRows = {};\n\n this.$itemTableTemplate = $('#ordersItemTable').clone(true);\n\n this.listTemplate = document.querySelector('#ordersListTemplate').innerHTML;\n this.itemElementTemplate = document.querySelector('#ordersItemElementTemplate').innerHTML;\n\n this.selector = '.js-orders';\n this.itemSelector = '.js-orders__item';\n this.deleteButtonSelector = '.js-orders__delete-list';\n this.addToCartButtonSelector = '.js-orders__add-to-cart';\n this.reorderButtonSelector = '.js-orders__reorder';\n this.shoppinglistButtonSelector = '.js-orders__shoppinglist';\n\n this.orderIdMeta = {\n 1: {\n class: 'open-status',\n icon: 'fa-hourglass',\n text: getTranslation('content.orderlist.status.open'),\n showEditCancelButton: true,\n showReorderButton: false\n },\n 2: {\n class: 'open-status',\n icon: 'fa-hourglass',\n text: getTranslation('content.orderlist.status.open'),\n showEditCancelButton: true,\n showReorderButton: false\n },\n 3: {\n class: 'storno-status',\n icon: 'fa-circle-xmark',\n text: getTranslation('content.orderlist.status.canceled'),\n showEditCancelButton: false,\n showReorderButton: true\n },\n 4: {\n class: 'open-status',\n icon: 'fa-hourglass',\n text: getTranslation('content.orderlist.status.open'),\n showEditCancelButton: true,\n showReorderButton: false\n },\n 5: {\n class: 'open-status',\n icon: 'fa-check',\n text: getTranslation('content.orderlist.status.done'),\n showEditCancelButton: false,\n showReorderButton: true\n },\n 6: {\n class: 'open-status',\n icon: 'fa-hourglass',\n text: getTranslation('content.orderlist.status.open'),\n showEditCancelButton: false,\n showReorderButton: true\n },\n 7: {\n class: 'open-status',\n icon: 'fa-hourglass',\n text: getTranslation('content.orderlist.status.open.read.only'),\n showEditCancelButton: false,\n showReorderButton: true\n },\n 8: {\n class: 'storno-status',\n icon: 'fa-circle-xmark',\n text: getTranslation('content.orderlist.status.canceled.erp'),\n showEditCancelButton: false,\n showReorderButton: true\n },\n 9: {\n class: 'open-status',\n icon: 'fa-hourglass',\n text: getTranslation('content.orderlist.status.invoiced.partially'),\n showEditCancelButton: false,\n showReorderButton: true\n },\n 10: {\n class: 'closed-status',\n icon: 'fa-check',\n text: getTranslation('content.orderlist.status.invoiced'),\n showEditCancelButton: false,\n showReorderButton: true\n },\n 11: {\n class: 'open-status',\n icon: 'fa-hourglass',\n text: getTranslation('content.orderlist.status.migrated'),\n showEditCancelButton: false,\n showReorderButton: true\n },\n };\n }\n\n init()\n {\n this.table = $(this.selector).DataTable({\n ajax: {\n url: this.ordersClient.uri,\n dataSrc: (json) =>\n {\n for (let i = 0; i < json[this.ordersClient.dataSrc].length; i++)\n {\n let { orderStatusId } = json[this.ordersClient.dataSrc][i];\n\n json[this.ordersClient.dataSrc][i].showEditCancelButton =\n\t\t\t\t\t\t\tthis.orderIdMeta[orderStatusId].showEditCancelButton;\n\n json[this.ordersClient.dataSrc][i].showReorderButton =\n\t\t\t\t\t\t\tthis.orderIdMeta[orderStatusId].showReorderButton;\n\n json[this.ordersClient.dataSrc][i].orderStatusClass =\n\t\t\t\t\t\t\tthis.orderIdMeta[orderStatusId].class;\n\n json[this.ordersClient.dataSrc][i].orderStatusIcon =\n\t\t\t\t\t\t\tthis.orderIdMeta[orderStatusId].icon;\n\n json[this.ordersClient.dataSrc][i].orderStatusText =\n\t\t\t\t\t\t\tthis.orderIdMeta[orderStatusId].text;\n\n json[this.ordersClient.dataSrc][i].isAcceptedFixedPriceOffer = false;\n\n if (json[this.ordersClient.dataSrc][i].attributes &&\n json[this.ordersClient.dataSrc][i].attributes['accepted_fixed_price_offer']\n )\n {\n json[this.ordersClient.dataSrc][i].isAcceptedFixedPriceOffer = true;\n }\n\n let { orderTimestamp } = json[this.ordersClient.dataSrc][i];\n\n json[this.ordersClient.dataSrc][i].orderDate =\n new Date(orderTimestamp * 1000).toLocaleDateString(\n orion.getLocaleCode().replace('_', '-'),\n { day: '2-digit', month: '2-digit', year: 'numeric' }\n );\n }\n\n return json[this.ordersClient.dataSrc];\n }\n },\n pageLength: 20,\n searching: false,\n lengthChange: false,\n language: this.datatableTexts(),\n order: [[1, 'desc']],\n columnDefs: [\n {\n targets: 0,\n orderable: false,\n render: function(data, type, row)\n {\n return Mustache.render(this.listTemplate, { orderList: row });\n }.bind(this)\n },\n // define hidden timestamp column just for ordering\n {\n targets: 1,\n data: 'orderTimestamp',\n visible: false\n }\n ],\n drawCallback: function()\n {\n if (this.childRows)\n {\n this.childRows.every(function()\n {\n this.nodes().to$()\n .click();\n });\n\n // Reset childRows so loop is not executed each draw\n this.childRows = null;\n }\n\n $('#orders thead').hide();\n $('#ordersItemTable thead').hide();\n this.initEvents();\n }.bind(this),\n createdRow: function(row, data)\n {\n let $row = $(row);\n\n $row.attr('data-order-id', data.orderId);\n $row.attr('data-order-reference', data.orionOrderReference);\n $row.addClass('orders-list__item js-orders__item dt--shadow dt--shadow-mobile');\n\n if (data.orderStatusId >= 4 && data.orderStatusId <= 6)\n {\n $row.addClass('open-status');\n }\n else if (data.orderStatusId == 3 || data.orderStatusId == 8)\n {\n $row.addClass('storno-status');\n }\n else if (data.orderStatusId == 10)\n {\n $row.addClass('closed-status');\n }\n else\n {\n $row.addClass('open-status');\n }\n }\n });\n\n this.shoppinglistTablesOverlay.init();\n }\n\n initEvents()\n {\n let self = this;\n\n $(this.deleteButtonSelector).off('click');\n $(this.deleteButtonSelector).on('click', function()\n {\n let $tr = $(this);\n let row = self.table.row($tr.parents(self.itemSelector));\n let data = row.data();\n\n self.showOverlay(data, $('#overlay-cancel-order'));\n });\n\n $(this.addToCartButtonSelector).off('click');\n $(this.addToCartButtonSelector).on('click', function()\n {\n let $tr = $(this);\n let row = self.table.row($tr.parents(self.itemSelector));\n let data = row.data();\n\n let cartQuantity = $('#basket-onsite').data('cart-quantity');\n\n if (cartQuantity === 0)\n {\n self.showOverlay(data, $('#overlay-edit-order-cart-empty'));\n }\n else\n {\n self.showOverlay(data, $('#overlay-edit-order-cart-filled'));\n }\n });\n\n $(this.reorderButtonSelector).off('click');\n $(this.reorderButtonSelector).on('click', function()\n {\n let $tr = $(this);\n let row = self.table.row($tr.parents(self.itemSelector));\n let data = row.data();\n\n let cartQuantity = $('#basket-onsite').data('cart-quantity');\n\n if (cartQuantity === 0)\n {\n self.handleAddListToCartClick(data, true);\n }\n else\n {\n self.showOverlay(data, $('#overlay-reorder-order-cart-filled'), true);\n }\n });\n\n $(this.shoppinglistButtonSelector).off('click');\n $(this.shoppinglistButtonSelector).on('click', function()\n {\n let $tr = $(this);\n let row = self.table.row($tr.parents(self.itemSelector));\n let data = row.data();\n\n self.ordersClient.fetchAllItems(data.orderId)\n .then((response) => response.json())\n .then((json) =>\n {\n self.shoppinglistTablesOverlay.initOverlay(json);\n });\n });\n\n $(this.selector).off('click');\n $(this.selector).on('click', this.itemSelector, function(e)\n {\n let $tr = $(this);\n let row = self.table.row($tr);\n let data = row.data();\n\n self.handleItemClick(e, $tr, row, data);\n });\n }\n\n handleItemClick(e, $tr, row, data)\n {\n if (e === null\n\t\t\t|| !$(e.target).hasClass('js-do-not-toggle-list')\n\t\t\t&& !$(e.target).parents('.js-do-not-toggle-list').length\n )\n {\n this.toggleDetail($tr, row, data);\n this.childRows = this.table.rows($('.shown'));\n }\n }\n\n datatableTexts()\n {\n return {\n 'paginate': {\n 'previous': '',\n 'next': '',\n },\n 'processing': getTranslation('content.orderlist.processing'),\n 'loadingRecords': getTranslation('content.orders.loading'),\n 'info': getTranslation('content.orders.info.entries'),\n 'infoEmpty': getTranslation('content.orders.info.entries.empty'),\n 'emptyTable': getTranslation('content.orders.info.list.empty'),\n 'select': {\n 'rows': {\n _: '(%d) '\n\t\t\t\t\t\t+ getTranslation('content.orders.info.selected.article'),\n },\n }\n };\n }\n\n initChildEvents()\n {\n // ...\n }\n\n formatOrder(self, order)\n {\n $(order).each(function(k)\n {\n order[k].field = self.matchOrderIdWithColumnName(order[k].column);\n });\n\n return order;\n }\n\n matchOrderIdWithColumnName(orderId)\n {\n switch (orderId)\n {\n case 0:\n return 'productNumber';\n case 1:\n return 'productName';\n case 2:\n return 'undiscountedPrice';\n case 3:\n return 'discountedPrice';\n case 4:\n return 'quantity';\n case 5:\n return 'subtotalPrice';\n default:\n return null;\n }\n }\n\n createChildTable(row, ordersId)\n {\n let self = this;\n let template = this.$itemTableTemplate.clone(true);\n\n row.child(template).show();\n\n let itemTable = template.DataTable({\n ajax: {\n url: this.ordersClient.uri + '/' + ordersId + '/items',\n data: function(data)\n {\n return {\n skip: data.start,\n take: data.length,\n sort: self.formatOrder(self, data.order)// data.order\n };\n },\n dataSrc: function(json)\n {\n return json.orderListItems.map((orderListItem) =>\n {\n orderListItem.expiringProductFlag = orderListItem.expiringProductFlag !== 0;\n orderListItem.promotionalPackingFlag = orderListItem.promotionalPackingFlag === 0;\n orderListItem.privateBrandFlag = orderListItem.privateBrandFlag !== 0;\n orderListItem.posProductFlag = orderListItem.posProductFlag !== '0';\n\n orderListItem.isOutOfStock = false;\n orderListItem.isAvailable = false;\n\n if (orderListItem.availability === 0)\n {\n orderListItem.isOutOfStock = true;\n }\n else if (orderListItem.availability === 1)\n {\n orderListItem.isAvailable = true;\n }\n\n return orderListItem;\n });\n }\n },\n dom: 'l\\\n\t\t\t\tf\\\n\t\t\t\tr\\\n\t\t\t\t<\"orders-list-table__scroll table--scroll-mobile\"t>\\\n\t\t\t\t<\"orders-list__action-wrapper\"\\\n\t\t\t\t<\"orders-list-actions__selection\">\\\n\t\t\t\t<\"orders-list-actions__pagination\"pi>\\\n\t\t\t\t<\"orders-list-actions__basket\">>',\n pageLength: 20,\n rowId: 'productNumber',\n serverSide: true,\n processing: true,\n // order: [[2, 'asc']],\n language: this.datatableTexts(),\n searching: false,\n lengthChange: false,\n columnDefs: [\n {\n targets: [0, 1, 2, 3, 4, 5],\n orderable: false\n },\n {\n // Hidden column to sort for product number\n // Sort criteria must be mapped to a column\n // See matchOrderIdWithColumnName(orderId)\n targets: 0,\n visible: false,\n render: function()\n {\n return Mustache.render(this.itemElementTemplate, {\n productNumberColumn: true\n });\n }.bind(this)\n },\n {\n data: null,\n targets: 1,\n orderable: false,\n className: 'orders-list__product-details',\n render: function(data, type, row)\n {\n let originalSrc = row.productImageUrl.trim();\n let baseSrc = originalSrc.replace('product-main-image', 'product-list-image-thumbnail');\n let newSrc = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)/, '$1-abo/');\n let image = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)\\/(.*?)(\\.jpg)$/, '$1-abo/$2.jpg');\n let retinaImage = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)\\/(.*?)(\\.jpg)$/, '$1-abo/$2-2x.jpg');\n let webPImage = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)\\/(.*?)(\\.jpg)$/, '$1-abo/$2.webp');\n let webPRetinaImage = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)\\/(.*?)(\\.jpg)$/, '$1-abo/$2-2x.webp');\n let avifImage = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)\\/(.*?)(\\.jpg)$/, '$1-abo/$2.avif');\n let avifRetinaImage = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)\\/(.*?)(\\.jpg)$/, '$1-abo/$2-2x.avif');\n\n row.productImageUrl = newSrc;\n row.productImageUrlAvif = avifImage + ', ' + avifRetinaImage + ' 2x';\n row.productImageUrlWebp = webPImage + ', ' + webPRetinaImage + ' 2x';\n row.productImageUrlJpeg = image + ', ' + retinaImage + ' 2x';\n\n return Mustache.render(this.itemElementTemplate, {\n orderListItem: row,\n productDetailsColumn: true\n });\n }.bind(this),\n createdCell: function(td, cellData, rowData)\n {\n let $availabilityIcon = $(td).find('i.fa-circle');\n\n if (rowData.isAvailable)\n {\n $availabilityIcon.addClass('in-stock');\n }\n else\n {\n $availabilityIcon.addClass('out-of-stock');\n }\n }\n },\n {\n width: '15%',\n targets: 2,\n className: 'orders-list__lp-sp',\n render: function(data, type, row)\n {\n return Mustache.render(this.itemElementTemplate, {\n orderListItem: row,\n undiscountedPriceColumn: !row.productUnknown\n });\n }.bind(this)\n },\n {\n width: '12%',\n targets: 3,\n className: 'orders-list__price text--bold',\n render: function(data, type, row)\n {\n return Mustache.render(this.itemElementTemplate, {\n orderListItem: row,\n discountedPriceColumn: !row.productUnknown\n });\n }.bind(this)\n },\n {\n width: '12%',\n targets: 4,\n className: 'orders-list__quantity',\n render: function(data, type, row)\n {\n return Mustache.render(this.itemElementTemplate, {\n orderListItem: row,\n ordersId: ordersId,\n quantityColumn: !row.productUnknown\n });\n }.bind(this)\n },\n {\n width: '12%',\n data: 'subtotalPrice',\n targets: 5,\n className: 'orders-list__total text--bold',\n render: function(data, type, row)\n {\n return Mustache.render(this.itemElementTemplate, {\n orderListItem: row,\n subtotalPriceColumn: !row.productUnknown\n });\n }.bind(this)\n }\n ],\n drawCallback: function()\n {\n $('#ordersItemTable thead').show();\n $('#ordersItemTable').eq(0)\n .hide();\n\n let $tr = $(this).parents('tr');\n let row = self.table.row($tr.prev());\n let data = row.data();\n\n $tr.addClass('orders-list__item-table dt--shadow dt--shadow-mobile');\n\n $('.js-orders__grand-total').remove();\n $tr.find('.dataTables_wrapper').append(''\n\t\t\t\t\t+ getTranslation('content.orderlist.detail.sum')\n\t\t\t\t\t+ ' '\n\t\t\t\t\t+ data.grandTotalString\n\t\t\t\t\t+ '');\n },\n initComplete: function()\n {\n let $tr = $(this).parents('tr');\n\n self.initChildEvents();\n\n itemTable.buttons().container()\n .appendTo($(this.api().column(0)\n .footer()));\n\n itemTable.buttons('orderlist', null).container()\n .appendTo($tr.find('.dataTables_wrapper'));\n\n $('.dataTables_paginate').addClass('orders_pagination');\n self.itemTables[ordersId] = itemTable;\n\n self.createSortSelection(itemTable, this[0]);\n\n $('body').trigger(orion.constants.EventOrderlistItemLoaded);\n }\n });\n\n new $.fn.dataTable.Buttons(itemTable, {\n name: 'orderlist',\n buttons: [\n {\n text: ' '\n\t\t\t\t\t\t+ ''\n\t\t\t\t\t\t+ getTranslation('form.download-orderlist-as-csv')\n\t\t\t\t\t\t+ '',\n attr: {\n 'data-orderid': ordersId\n },\n className: 'button secondary download-orderlist-as-csv js-download-orderlist-as-csv',\n },\n ]\n });\n }\n\n\n createSortSelection(itemTable, currentTable)\n {\n let filterSection = document.createElement('div');\n let sortSelection = document.createElement('select');\n let sortPlaceholder = document.createElement('option');\n\n filterSection.classList.add('order-list__sort', 'select-button-container');\n\n sortPlaceholder.value = '';\n sortPlaceholder.text = getTranslation('content.orderlist.child.sort.recent');\n sortPlaceholder.selected;\n sortPlaceholder.disabled;\n sortSelection.appendChild(sortPlaceholder);\n\n let { 0: columns } = itemTable.columns();\n\n for (let i = 0; i < columns.length; i++)\n {\n let optionAscending = document.createElement('option');\n let optionDescending = document.createElement('option');\n\n optionAscending.value = columns[i] !== 0 ? columns[i] : 999;\n optionAscending.text = getTranslation('content.orderlist.child.header.col.' + i) + ' '\n + getTranslation('content.orderlist.child.sort.ascending');\n sortSelection.appendChild(optionAscending);\n\n optionDescending.value = columns[i] !== 0 ? columns[i] * -1 : -999;\n optionDescending.text = getTranslation('content.orderlist.child.header.col.' + i) + ' '\n + getTranslation('content.orderlist.child.sort.descending');\n sortSelection.appendChild(optionDescending);\n }\n\n filterSection.append(sortSelection);\n $(filterSection).prependTo($(currentTable).closest('#ordersItemTable_wrapper'));\n\n sortSelection.addEventListener('change', function()\n {\n if (this.value > 0)\n {\n itemTable.order([this.value != 999 ? this.value : 0, 'asc']).draw();\n }\n else if (this.value < 0)\n {\n itemTable.order([this.value != -999 ? this.value * -1 : 0, 'desc']).draw();\n }\n else\n {\n itemTable.order([0, 'asc']).draw();\n }\n });\n }\n linkToCartAddedItems()\n {\n let linkOderAddedBasket = $('meta[name=\"link.order.added.basket\"]').attr('content');\n window.location.href = linkOderAddedBasket;\n }\n\n linkToCartReplaceItems()\n {\n let linkOderReplaceBasket = $('meta[name=\"link.order.replace.basket\"]').attr('content');\n window.location.href = linkOderReplaceBasket;\n }\n\n // etracker datalayer enrichment\n pushOrderCancellationToDatalayer(orderId)\n {\n let row = document.querySelector(`[data-order-id=\"${orderId}\"]`);\n let { orderReference } = row.dataset;\n\n window.dataLayer.push({\n event: 'orderCancellation',\n cancelTransactionId: orderReference,\n });\n }\n\n handleCancelOrderClick(data)\n {\n let successMessage = $('#feedback-order-storno-ok').text();\n\n let promise = this.ordersClient.cancelOrder(data.orderId);\n\n this.handleRequestPromise(\n promise,\n successMessage,\n '',\n true,\n this.table,\n () =>\n {\n this.handleRequestPromise(\n this.ordersClient.cancelOrder(data.orderId),\n '',\n '',\n true\n );\n\n this.pushOrderCancellationToDatalayer(data.orderId);\n }\n );\n }\n\n handleAddListToCartClick(data)\n {\n let promise = this.ordersClient.addToCart(data.orderId);\n\n this.handleRequestPromise(\n promise,\n '',\n '',\n false,\n this.table,\n () =>\n {\n this.handleRequestPromise(\n this.ordersClient.cancelOrder(data.orderId),\n '',\n '',\n true,\n this.table,\n () =>\n {\n this.pushOrderCancellationToDatalayer(data.orderId);\n\n this.linkToCartAddedItems();\n }\n );\n }\n );\n }\n\n handleReplaceCartClick(data)\n {\n let promise = this.ordersClient.replaceCart(data.orderId);\n\n this.handleRequestPromise(\n promise,\n '',\n '',\n false,\n this.table,\n () =>\n {\n this.handleRequestPromise(\n this.ordersClient.cancelOrder(data.orderId),\n '',\n '',\n true,\n this.table,\n () =>\n {\n this.pushOrderCancellationToDatalayer(data.orderId);\n\n this.linkToCartReplaceItems();\n }\n );\n }\n );\n }\n\n /**\n\t * @param promise {Promise}\n\t * @param successMessage {string}\n\t * @param errorMessage {string}\n\t * @param refreshAfterSuccess {boolean}\n\t * @param tableRef\n\t * @param cb\n\t */\n handleRequestPromise(\n promise,\n successMessage,\n errorMessage = '',\n refreshAfterSuccess = false,\n tableRef = this.table,\n cb = null\n )\n {\n promise\n .then(function()\n {\n this.handleErrorRequests(errorMessage);\n }.bind(this))\n .then(function()\n {\n this.handleSuccessfulRequests(successMessage, refreshAfterSuccess, tableRef);\n $('body').trigger(orion.constants.EventCartProductUpdated);\n\n if (typeof cb === 'function')\n {\n cb();\n }\n }.bind(this))\n .catch(function(error)\n {\n // eslint-disable-next-line no-console\n console.error(error);\n });\n }\n\n /**\n\t * @param successMessage {string}\n\t * @param refreshAfter\n\t * @param tableRef\n\t */\n handleSuccessfulRequests(successMessage, refreshAfter, tableRef)\n {\n if (successMessage !== '')\n {\n displaySuccessFeedbackMessage(successMessage);\n }\n if (refreshAfter)\n {\n tableRef.ajax.reload(() =>\n {\n this.initEvents();\n this.initChildEvents();\n }, false);\n }\n }\n\n handleErrorRequests(errorMessage)\n {\n if (errorMessage !== '')\n {\n displayErrorFeedbackMessage(errorMessage);\n }\n }\n\n showOverlay(data, $overlay, reorder = false)\n {\n $overlay.unbind();\n let $body = $('body');\n $overlay.removeClass('hidden');\n $body.addClass('focus-active');\n\n $body.on('focus-overlay-clicked', () =>\n {\n this.hideOverlay($overlay);\n });\n $overlay.on('click', '.close, .close-overlay', () =>\n {\n this.hideOverlay($overlay);\n });\n $overlay.on('click', '.overlay-cancellation', () =>\n {\n this.handleCancelOrderClick(data);\n this.hideOverlay($overlay);\n });\n $overlay.on('click', '.replace-cart', () =>\n {\n this.handleReplaceCartClick(data, reorder);\n this.hideOverlay($overlay);\n });\n $overlay.on('click', '.add-to-cart', () =>\n {\n this.handleAddListToCartClick(data, reorder);\n this.hideOverlay($overlay);\n });\n $overlay.on('click', '.overlay-edit', () =>\n {\n this.handleAddListToCartClick(data);\n this.hideOverlay($overlay);\n });\n }\n\n hideOverlay($overlay)\n {\n $overlay.addClass('hidden');\n $('body').removeClass('focus-active');\n }\n\n destroyChild(row)\n {\n let $table = $('table', row.child());\n\n $table.detach();\n $table.DataTable().destroy();\n\n // And then hide the row\n row.child.hide();\n }\n\n toggleDetail(tr, row, data)\n {\n if (row.child.isShown())\n {\n // This row is already open - close it\n row.child.hide();\n tr.removeClass('shown');\n tr.find('.js-expand-list-span').removeClass('open');\n }\n else\n {\n // Open this row\n if (typeof row.child() !== 'undefined')\n {\n row.child.show();\n tr.addClass('shown');\n tr.find('.js-expand-list-span').addClass('open');\n }\n else\n {\n this.createChildTable(row, data.orderId);\n tr.addClass('shown');\n tr.find('.js-expand-list-span').addClass('open');\n }\n }\n }\n}\n\nif (document.querySelector('.js-orders') !== null)\n{\n (new Orders()).init();\n}\n","import ShoppinglistClient from './clients/ShoppinglistClient';\nimport Mustache from 'mustache';\nimport { debounce, displayErrorFeedbackMessage, displayInfoFeedbackMessage, displaySuccessFeedbackMessage,\n getTranslation, removeValue } from './utilities';\nimport CartClient from './clients/CartClient';\n\nclass Shoppinglist\n{\n constructor()\n {\n this.shoppingListClient = new ShoppinglistClient();\n this.cartClient = new CartClient();\n\n this.data = [];\n\n this.table = undefined;\n this.itemTables = {};\n this.childRows = null;\n this.selectedRows = {};\n\n this.$itemTableTemplate = $('#shoppinglistItemTable').hide().clone(true);\n\n this.listTemplate = document.querySelector('#shoppinglistListTemplate').innerHTML;\n this.itemElementTemplate = document.querySelector('#shoppinglistItemElementTemplate').innerHTML;\n\n this.selector = '.js-shoppinglist';\n this.itemSelector = '.js-shoppinglist__item';\n this.setAsDefaultButtonSelector = '.js-shoppinglist__set-as-default';\n this.deleteButtonSelector = '.js-shoppinglist__delete-list';\n this.addToCartButtonSelector = '.js-shoppinglist__add-to-cart';\n this.quantitySelector = '.js-shoppinglist__quantity';\n this.createButtonSelector = '.js-shoppinglist__create';\n this.createInputSelector = '.js-shoppinglist__create-input';\n this.editNameButtonSelector = '.js-shoppinglist__edit';\n this.oldNameSelector = '.js-shoppinglist__old-name';\n this.isDefaultCheckboxSelector = '.js-shoppinglist__edit-is-default';\n this.editNameInputSelector = '.js-shoppinglist__edit-name';\n }\n\n init()\n {\n this.table = $(this.selector).DataTable({\n ajax: {\n url: this.shoppingListClient.uri,\n dataSrc: this.shoppingListClient.dataSrc,\n error: function(jqXHR)\n {\n if (jqXHR.status == 404)\n {\n this.table.clear().draw();\n }\n }.bind(this)\n },\n ordering: false,\n pageLength: 20,\n searching: false,\n lengthChange: false,\n language: this.datatableTexts(),\n columnDefs: [{\n targets: 0,\n orderable: false,\n render: function(data, type, row)\n {\n return Mustache.render(this.listTemplate, { shoppinglistList: row });\n }.bind(this)\n }],\n drawCallback: function()\n {\n if (this.childRows)\n {\n this.childRows.every(function()\n {\n this.nodes().to$()\n .click();\n });\n\n // Reset childRows so loop is not executed each draw\n this.childRows = null;\n }\n\n $('#shoppinglist thead').hide();\n $('#shoppinglistItemTable thead').hide();\n this.initEvents();\n }.bind(this),\n createdRow: function(row, data)\n {\n let $row = $(row);\n\n $row.attr('data-shoppinglist-id', data.id);\n $row.addClass('shoppinglist-list__item dt--shadow dt--bp dt--shadow-mobile js-shoppinglist__item ' +\n 'js-gtm-shoppinglist__list-head--open');\n }\n });\n }\n\n initEvents()\n {\n let self = this;\n\n $(this.createButtonSelector).off('click');\n $(this.createButtonSelector).on('click', function()\n {\n self.handleCreateButtonClick(self.table.data().count());\n });\n\n $(this.editNameButtonSelector).off('click');\n $(this.editNameButtonSelector).on('click', function()\n {\n let $tr = $(this);\n let row = self.table.row($tr.parents(self.itemSelector));\n let data = row.data();\n\n self.showOverlay(data, $('#overlay-edit-shoppinglist'));\n });\n\n $(this.setAsDefaultButtonSelector).off('click');\n $(this.setAsDefaultButtonSelector).on('click', function()\n {\n let $tr = $(this);\n let row = self.table.row($tr.parents(self.itemSelector));\n let data = row.data();\n\n self.handleSetAsDefaultClick(data);\n });\n\n $(this.deleteButtonSelector).off('click');\n $(this.deleteButtonSelector).on('click', function()\n {\n let $tr = $(this);\n let row = self.table.row($tr.parents(self.itemSelector));\n let data = row.data();\n\n self.showOverlay(data, $('#overlay-delete-shoppinglist'));\n });\n\n $(this.addToCartButtonSelector).off('click');\n $(this.addToCartButtonSelector).on('click', function()\n {\n let $tr = $(this);\n let row = self.table.row($tr.parents(self.itemSelector));\n let data = row.data();\n\n let cartQuantity = $('#basket-onsite').data('cart-quantity');\n\n if (cartQuantity === 0)\n {\n self.handleAddListToCartClick(data);\n }\n else\n {\n self.showOverlay(data, $('#overlay-shoppinglist-to-cart'));\n }\n });\n\n $(this.selector).off('click');\n $(this.selector).on('click', this.itemSelector, function(e)\n {\n let $tr = $(this);\n let row = self.table.row($tr);\n let data = row.data();\n\n self.handleItemClick(e, $tr, row, data);\n });\n }\n\n handleItemClick(e, $tr, row, data)\n {\n if (e === null\n\t\t\t|| !$(e.target).hasClass('js-do-not-toggle-list')\n\t\t\t&& !$(e.target).parents('.js-do-not-toggle-list').length\n )\n {\n this.toggleDetail($tr, row, data);\n this.childRows = this.table.rows($('.shown'));\n }\n }\n\n datatableTexts()\n {\n return {\n 'paginate': {\n 'previous': '',\n 'next': '',\n },\n 'processing': getTranslation('content.shoppinglist.processing'),\n 'loadingRecords': getTranslation('content.shoppinglist.loading'),\n 'info': getTranslation('content.shoppinglist.info.entries'),\n 'infoEmpty': getTranslation('content.shoppinglist.info.entries.empty'),\n 'emptyTable': getTranslation('content.shoppinglist.info.list.empty'),\n 'select': {\n 'rows': {\n _: '(%d) '\n\t\t\t\t\t\t+ getTranslation('content.shoppinglist.info.selected.article'),\n },\n }\n };\n }\n\n initChildEvents()\n {\n $(this.selector).off('input', this.quantitySelector);\n $(this.selector).on('input', this.quantitySelector, event =>\n {\n if (Number.parseInt(event.target.value) <= 0)\n {\n event.target.value = 1;\n }\n });\n\n $(this.selector).off('blur', this.quantitySelector);\n $(this.selector).on('blur', this.quantitySelector, event =>\n {\n if (event.target.value === '')\n {\n event.target.value = 1;\n }\n });\n\n $(this.selector).off('change', this.quantitySelector);\n $(this.selector).on('change', this.quantitySelector, debounce((event) =>\n {\n let $qtyInput = $(event.target);\n\n let shoppinglistId = $qtyInput.data('shoppinglist-id');\n let productNumber = $qtyInput.data('product-id');\n let quantity = $qtyInput.val();\n\n this.handleQtyChange(productNumber, quantity, shoppinglistId);\n }));\n }\n\n handleQtyChange(productNumber, quantity, shoppinglistId)\n {\n let data = {\n 'productItems': [\n {\n 'productNumber': productNumber.toString(),\n 'quantity': Number.parseInt(quantity)\n }\n ]\n };\n\n this.handleRequestPromise(\n this.shoppingListClient.updateItems(data, shoppinglistId),\n '',\n '',\n false,\n this.itemTables[shoppinglistId],\n () =>\n {\n this.updateTableData(shoppinglistId);\n }\n );\n }\n\n disableFooterButtons(shoppinglistId)\n {\n if (!this.itemTables[shoppinglistId])\n {\n return;\n }\n\n this.itemTables[shoppinglistId].buttons().containers()\n .find('.js-shoppinglist__footer-btn-grp')\n .addClass('disabled');\n }\n\n enableFooterButtons(shoppinglistId)\n {\n if (!this.itemTables[shoppinglistId])\n {\n return;\n }\n\n this.itemTables[shoppinglistId].buttons().containers()\n .find('.js-shoppinglist__footer-btn-grp')\n .removeClass('disabled');\n }\n\n updateTableData(shoppinglistId)\n {\n if (!this.itemTables[shoppinglistId])\n {\n return;\n }\n\n this.disableFooterButtons(shoppinglistId);\n\n let $tr = $(this.itemTables[shoppinglistId].table().container()).parents('tr')\n .prev();\n let row = this.table.row($tr);\n let data = row.data();\n\n this.shoppingListClient.fetchShoppinglist(shoppinglistId)\n .then((response) => response.json())\n .then((shoppinglistData) =>\n {\n data.grandTotalString = shoppinglistData.grandTotalString;\n data.productItemCount = shoppinglistData.productItemCount;\n\n row.data(data);\n\n this.itemTables[shoppinglistId].draw();\n });\n }\n\n updateCsvButton(button, data)\n {\n if (data.productItemCount === 0)\n {\n button.addClass('disabled');\n }\n }\n\n formatOrder(self, order)\n {\n $(order).each(function(k)\n {\n order[k].field = self.matchOrderIdWithColumnName(order[k].column);\n });\n\n return order;\n }\n\n matchOrderIdWithColumnName(orderId)\n {\n switch (orderId)\n {\n case 1:\n return 'productNumber';\n case 2:\n return 'productName';\n case 3:\n return 'undiscountedPrice';\n case 4:\n return 'suggestedRetailPrice';\n case 5:\n return 'discountedPrice';\n case 6:\n return 'quantity';\n case 7:\n return 'subtotalPrice';\n default:\n return null;\n }\n }\n\n createChildTable(row, shoppinglistId)\n {\n let self = this;\n let template = this.$itemTableTemplate.show().clone(true);\n let isEmpty;\n\n row.child(template).show();\n\n let itemTable = template.DataTable({\n ajax: {\n url: this.shoppingListClient.uri + '/' + shoppinglistId + '/items',\n data: function(data)\n {\n return {\n draw: data.draw,\n skip: data.start,\n take: data.length,\n sort: self.formatOrder(self, data.order)// data.order\n };\n },\n dataSrc: function(json)\n {\n return json.response.productItems.map((productItem) =>\n {\n productItem.noveltyFlag = productItem.noveltyFlag !== '0';\n productItem.expiringProductFlag = productItem.expiringProductFlag !== 0;\n productItem.promotionalPackingFlag = productItem.promotionalPackingFlag === 0;\n productItem.privateBrandFlag = productItem.privateBrandFlag !== 0;\n productItem.bargainProductFlag = productItem.bargainProductFlag !== 0;\n productItem.posProductFlag = productItem.posProductFlag !== '0';\n productItem.discountBlock = productItem.discountBlock === 'true';\n\n productItem.isOutOfStock = false;\n productItem.isAvailable = false;\n productItem.isUpcoming = false;\n\n if (productItem.availability === 0)\n {\n productItem.isOutOfStock = true;\n }\n else if (productItem.availability === 1)\n {\n productItem.isAvailable = true;\n }\n else if (productItem.availability === 2)\n {\n productItem.isUpcoming = true;\n }\n\n return productItem;\n });\n }\n },\n dom: 'l\\\n\t\t\t\tf\\\n\t\t\t\tr\\\n\t\t\t\t<\"shoppinglist-table__scroll\"t>\\\n\t\t\t\t<\"shoppinglist__action-wrapper\"\\\n\t\t\t\t<\"shoppinglist-actions__selection\">\\\n\t\t\t\t<\"shoppinglist-actions__pagination\"pi>\\\n\t\t\t\t<\"shoppinglist-actions__basket\">>',\n pageLength: 20,\n rowId: 'productNumber',\n serverSide: true,\n processing: true,\n // order: [[2, 'asc']],\n language: this.datatableTexts(),\n searching: false,\n lengthChange: false,\n columnDefs: [\n {\n targets: 0,\n className: 'shoppinglist-list__select select-checkbox',\n orderable: false,\n render: function(data)\n {\n return Mustache.render(this.itemElementTemplate, {\n shoppinglistListItem: data,\n selectColumn: true\n });\n }.bind(this)\n },\n {\n // Hidden column to sort for product number\n // Sort criteria must be mapped to a column\n // See matchOrderIdWithColumnName(orderId)\n targets: 1,\n visible: false,\n render: function()\n {\n return Mustache.render(this.itemElementTemplate, {\n productNumberColumn: true\n });\n }.bind(this)\n },\n {\n data: null,\n targets: 2,\n orderable: false,\n className: 'shoppinglist-list__product-details',\n render: function(data, type, row)\n {\n let originalSrc = row.productImageUrl.trim();\n let baseSrc = originalSrc.replace('product-main-image', 'product-list-image-thumbnail');\n let newSrc = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)/, '$1-abo/');\n let image = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)\\/(.*?)(\\.jpg)$/, '$1-abo/$2.jpg');\n let retinaImage = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)\\/(.*?)(\\.jpg)$/, '$1-abo/$2-2x.jpg');\n let webPImage = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)\\/(.*?)(\\.jpg)$/, '$1-abo/$2.webp');\n let webPRetinaImage = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)\\/(.*?)(\\.jpg)$/, '$1-abo/$2-2x.webp');\n let avifImage = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)\\/(.*?)(\\.jpg)$/, '$1-abo/$2.avif');\n let avifRetinaImage = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)\\/(.*?)(\\.jpg)$/, '$1-abo/$2-2x.avif');\n\n row.productImageUrl = newSrc;\n row.productImageUrlAvif = avifImage + ', ' + avifRetinaImage + ' 2x';\n row.productImageUrlWebp = webPImage + ', ' + webPRetinaImage + ' 2x';\n row.productImageUrlJpeg = image + ', ' + retinaImage + ' 2x';\n\n return Mustache.render(this.itemElementTemplate, {\n shoppinglistListItem: row,\n productDetailsColumn: true\n });\n }.bind(this),\n createdCell: function(td, _cellData, rowData)\n {\n let $cell = $(td);\n let $availability = $cell.find('i');\n\n if (rowData.isOutOfStock)\n {\n $availability.addClass('out-of-stock');\n }\n else if (rowData.isAvailable)\n {\n $availability.addClass('in-stock');\n }\n else if (rowData.isUpcoming)\n {\n $availability.addClass('out-of-stock');\n }\n }\n },\n {\n targets: 3,\n orderable: false,\n className: 'shoppinglist-list__lp-sp',\n render: function(data, type, row)\n {\n return Mustache.render(this.itemElementTemplate, {\n shoppinglistListItem: row,\n undiscountedPriceColumn: !row.productUnknown\n });\n }.bind(this)\n },\n {\n targets: 4,\n orderable: false,\n className: 'shoppinglist-list__srp',\n render: function(data, type, row)\n {\n return Mustache.render(this.itemElementTemplate, {\n shoppinglistListItem: row,\n suggestedRetailPriceColumn: !row.productUnknown\n });\n }.bind(this)\n },\n {\n targets: 5,\n orderable: false,\n className: 'shoppinglist-list__price',\n render: function(data, type, row)\n {\n return Mustache.render(this.itemElementTemplate, {\n shoppinglistListItem: row,\n discountedPriceColumn: !row.productUnknown\n });\n }.bind(this)\n },\n {\n targets: 6,\n orderable: false,\n className: 'shoppinglist-list__quantity tooltip-wrapper',\n render: function(data, type, row)\n {\n return Mustache.render(this.itemElementTemplate, {\n shoppinglistListItem: row,\n shoppingListId: shoppinglistId,\n quantityColumn: !row.productUnknown && row.availability !== 2\n });\n }.bind(this)\n },\n {\n data: 'subtotalPrice',\n targets: 7,\n orderable: false,\n className: 'shoppinglist-list__total',\n render: function(data, type, row)\n {\n return Mustache.render(this.itemElementTemplate, {\n shoppinglistListItem: row,\n subtotalPriceColumn: !row.productUnknown\n });\n }.bind(this)\n }\n ],\n select: {\n style: 'multi',\n selector: 'td:first-child'\n },\n drawCallback: function()\n {\n let $tr = $(this).parents('tr');\n let row = self.table.row($tr.prev());\n let data = row.data();\n\n isEmpty = itemTable.data().count() === 0;\n\n $tr.addClass('shoppinglist-list__item-table dt--shadow');\n\n if (isEmpty)\n {\n $tr.find('#shoppinglistItemTable_wrapper').empty().append($(this).find('.dataTables_empty'));\n }\n else\n {\n $('#shoppinglistItemTable thead').show();\n $('#shoppinglistItemTable').eq(0)\n .hide();\n\n if (self.selectedRows\n\t\t\t\t\t\t&& self.selectedRows[shoppinglistId]\n\t\t\t\t\t\t&& self.selectedRows[shoppinglistId].length > 0)\n {\n self.selectedRows[shoppinglistId].forEach((productNumber) =>\n {\n itemTable.row('#' + productNumber).select();\n });\n\n\n self.enableFooterButtons(shoppinglistId);\n }\n else\n {\n self.disableFooterButtons(shoppinglistId);\n }\n\n let $csvButton = $tr\n .find('.js-shoppinglist__download-csv');\n\n self.updateCsvButton($csvButton, data);\n\n $('.js-shoppinglist__grand-total').remove();\n $tr.find('#shoppinglistItemTable_wrapper').append(\n ''\n\t\t\t\t\t\t+ getTranslation('content.shoppinglist.detail.sum')\n\t\t\t\t\t\t+ ' '\n\t\t\t\t\t\t+ data.grandTotalString\n\t\t\t\t\t\t+ ''\n );\n }\n\n self.initEvents();\n },\n initComplete: function()\n {\n let $tr = $(this).parents('tr');\n let row = self.table.row($tr.prev());\n let data = row.data();\n\n if (!isEmpty)\n {\n self.initChildEvents();\n\n itemTable.buttons('checkbox', null).container()\n .appendTo($tr.find('.js-shoppinglist__select_all'));\n\n itemTable.buttons('selection', null).container()\n .appendTo($tr.find('.shoppinglist-actions__selection'));\n\n itemTable.buttons('basket', null).container()\n .appendTo($tr.find('.shoppinglist-actions__basket'));\n\n $('.dataTables_paginate').addClass('shoppinglist_pagination');\n self.itemTables[shoppinglistId] = itemTable;\n\n self.createSortSelection(itemTable, this[0]);\n\n let $csvButton = $tr.find('.csv-cell');\n\n $csvButton.data('uid', data.id);\n $csvButton.data('listName', data.name);\n\n self.updateCsvButton($csvButton, data);\n\n $('body').trigger(orion.constants.EventCsvDownloadButtonAppended);\n }\n }\n });\n\n new $.fn.dataTable.Buttons(itemTable, {\n name: 'checkbox',\n buttons: [\n {\n action: function(e)\n {\n let checkbox = e.target.closest('th');\n\n if (!checkbox.classList.contains('selected'))\n {\n this.shoppingListClient.fetchAllItems(shoppinglistId)\n .then((response) => response.json())\n .then((body) =>\n {\n this.selectedRows[shoppinglistId] = Object.keys(body);\n });\n checkbox.classList.add('selected');\n itemTable.rows().select();\n itemTable.draw(false);\n }\n else\n {\n this.selectedRows[shoppinglistId] = [];\n checkbox.classList.remove('selected');\n itemTable.rows().deselect();\n itemTable.draw(false);\n }\n }.bind(this)\n }\n ]\n });\n\n new $.fn.dataTable.Buttons(itemTable, {\n name: 'selection',\n buttons: [\n {\n text: ' '\n\t\t\t\t\t\t+ ''\n\t\t\t\t\t\t+ getTranslation('content.shoppinglist.delete~selection')\n\t\t\t\t\t\t+ '',\n className: 'js-shoppinglist__delete_selected js-gtm-shoppinglist__list-body--delete ' +\n 'js-shoppinglist__footer-btn-grp secondary disabled',\n action: function(e)\n {\n let $tr = $(e.target).parents('tr');\n let row = this.table.row($tr.prev());\n let data = row.data();\n let selectedItems = this.selectedRows[shoppinglistId];\n\n $('.js-shoppinglist-delete-products-count').text(selectedItems.length);\n\n if (selectedItems.length > 1)\n {\n $('.js-overlay-delete-shoppinglist-products-singular').addClass('hidden');\n $('.js-overlay-delete-shoppinglist-products-plural').removeClass('hidden');\n }\n else\n {\n $('.js-overlay-delete-shoppinglist-products-singular').removeClass('hidden');\n $('.js-overlay-delete-shoppinglist-products-plural').addClass('hidden');\n }\n\n this.showOverlay(data, $('#overlay-delete-shoppinglist-products'), selectedItems);\n }.bind(this)\n },\n {\n text: ' '\n\t\t\t\t\t\t+ ''\n\t\t\t\t\t\t+ getTranslation('form.download-shoppinglist-as-csv')\n\t\t\t\t\t\t+ '',\n className: 'csv-cell js-shoppinglist__download-csv js-gtm-shoppinglist__list-body--csv ' +\n 'js-download-shoppinglist-as-csv download-shoppinglist-as-csv secondary',\n }\n ]\n });\n\n new $.fn.dataTable.Buttons(itemTable, {\n name: 'basket',\n buttons: [\n {\n text: ' '\n\t\t\t\t\t\t+ ''\n\t\t\t\t\t\t+ getTranslation('content.shoppinglist.selection.to.basket')\n\t\t\t\t\t\t+ '',\n className: 'shoppinglist_button__selection-to-basket ' +\n 'js-gtm-shoppinglist__list-body-to-basket--open buy--button ' +\n 'js-shoppinglist__footer-btn-grp disabled',\n action: function(e)\n {\n let $tr = $(e.target).parents('tr');\n let row = this.table.row($tr.prev());\n let data = row.data();\n\n this.handleShoppingListChoiceAddToCartClick(data, this.selectedRows[shoppinglistId]);\n }.bind(this)\n }\n ]\n });\n\n itemTable.on('select', ( e, dt, type, indexes ) =>\n {\n let { 0: productNumber } = itemTable.rows(indexes).data().pluck('productNumber');\n\n if (!this.selectedRows || typeof this.selectedRows[shoppinglistId] === 'undefined')\n {\n this.selectedRows[shoppinglistId] = [];\n }\n\n if (!this.selectedRows[shoppinglistId].includes(productNumber))\n {\n this.selectedRows[shoppinglistId].push(productNumber);\n }\n\n if (this.selectedRows[shoppinglistId].length > 0)\n {\n this.enableFooterButtons(shoppinglistId);\n }\n });\n\n itemTable.on('deselect', ( e, dt, type, indexes ) =>\n {\n if (!this.selectedRows || typeof this.selectedRows[shoppinglistId] === 'undefined')\n {\n this.selectedRows[shoppinglistId] = [];\n }\n\n let { 0: productNumber } = itemTable.rows(indexes).data().pluck('productNumber');\n\n this.selectedRows[shoppinglistId] = removeValue(this.selectedRows[shoppinglistId], productNumber);\n\n if (this.selectedRows[shoppinglistId].length === 0)\n {\n this.disableFooterButtons(shoppinglistId);\n }\n });\n }\n\n createSortSelection(itemTable, currentTable)\n {\n let filterSection = document.createElement('div');\n let sortSelection = document.createElement('select');\n let sortPlaceholder = document.createElement('option');\n\n filterSection.classList.add('shoppinglist-list__sort', 'select-button-container');\n sortSelection.classList.add('js-gtm-shoppinglist__list-body--sort');\n\n sortPlaceholder.value = '';\n sortPlaceholder.text = getTranslation('content.shoppinglist.child.sort.recent');\n sortPlaceholder.selected;\n sortPlaceholder.disabled;\n sortSelection.appendChild(sortPlaceholder);\n\n let { 0: columns } = itemTable.columns();\n\n const srpColumnId = 4;\n\n for (let i = 1; i < columns.length; i++)\n {\n if (i === srpColumnId)\n {\n continue;\n }\n\n let optionAscending = document.createElement('option');\n let optionDescending = document.createElement('option');\n\n optionAscending.value = columns[i];\n optionAscending.text = getTranslation('content.shoppinglist.child.header.col.' + i) + ' '\n + getTranslation('content.shoppinglist.child.sort.ascending');\n sortSelection.appendChild(optionAscending);\n\n optionDescending.value = columns[i] * -1;\n optionDescending.text = getTranslation('content.shoppinglist.child.header.col.' + i) + ' '\n + getTranslation('content.shoppinglist.child.sort.descending');\n sortSelection.appendChild(optionDescending);\n }\n\n filterSection.append(sortSelection);\n $(filterSection).prependTo($(currentTable).closest('#shoppinglistItemTable_wrapper'));\n\n sortSelection.addEventListener('change', function()\n {\n if (this.value > 0)\n {\n itemTable.order([this.value, 'asc']).draw();\n }\n else if (this.value < 0)\n {\n itemTable.order([this.value * -1, 'desc']).draw();\n }\n else\n {\n itemTable.order([0, 'asc']).draw();\n }\n });\n }\n\n handleCreateButtonClick(shoppinglistCount)\n {\n let feedbackMessage = $('#feedback-shoppinglist-new-ok').text();\n let name = $(this.createInputSelector).val();\n\n if (name === '')\n {\n name = $(this.createInputSelector).attr('placeholder');\n }\n\n let newData = {\n 'name': name,\n 'isDefault': shoppinglistCount === 0\n };\n\n let promise = this.shoppingListClient.createShoppinglist(newData);\n\n this.handleRequestPromise(promise, feedbackMessage, '', true);\n }\n\n handleSetAsDefaultClick(data)\n {\n let newData = {\n 'isDefault': true,\n 'name': data.name\n };\n\n let feedbackMessage = $('#feedback-shoppinglist-delete-new-default-list').text();\n let successMessage = feedbackMessage.replace(/%s/g, data.name);\n\n let promise = this.shoppingListClient.update(newData, data.id);\n\n this.handleRequestPromise(promise, successMessage, '', true);\n }\n\n handleEditShoppingListClick(data)\n {\n let promise = this.shoppingListClient.update(data, data.id);\n\n this.handleRequestPromise(promise, '', '', true);\n }\n\n handleDeleteListClick(data)\n {\n let successMessage = $('#feedback-shoppinglist-delete-ok').text();\n\n let promise = this.shoppingListClient.deleteShoppinglist(data.id);\n\n this.handleRequestPromise(promise, successMessage, '', true);\n }\n\n handleAddListToCartClick(data)\n {\n let successMessage = $('#feedback-shoppinglist-add-to-cart-ok').text();\n let errorMessage = $('#feedback-shoppinglist-add-to-cart-failed').text();\n\n let promise = this.shoppingListClient.addToCart(data.id);\n\n let cb = () =>\n {\n this.createToCartFeedback(\n promise,\n successMessage,\n errorMessage,\n data.productItemCount\n );\n };\n\n this.handleRequestPromise(\n promise,\n '',\n '',\n false,\n this.table,\n cb\n );\n }\n\n handleAddItemsToCartClick(data, selectedItems)\n {\n let successMessage = $('#feedback-shoppinglist-add-to-cart-choice-ok').text();\n let errorMessage = $('#feedback-shoppinglist-add-to-cart-choice-failed').text();\n\n let promise = this.shoppingListClient.addItemsToCart(selectedItems, data.id);\n\n let cb = () =>\n {\n this.createToCartFeedback(\n promise,\n successMessage,\n errorMessage,\n selectedItems.productItems.length\n );\n };\n\n this.handleRequestPromise(\n promise,\n '',\n '',\n false,\n this.table,\n cb\n );\n }\n\n handleReplaceCartClick(data)\n {\n let successMessage = $('#feedback-shoppinglist-replace-cart-ok').text();\n let errorMessage = $('#feedback-shoppinglist-replace-cart-failed').text();\n\n let promise = this.shoppingListClient.replaceCart(data.id);\n\n let cb = () =>\n {\n this.createToCartFeedback(\n promise,\n successMessage,\n errorMessage,\n data.productItemCount\n );\n };\n\n this.handleRequestPromise(\n promise,\n '',\n '',\n false,\n this.table,\n cb\n );\n }\n\n handleReplaceCartWithSelectionClick(data, selectedItems)\n {\n let successMessage = $('#feedback-shoppinglist-replace-cart-choice-ok').text();\n let errorMessage = $('#feedback-shoppinglist-replace-cart-choice-failed').text();\n\n let listItems = this.itemTables[data.id].rows().data().toArray();\n let upcomingItemsCount = 0;\n let unknownItemsCount = 0;\n\n selectedItems.productItems.forEach(selectedItem =>\n {\n let itemData = listItems.find(listItem => listItem.productNumber === selectedItem.productNumber);\n\n if (itemData.isUpcoming)\n {\n upcomingItemsCount += 1;\n }\n\n if (itemData.productUnknown)\n {\n unknownItemsCount += 1;\n }\n });\n\n if (selectedItems.productItems.length > upcomingItemsCount + unknownItemsCount)\n {\n this.cartClient.delete().then(() =>\n {\n let promise = this.shoppingListClient.addItemsToCart(selectedItems, data.id);\n\n let cb = () =>\n {\n this.createToCartFeedback(\n promise,\n successMessage,\n errorMessage,\n selectedItems.productItems.length\n );\n };\n\n this.handleRequestPromise(\n promise,\n '',\n '',\n false,\n this.table,\n cb\n );\n });\n }\n else\n {\n let promise = this.shoppingListClient.addItemsToCart(selectedItems, data.id);\n\n this.createToCartFeedback(promise, successMessage, errorMessage, selectedItems.productItems.length);\n }\n }\n\n handleShoppingListChoiceAddToCartClick(data, selectedData)\n {\n let items = this.productNumbersArrayToBodyData(selectedData);\n let cartQuantity = $('#basket-onsite').data('cart-quantity');\n\n if (cartQuantity === 0)\n {\n let successMessage = $('#feedback-shoppinglist-add-to-cart-choice-ok').text();\n let errorMessage = $('#feedback-shoppinglist-add-to-cart-choice-failed').text();\n\n let promise = this.shoppingListClient.addItemsToCart(items, data.id);\n\n let cb = () =>\n {\n this.createToCartFeedback(\n promise,\n successMessage,\n errorMessage,\n selectedData.length\n );\n };\n\n this.handleRequestPromise(\n promise,\n '',\n '',\n false,\n this.table,\n cb\n );\n }\n else\n {\n this.showOverlay(data, $('#overlay-shoppinglistitems-to-cart'), items);\n }\n }\n\n handleShoppingListChoiceDeleteClick(data, selectedData)\n {\n let items = this.productNumbersArrayToBodyData(selectedData);\n let successMessage = $('#feedback-shoppinglist-delete-choices-ok').text();\n\n let promise = this.shoppingListClient.deleteItems(items, data.id);\n\n this.handleRequestPromise(\n promise,\n successMessage,\n '',\n true,\n this.itemTables[data.id],\n () =>\n {\n this.updateTableData(data.id);\n }\n );\n\n selectedData.forEach((productNumber) =>\n {\n this.selectedRows[data.id] = removeValue(this.selectedRows[data.id], productNumber);\n });\n }\n\n createToCartFeedback(promise, successMessage, errorMessage, productItemCount)\n {\n promise.then((response) => response.json()).then((data) =>\n {\n if (data.upcomingProducts.length + data.unknownProducts.length < productItemCount)\n {\n displaySuccessFeedbackMessage(successMessage);\n }\n else\n {\n displayErrorFeedbackMessage(errorMessage);\n }\n\n if (data.upcomingProducts.length)\n {\n displayInfoFeedbackMessage(this.createBlockedProductsFeedback('upcoming', data.upcomingProducts));\n }\n\n if (data.unknownProducts.length)\n {\n displayErrorFeedbackMessage(this.createBlockedProductsFeedback('unknown', data.unknownProducts));\n }\n });\n }\n\n createBlockedProductsFeedback(type, productNumbers)\n {\n let feedbackSelector =\n `meta[name='content.shoppinglist.add.to.cart.${type}.products']`;\n let feedbackMessage = document.querySelector(feedbackSelector).content;\n let productsString = '';\n\n productNumbers.forEach((productNumber, index) =>\n {\n productsString += (index === 0 ? productNumber : ', ' + productNumber);\n });\n\n feedbackMessage = feedbackMessage.replace('%s', productsString);\n\n return feedbackMessage;\n }\n\n productNumbersArrayToBodyData(productNumbers)\n {\n let productItems = [];\n\n productNumbers.forEach((productNumber) =>\n {\n productItems.push({\n 'productNumber': productNumber\n });\n });\n\n return {\n 'productItems': productItems\n };\n }\n\n /**\n\t * @param promise {Promise}\n\t * @param successMessage {string}\n\t * @param errorMessage {string}\n\t * @param refreshAfterSuccess {boolean}\n\t * @param tableRef\n\t * @param cb\n\t */\n handleRequestPromise(\n promise,\n successMessage,\n errorMessage = '',\n refreshAfterSuccess = false,\n tableRef = this.table,\n cb = null\n )\n {\n promise\n .then(function()\n {\n this.handleErrorRequests(errorMessage);\n }.bind(this))\n .then(function()\n {\n this.handleSuccessfulRequests(successMessage, refreshAfterSuccess, tableRef);\n $('body').trigger(orion.constants.EventCartProductUpdated);\n if (typeof cb === 'function')\n {\n cb();\n }\n }.bind(this))\n .catch(function(error)\n {\n // eslint-disable-next-line no-console\n console.error(error);\n });\n }\n\n /**\n\t * @param successMessage {string}\n\t * @param refreshAfter\n\t * @param tableRef\n\t */\n handleSuccessfulRequests(successMessage, refreshAfter, tableRef)\n {\n if (successMessage !== '')\n {\n displaySuccessFeedbackMessage(successMessage);\n }\n if (refreshAfter)\n {\n tableRef.ajax.reload(() =>\n {\n this.initEvents();\n this.initChildEvents();\n }, false);\n }\n }\n\n handleErrorRequests(errorMessage)\n {\n if (errorMessage !== '')\n {\n displayErrorFeedbackMessage(errorMessage);\n }\n }\n\n showOverlay(data, $overlay, selectedItems)\n {\n $overlay.unbind();\n let $body = $('body');\n\n $overlay.removeClass('hidden');\n $body.addClass('focus-active');\n\n $body.on('focus-overlay-clicked', () =>\n {\n this.hideOverlay($overlay);\n });\n $overlay.on('click', '.close, .close-overlay', () =>\n {\n this.hideOverlay($overlay);\n });\n $overlay.on('click', '.delete-shoppinglist', () =>\n {\n this.handleDeleteListClick(data);\n this.hideOverlay($overlay);\n });\n $overlay.on('click', '.js-delete-shoppinglist-products', () =>\n {\n this.handleShoppingListChoiceDeleteClick(data, selectedItems);\n this.hideOverlay($overlay);\n });\n $overlay.on('click', '.replace-cart', () =>\n {\n this.handleReplaceCartClick(data);\n this.hideOverlay($overlay);\n });\n $overlay.on('click', '.add-to-cart', () =>\n {\n this.handleAddListToCartClick(data);\n this.hideOverlay($overlay);\n });\n $overlay.on('click', '.replace-choice-in-cart', () =>\n {\n this.handleReplaceCartWithSelectionClick(data, selectedItems);\n this.hideOverlay($overlay);\n });\n $overlay.on('click', '.add-choice-to-cart', () =>\n {\n this.handleAddItemsToCartClick(data, selectedItems);\n this.hideOverlay($overlay);\n });\n\n if ($overlay.is('#overlay-edit-shoppinglist'))\n {\n let oldName = data.name;\n let [overlay] = $overlay;\n\n overlay.querySelector(this.oldNameSelector).innerHTML = oldName;\n // overlay.querySelector(this.editNameInputSelector).value = oldName shows html entities\n // As a workaround we insert overlay.querySelector(this.oldNameSelector).innerHTML\n overlay.querySelector(this.editNameInputSelector).value =\n overlay.querySelector(this.oldNameSelector).innerHTML;\n\n // Tue irgendwas mit der Checkbox\n overlay.querySelector(this.isDefaultCheckboxSelector).checked = data.isDefault;\n if (data.isDefault)\n {\n $overlay.find('.js-shoppinglist__is-default').removeClass( 'hidden' );\n $overlay.find('.js-default-checkbox-container').addClass( 'hidden' );\n }\n else\n {\n $overlay.find('.js-shoppinglist__is-default').addClass( 'hidden' );\n $overlay.find('.js-default-checkbox-container').removeClass( 'hidden' );\n }\n\n $overlay.on('click', '.js-edit-shoppinglist-save', () =>\n {\n let newName = overlay.querySelector(this.editNameInputSelector).value;\n let isDefault = overlay.querySelector(this.isDefaultCheckboxSelector).checked;\n\n if (data.name != newName || data.isDefault != isDefault)\n {\n data.name = newName;\n data.isDefault = isDefault;\n\n this.handleEditShoppingListClick(data);\n }\n\n this.hideOverlay($overlay);\n });\n }\n }\n\n hideOverlay($overlay)\n {\n $overlay.addClass('hidden');\n $('body').removeClass('focus-active');\n }\n\n destroyChild(row)\n {\n let $table = $('table', row.child());\n\n $table.detach();\n $table.DataTable().destroy();\n\n // And then hide the row\n row.child.hide();\n }\n\n toggleDetail(tr, row, data)\n {\n if (row.child.isShown())\n {\n // This row is already open - close it\n row.child.hide();\n tr.removeClass('shown');\n tr.find('.js-expand-list-span').removeClass('open');\n }\n else\n {\n // Open this row\n if (typeof row.child() !== 'undefined')\n {\n row.child.show();\n tr.addClass('shown');\n tr.find('.js-expand-list-span').addClass('open');\n }\n else\n {\n this.createChildTable(row, data.id);\n tr.addClass('shown');\n tr.find('.js-expand-list-span').addClass('open');\n }\n }\n }\n}\n\nif (document.querySelector('.js-shoppinglist') !== null)\n{\n (new Shoppinglist()).init();\n}\n","jQuery(function($)\n{\n let\n api = orion.api.b2bApiKey,\n $showApiKeyButton = $('.js-show-api-key-action');\n\n function showApiKey(e)\n {\n e.preventDefault();\n\n let elementId = $(this).attr('id');\n // element id ends with -\n // both parameters needed for api call:\n let elementIdRegEx = /(\\w+)-(\\d+)$/;\n let match = elementIdRegEx.exec(elementId);\n let [, publicAccessId] = match;\n let [,, timestamp] = match;\n\n var $feedbackContainer = $('');\n $feedbackContainer.addClass('feedback-container');\n\n $(this).addClass('loading');\n\n $(this).prepend($feedbackContainer);\n\n let $that = $(this);\n\n api.fetchApiKey(publicAccessId, timestamp)\n .done(function(data)\n {\n // replace div/span contents of the cell with API key\n $that.parent().find('.js-api-key-element').html(data);\n $that.parent().find('.js-api-key-container').show();\n $that.removeClass('loading');\n $that.find('.feedback-container').remove();\n $that.hide();\n })\n .fail(function()\n {\n // default contents is the error message. hide copy-to-clipboard\n // if no key is shown:\n $that.parent().find('.js-copy-api-key-to-clipboard-trigger').hide();\n $that.parent().find('.js-api-key-container').show();\n $that.removeClass('loading');\n $that.find('.feedback-container').remove();\n $that.hide();\n });\n }\n\n $showApiKeyButton.on('click', showApiKey);\n});\n","jQuery(function($)\n{\n if ($('#checkout-address-b2b').length === 0)\n {\n return;\n }\n\n var\n fixBackground = 'no-scroll',\n $body = $('body');\n\n /**\n\t * @type {string}\n\t */\n var currentClass = 'current';\n\n /**\n\t * @type {jQuery}\n\t */\n var $submitButton = $('button[name=\\'submit\\']');\n\n /**\n\t * @type {jQuery}\n\t */\n var $formArrangement = $('#checkout-address-form-arrangement');\n\n /**\n\t * @type {jQuery}\n\t */\n var $formShipping = $('#checkout-address-form-shipping');\n\n /**\n\t * @type {jQuery}\n\t */\n var $formBilling = $('#checkout-address-form-billing');\n\n /**\n\t * @type {jQuery}\n\t */\n var $formNewAddress = $('.js-form-address-overlay');\n\n /**\n\t * @type {jQuery}\n\t */\n var $formTriggers = $('.js-form-trigger');\n\n /**\n\t * @type {jQuery}\n\t */\n var $orderFormShippingMode = $('#orderFormShippingMode');\n\n /**\n\t * @type {jQuery}\n\t */\n var $orderFormShippingAddressId = $('#orderFormShippingAddressId');\n\n /**\n\t * @type {jQuery}\n\t */\n var $addressList = $('.js-alternative-address-id');\n\n var addressBox = document.querySelector('.js-alternative-address-box');\n\n function init()\n {\n switch ($('[class*=js-radio-checked]').find('input:checked')\n .val())\n {\n case 'Billing':\n $formShipping.hide();\n $formArrangement.hide();\n break;\n case 'Shipping':\n $formBilling.hide();\n $formArrangement.hide();\n deactivateSubmitButton();\n updateShippingAddressList();\n updateOrderFormShippingAddressId();\n break;\n case 'B2BPermanentShippingOption':\n default:\n $formBilling.hide();\n $formShipping.hide();\n $('span[data-target-id=checkout-address-form-arrangement]').addClass(currentClass)\n .find('input')\n .prop('checked', true);\n }\n initEvents();\n }\n\n function hideForms()\n {\n $formArrangement.hide();\n $formBilling.hide();\n $formShipping.hide();\n }\n\n function deactivateSubmitButton()\n {\n $submitButton.addClass('disabled');\n }\n\n function activateSubmitButton()\n {\n $submitButton.removeClass('disabled');\n }\n\n function initEvents()\n {\n $formTriggers.on('click', handleClick);\n $('#new-address').on('submit', function(event)\n {\n event.preventDefault();\n });\n $('#new-address').on(orion.constants.EventFormValidationComplete, function()\n {\n let $form = $(this);\n\n if (typeof $form.data('valid') != 'undefined' && $form.data('valid') == true)\n {\n postNewAddress();\n }\n });\n\n $('body').on('change', '.js-alternative-address-id', changeSelectedAddressFlag);\n }\n\n function removeSelectedAddressFlags()\n {\n $('body').find('.js-alternative-address-entry')\n .each(function()\n {\n $(this).removeClass('default');\n });\n }\n\n function changeSelectedAddressFlag()\n {\n removeSelectedAddressFlags();\n $('.js-alternative-address-id option:selected').addClass('default');\n updateOrderFormShippingAddressId();\n }\n\n function fetchTargetId($element)\n {\n return $element.data('targetId');\n }\n\n function handleClick()\n {\n var $element = $(this);\n var targetId = fetchTargetId($element);\n var $target = $('#' + targetId);\n\n $('span.' + currentClass).removeClass(currentClass);\n $element.addClass(currentClass);\n $element.find('input').prop('checked', true);\n\n hideForms();\n\n if (typeof targetId != 'undefined' && $target.length > 0)\n {\n $target.show();\n }\n setStates($element);\n return false;\n }\n\n function setStates($element)\n {\n switch ($element.find('input').prop('id'))\n {\n case '1': {\n activateSubmitButton();\n removeOrderFormShippingAddressId();\n break;\n }\n case '2': {\n activateSubmitButton();\n removeOrderFormShippingAddressId();\n break;\n }\n case '3':\n default: {\n deactivateSubmitButton();\n updateShippingAddressList();\n }\n }\n $orderFormShippingMode.val($element.find('input').val());\n }\n\n function updateOrderFormShippingAddressId()\n {\n /**\n\t\t * @type {jQuery}\n\t\t */\n var $addressEntries = $('.js-alternative-address-id option');\n\n $addressEntries.each(function()\n {\n if ($(this).hasClass('default'))\n {\n var $input = $(this);\n\n setOrderFormShippingAddressId($input.val());\n $submitButton.removeClass('disabled');\n addressBox.classList.remove('hidden');\n }\n });\n }\n\n function removeOrderFormShippingAddressId()\n {\n $orderFormShippingAddressId.val('');\n }\n\n function setOrderFormShippingAddressId($id)\n {\n $orderFormShippingAddressId.val($id);\n }\n\n function updateShippingAddressList()\n {\n var $promise = $.ajax('/api-customer-de/shipping-addresses', {\n cache: false,\n headers: {\n 'Accept': 'application/json',\n },\n method: 'GET',\n dataType: 'json',\n statusCode: {\n 404: function()\n {\n addressBox.classList.add('hidden');\n /* TODO show feedback */\n }\n }\n });\n\n $promise.done(function(data)\n {\n clearShippingAddressList();\n var $defaultId = data['defaultShippingAddressId'];\n var $items = data['shippingAddresses'];\n\n $.each($items, function(_, value)\n {\n insertShippingAddressEntry(value, $defaultId);\n });\n\n updateOrderFormShippingAddressId();\n });\n }\n\n function postNewAddress()\n {\n var $data = {\n 'shippingMode': 'Shipping',\n 'shippingAddress': {\n 'addressType': $('input[name=\\'shippingAddress[addressType]\\']').val(),\n 'firstName': $('input[name=\\'shippingAddress[firstName]\\']').val(),\n 'lastName': $('input[name=\\'shippingAddress[lastName]\\']').val(),\n 'street': $('input[name=\\'shippingAddress[street]\\']').val(),\n 'zipcode': $('input[name=\\'shippingAddress[zipcode]\\']').val(),\n 'city': $('input[name=\\'shippingAddress[city]\\']').val(),\n 'countryCode': $('select[name=\\'shippingAddress[countryCode]\\']').val(),\n 'additionalLine': $('input[name=\\'shippingAddress[additionalLine]\\']').val(),\n 'isDefault': true\n }\n };\n\n $.ajax('/api-customer-de/shipping-addresses', {\n cache: false,\n headers: {\n 'Accept': 'application/json',\n },\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify($data),\n method: 'POST',\n statusCode: {\n 201: function()\n {\n foldNewAddress();\n updateShippingAddressList();\n },\n 400: function()\n {\n console.log('Bad Request - new address could not be created.');\n },\n 403: function()\n {\n console.log('Forbidden. Client must be authenticated and use valid session');\n }\n }\n });\n }\n\n function foldNewAddress()\n {\n $formNewAddress.addClass('hidden');\n $body.removeClass(fixBackground + ' focus-active');\n }\n\n function clearShippingAddressList()\n {\n $addressList.empty();\n }\n\n function insertShippingAddressEntry($address, $defaultId)\n {\n var defaultClass = ($defaultId == $address['addressId']) ? ' default' : '';\n var selectedAttribute = (defaultClass != '') ? ' selected' : '';\n\n\n var $html = '';\n\n $addressList.append($html);\n }\n\n init();\n});\n","import Mustache from 'mustache';\nimport { displaySuccessFeedbackMessage, displayInfoFeedbackMessage, displayErrorFeedbackMessage, getTranslation,\n stringToHTML, debounce } from './utilities';\nimport CartClient from './clients/CartClient';\nimport ShoppinglistTablesOverlay from './shoppinglists-tables-overlay';\n\nclass Cart\n{\n constructor()\n {\n this.cartClient = new CartClient();\n this.shoppinglistTablesOverlay = new ShoppinglistTablesOverlay();\n\n this.table = undefined;\n this.filteredProductsCount = null;\n this.filteredProducts = {};\n this.selectedRows = {};\n\n this.itemElementTemplate = document.querySelector('#basketItemElementTemplate').innerHTML;\n this.summaryTemplate = document.querySelector('#basketSummaryTemplate').innerHTML;\n this.voucherCodeTemplate = document.querySelector('#basketVoucherCodeTemplate').innerHTML;\n this.fixedPriceOfferExpiryTemplate = document.querySelector('#fixedPriceOfferExpiryTemplate').innerHTML;\n\n this.selector = '.js-basket';\n this.itemSelector = '.js-basket__item';\n this.deleteButtonSelector = '.js-basket__delete-list';\n this.addToCartButtonSelector = '.js-basket__add-to-cart';\n this.quantitySelector = '.js-basket__quantity';\n this.quantityToSellingUnitSelector = '.js-quantity-to-selling-unit';\n this.summarySelector = '.js-basket__summary';\n this.summarySelectionInfoSelector = '.js-basket__selection-info';\n this.summaryContentSelector = '.js-basket__summary-content';\n this.actionsWrapperSelector = '.js-basket__actions-wrapper';\n this.fixedPriceOfferAndShoppinglistAndSummaryWrapperSelector =\n '.js-basket__fixed-price-offer-and-shoppinglist-and-summary-wrapper';\n this.fixedPriceOfferAndShoppinglistWrapperSelector = '.js-basket__fixed-price-offer-and-shoppinglist-wrapper';\n this.shoppinglistWrapperSelector = '.js-basket__shoppinglist-wrapper';\n this.fixedPriceOfferWrapperSelector = '.js-basket__fixed-price-offer-wrapper';\n this.actionsShoppinglistSelector = '.js-basket__actions--shoppinglist';\n this.actionsCartSelector = '.js-basket__actions--cart';\n this.checkoutButtonSelector = '.js-basket__checkout-button';\n this.voucherInputSelector = '.js-voucher-input';\n this.voucherButtonSelector = '.js-voucher-button';\n this.selectAllButtonSelector = '.js-basket__select_all--button';\n\n this.filters = [];\n this.urlSuffix = '';\n\n this.containsBulkyProducts = false;\n this.containsMarketplaceProducts = false;\n this.containsUnavailableProducts = false;\n\n this.filteredItemsFetched = false;\n\n this.bulkyFeedbackmessageShown = false;\n this.marketplaceFeedbackmessageShown = false;\n\n this.checkboxContainerBulky = document.querySelector('.js-checkbox--bulky');\n this.checkboxContainerMarketplace = document.querySelector('.js-checkbox--marketplace');\n this.checkboxContainerAvailability = document.querySelector('.js-checkbox--availability');\n this.checkboxBulky = document.querySelector('.js-checkbox--bulky input');\n this.checkboxMarketplace = document.querySelector('.js-checkbox--marketplace input');\n this.checkboxAvailability = document.querySelector('.js-checkbox--availability input');\n this.filterResetButton = document.querySelector('.js-filter--reset-button');\n\n this.isFixedPriceOffer = document.querySelector('.js-fixed-price-offer') ? true : false;\n\n this.isShoppinglistTablesOverlayInitialized = false;\n }\n\n init()\n {\n let isEmpty;\n\n this.table = $(this.selector).DataTable({\n ajax: {\n url: this.cartClient.uri + '/items',\n data: function(data)\n {\n let dataset = {\n skip: data.start,\n take: data.length,\n };\n\n dataset.sort = this.formatOrder(this, data.order);\n\n return dataset;\n }.bind(this),\n dataSrc: (json) =>\n {\n let data = json.response.productItems.map((productItem) =>\n {\n productItem.noveltyFlag = productItem.noveltyFlag !== '0';\n productItem.expiringProductFlag = productItem.expiringProductFlag !== 0;\n productItem.promotionalPackingFlag = productItem.promotionalPackingFlag === 0;\n productItem.bargainProductFlag = productItem.bargainProductFlag !== 0;\n productItem.posProductFlag = productItem.posProductFlag !== '0';\n productItem.discountBlock = productItem.discountBlock === 'true';\n\n productItem.isAvailable = false;\n productItem.isUpcoming = false;\n\n if (productItem.availability === 0)\n {\n productItem.isOutOfStock = true;\n }\n else if (productItem.availability === 1)\n {\n productItem.isAvailable = true;\n }\n else if (productItem.availability === 2)\n {\n productItem.isUpcoming = true;\n }\n\n productItem.isAdvertisingMaterial = productItem.productType == 'advertisingMaterial';\n\n return productItem;\n });\n\n this.filteredProductsCount = json.recordsFiltered;\n this.filteredProducts = json.response.productItems;\n\n this.containsUnavailableProducts = json.notAvailableProductItemCount >= 1;\n this.containsBulkyProducts = json.checkoutDataTags.includes('bulkyGoodsFlag');\n this.containsMarketplaceProducts = json.checkoutDataTags.includes('marketplaceNotAllowedFlag');\n\n return data;\n }\n },\n dom: 'l\\\n\t\t\t\tf\\\n\t\t\t\tr\\\n\t\t\t\t<\"basket-list-table__scroll table--scroll-mobile\"t>\\\n\t\t\t\t<\"' + this.fixedPriceOfferAndShoppinglistAndSummaryWrapperSelector\n + ' basket-list__fixed-price-offer-and-shoppinglist-and-summary-wrapper\"\\\n\t\t\t\t<\"' + this.fixedPriceOfferAndShoppinglistWrapperSelector\n + ' basket-list__fixed-price-offer-and-shoppinglist-wrapper\"\\\n\t\t\t\t<\"' + this.fixedPriceOfferWrapperSelector + ' basket-list__fixed-price-offer-wrapper\">\\\n\t\t\t\t<\"' + this.shoppinglistWrapperSelector + ' basket-list__shoppinglist-wrapper\">>\\\n\t\t\t\t<\"' + this.summarySelector + ' list-information\">>\\\n\t\t\t\t<\"' + this.actionsWrapperSelector + ' basket-list__actions-wrapper\">\\\n\t\t\t\tp\\\n\t\t\t\ti',\n pageLength: 40,\n searching: false,\n lengthChange: false,\n language: this.datatableTexts(),\n serverSide: true,\n processing: true,\n rowId: 'productNumber',\n info: true,\n select: {\n style: 'multi',\n selector: 'td:first-child'\n },\n columnDefs: [\n {\n targets: [0, 1, 2, 3, 4, 5, 6, 7],\n orderable: false\n },\n {\n width: '5%',\n targets: 0,\n className: 'js-basket__select_all--wrapper basket-list__select select-checkbox',\n visible: !this.isFixedPriceOffer,\n render: function(data, _type, row)\n {\n let originalSrc = row.productImageUrl.trim();\n let baseSrc = originalSrc.replace('product-main-image', 'product-list-image-thumbnail');\n let newSrc = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)/, '$1-abo/');\n let image = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)\\/(.*?)(\\.jpg)$/, '$1-abo/$2.jpg');\n let retinaImage = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)\\/(.*?)(\\.jpg)$/, '$1-abo/$2-2x.jpg');\n let webPImage = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)\\/(.*?)(\\.jpg)$/, '$1-abo/$2.webp');\n let webPRetinaImage = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)\\/(.*?)(\\.jpg)$/, '$1-abo/$2-2x.webp');\n let avifImage = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)\\/(.*?)(\\.jpg)$/, '$1-abo/$2.avif');\n let avifRetinaImage = baseSrc.replace(/(\\/product-images\\/.*?\\/product-.*?)\\/(.*?)(\\.jpg)$/, '$1-abo/$2-2x.avif');\n\n row.productImageUrl = newSrc;\n row.productImageUrlAvif = avifImage + ', ' + avifRetinaImage + ' 2x';\n row.productImageUrlWebp = webPImage + ', ' + webPRetinaImage + ' 2x';\n row.productImageUrlJpeg = image + ', ' + retinaImage + ' 2x';\n\n return Mustache.render(this.itemElementTemplate, {\n basketListItem: row,\n selectColumn: true\n });\n }.bind(this)\n },\n {\n // Hidden column to sort for product number\n // Sort criteria must be mapped to a column\n // See matchOrderIdWithColumnName(orderId)\n targets: 1,\n visible: false,\n render: function()\n {\n return Mustache.render(this.itemElementTemplate, {\n productNumberColumn: true\n });\n }.bind(this)\n },\n {\n data: null,\n width: this.isFixedPriceOffer ? '42%' : '37%',\n targets: 2,\n className: 'basket-list__description',\n render: function(data, type, row)\n {\n return Mustache.render(this.itemElementTemplate, {\n basketListItem: row,\n productDetailsColumn: true\n });\n }.bind(this),\n createdCell: function(td, cellData, rowData)\n {\n let $availabilityIcon = $(td).find('i.fa-circle');\n\n if (rowData.isOutOfStock)\n {\n $availabilityIcon.addClass('out-of-stock');\n }\n else if (rowData.isAvailable)\n {\n $availabilityIcon.addClass('in-stock');\n }\n else if (rowData.isPreorder)\n {\n $availabilityIcon.addClass('out-of-stock');\n }\n }\n },\n {\n width: '15%',\n targets: 3,\n className: 'basket-list__lp-sp',\n render: function(data, type, row)\n {\n return Mustache.render(this.itemElementTemplate, {\n basketListItem: row,\n undiscountedPriceColumn: !row.productUnknown\n });\n }.bind(this)\n },\n {\n width: '10%',\n targets: 4,\n className: 'basket-list__price',\n render: function(data, type, row)\n {\n return Mustache.render(this.itemElementTemplate, {\n basketListItem: row,\n discountedPriceColumn: !row.productUnknown\n });\n }.bind(this)\n },\n {\n width: '10%',\n targets: 5,\n className: 'basket-list__quantity tooltip-wrapper',\n render: function(data, type, row)\n {\n return Mustache.render(this.itemElementTemplate, {\n basketListItem: row,\n quantityColumn: !row.productUnknown,\n isFixedPriceOffer: this.isFixedPriceOffer\n });\n }.bind(this)\n },\n {\n width: '13%',\n targets: 6,\n className: 'basket-list__sellingunit',\n render: function(data, type, row)\n {\n return Mustache.render(this.itemElementTemplate, {\n basketListItem: row,\n sellingUnitColumn: !row.productUnknown,\n isFixedPriceOffer: this.isFixedPriceOffer\n });\n }.bind(this)\n },\n {\n width: '10%',\n data: 'subtotalPrice',\n targets: 7,\n className: 'basket-list__total',\n render: function(data, type, row)\n {\n return Mustache.render(this.itemElementTemplate, {\n basketListItem: row,\n subtotalPriceColumn: !row.productUnknown\n });\n }.bind(this)\n },\n ],\n drawCallback: function()\n {\n isEmpty = this.table.data().count() === 0;\n let $emptyText = $('.dataTables_empty');\n\n if (isEmpty)\n {\n $('#basket_wrapper > div').hide();\n $('#basket_wrapper').append($emptyText);\n $('.js-basket__sort').addClass('hidden');\n }\n else\n {\n $('#basket_wrapper > div').show();\n $emptyText.remove();\n $('.js-basket__sort').removeClass('hidden');\n\n if (!this.isFixedPriceOffer)\n {\n if (this.selectedRows\n && Object.keys(this.selectedRows).length > 0)\n {\n Object.keys(this.selectedRows)\n .forEach((productNumber) =>\n {\n this.table.row('#' + productNumber)\n .select();\n });\n }\n else\n {\n $('.js-basket__select_all--wrapper')\n .removeClass('selected');\n }\n this.handleSelectAllButtonView();\n }\n else\n {\n displayInfoFeedbackMessage(\n 'feedback.basket.fixed.price.offer.info',\n '',\n true\n );\n }\n\n if (!this.filteredItemsFetched)\n {\n this.prepareFilters();\n }\n\n this.fetchSummaryData();\n }\n this.handleFlags();\n this.initEvents();\n }.bind(this),\n initComplete: function()\n {\n let actionsWrapper = document.querySelector(this.actionsWrapperSelector);\n let fixedPriceOfferWrapper = document.querySelector(this.fixedPriceOfferWrapperSelector);\n let shoppinglistWrapper = document.querySelector(this.shoppinglistWrapperSelector);\n\n actionsWrapper.append(\n this.table.buttons('cart', null).container()[0]\n );\n\n if (this.isFixedPriceOffer)\n {\n fixedPriceOfferWrapper.append(\n this.table.buttons('fixedPriceOffer', null).container()[0]\n );\n document.querySelector('.basket-list__actions--fixed-price-offer').prepend(\n stringToHTML(Mustache.render(this.fixedPriceOfferExpiryTemplate))\n );\n }\n else\n {\n shoppinglistWrapper.append(\n this.table.buttons('shoppinglist', null)\n .container()[0]\n );\n\n this.table.buttons('shoppinglist', [0, 1]).disable();\n\n document.querySelector('.basket-list__actions--cart')\n .prepend(\n stringToHTML(Mustache.render(this.voucherCodeTemplate))\n );\n\n document.querySelector(this.voucherInputSelector)\n .addEventListener('input', (event) =>\n {\n if (event.target.value.trim().length)\n {\n document.querySelector(this.voucherButtonSelector)\n .classList\n .remove('disabled');\n }\n else\n {\n document.querySelector(this.voucherButtonSelector)\n .classList\n .add('disabled');\n }\n });\n }\n\n if (!isEmpty)\n {\n this.createSortSelection(this.table);\n }\n }.bind(this),\n createdRow: function(row)\n {\n let $row = $(row);\n\n $row.addClass('basket-list__item js-basket__item');\n }\n });\n\n new $.fn.dataTable.Buttons(this.table, {\n name: 'shoppinglist',\n dom: {\n container: {\n className: 'basket-list__actions--shoppinglist'\n },\n button: {\n className: ''\n }\n },\n buttons: [\n {\n text: ''\n + ''\n + getTranslation('content.cartitemlist.delete')\n + '',\n className: 'button secondary shoppinglists-icon-wrapper',\n action: function()\n {\n let selectedItems = this.selectedRows;\n\n $('.js-basket-delete-products-count').text(Object.keys(selectedItems).length);\n\n if (Object.keys(selectedItems).length > 1)\n {\n $('.js-overlay-delete-basket-products-singular').addClass('hidden');\n $('.js-overlay-delete-basket-products-plural').removeClass('hidden');\n }\n else\n {\n $('.js-overlay-delete-basket-products-singular').removeClass('hidden');\n $('.js-overlay-delete-basket-products-plural').addClass('hidden');\n }\n\n this.showOverlay($('#overlay-delete-basket-products'), selectedItems);\n }.bind(this)\n },\n {\n text:\n getTranslation('form.submit~shoppinglist.add~cart'),\n className: 'button secondary shoppinglists-icon-wrapper js-basket__to-shoppinglist ' +\n 'js-gtm-shoppinglist-basket__overlay--open',\n action: function()\n {\n this.shoppinglistTablesOverlay.initOverlay(this.selectedRows);\n }.bind(this)\n },\n ]\n });\n\n new $.fn.dataTable.Buttons(this.table, {\n name: 'cart',\n dom: {\n container: {\n className: 'basket-list__actions--cart'\n },\n button: {\n className: ''\n }\n },\n buttons: [\n {\n tag: 'a',\n text: getTranslation('form.submit~checkout'),\n className: 'button buy--button add-to-cart js-basket__checkout-button mb--base-top',\n attr: {\n href: getTranslation('url.checkout-address')\n },\n action: function(_e, _dt, $node)\n {\n window.location = $node.attr('href');\n }.bind(this)\n },\n {\n text: getTranslation('form.download-cart-as-csv'),\n className: 'button secondary js-download-cart-as-csv download-cart-as-csv',\n },\n ]\n });\n\n new $.fn.dataTable.Buttons(this.table, {\n name: 'fixedPriceOffer',\n dom: {\n container: {\n className: 'basket-list__actions--fixed-price-offer'\n },\n button: {\n className: ''\n }\n },\n buttons: [\n {\n text: getTranslation('form.cancel.fixed.price.offer'),\n className: 'button tertiary ' +\n 'js-basket__cancel-fixed-price-offer',\n action: function()\n {\n this.handleCancelFixedPriceOffer();\n }.bind(this)\n },\n ]\n });\n\n this.shoppinglistTablesOverlay.init();\n this.initStaticEvents();\n this.showFeedbackMessageOrderInBasket();\n }\n\n showFeedbackMessageOrderInBasket()\n {\n let url = window.location.href;\n\n if (url.includes('order-added-basket'))\n {\n displaySuccessFeedbackMessage(\n 'feedback.basket.reorder.added.ok',\n '',\n true\n );\n }\n else if (url.includes('order-replace-basket'))\n {\n displaySuccessFeedbackMessage(\n 'feedback.basket.reorder.replaced.ok',\n '',\n true\n );\n }\n }\n\n initStaticEvents()\n {\n $('body').on(orion.constants.EventCartProductCreated, () =>\n {\n this.table.ajax.reload();\n });\n }\n\n createSortSelection(table)\n {\n let filterSection = document.createElement('div');\n let sortSelection = document.createElement('select');\n let sortPlaceholder = document.createElement('option');\n\n filterSection.classList.add('basket__sort', 'js-basket__sort', 'select-button-container');\n\n sortPlaceholder.value = '';\n sortPlaceholder.text = getTranslation('content.cartitemlist.sort.recent');\n sortPlaceholder.selected;\n sortPlaceholder.disabled;\n sortSelection.appendChild(sortPlaceholder);\n\n let { 0: columns } = table.columns();\n\n for (let i = 1; i < columns.length; i++)\n {\n if (i === 6)\n {\n continue;\n }\n\n let optionAscending = document.createElement('option');\n let optionDescending = document.createElement('option');\n\n optionAscending.value = columns[i];\n optionAscending.text = getTranslation('content.cartitemlist.header.col.' + i) + ' '\n + getTranslation('content.cartitemlist.sort.ascending');\n sortSelection.appendChild(optionAscending);\n\n optionDescending.value = columns[i] * -1;\n optionDescending.text = getTranslation('content.cartitemlist.header.col.' + i) + ' '\n + getTranslation('content.cartitemlist.sort.descending');\n sortSelection.appendChild(optionDescending);\n }\n\n filterSection.append(sortSelection);\n document.querySelector('.js-basket_filter_sorting_section').append(filterSection);\n\n sortSelection.addEventListener('change', function()\n {\n if (this.value > 0)\n {\n table.order([this.value, 'asc']).draw();\n }\n else if (this.value < 0)\n {\n table.order([this.value * -1, 'desc']).draw();\n }\n else\n {\n table.order([0, 'asc']).draw();\n }\n });\n }\n\n prepareFilters()\n {\n let filterParam = this.filters.join('&').toString();\n let limitParam = '&take=' + this.filteredProductsCount.toString();\n\n this.cartClient.fetchItemsWithParams(filterParam + limitParam)\n .then((response) => response.json())\n .then((json) =>\n {\n this.containsBulkyProducts = json.checkoutDataTags.includes('bulkyGoodsFlag');\n this.containsMarketplaceProducts = json.checkoutDataTags.includes('marketplaceNotAllowedFlag');\n this.containsUnavailableProducts = json.notAvailableProductItemCount >= 1;\n\n this.updateFilters();\n\n if (this.filteredItemsFetched)\n {\n this.handleFilters();\n }\n\n this.filteredItemsFetched = true;\n });\n }\n\n handleSelectAllButtonView()\n {\n let isAllSelected = false;\n\n if (this.filteredProductsCount <= Object.keys(this.selectedRows).length)\n {\n for (let i = 0; i < this.filteredProducts.length; i++)\n {\n if (this.filteredProducts[i].productNumber in this.selectedRows)\n {\n isAllSelected = true;\n }\n else\n {\n isAllSelected = false;\n break;\n }\n }\n }\n\n if (isAllSelected)\n {\n document.querySelector('th.js-basket__select_all--wrapper').classList.add('selected');\n }\n else\n {\n document.querySelector('th.js-basket__select_all--wrapper').classList.remove('selected');\n }\n }\n\n handleFlags()\n {\n if (this.containsBulkyProducts)\n {\n this.checkboxContainerBulky.classList.remove('hidden');\n if (!this.bulkyFeedbackmessageShown)\n {\n displayInfoFeedbackMessage(\n 'feedback.basket.bulky-goods.text',\n 'feedback.basket.bulky-goods.title',\n true\n );\n this.bulkyFeedbackmessageShown = true;\n }\n }\n else\n {\n this.checkboxContainerBulky.classList.add('hidden');\n }\n\n if (this.containsMarketplaceProducts)\n {\n this.checkboxContainerMarketplace.classList.remove('hidden');\n if (!this.marketplaceFeedbackmessageShown)\n {\n displayInfoFeedbackMessage(\n 'feedback.basket.market.place.not.allowed.text',\n 'feedback.basket.market.place.not.allowed.title',\n true\n );\n this.marketplaceFeedbackmessageShown = true;\n }\n }\n else\n {\n this.checkboxContainerMarketplace.classList.add('hidden');\n }\n\n if (this.containsUnavailableProducts)\n {\n this.checkboxContainerAvailability.classList.remove('hidden');\n }\n else\n {\n this.checkboxContainerAvailability.classList.add('hidden');\n }\n }\n\n handleFilters()\n {\n this.filters = [];\n\n // Workaround until a viable solution has been found, for combining these filters\n this.checkboxContainerBulky.classList.remove('disabled');\n this.checkboxContainerMarketplace.classList.remove('disabled');\n this.checkboxContainerAvailability.classList.remove('disabled');\n\n if (this.checkboxBulky.checked)\n {\n this.checkboxContainerMarketplace.classList.add('disabled');\n this.checkboxContainerAvailability.classList.add('disabled');\n this.filters.push('filterCheckoutDataTagsBy[]=bulkyGoodsFlag');\n }\n if (this.checkboxMarketplace.checked)\n {\n this.checkboxContainerBulky.classList.add('disabled');\n this.checkboxContainerAvailability.classList.add('disabled');\n this.filters.push('filterCheckoutDataTagsBy[]=marketplaceNotAllowedFlag');\n }\n if (this.checkboxAvailability.checked)\n {\n this.checkboxContainerBulky.classList.add('disabled');\n this.checkboxContainerMarketplace.classList.add('disabled');\n this.filters.push('filterBy[]=notAvailable');\n }\n\n if (this.filters.length >= 1)\n {\n this.urlSuffix = '?' + this.filters.join('&');\n this.filterResetButton.classList.remove('hidden');\n }\n else\n {\n this.urlSuffix = '';\n this.filterResetButton.classList.add('hidden');\n }\n\n this.table.ajax.url(this.cartClient.uri + '/items' + this.urlSuffix).load();\n }\n\n resetFilters()\n {\n this.filters = [];\n\n this.checkboxBulky.checked = false;\n this.checkboxMarketplace.checked = false;\n this.checkboxAvailability.checked = false;\n this.urlSuffix = '';\n this.filterResetButton.classList.add('hidden');\n\n this.checkboxContainerBulky.classList.remove('disabled');\n this.checkboxContainerMarketplace.classList.remove('disabled');\n this.checkboxContainerAvailability.classList.remove('disabled');\n\n this.table.ajax.url(this.cartClient.uri + '/items' + this.urlSuffix).load();\n }\n\n updateFilters()\n {\n if (!this.containsBulkyProducts)\n {\n this.checkboxBulky.checked = false;\n }\n\n if (!this.containsMarketplaceProducts)\n {\n this.checkboxMarketplace.checked = false;\n }\n\n if (!this.containsUnavailableProducts)\n {\n this.checkboxAvailability.checked = false;\n }\n }\n\n handleCancelFixedPriceOffer()\n {\n this.showOverlay($('#overlay-cart-cancel-fixed-price-offer'));\n }\n\n handleDeleteSelectionClick(selectedData)\n {\n let items = this.productNumbersArrayToBodyData(selectedData);\n\n let promise = this.cartClient.deleteItems(items);\n\n this.handleRequestPromise(\n promise,\n 'content.cart.delete.choices.ok',\n '',\n false,\n this.table,\n () =>\n {\n this.selectedRows = {};\n\n this.table.buttons('shoppinglist', [0, 1]).disable();\n\n this.prepareFilters();\n }\n );\n }\n\n initEvents()\n {\n let self = this;\n\n if (!this.isFixedPriceOffer)\n {\n $(this.selectAllButtonSelector).off('click');\n $(this.selectAllButtonSelector).on('click', function()\n {\n let filterParam = self.filters.join('&').toString();\n let limitParam = '&take=' + self.filteredProductsCount.toString();\n\n if (!$('.js-basket__select_all--wrapper').hasClass('selected'))\n {\n self.cartClient.fetchItemsWithParams(filterParam + limitParam)\n .then((response) => response.json())\n .then((json) =>\n {\n let body = {};\n\n for (let i = 0; i < json.response.productItems.length; i++)\n {\n body[json.response.productItems[i].productNumber] =\n json.response.productItems[i].quantity;\n }\n\n this.selectedRows = self.selectedRows = body;\n\n self.table.rows().select();\n self.table.draw(false);\n });\n $('.js-basket__select_all--wrapper').addClass('selected');\n }\n else\n {\n self.cartClient.fetchItemsWithParams(filterParam + limitParam)\n .then((response) => response.json())\n .then((json) =>\n {\n for (let i = 0; i < json.response.productItems.length; i++)\n {\n delete self.selectedRows[json.response.productItems[i].productNumber];\n }\n\n this.selectedRows = self.selectedRows;\n\n self.table.rows().deselect();\n self.table.draw(false);\n });\n $('.js-basket__select_all--wrapper').removeClass('selected');\n }\n });\n\n $(this.quantitySelector).off('input');\n $(this.quantitySelector).on('input', event =>\n {\n if (Number.parseInt(event.target.value) <= 0)\n {\n event.target.value = 1;\n }\n });\n\n $(this.quantitySelector).off('blur');\n $(this.quantitySelector).on('blur', event =>\n {\n if (event.target.value === '')\n {\n event.target.value = 1;\n }\n });\n\n $(this.quantitySelector).off('change');\n $(this.quantitySelector).on('change', debounce((event) =>\n {\n let $tr = $(event.target).parents('tr');\n let row = self.table.row($tr);\n let data = row.data();\n\n let $qtyInput = $(event.target);\n\n let { productNumber } = data;\n let quantity = Number.parseInt($qtyInput.val());\n\n this.handleQtyChange(productNumber, quantity);\n }));\n\n $(this.quantityToSellingUnitSelector).off('click');\n $(this.quantityToSellingUnitSelector).on('click', function()\n {\n let $tr = $(this).parents('tr');\n let row = self.table.row($tr);\n let data = row.data();\n\n let { productNumber } = data;\n let sellingUnit = Number.parseInt(data.sellingUnit);\n\n let quantity = Number.parseInt($tr.find('.js-basket__quantity').val());\n\n let newQty = sellingUnit - (quantity % sellingUnit) + quantity;\n\n self.handleQtyChange(productNumber, newQty);\n });\n\n if (!this.isFixedPriceOffer)\n {\n this.table.on('select', (e, dt, type, indexes) =>\n {\n let { 0: productNumber } = self.table.rows(indexes).data().pluck('productNumber');\n\n if (!(productNumber in this.selectedRows))\n {\n let quantity = self.getDataValueForRow(productNumber, 'quantity');\n\n self.selectedRows[productNumber] = quantity;\n }\n\n if (Object.keys(self.selectedRows).length > 0)\n {\n this.table.buttons('shoppinglist', [0, 1]).enable();\n }\n\n\n this.handleSelectAllButtonView();\n });\n\n this.table.on('deselect', (e, dt, type, indexes) =>\n {\n let { 0: productNumber } = self.table.rows(indexes).data().pluck('productNumber');\n\n delete self.selectedRows[productNumber];\n\n if (Object.keys(self.selectedRows).length === 0)\n {\n this.table.buttons('shoppinglist', [0, 1]).disable();\n }\n\n document.querySelector('th.js-basket__select_all--wrapper').classList.remove('selected');\n });\n }\n }\n\n $(this.checkboxBulky).off('click');\n $(this.checkboxBulky).on('click', () =>\n {\n self.handleFilters();\n });\n\n $(this.checkboxMarketplace).off('click');\n $(this.checkboxMarketplace).on('click', () =>\n {\n self.handleFilters();\n });\n\n $(this.checkboxAvailability).off('click');\n $(this.checkboxAvailability).on('click', () =>\n {\n self.handleFilters();\n });\n\n $(this.filterResetButton).off('click');\n $(this.filterResetButton).on('click', () =>\n {\n self.resetFilters();\n });\n\n if (!this.isShoppinglistTablesOverlayInitialized)\n {\n document.addEventListener('products-moved-to-shoppinglist', () =>\n {\n this.handleDeleteSelectionClick(this.selectedRows);\n });\n\n this.isShoppinglistTablesOverlayInitialized = true;\n }\n }\n\n getDataValueForRow(rowId, key)\n {\n let data = this.table.row('#' + rowId).data();\n\n if (Object.prototype.hasOwnProperty.call(data, key))\n {\n return data[key];\n }\n }\n\n fetchSummaryData()\n {\n this.cartClient.fetchSummary()\n .then((response) => response.json())\n .then((data) =>\n {\n data.response.cart.hasSavings = false;\n\n if (data.totalMoneySavedString != '0,00 €')\n {\n data.response.cart.hasSavings = true;\n }\n\n this.updateSummary(data.response.cart);\n this.updateCheckoutButton(data.response.cart.isMinimumOrderValueReached);\n });\n }\n\n updateSummary(data)\n {\n let summaryWrapper = document.querySelector(this.summarySelector);\n\n let summaryElement = summaryWrapper.querySelector(this.summaryContentSelector);\n\n if (summaryElement !== null)\n {\n summaryElement.remove();\n }\n\n let summary = Mustache.render(this.summaryTemplate, {\n basketSummaryData: data\n });\n\n let summaryHTML = stringToHTML(summary);\n\n summaryWrapper.append(summaryHTML);\n\n if (!this.isFixedPriceOffer)\n {\n this.table.buttons('selection', null).container()\n .prependTo(document.querySelector(this.summarySelectionInfoSelector));\n }\n }\n\n updateCheckoutButton(isMinimumOrderValueReached)\n {\n let existingMinimumOrderDiv = document.querySelector('.js-minimum-order-container');\n\n if (!isMinimumOrderValueReached)\n {\n if (!existingMinimumOrderDiv)\n {\n document.querySelector(this.checkoutButtonSelector).classList.add('disabled');\n let minimumOrderDiv = document.createElement('div');\n minimumOrderDiv.className = 'small error-color js-minimum-order-container';\n minimumOrderDiv.innerHTML = $('meta[name=\"content.minimum.order.value.not.reached\"]').attr('content');\n let checkoutButton = document.querySelector(this.checkoutButtonSelector);\n checkoutButton.parentNode.insertBefore(minimumOrderDiv, checkoutButton.nextSibling);\n\n return minimumOrderDiv;\n }\n }\n else\n {\n document.querySelector(this.checkoutButtonSelector).classList.remove('disabled');\n if (existingMinimumOrderDiv)\n {\n existingMinimumOrderDiv.remove();\n }\n }\n }\n\n handleQtyChange(productNumber, quantity)\n {\n let data = {\n 'productItems': [\n {\n 'productNumber': productNumber.toString(),\n 'quantity': quantity\n }\n ]\n };\n\n this.handleRequestPromise(\n this.cartClient.update(data),\n '',\n '',\n true,\n );\n }\n\n datatableTexts()\n {\n return {\n 'paginate': {\n 'previous': '',\n 'next': '',\n },\n 'processing': getTranslation('content.cartitemlist.processing'),\n 'loadingRecords': getTranslation('content.cartitemlist.loading'),\n 'info': getTranslation('content.cartitemlist.info.entries'),\n 'infoEmpty': getTranslation('content.cartitemlist.info.entries.empty'),\n 'infoFiltered': getTranslation('content.cartitemlist.info.entries.filtered'),\n 'emptyTable': getTranslation('content.cartitemlist.info.list.empty'),\n 'select': {\n 'rows': {\n _: '(%d) '\n\t\t\t\t\t\t+ getTranslation('content.cartitemlist.info.selected.article'),\n },\n }\n };\n }\n\n formatOrder(self, order)\n {\n $(order).each(function(k)\n {\n order[k].field = self.matchOrderIdWithColumnName(order[k].column);\n });\n\n return order;\n }\n\n matchOrderIdWithColumnName(orderId)\n {\n switch (orderId)\n {\n case 1:\n return 'productNumber';\n case 2:\n return 'productName';\n case 3:\n return 'undiscountedPrice';\n case 4:\n return 'discountedPrice';\n case 5:\n return 'quantity';\n case 6:\n return 'sellingUnit';\n case 7:\n return 'subtotalPrice';\n default:\n return null;\n }\n }\n\n productNumbersArrayToBodyData(products, withQty = false)\n {\n let productItems = [];\n\n for (let productNumber in products)\n {\n let obj = {\n productNumber: productNumber\n };\n\n if (withQty)\n {\n obj.quantity = products[productNumber];\n }\n\n productItems.push(obj);\n }\n\n return {\n 'productItems': productItems\n };\n }\n\n /**\n\t * @param promise {Promise}\n\t * @param successMessage {string}\n\t * @param errorMessage {string}\n\t * @param refreshAfterSuccess {boolean}\n\t * @param tableRef\n\t * @param cb\n\t */\n handleRequestPromise(\n promise,\n successMessage,\n errorMessage = '',\n refreshAfterSuccess = false,\n tableRef = this.table,\n cb = null\n )\n {\n promise\n .then(resp =>\n {\n if (resp.ok)\n {\n this.handleSuccessfulRequests(successMessage, refreshAfterSuccess, tableRef);\n $('body').trigger(orion.constants.EventCartProductUpdated);\n\n if (typeof cb === 'function')\n {\n cb();\n }\n }\n else\n {\n this.handleErrorRequests(errorMessage);\n }\n })\n .catch(function(error)\n {\n this.handleErrorRequests(error);\n });\n }\n\n /**\n\t * @param successMessage {string}\n\t * @param refreshAfter\n\t * @param tableRef\n\t */\n handleSuccessfulRequests(successMessage, refreshAfter, tableRef)\n {\n if (successMessage !== '')\n {\n displaySuccessFeedbackMessage(successMessage, '', true);\n }\n if (refreshAfter)\n {\n tableRef.ajax.reload(() =>\n {\n this.initEvents();\n }, false);\n }\n }\n\n handleErrorRequests(errorMessage)\n {\n if (errorMessage !== '')\n {\n displayErrorFeedbackMessage(errorMessage, '', true);\n }\n }\n\n showOverlay($overlay, selectedItems)\n {\n $overlay.unbind();\n let $body = $('body');\n $overlay.removeClass('hidden');\n $body.addClass('focus-active');\n\n $body.on('focus-overlay-clicked', () =>\n {\n this.hideOverlay($overlay);\n });\n $overlay.on('click', '.close, .close-overlay', () =>\n {\n this.hideOverlay($overlay);\n });\n\n $overlay.on('click', '.js-delete-basket-products', () =>\n {\n this.handleDeleteSelectionClick(selectedItems);\n this.hideOverlay($overlay);\n });\n }\n\n hideOverlay($overlay)\n {\n $overlay.addClass('hidden');\n $('body').removeClass('focus-active');\n }\n}\n\nif (document.querySelector('.js-basket') !== null)\n{\n (new Cart()).init();\n}\n","import { copyLinkToClipboard, copyLinkFeedback } from './copy-to-clipboard';\n\nclass Downloads\n{\n constructor()\n {\n // elements\n this.page = document.querySelector('#account-downloads');\n this.template = document.querySelector('.download-list__item');\n\n // tabs\n this.tabArticleData = document.querySelector('.tab-article-data .download-list');\n this.tabBrochuresFlyer = document.querySelector('.tab-brochures-flyer .download-list');\n this.tabEpaper = document.querySelector('.tab-epaper .download-list');\n\n // api\n this.api = orion.api.downloads;\n\n // helper\n this.currentDate = new Date();\n }\n\n init()\n {\n if (this.page === null)\n {\n return;\n }\n\n this.fetchDownloads();\n }\n\n fetchDownloads()\n {\n this.api.read().done((data) =>\n {\n let downloadItems = data.ManagedDownloadList;\n\n this.processDownloads(downloadItems);\n });\n }\n\n processDownloads(downloadItems)\n {\n downloadItems.forEach((download) =>\n {\n let downloadItem = download.managedDownload;\n\n let valid = this.checkValidity(downloadItem.validFromDatetime, downloadItem.validUntilDatetime);\n\n if (valid)\n {\n let clone = this.createDownloadElement(downloadItem);\n\n this.attachDownload(downloadItem.downloadCategory, clone);\n }\n });\n }\n\n createDownloadElement(downloadItem)\n {\n let clone = this.template.cloneNode(true);\n let fileIcon = clone.querySelector('.download-list__file-icon');\n let newBadge = clone.querySelector('.download-list__badge');\n let customerFlag = clone.querySelector('.download-list__customer-icon');\n let title = clone.querySelector('.download-list__title--text');\n let date = clone.querySelector('.download-list__title--date');\n let languages = clone\n .querySelectorAll('.download-list__title--language, .download-list__description--language');\n let description = clone.querySelector('.download-list__description--text');\n let fileExtension = clone.querySelector('.download-list__description--extension');\n let badgeOffset = clone.querySelector('.download-list__offset');\n let faqLink = clone.querySelector('.download-list__faq');\n let copyLink = clone.querySelector('.download-list__copy');\n let copyLinkButton = clone.querySelector('.download-list__copy--button');\n let downloadButton = clone.querySelector('.download-list__download--button');\n\n if (downloadItem.isNew == 'true')\n {\n newBadge.classList.remove('hidden');\n }\n else\n {\n badgeOffset.classList.remove('hidden');\n }\n\n if (downloadItem.customerFlag == '1')\n {\n customerFlag.classList.remove('hidden');\n }\n\n fileIcon.src = 'assets/images/icons/file_' + downloadItem.filename.split('.')[1] + '.svg';\n title.textContent = this.replaceUmlaute(downloadItem.title);\n description.textContent = this.replaceUmlaute(downloadItem.description);\n fileExtension.textContent = '(.' + downloadItem.filename.split('.')[1] + ')';\n\n if (downloadItem.languages != '[]')\n {\n languages.forEach((language) =>\n {\n language.textContent = downloadItem.languages.replace(/[[\\]']+/g, '').replace(',', ', ');\n });\n }\n\n if (downloadItem.creationDatetime != '')\n {\n let dateArray = downloadItem.creationDatetime.split(' ')[0].split('-');\n let formatDate = dateArray[2] + '.' + dateArray[1] + '.' + dateArray[0];\n\n date.textContent = '(' + formatDate + ')';\n }\n\n if (downloadItem.filename.split('.')[1] == 'xml' || downloadItem.filename.split('.')[1] == 'csv')\n {\n copyLink.classList.add('has-faq-link');\n faqLink.classList.remove('hidden');\n }\n\n copyLinkButton.setAttribute('data-target', 'download-' + downloadItem.managedDownloadId);\n\n copyLinkButton.addEventListener('click', function(event)\n {\n copyLinkToClipboard('#download-' + downloadItem.managedDownloadId);\n copyLinkFeedback(copyLinkButton);\n event.preventDefault();\n });\n\n downloadButton.id = 'download-' + downloadItem.managedDownloadId;\n downloadButton.href += downloadItem.filename;\n\n clone.classList.add('download-' + downloadItem.managedDownloadId);\n clone.classList.remove('hidden');\n\n return clone;\n }\n\n replaceUmlaute(text)\n {\n text = text.replace(/Ä/g, 'Ä')\n .replace(/ä/g, 'ä')\n .replace(/Ü/g, 'Ü')\n .replace(/ü/g, 'ü')\n .replace(/Ö/g, 'Ö')\n .replace(/ö/g, 'ö')\n .replace(/ß/g, 'ß');\n\n return text;\n }\n\n checkValidity(validFromDatetime, validUntilDatetime)\n {\n let validFromDate = new Date(validFromDatetime);\n let validUntilDate = new Date(validUntilDatetime);\n\n return validFromDate < this.currentDate && this.currentDate < validUntilDate;\n }\n\n attachDownload(category, clone)\n {\n switch (category)\n {\n case 'ARTICLE_DATA':\n this.tabArticleData.prepend(clone);\n break;\n case 'CATALOG':\n this.tabBrochuresFlyer.prepend(clone);\n break;\n case 'EPAPER':\n this.tabEpaper.prepend(clone);\n break;\n }\n }\n}\n\ndocument.addEventListener('DOMContentLoaded', () =>\n{\n let downloads = new Downloads();\n\n downloads.init();\n});\n","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","jQuery(function($)\n{\n var cartApi = orion.api.cart;\n var shoppingListApi = orion.api.shoppinglist;\n var orderListApi = orion.api.orderlist;\n var $body = $('body');\n var take = 100;\n var $progressBar = $('#cart-to-csv-progress, #shoppinglist-to-csv-progress, #orderlist-to-csv-progress');\n var indexArray = [\n 'productBarcode', 'productBarcodeType', 'productNumber', 'productName', 'productVariation', 'packagingSize',\n 'undiscountedPrice', 'discountedPrice', 'subtotalPrice', 'taxInPercent', 'quantity', 'weight'\n ];\n\n function downloadCartAsCsv(event)\n {\n event.preventDefault();\n\n var cartProductItemCount = 0;\n\n cartApi.read().done(function(data)\n {\n cartProductItemCount = data.response.cart.productItemCount;\n\n if (cartProductItemCount >= 1)\n {\n updateProgressBar('0');\n startCsvConversionForCart(cartProductItemCount);\n }\n else\n {\n console.warn('Empty cart');\n }\n });\n }\n\n function downloadOrderlistAsCsv(event)\n {\n event.preventDefault();\n\n var orderlistProductItemCount = 0;\n var orderlistId = $(this).data('orderid');\n\n orderListApi.read().done(function(data)\n {\n var orderlist = null;\n for (const orderlistKey in data.orderLists)\n {\n if (data.orderLists[orderlistKey].orderId === orderlistId)\n {\n orderlist = data.orderLists[orderlistKey];\n break;\n }\n }\n\n if ( orderlist == null )\n {\n console.warn('Orderlist not found!');\n return;\n }\n\n orderlistProductItemCount = orderlist.productItemCount;\n\n if (orderlistProductItemCount >= 1)\n {\n updateProgressBar('0');\n startCsvConversionForOrderlist(orderlistId, orderlistProductItemCount);\n }\n else\n {\n console.warn('Empty orderlist');\n }\n });\n }\n\n\n function initEvents()\n {\n $body.off('click', '.js-download-cart-as-csv');\n $body.on('click', '.js-download-cart-as-csv', downloadCartAsCsv);\n\n $body.off('click', '.js-download-shoppinglist-as-csv');\n $body.on('click', '.js-download-shoppinglist-as-csv', downloadShoppingListAsCsv);\n\n $body.off('click', '.js-download-orderlist-as-csv');\n $body.on('click', '.js-download-orderlist-as-csv', downloadOrderlistAsCsv);\n\n $body.on(orion.constants.EventOrderlistItemLoaded, initOrderListAsCsvEvents);\n }\n\n function initOrderListAsCsvEvents()\n {\n $body.off('click', '.js-download-orderlist-as-csv');\n $body.on('click', '.js-download-orderlist-as-csv', downloadOrderlistAsCsv);\n }\n\n function startCsvConversionForCart(cartProductItemCount)\n {\n var csv = '';\n\n cartApi.readItems(0, 1).done(function(data)\n {\n var itemArray = data.response.productItems;\n var line = '';\n\n for (var index in itemArray[0])\n {\n if (!Object.prototype.hasOwnProperty.call(itemArray[0], index))\n {\n continue;\n }\n if (jQuery.inArray(index, indexArray) !== -1)\n {\n if (line !== '')\n {\n line += ',';\n }\n if (index === 'productBarcode')\n {\n index = 'barcode';\n }\n else if (index === 'productBarcodeType')\n {\n index = 'barcodeType';\n }\n line += '\"' + index + '\"';\n }\n }\n csv += line + '\\r\\n';\n csv = $('
').html(csv)\n .text();\n readCartItemsAndConvertToCsv(cartProductItemCount, csv, 0, take);\n });\n }\n\n function readCartItemsAndConvertToCsv(cartProductItemCount, csv, skip, take)\n {\n cartApi.readItems(skip, take).done(function(data)\n {\n var progress = ( skip / cartProductItemCount ) * 100;\n\n updateProgressBar(progress);\n csv += convertToCsv(data.response.productItems);\n skip += take;\n if (skip < cartProductItemCount)\n {\n readCartItemsAndConvertToCsv(cartProductItemCount, csv, skip, take);\n }\n else\n {\n progress = ( skip / cartProductItemCount ) * 100;\n updateProgressBar(progress);\n triggerCsvDownload(csv, 'cart.csv');\n }\n });\n }\n\n function downloadShoppingListAsCsv(event)\n {\n event.preventDefault();\n\n var shoppingListId = $(this).closest('.csv-cell')\n .data('uid');\n var shoppingListName = $(this).closest('.csv-cell')\n .data('list-name');\n\n console.log(shoppingListName);\n\n shoppingListApi.readHeaderData(shoppingListId).done(function(data)\n {\n console.log('done');\n var shoppingListProductItemCount = data.productItemCount;\n\n if (shoppingListProductItemCount >= 1)\n {\n updateProgressBar('0');\n startCsvConversionForShoppingList(shoppingListId, shoppingListProductItemCount, shoppingListName);\n }\n else\n {\n console.warn('Empty shoppinglist');\n }\n console.log(shoppingListName);\n });\n }\n\n function startCsvConversionForShoppingList(shoppingListId, shoppingListProductItemCount, shoppingListName)\n {\n console.log('startCsvConversionForShoppingList');\n var csv = '';\n\n shoppingListApi.readItems(shoppingListId, 0, 1).done(function(data)\n {\n var itemArray = data.response.productItems;\n var line = '';\n\n for (var index in itemArray[0])\n {\n if (!Object.prototype.hasOwnProperty.call(itemArray[0], index))\n {\n continue;\n }\n if (jQuery.inArray(index, indexArray) !== -1)\n {\n if (line !== '')\n {\n line += ',';\n }\n if (index === 'productBarcode')\n {\n index = 'barcode';\n }\n else if (index === 'productBarcodeType')\n {\n index = 'barcodeType';\n }\n line += '\"' + index + '\"';\n }\n }\n csv += line + '\\r\\n';\n csv = $('
').html(csv)\n .text();\n readShoppingListItemsAndConvertToCsv(shoppingListId, shoppingListProductItemCount,\n csv, 0, take, shoppingListName);\n });\n }\n\n function readShoppingListItemsAndConvertToCsv(\n shoppingListId,\n shoppingListProductItemCount,\n csv,\n skip,\n take,\n shoppingListName\n )\n {\n shoppingListApi.readItems(shoppingListId, skip, take).done(function(data)\n {\n var progress = ( skip / shoppingListProductItemCount ) * 100;\n\n updateProgressBar(progress);\n csv += convertToCsv(data.response.productItems);\n skip += take;\n if (skip < shoppingListProductItemCount)\n {\n readShoppingListItemsAndConvertToCsv(shoppingListId, shoppingListProductItemCount,\n csv, skip, take, shoppingListName);\n }\n else\n {\n progress = ( skip / shoppingListProductItemCount ) * 100;\n updateProgressBar(progress);\n triggerCsvDownload(csv, shoppingListName + '.csv');\n }\n });\n }\n\n function startCsvConversionForOrderlist(orderlistId, orderlistProductItemCount)\n {\n var csv = '';\n\n orderListApi.readItems(orderlistId, 0, 1).done(function(data)\n {\n var itemArray = data.orderListItems;\n var line = '';\n\n for (var index in itemArray[0])\n {\n if (!Object.prototype.hasOwnProperty.call(itemArray[0], index))\n {\n continue;\n }\n if (jQuery.inArray(index, indexArray) !== -1)\n {\n if (line !== '')\n {\n line += ',';\n }\n if (index === 'productBarcode')\n {\n index = 'barcode';\n }\n else if (index === 'productBarcodeType')\n {\n index = 'barcodeType';\n }\n line += '\"' + index + '\"';\n }\n }\n csv += line + '\\r\\n';\n csv = $('
').html(csv)\n .text();\n readOrderlistItemsAndConvertToCsv(orderlistId, orderlistProductItemCount, csv, 0, take);\n });\n }\n\n function readOrderlistItemsAndConvertToCsv(orderlistId, orderlistProductItemCount, csv, skip, take)\n {\n orderListApi.readItems(orderlistId, skip, take).done(function(data)\n {\n var progress = ( skip / orderlistProductItemCount ) * 100;\n\n updateProgressBar(progress);\n csv += convertToCsv(data.orderListItems);\n skip += take;\n if (skip < orderlistProductItemCount)\n {\n readOrderlistItemsAndConvertToCsv(orderlistId, orderlistProductItemCount, csv, skip, take);\n }\n else\n {\n progress = ( skip / orderlistProductItemCount ) * 100;\n updateProgressBar(progress);\n triggerCsvDownload(csv, 'orderlist.csv');\n }\n });\n }\n\n function triggerCsvDownload(csv, name)\n {\n var blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' });\n\n if (navigator.msSaveBlob)\n {\n navigator.msSaveBlob(blob, name); // IE handling\n }\n else\n {\n var element = document.createElement('a');\n var url = URL.createObjectURL(blob);\n\n element.setAttribute('href', url);\n element.setAttribute('download', name);\n element.style.display = 'none';\n\n $body.append(element);\n element.click();\n $body.remove(element);\n }\n }\n\n function convertToCsv(itemArray)\n {\n var csv = '';\n\n for (var i = 0; i < itemArray.length; i++)\n {\n var line = '';\n\n for (var index in itemArray[i])\n {\n if (!Object.prototype.hasOwnProperty.call(itemArray[i], index))\n {\n continue;\n }\n if (jQuery.inArray(index, indexArray) !== -1)\n {\n if (line !== '')\n {\n line += ',';\n }\n line += '\"' + itemArray[i][index] + '\"';\n }\n }\n csv += line + '\\r\\n';\n }\n return $('
').html(csv)\n .text();\n }\n\n // see csvOrder.js\n function updateProgressBar(value)\n {\n var progressValueRounded = Math.ceil(value);\n\n if (progressValueRounded > 100)\n {\n progressValueRounded = 100;\n }\n var progressValuePercentage = progressValueRounded + '%';\n\n console.log('progress: ' + progressValuePercentage);\n\n $progressBar.removeClass('hidden');\n $body.addClass('focus-active');\n $('.progress-meter', $progressBar).css('width', progressValuePercentage);\n $('.progress-meter-text', $progressBar).text(progressValuePercentage);\n\n if (progressValueRounded >= 100)\n {\n setTimeout(function()\n {\n $progressBar.addClass('hidden');\n $body.removeClass('focus-active');\n }, 1000);\n }\n }\n\n initEvents();\n\n $body.on(orion.constants.EventCsvDownloadButtonAppended, initEvents);\n});\n","class InvoiceNotificationToggle\n{\n /**\n\t * @param selector {string}\n\t */\n constructor(selector)\n {\n // selectors\n this.selector = selector;\n this.toggleTriggerSelector = '.js-invoice-notification-toggle-trigger';\n\n // elements\n this.wrapper = document.querySelector(this.selector);\n this.toggleTrigger = null;\n\n // api\n this.api = orion.api.customerScalarAttribute;\n this.attributeName = 'deactivate_invoice_notifications_flag';\n }\n\n init()\n {\n if (!this.wrapper)\n {\n return;\n }\n\n this.toggleTrigger = this.fetchToggleTrigger();\n\n this.initToggle();\n this.initEvents();\n }\n\n initToggle()\n {\n this.disableToggleTrigger();\n\n let self = this;\n\n this.api.read(this.attributeName)\n .done(function(attributeValue)\n {\n if (attributeValue == '1')\n {\n self.toggleTrigger.checked = false;\n }\n else\n {\n self.toggleTrigger.checked = true;\n }\n\n self.enableToggleTrigger();\n });\n }\n\n initEvents()\n {\n this.toggleTrigger.addEventListener('change', this.handleToggleTriggerChange.bind(this));\n }\n\n /**\n\t * @param value {string}\n\t */\n updateNotificationAttribute(value)\n {\n this.disableToggleTrigger();\n\n let self = this;\n\n this.api.update(this.attributeName, value)\n .done(function()\n {\n self.enableToggleTrigger();\n });\n }\n\n activateNotifications()\n {\n this.updateNotificationAttribute('0');\n }\n\n deactivateNotifications()\n {\n this.updateNotificationAttribute('1');\n }\n\n disableToggleTrigger()\n {\n this.toggleTrigger.setAttribute('disabled', 'disabled');\n }\n\n enableToggleTrigger()\n {\n this.toggleTrigger.removeAttribute('disabled');\n }\n\n isToggleActivated()\n {\n return this.toggleTrigger.checked;\n }\n\n fetchToggleTrigger()\n {\n return this.wrapper.querySelector(this.toggleTriggerSelector);\n }\n\n handleToggleTriggerChange()\n {\n if (this.isToggleActivated())\n {\n this.activateNotifications();\n }\n else\n {\n this.deactivateNotifications();\n }\n }\n}\n\nlet toggle = new InvoiceNotificationToggle('.js-invoice-notification-toggle');\n\ntoggle.init();\n","jQuery(function($)\n{\n var\n api = orion.api.newsletter,\n $body = $('body'),\n $newsletterSwitch = $('#doubleoptin-newsletter'),\n $submitNewEmail = $('.js-submit-new-email'),\n $submitNewEmailDialog = $('.js-submit-new-email-dialog'),\n $newsletterEmailSubscriptionButton = $('#newsletter-email-subscription-button');\n\n function triggerNewsletterToggle(e)\n {\n e.preventDefault();\n\n // var $email = $(\"#email-address\").val(); todo use email address from form\n var $email = $newsletterSwitch.data('customer-email');\n\n if (!$newsletterSwitch.is(':checked'))\n { // Note: checkboxes seem to work weird in that way; state = AFTER click\n api.unsubscribeNewsletter({\n 'email' : $email\n }).done(function()\n {\n $newsletterSwitch.prop('checked', false);\n })\n .fail(function()\n {\n // $newsletterSwitch.prop('disabled', true);\n });\n }\n else\n {\n api.subscribeNewsletter({\n 'email' : $email\n }).done(function()\n {\n $newsletterSwitch.prop('checked', true);\n })\n .fail(function()\n {\n // $newsletterSwitch.prop('disabled', true);\n });\n }\n }\n\n function handleNewsletterEmailSubscription(event)\n {\n event.preventDefault();\n\n var\n email = $('#newsletter-email-subscription-email').val(),\n language = $('#newsletter-email-subscription-language').val(),\n feedbackNewsletterAjaxSuccess = $('meta[itemprop=\"feedback-newslettter-ajax-success\"]').attr('content'),\n feedbackNewsletterAjaxError = $('meta[itemprop=\"feedback-newslettter-ajax-error\"]').attr('content');\n\n api.subscribeNewsletter({\n 'email' : email,\n 'language' : language\n }).done(function()\n {\n $body.append('
'\n\t\t\t\t+ '

'\n\t\t\t\t+ feedbackNewsletterAjaxSuccess + '

'\n\t\t\t\t+ '
');\n $body.trigger('feedback-added');\n })\n .fail(function()\n {\n $body.append('
'\n\t\t\t\t\t+ '

'\n\t\t\t\t\t+ feedbackNewsletterAjaxError + '

'\n\t\t\t\t\t+ '
');\n $body.trigger('feedback-added');\n });\n }\n\n function handleSubmitOfNewAccountEmailAddress(event)\n {\n var inputEmail = $('#login-email').val();\n var oldEmail = $('#storedEmailAddress').text();\n\n console.log('Email: ' + inputEmail);\n console.log('StoredEmail: ' + oldEmail);\n if (($('#newsletterSubscriptionStatus').text() == '1') && (inputEmail != oldEmail))\n {\n event.preventDefault();\n $('#overlay-new-email-subscription').removeClass('hidden');\n $('body').addClass('focus-active');\n }\n }\n\n function saveNewAccountEmailSubscriptionDialogChoice()\n {\n console.log(2);\n var oldEmail = $('#storedEmailAddress').text();\n var inputEmail = $('#login-email').val();\n\n $('#newEmailSubscription').val(inputEmail);\n var feedbackNewsletterAjaxSuccess = $('meta[itemprop=\"feedback-newslettter-ajax-success\"]').attr('content'),\n feedbackNewsletterAjaxError = $('meta[itemprop=\"feedback-newslettter-ajax-error\"]').attr('content');\n var newEmailSubscriptionChoice = $('input[name=\"newEmailSubscriptionChoice\"]:checked').val();\n\n switch (newEmailSubscriptionChoice)\n {\n case 'toBoth':\n api.subscribeNewsletter({\n 'email' : inputEmail\n }).done(function()\n {\n $body.append('
'\n\t\t\t\t\t\t+ ''\n\t\t\t\t\t\t+ '

'\n\t\t\t\t\t\t+ feedbackNewsletterAjaxSuccess + '

'\n\t\t\t\t\t\t+ '
');\n $body.trigger('feedback-added');\n $('#overlay-new-email-subscription').addClass('hidden');\n $('body').removeClass('focus-active');\n })\n .fail(function()\n {\n $body.append('
'\n\t\t\t\t\t\t\t+ ''\n\t\t\t\t\t\t\t+ '

'\n\t\t\t\t\t\t\t+ feedbackNewsletterAjaxError\n\t\t\t\t\t\t\t+ '

');\n $body.trigger('feedback-added');\n });\n break;\n case 'onlyToNew':\n api.unsubscribeNewsletter({\n 'email' : oldEmail\n }).done(function()\n {\n api.subscribeNewsletter({\n 'email' : inputEmail\n }).done(function()\n {\n $body.append('
'\n\t\t\t\t\t\t\t+ ''\n\t\t\t\t\t\t\t+ '

'\n\t\t\t\t\t\t\t+ feedbackNewsletterAjaxSuccess\n\t\t\t\t\t\t\t+ '

');\n $body.trigger('feedback-added');\n $('#overlay-new-email-subscription').addClass('hidden');\n $('body').removeClass('focus-active');\n })\n .fail(function()\n {\n $body.append('
'\n\t\t\t\t\t\t\t\t+ ''\n\t\t\t\t\t\t\t\t+ '

'\n\t\t\t\t\t\t\t\t+ feedbackNewsletterAjaxError\n\t\t\t\t\t\t\t\t+ '

');\n $body.trigger('feedback-added');\n });\n })\n .fail(function()\n {\n $body.append('
'\n\t\t\t\t\t\t\t+ ''\n\t\t\t\t\t\t\t+ '

'\n\t\t\t\t\t\t\t+ feedbackNewsletterAjaxError\n\t\t\t\t\t\t\t+ '

');\n $body.trigger('feedback-added');\n });\n break;\n case 'noChange':\n $('#overlay-new-email-subscription').addClass('hidden');\n $('body').removeClass('focus-active');\n break;\n default:\n $('#overlay-new-email-subscription').addClass('hidden');\n $('body').removeClass('focus-active');\n }\n }\n\n $newsletterSwitch.on('click', triggerNewsletterToggle);\n $newsletterEmailSubscriptionButton.on('click', handleNewsletterEmailSubscription);\n $submitNewEmail.on('click', handleSubmitOfNewAccountEmailAddress);\n $submitNewEmailDialog.on('click', saveNewAccountEmailSubscriptionDialogChoice);\n});\n","jQuery(function($)\n{\n var\n { hide } = orion,\n { show } = orion,\n $country = $('#home-country'),\n $shippingAddress = $('#shipping-address'),\n $shippingAddressDisabled = $('#shipping-address-disabled'),\n $shopCountryCodeMeta = $('meta[name=shop_country_code]'),\n $defaultShippingMode = $('[name=shippingMode][value=Billing]');\n\n if ($country.length === 0)\n {\n return;\n }\n\n function shopCountryCode()\n {\n if ($shopCountryCodeMeta.length == 0)\n {\n return false;\n }\n\n return $shopCountryCodeMeta.attr('content');\n }\n\n function shippingAddressShouldBeHidden(countryCode)\n {\n // tentative criterium, until we get better data for the decision\n var myShopCountryCode = shopCountryCode();\n\n return (typeof myShopCountryCode === 'string') && (myShopCountryCode.toLowerCase()\n\t\t\t!== countryCode.toLowerCase());\n }\n\n function resetShippingMode()\n {\n $defaultShippingMode.prop('checked', true);\n }\n\n function updateViewShippingAdress(countryCode)\n {\n if (shippingAddressShouldBeHidden(countryCode))\n {\n hide($shippingAddress);\n show($shippingAddressDisabled);\n resetShippingMode();\n }\n else\n {\n show($shippingAddress);\n hide($shippingAddressDisabled);\n }\n }\n\n function handleChange()\n {\n updateViewShippingAdress($(this).val()\n .toLowerCase());\n }\n\n updateViewShippingAdress($country.val().toLowerCase());\n\n $country.on('change', handleChange);\n});\n","import { displaySuccessFeedbackMessage, fetchFormValues, getTranslation } from './utilities';\n\njQuery(function($)\n{\n let api = orion.api.shippingAddresses;\n let wrapper = document.querySelector('.js-shipping-address-edit');\n let newTrigger = document.querySelector('.js-shipping-address-new-trigger');\n let form = document.querySelector('.js-shipping-address-edit-form');\n let submit = document.querySelector('button[name=\\'submitShippingAddress\\']');\n let orderFormShippingAddressId = document.querySelector('#orderFormShippingAddressId');\n let $addressList = $('div.address-list ul.inner-list-container');\n let $overlay = $('#overlay-address-new-edit');\n let $accountAddressNewEditUrl = getTranslation('accountAddressNewEditUrl');\n let initialFormValues;\n let allShippingAddresses;\n let $addressDeleteOverlay = $('#overlay-delete-address');\n let $deleteForm = $('form', $addressDeleteOverlay);\n let urlPath = $deleteForm.attr('action');\n\n if (wrapper === null)\n {\n return;\n }\n\n let fetchedFormValues = fetchFormValues(form);\n initialFormValues = convertApiDataToFormData(fetchedFormValues);\n\n function init()\n {\n let loadingIndicator = wrapper.querySelector('.loading-indicator');\n\n loadingIndicator.classList.remove('loading-indicator--hidden');\n\n api.read().done(function(data)\n {\n allShippingAddresses = data.shippingAddresses || {};\n updateList(data);\n loadingIndicator.classList.add('loading-indicator--hidden');\n initEvents();\n })\n .fail(function(xhr, status, error)\n {\n loadingIndicator.classList.add('loading-indicator--hidden');\n\n console.log(error);\n });\n }\n\n function initEvents()\n {\n let editTriggers = document.querySelectorAll('.js-shipping-address-edit-trigger');\n editTriggers.forEach((trigger) =>\n {\n trigger.addEventListener('click', handleClickEditTrigger);\n });\n\n $('.js-address-entry .overlay-trigger').on('click', handleClickDeleteAddressEntry);\n\n newTrigger.addEventListener('click', handleClickNewTrigger);\n\n submit.addEventListener('click', handleClickSubmit);\n }\n\n function convertApiDataToFormData(apiData)\n {\n let shippingAddress = apiData;\n if (apiData.shippingAddress !== undefined)\n {\n ({ shippingAddress } = apiData);\n }\n\n return {\n 'shippingAddress[additionalLine]': shippingAddress.additionalLine,\n 'shippingAddress[addressId]': shippingAddress.addressId,\n 'shippingAddress[addressType]': shippingAddress.addressType,\n 'shippingAddress[city]': shippingAddress.city,\n 'shippingAddress[countryCode]': shippingAddress.countryCode,\n 'shippingAddress[firstName]': shippingAddress.firstName,\n 'shippingAddress[lastName]': shippingAddress.lastName,\n 'shippingAddress[street]': shippingAddress.street,\n 'shippingAddress[zipcode]': shippingAddress.zipcode,\n };\n }\n\n function getShippingAddressByAddressId(shippingAddressesJson, addressId)\n {\n for (const [, shippingAddressJson] of Object.entries(shippingAddressesJson))\n {\n if (typeof shippingAddressJson.addressId !== 'undefined' && shippingAddressJson.addressId == addressId)\n {\n return shippingAddressJson;\n }\n }\n\n return {};\n }\n\n function populateForm(formElement, data)\n {\n var formElements = formElement.elements;\n\n [...formElements].forEach((element) =>\n {\n if (element.matches('[type=radio]') || element.matches('[type=checkbox]'))\n {\n let combinedName = element.name + '-' + element.value;\n\n if (typeof data[combinedName] !== 'undefined')\n {\n element.checked = data[combinedName];\n element.dispatchEvent(new Event('change'));\n }\n }\n else\n {\n if (typeof data[element.name] !== 'undefined')\n {\n element.value = data[element.name];\n element.dispatchEvent(new Event('change'));\n }\n }\n });\n }\n\n function handleClickEditTrigger(event)\n {\n event.preventDefault();\n\n let { addressId } = this.dataset;\n\n let shippingAddress = getShippingAddressByAddressId(allShippingAddresses, addressId);\n\n let convertedShippingAddressData = convertApiDataToFormData(shippingAddress);\n\n populateForm(form, convertedShippingAddressData);\n }\n\n function handleClickDeleteAddressEntry()\n {\n var $this = $(this);\n var $addressEntry = $this.parents('.js-address-entry').eq(0);\n\n var addressId = $addressEntry.data('address-id');\n var urlParam = { id: addressId };\n\n var urlObject = new URI(urlPath);\n\n urlObject.addSearch(urlParam);\n\n $deleteForm.attr('action', urlObject.href());\n }\n\n function handleClickNewTrigger()\n {\n populateForm(form, initialFormValues);\n }\n\n function handleClickSubmit(event)\n {\n event.preventDefault();\n\n $(form).trigger(orion.constants.EventFormValidate);\n\n let errors = $(form).find('div.error');\n\n if (!errors.length)\n {\n var $data = {\n 'shippingMode': 'Shipping',\n 'shippingAddress': {\n 'addressId': $('input[name=\\'shippingAddress[addressId]\\']').val(),\n 'addressType': $('input[name=\\'shippingAddress[addressType]\\']').val(),\n 'firstName': $('input[name=\\'shippingAddress[firstName]\\']').val(),\n 'lastName': $('input[name=\\'shippingAddress[lastName]\\']').val(),\n 'street': $('input[name=\\'shippingAddress[street]\\']').val(),\n 'zipcode': $('input[name=\\'shippingAddress[zipcode]\\']').val(),\n 'city': $('input[name=\\'shippingAddress[city]\\']').val(),\n 'countryCode': $('select[name=\\'shippingAddress[countryCode]\\']').val(),\n 'additionalLine': $('input[name=\\'shippingAddress[additionalLine]\\']').val(),\n 'isDefault': false\n }\n };\n\n $.ajax('/api-customer-de/shipping-addresses', {\n cache: false,\n headers: {\n 'Accept': 'application/json',\n },\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify($data),\n method: 'POST',\n statusCode: {\n 201: function()\n {\n init();\n hideOverlay();\n displaySuccessFeedbackMessage(getTranslation('feedback.account.address.new.ok.heading'));\n },\n 400: function()\n {\n console.log('Bad Request - new address could not be created.');\n },\n 403: function()\n {\n console.log('Forbidden. Client must be authenticated and use valid session');\n }\n }\n });\n }\n }\n\n function hideOverlay()\n {\n $overlay.addClass('hidden');\n $('body').removeClass('no-scroll focus-active');\n }\n\n function updateList(data)\n {\n clearShippingAddressList();\n var $defaultId = data['defaultShippingAddressId'];\n var $items = data['shippingAddresses'];\n\n $.each($items, function(index, value)\n {\n insertShippingAddressEntry( value, $defaultId );\n });\n\n updateOrderFormShippingAddressId();\n }\n\n function updateOrderFormShippingAddressId()\n {\n let $addressEntries = $('li.address-entry');\n\n $addressEntries.each(function()\n {\n if ($(this).hasClass('default'))\n {\n var $form = $(this).parent()\n .parent();\n var $input = $form.find('input[name=\\'addressId\\']');\n\n setOrderFormShippingAddressId($input.val());\n $(submit).removeClass('disabled');\n }\n });\n }\n\n function setOrderFormShippingAddressId($id)\n {\n $(orderFormShippingAddressId).val($id);\n }\n\n function clearShippingAddressList()\n {\n $addressList.empty();\n }\n\n function insertShippingAddressEntry( $address, $defaultId )\n {\n var $default = ($defaultId == $address['addressId']) ? ' default' : '';\n\n var $html = '
  • '\n\t\t\t+ '
    '\n\t\t\t+ '
    '\n\t\t\t+ '

    ' + $address['lastName'] + '

    '\n\t\t\t+ '

    ' + $address['street']\n\t\t\t+ ', ' + $address['zipcode']\n\t\t\t+ ' ' + $address['city']\n\t\t\t+ ', ' + $address['countryCode']\n\t\t\t+ '

    '\n\t\t\t+ '
    '\n\t\t\t+ '
    '\n + ''\n + ''\n\t\t\t+ ''\n\t\t\t+ ''\n\t\t\t+ ''\n\t\t\t+ '
    '\n\t\t\t+ '
    '\n\t\t\t+ '
  • ';\n\n $addressList.append($html);\n }\n\n init();\n});\n","jQuery(function($)\n{\n var\n { hide } = orion,\n classDeleted = 'mark-deleted',\n model = {},\n view = {};\n\n (function()\n {\n var\n $body = $('body'),\n $container = $('#shoppinglist-container'),\n { show } = orion,\n apiShoppingList = orion.api.shoppinglist,\n apiCart = orion.api.cart.orderitems,\n $cart = $('#basket-onsite'),\n ghostAnimationRunning = false;\n\n view.$list = $('.list-items', $container);\n\n $('.list-items .item', $container).each(function()\n {\n var\n $li = $(this),\n productNumber = $li.attr('id');\n\n model[productNumber] = {\n 'deleted': false,\n 'productNumber': productNumber\n };\n\n view[productNumber] = {\n '$item': $li,\n '$deleted': $li.next('.' + classDeleted)\n };\n });\n\n function handleAddToBasket(e)\n {\n e.preventDefault();\n\n var\n $addTo = $(this),\n productNumber = $addTo.data('product-number'),\n quantity = $('input[name=quantity]', $container).val(),\n $selectorProductImage = $('li[id=' + productNumber + '] img', $container);\n\n animateImageToCart($($selectorProductImage), $cart, productNumber);\n\n $body.addClass(orion.constants.ClassProcessing);\n $body.removeClass(orion.constants.ClassBasketUpdated);\n\n apiCart.create({\n 'productNumber': productNumber,\n 'quantity': quantity\n }).done(function()\n {\n $container.trigger(orion.constants.EventCartProductCreated, {\n 'productNumber': productNumber\n });\n })\n .always(function()\n {\n $body.removeClass(orion.constants.ClassProcessing);\n });\n }\n\n function deleteItem(productNumber)\n {\n var\n thisView = view[productNumber],\n thisModel = model[productNumber],\n data = {\n 'productNumber': productNumber\n };\n\n return apiShoppingList.del(data)\n .done(function()\n {\n $container.trigger(orion.constants.EventShoppingListProductDeleted, data);\n hide(thisView.$item);\n show(thisView.$deleted);\n thisModel.deleted = true;\n })\n .fail(function()\n {\n hide(thisView.$deleted);\n show(thisView.$item);\n thisModel.deleted = false;\n });\n }\n\n function undoDeleteItem(productNumber)\n {\n var\n thisView = view[productNumber],\n thisModel = model[productNumber],\n data = {\n 'productNumber': productNumber\n };\n\n return apiShoppingList.create(data)\n .done(function()\n {\n $container.trigger(orion.constants.EventShoppingListProductCreated, data);\n hide(thisView.$deleted);\n show(thisView.$item);\n thisModel.deleted = false;\n });\n }\n\n function handleDeleteClick(e)\n {\n var\n $delete = $(this),\n productNumber = $delete.data('product-number');\n\n e.preventDefault();\n\n hide($delete);\n\n deleteItem(productNumber)\n .always(function()\n {\n show($delete);\n });\n }\n\n function handleUndoDeleteClick(e)\n {\n var\n $undo = $(this),\n productNumber = $undo.data('product-number');\n\n e.preventDefault();\n\n hide($undo);\n\n undoDeleteItem(productNumber)\n .always(function()\n {\n show($undo);\n });\n }\n\n function animateImageToCart($img, $cart, $productNumber)\n {\n if (ghostAnimationRunning)\n {\n return;\n }\n\n if (!window.requestAnimationFrame)\n {\n return;\n }\n\n ghostAnimationRunning = true;\n\n var\n offsetImage = $img.offset(),\n offsetCart = $cart.offset(),\n $ghostImage = $img.clone().insertAfter($('li[id= ' + $productNumber + '] .container'))\n .css({\n 'position': 'absolute',\n 'top': '0px',\n 'z-index': 96\n }),\n offsetGhostImage = $ghostImage.offset();\n\n $ghostImage.css(orion.toTranslateStyle(offsetImage.left - offsetGhostImage.left,\n offsetImage.top - offsetGhostImage.top));\n requestAnimationFrame(function()\n {\n var style = orion.toTranslateStyle(offsetCart.left - offsetGhostImage.left,\n offsetCart.top - offsetGhostImage.top);\n\n style.transform += ' scale(0.01)';\n\n $ghostImage.css($.extend(style, {\n 'opacity': 0,\n 'transform-origin': 'top left',\n 'transition': 'all 0.5s ease-in'\n }));\n\n setTimeout(function()\n {\n $ghostImage.remove();\n ghostAnimationRunning = false;\n }, 500);\n });\n }\n\n hide($('.' + classDeleted));\n\n $container\n .on('click', '.addToBasket', handleAddToBasket)\n .on('click', '.list-items .delete', handleDeleteClick)\n .on('click', '.list-items .undo-delete', handleUndoDeleteClick);\n })();\n});\n","jQuery(function($)\n{\n var\n { map } = orion,\n STREET = 'street',\n COUNTRYCODE = 'countryCode',\n META_SUFFIX_STREET_FEEDBACK_INVALID = '_' + STREET + '_feedback_invalid',\n META_SUFFIX_STREET_FEEDBACK_MISSING = '_' + STREET + '_feedback_missing',\n META_SUFFIX_STREET_PATTERN = '_' + STREET + '_pattern',\n ATTRIBUTE_SUFFIX_STREET = '[' + STREET + ']',\n ATTRIBUTE_SUFFIX_COUNTRYCODE = '[' + COUNTRYCODE + ']',\n ATTR_PATTERN = 'pattern',\n TEXT_FEEDBACK_INVALID = '.feedback.invalid',\n TEXT_FEEDBACK_MISSING = '.feedback.missing',\n $street = $('[name$=\"' + ATTRIBUTE_SUFFIX_STREET + '\"]'),\n $countryCode = $('[name$=\"' + ATTRIBUTE_SUFFIX_COUNTRYCODE + '\"]'),\n metaName = {\n '.feedback.invalid': META_SUFFIX_STREET_FEEDBACK_INVALID,\n '.feedback.missing': META_SUFFIX_STREET_FEEDBACK_MISSING,\n 'pattern': META_SUFFIX_STREET_PATTERN\n },\n metaElements = map(metaName, function(name)\n {\n return $('meta[name$=\"' + name + '\"]');\n }),\n metaData = (function()\n {\n var i,\n metaData = {};\n\n for (i in metaElements)\n {\n if (Object.prototype.hasOwnProperty.call(metaElements, i))\n {\n metaElements[i].each(function()\n {\n var\n $meta = $(this),\n countryCode = $meta.attr('name').slice(0, -metaName[i].length),\n thisMetaData = {};\n\n thisMetaData[countryCode] = {\n 'attr': {},\n 'text': {}\n };\n switch (i)\n {\n case ATTR_PATTERN:\n thisMetaData[countryCode]['attr'][i] = $meta.attr('content');\n break;\n case TEXT_FEEDBACK_INVALID:\n case TEXT_FEEDBACK_MISSING:\n thisMetaData[countryCode]['text'][i] = $meta.attr('content');\n break;\n default:\n break;\n }\n\n $.extend(true, metaData, thisMetaData);\n });\n }\n }\n return metaData;\n })();\n\n function getTextNodesIn(node, includeWhitespaceNodes)\n {\n var textNodes = [],\n nonWhitespaceMatcher = /\\S/;\n\n function getTextNodes(node)\n {\n if (node.nodeType == 3)\n {\n if (includeWhitespaceNodes || nonWhitespaceMatcher.test(node.nodeValue))\n {\n textNodes.push(node);\n }\n }\n else\n {\n for (var i = 0, len = node.childNodes.length; i < len; ++i)\n {\n getTextNodes(node.childNodes[i]);\n }\n }\n }\n\n getTextNodes(node);\n return textNodes;\n }\n\n function updateAttributes($el, metaData)\n {\n $el.attr(metaData);\n }\n\n function updateText($el, metaData)\n {\n var $parent = $el.parent();\n var selector;\n\n for (selector in metaData)\n {\n if (Object.prototype.hasOwnProperty.call(metaData, selector))\n {\n getTextNodesIn($parent.find(selector).get(0), false)[0].textContent = metaData[selector];\n }\n }\n }\n\n function delegateUpdates(o)\n {\n var\n $countryCode = $(this),\n countryCode = $countryCode.val(),\n $street = $countryCode.data('$street');\n\n if (!metaData[countryCode] || $street.data('addressType') == 'packstation')\n {\n return;\n }\n\n o = $.extend({}, { 'triggerValidationParametersChanged': false }, o);\n\n updateAttributes($street, metaData[countryCode].attr);\n updateText($street, metaData[countryCode].text);\n\n if (o.triggerValidationParametersChanged && $street.val().length !== 0)\n {\n $street.trigger(orion.constants.EventValidationParametersChanged);\n }\n }\n\n function handleChange()\n {\n delegateUpdates.apply(this, [{ 'triggerValidationParametersChanged': true }]);\n }\n\n function initialize()\n {\n $street.each(function()\n {\n var\n $street = $(this),\n groupName = $street.attr('name').slice(0, -ATTRIBUTE_SUFFIX_STREET.length),\n $countryCode = $('[name=\"' + groupName + '[' + COUNTRYCODE + ']\"]');\n\n $street.data('$countryCode', $countryCode);\n $countryCode.data('$street', $street);\n });\n\n $countryCode.each(delegateUpdates);\n }\n\n initialize();\n $countryCode.filter('select').on('change', handleChange);\n});\n","jQuery(function($)\n{\n var\n $terms = $('#terms'),\n $termsTrigger = $('#terms-accepted'),\n $downloadTriggers = $('.download-trigger');\n\n var $downloadCopyLinkTrigger = $('.js-download-accepted');\n\n if (localStorage.getItem('download-accepted'))\n {\n $downloadTriggers.each(function()\n {\n $(this).removeClass('overlay-trigger');\n });\n $downloadCopyLinkTrigger.each(function()\n {\n $(this).removeClass('hidden');\n });\n }\n\n function isRead($element)\n {\n return $element[0].scrollTop + $element.height() >= $element[0].scrollHeight - 40; // include padding 40\n }\n\n $terms.scroll(function()\n {\n if (isRead($terms))\n {\n $termsTrigger.removeClass('disabled');\n }\n });\n\n $downloadTriggers.on('click', function()\n {\n $termsTrigger.attr('href', $(this).attr('href'));\n });\n\n $termsTrigger.on('click', function()\n {\n localStorage.setItem('download-accepted', '1');\n $downloadTriggers.each(function()\n {\n $(this).removeClass('overlay-trigger');\n });\n $downloadCopyLinkTrigger.each(function()\n {\n $(this).removeClass('hidden');\n });\n });\n});\n","import { getLanguageCode } from '../utilities';\n\nexport default class InvoiceClient\n{\n constructor()\n {\n let languageCode = getLanguageCode();\n\n this._uri = '/v1-api-customer-private-file-list-' + languageCode;\n this._dataResponse = 'response';\n this._dataSrc = 'customerPrivateFileList';\n }\n\n get uri()\n {\n return this._uri;\n }\n\n get dataResponse()\n {\n return this._dataResponse;\n }\n\n get dataSrc()\n {\n return this._dataSrc;\n }\n\n /**\n\t * GET\n\t */\n\n /**\n\t * @returns {Promise}\n\t */\n fetchAllItems()\n {\n return fetch(this._uri);\n }\n\n /**\n\t * PUT\n\t */\n\n /**\n\t * @param {array} ids - Document IDs\n\t * @returns {Promise}\n\t */\n updateNoticedItems(ids)\n {\n return fetch(this._uri + '/noticed', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(\n ids.map(id => ({ 'customerPrivateFileId': id }))\n )\n });\n }\n\n /**\n\t * @param {number} id - Document ID\n\t * @returns {Promise}\n\t */\n updateDownloadedItem(id)\n {\n return fetch(this._uri + '/downloaded', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify([\n { 'customerPrivateFileId': id }\n ])\n });\n }\n}\n","import Mustache from 'mustache';\nimport { getTranslation } from './utilities';\nimport InvoiceClient from './clients/InvoiceClient';\n\nclass InvoiceList\n{\n constructor()\n {\n this.invoiceListClient = new InvoiceClient();\n this.itemElementTemplate = document.querySelector('#invoiceListItemElementTemplate').innerHTML;\n this.selector = '.js-invoice-list';\n this.invoiceDownloadButtonSelector = '.js-invoice__download-button';\n\n this.table = undefined;\n }\n\n init()\n {\n let self = this;\n\n this.table = $(this.selector).DataTable({\n ajax: {\n url: this.invoiceListClient.uri,\n data: function(data)\n {\n return {\n skip: data.start,\n take: data.length,\n sort: self.formatOrder(self, data.order)\n };\n },\n // dataSrc: this.invoiceListClient.dataSrc\n dataSrc: (json) =>\n {\n let jsonData = json[this.invoiceListClient.dataResponse];\n return jsonData[this.invoiceListClient.dataSrc];\n }\n },\n dom:'l\\\n\t\t\t\t\tf\\\n\t\t\t\t\tr\\\n\t\t\t\t\t<\"invoice-list-table__scroll table--scroll-mobile\"t>\\\n\t\t\t\t\tp\\\n\t\t\t\t\ti',\n pageLength: 20,\n paging: true,\n info: false,\n serverSide: true,\n processing: true,\n searching: false,\n lengthChange: false,\n language: this.datatableTexts(),\n order: [[0, 'desc']],\n columnDefs: [\n {\n targets: [0, 1, 2, 3],\n orderable: false\n },\n {\n width: '25%',\n targets: 0,\n className: 'invoice-list__creation_datetime',\n render: function(data, type, row)\n {\n let invoiceListRow = row.customerPrivateFile;\n let creationDatetime = new Date(invoiceListRow.creationDatetime.toString());\n\n invoiceListRow.fileTypeInvoice = invoiceListRow.fileType === '_invoice_';\n invoiceListRow.creationDatetime = creationDatetime.getDate() + '.'\n\t\t\t\t\t\t\t+ ('0' + (creationDatetime.getMonth() + 1)).slice(-2) + '.'\n\t\t\t\t\t\t\t+ creationDatetime.getFullYear();\n\n invoiceListRow.creationDatetimeHours = ('0' + (creationDatetime.getHours() + 1)).slice(-2) + ':'\n\t\t\t\t\t\t\t+ ('0' + (creationDatetime.getMinutes() + 1)).slice(-2);\n return Mustache.render(this.itemElementTemplate, {\n invoiceList: invoiceListRow,\n invoiceListCreationDate: true\n });\n }.bind(this)\n },\n {\n width: '25%',\n targets: 1,\n className: 'invoice-list__erp_file_id text--center',\n render: function(data, type, row)\n {\n let invoiceListRow = row.customerPrivateFile;\n return Mustache.render(this.itemElementTemplate, {\n invoiceList: invoiceListRow,\n invoiceListNumber: true,\n noDatetime: true\n });\n }.bind(this)\n },\n {\n width: '25%',\n data: null,\n targets: 2,\n className: 'invoice-list__state text--center',\n render: function(data, type, row)\n {\n let invoiceListRow = row.customerPrivateFile;\n let hadDownloaded = false;\n let hasNoticed = false;\n let hasNoDatetime = true;\n\n if (invoiceListRow.downloadedDatetime !== 'null')\n {\n let downloadedDatetime = new Date(invoiceListRow.downloadedDatetime);\n invoiceListRow.downloadedDatetime = downloadedDatetime.getDate() + '.'\n\t\t\t\t\t\t\t\t+ ('0' + (downloadedDatetime.getMonth() + 1)).slice(-2) + '.'\n\t\t\t\t\t\t\t\t+ downloadedDatetime.getFullYear();\n\n invoiceListRow.downloadedDatetimeHours = ('0' + (downloadedDatetime.getHours())).slice(-2)\n + ':' + ('0' + (downloadedDatetime.getMinutes())).slice(-2);\n\n hadDownloaded = true;\n hasNoDatetime = false;\n }\n\n if (invoiceListRow.noticedDatetime !== 'null')\n {\n hasNoticed = true;\n hasNoDatetime = false;\n }\n\n return Mustache.render(this.itemElementTemplate, {\n invoiceList: invoiceListRow,\n invoiceListStatus: true,\n downloaded: hadDownloaded,\n noticed: hasNoticed,\n noDatetime: hasNoDatetime\n });\n }.bind(this)\n },\n {\n width: '25%',\n targets: 3,\n className: 'invoice-list__download text--center',\n render: function(data, type, row)\n {\n let invoiceListRow = row.customerPrivateFile;\n invoiceListRow.href = 'assets/private/'\n\t\t\t\t\t\t\t+ invoiceListRow.mandatorId\n\t\t\t\t\t\t\t+ '/' + invoiceListRow.customerPrivateFileId\n\t\t\t\t\t\t\t+ '/' + invoiceListRow.filename;\n return Mustache.render(this.itemElementTemplate, {\n invoiceList: invoiceListRow,\n downloadLink: true\n });\n }.bind(this)\n },\n ],\n drawCallback: function()\n {\n $('#invoiceListItemTable thead').show();\n $('#invoiceListItemTable').eq(0).hide();\n\n this.updateNoticedItems();\n this.initEvents();\n }.bind(this),\n\n initComplete: function()\n {\n let isEmpty = this.table.data().count() === 0;\n\n if (!isEmpty)\n {\n this.createSortSelection(this.table);\n }\n }.bind(this),\n createdRow: function(row, data)\n {\n let $row = $(row);\n\n $row.attr('data-erp-file-id', data.id);\n }\n });\n }\n\n initEvents()\n {\n document.querySelectorAll(this.invoiceDownloadButtonSelector).forEach(button =>\n {\n button.addEventListener('click', () =>\n {\n let id = parseInt(button.getAttribute('data-uid'));\n\n this.invoiceListClient.updateDownloadedItem(id)\n .catch(error =>\n {\n console.error(error);\n });\n });\n });\n }\n\n updateNoticedItems()\n {\n let items = this.table.rows().data().toArray();\n let itemIds = items.map(item => item.customerPrivateFile.customerPrivateFileId);\n\n this.invoiceListClient.updateNoticedItems(itemIds)\n .catch(error =>\n {\n console.error(error);\n });\n }\n\n createSortSelection(table)\n {\n let filterSection = document.createElement('div');\n let sortSelection = document.createElement('select');\n\n filterSection.classList.add('invoice-list__sort', 'js-invoice-list__sort', 'select-button-container');\n\n let { 0: columns } = table.columns();\n\n for (let i = 0; i < columns.length; i++)\n {\n let optionText = getTranslation('content.invoice.list.header.col.' + i);\n\n if (optionText)\n {\n let optionDescending = document.createElement('option');\n let optionAscending = document.createElement('option');\n\n optionDescending.value = columns[i] !== 0 ? columns[i] * -1 : -999;\n optionDescending.text = optionText + ' ' + getTranslation('content.invoice.list.sort.descending');\n sortSelection.appendChild(optionDescending);\n\n optionAscending.value = columns[i] !== 0 ? columns[i] : 999;\n optionAscending.text = optionText + ' ' + getTranslation('content.invoice.list.sort.ascending');\n sortSelection.appendChild(optionAscending);\n }\n }\n\n filterSection.append(sortSelection);\n document.querySelector('.js-invoice-list_filter_sorting_section').append(filterSection);\n\n sortSelection.addEventListener('change', function()\n {\n if (this.value < 0)\n {\n table.order([this.value != -999 ? this.value * -1 : 0, 'desc']).draw();\n }\n else if (this.value > 0)\n {\n table.order([this.value != 999 ? this.value : 0, 'asc']).draw();\n }\n else\n {\n table.order([0, 'asc']).draw();\n }\n });\n }\n\n datatableTexts()\n {\n return {\n 'paginate': {\n 'previous': '',\n 'next': '',\n },\n 'processing': getTranslation('content.invoice.processing'),\n 'loadingRecords': getTranslation('content.invoice.loading'),\n };\n }\n\n formatOrder(self, order)\n {\n $(order).each(function(k)\n {\n order[k].field = self.matchOrderIdWithColumnName(order[k].column);\n order[k].dir = order[k].dir.toUpperCase();\n });\n\n return order;\n }\n\n matchOrderIdWithColumnName(orderId)\n {\n switch (orderId)\n {\n case 0:\n return 'creationDatetime';\n case 1:\n return 'erpFileId';\n case 2:\n return 'downloadedTime';\n case 3:\n return 'download';\n default:\n return null;\n }\n }\n}\n\nif (document.querySelector('.js-invoice-list') !== null)\n{\n (new InvoiceList()).init();\n}\n","import { getLanguageCode } from '../utilities';\n\nexport default class InvoiceUnpaidClient\n{\n constructor()\n {\n let languageCode = getLanguageCode();\n this._uri = '/v1-api-unpaid-invoice-details-' + languageCode;\n this._dataSrc = 'response';\n }\n\n get uri()\n {\n return this._uri;\n }\n\n get dataSrc()\n {\n return this._dataSrc;\n }\n /**\n\t * GET\n\t */\n\n /**\n\t * @returns {Promise}\n\t */\n fetchAllItems()\n {\n return fetch(this._uri);\n }\n}\n","import Mustache from 'mustache';\nimport { getTranslation } from './utilities';\nimport InvoiceUnpaidClient from './clients/InvoiceUnpaidClient';\n\nclass InvoiceListUnpaid\n{\n constructor()\n {\n this.invoiceListUnpaidClient = new InvoiceUnpaidClient();\n this.itemElementTemplate = document.querySelector('#invoiceListUnpaidItemElementTemplate').innerHTML;\n this.selector = '.js-invoice-list-unpaid';\n\n this.table = undefined;\n }\n\n init()\n {\n let self = this;\n\n this.table = $(this.selector).DataTable({\n ajax: {\n url: this.invoiceListUnpaidClient.uri,\n data: function(data)\n {\n return {\n skip: data.start,\n take: data.length,\n sort: self.formatOrder(self, data.order)\n };\n },\n // dataSrc: this.invoiceListUnpaidClient.dataSrc\n dataSrc: (json) =>\n {\n let jsonData = json[this.invoiceListUnpaidClient.dataSrc]['invoiceDetails'];\n for (let i = 0; i < json[this.invoiceListUnpaidClient.dataSrc]['invoiceDetails'].length; i++)\n {\n jsonData[i].hasInvoiceDetails = json[this.invoiceListUnpaidClient.dataSrc].hasInvoiceDetails;\n jsonData[i].balances = json[this.invoiceListUnpaidClient.dataSrc].balances;\n }\n return jsonData;\n }\n },\n dom:'l\\\n\t\t\t\tf\\\n\t\t\t\tr\\\n\t\t\t\t<\"invoice-list-table__scroll table--scroll-mobile\"t>\\\n\t\t\t\tp\\\n\t\t\t\ti',\n paging: false,\n info: false,\n searching: false,\n lengthChange: false,\n language: this.datatableTexts(),\n order: [[0, 'desc']],\n columnDefs: [\n {\n targets: [0, 1, 2, 3, 4],\n orderable: false\n },\n {\n width: '20%',\n targets: 0,\n class: 'invoice-list__creation_datetime',\n render: function(data, type, row)\n {\n row.invoiceDate = row.invoiceDate.toString();\n\n return Mustache.render(this.itemElementTemplate, {\n invoiceListUnpaid: row,\n invoiceListUnpaidInvoiceDate: true\n });\n }.bind(this)\n },\n {\n width: '20%',\n targets: 1,\n class: 'invoice-list__erp_document_id text--center',\n render: function(data, type, row)\n {\n return Mustache.render(this.itemElementTemplate, {\n invoiceListUnpaid: row,\n invoiceListUnpaidNumber: true\n });\n }.bind(this)\n },\n {\n width: '20%',\n data: null,\n targets: 2,\n class: 'invoice-list__due-date text--center',\n render: function(data, type, row)\n {\n row.dueDate = row.dueDate.toString();\n\n return Mustache.render(this.itemElementTemplate, {\n invoiceListUnpaid: row,\n invoiceListUnpaidDueDate: true\n });\n }.bind(this)\n },\n {\n width: '20%',\n data: null,\n targets: 3,\n class: 'invoice-list__due-amount text--center',\n render: function(data, type, row)\n {\n row.dueAmount = row.dueAmount.replace(/€/g, '€');\n return Mustache.render(this.itemElementTemplate, {\n invoiceListUnpaid: row,\n invoiceListUnpaidDueAmount: true\n });\n }.bind(this)\n },\n {\n width: '20%',\n targets: 4,\n class: 'invoice-list__download text--center',\n render: function(data, type, row)\n {\n return Mustache.render(this.itemElementTemplate, {\n invoiceListUnpaid: row,\n downloadLink: true\n });\n }.bind(this)\n },\n ],\n footerCallback: function(row, data)\n {\n let api = this.api();\n if (data.length >= 1)\n {\n if (self.formatedMoneyStringToInt(data[0].balances.notAssignable) >= 0)\n {\n $('#js-amount-plus').removeClass('hidden');\n }\n else\n {\n $('#js-amount-minus').removeClass('hidden');\n }\n\n if (self.formatedMoneyStringToInt(data[0].balances.accountBalance) >= 0)\n {\n $('#js-total-amount-plus').removeClass('hidden');\n }\n else\n {\n $('#js-total-amount-minus').removeClass('hidden');\n }\n\n $('tr:eq(0) td:eq(3)', api.table().footer()).html(\n '
    '\n\t\t\t\t\t\t+ ''\n\t\t\t\t\t\t+ data[0].balances.notAssignable\n\t\t\t\t\t\t+ '
    '\n );\n\n $('tr:eq(1) td:eq(3)', api.table().footer()).html(\n '
    '\n\t\t\t\t\t\t+ '
    '\n );\n }\n },\n drawCallback: function()\n {\n $('#invoiceListUnpaidItemTable thead').show();\n $('#invoiceListUnpaidItemTable').eq(0)\n .hide();\n }.bind(this),\n initComplete: function()\n {\n let isEmpty = this.table.data().count() === 0;\n\n if (!isEmpty)\n {\n this.createSortSelection(this.table);\n }\n }.bind(this),\n createdRow: function(row, data)\n {\n let $row = $(row);\n\n $row.attr('data-erp-file-id', data.id);\n }\n });\n }\n\n createSortSelection(table)\n {\n let filterSection = document.createElement('div');\n let sortSelection = document.createElement('select');\n\n filterSection.classList.add('invoice-list-unpaid__sort', 'js-invoice-list-unpaid__sort',\n 'select-button-container');\n\n let { 0: columns } = table.columns();\n\n for (let i = 0; i < columns.length; i++)\n {\n let optionText = getTranslation('content.invoice.list.unpaid.header.col.' + i);\n\n if (optionText)\n {\n let optionDescending = document.createElement('option');\n let optionAscending = document.createElement('option');\n\n optionDescending.value = columns[i] !== 0 ? columns[i] * -1 : -999;\n optionDescending.text = optionText + ' ' + getTranslation('content.invoice.list.sort.descending');\n sortSelection.appendChild(optionDescending);\n\n optionAscending.value = columns[i] !== 0 ? columns[i] : 999;\n optionAscending.text = optionText + ' ' + getTranslation('content.invoice.list.sort.ascending');\n sortSelection.appendChild(optionAscending);\n }\n }\n\n filterSection.append(sortSelection);\n document.querySelector('.js-invoice-list-unpaid_filter_sorting_section').append(filterSection);\n\n sortSelection.addEventListener('change', function()\n {\n if (this.value < 0)\n {\n table.order([this.value != -999 ? this.value * -1 : 0, 'desc']).draw();\n }\n else if (this.value > 0)\n {\n table.order([this.value != 999 ? this.value : 0, 'asc']).draw();\n }\n else\n {\n table.order([0, 'asc']).draw();\n }\n });\n }\n\n datatableTexts()\n {\n return {\n 'paginate': {\n 'previous': '',\n 'next': '',\n },\n 'processing': getTranslation('content.invoice.processing'),\n 'loadingRecords': getTranslation('content.invoice.loading'),\n // 'info': getTranslation('content.shipmentdetails.info.entries'),\n };\n }\n\n formatOrder(self, order)\n {\n $(order).each(function(k)\n {\n order[k].field = self.matchOrderIdWithColumnName(order[k].column);\n order[k].dir = order[k].dir.toUpperCase();\n });\n\n return order;\n }\n\n matchOrderIdWithColumnName(orderId)\n {\n switch (orderId)\n {\n case 0:\n return 'invoiceDate';\n case 1:\n return 'erpDocumentId';\n case 2:\n return 'dueDate';\n case 3:\n return 'dueAmount';\n default:\n return null;\n }\n }\n\n formatedMoneyStringToInt(formattedMoney)\n {\n return parseInt(formattedMoney.replace(/(,|\\.|€)|€/, ''), 10);\n }\n}\n\nif (document.querySelector('.js-invoice-list') !== null)\n{\n (new InvoiceListUnpaid()).init();\n}\n","import { getLanguageCode } from '../utilities';\n\nexport default class ShipmentTrackingClient\n{\n constructor()\n {\n let languageCode = getLanguageCode();\n\n this._uri = '/v1-api-shipment-details-' + languageCode;\n this._dataSrc = 'shipmentDetailsList';\n }\n\n get uri()\n {\n return this._uri;\n }\n\n get dataSrc()\n {\n return this._dataSrc;\n }\n\n /**\n\t * GET\n\t */\n\n /**\n\t * @returns {Promise}\n\t */\n fetchAllItems()\n {\n return fetch(this._uri + '/items');\n }\n\n /**\n\t * @param orderId\n\t * @returns {Promise}\n\t */\n // fetchOrder(orderId) {\n //\treturn fetch(this._uri + '/' + orderId);\n // }\n\n /**\n\t * @param orderId\n\t * @param offset\n\t * @param limit\n\t * @returns {Promise}\n\t */\n fetchItems(orderId, offset, limit)\n {\n return fetch(this._uri + '/' + orderId + '/items', {\n headers: {\n 'Content-Type': 'application/json'\n },\n body: {\n 'skip': offset,\n 'take': limit\n }\n });\n }\n}\n","import Mustache from 'mustache';\nimport { getTranslation } from './utilities';\nimport ShipmentTrackingClient from './clients/ShipmentTrackingClient';\n\nclass AccountShipmentTracking\n{\n constructor()\n {\n this.shipmentTrackingClient = new ShipmentTrackingClient();\n this.itemElementTemplate = document.querySelector('#shipmentTrackingItemElementTemplate').innerHTML;\n this.selector = '.js-shipment-tracking';\n }\n\n init()\n {\n let self = this;\n\n $(this.selector).DataTable({\n ajax: {\n url: this.shipmentTrackingClient.uri,\n data: function(data)\n {\n return {\n skip: data.start,\n take: data.length,\n sort: self.formatOrder(self, data.order)// data.order\n };\n },\n // dataSrc: this.shipmentTrackingClient.dataSrc\n dataSrc: (json) =>\n {\n for (let i = 0; i < json[this.shipmentTrackingClient.dataSrc].length; i++)\n {\n json[this.shipmentTrackingClient.dataSrc][i].invoice\n\t\t\t\t\t\t\t= this.createInvoiceDocumentLink(\n json[this.shipmentTrackingClient.dataSrc][i].customerId,\n json[this.shipmentTrackingClient.dataSrc][i].customerPrivateFileName\n );\n\n json[this.shipmentTrackingClient.dataSrc][i].url\n\t\t\t\t\t\t\t= this.createShipmentCarrierLink(\n json[this.shipmentTrackingClient.dataSrc][i].shipmentCarrier,\n json[this.shipmentTrackingClient.dataSrc][i].trackingCode\n );\n }\n return json[this.shipmentTrackingClient.dataSrc];\n }\n },\n dom:'l\\\n\t\t\t\tf\\\n\t\t\t\tr\\\n\t\t\t\t<\"shipment-tracking-table__scroll table--scroll-mobile\"t>\\\n\t\t\t\tp\\\n\t\t\t\ti',\n pageLength: 20,\n serverSide: true,\n processing: true,\n searching: false,\n lengthChange: false,\n language: this.datatableTexts(),\n columnDefs: [{\n targets: [0, 1, 2, 3, 4],\n orderable: false\n },\n {\n width: '20%',\n targets: 0,\n orderable: false,\n className: 'shipment-tracking-list__invoice',\n render: function(data, type, row)\n {\n return Mustache.render(this.itemElementTemplate, {\n shipmentTrackingList: row,\n invoiceDocumentIdColumn: true\n });\n }.bind(this)\n },\n {\n width: '15%',\n targets: 1,\n orderable: false,\n className: 'shipment-tracking-list__shippedon text--center',\n render: function(data, type, row)\n {\n let shipmentDatetime = new Date(row.shipmentDatetime.toString());\n\n row.shipmentDatetime = shipmentDatetime.getDate() + '.'\n\t\t\t\t\t\t+ ('0' + (shipmentDatetime.getMonth() + 1)).slice(-2) + '.'\n\t\t\t\t\t\t+ shipmentDatetime.getFullYear();\n return Mustache.render(this.itemElementTemplate, {\n shipmentTrackingList: row,\n shipmentDatetimeColumn: true\n });\n }.bind(this)\n },\n {\n width: '15%',\n data: null,\n targets: 2,\n orderable: false,\n className: 'shipment-tracking-list__parcelnumber text--center',\n render: function(data, type, row)\n {\n let parcelCountLTColumn = true;\n let parcelCountGTColumn = false;\n\n if (row.parcelCount !== 1)\n {\n parcelCountLTColumn = false;\n parcelCountGTColumn = true;\n }\n return Mustache.render(this.itemElementTemplate, {\n shipmentTrackingList: row,\n parcelCountLTColumn: parcelCountLTColumn,\n parcelCountGTColumn: parcelCountGTColumn\n });\n }.bind(this)\n },\n {\n width: '24%',\n targets: 3,\n orderable: false,\n className: 'shipment-tracking-list__trackingnumber text--center',\n render: function(data, type, row)\n {\n let trackingCodeColumnWithUrl = false;\n let trackingCodeColumnWithoutUrl = true;\n\n if (row.url !== '')\n {\n trackingCodeColumnWithUrl = true;\n trackingCodeColumnWithoutUrl = false;\n }\n return Mustache.render(this.itemElementTemplate, {\n shipmentTrackingList: row,\n trackingCodeColumnWithUrl: trackingCodeColumnWithUrl,\n trackingCodeColumnWithoutUrl: trackingCodeColumnWithoutUrl,\n shipmentTranslation: getTranslation('content.shipmentdetails.track.shipment')\n });\n }.bind(this)\n },\n {\n width: '25%',\n targets: 4,\n className: 'shipment-tracking-list__shippingaddress',\n orderable: false,\n render: function(data, type, row)\n {\n return Mustache.render(this.itemElementTemplate, {\n shipmentTrackingList: row,\n shippingAddressColumn: true\n });\n }.bind(this)\n }],\n createdRow: function(row, data)\n {\n let $row = $(row);\n\n $row.attr('data-shipment-tracking-id', data.id);\n }\n });\n }\n\n datatableTexts()\n {\n return {\n 'paginate': {\n 'previous': '',\n 'next': '',\n },\n 'processing': getTranslation('content.shipmentdetails.processing'),\n 'loadingRecords': getTranslation('content.shipmentdetails.loading'),\n 'info': getTranslation('content.shipmentdetails.info.entries'),\n };\n }\n\n formatOrder(self, order)\n {\n $(order).each(function(k)\n {\n order[k].field = self.matchOrderIdWithColumnName(order[k].column);\n });\n\n return order;\n }\n\n matchOrderIdWithColumnName(orderId)\n {\n switch (orderId)\n {\n case 0:\n return 'invoiceDocumentId';\n case 1:\n return 'shipmentDatetime';\n case 2:\n return 'parcelCount';\n case 3:\n return 'trackingCode';\n case 4:\n return 'shippingAddress';\n default:\n return null;\n }\n }\n\n createInvoiceDocumentLink(customerId, customerPrivateFileName)\n {\n let invoice;\n\n if (customerPrivateFileName)\n {\n invoice = 'assets/private/20/' + customerId + '/' + customerPrivateFileName;\n }\n else\n {\n invoice = '';\n }\n\n return invoice;\n }\n\n createShipmentCarrierLink(shipmentCarrier, trackingCode)\n {\n if (shipmentCarrier && trackingCode)\n {\n switch (shipmentCarrier)\n {\n case 'DHL':\n return 'https://nolp.dhl.de/nextt-online-public/set_identcodes.do?idc=' + trackingCode;\n case 'DHLEP':\n return 'https://nolp.dhl.de/nextt-online-public/set_identcodes.do?idc=' + trackingCode;\n case 'DPD':\n return 'https://tracking.dpd.de/parcelstatus?query=' + trackingCode;\n case 'UPS':\n return 'http://wwwapps.ups.com/WebTracking/processInputRequest?TypeOfInquiryNumber=T&InquiryNumber1=' + trackingCode;\n default:\n return '';\n }\n }\n }\n}\n\nif (document.querySelector('.js-shipment-tracking') !== null)\n{\n (new AccountShipmentTracking()).init();\n}\n","/*! https://mths.be/punycode v1.4.0 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.3.2',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see \n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","/*\n *!\n * URI.js - Mutating URLs\n * IPv6 Support\n *\n * Version: 1.18.10\n *\n * Author: Rodney Rehm\n * Web: http://medialize.github.io/URI.js/\n *\n * Licensed under\n * MIT License http://www.opensource.org/licenses/mit-license\n *\n */\n\n(function (root, factory) {\n\t'use strict';\n\t// https://github.com/umdjs/umd/blob/master/returnExports.js\n\tif (typeof module === 'object' && module.exports) {\n\t\t// Node\n\t\tmodule.exports = factory();\n\t} else if (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(factory);\n\t} else {\n\t\t// Browser globals (root is window)\n\t\troot.IPv6 = factory(root);\n\t}\n})(this, function (root) {\n\t'use strict';\n\n\t/*\n\t * var _in = \"fe80:0000:0000:0000:0204:61ff:fe9d:f156\";\n\t * var _out = IPv6.best(_in);\n\t * var _expected = \"fe80::204:61ff:fe9d:f156\";\n\t *\n\t * console.log(_in, _out, _expected, _out === _expected);\n\t */\n\n\t// save current IPv6 variable, if any\n\tvar _IPv6 = root && root.IPv6;\n\n\tfunction bestPresentation(address) {\n\t\t/*\n\t\t * based on:\n\t\t * Javascript to test an IPv6 address for proper format, and to\n\t\t * present the \"best text representation\" according to IETF Draft RFC at\n\t\t * http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04\n\t\t * 8 Feb 2010 Rich Brown, Dartware, LLC\n\t\t * Please feel free to use this code as long as you provide a link to\n\t\t * http://www.intermapper.com\n\t\t * http://intermapper.com/support/tools/IPV6-Validator.aspx\n\t\t * http://download.dartware.com/thirdparty/ipv6validator.js\n\t\t */\n\n\t\tvar _address = address.toLowerCase();\n\t\tvar segments = _address.split(':');\n\t\tvar length = segments.length;\n\t\tvar total = 8;\n\n\t\t// trim colons (:: or ::a:b:c… or …a:b:c::)\n\t\tif (segments[0] === '' && segments[1] === '' && segments[2] === '') {\n\t\t\t/*\n\t\t\t * must have been ::\n\t\t\t * remove first two items\n\t\t\t */\n\t\t\tsegments.shift();\n\t\t\tsegments.shift();\n\t\t} else if (segments[0] === '' && segments[1] === '') {\n\t\t\t/*\n\t\t\t * must have been ::xxxx\n\t\t\t * remove the first item\n\t\t\t */\n\t\t\tsegments.shift();\n\t\t} else if (segments[length - 1] === '' && segments[length - 2] === '') {\n\t\t\t// must have been xxxx::\n\t\t\tsegments.pop();\n\t\t}\n\n\t\tlength = segments.length;\n\n\t\t// adjust total segments for IPv4 trailer\n\t\tif (segments[length - 1].indexOf('.') !== -1) {\n\t\t\t// found a \".\" which means IPv4\n\t\t\ttotal = 7;\n\t\t}\n\n\t\t// fill empty segments them with \"0000\"\n\t\tvar pos;\n\n\t\tfor (pos = 0; pos < length; pos++) {\n\t\t\tif (segments[pos] === '') {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (pos < total) {\n\t\t\tsegments.splice(pos, 1, '0000');\n\t\t\twhile (segments.length < total) {\n\t\t\t\tsegments.splice(pos, 0, '0000');\n\t\t\t}\n\t\t}\n\n\t\t// strip leading zeros\n\t\tvar _segments;\n\n\t\tfor (var i = 0; i < total; i++) {\n\t\t\t_segments = segments[i].split('');\n\t\t\tfor (var j = 0; j < 3; j++) {\n\t\t\t\tif (_segments[0] === '0' && _segments.length > 1) {\n\t\t\t\t\t_segments.splice(0, 1);\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsegments[i] = _segments.join('');\n\t\t}\n\n\t\t// find longest sequence of zeroes and coalesce them into one segment\n\t\tvar best = -1;\n\t\tvar _best = 0;\n\t\tvar _current = 0;\n\t\tvar current = -1;\n\t\tvar inzeroes = false;\n\t\t// i; already declared\n\n\t\tfor (i = 0; i < total; i++) {\n\t\t\tif (inzeroes) {\n\t\t\t\tif (segments[i] === '0') {\n\t\t\t\t\t_current += 1;\n\t\t\t\t} else {\n\t\t\t\t\tinzeroes = false;\n\t\t\t\t\tif (_current > _best) {\n\t\t\t\t\t\tbest = current;\n\t\t\t\t\t\t_best = _current;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (segments[i] === '0') {\n\t\t\t\tinzeroes = true;\n\t\t\t\tcurrent = i;\n\t\t\t\t_current = 1;\n\t\t\t}\n\t\t}\n\n\t\tif (_current > _best) {\n\t\t\tbest = current;\n\t\t\t_best = _current;\n\t\t}\n\n\t\tif (_best > 1) {\n\t\t\tsegments.splice(best, _best, '');\n\t\t}\n\n\t\tlength = segments.length;\n\n\t\t// assemble remaining segments\n\t\tvar result = '';\n\n\t\tif (segments[0] === '') {\n\t\t\tresult = ':';\n\t\t}\n\n\t\tfor (i = 0; i < length; i++) {\n\t\t\tresult += segments[i];\n\t\t\tif (i === length - 1) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tresult += ':';\n\t\t}\n\n\t\tif (segments[length - 1] === '') {\n\t\t\tresult += ':';\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tfunction noConflict() {\n\t\t/*jshint validthis: true */\n\t\tif (root.IPv6 === this) {\n\t\t\troot.IPv6 = _IPv6;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\treturn {\n\t\tbest: bestPresentation,\n\t\tnoConflict: noConflict\n\t};\n});\n","/*\n *!\n * URI.js - Mutating URLs\n * Second Level Domain (SLD) Support\n *\n * Version: 1.18.10\n *\n * Author: Rodney Rehm\n * Web: http://medialize.github.io/URI.js/\n *\n * Licensed under\n * MIT License http://www.opensource.org/licenses/mit-license\n *\n */\n\n(function (root, factory) {\n\t'use strict';\n\t// https://github.com/umdjs/umd/blob/master/returnExports.js\n\tif (typeof module === 'object' && module.exports) {\n\t\t// Node\n\t\tmodule.exports = factory();\n\t} else if (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(factory);\n\t} else {\n\t\t// Browser globals (root is window)\n\t\troot.SecondLevelDomains = factory(root);\n\t}\n})(this, function (root) {\n\t'use strict';\n\n\t// save current SecondLevelDomains variable, if any\n\tvar _SecondLevelDomains = root && root.SecondLevelDomains;\n\n\tvar SLD = {\n\t\t/*\n\t\t * list of known Second Level Domains\n\t\t * converted list of SLDs from https://github.com/gavingmiller/second-level-domains\n\t\t * ----\n\t\t * publicsuffix.org is more current and actually used by a couple of browsers internally.\n\t\t * downside is it also contains domains like \"dyndns.org\" - which is fine for the security\n\t\t * issues browser have to deal with (SOP for cookies, etc) - but is way overboard for URI.js\n\t\t * ----\n\t\t */\n\t\tlist: {\n\t\t\t'ac':' com gov mil net org ',\n\t\t\t'ae':' ac co gov mil name net org pro sch ',\n\t\t\t'af':' com edu gov net org ',\n\t\t\t'al':' com edu gov mil net org ',\n\t\t\t'ao':' co ed gv it og pb ',\n\t\t\t'ar':' com edu gob gov int mil net org tur ',\n\t\t\t'at':' ac co gv or ',\n\t\t\t'au':' asn com csiro edu gov id net org ',\n\t\t\t'ba':' co com edu gov mil net org rs unbi unmo unsa untz unze ',\n\t\t\t'bb':' biz co com edu gov info net org store tv ',\n\t\t\t'bh':' biz cc com edu gov info net org ',\n\t\t\t'bn':' com edu gov net org ',\n\t\t\t'bo':' com edu gob gov int mil net org tv ',\n\t\t\t'br':' adm adv agr am arq art ato b bio blog bmd cim cng cnt com coop ecn edu eng esp etc eti far flog fm fnd fot fst g12 ggf gov imb ind inf jor jus lel mat med mil mus net nom not ntr odo org ppg pro psc psi qsl rec slg srv tmp trd tur tv vet vlog wiki zlg ',\n\t\t\t'bs':' com edu gov net org ',\n\t\t\t'bz':' du et om ov rg ',\n\t\t\t'ca':' ab bc mb nb nf nl ns nt nu on pe qc sk yk ',\n\t\t\t'ck':' biz co edu gen gov info net org ',\n\t\t\t'cn':' ac ah bj com cq edu fj gd gov gs gx gz ha hb he hi hl hn jl js jx ln mil net nm nx org qh sc sd sh sn sx tj tw xj xz yn zj ',\n\t\t\t'co':' com edu gov mil net nom org ',\n\t\t\t'cr':' ac c co ed fi go or sa ',\n\t\t\t'cy':' ac biz com ekloges gov ltd name net org parliament press pro tm ',\n\t\t\t'do':' art com edu gob gov mil net org sld web ',\n\t\t\t'dz':' art asso com edu gov net org pol ',\n\t\t\t'ec':' com edu fin gov info med mil net org pro ',\n\t\t\t'eg':' com edu eun gov mil name net org sci ',\n\t\t\t'er':' com edu gov ind mil net org rochest w ',\n\t\t\t'es':' com edu gob nom org ',\n\t\t\t'et':' biz com edu gov info name net org ',\n\t\t\t'fj':' ac biz com info mil name net org pro ',\n\t\t\t'fk':' ac co gov net nom org ',\n\t\t\t'fr':' asso com f gouv nom prd presse tm ',\n\t\t\t'gg':' co net org ',\n\t\t\t'gh':' com edu gov mil org ',\n\t\t\t'gn':' ac com gov net org ',\n\t\t\t'gr':' com edu gov mil net org ',\n\t\t\t'gt':' com edu gob ind mil net org ',\n\t\t\t'gu':' com edu gov net org ',\n\t\t\t'hk':' com edu gov idv net org ',\n\t\t\t'hu':' 2000 agrar bolt casino city co erotica erotika film forum games hotel info ingatlan jogasz konyvelo lakas media news org priv reklam sex shop sport suli szex tm tozsde utazas video ',\n\t\t\t'id':' ac co go mil net or sch web ',\n\t\t\t'il':' ac co gov idf k12 muni net org ',\n\t\t\t'in':' ac co edu ernet firm gen gov i ind mil net nic org res ',\n\t\t\t'iq':' com edu gov i mil net org ',\n\t\t\t'ir':' ac co dnssec gov i id net org sch ',\n\t\t\t'it':' edu gov ',\n\t\t\t'je':' co net org ',\n\t\t\t'jo':' com edu gov mil name net org sch ',\n\t\t\t'jp':' ac ad co ed go gr lg ne or ',\n\t\t\t'ke':' ac co go info me mobi ne or sc ',\n\t\t\t'kh':' com edu gov mil net org per ',\n\t\t\t'ki':' biz com de edu gov info mob net org tel ',\n\t\t\t'km':' asso com coop edu gouv k medecin mil nom notaires pharmaciens presse tm veterinaire ',\n\t\t\t'kn':' edu gov net org ',\n\t\t\t'kr':' ac busan chungbuk chungnam co daegu daejeon es gangwon go gwangju gyeongbuk gyeonggi gyeongnam hs incheon jeju jeonbuk jeonnam k kg mil ms ne or pe re sc seoul ulsan ',\n\t\t\t'kw':' com edu gov net org ',\n\t\t\t'ky':' com edu gov net org ',\n\t\t\t'kz':' com edu gov mil net org ',\n\t\t\t'lb':' com edu gov net org ',\n\t\t\t'lk':' assn com edu gov grp hotel int ltd net ngo org sch soc web ',\n\t\t\t'lr':' com edu gov net org ',\n\t\t\t'lv':' asn com conf edu gov id mil net org ',\n\t\t\t'ly':' com edu gov id med net org plc sch ',\n\t\t\t'ma':' ac co gov m net org press ',\n\t\t\t'mc':' asso tm ',\n\t\t\t'me':' ac co edu gov its net org priv ',\n\t\t\t'mg':' com edu gov mil nom org prd tm ',\n\t\t\t'mk':' com edu gov inf name net org pro ',\n\t\t\t'ml':' com edu gov net org presse ',\n\t\t\t'mn':' edu gov org ',\n\t\t\t'mo':' com edu gov net org ',\n\t\t\t'mt':' com edu gov net org ',\n\t\t\t'mv':' aero biz com coop edu gov info int mil museum name net org pro ',\n\t\t\t'mw':' ac co com coop edu gov int museum net org ',\n\t\t\t'mx':' com edu gob net org ',\n\t\t\t'my':' com edu gov mil name net org sch ',\n\t\t\t'nf':' arts com firm info net other per rec store web ',\n\t\t\t'ng':' biz com edu gov mil mobi name net org sch ',\n\t\t\t'ni':' ac co com edu gob mil net nom org ',\n\t\t\t'np':' com edu gov mil net org ',\n\t\t\t'nr':' biz com edu gov info net org ',\n\t\t\t'om':' ac biz co com edu gov med mil museum net org pro sch ',\n\t\t\t'pe':' com edu gob mil net nom org sld ',\n\t\t\t'ph':' com edu gov i mil net ngo org ',\n\t\t\t'pk':' biz com edu fam gob gok gon gop gos gov net org web ',\n\t\t\t'pl':' art bialystok biz com edu gda gdansk gorzow gov info katowice krakow lodz lublin mil net ngo olsztyn org poznan pwr radom slupsk szczecin torun warszawa waw wroc wroclaw zgora ',\n\t\t\t'pr':' ac biz com edu est gov info isla name net org pro prof ',\n\t\t\t'ps':' com edu gov net org plo sec ',\n\t\t\t'pw':' belau co ed go ne or ',\n\t\t\t'ro':' arts com firm info nom nt org rec store tm www ',\n\t\t\t'rs':' ac co edu gov in org ',\n\t\t\t'sb':' com edu gov net org ',\n\t\t\t'sc':' com edu gov net org ',\n\t\t\t'sh':' co com edu gov net nom org ',\n\t\t\t'sl':' com edu gov net org ',\n\t\t\t'st':' co com consulado edu embaixada gov mil net org principe saotome store ',\n\t\t\t'sv':' com edu gob org red ',\n\t\t\t'sz':' ac co org ',\n\t\t\t'tr':' av bbs bel biz com dr edu gen gov info k12 name net org pol tel tsk tv web ',\n\t\t\t'tt':' aero biz cat co com coop edu gov info int jobs mil mobi museum name net org pro tel travel ',\n\t\t\t'tw':' club com ebiz edu game gov idv mil net org ',\n\t\t\t'mu':' ac co com gov net or org ',\n\t\t\t'mz':' ac co edu gov org ',\n\t\t\t'na':' co com ',\n\t\t\t'nz':' ac co cri geek gen govt health iwi maori mil net org parliament school ',\n\t\t\t'pa':' abo ac com edu gob ing med net nom org sld ',\n\t\t\t'pt':' com edu gov int net nome org publ ',\n\t\t\t'py':' com edu gov mil net org ',\n\t\t\t'qa':' com edu gov mil net org ',\n\t\t\t're':' asso com nom ',\n\t\t\t'ru':' ac adygeya altai amur arkhangelsk astrakhan bashkiria belgorod bir bryansk buryatia cbg chel chelyabinsk chita chukotka chuvashia com dagestan e-burg edu gov grozny int irkutsk ivanovo izhevsk jar joshkar-ola kalmykia kaluga kamchatka karelia kazan kchr kemerovo khabarovsk khakassia khv kirov koenig komi kostroma kranoyarsk kuban kurgan kursk lipetsk magadan mari mari-el marine mil mordovia mosreg msk murmansk nalchik net nnov nov novosibirsk nsk omsk orenburg org oryol penza perm pp pskov ptz rnd ryazan sakhalin samara saratov simbirsk smolensk spb stavropol stv surgut tambov tatarstan tom tomsk tsaritsyn tsk tula tuva tver tyumen udm udmurtia ulan-ude vladikavkaz vladimir vladivostok volgograd vologda voronezh vrn vyatka yakutia yamal yekaterinburg yuzhno-sakhalinsk ',\n\t\t\t'rw':' ac co com edu gouv gov int mil net ',\n\t\t\t'sa':' com edu gov med net org pub sch ',\n\t\t\t'sd':' com edu gov info med net org tv ',\n\t\t\t'se':' a ac b bd c d e f g h i k l m n o org p parti pp press r s t tm u w x y z ',\n\t\t\t'sg':' com edu gov idn net org per ',\n\t\t\t'sn':' art com edu gouv org perso univ ',\n\t\t\t'sy':' com edu gov mil net news org ',\n\t\t\t'th':' ac co go in mi net or ',\n\t\t\t'tj':' ac biz co com edu go gov info int mil name net nic org test web ',\n\t\t\t'tn':' agrinet com defense edunet ens fin gov ind info intl mincom nat net org perso rnrt rns rnu tourism ',\n\t\t\t'tz':' ac co go ne or ',\n\t\t\t'ua':' biz cherkassy chernigov chernovtsy ck cn co com crimea cv dn dnepropetrovsk donetsk dp edu gov if in ivano-frankivsk kh kharkov kherson khmelnitskiy kiev kirovograd km kr ks kv lg lugansk lutsk lviv me mk net nikolaev od odessa org pl poltava pp rovno rv sebastopol sumy te ternopil uzhgorod vinnica vn zaporizhzhe zhitomir zp zt ',\n\t\t\t'ug':' ac co go ne or org sc ',\n\t\t\t'uk':' ac bl british-library co cym gov govt icnet jet lea ltd me mil mod national-library-scotland nel net nhs nic nls org orgn parliament plc police sch scot soc ',\n\t\t\t'us':' dni fed isa kids nsn ',\n\t\t\t'uy':' com edu gub mil net org ',\n\t\t\t've':' co com edu gob info mil net org web ',\n\t\t\t'vi':' co com k12 net org ',\n\t\t\t'vn':' ac biz com edu gov health info int name net org pro ',\n\t\t\t'ye':' co com gov ltd me net org plc ',\n\t\t\t'yu':' ac co edu gov org ',\n\t\t\t'za':' ac agric alt bourse city co cybernet db edu gov grondar iaccess imt inca landesign law mil net ngo nis nom olivetti org pix school tm web ',\n\t\t\t'zm':' ac co com edu gov net org sch ',\n\t\t\t// https://en.wikipedia.org/wiki/CentralNic#Second-level_domains\n\t\t\t'com': 'ar br cn de eu gb gr hu jpn kr no qc ru sa se uk us uy za ',\n\t\t\t'net': 'gb jp se uk ',\n\t\t\t'org': 'ae',\n\t\t\t'de': 'com '\n\t\t},\n\t\t/*\n\t\t * gorhill 2013-10-25: Using indexOf() instead Regexp(). Significant boost\n\t\t * in both performance and memory footprint. No initialization required.\n\t\t * http://jsperf.com/uri-js-sld-regex-vs-binary-search/4\n\t\t * Following methods use lastIndexOf() rather than array.split() in order\n\t\t * to avoid any memory allocations.\n\t\t */\n\t\thas: function(domain) {\n\t\t\tvar tldOffset = domain.lastIndexOf('.');\n\n\t\t\tif (tldOffset <= 0 || tldOffset >= (domain.length-1)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar sldOffset = domain.lastIndexOf('.', tldOffset-1);\n\n\t\t\tif (sldOffset <= 0 || sldOffset >= (tldOffset-1)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar sldList = SLD.list[domain.slice(tldOffset+1)];\n\n\t\t\tif (!sldList) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn sldList.indexOf(' ' + domain.slice(sldOffset+1, tldOffset) + ' ') >= 0;\n\t\t},\n\t\tis: function(domain) {\n\t\t\tvar tldOffset = domain.lastIndexOf('.');\n\n\t\t\tif (tldOffset <= 0 || tldOffset >= (domain.length-1)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar sldOffset = domain.lastIndexOf('.', tldOffset-1);\n\n\t\t\tif (sldOffset >= 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar sldList = SLD.list[domain.slice(tldOffset+1)];\n\n\t\t\tif (!sldList) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn sldList.indexOf(' ' + domain.slice(0, tldOffset) + ' ') >= 0;\n\t\t},\n\t\tget: function(domain) {\n\t\t\tvar tldOffset = domain.lastIndexOf('.');\n\n\t\t\tif (tldOffset <= 0 || tldOffset >= (domain.length-1)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvar sldOffset = domain.lastIndexOf('.', tldOffset-1);\n\n\t\t\tif (sldOffset <= 0 || sldOffset >= (tldOffset-1)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvar sldList = SLD.list[domain.slice(tldOffset+1)];\n\n\t\t\tif (!sldList) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (sldList.indexOf(' ' + domain.slice(sldOffset+1, tldOffset) + ' ') < 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn domain.slice(sldOffset+1);\n\t\t},\n\t\tnoConflict: function(){\n\t\t\tif (root.SecondLevelDomains === this) {\n\t\t\t\troot.SecondLevelDomains = _SecondLevelDomains;\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\n\treturn SLD;\n});\n","jQuery(function($)\n{\n var\n $copyLinkToClipboardTrigger = $('.js-copy-link-to-clipboard-trigger'),\n $copyTokenToClipboardTrigger = $('.js-copy-token-to-clipboard-trigger'),\n $copyApiKeyToClipboardTrigger = $('.js-copy-api-key-to-clipboard-trigger');\n\n function copyTokenToClipboard(target)\n {\n var $temp = $('');\n\n $('body').append($temp);\n $temp.val(target.text()).select();\n document.execCommand('copy');\n $temp.remove();\n }\n\n function copyTokenFeedback(target)\n {\n $(target).removeClass('fa-copy');\n $(target).addClass('fa-check');\n\n setTimeout(function()\n {\n $(target).removeClass('fa-check');\n $(target).addClass('fa-copy');\n }.bind(target), 3000);\n }\n\n function copyApiKeyToClipboard(target)\n {\n var $temp = $('');\n\n $('body').append($temp);\n $temp.val(target.text()).select();\n document.execCommand('copy');\n $temp.remove();\n }\n\n function copyApiKeyFeedback(target)\n {\n $(target).removeClass('fa-copy');\n $(target).addClass('fa-check');\n\n setTimeout(function()\n {\n $(target).removeClass('fa-check');\n $(target).addClass('fa-copy');\n }.bind(target), 3000);\n }\n\n $copyTokenToClipboardTrigger.on('click', function()\n {\n var $copyTokenToClipboardTarget = $('#download-token');\n\n copyTokenToClipboard($copyTokenToClipboardTarget);\n copyTokenFeedback($(this));\n event.preventDefault();\n });\n\n $copyLinkToClipboardTrigger.on('click', function()\n {\n var $copyLinkToClipboardTarget = $('#' + $(this).data('target'));\n\n copyLinkToClipboard($copyLinkToClipboardTarget);\n copyLinkFeedback($(this));\n event.preventDefault();\n });\n\n $copyApiKeyToClipboardTrigger.on('click', function()\n {\n var $copyApiKeyToClipboardTarget = $(this).closest('.api-key').find('span');\n\n copyApiKeyToClipboard($copyApiKeyToClipboardTarget);\n copyApiKeyFeedback($(this));\n event.preventDefault();\n });\n});\n\nexport function copyLinkToClipboard(target)\n{\n var $temp = $('');\n\n $('body').append($temp);\n $temp.val($(target).attr('href') + '?' + 'download_token' + '=' + $('#download-token').text()).select();\n document.execCommand('copy');\n $temp.remove();\n}\n\nexport function copyLinkFeedback(target)\n{\n var $feedbackContainer = $('');\n\n $feedbackContainer.addClass('feedback-container');\n\n $(target).text($('meta[itemprop=file-link-copy-feedback]').attr('content'));\n $(target).addClass('completed');\n $(target).prepend($feedbackContainer);\n\n setTimeout(function()\n {\n $(target).find('.feedback-container')\n .remove();\n $(target).removeClass('completed');\n $(target).text($('meta[itemprop=file-link-copy]').attr('content'));\n }.bind(target), 3000);\n}\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.Mustache = factory());\n}(this, (function () { 'use strict';\n\n /*!\n * mustache.js - Logic-less {{mustache}} templates with JavaScript\n * http://github.com/janl/mustache.js\n */\n\n var objectToString = Object.prototype.toString;\n var isArray = Array.isArray || function isArrayPolyfill (object) {\n return objectToString.call(object) === '[object Array]';\n };\n\n function isFunction (object) {\n return typeof object === 'function';\n }\n\n /**\n * More correct typeof string handling array\n * which normally returns typeof 'object'\n */\n function typeStr (obj) {\n return isArray(obj) ? 'array' : typeof obj;\n }\n\n function escapeRegExp (string) {\n return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&');\n }\n\n /**\n * Null safe way of checking whether or not an object,\n * including its prototype, has a given property\n */\n function hasProperty (obj, propName) {\n return obj != null && typeof obj === 'object' && (propName in obj);\n }\n\n /**\n * Safe way of detecting whether or not the given thing is a primitive and\n * whether it has the given property\n */\n function primitiveHasOwnProperty (primitive, propName) {\n return (\n primitive != null\n && typeof primitive !== 'object'\n && primitive.hasOwnProperty\n && primitive.hasOwnProperty(propName)\n );\n }\n\n // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577\n // See https://github.com/janl/mustache.js/issues/189\n var regExpTest = RegExp.prototype.test;\n function testRegExp (re, string) {\n return regExpTest.call(re, string);\n }\n\n var nonSpaceRe = /\\S/;\n function isWhitespace (string) {\n return !testRegExp(nonSpaceRe, string);\n }\n\n var entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/',\n '`': '`',\n '=': '='\n };\n\n function escapeHtml (string) {\n return String(string).replace(/[&<>\"'`=\\/]/g, function fromEntityMap (s) {\n return entityMap[s];\n });\n }\n\n var whiteRe = /\\s*/;\n var spaceRe = /\\s+/;\n var equalsRe = /\\s*=/;\n var curlyRe = /\\s*\\}/;\n var tagRe = /#|\\^|\\/|>|\\{|&|=|!/;\n\n /**\n * Breaks up the given `template` string into a tree of tokens. If the `tags`\n * argument is given here it must be an array with two string values: the\n * opening and closing tags used in the template (e.g. [ \"<%\", \"%>\" ]). Of\n * course, the default is to use mustaches (i.e. mustache.tags).\n *\n * A token is an array with at least 4 elements. The first element is the\n * mustache symbol that was used inside the tag, e.g. \"#\" or \"&\". If the tag\n * did not contain a symbol (i.e. {{myValue}}) this element is \"name\". For\n * all text that appears outside a symbol this element is \"text\".\n *\n * The second element of a token is its \"value\". For mustache tags this is\n * whatever else was inside the tag besides the opening symbol. For text tokens\n * this is the text itself.\n *\n * The third and fourth elements of the token are the start and end indices,\n * respectively, of the token in the original template.\n *\n * Tokens that are the root node of a subtree contain two more elements: 1) an\n * array of tokens in the subtree and 2) the index in the original template at\n * which the closing tag for that section begins.\n *\n * Tokens for partials also contain two more elements: 1) a string value of\n * indendation prior to that tag and 2) the index of that tag on that line -\n * eg a value of 2 indicates the partial is the third tag on this line.\n */\n function parseTemplate (template, tags) {\n if (!template)\n return [];\n var lineHasNonSpace = false;\n var sections = []; // Stack to hold section tokens\n var tokens = []; // Buffer to hold the tokens\n var spaces = []; // Indices of whitespace tokens on the current line\n var hasTag = false; // Is there a {{tag}} on the current line?\n var nonSpace = false; // Is there a non-space char on the current line?\n var indentation = ''; // Tracks indentation for tags that use it\n var tagIndex = 0; // Stores a count of number of tags encountered on a line\n\n // Strips all whitespace tokens array for the current line\n // if there was a {{#tag}} on it and otherwise only space.\n function stripSpace () {\n if (hasTag && !nonSpace) {\n while (spaces.length)\n delete tokens[spaces.pop()];\n } else {\n spaces = [];\n }\n\n hasTag = false;\n nonSpace = false;\n }\n\n var openingTagRe, closingTagRe, closingCurlyRe;\n function compileTags (tagsToCompile) {\n if (typeof tagsToCompile === 'string')\n tagsToCompile = tagsToCompile.split(spaceRe, 2);\n\n if (!isArray(tagsToCompile) || tagsToCompile.length !== 2)\n throw new Error('Invalid tags: ' + tagsToCompile);\n\n openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + '\\\\s*');\n closingTagRe = new RegExp('\\\\s*' + escapeRegExp(tagsToCompile[1]));\n closingCurlyRe = new RegExp('\\\\s*' + escapeRegExp('}' + tagsToCompile[1]));\n }\n\n compileTags(tags || mustache.tags);\n\n var scanner = new Scanner(template);\n\n var start, type, value, chr, token, openSection;\n while (!scanner.eos()) {\n start = scanner.pos;\n\n // Match any text between tags.\n value = scanner.scanUntil(openingTagRe);\n\n if (value) {\n for (var i = 0, valueLength = value.length; i < valueLength; ++i) {\n chr = value.charAt(i);\n\n if (isWhitespace(chr)) {\n spaces.push(tokens.length);\n indentation += chr;\n } else {\n nonSpace = true;\n lineHasNonSpace = true;\n indentation += ' ';\n }\n\n tokens.push([ 'text', chr, start, start + 1 ]);\n start += 1;\n\n // Check for whitespace on the current line.\n if (chr === '\\n') {\n stripSpace();\n indentation = '';\n tagIndex = 0;\n lineHasNonSpace = false;\n }\n }\n }\n\n // Match the opening tag.\n if (!scanner.scan(openingTagRe))\n break;\n\n hasTag = true;\n\n // Get the tag type.\n type = scanner.scan(tagRe) || 'name';\n scanner.scan(whiteRe);\n\n // Get the tag value.\n if (type === '=') {\n value = scanner.scanUntil(equalsRe);\n scanner.scan(equalsRe);\n scanner.scanUntil(closingTagRe);\n } else if (type === '{') {\n value = scanner.scanUntil(closingCurlyRe);\n scanner.scan(curlyRe);\n scanner.scanUntil(closingTagRe);\n type = '&';\n } else {\n value = scanner.scanUntil(closingTagRe);\n }\n\n // Match the closing tag.\n if (!scanner.scan(closingTagRe))\n throw new Error('Unclosed tag at ' + scanner.pos);\n\n if (type == '>') {\n token = [ type, value, start, scanner.pos, indentation, tagIndex, lineHasNonSpace ];\n } else {\n token = [ type, value, start, scanner.pos ];\n }\n tagIndex++;\n tokens.push(token);\n\n if (type === '#' || type === '^') {\n sections.push(token);\n } else if (type === '/') {\n // Check section nesting.\n openSection = sections.pop();\n\n if (!openSection)\n throw new Error('Unopened section \"' + value + '\" at ' + start);\n\n if (openSection[1] !== value)\n throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + start);\n } else if (type === 'name' || type === '{' || type === '&') {\n nonSpace = true;\n } else if (type === '=') {\n // Set the tags for the next time around.\n compileTags(value);\n }\n }\n\n stripSpace();\n\n // Make sure there are no open sections when we're done.\n openSection = sections.pop();\n\n if (openSection)\n throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + scanner.pos);\n\n return nestTokens(squashTokens(tokens));\n }\n\n /**\n * Combines the values of consecutive text tokens in the given `tokens` array\n * to a single token.\n */\n function squashTokens (tokens) {\n var squashedTokens = [];\n\n var token, lastToken;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n if (token) {\n if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {\n lastToken[1] += token[1];\n lastToken[3] = token[3];\n } else {\n squashedTokens.push(token);\n lastToken = token;\n }\n }\n }\n\n return squashedTokens;\n }\n\n /**\n * Forms the given array of `tokens` into a nested tree structure where\n * tokens that represent a section have two additional items: 1) an array of\n * all tokens that appear in that section and 2) the index in the original\n * template that represents the end of that section.\n */\n function nestTokens (tokens) {\n var nestedTokens = [];\n var collector = nestedTokens;\n var sections = [];\n\n var token, section;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n switch (token[0]) {\n case '#':\n case '^':\n collector.push(token);\n sections.push(token);\n collector = token[4] = [];\n break;\n case '/':\n section = sections.pop();\n section[5] = token[2];\n collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens;\n break;\n default:\n collector.push(token);\n }\n }\n\n return nestedTokens;\n }\n\n /**\n * A simple string scanner that is used by the template parser to find\n * tokens in template strings.\n */\n function Scanner (string) {\n this.string = string;\n this.tail = string;\n this.pos = 0;\n }\n\n /**\n * Returns `true` if the tail is empty (end of string).\n */\n Scanner.prototype.eos = function eos () {\n return this.tail === '';\n };\n\n /**\n * Tries to match the given regular expression at the current position.\n * Returns the matched text if it can match, the empty string otherwise.\n */\n Scanner.prototype.scan = function scan (re) {\n var match = this.tail.match(re);\n\n if (!match || match.index !== 0)\n return '';\n\n var string = match[0];\n\n this.tail = this.tail.substring(string.length);\n this.pos += string.length;\n\n return string;\n };\n\n /**\n * Skips all text until the given regular expression can be matched. Returns\n * the skipped string, which is the entire tail if no match can be made.\n */\n Scanner.prototype.scanUntil = function scanUntil (re) {\n var index = this.tail.search(re), match;\n\n switch (index) {\n case -1:\n match = this.tail;\n this.tail = '';\n break;\n case 0:\n match = '';\n break;\n default:\n match = this.tail.substring(0, index);\n this.tail = this.tail.substring(index);\n }\n\n this.pos += match.length;\n\n return match;\n };\n\n /**\n * Represents a rendering context by wrapping a view object and\n * maintaining a reference to the parent context.\n */\n function Context (view, parentContext) {\n this.view = view;\n this.cache = { '.': this.view };\n this.parent = parentContext;\n }\n\n /**\n * Creates a new context using the given view with this context\n * as the parent.\n */\n Context.prototype.push = function push (view) {\n return new Context(view, this);\n };\n\n /**\n * Returns the value of the given name in this context, traversing\n * up the context hierarchy if the value is absent in this context's view.\n */\n Context.prototype.lookup = function lookup (name) {\n var cache = this.cache;\n\n var value;\n if (cache.hasOwnProperty(name)) {\n value = cache[name];\n } else {\n var context = this, intermediateValue, names, index, lookupHit = false;\n\n while (context) {\n if (name.indexOf('.') > 0) {\n intermediateValue = context.view;\n names = name.split('.');\n index = 0;\n\n /**\n * Using the dot notion path in `name`, we descend through the\n * nested objects.\n *\n * To be certain that the lookup has been successful, we have to\n * check if the last object in the path actually has the property\n * we are looking for. We store the result in `lookupHit`.\n *\n * This is specially necessary for when the value has been set to\n * `undefined` and we want to avoid looking up parent contexts.\n *\n * In the case where dot notation is used, we consider the lookup\n * to be successful even if the last \"object\" in the path is\n * not actually an object but a primitive (e.g., a string, or an\n * integer), because it is sometimes useful to access a property\n * of an autoboxed primitive, such as the length of a string.\n **/\n while (intermediateValue != null && index < names.length) {\n if (index === names.length - 1)\n lookupHit = (\n hasProperty(intermediateValue, names[index])\n || primitiveHasOwnProperty(intermediateValue, names[index])\n );\n\n intermediateValue = intermediateValue[names[index++]];\n }\n } else {\n intermediateValue = context.view[name];\n\n /**\n * Only checking against `hasProperty`, which always returns `false` if\n * `context.view` is not an object. Deliberately omitting the check\n * against `primitiveHasOwnProperty` if dot notation is not used.\n *\n * Consider this example:\n * ```\n * Mustache.render(\"The length of a football field is {{#length}}{{length}}{{/length}}.\", {length: \"100 yards\"})\n * ```\n *\n * If we were to check also against `primitiveHasOwnProperty`, as we do\n * in the dot notation case, then render call would return:\n *\n * \"The length of a football field is 9.\"\n *\n * rather than the expected:\n *\n * \"The length of a football field is 100 yards.\"\n **/\n lookupHit = hasProperty(context.view, name);\n }\n\n if (lookupHit) {\n value = intermediateValue;\n break;\n }\n\n context = context.parent;\n }\n\n cache[name] = value;\n }\n\n if (isFunction(value))\n value = value.call(this.view);\n\n return value;\n };\n\n /**\n * A Writer knows how to take a stream of tokens and render them to a\n * string, given a context. It also maintains a cache of templates to\n * avoid the need to parse the same template twice.\n */\n function Writer () {\n this.templateCache = {\n _cache: {},\n set: function set (key, value) {\n this._cache[key] = value;\n },\n get: function get (key) {\n return this._cache[key];\n },\n clear: function clear () {\n this._cache = {};\n }\n };\n }\n\n /**\n * Clears all cached templates in this writer.\n */\n Writer.prototype.clearCache = function clearCache () {\n if (typeof this.templateCache !== 'undefined') {\n this.templateCache.clear();\n }\n };\n\n /**\n * Parses and caches the given `template` according to the given `tags` or\n * `mustache.tags` if `tags` is omitted, and returns the array of tokens\n * that is generated from the parse.\n */\n Writer.prototype.parse = function parse (template, tags) {\n var cache = this.templateCache;\n var cacheKey = template + ':' + (tags || mustache.tags).join(':');\n var isCacheEnabled = typeof cache !== 'undefined';\n var tokens = isCacheEnabled ? cache.get(cacheKey) : undefined;\n\n if (tokens == undefined) {\n tokens = parseTemplate(template, tags);\n isCacheEnabled && cache.set(cacheKey, tokens);\n }\n return tokens;\n };\n\n /**\n * High-level method that is used to render the given `template` with\n * the given `view`.\n *\n * The optional `partials` argument may be an object that contains the\n * names and templates of partials that are used in the template. It may\n * also be a function that is used to load partial templates on the fly\n * that takes a single argument: the name of the partial.\n *\n * If the optional `config` argument is given here, then it should be an\n * object with a `tags` attribute or an `escape` attribute or both.\n * If an array is passed, then it will be interpreted the same way as\n * a `tags` attribute on a `config` object.\n *\n * The `tags` attribute of a `config` object must be an array with two\n * string values: the opening and closing tags used in the template (e.g.\n * [ \"<%\", \"%>\" ]). The default is to mustache.tags.\n *\n * The `escape` attribute of a `config` object must be a function which\n * accepts a string as input and outputs a safely escaped string.\n * If an `escape` function is not provided, then an HTML-safe string\n * escaping function is used as the default.\n */\n Writer.prototype.render = function render (template, view, partials, config) {\n var tags = this.getConfigTags(config);\n var tokens = this.parse(template, tags);\n var context = (view instanceof Context) ? view : new Context(view, undefined);\n return this.renderTokens(tokens, context, partials, template, config);\n };\n\n /**\n * Low-level method that renders the given array of `tokens` using\n * the given `context` and `partials`.\n *\n * Note: The `originalTemplate` is only ever used to extract the portion\n * of the original template that was contained in a higher-order section.\n * If the template doesn't use higher-order sections, this argument may\n * be omitted.\n */\n Writer.prototype.renderTokens = function renderTokens (tokens, context, partials, originalTemplate, config) {\n var buffer = '';\n\n var token, symbol, value;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n value = undefined;\n token = tokens[i];\n symbol = token[0];\n\n if (symbol === '#') value = this.renderSection(token, context, partials, originalTemplate, config);\n else if (symbol === '^') value = this.renderInverted(token, context, partials, originalTemplate, config);\n else if (symbol === '>') value = this.renderPartial(token, context, partials, config);\n else if (symbol === '&') value = this.unescapedValue(token, context);\n else if (symbol === 'name') value = this.escapedValue(token, context, config);\n else if (symbol === 'text') value = this.rawValue(token);\n\n if (value !== undefined)\n buffer += value;\n }\n\n return buffer;\n };\n\n Writer.prototype.renderSection = function renderSection (token, context, partials, originalTemplate, config) {\n var self = this;\n var buffer = '';\n var value = context.lookup(token[1]);\n\n // This function is used to render an arbitrary template\n // in the current context by higher-order sections.\n function subRender (template) {\n return self.render(template, context, partials, config);\n }\n\n if (!value) return;\n\n if (isArray(value)) {\n for (var j = 0, valueLength = value.length; j < valueLength; ++j) {\n buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate, config);\n }\n } else if (typeof value === 'object' || typeof value === 'string' || typeof value === 'number') {\n buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate, config);\n } else if (isFunction(value)) {\n if (typeof originalTemplate !== 'string')\n throw new Error('Cannot use higher-order sections without the original template');\n\n // Extract the portion of the original template that the section contains.\n value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender);\n\n if (value != null)\n buffer += value;\n } else {\n buffer += this.renderTokens(token[4], context, partials, originalTemplate, config);\n }\n return buffer;\n };\n\n Writer.prototype.renderInverted = function renderInverted (token, context, partials, originalTemplate, config) {\n var value = context.lookup(token[1]);\n\n // Use JavaScript's definition of falsy. Include empty arrays.\n // See https://github.com/janl/mustache.js/issues/186\n if (!value || (isArray(value) && value.length === 0))\n return this.renderTokens(token[4], context, partials, originalTemplate, config);\n };\n\n Writer.prototype.indentPartial = function indentPartial (partial, indentation, lineHasNonSpace) {\n var filteredIndentation = indentation.replace(/[^ \\t]/g, '');\n var partialByNl = partial.split('\\n');\n for (var i = 0; i < partialByNl.length; i++) {\n if (partialByNl[i].length && (i > 0 || !lineHasNonSpace)) {\n partialByNl[i] = filteredIndentation + partialByNl[i];\n }\n }\n return partialByNl.join('\\n');\n };\n\n Writer.prototype.renderPartial = function renderPartial (token, context, partials, config) {\n if (!partials) return;\n var tags = this.getConfigTags(config);\n\n var value = isFunction(partials) ? partials(token[1]) : partials[token[1]];\n if (value != null) {\n var lineHasNonSpace = token[6];\n var tagIndex = token[5];\n var indentation = token[4];\n var indentedValue = value;\n if (tagIndex == 0 && indentation) {\n indentedValue = this.indentPartial(value, indentation, lineHasNonSpace);\n }\n var tokens = this.parse(indentedValue, tags);\n return this.renderTokens(tokens, context, partials, indentedValue, config);\n }\n };\n\n Writer.prototype.unescapedValue = function unescapedValue (token, context) {\n var value = context.lookup(token[1]);\n if (value != null)\n return value;\n };\n\n Writer.prototype.escapedValue = function escapedValue (token, context, config) {\n var escape = this.getConfigEscape(config) || mustache.escape;\n var value = context.lookup(token[1]);\n if (value != null)\n return (typeof value === 'number' && escape === mustache.escape) ? String(value) : escape(value);\n };\n\n Writer.prototype.rawValue = function rawValue (token) {\n return token[1];\n };\n\n Writer.prototype.getConfigTags = function getConfigTags (config) {\n if (isArray(config)) {\n return config;\n }\n else if (config && typeof config === 'object') {\n return config.tags;\n }\n else {\n return undefined;\n }\n };\n\n Writer.prototype.getConfigEscape = function getConfigEscape (config) {\n if (config && typeof config === 'object' && !isArray(config)) {\n return config.escape;\n }\n else {\n return undefined;\n }\n };\n\n var mustache = {\n name: 'mustache.js',\n version: '4.2.0',\n tags: [ '{{', '}}' ],\n clearCache: undefined,\n escape: undefined,\n parse: undefined,\n render: undefined,\n Scanner: undefined,\n Context: undefined,\n Writer: undefined,\n /**\n * Allows a user to override the default caching strategy, by providing an\n * object with set, get and clear methods. This can also be used to disable\n * the cache by setting it to the literal `undefined`.\n */\n set templateCache (cache) {\n defaultWriter.templateCache = cache;\n },\n /**\n * Gets the default or overridden caching object from the default writer.\n */\n get templateCache () {\n return defaultWriter.templateCache;\n }\n };\n\n // All high-level mustache.* functions use this writer.\n var defaultWriter = new Writer();\n\n /**\n * Clears all cached templates in the default writer.\n */\n mustache.clearCache = function clearCache () {\n return defaultWriter.clearCache();\n };\n\n /**\n * Parses and caches the given template in the default writer and returns the\n * array of tokens it contains. Doing this ahead of time avoids the need to\n * parse templates on the fly as they are rendered.\n */\n mustache.parse = function parse (template, tags) {\n return defaultWriter.parse(template, tags);\n };\n\n /**\n * Renders the `template` with the given `view`, `partials`, and `config`\n * using the default writer.\n */\n mustache.render = function render (template, view, partials, config) {\n if (typeof template !== 'string') {\n throw new TypeError('Invalid template! Template should be a \"string\" ' +\n 'but \"' + typeStr(template) + '\" was given as the first ' +\n 'argument for mustache#render(template, view, partials)');\n }\n\n return defaultWriter.render(template, view, partials, config);\n };\n\n // Export the escaping function so that the user may override it.\n // See https://github.com/janl/mustache.js/issues/244\n mustache.escape = escapeHtml;\n\n // Export these mainly for testing, but also for advanced usage.\n mustache.Scanner = Scanner;\n mustache.Context = Context;\n mustache.Writer = Writer;\n\n return mustache;\n\n})));\n","import ShoppinglistClient from './clients/ShoppinglistClient';\nimport ShoppinglistOverlayRows from './shoppinglists-overlay-rows';\nimport { displaySuccessFeedbackMessage } from './utilities';\n\nexport default class ShoppinglistTablesOverlay\n{\n constructor()\n {\n // API\n this.shoppingListClient = new ShoppinglistClient();\n\n // Elements\n this.body = document.querySelector('body');\n this.shoppingListoverlay = this.body.querySelector('.js-overlay-shoppinglist-tables');\n this.overlayNewListInput = this.shoppingListoverlay.querySelector('.js-overlay-shoppinglist-new-list-input');\n this.overlayAddListButton = this.shoppingListoverlay.querySelector('.js-overlay-shoppinglist-add-list-button');\n this.overlayAddProductsButton =\n this.shoppingListoverlay.querySelector('.js-overlay-shoppinglist-products-button');\n this.overlayCloseButton = this.shoppingListoverlay.querySelector('.js-overlay-shoppinglist-close-button');\n this.overlayListContainer = this.shoppingListoverlay.querySelector('.js-overlay-shoppinglist-list-container');\n this.overlayItemCount = this.shoppingListoverlay.querySelector('.js-overlay-shoppinglist-item-count');\n this.errorInputContainer = this.body.querySelector('.js-add-list-error');\n this.errorInputFeedback = this.body.querySelector('.js-add-list-feedback-error');\n\n // Helper\n this.shoppingListOverlayRows = new ShoppinglistOverlayRows(this.shoppingListoverlay);\n this.productsMovedToShoppingListEvent = new Event('products-moved-to-shoppinglist');\n this.defaultShoppingList = document.querySelector('meta[name=\"default_shopping_list_id\"]');\n this.newShoppingListId = null;\n this.productList = {};\n }\n\n init()\n {\n this.initEvents();\n }\n\n initEvents()\n {\n this.overlayNewListInput.addEventListener('click', this.showAddList.bind(this));\n this.overlayListContainer.addEventListener('click', this.showAddProduct.bind(this));\n this.overlayAddListButton.addEventListener('click', this.addNewList.bind(this));\n this.overlayAddProductsButton.addEventListener('click', this.addProductsToList.bind(this));\n this.overlayNewListInput.addEventListener('input', this.checkInput.bind(this));\n this.shoppingListoverlay.querySelector('a.close').addEventListener('click', this.hideOverlay.bind(this));\n this.overlayCloseButton.addEventListener('click', this.hideOverlay.bind(this));\n this.body.addEventListener(orion.constants.EventFocusOverlayClicked, this.hideOverlay.bind(this));\n }\n\n initOverlay(items)\n {\n this.productList = items;\n this.overlayItemCount.innerText = Object.keys(items).length;\n this.shoppingListOverlayRows.init();\n this.showOverlay();\n }\n\n addProductsToList()\n {\n let currentShoppingListId = this.newShoppingListId\n ? this.newShoppingListId\n : this.overlayListContainer.querySelector('input[name=shoppinglist]:checked').value;\n\n let data = this.prepareBodyData(this.productList);\n\n this.shoppingListClient.updateItems(data, currentShoppingListId).then(() =>\n {\n let keepItemsCheckbox = this.shoppingListoverlay.querySelector('.js-shoppinglist-keep-items')\n ? this.shoppingListoverlay.querySelector('.js-shoppinglist-keep-items')\n : null;\n\n if (keepItemsCheckbox && !keepItemsCheckbox.checked)\n {\n document.dispatchEvent(this.productsMovedToShoppingListEvent);\n }\n\n displaySuccessFeedbackMessage('content.save.to.shoppinglist.ok', '', true);\n this.newShoppingListId = null;\n this.hideOverlay();\n });\n }\n\n addNewList()\n {\n let name = this.overlayNewListInput.value;\n let defaultShoppingListId = this.defaultShoppingList.getAttribute('content');\n\n let data = {\n 'name': name,\n 'isDefault': !defaultShoppingListId ? true : false\n };\n\n if (name !== '')\n {\n this.shoppingListClient.createShoppinglist(data)\n .then((response) => response.json())\n .then((json) =>\n {\n displaySuccessFeedbackMessage('content.shoppinglist.new.ok~tables', '', true);\n this.overlayNewListInput.value = '';\n\n if (!defaultShoppingListId)\n {\n this.defaultShoppingList.setAttribute('content', json.productItemListId);\n $('body').trigger(orion.constants.EventShoppingListDefaultUpdated);\n }\n\n this.newShoppingListId = json.productItemListId;\n\n let currentShoppingListId = this.newShoppingListId\n ? this.newShoppingListId\n : this.overlayListContainer.querySelector('input[name=shoppinglist]:checked').value;\n\n let data = this.prepareBodyData(this.productList);\n\n this.shoppingListClient.updateItems(data, currentShoppingListId).then(() =>\n {\n let keepItemsCheckbox = this.shoppingListoverlay.querySelector('.js-shoppinglist-keep-items')\n ? this.shoppingListoverlay.querySelector('.js-shoppinglist-keep-items')\n : null;\n\n if (keepItemsCheckbox && !keepItemsCheckbox.checked)\n {\n document.dispatchEvent(this.productsMovedToShoppingListEvent);\n }\n\n this.newShoppingListId = null;\n this.hideOverlay();\n });\n });\n }\n else\n {\n this.errorInputContainer.classList.add('error', 'missing');\n this.errorInputFeedback.classList.remove('hidden');\n }\n }\n\n prepareBodyData(products)\n {\n let productItems = [];\n\n for (let productNumber in products)\n {\n let object = {\n productNumber: productNumber,\n quantity: products[productNumber]\n };\n\n productItems.push(object);\n }\n\n return {\n 'productItems': productItems\n };\n }\n\n checkInput()\n {\n if (this.overlayNewListInput.value !== '')\n {\n this.errorInputContainer.classList.remove('error', 'missing');\n this.errorInputFeedback.classList.add('hidden');\n }\n }\n showAddProduct()\n {\n this.overlayAddListButton.classList.add('hidden');\n this.overlayAddProductsButton.classList.remove('hidden');\n this.overlayListContainer.classList.remove('list-disabled');\n this.errorInputContainer.classList.remove('error', 'missing');\n this.overlayNewListInput.value = '';\n this.errorInputFeedback.classList.add('hidden');\n }\n\n showAddList()\n {\n this.overlayAddListButton.classList.remove('hidden');\n this.overlayAddProductsButton.classList.add('hidden');\n this.overlayListContainer.classList.add('list-disabled');\n }\n\n showOverlay()\n {\n this.showAddProduct();\n this.body.classList.add('no-scroll', 'focus-active');\n this.shoppingListoverlay.classList.remove('hidden');\n }\n\n hideOverlay()\n {\n this.body.classList.remove('no-scroll', 'focus-active');\n this.shoppingListoverlay.classList.add('hidden');\n }\n}\n","import './global.js';\nimport './api/b2bApiKey.js';\nimport './api/bonusitem.js';\nimport './api/cart.js';\nimport './api/cart/orderitems.js';\nimport './api/checkout.js';\nimport './api/checkout/orderitems.js';\nimport './api/checkout/summary.js';\nimport './api/complaints';\nimport './api/customerScalarAttribute.js';\nimport './api/downloads.js';\nimport './api/newsletter.js';\nimport './api/orders.js';\nimport './api/notifications.js';\nimport './api/salesChargeback.js';\nimport './api/shipping-addresses.js';\nimport './api/shoppinglist.js';\nimport './account-addressbook.js';\nimport './account-invoice-list.js';\nimport './account-invoice-list-unpaid.js';\nimport './account-orders.js';\nimport './account-shipment-tracking.js';\nimport './account-shoppinglist.js';\nimport './api-authorization-key-display.js';\nimport './checkout-address.js';\n// import './checkout-basket.js';\nimport './checkout-cart.js';\nimport './complaint.js';\nimport './downloads.js';\nimport './download-list-as-csv.js';\nimport './invoice-notification-toggle.js';\nimport './newsletter.js';\nimport './shipping_address.js';\nimport './shipping-address-edit.js';\nimport './shoppinglist.js';\nimport './shoppinglists-tables-overlay.js';\nimport './street.js';\nimport './download.js';\n","$(function()\n{\n if (!$('#forms\\\\/complaint').length)\n {\n return;\n }\n\n let $body = $('body');\n let languageCode = $('html').attr('lang');\n let productIndex = 1;\n let $form = $('.js-complaint__form');\n let $productContainer = $('.js-complaint__product-form-container');\n let $additionalProductButton = $('.js-complaint__additional-product-form-button');\n let $additionalProductForm = $('.js-complaint__product-form');\n let $hiddenProductForm = $('.js-complaint__hidden-product-form');\n let deleteAdditionalProductButtonText = $('.js-complaint__product-form-container')\n .data('complaint-delete-product-text');\n let $resetButton = $('.js-complaint__reset-button');\n let $checkButton = $('.js-complaint__check-button');\n let $checkButtonText = $('.js-complaint__check-button--text');\n let $submitButton = $('.js-complaint__submit-button');\n let api = orion.api.complaints;\n let $loadingIndicatorForm = $('#new-complaint .loading-indicator');\n let $loadingIndicatorList = $('#complaint-overview .loading-indicator');\n\n // Feedback texts\n let feedbackFormatValidationText = $('meta[itemprop=\"feedback-format-validation-text\"]').attr('content');\n let feedbackInvalidFileText = $('meta[itemprop=\"feedback-invalid-file-text\"]').attr('content');\n let feedbackProductInvalidText = $('meta[itemprop=\"feedback-product-invalid-text\"]').attr('content');\n let feedbackProductAvailabilityText = $('meta[itemprop=\"feedback-product-availability-text\"]').attr('content');\n let feedbackEmptyListText = $('meta[itemprop=\"feedback-empty-list-text\"]').attr('content');\n let feedbackFailureListText = $('meta[itemprop=\"feedback-failure-list-text\"]').attr('content');\n\n // Handle click on AddProductButton\n function handleAdditionalProductButtonClick(event)\n {\n event.preventDefault();\n addAdditionalProduct({});\n }\n\n // Handle click on CheckButton\n function handleCheckButtonClick(event)\n {\n event.preventDefault();\n $checkButton.prop('disabled', true);\n $checkButtonText.addClass('hidden');\n $loadingIndicatorForm.removeClass('loading-indicator--hidden');\n\n $form.trigger(orion.constants.EventFormValidate);\n\n let errors = $form.find('div.error');\n let $products = $('.js-complaint__product-form');\n\n let validArray = [];\n let availableProductsArray = [];\n let notAvailableProductsArray = [];\n let faultyArray = [];\n\n if (!errors.length)\n {\n $products.each(function(index)\n {\n let productNumber = $(this).find('.productNumber input')\n .val();\n let quantity = $(this).find('.quantity input')\n .val();\n let reason = $(this).find('.reason input')\n .val();\n\n let productNumberValidation = checkIfProductNumberInvalid(productNumber);\n let quantityValidation = checkIfProductQuantityInvalid(quantity);\n let reasonValidation = checkIfProductReasonInvalid(reason);\n\n if (productNumberValidation && quantityValidation && reasonValidation)\n {\n validArray.push({ productNumber, quantity, reason });\n\n $.ajax({ url: '/api-product-' + languageCode + '/' + productNumber,\n success: function()\n {\n availableProductsArray.push(productNumber);\n },\n error: function()\n {\n notAvailableProductsArray.push(productNumber);\n },\n complete: function()\n {\n if (\n notAvailableProductsArray.length\n && availableProductsArray.length + notAvailableProductsArray.length + faultyArray.length\n == $products.length\n )\n {\n let notAvailableProducts = notAvailableProductsArray.join(', ');\n\n $body.append(\n '
    '\n + '

    '\n + feedbackProductAvailabilityText\n + '

    '\n );\n $('.js-complaint-product-not-available').text(notAvailableProducts);\n $body.trigger('feedback-added');\n }\n\n if (\n availableProductsArray.length + notAvailableProductsArray.length + faultyArray.length\n == $products.length\n )\n {\n if (!faultyArray.length)\n {\n unlockFurtherProcessing();\n }\n\n $checkButton.prop('disabled', false);\n $checkButtonText.removeClass('hidden');\n $loadingIndicatorForm.addClass('loading-indicator--hidden');\n }\n }\n });\n }\n else\n {\n faultyArray.push(index + 1);\n }\n\n if (index == $products.length - 1)\n {\n let json = JSON.stringify(validArray);\n\n $hiddenProductForm.val(json);\n\n if (faultyArray.length)\n {\n let faultyProducts = faultyArray.join(', ');\n\n $body.append('
    '\n\t\t\t\t\t\t\t\t\t+ '

    '\n\t\t\t\t\t\t\t\t\t+ feedbackProductInvalidText\n\t\t\t\t\t\t\t\t\t+ '

    ');\n $('.js-complaint-product-invalid').text(faultyProducts);\n $body.trigger('feedback-added');\n }\n }\n });\n }\n else\n {\n document.querySelector('div.error').scrollIntoView({ behavior: 'smooth', block: 'center' });\n $checkButton.prop('disabled', false);\n $checkButtonText.removeClass('hidden');\n $loadingIndicatorForm.addClass('loading-indicator--hidden');\n }\n }\n\n // Handle click on ResetButton\n function handleResetButtonClick()\n {\n let $firstProductFormInputs = $('.js-complaint__product-form:first input');\n let $otherProductForms = $('.js-complaint__product-form:not(:first)');\n\n $firstProductFormInputs.val('');\n $otherProductForms.remove();\n }\n\n // Handle changes in form\n function handleChangesForm()\n {\n lockFurtherProcessing();\n }\n\n // Copy additional complaint form and add delete button\n function addAdditionalProduct()\n {\n let $formClone = $additionalProductForm.clone(true);\n let $newForm = prepareProductForm($formClone, true);\n let $removeButton = $('');\n\n $removeButton.html(' ' + deleteAdditionalProductButtonText);\n $removeButton.addClass('js-complaint__product-form_delete-button complaint-form-link-delete-product');\n $removeButton.on('click', (event) =>\n {\n event.preventDefault();\n $newForm.remove();\n productIndex = 1;\n reindexProductFormsOnDelete();\n lockFurtherProcessing();\n });\n\n $newForm.append($removeButton);\n $productContainer.append($newForm);\n\n return $newForm;\n }\n\n // Reindex product forms on delete\n function reindexProductFormsOnDelete()\n {\n let $productForms = $('.js-complaint__product-form:not(:first)');\n\n $productForms.each(function()\n {\n let $form = $(this);\n\n prepareProductForm($form, false);\n });\n }\n\n // Prepare additional product form\n function prepareProductForm($form, newProductForm)\n {\n let $title = $form.find('h2');\n let text = $title.text().slice(0, -1);\n let $fields = $form.children('div');\n let $inputs = $form.find('input');\n\n $title.text(text + (productIndex + 1));\n $fields.removeClass('error missing invalid');\n\n $inputs.each(function()\n {\n let $input = $(this);\n let inputName = $input.attr('name');\n let labelName = $input.attr('name');\n let newName = inputName.replace(new RegExp(/\\d+/), productIndex);\n\n if (newProductForm)\n {\n $input.val('');\n }\n\n $input.attr('name', newName);\n $input.attr('id', newName);\n $('label[for=\"' + labelName + '\"]', $form).attr('for', newName);\n $input.attr('required', true);\n });\n\n productIndex++;\n\n return $form;\n }\n\n // Show submit button\n function unlockFurtherProcessing()\n {\n $checkButton.addClass('hidden');\n $submitButton.removeClass('hidden');\n }\n\n // Hide submit button\n function lockFurtherProcessing()\n {\n $checkButton.removeClass('hidden');\n $submitButton.addClass('hidden');\n }\n\n /**\n\t * CSV UPLOAD\n\t */\n let $uploadFile = $('#upload-file');\n let $dragAndDropField = $('#drag-and-drop-field');\n\n // Drag & Drop\n function handleDragOver(event)\n {\n event.stopPropagation();\n event.preventDefault();\n event.originalEvent.dataTransfer.dropEffect = 'copy';\n }\n\n // Upload file\n function handleFileSelect(event)\n {\n event.stopPropagation();\n event.preventDefault();\n\n let file = '';\n\n if (event.originalEvent.target.files !== undefined)\n {\n [file] = event.originalEvent.target.files;\n $('#upload-file').val('');\n }\n else\n {\n [file] = event.originalEvent.dataTransfer.files;\n }\n if (file !== undefined && (file.name.endsWith('.csv') || file.name.endsWith('.txt')))\n {\n let $window = $(window);\n let reader = new FileReader();\n\n reader.readAsText(file);\n reader.onprogress = function()\n {\n $window.on('beforeunload', function()\n {\n return false;\n });\n };\n reader.onload = function(event)\n {\n let csv = event.target.result;\n\n processCsvFile(csv);\n $window.off('beforeunload');\n };\n }\n else\n {\n $body.append('');\n $body.trigger('feedback-added');\n }\n }\n\n // Process uploaded csv file\n function processCsvFile(csv)\n {\n let rawCsvArray = csv.trim().split('\\n');\n let invalidCsvLines = [];\n\n for (let i = 0; i < rawCsvArray.length; i++)\n {\n let rawCsvLine = rawCsvArray[i];\n\n if ($.trim(rawCsvLine) !== '')\n {\n let rawCsvLineArray = convertCsvLineToArray(rawCsvLine);\n let csvLineProductnumber = editRawCsvLine(rawCsvLineArray[0]);\n let csvLineQuantity = editRawCsvLine(rawCsvLineArray[1]);\n let [,, csvLineReason] = rawCsvLineArray;\n let csvLine = csvLineProductnumber + ',' + csvLineQuantity + ',' + csvLineReason;\n\n if (csvLineValidation(csvLine))\n {\n let csvLineArray = convertCsvLineToArray(csvLine);\n\n createProductForms(csvLineArray);\n }\n else\n {\n invalidCsvLines.push(i + 1);\n }\n }\n }\n if (invalidCsvLines.length)\n {\n let invalidCsvLinesString = invalidCsvLines.join(', ');\n\n $body.append('
    '\n\t\t\t\t\t\t+ '
    ');\n $('.js-complaint-csv-row-invalid').text(invalidCsvLinesString);\n $body.trigger('feedback-added');\n }\n }\n\n // Create new product form\n function createProductForms(csvLineArray)\n {\n let [productNumber] = csvLineArray;\n let [, quantity] = csvLineArray;\n let [,, reason] = csvLineArray;\n let $productForm = $additionalProductForm;\n\n if (\n $productForm.find('.js-complaint-productform-productnumber').val()\n && $productForm.find('.js-complaint-productform-quantity').val()\n )\n {\n $productForm = addAdditionalProduct();\n }\n $productForm.find('.js-complaint-productform-productnumber').val(productNumber);\n $productForm.find('.js-complaint-productform-quantity').val(quantity);\n $productForm.find('.js-complaint-productform-reason').val(reason);\n }\n\n // Cleanup csv line\n function editRawCsvLine(rawCsvLine)\n {\n let cleanCsvLine = rawCsvLine;\n\n cleanCsvLine = cleanCsvLine.replace(/ /g, '');\n cleanCsvLine = cleanCsvLine.replace(/-/g, '');\n cleanCsvLine = cleanCsvLine.replace(/\\./g, '');\n\n return cleanCsvLine;\n }\n\n // Validate entire csv line\n function csvLineValidation(csvLine)\n {\n let pattern = /^(?:\\d{6,7}|\\d{10,11})([,;\\t]{1})([1-9]{1}[0-9]{0,3})([,;\\t]{1})(.|\\s)*\\S(.|\\s)*$/;\n\n return pattern.test(csvLine);\n }\n\n // Convert csv line to an array\n function convertCsvLineToArray(csvLine)\n {\n let pattern = /[,;\\t]/;\n let csvLineArray = csvLine.split(pattern);\n\n return csvLineArray;\n }\n\n // Check if productnumber is valid\n function checkIfProductNumberInvalid(productNumber)\n {\n let pattern = /^(?:\\d{6,7}|\\d{10,11})$/;\n\n return pattern.test(productNumber);\n }\n\n // Check if quantity is valid\n function checkIfProductQuantityInvalid(quantity)\n {\n let pattern = /^[1-9]{1}[0-9]{0,3}$/;\n\n return pattern.test(quantity);\n }\n\n // Check if reason is valid\n function checkIfProductReasonInvalid(reason)\n {\n let pattern = /(.|\\s)*\\S(.|\\s)*/;\n\n return pattern.test(reason);\n }\n\n function fetchComplaints()\n {\n $loadingIndicatorList.removeClass('loading-indicator--hidden');\n api.read()\n .done((data) =>\n {\n $loadingIndicatorList.addClass('loading-indicator--hidden');\n $('.js-complaint__list').append(data);\n })\n .fail((jqXHR) =>\n {\n let statusCode = jqXHR.status,\n listMessage;\n\n $loadingIndicatorList.addClass('loading-indicator--hidden');\n if (statusCode == 404)\n {\n listMessage = feedbackEmptyListText;\n }\n else\n {\n listMessage = feedbackFailureListText;\n }\n $('.js-complaint__list').append(\n '
    '\n\t\t\t\t+ listMessage\n\t\t\t\t+ '
    '\n );\n });\n }\n\n fetchComplaints();\n\n /**\n\t * EVENT LISTENERS\n\t */\n $form.on('input', handleChangesForm);\n $additionalProductButton.on('click', handleAdditionalProductButtonClick);\n\n $dragAndDropField.on('dragover', handleDragOver);\n $dragAndDropField.on('drop', handleFileSelect);\n $uploadFile.on('change', handleFileSelect);\n\n $resetButton.on('click', handleResetButtonClick);\n $checkButton.on('click', handleCheckButtonClick);\n});\n\n","(function($)\n{\n $( document ).ajaxError(function( event, request )\n {\n if (request.status === 403)\n {\n $('#overlay-login').removeClass('hidden');\n $('body').addClass('focus-active');\n }\n });\n\n $(document).ajaxSend(function(ev, jqxhr, settings)\n {\n var\n localeCode,\n languageCode,\n parser,\n whitelist = [\n 'api-age-confirmation',\n 'api-checkout',\n 'api-cart-orderitems',\n 'api-cart',\n 'api-orderlist',\n 'js_catalog',\n 'javascript-content',\n 'api-bonusitem',\n 'api-shoppinglist',\n 'api-newsletter',\n 'api-sales-chargeback',\n 'v1-api-unpaid-invoice-details',\n 'api-availability-watchlist',\n 'v1-api-product-downloads',\n 'v1-api-complaints',\n 'v1-api-media-library-search',\n 'v1-api-media-library-file-download',\n 'v1-api-media-library-archive-download'\n ],\n reg = new RegExp('(/?)(' + whitelist.join('|') + ')(/|$)');\n\n /*\n\t\t * @Note These assignments are only there to apease the linter. It would otherwise complain about ev and jqxhr\n\t\t * having been declared but not used. To remove that kind of noise from otherwise helpful lint messages,\n\t\t * these identity assignments should be included.\n\t\t */\n\n /*\n\t\t * UPDATE: since the new eslint-configuration, this step is no longer needed.\n\t\t * A downside is that the linter does not check usage of method params.\n\t\t */\n /*\n\t\t *ev = ev;\n\t\t *jqxhr = jqxhr;\n\t\t */\n\n if (reg.test(settings.url))\n {\n localeCode = $('meta[name=\"localeCode\"]').attr('content');\n languageCode = localeCode.substring(0, 2);\n parser = document.createElement('a');\n parser.href = settings.url;\n parser.pathname = parser.pathname.replace(reg, '$1$2-' + languageCode + '$3');\n settings.url = parser.href;\n }\n });\n\n var\n loadSubmenus = (function()\n {\n var loadPromise;\n\n return function(o)\n {\n if (!!loadPromise && !(!!o && !!o.force))\n {\n return loadPromise;\n }\n\n var data = {};\n\n if ($('meta[name=\"shop_profile_code\"]').length)\n {\n data = {\n shopProfileCode: $('meta[name=\"shop_profile_code\"]').attr('content')\n };\n }\n\n loadPromise = $.ajax({\n 'url': '/javascript-content/nav-main',\n 'data': data,\n 'method': 'GET',\n 'cache': true\n });\n\n return loadPromise;\n };\n })();\n /*\n\t\t *loadAndAppendSubmenus = (function () {\n\t\t * var submenuPromise;\n\t\t *\n\t\t * return function() {\n\t\t * var\n\t\t * $navMain,\n\t\t * $navMainInner;\n\t\t *\n\t\t * if (submenuPromise) {\n\t\t * return submenuPromise;\n\t\t * }\n\t\t * submenuPromise = $.Deferred();\n\t\t *\n\t\t * $navMain = $('#nav-main');\n\t\t * $navMainInner = $('.inner', $navMain);\n\t\t *\n\t\t * loadSubmenus()\n\t\t * .done(function (content, status, jqXhr) {\n\t\t * //status = status;\n\t\t *\n\t\t * if (!/^text\\/html/.test(jqXhr.getResponseHeader('Content-type'))) {\n\t\t * submenuPromise.fail();\n\t\t * submenuPromise = false;\n\t\t *\n\t\t * loadSubmenus({ force: true });\n\t\t *\n\t\t * return;\n\t\t * }\n\t\t *\n\t\t * $navMainInner.append(content);\n\t\t * $navMain.trigger(orion.constants.EventNavigationAppended);\n\t\t *\n\t\t * submenuPromise.resolve();\n\t\t * });\n\t\t *\n\t\t * return submenuPromise;\n\t\t * };\n\t\t *})();\n\t\t */\n\n function show($el)\n {\n $el.removeClass(orion.classHidden);\n }\n\n function showExclusive($el, $elHide)\n {\n hide($elHide);\n show($el);\n }\n\n function toggle($el)\n {\n $el.toggleClass(orion.classHidden);\n }\n\n function toggleExclusive($el, $elHide)\n {\n if ($el.hasClass(orion.classHidden))\n {\n showExclusive($el, $elHide);\n }\n else\n {\n hide($el);\n }\n }\n\n function hide($el)\n {\n $el.addClass(orion.classHidden);\n }\n\n function toTranslateStyle(x, y)\n {\n return {\n 'transform': 'translate(' + x + 'px, ' + y + 'px)'\n };\n }\n\n function fadeIn($element)\n {\n $element.fadeIn(3000);\n }\n\n // starts loading indicator and counts running processes\n function startProcessing(element)\n {\n console.log('startProcessing');\n $(element).addClass('processing');\n var runningProcessCount = $(element).data('running-process-count');\n\n if (runningProcessCount == undefined)\n {\n runningProcessCount = 0;\n }\n runningProcessCount += 1;\n console.log('runningProcessCount: ' + runningProcessCount);\n $(element).data('running-process-count', runningProcessCount);\n }\n\n // counts running processes and removes loading indicator when count = 0\n function stopProcessing(element)\n {\n console.log('stopProcessing');\n var runningProcessCount = $(element).data('running-process-count');\n\n runningProcessCount -= 1;\n if (runningProcessCount == 0)\n {\n $(element).removeClass('processing');\n }\n console.log('runningProcessCount: ' + runningProcessCount);\n $(element).data('running-process-count', runningProcessCount);\n }\n\n function handleLoginRedirectParameter()\n {\n console.log('handleLoginRedirectParameter');\n var $form = $('.form-login-plain-form-redirect');\n\n if (!$form.length)\n {\n return;\n }\n var pathname = window.location.pathname + window.location.search + window.location.hash;\n var action = $form.attr('data-action-link');\n\n var redirectAction = '';\n\n if (pathname.indexOf('loginRedirect') !== -1)\n {\n redirectAction = action + pathname;\n }\n else if (action.indexOf('#') !== -1)\n {\n var actionParts = action.split('#');\n\n if (actionParts[0].indexOf('?') !== -1)\n {\n redirectAction = actionParts[0] + '&loginRedirect=' + encodeURIComponent(pathname)\n\t\t\t\t\t+ '#' + actionParts[1];\n }\n else\n {\n redirectAction = actionParts[0] + '?loginRedirect=' + encodeURIComponent(pathname)\n\t\t\t\t\t+ '#' + actionParts[1];\n }\n }\n else if (action.indexOf('?') !== -1)\n {\n redirectAction = action + '&loginRedirect=' + encodeURIComponent(pathname);\n }\n else\n {\n redirectAction = action + '?loginRedirect=' + encodeURIComponent(pathname);\n }\n $form.attr('action', redirectAction);\n }\n\n $.extend(orion, {\n 'hide': hide,\n 'show': show,\n 'showExclusive': showExclusive,\n 'toggle': toggle,\n 'toggleExclusive': toggleExclusive,\n 'toTranslateStyle': toTranslateStyle,\n 'fadeIn': fadeIn,\n 'startProcessing': startProcessing,\n 'stopProcessing': stopProcessing,\n 'handleLoginRedirectParameter': handleLoginRedirectParameter,\n });\n\n $(function()\n {\n $('form').attr('novalidate', true);\n $('html').addClass('js')\n .removeClass('no-js');\n $('iframe').iFrameResize();\n\n if ('ontouchstart' in document.documentElement)\n {\n $('html').addClass('touch');\n }\n\n loadSubmenus();\n\n if (!window.Cookies.enabled)\n {\n $('html').addClass('no-cookies');\n }\n\n function jumpToFirst($input)\n {\n var\n $htmlBody = $('html, body'),\n $offsetElement = $('#logo'),\n offset = 60 + ((0 === $offsetElement.length) ? 0 : $offsetElement.outerHeight(true));\n\n $htmlBody.animate({\n 'scrollTop': $input.offset().top - offset\n }, '500', 'swing');\n }\n\n function handleValidationFailedOnSubmit(e, data)\n {\n // e = e;\n jumpToFirst(data.$inputsFailed);\n }\n\n function handleBlurYear()\n {\n var\n $this = $(this),\n numericYear = parseInt($this.val()),\n currentYear = new Date().getFullYear(),\n currentYearShort = currentYear % 100;\n\n if (isNaN(numericYear))\n {\n return;\n }\n\n if (numericYear > 99)\n {\n return;\n }\n\n if (numericYear <= currentYearShort)\n {\n $this.val(numericYear + currentYear - currentYearShort);\n $this.trigger('input');\n return;\n }\n\n $this.val(numericYear + currentYear - currentYearShort - 100);\n $this.trigger('input');\n }\n\n function handleOnsiteBasketUpdate()\n {\n if ($('#basket-onsite').data('cart-quantity') == 0)\n {\n $('.js-basket-onsite-empty').removeClass('hidden');\n $('.js-basket-onsite-not-empty').addClass('hidden');\n }\n else if ($('#basket-onsite').data('cart-quantity') != 0)\n {\n $('.js-basket-onsite-empty').addClass('hidden');\n $('.js-basket-onsite-not-empty').removeClass('hidden');\n }\n }\n\n $('input[data-date-role=year]').on('change', handleBlurYear);\n $('form').on(orion.constants.EventValidationFailedOnSubmit, handleValidationFailedOnSubmit);\n $('#basket-onsite').on('basketUpdate', handleOnsiteBasketUpdate);\n\n $(document).on('click', function(e)\n {\n console.log('global.js click');\n if ($(e.target).is('.overlay.focus'))\n {\n $('body').trigger(orion.constants.EventFocusOverlayClicked);\n document.querySelector('body').dispatchEvent(new Event(orion.constants.EventFocusOverlayClicked));\n }\n });\n });\n})(jQuery);\n\n$(document).ready(function()\n{\n orion.handleLoginRedirectParameter();\n});\n","(function($)\n{\n $.extend(true, orion, {\n api: {\n cart: {}\n }\n });\n\n var\n api = orion.api.cart,\n uri = '/api-cart';\n\n function read()\n {\n var\n promise = $.ajax(uri, {\n 'method': 'GET'\n });\n\n return promise;\n }\n\n function readItems(skip, take, field, dir)\n {\n var promise = $.ajax(uri + '/items', {\n 'method': 'GET',\n 'data': {\n 'skip': skip,\n 'take': take,\n 'sort': [{\n 'field': field,\n 'dir': dir\n }]\n },\n });\n\n return promise;\n }\n\n api.read = read;\n api.readItems = readItems;\n})(jQuery);\n","(function($)\n{\n $.extend(true, orion, {\n api: {\n cart: {\n orderitems: {}\n }\n }\n });\n\n var\n api = orion.api.cart.orderitems,\n uri = '/api-cart-orderitems';\n\n function create(data)\n {\n var\n promise = $.ajax(uri, {\n 'cache': false,\n headers: {\n 'Accept': 'application/json',\n },\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n 'method': 'PUT'\n });\n\n return promise;\n }\n\n function add(data)\n {\n var\n promise = $.ajax(uri + '/add-to-cart', {\n 'cache': false,\n headers: {\n 'Accept': 'application/json',\n },\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n 'method': 'PUT'\n });\n\n return promise;\n }\n\n function read(data)\n {\n var\n promise = $.ajax(uri + '/' + data.productNumber, {\n 'cache': false,\n 'method': 'GET'\n });\n\n return promise;\n }\n\n function update(data)\n {\n var\n promise = $.ajax(uri + '/' + data.productNumber, {\n 'cache': false,\n 'data': $.extend({}, data, {\n '_method': 'PUT'\n }),\n 'method': 'POST'\n });\n\n return promise;\n }\n\n function del(data)\n {\n var\n promise = $.ajax(uri + '/' + data.productNumber, {\n 'cache': false,\n 'data': $.extend({}, data, {\n '_method': 'DELETE'\n }),\n 'method': 'POST'\n });\n\n return promise;\n }\n\n api.create = create;\n api.add = add;\n api.read = read;\n api.update = update;\n api.del = del;\n})(jQuery);\n","import { getLanguageCode } from '../utilities';\n\nexport default class ShoppinglistClient\n{\n constructor()\n {\n let languageCode = getLanguageCode();\n\n this._uri = '/api-shoppinglist-' + languageCode;\n this._dataSrc = 'shoppingLists';\n }\n\n get uri()\n {\n return this._uri;\n }\n\n get dataSrc()\n {\n return this._dataSrc;\n }\n\n /**\n\t * GET\n\t */\n\n /**\n\t * @param shoppinglistId\n\t * @returns {Promise}\n\t */\n fetchAllItems(shoppinglistId)\n {\n return fetch(this._uri + '/' + shoppinglistId + '/items/all');\n }\n\n /**\n\t * @param shoppinglistId\n\t * @returns {Promise}\n\t */\n fetchShoppinglist(shoppinglistId)\n {\n return fetch(this._uri + '/' + shoppinglistId);\n }\n\n /**\n\t * @returns {Promise}\n\t */\n fetchAllShoppinglists()\n {\n return fetch(this._uri);\n }\n\n /**\n\t * @param shoppinglistId\n\t * @param offset\n\t * @param limit\n\t * @returns {Promise}\n\t */\n fetchItems(shoppinglistId, offset, limit)\n {\n return fetch(this._uri + '/' + shoppinglistId + '/items', {\n headers: {\n 'Content-Type': 'application/json'\n },\n body: {\n 'skip': offset,\n 'take': limit\n }\n });\n }\n\n /**\n\t * POST\n\t */\n\n /**\n\t * @param data\n\t * @returns {Promise}\n\t */\n createShoppinglist(data)\n {\n return fetch(this._uri, {\n method: 'POST', // *GET, POST, PUT, DELETE, etc.\n cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(data) // body data type must match \"Content-Type\" header\n });\n }\n\n /**\n\t * PUT\n\t */\n\n /**\n\t * @param data\n\t * @param shoppinglistId\n\t * @returns {Promise}\n\t */\n updateItems(data, shoppinglistId)\n {\n return fetch(this._uri + '/' + shoppinglistId + '/items', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(data)\n });\n }\n\n /**\n\t * @param data\n\t * @param shoppinglistId\n\t * @returns {Promise}\n\t */\n addItemsToCart(data, shoppinglistId)\n {\n return fetch(this._uri + '/' + shoppinglistId + '/items/add-to-cart', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(data)\n });\n }\n\n /**\n\t * @param shoppinglistId\n\t * @returns {Promise}\n\t */\n addToCart(shoppinglistId)\n {\n return fetch(this._uri + '/' + shoppinglistId + '/add-to-cart', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n }\n\n /**\n\t * @param shoppinglistId\n\t * @returns {Promise}\n\t */\n replaceCart(shoppinglistId)\n {\n return fetch(this._uri + '/' + shoppinglistId + '/replace-cart', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n }\n\n /**\n\t * @param data\n\t * @param shoppinglistId\n\t * @returns {Promise}\n\t */\n update(data, shoppinglistId)\n {\n return fetch(this._uri + '/' + shoppinglistId, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(data)\n });\n }\n\n /**\n\t * DELETE\n\t */\n\n /**\n\t * @param data\n\t * @param shoppinglistId\n\t * @returns {Promise}\n\t */\n deleteItems(data, shoppinglistId)\n {\n return fetch(this._uri + '/' + shoppinglistId + '/items', {\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(data) // body data type must match \"Content-Type\" header\n });\n }\n\n /**\n\t * @param shoppinglistId\n\t * @returns {Promise}\n\t */\n deleteShoppinglist(shoppinglistId)\n {\n return fetch(this._uri + '/' + shoppinglistId, {\n method: 'DELETE',\n });\n }\n}\n","(function($)\n{\n $.extend(true, orion, {\n api: {\n customerScalarAttribute: {}\n }\n });\n\n var\n api = orion.api.customerScalarAttribute,\n uri = '/api-customer-scalar-attribute';\n\n function read(name)\n {\n return $.ajax(uri + '/' + name, {\n method: 'GET'\n });\n }\n\n function update(name, value)\n {\n return $.ajax(uri + '/' + name + '/' + value, {\n cache: false,\n method: 'POST',\n });\n }\n\n api.read = read;\n api.update = update;\n})(jQuery);\n","(function($)\n{\n $.extend(true, orion, {\n api: {\n shoppinglist: {}\n }\n });\n\n var api = orion.api.shoppinglist,\n uri = '/api-shoppinglist';\n\n function createShoppingList(data)\n {\n var promise = $.ajax(uri, {\n cache: false,\n headers: {\n Accept: 'application/json'\n },\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n method: 'POST'\n });\n\n return promise;\n }\n\n function create(data, defaultShoppingListId)\n {\n var promise = $.ajax(uri + '/' + defaultShoppingListId + '/items', {\n cache: false,\n headers: {\n Accept: 'application/json'\n },\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n method: 'PUT'\n });\n\n return promise;\n }\n\n function deleteItems(data, defaultShoppingListId)\n {\n var promise = $.ajax(uri + '/' + defaultShoppingListId + '/items', {\n cache: false,\n headers: {\n Accept: 'application/json'\n },\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify(data),\n method: 'DELETE'\n });\n\n return promise;\n }\n\n function del(data)\n {\n var promise = $.ajax(uri + '/' + data.productNumber, {\n cache: false,\n data: $.extend({}, data, {\n _method: 'DELETE'\n }),\n method: 'POST'\n });\n\n return promise;\n }\n\n function readAllItems(defaultShoppingListId)\n {\n var promise = $.ajax(uri + '/' + defaultShoppingListId + '/items/all', {\n method: 'GET'\n });\n\n return promise;\n }\n\n function readHeaderData(shoppingListId)\n {\n console.log('readHeaderData');\n var promise = $.ajax(uri + '/' + shoppingListId, {\n method: 'GET'\n });\n\n console.log(promise);\n return promise;\n }\n\n function readItems(shoppingListId, skip, take)\n {\n var promise = $.ajax(uri + '/' + shoppingListId + '/items', {\n method: 'GET',\n data: {\n skip: skip,\n take: take,\n draw: 0,\n order: {\n 0: {\n field: 'productNumber',\n dir: 'asc'\n }\n }\n },\n headers: {\n Accept: 'application/json'\n }\n });\n\n return promise;\n }\n\n api.create = create;\n api.createShoppingList = createShoppingList;\n api.del = del;\n api.deleteItems = deleteItems;\n api.readItems = readItems;\n api.readAllItems = readAllItems;\n api.readHeaderData = readHeaderData;\n})(jQuery);\n","$.extend(true, orion, {\n api: {\n bonusitem: {}\n }\n});\n\nvar\n api = orion.api.bonusitem,\n uri = '/api-bonusitem';\n\nfunction read()\n{\n var\n promise = $.ajax(uri, {\n 'method': 'GET'\n });\n\n return promise;\n}\n\napi.read = read;\n","(function($)\n{\n $.extend(true, orion, {\n api: {\n notifications: {}\n }\n });\n\n var\n api = orion.api.notifications,\n uri = '/api-notifications',\n localeCode = $('meta[name=\"localeCode\"]').attr('content'),\n languageCode = localeCode.substring(0, 2);\n\n function read()\n {\n var\n promise = $.ajax(uri + '-' + languageCode, {\n cache: false,\n headers: {\n 'Accept': 'application/json',\n },\n method: 'GET'\n });\n\n return promise;\n }\n\n function markAsRead(notificationId)\n {\n var\n promise = $.ajax(uri + '-' + languageCode, {\n cache: false,\n headers: {\n 'Accept': 'application/json',\n },\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify({ notificationId: notificationId }),\n method: 'PUT'\n });\n\n return promise;\n }\n\n function markAllUnimportantAsRead()\n {\n var\n promise = $.ajax(uri + '-' + languageCode, {\n cache: false,\n headers: {\n 'Accept': 'application/json',\n },\n dataType: 'json',\n contentType: 'application/json',\n data: JSON.stringify({ markAll: true }),\n method: 'PUT'\n });\n\n return promise;\n }\n\n api.read = read;\n api.markAsRead = markAsRead;\n api.markAllUnimportantAsRead = markAllUnimportantAsRead;\n})(jQuery);\n","import { getLanguageCode } from '../utilities';\n\nexport default class OrderClient\n{\n constructor()\n {\n let languageCode = getLanguageCode();\n\n this._uri = '/api-orderlist-' + languageCode;\n this._dataSrc = 'orderLists';\n }\n\n get uri()\n {\n return this._uri;\n }\n\n get dataSrc()\n {\n return this._dataSrc;\n }\n\n /**\n\t * GET\n\t */\n\n /**\n\t * @param orderId\n\t * @returns {Promise}\n\t */\n fetchAllItems(orderId)\n {\n return fetch(this._uri + '/' + orderId + '/items/all');\n }\n\n /**\n\t * @param orderId\n\t * @returns {Promise}\n\t */\n fetchOrder(orderId)\n {\n return fetch(this._uri + '/' + orderId);\n }\n\n /**\n\t * @param orderId\n\t * @param offset\n\t * @param limit\n\t * @returns {Promise}\n\t */\n fetchItems(orderId, offset, limit)\n {\n return fetch(this._uri + '/' + orderId + '/items', {\n headers: {\n 'Content-Type': 'application/json'\n },\n body: {\n 'skip': offset,\n 'take': limit\n }\n });\n }\n\n /**\n\t * PUT\n\t */\n\n /**\n\t * @param orderId\n\t * @returns {Promise}\n\t */\n addToCart(orderId)\n {\n return fetch(this._uri + '/' + orderId + '/add-to-cart', {\n method: 'PUT',\n credentials: 'include',\n });\n }\n\n /**\n\t * @param orderId\n\t * @returns {Promise}\n\t */\n replaceCart(orderId)\n {\n return fetch(this._uri + '/' + orderId + '/replace-cart', {\n method: 'PUT',\n credentials: 'include',\n });\n }\n\n /**\n\t* DELETE\n\t*/\n\n cancelOrder(orderId)\n {\n return fetch(this._uri + '/' + orderId, {\n method: 'DELETE'\n });\n }\n}\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","/*!\n * URI.js - Mutating URLs\n *\n * Version: 1.18.10\n *\n * Author: Rodney Rehm\n * Web: http://medialize.github.io/URI.js/\n *\n * Licensed under\n * MIT License http://www.opensource.org/licenses/mit-license\n *\n */\n(function (root, factory) {\n 'use strict';\n // https://github.com/umdjs/umd/blob/master/returnExports.js\n if (typeof module === 'object' && module.exports) {\n // Node\n module.exports = factory(require('./thirdParty/punycode'), require('./thirdParty/IPv6'), require('./thirdParty/SecondLevelDomains'));\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['./thirdParty/punycode', './thirdParty/IPv6', './thirdParty/SecondLevelDomains'], factory);\n } else {\n // Browser globals (root is window)\n root.URI = factory(root.punycode, root.IPv6, root.SecondLevelDomains, root);\n }\n}(this, function (punycode, IPv6, SLD, root) {\n 'use strict';\n /*global location, escape, unescape */\n // FIXME: v2.0.0 renamce non-camelCase properties to uppercase\n /*jshint camelcase: false */\n\n // save current URI variable, if any\n var _URI = root && root.URI;\n\n function URI(url, base) {\n var _urlSupplied = arguments.length >= 1;\n var _baseSupplied = arguments.length >= 2;\n\n // Allow instantiation without the 'new' keyword\n if (!(this instanceof URI)) {\n if (_urlSupplied) {\n if (_baseSupplied) {\n return new URI(url, base);\n }\n\n return new URI(url);\n }\n\n return new URI();\n }\n\n if (url === undefined) {\n if (_urlSupplied) {\n throw new TypeError('undefined is not a valid argument for URI');\n }\n\n if (typeof location !== 'undefined') {\n url = location.href + '';\n } else {\n url = '';\n }\n }\n\n if (url === null) {\n if (_urlSupplied) {\n throw new TypeError('null is not a valid argument for URI');\n }\n }\n\n this.href(url);\n\n // resolve to base according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#constructor\n if (base !== undefined) {\n return this.absoluteTo(base);\n }\n\n return this;\n }\n\n URI.version = '1.18.10';\n\n var p = URI.prototype;\n var hasOwn = Object.prototype.hasOwnProperty;\n\n function escapeRegEx(string) {\n // https://github.com/medialize/URI.js/commit/85ac21783c11f8ccab06106dba9735a31a86924d#commitcomment-821963\n return string.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\n }\n\n function getType(value) {\n // IE8 doesn't return [Object Undefined] but [Object Object] for undefined value\n if (value === undefined) {\n return 'Undefined';\n }\n\n return String(Object.prototype.toString.call(value)).slice(8, -1);\n }\n\n function isArray(obj) {\n return getType(obj) === 'Array';\n }\n\n function filterArrayValues(data, value) {\n var lookup = {};\n var i, length;\n\n if (getType(value) === 'RegExp') {\n lookup = null;\n } else if (isArray(value)) {\n for (i = 0, length = value.length; i < length; i++) {\n lookup[value[i]] = true;\n }\n } else {\n lookup[value] = true;\n }\n\n for (i = 0, length = data.length; i < length; i++) {\n /*jshint laxbreak: true */\n var _match = lookup && lookup[data[i]] !== undefined\n || !lookup && value.test(data[i]);\n /*jshint laxbreak: false */\n if (_match) {\n data.splice(i, 1);\n length--;\n i--;\n }\n }\n\n return data;\n }\n\n function arrayContains(list, value) {\n var i, length;\n\n // value may be string, number, array, regexp\n if (isArray(value)) {\n // Note: this can be optimized to O(n) (instead of current O(m * n))\n for (i = 0, length = value.length; i < length; i++) {\n if (!arrayContains(list, value[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n var _type = getType(value);\n for (i = 0, length = list.length; i < length; i++) {\n if (_type === 'RegExp') {\n if (typeof list[i] === 'string' && list[i].match(value)) {\n return true;\n }\n } else if (list[i] === value) {\n return true;\n }\n }\n\n return false;\n }\n\n function arraysEqual(one, two) {\n if (!isArray(one) || !isArray(two)) {\n return false;\n }\n\n // arrays can't be equal if they have different amount of content\n if (one.length !== two.length) {\n return false;\n }\n\n one.sort();\n two.sort();\n\n for (var i = 0, l = one.length; i < l; i++) {\n if (one[i] !== two[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n function trimSlashes(text) {\n var trim_expression = /^\\/+|\\/+$/g;\n return text.replace(trim_expression, '');\n }\n\n URI._parts = function() {\n return {\n protocol: null,\n username: null,\n password: null,\n hostname: null,\n urn: null,\n port: null,\n path: null,\n query: null,\n fragment: null,\n // state\n duplicateQueryParameters: URI.duplicateQueryParameters,\n escapeQuerySpace: URI.escapeQuerySpace\n };\n };\n // state: allow duplicate query parameters (a=1&a=1)\n URI.duplicateQueryParameters = false;\n // state: replaces + with %20 (space in query strings)\n URI.escapeQuerySpace = true;\n // static properties\n URI.protocol_expression = /^[a-z][a-z0-9.+-]*$/i;\n URI.idn_expression = /[^a-z0-9\\.-]/i;\n URI.punycode_expression = /(xn--)/i;\n // well, 333.444.555.666 matches, but it sure ain't no IPv4 - do we care?\n URI.ip4_expression = /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/;\n // credits to Rich Brown\n // source: http://forums.intermapper.com/viewtopic.php?p=1096#1096\n // specification: http://www.ietf.org/rfc/rfc4291.txt\n URI.ip6_expression = /^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/;\n // expression used is \"gruber revised\" (@gruber v2) determined to be the\n // best solution in a regex-golf we did a couple of ages ago at\n // * http://mathiasbynens.be/demo/url-regex\n // * http://rodneyrehm.de/t/url-regex.html\n URI.find_uri_expression = /\\b((?:[a-z][\\w-]+:(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))/ig;\n URI.findUri = {\n // valid \"scheme://\" or \"www.\"\n start: /\\b(?:([a-z][a-z0-9.+-]*:\\/\\/)|www\\.)/gi,\n // everything up to the next whitespace\n end: /[\\s\\r\\n]|$/,\n // trim trailing punctuation captured by end RegExp\n trim: /[`!()\\[\\]{};:'\".,<>?«»“”„‘’]+$/,\n // balanced parens inclusion (), [], {}, <>\n parens: /(\\([^\\)]*\\)|\\[[^\\]]*\\]|\\{[^}]*\\}|<[^>]*>)/g,\n };\n // http://www.iana.org/assignments/uri-schemes.html\n // http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Well-known_ports\n URI.defaultPorts = {\n http: '80',\n https: '443',\n ftp: '21',\n gopher: '70',\n ws: '80',\n wss: '443'\n };\n // allowed hostname characters according to RFC 3986\n // ALPHA DIGIT \"-\" \".\" \"_\" \"~\" \"!\" \"$\" \"&\" \"'\" \"(\" \")\" \"*\" \"+\" \",\" \";\" \"=\" %encoded\n // I've never seen a (non-IDN) hostname other than: ALPHA DIGIT . -\n URI.invalid_hostname_characters = /[^a-zA-Z0-9\\.-]/;\n // map DOM Elements to their URI attribute\n URI.domAttributes = {\n 'a': 'href',\n 'blockquote': 'cite',\n 'link': 'href',\n 'base': 'href',\n 'script': 'src',\n 'form': 'action',\n 'img': 'src',\n 'area': 'href',\n 'iframe': 'src',\n 'embed': 'src',\n 'source': 'src',\n 'track': 'src',\n 'input': 'src', // but only if type=\"image\"\n 'audio': 'src',\n 'video': 'src'\n };\n URI.getDomAttribute = function(node) {\n if (!node || !node.nodeName) {\n return undefined;\n }\n\n var nodeName = node.nodeName.toLowerCase();\n // should only expose src for type=\"image\"\n if (nodeName === 'input' && node.type !== 'image') {\n return undefined;\n }\n\n return URI.domAttributes[nodeName];\n };\n\n function escapeForDumbFirefox36(value) {\n // https://github.com/medialize/URI.js/issues/91\n return escape(value);\n }\n\n // encoding / decoding according to RFC3986\n function strictEncodeURIComponent(string) {\n // see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURIComponent\n return encodeURIComponent(string)\n .replace(/[!'()*]/g, escapeForDumbFirefox36)\n .replace(/\\*/g, '%2A');\n }\n URI.encode = strictEncodeURIComponent;\n URI.decode = decodeURIComponent;\n URI.iso8859 = function() {\n URI.encode = escape;\n URI.decode = unescape;\n };\n URI.unicode = function() {\n URI.encode = strictEncodeURIComponent;\n URI.decode = decodeURIComponent;\n };\n URI.characters = {\n pathname: {\n encode: {\n // RFC3986 2.1: For consistency, URI producers and normalizers should\n // use uppercase hexadecimal digits for all percent-encodings.\n expression: /%(24|26|2B|2C|3B|3D|3A|40)/ig,\n map: {\n // -._~!'()*\n '%24': '$',\n '%26': '&',\n '%2B': '+',\n '%2C': ',',\n '%3B': ';',\n '%3D': '=',\n '%3A': ':',\n '%40': '@'\n }\n },\n decode: {\n expression: /[\\/\\?#]/g,\n map: {\n '/': '%2F',\n '?': '%3F',\n '#': '%23'\n }\n }\n },\n reserved: {\n encode: {\n // RFC3986 2.1: For consistency, URI producers and normalizers should\n // use uppercase hexadecimal digits for all percent-encodings.\n expression: /%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig,\n map: {\n // gen-delims\n '%3A': ':',\n '%2F': '/',\n '%3F': '?',\n '%23': '#',\n '%5B': '[',\n '%5D': ']',\n '%40': '@',\n // sub-delims\n '%21': '!',\n '%24': '$',\n '%26': '&',\n '%27': '\\'',\n '%28': '(',\n '%29': ')',\n '%2A': '*',\n '%2B': '+',\n '%2C': ',',\n '%3B': ';',\n '%3D': '='\n }\n }\n },\n urnpath: {\n // The characters under `encode` are the characters called out by RFC 2141 as being acceptable\n // for usage in a URN. RFC2141 also calls out \"-\", \".\", and \"_\" as acceptable characters, but\n // these aren't encoded by encodeURIComponent, so we don't have to call them out here. Also\n // note that the colon character is not featured in the encoding map; this is because URI.js\n // gives the colons in URNs semantic meaning as the delimiters of path segements, and so it\n // should not appear unencoded in a segment itself.\n // See also the note above about RFC3986 and capitalalized hex digits.\n encode: {\n expression: /%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/ig,\n map: {\n '%21': '!',\n '%24': '$',\n '%27': '\\'',\n '%28': '(',\n '%29': ')',\n '%2A': '*',\n '%2B': '+',\n '%2C': ',',\n '%3B': ';',\n '%3D': '=',\n '%40': '@'\n }\n },\n // These characters are the characters called out by RFC2141 as \"reserved\" characters that\n // should never appear in a URN, plus the colon character (see note above).\n decode: {\n expression: /[\\/\\?#:]/g,\n map: {\n '/': '%2F',\n '?': '%3F',\n '#': '%23',\n ':': '%3A'\n }\n }\n }\n };\n URI.encodeQuery = function(string, escapeQuerySpace) {\n var escaped = URI.encode(string + '');\n if (escapeQuerySpace === undefined) {\n escapeQuerySpace = URI.escapeQuerySpace;\n }\n\n return escapeQuerySpace ? escaped.replace(/%20/g, '+') : escaped;\n };\n URI.decodeQuery = function(string, escapeQuerySpace) {\n string += '';\n if (escapeQuerySpace === undefined) {\n escapeQuerySpace = URI.escapeQuerySpace;\n }\n\n try {\n return URI.decode(escapeQuerySpace ? string.replace(/\\+/g, '%20') : string);\n } catch(e) {\n // we're not going to mess with weird encodings,\n // give up and return the undecoded original string\n // see https://github.com/medialize/URI.js/issues/87\n // see https://github.com/medialize/URI.js/issues/92\n return string;\n }\n };\n // generate encode/decode path functions\n var _parts = {'encode':'encode', 'decode':'decode'};\n var _part;\n var generateAccessor = function(_group, _part) {\n return function(string) {\n try {\n return URI[_part](string + '').replace(URI.characters[_group][_part].expression, function(c) {\n return URI.characters[_group][_part].map[c];\n });\n } catch (e) {\n // we're not going to mess with weird encodings,\n // give up and return the undecoded original string\n // see https://github.com/medialize/URI.js/issues/87\n // see https://github.com/medialize/URI.js/issues/92\n return string;\n }\n };\n };\n\n for (_part in _parts) {\n URI[_part + 'PathSegment'] = generateAccessor('pathname', _parts[_part]);\n URI[_part + 'UrnPathSegment'] = generateAccessor('urnpath', _parts[_part]);\n }\n\n var generateSegmentedPathFunction = function(_sep, _codingFuncName, _innerCodingFuncName) {\n return function(string) {\n // Why pass in names of functions, rather than the function objects themselves? The\n // definitions of some functions (but in particular, URI.decode) will occasionally change due\n // to URI.js having ISO8859 and Unicode modes. Passing in the name and getting it will ensure\n // that the functions we use here are \"fresh\".\n var actualCodingFunc;\n if (!_innerCodingFuncName) {\n actualCodingFunc = URI[_codingFuncName];\n } else {\n actualCodingFunc = function(string) {\n return URI[_codingFuncName](URI[_innerCodingFuncName](string));\n };\n }\n\n var segments = (string + '').split(_sep);\n\n for (var i = 0, length = segments.length; i < length; i++) {\n segments[i] = actualCodingFunc(segments[i]);\n }\n\n return segments.join(_sep);\n };\n };\n\n // This takes place outside the above loop because we don't want, e.g., encodeUrnPath functions.\n URI.decodePath = generateSegmentedPathFunction('/', 'decodePathSegment');\n URI.decodeUrnPath = generateSegmentedPathFunction(':', 'decodeUrnPathSegment');\n URI.recodePath = generateSegmentedPathFunction('/', 'encodePathSegment', 'decode');\n URI.recodeUrnPath = generateSegmentedPathFunction(':', 'encodeUrnPathSegment', 'decode');\n\n URI.encodeReserved = generateAccessor('reserved', 'encode');\n\n URI.parse = function(string, parts) {\n var pos;\n if (!parts) {\n parts = {};\n }\n // [protocol\"://\"[username[\":\"password]\"@\"]hostname[\":\"port]\"/\"?][path][\"?\"querystring][\"#\"fragment]\n\n // extract fragment\n pos = string.indexOf('#');\n if (pos > -1) {\n // escaping?\n parts.fragment = string.substring(pos + 1) || null;\n string = string.substring(0, pos);\n }\n\n // extract query\n pos = string.indexOf('?');\n if (pos > -1) {\n // escaping?\n parts.query = string.substring(pos + 1) || null;\n string = string.substring(0, pos);\n }\n\n // extract protocol\n if (string.substring(0, 2) === '//') {\n // relative-scheme\n parts.protocol = null;\n string = string.substring(2);\n // extract \"user:pass@host:port\"\n string = URI.parseAuthority(string, parts);\n } else {\n pos = string.indexOf(':');\n if (pos > -1) {\n parts.protocol = string.substring(0, pos) || null;\n if (parts.protocol && !parts.protocol.match(URI.protocol_expression)) {\n // : may be within the path\n parts.protocol = undefined;\n } else if (string.substring(pos + 1, pos + 3) === '//') {\n string = string.substring(pos + 3);\n\n // extract \"user:pass@host:port\"\n string = URI.parseAuthority(string, parts);\n } else {\n string = string.substring(pos + 1);\n parts.urn = true;\n }\n }\n }\n\n // what's left must be the path\n parts.path = string;\n\n // and we're done\n return parts;\n };\n URI.parseHost = function(string, parts) {\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://github.com/joyent/node/blob/386fd24f49b0e9d1a8a076592a404168faeecc34/lib/url.js#L115-L124\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n // https://github.com/medialize/URI.js/pull/233\n string = string.replace(/\\\\/g, '/');\n\n // extract host:port\n var pos = string.indexOf('/');\n var bracketPos;\n var t;\n\n if (pos === -1) {\n pos = string.length;\n }\n\n if (string.charAt(0) === '[') {\n // IPv6 host - http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04#section-6\n // I claim most client software breaks on IPv6 anyways. To simplify things, URI only accepts\n // IPv6+port in the format [2001:db8::1]:80 (for the time being)\n bracketPos = string.indexOf(']');\n parts.hostname = string.substring(1, bracketPos) || null;\n parts.port = string.substring(bracketPos + 2, pos) || null;\n if (parts.port === '/') {\n parts.port = null;\n }\n } else {\n var firstColon = string.indexOf(':');\n var firstSlash = string.indexOf('/');\n var nextColon = string.indexOf(':', firstColon + 1);\n if (nextColon !== -1 && (firstSlash === -1 || nextColon < firstSlash)) {\n // IPv6 host contains multiple colons - but no port\n // this notation is actually not allowed by RFC 3986, but we're a liberal parser\n parts.hostname = string.substring(0, pos) || null;\n parts.port = null;\n } else {\n t = string.substring(0, pos).split(':');\n parts.hostname = t[0] || null;\n parts.port = t[1] || null;\n }\n }\n\n if (parts.hostname && string.substring(pos).charAt(0) !== '/') {\n pos++;\n string = '/' + string;\n }\n\n return string.substring(pos) || '/';\n };\n URI.parseAuthority = function(string, parts) {\n string = URI.parseUserinfo(string, parts);\n return URI.parseHost(string, parts);\n };\n URI.parseUserinfo = function(string, parts) {\n // extract username:password\n var firstSlash = string.indexOf('/');\n var pos = string.lastIndexOf('@', firstSlash > -1 ? firstSlash : string.length - 1);\n var t;\n\n // authority@ must come before /path\n if (pos > -1 && (firstSlash === -1 || pos < firstSlash)) {\n t = string.substring(0, pos).split(':');\n parts.username = t[0] ? URI.decode(t[0]) : null;\n t.shift();\n parts.password = t[0] ? URI.decode(t.join(':')) : null;\n string = string.substring(pos + 1);\n } else {\n parts.username = null;\n parts.password = null;\n }\n\n return string;\n };\n URI.parseQuery = function(string, escapeQuerySpace) {\n if (!string) {\n return {};\n }\n\n // throw out the funky business - \"?\"[name\"=\"value\"&\"]+\n string = string.replace(/&+/g, '&').replace(/^\\?*&*|&+$/g, '');\n\n if (!string) {\n return {};\n }\n\n var items = {};\n var splits = string.split('&');\n var length = splits.length;\n var v, name, value;\n\n for (var i = 0; i < length; i++) {\n v = splits[i].split('=');\n name = URI.decodeQuery(v.shift(), escapeQuerySpace);\n // no \"=\" is null according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#collect-url-parameters\n value = v.length ? URI.decodeQuery(v.join('='), escapeQuerySpace) : null;\n\n if (hasOwn.call(items, name)) {\n if (typeof items[name] === 'string' || items[name] === null) {\n items[name] = [items[name]];\n }\n\n items[name].push(value);\n } else {\n items[name] = value;\n }\n }\n\n return items;\n };\n\n URI.build = function(parts) {\n var t = '';\n\n if (parts.protocol) {\n t += parts.protocol + ':';\n }\n\n if (!parts.urn && (t || parts.hostname)) {\n t += '//';\n }\n\n t += (URI.buildAuthority(parts) || '');\n\n if (typeof parts.path === 'string') {\n if (parts.path.charAt(0) !== '/' && typeof parts.hostname === 'string') {\n t += '/';\n }\n\n t += parts.path;\n }\n\n if (typeof parts.query === 'string' && parts.query) {\n t += '?' + parts.query;\n }\n\n if (typeof parts.fragment === 'string' && parts.fragment) {\n t += '#' + parts.fragment;\n }\n return t;\n };\n URI.buildHost = function(parts) {\n var t = '';\n\n if (!parts.hostname) {\n return '';\n } else if (URI.ip6_expression.test(parts.hostname)) {\n t += '[' + parts.hostname + ']';\n } else {\n t += parts.hostname;\n }\n\n if (parts.port) {\n t += ':' + parts.port;\n }\n\n return t;\n };\n URI.buildAuthority = function(parts) {\n return URI.buildUserinfo(parts) + URI.buildHost(parts);\n };\n URI.buildUserinfo = function(parts) {\n var t = '';\n\n if (parts.username) {\n t += URI.encode(parts.username);\n }\n\n if (parts.password) {\n t += ':' + URI.encode(parts.password);\n }\n\n if (t) {\n t += '@';\n }\n\n return t;\n };\n URI.buildQuery = function(data, duplicateQueryParameters, escapeQuerySpace) {\n // according to http://tools.ietf.org/html/rfc3986 or http://labs.apache.org/webarch/uri/rfc/rfc3986.html\n // being »-._~!$&'()*+,;=:@/?« %HEX and alnum are allowed\n // the RFC explicitly states ?/foo being a valid use case, no mention of parameter syntax!\n // URI.js treats the query string as being application/x-www-form-urlencoded\n // see http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type\n\n var t = '';\n var unique, key, i, length;\n for (key in data) {\n if (hasOwn.call(data, key) && key) {\n if (isArray(data[key])) {\n unique = {};\n for (i = 0, length = data[key].length; i < length; i++) {\n if (data[key][i] !== undefined && unique[data[key][i] + ''] === undefined) {\n t += '&' + URI.buildQueryParameter(key, data[key][i], escapeQuerySpace);\n if (duplicateQueryParameters !== true) {\n unique[data[key][i] + ''] = true;\n }\n }\n }\n } else if (data[key] !== undefined) {\n t += '&' + URI.buildQueryParameter(key, data[key], escapeQuerySpace);\n }\n }\n }\n\n return t.substring(1);\n };\n URI.buildQueryParameter = function(name, value, escapeQuerySpace) {\n // http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type -- application/x-www-form-urlencoded\n // don't append \"=\" for null values, according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#url-parameter-serialization\n return URI.encodeQuery(name, escapeQuerySpace) + (value !== null ? '=' + URI.encodeQuery(value, escapeQuerySpace) : '');\n };\n\n URI.addQuery = function(data, name, value) {\n if (typeof name === 'object') {\n for (var key in name) {\n if (hasOwn.call(name, key)) {\n URI.addQuery(data, key, name[key]);\n }\n }\n } else if (typeof name === 'string') {\n if (data[name] === undefined) {\n data[name] = value;\n return;\n } else if (typeof data[name] === 'string') {\n data[name] = [data[name]];\n }\n\n if (!isArray(value)) {\n value = [value];\n }\n\n data[name] = (data[name] || []).concat(value);\n } else {\n throw new TypeError('URI.addQuery() accepts an object, string as the name parameter');\n }\n };\n URI.removeQuery = function(data, name, value) {\n var i, length, key;\n\n if (isArray(name)) {\n for (i = 0, length = name.length; i < length; i++) {\n data[name[i]] = undefined;\n }\n } else if (getType(name) === 'RegExp') {\n for (key in data) {\n if (name.test(key)) {\n data[key] = undefined;\n }\n }\n } else if (typeof name === 'object') {\n for (key in name) {\n if (hasOwn.call(name, key)) {\n URI.removeQuery(data, key, name[key]);\n }\n }\n } else if (typeof name === 'string') {\n if (value !== undefined) {\n if (getType(value) === 'RegExp') {\n if (!isArray(data[name]) && value.test(data[name])) {\n data[name] = undefined;\n } else {\n data[name] = filterArrayValues(data[name], value);\n }\n } else if (data[name] === String(value) && (!isArray(value) || value.length === 1)) {\n data[name] = undefined;\n } else if (isArray(data[name])) {\n data[name] = filterArrayValues(data[name], value);\n }\n } else {\n data[name] = undefined;\n }\n } else {\n throw new TypeError('URI.removeQuery() accepts an object, string, RegExp as the first parameter');\n }\n };\n URI.hasQuery = function(data, name, value, withinArray) {\n switch (getType(name)) {\n case 'String':\n // Nothing to do here\n break;\n\n case 'RegExp':\n for (var key in data) {\n if (hasOwn.call(data, key)) {\n if (name.test(key) && (value === undefined || URI.hasQuery(data, key, value))) {\n return true;\n }\n }\n }\n\n return false;\n\n case 'Object':\n for (var _key in name) {\n if (hasOwn.call(name, _key)) {\n if (!URI.hasQuery(data, _key, name[_key])) {\n return false;\n }\n }\n }\n\n return true;\n\n default:\n throw new TypeError('URI.hasQuery() accepts a string, regular expression or object as the name parameter');\n }\n\n switch (getType(value)) {\n case 'Undefined':\n // true if exists (but may be empty)\n return name in data; // data[name] !== undefined;\n\n case 'Boolean':\n // true if exists and non-empty\n var _booly = Boolean(isArray(data[name]) ? data[name].length : data[name]);\n return value === _booly;\n\n case 'Function':\n // allow complex comparison\n return !!value(data[name], name, data);\n\n case 'Array':\n if (!isArray(data[name])) {\n return false;\n }\n\n var op = withinArray ? arrayContains : arraysEqual;\n return op(data[name], value);\n\n case 'RegExp':\n if (!isArray(data[name])) {\n return Boolean(data[name] && data[name].match(value));\n }\n\n if (!withinArray) {\n return false;\n }\n\n return arrayContains(data[name], value);\n\n case 'Number':\n value = String(value);\n /* falls through */\n case 'String':\n if (!isArray(data[name])) {\n return data[name] === value;\n }\n\n if (!withinArray) {\n return false;\n }\n\n return arrayContains(data[name], value);\n\n default:\n throw new TypeError('URI.hasQuery() accepts undefined, boolean, string, number, RegExp, Function as the value parameter');\n }\n };\n\n\n URI.joinPaths = function() {\n var input = [];\n var segments = [];\n var nonEmptySegments = 0;\n\n for (var i = 0; i < arguments.length; i++) {\n var url = new URI(arguments[i]);\n input.push(url);\n var _segments = url.segment();\n for (var s = 0; s < _segments.length; s++) {\n if (typeof _segments[s] === 'string') {\n segments.push(_segments[s]);\n }\n\n if (_segments[s]) {\n nonEmptySegments++;\n }\n }\n }\n\n if (!segments.length || !nonEmptySegments) {\n return new URI('');\n }\n\n var uri = new URI('').segment(segments);\n\n if (input[0].path() === '' || input[0].path().slice(0, 1) === '/') {\n uri.path('/' + uri.path());\n }\n\n return uri.normalize();\n };\n\n URI.commonPath = function(one, two) {\n var length = Math.min(one.length, two.length);\n var pos;\n\n // find first non-matching character\n for (pos = 0; pos < length; pos++) {\n if (one.charAt(pos) !== two.charAt(pos)) {\n pos--;\n break;\n }\n }\n\n if (pos < 1) {\n return one.charAt(0) === two.charAt(0) && one.charAt(0) === '/' ? '/' : '';\n }\n\n // revert to last /\n if (one.charAt(pos) !== '/' || two.charAt(pos) !== '/') {\n pos = one.substring(0, pos).lastIndexOf('/');\n }\n\n return one.substring(0, pos + 1);\n };\n\n URI.withinString = function(string, callback, options) {\n options || (options = {});\n var _start = options.start || URI.findUri.start;\n var _end = options.end || URI.findUri.end;\n var _trim = options.trim || URI.findUri.trim;\n var _parens = options.parens || URI.findUri.parens;\n var _attributeOpen = /[a-z0-9-]=[\"']?$/i;\n\n _start.lastIndex = 0;\n while (true) {\n var match = _start.exec(string);\n if (!match) {\n break;\n }\n\n var start = match.index;\n if (options.ignoreHtml) {\n // attribut(e=[\"']?$)\n var attributeOpen = string.slice(Math.max(start - 3, 0), start);\n if (attributeOpen && _attributeOpen.test(attributeOpen)) {\n continue;\n }\n }\n\n var end = start + string.slice(start).search(_end);\n var slice = string.slice(start, end);\n // make sure we include well balanced parens\n var parensEnd = -1;\n while (true) {\n var parensMatch = _parens.exec(slice);\n if (!parensMatch) {\n break;\n }\n\n var parensMatchEnd = parensMatch.index + parensMatch[0].length;\n parensEnd = Math.max(parensEnd, parensMatchEnd);\n }\n\n if (parensEnd > -1) {\n slice = slice.slice(0, parensEnd) + slice.slice(parensEnd).replace(_trim, '');\n } else {\n slice = slice.replace(_trim, '');\n }\n\n if (slice.length <= match[0].length) {\n // the extract only contains the starting marker of a URI,\n // e.g. \"www\" or \"http://\"\n continue;\n }\n\n if (options.ignore && options.ignore.test(slice)) {\n continue;\n }\n\n end = start + slice.length;\n var result = callback(slice, start, end, string);\n if (result === undefined) {\n _start.lastIndex = end;\n continue;\n }\n\n result = String(result);\n string = string.slice(0, start) + result + string.slice(end);\n _start.lastIndex = start + result.length;\n }\n\n _start.lastIndex = 0;\n return string;\n };\n\n URI.ensureValidHostname = function(v) {\n // Theoretically URIs allow percent-encoding in Hostnames (according to RFC 3986)\n // they are not part of DNS and therefore ignored by URI.js\n\n if (v.match(URI.invalid_hostname_characters)) {\n // test punycode\n if (!punycode) {\n throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-] and Punycode.js is not available');\n }\n\n if (punycode.toASCII(v).match(URI.invalid_hostname_characters)) {\n throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n }\n }\n };\n\n // noConflict\n URI.noConflict = function(removeAll) {\n if (removeAll) {\n var unconflicted = {\n URI: this.noConflict()\n };\n\n if (root.URITemplate && typeof root.URITemplate.noConflict === 'function') {\n unconflicted.URITemplate = root.URITemplate.noConflict();\n }\n\n if (root.IPv6 && typeof root.IPv6.noConflict === 'function') {\n unconflicted.IPv6 = root.IPv6.noConflict();\n }\n\n if (root.SecondLevelDomains && typeof root.SecondLevelDomains.noConflict === 'function') {\n unconflicted.SecondLevelDomains = root.SecondLevelDomains.noConflict();\n }\n\n return unconflicted;\n } else if (root.URI === this) {\n root.URI = _URI;\n }\n\n return this;\n };\n\n p.build = function(deferBuild) {\n if (deferBuild === true) {\n this._deferred_build = true;\n } else if (deferBuild === undefined || this._deferred_build) {\n this._string = URI.build(this._parts);\n this._deferred_build = false;\n }\n\n return this;\n };\n\n p.clone = function() {\n return new URI(this);\n };\n\n p.valueOf = p.toString = function() {\n return this.build(false)._string;\n };\n\n\n function generateSimpleAccessor(_part){\n return function(v, build) {\n if (v === undefined) {\n return this._parts[_part] || '';\n } else {\n this._parts[_part] = v || null;\n this.build(!build);\n return this;\n }\n };\n }\n\n function generatePrefixAccessor(_part, _key){\n return function(v, build) {\n if (v === undefined) {\n return this._parts[_part] || '';\n } else {\n if (v !== null) {\n v = v + '';\n if (v.charAt(0) === _key) {\n v = v.substring(1);\n }\n }\n\n this._parts[_part] = v;\n this.build(!build);\n return this;\n }\n };\n }\n\n p.protocol = generateSimpleAccessor('protocol');\n p.username = generateSimpleAccessor('username');\n p.password = generateSimpleAccessor('password');\n p.hostname = generateSimpleAccessor('hostname');\n p.port = generateSimpleAccessor('port');\n p.query = generatePrefixAccessor('query', '?');\n p.fragment = generatePrefixAccessor('fragment', '#');\n\n p.search = function(v, build) {\n var t = this.query(v, build);\n return typeof t === 'string' && t.length ? ('?' + t) : t;\n };\n p.hash = function(v, build) {\n var t = this.fragment(v, build);\n return typeof t === 'string' && t.length ? ('#' + t) : t;\n };\n\n p.pathname = function(v, build) {\n if (v === undefined || v === true) {\n var res = this._parts.path || (this._parts.hostname ? '/' : '');\n return v ? (this._parts.urn ? URI.decodeUrnPath : URI.decodePath)(res) : res;\n } else {\n if (this._parts.urn) {\n this._parts.path = v ? URI.recodeUrnPath(v) : '';\n } else {\n this._parts.path = v ? URI.recodePath(v) : '/';\n }\n this.build(!build);\n return this;\n }\n };\n p.path = p.pathname;\n p.href = function(href, build) {\n var key;\n\n if (href === undefined) {\n return this.toString();\n }\n\n this._string = '';\n this._parts = URI._parts();\n\n var _URI = href instanceof URI;\n var _object = typeof href === 'object' && (href.hostname || href.path || href.pathname);\n if (href.nodeName) {\n var attribute = URI.getDomAttribute(href);\n href = href[attribute] || '';\n _object = false;\n }\n\n // window.location is reported to be an object, but it's not the sort\n // of object we're looking for:\n // * location.protocol ends with a colon\n // * location.query != object.search\n // * location.hash != object.fragment\n // simply serializing the unknown object should do the trick\n // (for location, not for everything...)\n if (!_URI && _object && href.pathname !== undefined) {\n href = href.toString();\n }\n\n if (typeof href === 'string' || href instanceof String) {\n this._parts = URI.parse(String(href), this._parts);\n } else if (_URI || _object) {\n var src = _URI ? href._parts : href;\n for (key in src) {\n if (hasOwn.call(this._parts, key)) {\n this._parts[key] = src[key];\n }\n }\n } else {\n throw new TypeError('invalid input');\n }\n\n this.build(!build);\n return this;\n };\n\n // identification accessors\n p.is = function(what) {\n var ip = false;\n var ip4 = false;\n var ip6 = false;\n var name = false;\n var sld = false;\n var idn = false;\n var punycode = false;\n var relative = !this._parts.urn;\n\n if (this._parts.hostname) {\n relative = false;\n ip4 = URI.ip4_expression.test(this._parts.hostname);\n ip6 = URI.ip6_expression.test(this._parts.hostname);\n ip = ip4 || ip6;\n name = !ip;\n sld = name && SLD && SLD.has(this._parts.hostname);\n idn = name && URI.idn_expression.test(this._parts.hostname);\n punycode = name && URI.punycode_expression.test(this._parts.hostname);\n }\n\n switch (what.toLowerCase()) {\n case 'relative':\n return relative;\n\n case 'absolute':\n return !relative;\n\n // hostname identification\n case 'domain':\n case 'name':\n return name;\n\n case 'sld':\n return sld;\n\n case 'ip':\n return ip;\n\n case 'ip4':\n case 'ipv4':\n case 'inet4':\n return ip4;\n\n case 'ip6':\n case 'ipv6':\n case 'inet6':\n return ip6;\n\n case 'idn':\n return idn;\n\n case 'url':\n return !this._parts.urn;\n\n case 'urn':\n return !!this._parts.urn;\n\n case 'punycode':\n return punycode;\n }\n\n return null;\n };\n\n // component specific input validation\n var _protocol = p.protocol;\n var _port = p.port;\n var _hostname = p.hostname;\n\n p.protocol = function(v, build) {\n if (v !== undefined) {\n if (v) {\n // accept trailing ://\n v = v.replace(/:(\\/\\/)?$/, '');\n\n if (!v.match(URI.protocol_expression)) {\n throw new TypeError('Protocol \"' + v + '\" contains characters other than [A-Z0-9.+-] or doesn\\'t start with [A-Z]');\n }\n }\n }\n return _protocol.call(this, v, build);\n };\n p.scheme = p.protocol;\n p.port = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v !== undefined) {\n if (v === 0) {\n v = null;\n }\n\n if (v) {\n v += '';\n if (v.charAt(0) === ':') {\n v = v.substring(1);\n }\n\n if (v.match(/[^0-9]/)) {\n throw new TypeError('Port \"' + v + '\" contains characters other than [0-9]');\n }\n }\n }\n return _port.call(this, v, build);\n };\n p.hostname = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v !== undefined) {\n var x = {};\n var res = URI.parseHost(v, x);\n if (res !== '/') {\n throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n }\n\n v = x.hostname;\n }\n return _hostname.call(this, v, build);\n };\n\n // compound accessors\n p.origin = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v === undefined) {\n var protocol = this.protocol();\n var authority = this.authority();\n if (!authority) {\n return '';\n }\n\n return (protocol ? protocol + '://' : '') + this.authority();\n } else {\n var origin = URI(v);\n this\n .protocol(origin.protocol())\n .authority(origin.authority())\n .build(!build);\n return this;\n }\n };\n p.host = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v === undefined) {\n return this._parts.hostname ? URI.buildHost(this._parts) : '';\n } else {\n var res = URI.parseHost(v, this._parts);\n if (res !== '/') {\n throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n }\n\n this.build(!build);\n return this;\n }\n };\n p.authority = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v === undefined) {\n return this._parts.hostname ? URI.buildAuthority(this._parts) : '';\n } else {\n var res = URI.parseAuthority(v, this._parts);\n if (res !== '/') {\n throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n }\n\n this.build(!build);\n return this;\n }\n };\n p.userinfo = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v === undefined) {\n var t = URI.buildUserinfo(this._parts);\n return t ? t.substring(0, t.length -1) : t;\n } else {\n if (v[v.length-1] !== '@') {\n v += '@';\n }\n\n URI.parseUserinfo(v, this._parts);\n this.build(!build);\n return this;\n }\n };\n p.resource = function(v, build) {\n var parts;\n\n if (v === undefined) {\n return this.path() + this.search() + this.hash();\n }\n\n parts = URI.parse(v);\n this._parts.path = parts.path;\n this._parts.query = parts.query;\n this._parts.fragment = parts.fragment;\n this.build(!build);\n return this;\n };\n\n // fraction accessors\n p.subdomain = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n // convenience, return \"www\" from \"www.example.org\"\n if (v === undefined) {\n if (!this._parts.hostname || this.is('IP')) {\n return '';\n }\n\n // grab domain and add another segment\n var end = this._parts.hostname.length - this.domain().length - 1;\n return this._parts.hostname.substring(0, end) || '';\n } else {\n var e = this._parts.hostname.length - this.domain().length;\n var sub = this._parts.hostname.substring(0, e);\n var replace = new RegExp('^' + escapeRegEx(sub));\n\n if (v && v.charAt(v.length - 1) !== '.') {\n v += '.';\n }\n\n if (v) {\n URI.ensureValidHostname(v);\n }\n\n this._parts.hostname = this._parts.hostname.replace(replace, v);\n this.build(!build);\n return this;\n }\n };\n p.domain = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (typeof v === 'boolean') {\n build = v;\n v = undefined;\n }\n\n // convenience, return \"example.org\" from \"www.example.org\"\n if (v === undefined) {\n if (!this._parts.hostname || this.is('IP')) {\n return '';\n }\n\n // if hostname consists of 1 or 2 segments, it must be the domain\n var t = this._parts.hostname.match(/\\./g);\n if (t && t.length < 2) {\n return this._parts.hostname;\n }\n\n // grab tld and add another segment\n var end = this._parts.hostname.length - this.tld(build).length - 1;\n end = this._parts.hostname.lastIndexOf('.', end -1) + 1;\n return this._parts.hostname.substring(end) || '';\n } else {\n if (!v) {\n throw new TypeError('cannot set domain empty');\n }\n\n URI.ensureValidHostname(v);\n\n if (!this._parts.hostname || this.is('IP')) {\n this._parts.hostname = v;\n } else {\n var replace = new RegExp(escapeRegEx(this.domain()) + '$');\n this._parts.hostname = this._parts.hostname.replace(replace, v);\n }\n\n this.build(!build);\n return this;\n }\n };\n p.tld = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (typeof v === 'boolean') {\n build = v;\n v = undefined;\n }\n\n // return \"org\" from \"www.example.org\"\n if (v === undefined) {\n if (!this._parts.hostname || this.is('IP')) {\n return '';\n }\n\n var pos = this._parts.hostname.lastIndexOf('.');\n var tld = this._parts.hostname.substring(pos + 1);\n\n if (build !== true && SLD && SLD.list[tld.toLowerCase()]) {\n return SLD.get(this._parts.hostname) || tld;\n }\n\n return tld;\n } else {\n var replace;\n\n if (!v) {\n throw new TypeError('cannot set TLD empty');\n } else if (v.match(/[^a-zA-Z0-9-]/)) {\n if (SLD && SLD.is(v)) {\n replace = new RegExp(escapeRegEx(this.tld()) + '$');\n this._parts.hostname = this._parts.hostname.replace(replace, v);\n } else {\n throw new TypeError('TLD \"' + v + '\" contains characters other than [A-Z0-9]');\n }\n } else if (!this._parts.hostname || this.is('IP')) {\n throw new ReferenceError('cannot set TLD on non-domain host');\n } else {\n replace = new RegExp(escapeRegEx(this.tld()) + '$');\n this._parts.hostname = this._parts.hostname.replace(replace, v);\n }\n\n this.build(!build);\n return this;\n }\n };\n p.directory = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v === undefined || v === true) {\n if (!this._parts.path && !this._parts.hostname) {\n return '';\n }\n\n if (this._parts.path === '/') {\n return '/';\n }\n\n var end = this._parts.path.length - this.filename().length - 1;\n var res = this._parts.path.substring(0, end) || (this._parts.hostname ? '/' : '');\n\n return v ? URI.decodePath(res) : res;\n\n } else {\n var e = this._parts.path.length - this.filename().length;\n var directory = this._parts.path.substring(0, e);\n var replace = new RegExp('^' + escapeRegEx(directory));\n\n // fully qualifier directories begin with a slash\n if (!this.is('relative')) {\n if (!v) {\n v = '/';\n }\n\n if (v.charAt(0) !== '/') {\n v = '/' + v;\n }\n }\n\n // directories always end with a slash\n if (v && v.charAt(v.length - 1) !== '/') {\n v += '/';\n }\n\n v = URI.recodePath(v);\n this._parts.path = this._parts.path.replace(replace, v);\n this.build(!build);\n return this;\n }\n };\n p.filename = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (typeof v !== 'string') {\n if (!this._parts.path || this._parts.path === '/') {\n return '';\n }\n\n var pos = this._parts.path.lastIndexOf('/');\n var res = this._parts.path.substring(pos+1);\n\n return v ? URI.decodePathSegment(res) : res;\n } else {\n var mutatedDirectory = false;\n\n if (v.charAt(0) === '/') {\n v = v.substring(1);\n }\n\n if (v.match(/\\.?\\//)) {\n mutatedDirectory = true;\n }\n\n var replace = new RegExp(escapeRegEx(this.filename()) + '$');\n v = URI.recodePath(v);\n this._parts.path = this._parts.path.replace(replace, v);\n\n if (mutatedDirectory) {\n this.normalizePath(build);\n } else {\n this.build(!build);\n }\n\n return this;\n }\n };\n p.suffix = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v === undefined || v === true) {\n if (!this._parts.path || this._parts.path === '/') {\n return '';\n }\n\n var filename = this.filename();\n var pos = filename.lastIndexOf('.');\n var s, res;\n\n if (pos === -1) {\n return '';\n }\n\n // suffix may only contain alnum characters (yup, I made this up.)\n s = filename.substring(pos+1);\n res = (/^[a-z0-9%]+$/i).test(s) ? s : '';\n return v ? URI.decodePathSegment(res) : res;\n } else {\n if (v.charAt(0) === '.') {\n v = v.substring(1);\n }\n\n var suffix = this.suffix();\n var replace;\n\n if (!suffix) {\n if (!v) {\n return this;\n }\n\n this._parts.path += '.' + URI.recodePath(v);\n } else if (!v) {\n replace = new RegExp(escapeRegEx('.' + suffix) + '$');\n } else {\n replace = new RegExp(escapeRegEx(suffix) + '$');\n }\n\n if (replace) {\n v = URI.recodePath(v);\n this._parts.path = this._parts.path.replace(replace, v);\n }\n\n this.build(!build);\n return this;\n }\n };\n p.segment = function(segment, v, build) {\n var separator = this._parts.urn ? ':' : '/';\n var path = this.path();\n var absolute = path.substring(0, 1) === '/';\n var segments = path.split(separator);\n\n if (segment !== undefined && typeof segment !== 'number') {\n build = v;\n v = segment;\n segment = undefined;\n }\n\n if (segment !== undefined && typeof segment !== 'number') {\n throw new Error('Bad segment \"' + segment + '\", must be 0-based integer');\n }\n\n if (absolute) {\n segments.shift();\n }\n\n if (segment < 0) {\n // allow negative indexes to address from the end\n segment = Math.max(segments.length + segment, 0);\n }\n\n if (v === undefined) {\n /*jshint laxbreak: true */\n return segment === undefined\n ? segments\n : segments[segment];\n /*jshint laxbreak: false */\n } else if (segment === null || segments[segment] === undefined) {\n if (isArray(v)) {\n segments = [];\n // collapse empty elements within array\n for (var i=0, l=v.length; i < l; i++) {\n if (!v[i].length && (!segments.length || !segments[segments.length -1].length)) {\n continue;\n }\n\n if (segments.length && !segments[segments.length -1].length) {\n segments.pop();\n }\n\n segments.push(trimSlashes(v[i]));\n }\n } else if (v || typeof v === 'string') {\n v = trimSlashes(v);\n if (segments[segments.length -1] === '') {\n // empty trailing elements have to be overwritten\n // to prevent results such as /foo//bar\n segments[segments.length -1] = v;\n } else {\n segments.push(v);\n }\n }\n } else {\n if (v) {\n segments[segment] = trimSlashes(v);\n } else {\n segments.splice(segment, 1);\n }\n }\n\n if (absolute) {\n segments.unshift('');\n }\n\n return this.path(segments.join(separator), build);\n };\n p.segmentCoded = function(segment, v, build) {\n var segments, i, l;\n\n if (typeof segment !== 'number') {\n build = v;\n v = segment;\n segment = undefined;\n }\n\n if (v === undefined) {\n segments = this.segment(segment, v, build);\n if (!isArray(segments)) {\n segments = segments !== undefined ? URI.decode(segments) : undefined;\n } else {\n for (i = 0, l = segments.length; i < l; i++) {\n segments[i] = URI.decode(segments[i]);\n }\n }\n\n return segments;\n }\n\n if (!isArray(v)) {\n v = (typeof v === 'string' || v instanceof String) ? URI.encode(v) : v;\n } else {\n for (i = 0, l = v.length; i < l; i++) {\n v[i] = URI.encode(v[i]);\n }\n }\n\n return this.segment(segment, v, build);\n };\n\n // mutating query string\n var q = p.query;\n p.query = function(v, build) {\n if (v === true) {\n return URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n } else if (typeof v === 'function') {\n var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n var result = v.call(this, data);\n this._parts.query = URI.buildQuery(result || data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n this.build(!build);\n return this;\n } else if (v !== undefined && typeof v !== 'string') {\n this._parts.query = URI.buildQuery(v, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n this.build(!build);\n return this;\n } else {\n return q.call(this, v, build);\n }\n };\n p.setQuery = function(name, value, build) {\n var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n\n if (typeof name === 'string' || name instanceof String) {\n data[name] = value !== undefined ? value : null;\n } else if (typeof name === 'object') {\n for (var key in name) {\n if (hasOwn.call(name, key)) {\n data[key] = name[key];\n }\n }\n } else {\n throw new TypeError('URI.addQuery() accepts an object, string as the name parameter');\n }\n\n this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n if (typeof name !== 'string') {\n build = value;\n }\n\n this.build(!build);\n return this;\n };\n p.addQuery = function(name, value, build) {\n var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n URI.addQuery(data, name, value === undefined ? null : value);\n this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n if (typeof name !== 'string') {\n build = value;\n }\n\n this.build(!build);\n return this;\n };\n p.removeQuery = function(name, value, build) {\n var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n URI.removeQuery(data, name, value);\n this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n if (typeof name !== 'string') {\n build = value;\n }\n\n this.build(!build);\n return this;\n };\n p.hasQuery = function(name, value, withinArray) {\n var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n return URI.hasQuery(data, name, value, withinArray);\n };\n p.setSearch = p.setQuery;\n p.addSearch = p.addQuery;\n p.removeSearch = p.removeQuery;\n p.hasSearch = p.hasQuery;\n\n // sanitizing URLs\n p.normalize = function() {\n if (this._parts.urn) {\n return this\n .normalizeProtocol(false)\n .normalizePath(false)\n .normalizeQuery(false)\n .normalizeFragment(false)\n .build();\n }\n\n return this\n .normalizeProtocol(false)\n .normalizeHostname(false)\n .normalizePort(false)\n .normalizePath(false)\n .normalizeQuery(false)\n .normalizeFragment(false)\n .build();\n };\n p.normalizeProtocol = function(build) {\n if (typeof this._parts.protocol === 'string') {\n this._parts.protocol = this._parts.protocol.toLowerCase();\n this.build(!build);\n }\n\n return this;\n };\n p.normalizeHostname = function(build) {\n if (this._parts.hostname) {\n if (this.is('IDN') && punycode) {\n this._parts.hostname = punycode.toASCII(this._parts.hostname);\n } else if (this.is('IPv6') && IPv6) {\n this._parts.hostname = IPv6.best(this._parts.hostname);\n }\n\n this._parts.hostname = this._parts.hostname.toLowerCase();\n this.build(!build);\n }\n\n return this;\n };\n p.normalizePort = function(build) {\n // remove port of it's the protocol's default\n if (typeof this._parts.protocol === 'string' && this._parts.port === URI.defaultPorts[this._parts.protocol]) {\n this._parts.port = null;\n this.build(!build);\n }\n\n return this;\n };\n p.normalizePath = function(build) {\n var _path = this._parts.path;\n if (!_path) {\n return this;\n }\n\n if (this._parts.urn) {\n this._parts.path = URI.recodeUrnPath(this._parts.path);\n this.build(!build);\n return this;\n }\n\n if (this._parts.path === '/') {\n return this;\n }\n\n _path = URI.recodePath(_path);\n\n var _was_relative;\n var _leadingParents = '';\n var _parent, _pos;\n\n // handle relative paths\n if (_path.charAt(0) !== '/') {\n _was_relative = true;\n _path = '/' + _path;\n }\n\n // handle relative files (as opposed to directories)\n if (_path.slice(-3) === '/..' || _path.slice(-2) === '/.') {\n _path += '/';\n }\n\n // resolve simples\n _path = _path\n .replace(/(\\/(\\.\\/)+)|(\\/\\.$)/g, '/')\n .replace(/\\/{2,}/g, '/');\n\n // remember leading parents\n if (_was_relative) {\n _leadingParents = _path.substring(1).match(/^(\\.\\.\\/)+/) || '';\n if (_leadingParents) {\n _leadingParents = _leadingParents[0];\n }\n }\n\n // resolve parents\n while (true) {\n _parent = _path.search(/\\/\\.\\.(\\/|$)/);\n if (_parent === -1) {\n // no more ../ to resolve\n break;\n } else if (_parent === 0) {\n // top level cannot be relative, skip it\n _path = _path.substring(3);\n continue;\n }\n\n _pos = _path.substring(0, _parent).lastIndexOf('/');\n if (_pos === -1) {\n _pos = _parent;\n }\n _path = _path.substring(0, _pos) + _path.substring(_parent + 3);\n }\n\n // revert to relative\n if (_was_relative && this.is('relative')) {\n _path = _leadingParents + _path.substring(1);\n }\n\n this._parts.path = _path;\n this.build(!build);\n return this;\n };\n p.normalizePathname = p.normalizePath;\n p.normalizeQuery = function(build) {\n if (typeof this._parts.query === 'string') {\n if (!this._parts.query.length) {\n this._parts.query = null;\n } else {\n this.query(URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace));\n }\n\n this.build(!build);\n }\n\n return this;\n };\n p.normalizeFragment = function(build) {\n if (!this._parts.fragment) {\n this._parts.fragment = null;\n this.build(!build);\n }\n\n return this;\n };\n p.normalizeSearch = p.normalizeQuery;\n p.normalizeHash = p.normalizeFragment;\n\n p.iso8859 = function() {\n // expect unicode input, iso8859 output\n var e = URI.encode;\n var d = URI.decode;\n\n URI.encode = escape;\n URI.decode = decodeURIComponent;\n try {\n this.normalize();\n } finally {\n URI.encode = e;\n URI.decode = d;\n }\n return this;\n };\n\n p.unicode = function() {\n // expect iso8859 input, unicode output\n var e = URI.encode;\n var d = URI.decode;\n\n URI.encode = strictEncodeURIComponent;\n URI.decode = unescape;\n try {\n this.normalize();\n } finally {\n URI.encode = e;\n URI.decode = d;\n }\n return this;\n };\n\n p.readable = function() {\n var uri = this.clone();\n // removing username, password, because they shouldn't be displayed according to RFC 3986\n uri.username('').password('').normalize();\n var t = '';\n if (uri._parts.protocol) {\n t += uri._parts.protocol + '://';\n }\n\n if (uri._parts.hostname) {\n if (uri.is('punycode') && punycode) {\n t += punycode.toUnicode(uri._parts.hostname);\n if (uri._parts.port) {\n t += ':' + uri._parts.port;\n }\n } else {\n t += uri.host();\n }\n }\n\n if (uri._parts.hostname && uri._parts.path && uri._parts.path.charAt(0) !== '/') {\n t += '/';\n }\n\n t += uri.path(true);\n if (uri._parts.query) {\n var q = '';\n for (var i = 0, qp = uri._parts.query.split('&'), l = qp.length; i < l; i++) {\n var kv = (qp[i] || '').split('=');\n q += '&' + URI.decodeQuery(kv[0], this._parts.escapeQuerySpace)\n .replace(/&/g, '%26');\n\n if (kv[1] !== undefined) {\n q += '=' + URI.decodeQuery(kv[1], this._parts.escapeQuerySpace)\n .replace(/&/g, '%26');\n }\n }\n t += '?' + q.substring(1);\n }\n\n t += URI.decodeQuery(uri.hash(), true);\n return t;\n };\n\n // resolving relative and absolute URLs\n p.absoluteTo = function(base) {\n var resolved = this.clone();\n var properties = ['protocol', 'username', 'password', 'hostname', 'port'];\n var basedir, i, p;\n\n if (this._parts.urn) {\n throw new Error('URNs do not have any generally defined hierarchical components');\n }\n\n if (!(base instanceof URI)) {\n base = new URI(base);\n }\n\n if (resolved._parts.protocol) {\n // Directly returns even if this._parts.hostname is empty.\n return resolved;\n } else {\n resolved._parts.protocol = base._parts.protocol;\n }\n\n if (this._parts.hostname) {\n return resolved;\n }\n\n for (i = 0; (p = properties[i]); i++) {\n resolved._parts[p] = base._parts[p];\n }\n\n if (!resolved._parts.path) {\n resolved._parts.path = base._parts.path;\n if (!resolved._parts.query) {\n resolved._parts.query = base._parts.query;\n }\n } else {\n if (resolved._parts.path.substring(-2) === '..') {\n resolved._parts.path += '/';\n }\n\n if (resolved.path().charAt(0) !== '/') {\n basedir = base.directory();\n basedir = basedir ? basedir : base.path().indexOf('/') === 0 ? '/' : '';\n resolved._parts.path = (basedir ? (basedir + '/') : '') + resolved._parts.path;\n resolved.normalizePath();\n }\n }\n\n resolved.build();\n return resolved;\n };\n p.relativeTo = function(base) {\n var relative = this.clone().normalize();\n var relativeParts, baseParts, common, relativePath, basePath;\n\n if (relative._parts.urn) {\n throw new Error('URNs do not have any generally defined hierarchical components');\n }\n\n base = new URI(base).normalize();\n relativeParts = relative._parts;\n baseParts = base._parts;\n relativePath = relative.path();\n basePath = base.path();\n\n if (relativePath.charAt(0) !== '/') {\n throw new Error('URI is already relative');\n }\n\n if (basePath.charAt(0) !== '/') {\n throw new Error('Cannot calculate a URI relative to another relative URI');\n }\n\n if (relativeParts.protocol === baseParts.protocol) {\n relativeParts.protocol = null;\n }\n\n if (relativeParts.username !== baseParts.username || relativeParts.password !== baseParts.password) {\n return relative.build();\n }\n\n if (relativeParts.protocol !== null || relativeParts.username !== null || relativeParts.password !== null) {\n return relative.build();\n }\n\n if (relativeParts.hostname === baseParts.hostname && relativeParts.port === baseParts.port) {\n relativeParts.hostname = null;\n relativeParts.port = null;\n } else {\n return relative.build();\n }\n\n if (relativePath === basePath) {\n relativeParts.path = '';\n return relative.build();\n }\n\n // determine common sub path\n common = URI.commonPath(relativePath, basePath);\n\n // If the paths have nothing in common, return a relative URL with the absolute path.\n if (!common) {\n return relative.build();\n }\n\n var parents = baseParts.path\n .substring(common.length)\n .replace(/[^\\/]*$/, '')\n .replace(/.*?\\//g, '../');\n\n relativeParts.path = (parents + relativeParts.path.substring(common.length)) || './';\n\n return relative.build();\n };\n\n // comparing URIs\n p.equals = function(uri) {\n var one = this.clone();\n var two = new URI(uri);\n var one_map = {};\n var two_map = {};\n var checked = {};\n var one_query, two_query, key;\n\n one.normalize();\n two.normalize();\n\n // exact match\n if (one.toString() === two.toString()) {\n return true;\n }\n\n // extract query string\n one_query = one.query();\n two_query = two.query();\n one.query('');\n two.query('');\n\n // definitely not equal if not even non-query parts match\n if (one.toString() !== two.toString()) {\n return false;\n }\n\n // query parameters have the same length, even if they're permuted\n if (one_query.length !== two_query.length) {\n return false;\n }\n\n one_map = URI.parseQuery(one_query, this._parts.escapeQuerySpace);\n two_map = URI.parseQuery(two_query, this._parts.escapeQuerySpace);\n\n for (key in one_map) {\n if (hasOwn.call(one_map, key)) {\n if (!isArray(one_map[key])) {\n if (one_map[key] !== two_map[key]) {\n return false;\n }\n } else if (!arraysEqual(one_map[key], two_map[key])) {\n return false;\n }\n\n checked[key] = true;\n }\n }\n\n for (key in two_map) {\n if (hasOwn.call(two_map, key)) {\n if (!checked[key]) {\n // two contains a parameter not present in one\n return false;\n }\n }\n }\n\n return true;\n };\n\n // state\n p.duplicateQueryParameters = function(v) {\n this._parts.duplicateQueryParameters = !!v;\n return this;\n };\n\n p.escapeQuerySpace = function(v) {\n this._parts.escapeQuerySpace = !!v;\n return this;\n };\n\n return URI;\n}));\n"],"sourceRoot":""}