| import "./style.scss";
import "./editor.scss";
import Inspector from "./inspector";
const { __ } = wp.i18n;
const { Fragment } = wp.element;
const { Placeholder } = wp.components;
const { registerBlockType } = wp.blocks;
registerBlockType("adeleyeayodeji/dynamic-iframe-for-wp", {
  title: __("Dynamic Iframe", "dynamic-iframe-for-wp"),
  description: __(
    "Easily insert dynamic iframes into the block editor.",
    "dynamic-iframe-for-wp"
  ),
  keywords: [
    __("iframe"),
    __("external"),
    __("embed"),
    __("video"),
    __("youtube"),
    __("vimeo"),
    __("google maps"),
    __("google"),
    __("maps"),
    __("map"),
    __("google map"),
    __("google maps embed"),
    __("google map embed"),
    __("google maps iframe"),
    __("google map iframe"),
    __("dynamic iframe"),
    __("dynamic iframe for gutenberg"),
    __("dynamic iframe block"),
    __("dynamic iframe block for gutenberg"),
    __("dynamic iframe for gutenberg block editor"),
    __("dynamic iframe block for gutenberg block editor"),
    __("dynamic iframe for gutenberg block"),
    __("dynamic iframe block for gutenberg block")
  ],
  category: "embed",
  icon: "admin-site-alt",
  supports: {
    anchor: true,
    className: false,
    customClassName: true,
    align: ["full"]
  },
  attributes: {
    iframeSrc: {
      type: "string"
    },
    iframeWidth: {
      type: "string"
    },
    iframeHeight: {
      type: "string"
    },
    allowFullscreen: {
      type: "boolean"
    },
    useLazyload: {
      type: "boolean"
    },
    useImportant: {
      type: "boolean"
    }
  },
  edit: function (props) {
    const { attributes } = props;
    let customClassName = [attributes.className];
    if (attributes.align == "full") customClassName.push("alignfull");
    const iframeStyle = {
      width: attributes.iframeWidth || "100%",
      maxWidth: attributes.iframeWidth || "100%",
      height: attributes.iframeHeight || "320px"
    };
    let allow = {};
    if (attributes.allowFullscreen) allow.allowFullscreen = true;
    const block = attributes.iframeSrc ? (
      <iframe
        id={attributes.anchor}
        className={customClassName.join(" ")}
        src={attributes.iframeSrc}
        style={iframeStyle}
        frameBorder="0"
        {...allow}></iframe>
    ) : (
      <Placeholder
        icon="admin-site-alt"
        label={__("Please fill the Iframe URL", "dynamic-iframe-for-wp")}
      />
    );
    return (
      <Fragment>
        <Inspector {...props} />
        {block}
      </Fragment>
    );
  },
  save: function (props) {
    const { attributes } = props;
    let customClassName = [attributes.className];
    if (attributes.align == "full") customClassName.push("alignfull");
    const iframeStyle = {
      width: attributes.iframeWidth || "100%",
      maxWidth: attributes.iframeWidth || "100%",
      height: attributes.iframeHeight || "320px"
    };
    if (attributes.useImportant) {
      for (let i in iframeStyle) {
        iframeStyle[i] += " !important";
      }
    }
    let allow = {};
    if (attributes.allowFullscreen) allow.allowFullscreen = true;
    return (
      <Fragment>
        <iframe
          style={iframeStyle}
          id={attributes.anchor}
          src={attributes.iframeSrc}
          class={customClassName.join(" ")}
          loading={attributes.useLazyload ? "lazy" : false}
          frameBorder="0"
          {...allow}></iframe>
      </Fragment>
    );
  }
});
 |