storybook-amp
Version:
Storybook addon for AMP Html. Allows to display in your stories AMP Html components generated with React.
66 lines (63 loc) • 2.44 kB
JavaScript
;
var _global = require("global");
var _react = _interopRequireDefault(require("react"));
var _addons = require("@storybook/addons");
var _constants = require("../constants");
var _Tool = require("../Tool");
var _Panel = require("../Panel");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
_addons.addons.register(_constants.ADDON_ID, function () {
prepareAddonInWindow();
_addons.addons.add(_constants.TOOL_ID, {
type: _addons.types.TOOL,
title: "Amp",
match: function match(_ref) {
var viewMode = _ref.viewMode;
return viewMode === "story";
},
render: function render() {
return /*#__PURE__*/_react["default"].createElement(_Tool.Tool, null);
}
});
_addons.addons.add(_constants.PANEL_ID, {
type: _addons.types.PANEL,
title: _constants.PANEL_TITLE,
match: function match(_ref2) {
var viewMode = _ref2.viewMode;
return viewMode === "story";
},
render: function render(props) {
return /*#__PURE__*/_react["default"].createElement(_Panel.Panel, props);
}
});
});
var prepareAddonInWindow = function prepareAddonInWindow() {
if (_global.window.__STORYBOOK_AMP__) {
return;
}
_global.window.__STORYBOOK_AMP__ = {
validator: {
isReady: false,
init: function init() {
return new Promise(function (resolve, reject) {
var script = _global.document.createElement("script"),
head = _global.document.head || _global.document.getElementsByTagName("head")[0];
script.addEventListener("load", function (event) {
var _window$amp, _window$amp$validator;
if (_global.window !== null && _global.window !== void 0 && (_window$amp = _global.window.amp) !== null && _window$amp !== void 0 && (_window$amp$validator = _window$amp.validator) !== null && _window$amp$validator !== void 0 && _window$amp$validator.init) {
_global.window.amp.validator.init().then(function () {
_global.window.__STORYBOOK_AMP__.validator.isReady = true;
resolve();
});
}
// reject error
});
script.src = "https://cdn.ampproject.org/v0/validator_wasm.js";
script.id = "storybook-amp-validator-script";
script.async = false;
head.insertBefore(script, head.firstChild);
});
}
}
};
};