var mamezi_box_config = "eyJhcHBsaWNhdGlvbl9uYW1lIjoiYm94eSIsInNob3BfaWQiOiIyOTM1NWY4ZmY5NDNmMjkwZjA2NjBjNDEzNDY3MmZiNTU2NDIzMGQ1IiwicHJpY2UiOiJiIn0="; mamezi_box_config = atob(mamezi_box_config) mamezi_box_config = JSON.parse(mamezi_box_config); function BoxProducts(){ this.regularOptions = ["id", "position"]; this.proOptions = ["show", "search", "category", "limit", "slider", "autoScrolling", "getFromMainCategory", "category_id", "onlyAvailable"]; this.priceTypes = ["b", "bn", "n", "brak"]; this.regularName = "boxy"; this.proName = "boxy_pro"; this.apiLimit = 50; this.options = {}; this.app_config = {}; this.productList = []; this.downloaded = 0; this.template = ""; this._done_function_callback = function () { }; var self = this; this.init = function (options, app_config, doneFunction, dataDefer) { self.app_config = app_config; self.options = parseOptions(options); if (!self.options) return false; self._done_function_callback = doneFunction; self.dataDefer = dataDefer; getProductList(self.options); }; function buildProductList(data) { self.downloaded += data.list.length; for (var i = 0; i < data.list.length; i++) { for (var j = 0; j < self.priceTypes.length; j++) { var val = false; if(self.app_config.price === self.priceTypes[j]){ val = true; } data.list[i][self.priceTypes[j]] = val; } if(self.app_config.price === "b" || self.app_config.price === "bn") data.list[i]["b_or_bn"] = true; else data.list[i]["b_or_bn"] = false; if (returnParam(self.options.slider) == "true") data.list[i]["slider"] = true; else data.list[i]["slider"] = false; } self.productList = self.productList.concat(data.list); } function makeProductRequest(requestName, params, page) { page = page || 1; limit = self.apiLimit || 50; var faParams = Object.assign({ "urlParams": '?page=' + page + '&limit=' + limit }, params); frontAPI[requestName](function (data) { buildProductList(data); if (returnParam(self.options.limit) && self.downloaded < returnParam(self.options.limit) && self.downloaded < data.count || returnParam(self.options.limit) == null && page < data.pages) { makeProductRequest(requestName, params, ++page); } else { var tem = $.get('https://appstore.mamezi.pl/dev_boxy_produktowe/productTemplate.html', function (template) { self.template = template; }); var scr = $.get("https://appstore.mamezi.pl/dev_boxy_produktowe/mustache.min.js", function () { }); $.when(tem, scr).done(function () { generateHTML(); }) } }, faParams); } function getProductList(options) { var requestName = ""; var params = {}; if (options.id !== undefined) { requestName = "getProducts"; var ids = options["id"].split(","); var productsId = []; for (var i = 0; i < ids.length; i++) { if (!isNaN(parseInt(ids[i].trim()))) { productsId.push(ids[i].trim()); } } if (productsId.length === 0) return false; params = { "ids": productsId }; makeProductRequest(requestName, params, null); } else if (options.category_id !== undefined) { requestName = "getProductsFromCategory"; var category_id = options.category_id; if (options.getFromMainCategory !== undefined && options.getFromMainCategory == "true") { frontAPI.getCategories(function (categoryTree) { for (i = 0; i < categoryTree.length; i += 1) { if (findNode(category_id, categoryTree[i]) !== false && categoryTree[i].id != undefined) { category_id = categoryTree[i].id; } } params = { "id": category_id }; makeProductRequest(requestName, params, null); }, {}); } else { params = { "id": category_id }; makeProductRequest(requestName, params, null); } } else if (options.show !== undefined) { var show = options.show; switch (show) { case "promotion": requestName = "getPromotionProducts"; break; case "new": requestName = "getNewProducts"; break; case "potd": requestName = "getPotdProducts"; break; case "main": requestName = "getMainProducts"; break; default: console.warn("Boxy produktowe: Nieznany parametr show = " + options.show); } makeProductRequest(requestName, params, null); } else if (options.search !== undefined) { requestName = "search"; params = { "search": options.search }; makeProductRequest(requestName, params, null); } } function findNode(id, currentNode) { var i, currentChild, result; if (id == currentNode.id) { return currentNode; } else { for (i = 0; i < currentNode.children.length; i++) { currentChild = currentNode.children[i]; result = findNode(id, currentChild); if (result !== false) { return result; } } return false; } } function returnParam(param) { if (typeof param !== undefined) return param; return null; } function parseOptions(options) { var newOptions = {}; var params = []; if(self.app_config.application_name === self.proName) params = self.regularOptions.concat(self.proOptions); else if(self.app_config.application_name === self.regularName) params = self.regularOptions; else params = []; for (var i = 0; i < Object.keys(options).length; i++) { if (params.indexOf(Object.keys(options)[i]) >= 0) { newOptions[Object.keys(options)[i]] = options[Object.keys(options)[i]]; } else { if (self.proOptions.indexOf(Object.keys(options)[i]) >= 0) { console.warn("Boxy produktowe: Parametr '" + Object.keys(options)[i] + "' dostępny w wersji PRO aplikacji https://www.shoper.pl/aplikacje/boxy-produktowe-pro/"); } else { console.warn("Boxy produktowe: Nieznany parametr '" + Object.keys(options)[i] + "'"); } } } if (Object.keys(newOptions).length === 0) { console.warn("Boxy produktowe: Nie podano wymaganych parametrów w Shortcode lub wystąpił błąd w składni, boxy nie inicjalizują się"); return false; } else return newOptions; } function generateHTML() { var products = self.productList; var pr = self.app_config.price; var orderedProducts = []; //only available param if (returnParam(self.options.onlyAvailable) == "true") { var tempProd = []; for (var j = 0; j < products.length; j++) { if (products[j].can_buy) tempProd.push(products[j]); } self.productList = tempProd; products = self.productList; } //limit if (returnParam(self.options.limit)) { self.productList = self.productList.slice(0, returnParam(self.options.limit)) } // do wyświetlania produktów w odpowiedznij kolejności if (returnParam(self.options.id)) { var pushed = []; var productsId = returnParam(self.options.id).split(","); for (var i = 0; i < productsId.length; i++) { for (var j = 0; j < self.productList.length; j++) { if (productsId[i] == self.productList[j].id && pushed.indexOf(self.productList[j].id) === -1) { orderedProducts.push(self.productList[j]); pushed.push(self.productList[j].id) break; } } } } else { orderedProducts = self.productList; } var header = ""; products = orderedProducts; if (products.length === 0) { header = ""; var footer = ""; } if (products.length === 1) { var product = products[0]; let resultOne = ""; if (returnParam(self.options.position) === "right") { resultOne += "