403Webshell
Server IP : 108.167.142.43  /  Your IP : 216.73.216.223
Web Server : Apache
System : Linux gator4174.hostgator.com 5.14.0-687.39.1.el9_8.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Aug 18 06:09:16 EDT 2026 x86_64
User : delarice ( 2406)
PHP Version : 8.3.36
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /home2/delarice/public_html/wp-content/plugins/elementor-pro/assets/js/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home2/delarice/public_html/wp-content/plugins/elementor-pro/assets/js/screenshot.js
/*! elementor-pro - v4.3.0 - 13-10-2026 */
(function() {
	//#endregion
	//#region modules/screenshots/assets/js/preview/screenshot.js
	var __defProp = Object.defineProperty;
	var __getOwnPropSymbols = Object.getOwnPropertySymbols;
	var __hasOwnProp = Object.prototype.hasOwnProperty;
	var __propIsEnum = Object.prototype.propertyIsEnumerable;
	var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {
		enumerable: true,
		configurable: true,
		writable: true,
		value
	}) : obj[key] = value;
	var __spreadValues = (a, b) => {
		for (var prop in b || (b = {})) if (__hasOwnProp.call(b, prop)) __defNormalProp(a, prop, b[prop]);
		if (__getOwnPropSymbols) {
			for (var prop of __getOwnPropSymbols(b)) if (__propIsEnum.call(b, prop)) __defNormalProp(a, prop, b[prop]);
		}
		return a;
	};
	var Screenshot = class extends elementorModules.ViewModule {
		getDefaultSettings() {
			return __spreadValues({
				empty_content_headline: "Empty Content.",
				crop: {
					width: 1200,
					height: 1500
				},
				excluded_external_css_urls: ["https://kit-pro.fontawesome.com"],
				external_images_urls: ["https://i.ytimg.com"],
				timeout: 15e3,
				render_timeout: 5e3,
				timerLabel: null,
				timer_label: `${ElementorScreenshotConfig.post_id} - timer`,
				image_placeholder: "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=",
				isDebug: elementorCommonConfig.isElementorDebug,
				isDebugSvg: false
			}, ElementorScreenshotConfig);
		}
		getDefaultElements() {
			const $elementor = jQuery(ElementorScreenshotConfig.selector);
			const $sections = $elementor.find(".elementor-section-wrap > .elementor-section, .elementor > .elementor-section");
			return {
				$elementor,
				$sections,
				$firstSection: $sections.first(),
				$notElementorElements: elementorCommon.elements.$body.find("> *:not(style, link)").not($elementor),
				$head: jQuery("head")
			};
		}
		onInit() {
			super.onInit();
			this.log("Screenshot init", "time");
			this.timeoutTimer = setTimeout(this.screenshotFailed.bind(this), this.getSettings("timeout"));
			return this.captureScreenshot();
		}
		/**
		* The main method for this class.
		*/
		captureScreenshot() {
			if (!this.elements.$elementor.length) {
				elementorCommon.helpers.consoleWarn("Screenshots: The content of this page is empty, the module will create a fake conent just for this screenshot.");
				this.createFakeContent();
			}
			this.removeUnnecessaryElements();
			this.handleIFrames();
			this.removeFirstSectionMargin();
			this.handleLinks();
			this.loadExternalCss();
			this.loadExternalImages();
			return Promise.resolve().then(this.createImage.bind(this)).then(this.createImageElement.bind(this)).then(this.cropCanvas.bind(this)).then(this.save.bind(this)).then(this.screenshotSucceed.bind(this)).catch(this.screenshotFailed.bind(this));
		}
		/**
		* Fake content for documents that dont have any content.
		*/
		createFakeContent() {
			this.elements.$elementor = jQuery("<div>").css({
				height: this.getSettings("crop.height"),
				width: this.getSettings("crop.width"),
				display: "flex",
				alignItems: "center",
				justifyContent: "center"
			});
			this.elements.$elementor.append(jQuery("<h1>").css({ fontSize: "85px" }).html(this.getSettings("empty_content_headline")));
			document.body.prepend(this.elements.$elementor);
		}
		/**
		* CSS from another server cannot be loaded with the current dom to image library.
		* this method take all the links from another domain and proxy them.
		*/
		loadExternalCss() {
			const notSelector = [this.getSettings("home_url"), ...this.getSettings("excluded_external_css_urls")].map((url) => `[href^="${url}"]`).join(", ");
			jQuery("link").not(notSelector).each((index, el) => {
				const $link = jQuery(el);
				const $newLink = $link.clone();
				$newLink.attr("href", this.getScreenshotProxyUrl($link.attr("href")));
				this.elements.$head.append($newLink);
				$link.remove();
			});
		}
		/**
		* Make a proxy to images urls that has some problems with cross origin (like youtube).
		*/
		loadExternalImages() {
			const selector = this.getSettings("external_images_urls").map((url) => `img[src^="${url}"]`).join(", ");
			jQuery(selector).each((index, el) => {
				const $img = jQuery(el);
				$img.attr("src", this.getScreenshotProxyUrl($img.attr("src")));
			});
		}
		/**
		* Html to images libraries can not snapshot IFrames
		* this method convert all the IFrames to some other elements.
		*/
		handleIFrames() {
			this.elements.$elementor.find("iframe").each((index, el) => {
				const $iframe = jQuery(el);
				const $iframeMask = jQuery("<div />", { css: {
					background: "gray",
					width: $iframe.width(),
					height: $iframe.height()
				} });
				$iframe.before($iframeMask);
				$iframe.remove();
			});
		}
		/**
		* Remove all the sections that should not be in the screenshot.
		*/
		removeUnnecessaryElements() {
			let currentHeight = 0;
			this.elements.$sections.filter((index, el) => {
				let shouldBeRemoved = false;
				if (currentHeight >= this.getSettings("crop.height")) shouldBeRemoved = true;
				currentHeight += jQuery(el).outerHeight();
				return shouldBeRemoved;
			}).each((index, el) => {
				el.remove();
			});
			this.elements.$notElementorElements.remove();
		}
		/**
		* Some urls make some problems to the svg parser.
		* this method convert all the urls to just '/'.
		*/
		handleLinks() {
			elementorCommon.elements.$body.find("a").attr("href", "/");
		}
		/**
		* Remove unnecessary margin from the first element of the post (singles and footers).
		*/
		removeFirstSectionMargin() {
			this.elements.$firstSection.css({ marginTop: 0 });
		}
		/**
		* Creates a png image.
		*
		* @return {Promise<unknown>} URI containing image data
		*/
		createImage() {
			const pageLoadedPromise = new Promise((resolve) => {
				window.addEventListener("load", () => {
					resolve();
				});
			});
			const timeOutPromise = new Promise((resolve) => {
				setTimeout(() => {
					resolve();
				}, this.getSettings("render_timeout"));
			});
			return Promise.race([pageLoadedPromise, timeOutPromise]).then(() => {
				this.log("Start creating screenshot.");
				if (this.getSettings("isDebugSvg")) {
					domtoimage.toSvg(document.body, { imagePlaceholder: this.getSettings("image_placeholder") }).then((svg) => this.download(svg));
					return Promise.reject("Debug SVG.");
				}
				if (/^((?!chrome|android).)*safari/i.test(window.userAgent)) {
					this.log("Creating screenshot with \"html2canvas\"");
					return html2canvas(document.body).then((canvas) => {
						return canvas.toDataURL("image/png");
					});
				}
				this.log("Creating screenshot with \"dom-to-image\"");
				return domtoimage.toPng(document.body, { imagePlaceholder: this.getSettings("image_placeholder") });
			});
		}
		/**
		* Download a uri, use for debugging the svg that created from dom to image libraries.
		*
		* @param {string} uri
		*/
		download(uri) {
			const $link = jQuery("<a/>", {
				href: uri,
				download: "debugSvg.svg",
				html: "Download SVG"
			});
			elementorCommon.elements.$body.append($link);
			$link.trigger("click");
		}
		/**
		* Creates fake image element to get the size of the image later on.
		*
		* @param {string} dataUrl
		* @return {Promise<HTMLImageElement>} Image Element
		*/
		createImageElement(dataUrl) {
			const image = new Image();
			image.src = dataUrl;
			return new Promise((resolve) => {
				image.onload = () => resolve(image);
			});
		}
		/**
		* Crop the image to requested sizes.
		*
		* @param {HTMLImageElement} image
		* @return {Promise<unknown>} Canvas
		*/
		cropCanvas(image) {
			const width = this.getSettings("crop.width");
			const height = this.getSettings("crop.height");
			const cropCanvas = document.createElement("canvas");
			const cropContext = cropCanvas.getContext("2d");
			const ratio = width / image.width;
			cropCanvas.width = width;
			cropCanvas.height = height > image.height ? image.height : height;
			cropContext.drawImage(image, 0, 0, image.width, image.height, 0, 0, image.width * ratio, image.height * ratio);
			return Promise.resolve(cropCanvas);
		}
		/**
		* Send the image to the server.
		*
		* @param {HTMLCanvasElement} canvas
		* @return {Promise<unknown>} Screenshot URL
		*/
		save(canvas) {
			return new Promise((resolve, reject) => {
				elementorCommon.ajax.addRequest("screenshot_save", {
					data: {
						post_id: this.getSettings("post_id"),
						screenshot: canvas.toDataURL("image/png")
					},
					success: (url) => {
						this.log(`Screenshot created: ${encodeURI(url)}`);
						resolve(url);
					},
					error: () => {
						this.log("Failed to create screenshot.");
						reject();
					}
				});
			});
		}
		/**
		* Mark this post screenshot as failed.
		*/
		markAsFailed() {
			return new Promise((resolve, reject) => {
				elementorCommon.ajax.addRequest("screenshot_failed", {
					data: { post_id: this.getSettings("post_id") },
					success: () => {
						this.log(`Marked as failed.`);
						resolve();
					},
					error: () => {
						this.log("Failed to mark this screenshot as failed.");
						reject();
					}
				});
			});
		}
		/**
		* @param {string} url
		* @return {string} Screenshot Proxy URL
		*/
		getScreenshotProxyUrl(url) {
			return `${this.getSettings("home_url")}?screenshot_proxy&nonce=${this.getSettings("nonce")}&href=${url}`;
		}
		/**
		* Notify that the screenshot has been succeed.
		*
		* @param {string} imageUrl
		*/
		screenshotSucceed(imageUrl) {
			this.screenshotDone(true, imageUrl);
		}
		/**
		* Notify that the screenshot has been failed.
		*
		* @param {Error} e
		*/
		screenshotFailed(e) {
			this.log(e, null);
			this.markAsFailed().then(() => this.screenshotDone(false));
		}
		/**
		* Final method of the screenshot.
		*
		* @param {boolean} success
		* @param {string}  imageUrl
		*/
		screenshotDone(success, imageUrl = null) {
			clearTimeout(this.timeoutTimer);
			this.timeoutTimer = null;
			window.parent.postMessage({
				name: "capture-screenshot-done",
				success,
				id: this.getSettings("post_id"),
				imageUrl
			}, "*");
			this.log(`Screenshot ${success ? "Succeed" : "Failed"}.`, "timeEnd");
		}
		/**
		* Log messages for debugging.
		*
		* @param {any}     message
		* @param {string?} timerMethod
		*/
		log(message, timerMethod = "timeLog") {
			if (!this.getSettings("isDebug")) return;
			console.log("string" === typeof message ? `${this.getSettings("post_id")} - ${message}` : message);
			if (timerMethod) console[timerMethod](this.getSettings("timer_label"));
		}
	};
	jQuery(() => {
		new Screenshot();
	});
	//#endregion
})();

//# sourceMappingURL=screenshot.js.map

Youez - 2016 - github.com/yon3zu
LinuXploit