Spade
Mini Shell
| Directory:~$ /proc/self/root/home/lmsyaran/public_html/media/com_phocacart/js/phoca/ |
| [Home] [System Details] [Kill Me] |
/*
* jQuery Phoca Attribute
* https://www.phoca.cz
*
* Copyright (C) 2016 Jan Pavelka www.phoca.cz
*
* Licensed under the MIT license
*/
/* SELECT BOXES */
/* Changes Selects to color or image attributes*/
function phChangeAttributeType(typeView) {
typeView = typeof typeView !== 'undefined' ? '.phj' +
typeView : '';
var phProductAttribute = typeView + '.phjProductAttribute';//
Find all select boxes which should be transformed to color or image
var phCleanAttribute = typeView + '.phjCleanAttribute';// Clean
previously transformed select boxes in case of ajax reload
jQuery(phCleanAttribute).remove();
jQuery(phProductAttribute).each(function() {
var phClass = '';
var phClassId = '';
var phSelectNameId = '#phItemAttribute' +
jQuery(this).data('attribute-id-name');
var phSelectNameIdT = '#phItemHiddenAttribute' +
jQuery(this).data('attribute-id-name');
var phSelectNameIdB = '#phItemBoxAttribute' +
jQuery(this).data('attribute-id-name');
var phType = jQuery(this).data('attribute-type');// Type of
attribute
var phTypeView = jQuery(this).data('type-view');// Type of
view, e.g. ItemQuickView is reloaded by ajax
var phTypeIcon = jQuery(this).data('type-icon');// Type of
used icon library
var phRequired = jQuery(this).data('required');// Type of
used icon library
if (phType == 3) {
phClass = 'phSelectBoxImage';// Image
} else if (phType == 2) {
phClass = 'phSelectBoxButton';// Color
}
// Transform only attributes which are select box image - 3 or select box
color - 2
if (phClass != '') {
phClassId = phSelectNameIdT + ' .' + phClass;
var phSelectName = jQuery(phSelectNameId).attr('name');
var phHiddenEl = jQuery('<input type="hidden"
name="'+ phSelectName +'">');
phHiddenEl.val(jQuery(phSelectNameId).val());
phHiddenEl.insertAfter(jQuery(phSelectNameId));
// ON START DISPLAY OR HIDE
// jQuery(phSelectNameId).hide();
// jQuery(phSelectNameIdB).hide();
// Cannot be hidden because of html5 required field and its message
// Hide select box even its chosen alternative
jQuery(phSelectNameIdT).css( "display", "block");
jQuery(phSelectNameIdB).css( {"display": "visible",
'position': 'absolute', 'clip':
'rect(0,0,0,0)' });
jQuery(phSelectNameIdB).addClass('phj' + phTypeView + '
phjCleanAttribute');
// ON START TRANSFORM
jQuery(phSelectNameId + ' option').each(function() {
/* Do not display default value (empty value), can be set by clicking
back from other value */
if (jQuery(this).val() != '') {
if (phType == 3) {
// Image
var phSBtn = jQuery('<div class="'+ phClass +'
'+ phTypeIcon +'" data-value="'+
jQuery(this).val() +'" data-value-alias="'+
jQuery(this).data('value-alias') +'"
title="'+ jQuery(this).text() +'"><img
src="'+ jQuery(this).data('image') +'"
alt="'+ jQuery(this).text() +'"
/></div>');
} else if (phType == 2) {
// Color
var phSBtn = jQuery('<div class="'+ phClass +'
'+ phTypeIcon +'" style="background-color:' +
jQuery(this).data('color') +'" data-value="'+
jQuery(this).val() +'" data-value-alias="'+
jQuery(this).data('value-alias') +'"
title="'+ jQuery(this).text() +'">'+
' ' +'</div>');
}
if(jQuery(this).is(':selected')) {
phSBtn.addClass('on');
}
jQuery(phSelectNameIdT).append(phSBtn);
}
});
// Change on Click event
jQuery(phClassId).on('click', function(e) {
e.preventDefault();// Bootstrap modal (close and open again duplicates
events)
var isActive = jQuery(this).hasClass('on');
if (isActive) {
if (phRequired == 1) {
e.preventDefault();// Active item cannot be unselected when the
select box is required
return false;
}
jQuery(this).removeClass('on');
jQuery('input[name="'+ phSelectName
+'"]').val('');
jQuery(phSelectNameId).val('').change();// Because of
required field
} else {
jQuery(phClassId).removeClass('on');//Remove when multiple
jQuery(this).addClass('on');
jQuery('input[name="'+ phSelectName
+'"]').val(jQuery(this).data('value'));
jQuery(phSelectNameId).val(jQuery(this).data('value')).change();//
Because of required field
}
})
}
})
}
function phAjaxChangeAttributeData(phProductId, phTypeView, phDataA1,
phDataA2){
var phParams = Joomla.getOptions('phParamsPC');
var phVars = Joomla.getOptions('phVarsPC');
var phUrl = phVars['urlCheckoutChangeData'];
var phOptions = [];
phOptions["id"] = phProductId;
phOptions["id_item_price"] = "#phItemPriceBox" +
phTypeView + phProductId;
phOptions["id_item_price_gift"] =
"#phItemPriceGiftBox" + phTypeView + phProductId;
phOptions["id_item_stock"] = "#phItemStockBox" +
phTypeView + phProductId;
phOptions["id_item_id"] = "#phItemIdBox" + phTypeView
+ phProductId;
phOptions["id_item_name"] = "V" + phTypeView +
'P' + phProductId;
phOptions["product_add_to_cart_item"] =
".phProductAddToCart" + phTypeView + phProductId;// display or
hide add to cart button
phOptions["product_add_to_cart_item_icon"] =
".phProductAddToCartIcon" + phTypeView + phProductId;// display
or hide add to cart icon
phOptions["view"] = phTypeView;
phOptions["method_price"] =
phParams['dynamicChangePrice'];
phOptions["method_stock"] =
phParams['dynamicChangeStock'];
phOptions["method_id"] = phParams['dynamicChangeId'];
phOptions["method_image"] =
phParams['dynamicChangeImage'];
phOptions["task"] = "change";
phOptions["type"] = "changedata";
if (phTypeView == 'ItemQuick' || phTypeView == 'Pos'
|| phTypeView == 'Item') {
phOptions["class"] ='ph-item-data-box';
} else {
phOptions["class"] ='ph-category-data-box';//
Category, Items
}
var phData = 'id='+ phOptions["id"]
+'&'+ phDataA1 +'&'+ phDataA2
+'&'+'class='+ phOptions["class"]
+'&'+'typeview='+ phOptions["view"];
phDoRequestMethods(phUrl, phData, phOptions);
}
function phSetAttributeUrl(phSetValueByUser) {
var phParams = Joomla.getOptions('phParamsPC');
var phVars = Joomla.getOptions('phVarsPC');
if (phParams['dynamicChangeUrlAttributes'] != 1) {
return false;
}
if(phVars['view'] != 'item') {
return false;
}
var phHash = jQuery(location).attr('hash');
phHash = phReplaceAll('#', '', phHash)
var phHashParams = jQuery.deparam(phHash);
var phProductAttribute = '.phjProductAttribute';
var phHashNew = '';
var phTypeView = '';
var phProductId = '';
// Change base64 return url - add attribute suffix to the URL so when
products will be added to cart without running ajax
// then it will be redirected back to the site with selected attribute
var attributeForm =
jQuery(phProductAttribute).closest("form");
var attributeFormReturn =
attributeForm.find("input[name=return]");
var attributeFormReturnValue = Base64.decode(attributeFormReturn.val());
// Find all attributes in Item View
jQuery(phProductAttribute).each(function() {
if (phHashNew != '') {
phHashNew = phHashNew + '&';
}
var attributeId = this.id;
var attributeAlias = jQuery(this).data('alias');
var valueAlias = '';// One value for selectbox
var valuesAlias = '';// One or more values for checkbox
var phSelectNameIdT = '#phItemHiddenAttribute' +
jQuery(this).data('attribute-id-name');
if (phSetValueByUser == 1) {
// 1) Set by user
// SELECTBOX
if
(jQuery(this).find(':selected').data('value-alias') !==
undefined) {
valueAlias =
jQuery(this).find(':selected').data('value-alias');
phHashNew = phHashNew + 'a[' +
jQuery(this).data('alias') + ']=' + valueAlias;
}
// CHECKBOX
if
(jQuery(this).find(':input:checked').data('value-alias')
!== undefined) {
jQuery.each(jQuery(this).find(':input:checked'), function(){
if (valuesAlias != '') {
valuesAlias = valuesAlias + ',';
}
valuesAlias = valuesAlias +
jQuery(this).data('value-alias');
});
if (valuesAlias != '') {
phHashNew = phHashNew + 'a[' +
jQuery(this).data('alias') + ']=' + valuesAlias;
}
}
} else {
// 2) Set on document load
if (phHashParams.a !== undefined && attributeAlias !== undefined
&& phHashParams.a[attributeAlias] !== undefined) {
// 2a) Set by the URL parameters - e.g. direct link - attributes will
be set on the site by the URL
phHashNew = phHashNew + 'a[' +
jQuery(this).data('alias') + ']=' +
phHashParams.a[attributeAlias];
var arrayValues = phHashParams.a[attributeAlias].split(",");
if (arrayValues !== undefined || arrayValues.length != 0) {
// clea all selected values first
jQuery("#" + attributeId + "
option").removeAttr("selected");// Select box
jQuery(phSelectNameIdT + "
div").removeClass('on'); // Select Color or Image
jQuery("#" + attributeId + "
input").removeAttr("checked");// Check box
jQuery(arrayValues).each(function() {
jQuery("#" + attributeId + "
option[data-value-alias='" + this +
"']").attr("selected","selected");//
Select box
jQuery(phSelectNameIdT + " div[data-value-alias='" +
this + "']").addClass('on'); // Select Color or
Image
jQuery("#" + attributeId + "
input[data-value-alias='" + this +
"']").attr("checked","checked");// Check
box
})
}
} else {
// 2b) Attribute not found in URL so change the URL be values set as
default (default value for attribute)
// SELECT BOX
if
(jQuery(this).find(':selected').data('value-alias') !==
undefined) {
valueAlias =
jQuery(this).find(':selected').data('value-alias');
phHashNew = phHashNew + 'a[' +
jQuery(this).data('alias') + ']=' + valueAlias;
}
// CHECKBOX
if
(jQuery(this).find(':input:checked').data('value-alias')
!== undefined) {
jQuery.each(jQuery(this).find(':input:checked'), function(){
if (valuesAlias != '') {
valuesAlias = valuesAlias + ',';
}
valuesAlias = valuesAlias +
jQuery(this).data('value-alias');
});
if (valuesAlias != '') {
phHashNew = phHashNew + 'a[' +
jQuery(this).data('alias') + ']=' + valuesAlias;
}
}
}
// Accessible in each parameter - will be used for ajax if set in
parameters
phTypeView = jQuery(this).data('type-view');
phProductId = jQuery(this).data('product-id');
}
})
// URL parameter (hash) can change the setting of attributes, if changed
then ajax which changes stock, price and ID (EAN, SKU), image needs to be
run
if (phParams['dynamicChangePrice'] == 0 &&
phParams['dynamicChangeStock'] == 0 &&
phParams['dynamicChangeId'] == 0 &&
(phParams['dynamicChangeImage'] == 0 ||
phParams['dynamicChangeImage'] == 1)) {
//Interactive change is disabled
} else {
var phProductGroup = '.phjAddToCartV' + phTypeView +
'P' + phProductId;
var phDataA1 =
jQuery(phProductGroup).find('select').serialize();// All Selects
var phDataA2 =
jQuery(phProductGroup).find(':checkbox').serialize();// All
Checkboxes
phAjaxChangeAttributeData(phProductId, phTypeView, phDataA1, phDataA2);
}
// Last character &
if (phHashNew.lastIndexOf('&') == (phHashNew.length - 1)) {
phHashNew = phHashNew.slice(0, -1);
}
// Update URL after #
if (phSetValueByUser == 0 && phHashNew != '') {
phHashNew = '#' + phHashNew;
// Update even form return value to be returned back with selected
attribute
if(attributeFormReturnValue != '') {
attributeFormReturn.val(Base64.encode(attributeFormReturnValue +
phHashNew));
}
window.history.pushState({},"", phHashNew);
} else if (phSetValueByUser == 1) {
phHashNew = '#' + phHashNew;
// Update even form return value to be returned back with selected
attribute
if(attributeFormReturnValue != '') {
attributeFormReturn.val(Base64.encode(attributeFormReturnValue +
phHashNew));
}
window.history.pushState({},"", phHashNew);
}
}
jQuery(document).ready(function() {
phChangeAttributeType();// Change select to color or image, change
checkbox to color or image
phSetAttributeUrl(0);// Change URL (# attributes) or change attributes by
URL at start
/* Interactive change - price, stock, ID (EAN, SKU, ...) */
var phSelectboxA = "select.phjProductAttribute";
var phSelectboxASelected = phSelectboxA + ":selected";
// Select box
jQuery(document).on('change', phSelectboxA, function(e){
var phParams = Joomla.getOptions('phParamsPC');
if (phParams['dynamicChangePrice'] == 0 &&
phParams['dynamicChangeStock'] == 0 &&
phParams['dynamicChangeId'] == 0 &&
(phParams['dynamicChangeImage'] == 0 ||
phParams['dynamicChangeImage'] == 1)) {
return false;// Interactive Change is disabled
}
//jQuery(this).off("change");';
var phTypeView = jQuery(this).data('type-view');
var phProductId = jQuery(this).data('product-id');
var phProductGroup = '.phjAddToCartV' + phTypeView +
'P' + phProductId;
var phDataA1 =
jQuery(phProductGroup).find('select').serialize();// All Selects
var phDataA2 =
jQuery(phProductGroup).find(':checkbox').serialize();// All
Checkboxes
phAjaxChangeAttributeData(phProductId, phTypeView, phDataA1, phDataA2);
phSetAttributeUrl(1);
})
var phCheckboxA =
".ph-checkbox-attribute.phjProductAttribute";
// var phCheckboxAInputChecked = phCheckboxA + "
input:checked";
// Checkbox
jQuery(document).on('click', phCheckboxA, function(e){
var phParams = Joomla.getOptions('phParamsPC');
if (phParams['dynamicChangePrice'] == 0 &&
phParams['dynamicChangeStock'] == 0 &&
phParams['dynamicChangeId'] == 0 &&
(phParams['dynamicChangeImage'] == 0 ||
phParams['dynamicChangeImage'] == 1)) {
return;// Interactive Change is disabled
}
if (e.target.tagName.toUpperCase() === "LABEL") { return;}//
Prevent from twice running
if (phParams['theme'] == 'bs4') {
if (e.target.tagName.toUpperCase() === "SPAN" ||
e.target.tagName.toUpperCase() === "IMG") { return;}// Prevent
from twice running
}
var phProductId = jQuery(this).data('product-id');
var phTypeView = jQuery(this).data('type-view');
var phProductGroup = '.phjAddToCartV' + phTypeView +
'P' + phProductId;
var phDataA1 =
jQuery(phProductGroup).find('select').serialize();// All Selects
var phDataA2 =
jQuery(phProductGroup).find(':checkbox').serialize();// All
Checkboxes
// If REQUIRED, don't allow to untick all checkboxes
var phRequired = jQuery(this).data("required");
var phCheckboxAInputChecked = "#" +
jQuery(this).attr("id") + " input:checked";
var phACheckedLength = jQuery(phCheckboxAInputChecked).length;
if (phACheckedLength == 0) {
var phThisLabel = jQuery(e.target).parent();// Bootstrap
checkboxes - colors, images
phThisLabel.addClass("active");// Bootstrap
checkboxes - colors, images
e.preventDefault();
return false;
}
phAjaxChangeAttributeData(phProductId, phTypeView, phDataA1, phDataA2);
phSetAttributeUrl(1);
})
// Gift coupon
jQuery('.phAOGift').on('input', function() {
var phAOType = '.' + jQuery(this).data('type');
if (phAOType == '.phAOGiftType') {
var title = jQuery(this).data('title');
jQuery('.phAOGiftTitle').text(title);
var image = jQuery(this).data('image');
jQuery('.phAOGiftImage').attr('src', image);
var date = jQuery(this).data('date');
jQuery('.phAOGiftDate').text(date);
var description = jQuery(this).data('description');
description = Base64.decode(description);
jQuery('.phAOGiftDescription').html(description);
var className = jQuery(this).data('class-name');
jQuery(phAOType).attr('class', 'phAOGiftType
ph-gift-voucher-box ' + className);
} else {
jQuery(phAOType).text(jQuery(this).val());
}
});
})