{"version":3,"file":"jquery.shopping_list_updater.min.js","sources":["jquery.shopping_list_updater.js"],"sourcesContent":["(function ($, _, w) {\r\n 'use strict';\r\n\r\n let $addToCollectionDialog = null;\r\n const template = '
';\r\n let systemUrls, labels;\r\n let isContextLoaded = false;\r\n let isAnonymous;\r\n\r\n w.showAddToCollectionPopup = function (products) {\r\n if (typeof (products) === 'undefined') {\r\n w.PubSub.publish('notification.warning', labels.noProductsFound);\r\n } else {\r\n if (!isContextLoaded) {\r\n $.when(getContext())\r\n .done(function (ctx) {\r\n systemUrls = ctx.urls;\r\n labels = ctx.labels;\r\n isContextLoaded = true;\r\n isAnonymous = ctx.isAnonymous;\r\n\r\n let $shoppingListSelector;\r\n let $newShoppingListInput;\r\n\r\n if (isAnonymous === true) {\r\n showLoginRequiredWarning();\r\n } else {\r\n const dialogHtml = _.template(template, ctx);\r\n $addToCollectionDialog = $(dialogHtml).dialog({\r\n resizable: false,\r\n modal: true,\r\n autoOpen: false,\r\n width: 400,\r\n buttons: [\r\n {\r\n 'class': 'btn btn-default',\r\n text: labels.close,\r\n click: function () {\r\n $(this).dialog('close');\r\n }\r\n }\r\n ]\r\n });\r\n\r\n $shoppingListSelector = $addToCollectionDialog.find('.js-existing-shoppinglist-selector');\r\n $shoppingListSelector.keyup(function (e) {\r\n if (e.keyCode === 13) {\r\n _handleAddProductToExistingShoppingList();\r\n }\r\n });\r\n $newShoppingListInput = $addToCollectionDialog.find('.js-new-shoppinglist-name');\r\n $newShoppingListInput.keyup(function (e) {\r\n if (e.keyCode === 13) {\r\n _handleAddProductToNewShoppingList();\r\n }\r\n });\r\n\r\n const $addButton = $addToCollectionDialog.find(\"[data-action='addtoexistingshoppinglist']\");\r\n if (ctx.shoppingLists.length <= 0) {\r\n $addButton.prop('disabled', true);\r\n $addButton.prop('title', labels.emptyShoppingLists);\r\n\r\n $shoppingListSelector.prop('disabled', true);\r\n }\r\n\r\n $addToCollectionDialog.find('.js-action-button').click(function (evt) {\r\n evt.preventDefault();\r\n\r\n const $clickTarget = $(evt.target);\r\n const action = $clickTarget.data('action');\r\n\r\n switch (action) {\r\n case 'addtoexistingshoppinglist':\r\n _handleAddProductToExistingShoppingList();\r\n break;\r\n case 'addtonewshoppinglist':\r\n _handleAddProductToNewShoppingList();\r\n break;\r\n }\r\n });\r\n\r\n $addToCollectionDialog.data('products', products);\r\n $addToCollectionDialog.dialog('open');\r\n }\r\n\r\n function _handleAddProductToExistingShoppingList() {\r\n const productsToAdd = $addToCollectionDialog.data('products');\r\n const selectedShoppingListId = $shoppingListSelector.val();\r\n\r\n blockUI();\r\n $.when(w.PublicEStore.addToShoppingList(selectedShoppingListId, productsToAdd))\r\n .always(unblockUI)\r\n .done(function () {\r\n w.PubSub.publish('notification.success', labels.productAddedToShoppingList);\r\n $addToCollectionDialog.dialog('close');\r\n })\r\n .fail(errorHandler);\r\n }\r\n\r\n function _handleAddProductToNewShoppingList() {\r\n const productsToAdd = $addToCollectionDialog.data('products');\r\n\r\n const newShoppingListName = $newShoppingListInput.val();\r\n if (newShoppingListName) {\r\n blockUI();\r\n $.when(w.PublicEStore.addShoppingList(newShoppingListName, '', productsToAdd))\r\n .always(unblockUI)\r\n .done(function (dataContract) {\r\n const newShoppingList = dataContract.result;\r\n // Add to selector and select\r\n const $newShoppingListOption = $('',\r\n { 'value': newShoppingList.shoppingListID, 'text': newShoppingList.name });\r\n $shoppingListSelector.append($newShoppingListOption);\r\n $shoppingListSelector.val(newShoppingList.shoppingListID).change();\r\n\r\n // Cleanup\r\n $newShoppingListInput.val('');\r\n\r\n // Notify\r\n w.PubSub.publish('notification.success', labels.productAddedToShoppingList);\r\n $addToCollectionDialog.dialog('close');\r\n })\r\n .fail(errorHandler);\r\n } else {\r\n w.PubSub.publish('notification.warning', labels.shoppingListNameIsEmpty);\r\n }\r\n }\r\n })\r\n .fail(errorHandler);\r\n } else if (isAnonymous === true) {\r\n showLoginRequiredWarning();\r\n } else if ($addToCollectionDialog) {\r\n $addToCollectionDialog.data('products', products);\r\n $addToCollectionDialog.dialog('open');\r\n }\r\n }\r\n\r\n function getContext() {\r\n return $.get(w.R + 'handlers/public/estoredata.ashx?a=GetAddToShoppingListContext');\r\n }\r\n\r\n function blockUI() {\r\n if (typeof ($.blockUI) === 'function') {\r\n $addToCollectionDialog.block({ message: null });\r\n }\r\n }\r\n\r\n function unblockUI() {\r\n if (typeof ($.unblockUI) === 'function') {\r\n $addToCollectionDialog.unblock();\r\n }\r\n }\r\n\r\n function errorHandler(error) {\r\n let message;\r\n\r\n if (typeof (error) === 'string') {\r\n message = error;\r\n } else {\r\n message = typeof (error) !== 'undefined' ? (error.message ? error.message : error.statusText) : 'Unknown error';\r\n }\r\n\r\n if (typeof (error.status) !== 'undefined' && error.status.toLowerCase() === 'unauthorized') {\r\n showLoginRequiredWarning();\r\n } else {\r\n w.PubSub.publish('notification.error', message);\r\n }\r\n }\r\n\r\n function showLoginRequiredWarning() {\r\n const loginUrl = typeof (systemUrls) !== 'undefined' ? $.setQueryStringParam(systemUrls.loginUrl, 'ret', encodeURIComponent(location.pathname)) : '#';\r\n w.PubSub.publish('notification.warning',\r\n {\r\n text: labels.availableToRegisteredOnly + '