__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
/*! elementor-pro - v3.33.0 - 11-11-2025 */
/******/ (() => { // webpackBootstrap
/******/ 	"use strict";
/*!**************************************************************!*\
  !*** ../modules/screenshots/assets/js/preview/screenshot.js ***!
  \**************************************************************/


/* global ElementorScreenshotConfig */
class Screenshot extends elementorModules.ViewModule {
  getDefaultSettings() {
    return {
      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' // Youtube images domain.
      ],
      timeout: 15000,
      // Wait until screenshot taken or fail in 15 secs.
      render_timeout: 5000,
      // Wait until all the element will be loaded or 5 sec and then take screenshot.
      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');

    /**
     * Hold the timeout timer
     *
     * @type {number|null}
     */
    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 excludedUrls = [this.getSettings('home_url'), ...this.getSettings('excluded_external_css_urls')];
    const notSelector = excludedUrls.map(url => `[href^="${url}"]`).join(', ');
    jQuery('link').not(notSelector).each((index, el) => {
      const $link = jQuery(el),
        $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),
        $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();
    });

    // Some 3rd party plugins inject elements into the dom, so this method removes all
    // the elements that was injected, to make sure that it capture a screenshot only of the post itself.
    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.');
      }

      // TODO: Extract to util function.
      const isSafari = /^((?!chrome|android).)*safari/i.test(window.userAgent);

      // Safari browser has some problems with the images that dom-to-images
      // library creates, so in this specific case the screenshot uses html2canvas.
      // Note that dom-to-image creates more accurate screenshot in "not safari" browsers.
      if (isSafari) {
        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'),
      cropContext = cropCanvas.getContext('2d'),
      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;

    // Send the message to the parent window and not to the top.
    // e.g: The `Theme builder` is loaded into an iFrame so the message of the screenshot
    // should be sent to the `Theme builder` window and not to the top window.
    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;
    }

    // eslint-disable-next-line no-console
    console.log('string' === typeof message ? `${this.getSettings('post_id')} - ${message}` : message);
    if (timerMethod) {
      // eslint-disable-next-line no-console
      console[timerMethod](this.getSettings('timer_label'));
    }
  }
}
jQuery(() => {
  new Screenshot();
});
/******/ })()
;
//# sourceMappingURL=screenshot.js.map

Filemanager

Name Type Size Permission Actions
notes Folder 0750
packages Folder 0750
0726b2d81686a5392236.bundle.min.js File 22.68 KB 0640
0726b2d81686a5392236.bundle.min.js.LICENSE.txt File 188 B 0640
36c2990924ec9596ffad.bundle.js File 6.09 KB 0640
8b11be0d97d58e135d30.bundle.js File 61.39 KB 0640
admin.js File 57.26 KB 0640
admin.min.js File 28.39 KB 0640
ajax-pagination.2090b5f4906bcda1dcc2.bundle.min.js File 2.75 KB 0640
ajax-pagination.2390838f542f1a8d5ed4.bundle.js File 5.06 KB 0640
animated-headline.32baaa2ad2ea939224d5.bundle.js File 11.92 KB 0640
animated-headline.c009d6fa482515df23f8.bundle.min.js File 7.58 KB 0640
app.js File 401.41 KB 0640
app.min.js File 135.52 KB 0640
archive-posts.16a93245d08246e5e540.bundle.min.js File 7.92 KB 0640
archive-posts.6e398ddd4a81a78bcea3.bundle.js File 15.52 KB 0640
carousel.298f1fc9c115422aad0e.bundle.js File 9.93 KB 0640
carousel.3620fca501cb18163600.bundle.min.js File 4.9 KB 0640
code-highlight.7121ad6fca6bf899bbb5.bundle.js File 1 KB 0640
code-highlight.b9addbc842a50347c9ab.bundle.min.js File 468 B 0640
contact-buttons-var-10.16cf733dc3d3b250fef4.bundle.min.js File 7.68 KB 0640
contact-buttons-var-10.44dafff87cd10dfffc68.bundle.js File 14.19 KB 0640
contact-buttons.23b3f042ed41cf9221f4.bundle.js File 22.99 KB 0640
contact-buttons.99a987d66bcc2ade0ee6.bundle.min.js File 13.51 KB 0640
countdown.0e9e688751d29d07a8d3.bundle.min.js File 2.63 KB 0640
countdown.6e87ca40d36793d92aea.bundle.js File 4.83 KB 0640
custom-code.js File 98.74 KB 0640
custom-code.min.js File 27 KB 0640
d241154d3774d66da9eb.bundle.min.js File 3.17 KB 0640
display-conditions.js File 235.18 KB 0640
display-conditions.min.js File 75.21 KB 0640
e8eba20060a4b0fa29dc.bundle.js File 12.11 KB 0640
editor.js File 373.88 KB 0640
editor.min.js File 150.52 KB 0640
elements-handlers.js File 112.99 KB 0640
elements-handlers.min.js File 43.22 KB 0640
floating-bars-var-2.75c36e8b0bacbac6105e.bundle.min.js File 14.2 KB 0640
floating-bars-var-2.fa9c6b6e6aaeb43504f2.bundle.js File 12.81 KB 0640
floating-bars-var-3.cdf99fd0b063a0032d53.bundle.min.js File 13.7 KB 0640
floating-bars-var-3.ce31fbd73759a9439cbf.bundle.js File 12.71 KB 0640
form-submission-admin.js File 269.94 KB 0640
form-submission-admin.min.js File 86.85 KB 0640
form.151b991a4cbdda620c22.bundle.js File 33.97 KB 0640
form.71055747203b48a65a24.bundle.min.js File 19.31 KB 0640
frontend.js File 52.98 KB 0640
frontend.min.js File 23.48 KB 0640
gallery.06be1c07b9901f53d709.bundle.min.js File 5.77 KB 0640
gallery.ac8ddd9e62465c5cdb2d.bundle.js File 9.42 KB 0640
hotspot.5033ed75928eff79cb95.bundle.min.js File 2.75 KB 0640
hotspot.5e711b7707a884acf3f1.bundle.js File 4.9 KB 0640
jszip.vendor.a3c65615c1de5560962d.bundle.js File 95.64 KB 0640
jszip.vendor.eba4ace24dcc63eadac0.bundle.min.js File 95.88 KB 0640
jszip.vendor.eba4ace24dcc63eadac0.bundle.min.js.LICENSE.txt File 383 B 0640
load-more.8b46f464e573feab5dd7.bundle.min.js File 5.22 KB 0640
load-more.f5ecc1c66872d0bd2d17.bundle.js File 9.44 KB 0640
loop-carousel.122d0b9321a9edad91b0.bundle.js File 2.77 KB 0640
loop-carousel.cd9a95b2e4dd2a239b81.bundle.min.js File 1.32 KB 0640
loop-filter-editor.46a4c013b80a381a50c9.bundle.js File 7.02 KB 0640
loop-filter-editor.be7377d717e2499f4676.bundle.min.js File 3.28 KB 0640
loop.43307e757bd5a39f14cd.bundle.js File 16.77 KB 0640
loop.89cc81d2188312a17a17.bundle.min.js File 8.79 KB 0640
lottie.824e2adeeca89f4297c7.bundle.js File 24.41 KB 0640
lottie.a287ccfe024bea61e651.bundle.min.js File 14.07 KB 0640
media-carousel.8d26e5df1a1527329fde.bundle.min.js File 6.83 KB 0640
media-carousel.8f7b71d582be9d9410fe.bundle.js File 13.05 KB 0640
mega-menu-editor.be91c0f96af4174d83d0.bundle.js File 19.04 KB 0640
mega-menu-editor.da6571bb00aaa3092eab.bundle.min.js File 8.24 KB 0640
mega-menu-stretch-content.0d76e4a3b7bf65ff6f9b.bundle.js File 1.82 KB 0640
mega-menu-stretch-content.480e081cebe071d683e8.bundle.min.js File 1.1 KB 0640
mega-menu.595ee0dffef2bd038c6b.bundle.js File 50.36 KB 0640
mega-menu.82093824ddb3f5531ab4.bundle.min.js File 27.58 KB 0640
menu-title-keyboard-handler.efa6d39b4096f1de6f4d.bundle.js File 12.03 KB 0640
menu-title-keyboard-handler.f0362773c21105d2c65c.bundle.min.js File 7.51 KB 0640
nav-menu.8521a0597c50611efdc6.bundle.min.js File 5.12 KB 0640
nav-menu.fd37f05286fae9cd6d0c.bundle.js File 9.02 KB 0640
nested-carousel-editor.0df35e0e1a284d4bd18b.bundle.js File 1.84 KB 0640
nested-carousel-editor.6d7500036d0766bbe2fc.bundle.min.js File 623 B 0640
nested-carousel.ce414a51f188ccf670ee.bundle.js File 6.65 KB 0640
nested-carousel.db797a097fdc5532ef4a.bundle.min.js File 3.29 KB 0640
off-canvas-editor.9d374fa1254f9efc259e.bundle.min.js File 2.52 KB 0640
off-canvas-editor.d30e3b4fb19101e5ff36.bundle.js File 6.16 KB 0640
off-canvas.137463f629e2b7cbaf02.bundle.min.js File 6.73 KB 0640
off-canvas.ff4d0ebaaec46fc178b2.bundle.js File 10.68 KB 0640
page-transitions.js File 37.78 KB 0640
page-transitions.min.js File 17.24 KB 0640
paypal-button.55ffb013a3fe565f55a5.bundle.js File 1.54 KB 0640
paypal-button.f4f64e46173f50701949.bundle.min.js File 871 B 0640
popup.996738ad83c089bcc0b9.bundle.js File 1.51 KB 0640
popup.f7b15b2ca565b152bf98.bundle.min.js File 752 B 0640
portfolio.4cd5da34009c30cb5d70.bundle.min.js File 7.1 KB 0640
portfolio.5727b56368be256d0893.bundle.js File 12.69 KB 0640
posts.aec59265318492b89cb5.bundle.min.js File 3.24 KB 0640
posts.e99f84b83c36d4568ffe.bundle.js File 5.8 KB 0640
preview.js File 81.15 KB 0640
preview.min.js File 16.93 KB 0640
product-add-to-cart.0c33bb82cd57e51665f9.bundle.js File 7.17 KB 0640
product-add-to-cart.c32f5d5e404511d68720.bundle.min.js File 3.42 KB 0640
progress-tracker.8cccdda9737c272489fc.bundle.min.js File 5.11 KB 0640
progress-tracker.fd1d31a26340ed74e10a.bundle.js File 9.21 KB 0640
screenshot.js File 11.58 KB 0640
screenshot.min.js File 5.65 KB 0640
search-form.8941aba5c12cdb05fb7c.bundle.js File 4.4 KB 0640
search-form.b7065999d77832a1b764.bundle.min.js File 2.07 KB 0640
search.1a4ea982239b5f5db501.bundle.js File 20.13 KB 0640
search.5d88e65c03029f91931d.bundle.min.js File 12.89 KB 0640
share-buttons.63d984f8c96d1e053bc0.bundle.min.js File 1.54 KB 0640
share-buttons.fda49c1691f4a352c7ef.bundle.js File 4.27 KB 0640
slides.bcd16bbde90338846bd7.bundle.js File 7.39 KB 0640
slides.c0029640cbdb48199471.bundle.min.js File 3.83 KB 0640
social.83aec5578e50a413de57.bundle.js File 1.95 KB 0640
social.d71d263bd937f0906192.bundle.min.js File 1018 B 0640
stripe-button.49130d6eecb5ebc8afbd.bundle.min.js File 1.97 KB 0640
stripe-button.cb4b1cf19f1c46430f76.bundle.js File 4.18 KB 0640
table-of-contents.3be1ab725f562d10dd86.bundle.min.js File 8.04 KB 0640
table-of-contents.6ac58abccb098fb35213.bundle.js File 15.6 KB 0640
taxonomy-filter.a32526f3e4a201b5fce1.bundle.min.js File 7.42 KB 0640
taxonomy-filter.f3f2746a00fed7447ff5.bundle.js File 15.68 KB 0640
video-playlist.7140c18aeaebfda82118.bundle.js File 48.98 KB 0640
video-playlist.909c41acbc73cb741e9d.bundle.min.js File 22.13 KB 0640
webpack-pro.runtime.js File 16.37 KB 0640
webpack-pro.runtime.min.js File 6.1 KB 0640
woocommerce-cart.3e38c78b18f28be95e9d.bundle.js File 10.52 KB 0640
woocommerce-cart.480d117b95956d1f28a5.bundle.min.js File 5.06 KB 0640
woocommerce-checkout-page.48b0561b8ee895da5af5.bundle.js File 11.88 KB 0640
woocommerce-checkout-page.6ba1f1f2aa99210fa1cf.bundle.min.js File 6.46 KB 0640
woocommerce-menu-cart.54f2e75f6769dce707e2.bundle.min.js File 4.56 KB 0640
woocommerce-menu-cart.a0d098b5b49cb56bf258.bundle.js File 8.64 KB 0640
woocommerce-my-account.7c01b4a03ae07847db06.bundle.js File 11.36 KB 0640
woocommerce-my-account.d54826f355f9822b0ec0.bundle.min.js File 6.08 KB 0640
woocommerce-notices.00f9132bbbd683277a27.bundle.min.js File 1.83 KB 0640
woocommerce-notices.c1b466cde2ea03db7d6e.bundle.js File 2.96 KB 0640
woocommerce-purchase-summary.2ebf26dca7d446fdd128.bundle.js File 7.33 KB 0640
woocommerce-purchase-summary.88a2d8ca449739e34f9f.bundle.min.js File 3.41 KB 0640
Filemanager