%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/catalog.set.constructor/templates/bootstrap_v4/ |
| Current File : /home/bitrix/www/bitrix/components/bitrix/catalog.set.constructor/templates/bootstrap_v4/script.js |
BX.namespace("BX.Catalog.SetConstructor");
BX.Catalog.SetConstructor = (function()
{
var SetConstructor = function(params)
{
this.numSliderItems = params.numSliderItems || 0;
this.numSetItems = params.numSetItems || 0;
this.jsId = params.jsId || "";
this.ajaxPath = params.ajaxPath || "";
this.currency = params.currency || "";
this.lid = params.lid || "";
this.iblockId = params.iblockId || "";
this.basketUrl = params.basketUrl || "";
this.setIds = params.setIds || null;
this.offersCartProps = params.offersCartProps || null;
this.itemsRatio = params.itemsRatio || null;
this.noFotoSrc = params.noFotoSrc || "";
this.messages = params.messages;
this.canBuy = params.canBuy;
this.mainElementPrice = params.mainElementPrice || 0;
this.mainElementOldPrice = params.mainElementOldPrice || 0;
this.mainElementDiffPrice = params.mainElementDiffPrice || 0;
this.mainElementBasketQuantity = params.mainElementBasketQuantity || 1;
this.parentCont = BX(params.parentContId) || null;
this.sliderParentCont = this.parentCont.querySelector("[data-role='slider-parent-container']");
this.sliderItemsCont = this.parentCont.querySelector("[data-role='set-other-items']");
this.setItemsCont = this.parentCont.querySelector("[data-role='set-items']");
this.setPriceCont = this.parentCont.querySelector("[data-role='set-price']");
this.setPriceDuplicateCont = this.parentCont.querySelector("[data-role='set-price-duplicate']");
this.setOldPriceCont = this.parentCont.querySelector("[data-role='set-old-price']");
this.setOldPriceRow = this.setOldPriceCont.parentNode.parentNode;
this.setDiffPriceCont = this.parentCont.querySelector("[data-role='set-diff-price']");
this.setDiffPriceRow = this.setDiffPriceCont.parentNode.parentNode;
this.notAvailProduct = this.sliderItemsCont.querySelector("[data-not-avail='yes']");
this.emptySetMessage = this.parentCont.querySelector("[data-set-message='empty-set']");
BX.bindDelegate(this.setItemsCont, 'click', { 'attribute': 'data-role' }, BX.proxy(this.deleteFromSet, this));
BX.bindDelegate(this.sliderItemsCont, 'click', { 'attribute': 'data-role' }, BX.proxy(this.addToSet, this));
var buyButton = this.parentCont.querySelector("[data-role='set-buy-btn']");
if (this.canBuy)
{
BX.show(buyButton);
BX.bind(buyButton, "click", BX.proxy(this.addToBasket, this));
}
else
{
BX.hide(buyButton);
}
this.generateSliderStyles();
};
SetConstructor.prototype.generateSliderStyles = function()
{
var styleNode = BX.create("style", {
html: ".catalog-set-constructor-slider-slide-"+this.jsId+"{width: " + this.numSliderItems*25 + "%;}"+
".catalog-set-constructor-slider-item-container-"+this.jsId+"{width: " + (100/this.numSliderItems) + "%;}"+
"@media (max-width:767px){"+
".catalog-set-constructor-slider-slide-"+this.jsId+"{width: " + this.numSliderItems*20*3 + "%;}}",
attrs: {
id: "bx-set-const-style-" + this.jsId
}});
if (BX("bx-set-const-style-" + this.jsId))
{
BX.remove(BX("bx-set-const-style-" + this.jsId));
}
this.parentCont.appendChild(styleNode);
};
SetConstructor.prototype.deleteFromSet = function()
{
var target = BX.proxy_context,
item,
itemId,
itemName,
itemUrl,
itemImg,
itemPrintPrice,
itemPrice,
itemPrintOldPrice,
itemOldPrice,
itemDiffPrice,
itemMeasure,
itemBasketQuantity,
i,
l,
newSliderNode;
if (target && target.hasAttribute('data-role') && target.getAttribute('data-role') == 'set-delete-btn')
{
item = target.parentNode.parentNode;
itemId = item.getAttribute("data-id");
itemName = item.getAttribute("data-name");
itemUrl = item.getAttribute("data-url");
itemImg = item.getAttribute("data-img");
itemPrintPrice = item.getAttribute("data-print-price");
itemPrice = item.getAttribute("data-price");
itemPrintOldPrice = item.getAttribute("data-print-old-price");
itemOldPrice = item.getAttribute("data-old-price");
itemDiffPrice = item.getAttribute("data-diff-price");
itemMeasure = item.getAttribute("data-measure");
itemBasketQuantity = item.getAttribute("data-quantity");
newSliderNode = BX.create("div", {
attrs: {
className: "catalog-set-constructor-slider-item-container catalog-set-constructor-slider-item-container-" + this.jsId,
"data-id": itemId,
"data-img": itemImg ? itemImg : "",
"data-url": itemUrl,
"data-name": itemName,
"data-print-price": itemPrintPrice,
"data-print-old-price": itemPrintOldPrice,
"data-price": itemPrice,
"data-old-price": itemOldPrice,
"data-diff-price": itemDiffPrice,
"data-measure": itemMeasure,
"data-quantity": itemBasketQuantity
},
children: [
BX.create("div", {
attrs: {
className: "catalog-set-constructor-slider-item"
},
children: [
BX.create("div", {
attrs: {
className: "catalog-set-constructor-slider-item-img"
},
children: [
BX.create("div", {
attrs: {
className: "catalog-set-constructor-slider-item-img-container"
},
children: [
BX.create("img", {
attrs: {
src: itemImg ? itemImg : this.noFotoSrc,
className: "img-responsive"
}
})
]
})
]
}),
BX.create("div", {
attrs: {
className: "catalog-set-constructor-slider-item-title"
},
children: [
BX.create("a", {
attrs: {
href: itemUrl
},
html: itemName
})
]
}),
BX.create("div", {
attrs: {
className: "catalog-set-constructor-slider-item-price"
},
children: [
BX.create("div", {
attrs: {
className: "catalog-set-constructor-slider-item-price-new"
},
html: itemPrintPrice + ' * ' + itemBasketQuantity + itemMeasure
}),
BX.create("div", {
attrs: {
className: "catalog-set-constructor-slider-item-price-old"
},
html: itemPrice != itemOldPrice ? itemPrintOldPrice : ""
})
]
}),
BX.create("div", {
attrs: {
className: "catalog-set-constructor-slider-item-add-btn"
},
children: [
BX.create("a", {
attrs: {
className: "btn btn-default btn-sm",
"data-role": "set-add-btn"
},
html: this.messages.ADD_BUTTON
})
]
})
]
}
)]
});
if (!!this.notAvailProduct)
this.sliderItemsCont.insertBefore(newSliderNode, this.notAvailProduct);
else
this.sliderItemsCont.appendChild(newSliderNode);
this.numSliderItems++;
this.numSetItems--;
this.generateSliderStyles();
BX.remove(item);
for (i = 0, l = this.setIds.length; i < l; i++)
{
if (this.setIds[i] == itemId)
this.setIds.splice(i, 1);
}
this.recountPrice();
if (this.numSetItems <= 0 && !!this.emptySetMessage)
BX.adjust(this.emptySetMessage, { style: { display: 'inline-block' }, html: this.messages.EMPTY_SET });
if (this.numSliderItems > 0 && this.sliderParentCont)
{
this.sliderParentCont.style.display = '';
}
}
};
SetConstructor.prototype.addToSet = function()
{
var target = BX.proxy_context,
item,
itemId,
itemName,
itemUrl,
itemImg,
itemPrintPrice,
itemPrice,
itemPrintOldPrice,
itemOldPrice,
itemDiffPrice,
itemMeasure,
itemBasketQuantity,
newSetNode;
if (!!target && target.hasAttribute('data-role') && target.getAttribute('data-role') == 'set-add-btn')
{
item = target.parentNode.parentNode.parentNode;
itemId = item.getAttribute("data-id");
itemName = item.getAttribute("data-name");
itemUrl = item.getAttribute("data-url");
itemImg = item.getAttribute("data-img");
itemPrintPrice = item.getAttribute("data-print-price");
itemPrice = item.getAttribute("data-price");
itemPrintOldPrice = item.getAttribute("data-print-old-price");
itemOldPrice = item.getAttribute("data-old-price");
itemDiffPrice = item.getAttribute("data-diff-price");
itemMeasure = item.getAttribute("data-measure");
itemBasketQuantity = item.getAttribute("data-quantity");
newSetNode = BX.create("tr", {
attrs: {
"data-id": itemId,
"data-img": itemImg ? itemImg : "",
"data-url": itemUrl,
"data-name": itemName,
"data-print-price": itemPrintPrice,
"data-print-old-price": itemPrintOldPrice,
"data-price": itemPrice,
"data-old-price": itemOldPrice,
"data-diff-price": itemDiffPrice,
"data-measure": itemMeasure,
"data-quantity": itemBasketQuantity
},
children: [
BX.create("td", {
attrs: {
className: "catalog-set-constructor-items-list-table-cell-img"
},
children: [
BX.create("img", {
attrs: {
src: itemImg ? itemImg : this.noFotoSrc,
className: "img-responsive"
}
})
]
}),
BX.create("td", {
attrs: {
className: "catalog-set-constructor-items-list-table-cell-name"
},
children: [
BX.create("a", {
attrs: {
href: itemUrl
},
html: itemName
})
]
}),
BX.create("td", {
attrs: {
className: "catalog-set-constructor-items-list-table-cell-price"
},
children: [
BX.create("span", {
attrs: {
className: "catalog-set-constructor-product-new-price"
},
html: itemPrintPrice + ' * ' + itemBasketQuantity + itemMeasure
}),
BX.create("br"),
BX.create("span", {
attrs: {
className: "catalog-set-constructor-product-old-price"
},
html: itemPrice != itemOldPrice ? itemPrintOldPrice : ""
})
]
}),
BX.create("td", {
attrs: {
className: "catalog-set-constructor-items-list-table-cell-del"
},
children: [
BX.create("div", {
attrs: {
className: "catalog-set-constructor-items-list-table-cell-delete-btn",
"data-role": "set-delete-btn"
}
})
]
})
]
}
);
this.setItemsCont.appendChild(newSetNode);
this.numSliderItems--;
this.numSetItems++;
this.generateSliderStyles();
BX.remove(item);
this.setIds.push(itemId);
this.recountPrice();
if (this.numSetItems > 0 && !!this.emptySetMessage)
BX.adjust(this.emptySetMessage, { style: { display: 'none' }, html: '' });
if (this.numSliderItems <= 0 && this.sliderParentCont)
{
this.sliderParentCont.style.display = 'none';
}
}
};
SetConstructor.prototype.recountPrice = function()
{
var sumPrice = this.mainElementPrice*this.mainElementBasketQuantity,
sumOldPrice = this.mainElementOldPrice*this.mainElementBasketQuantity,
sumDiffDiscountPrice = this.mainElementDiffPrice*this.mainElementBasketQuantity,
setItems = BX.findChildren(this.setItemsCont, {tagName: "tr"}, true),
i,
l,
ratio;
if (setItems)
{
for(i = 0, l = setItems.length; i<l; i++)
{
ratio = Number(setItems[i].getAttribute("data-quantity")) || 1;
sumPrice += Number(setItems[i].getAttribute("data-price"))*ratio;
sumOldPrice += Number(setItems[i].getAttribute("data-old-price"))*ratio;
sumDiffDiscountPrice += Number(setItems[i].getAttribute("data-diff-price"))*ratio;
}
}
this.setPriceCont.innerHTML = BX.Currency.currencyFormat(sumPrice, this.currency, true);
this.setPriceDuplicateCont.innerHTML = BX.Currency.currencyFormat(sumPrice, this.currency, true);
if (Math.floor(sumDiffDiscountPrice*100) > 0)
{
this.setOldPriceCont.innerHTML = BX.Currency.currencyFormat(sumOldPrice, this.currency, true);
this.setDiffPriceCont.innerHTML = BX.Currency.currencyFormat(sumDiffDiscountPrice, this.currency, true);
BX.style(this.setOldPriceRow, 'display', 'table-row');
BX.style(this.setDiffPriceRow, 'display', 'table-row');
}
else
{
BX.style(this.setOldPriceRow, 'display', 'none');
BX.style(this.setDiffPriceRow, 'display', 'none');
this.setOldPriceCont.innerHTML = '';
this.setDiffPriceCont.innerHTML = '';
}
};
SetConstructor.prototype.addToBasket = function()
{
var target = BX.proxy_context;
BX.showWait(target.parentNode);
BX.ajax.post(
this.ajaxPath,
{
sessid: BX.bitrix_sessid(),
action: 'catalogSetAdd2Basket',
set_ids: this.setIds,
lid: this.lid,
iblockId: this.iblockId,
setOffersCartProps: this.offersCartProps,
itemsRatio: this.itemsRatio
},
BX.proxy(function(result)
{
BX.closeWait();
document.location.href = this.basketUrl;
}, this)
);
};
return SetConstructor;
})();