digital_signage_framework-2.3.x-dev/js/preview-iframe.js

js/preview-iframe.js
(function ($, Drupal, drupalSettings) {
  Drupal.digital_signage_preview_iframe =
    Drupal.digital_signage_preview_iframe || {};

  Drupal.behaviors.digital_signage_preview_iframe = {
    attach() {
      $('a:not(.digital-signage-preview-processed)')
        .addClass('digital-signage-preview-processed')
        .on('click', function () {
          Drupal.digital_signage_preview_iframe.handleClick(this);
          return false;
        });
      $(
        'div[data-drupal-digitalsignage-dynamic="true"]:not(.digital-signage-preview-processed)',
      )
        .addClass('digital-signage-preview-processed')
        .each(function () {
          Drupal.digital_signage_preview_iframe.loadDynamicBlock(this);
        });
    },
  };

  Drupal.digital_signage_preview_iframe.handleClick = function ($linkElement) {
    window.parent.postMessage(
      {
        action: 'pause',
      },
      drupalSettings.digital_signage_preview_iframe.origin,
    );
    const browser = document.createElement('iframe');
    browser.src = $($linkElement).attr('href');
    browser.setAttribute('class', 'browser');
    $('body')
      .append(browser)
      .append(
        '<ul class="digital-signage-preview controls browser"><li class="close" title="close"></li></ul>',
      );
    $('body > .controls.browser').on('click', function () {
      $('body > .browser').remove();
      window.parent.postMessage(
        {
          action: 'resume',
        },
        drupalSettings.digital_signage_preview_iframe.origin,
      );
    });
  };

  Drupal.digital_signage_preview_iframe.loadDynamicBlock = function (
    $blockElement,
  ) {
    setTimeout(function () {
      const blockid = $blockElement.getAttribute(
        'data-drupal-digitalsignage-blockid',
      );
      Drupal.ajax({
        url: `/api/digital_signage/block/${blockid}`,
        error(e) {
          if (e.status === 200) {
            const parser = new DOMParser();
            const dom = parser.parseFromString(e.responseText, 'text/html');
            const newContent = dom.querySelector(
              'div[data-drupal-digitalsignage-dynamic="true"]',
            );
            $blockElement.innerHTML = newContent.innerHTML;
          } else {
            console.log(e);
          }
          Drupal.digital_signage_preview_iframe.loadDynamicBlock($blockElement);
        },
      }).execute();
    }, 10000);
  };
})(jQuery, Drupal, drupalSettings);

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc