UNPKG

@formidable-webview/webshell

Version:

🔥 Craft Robust React Native WebView-based components with ease.

41 lines (36 loc) • 3.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HandleLinkPressFeature = void 0; var _FeatureBuilder = _interopRequireDefault(require("../FeatureBuilder")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } /* babel-plugin-inline-import './HandleLinkPressFeature.webjs' */ var linkPressScript = "function HandleLinkPressFeature(context) {\n var options = context.options || {};\n var preventDefault = options.preventDefault !== false;\n var ignoreHashChange =\n typeof options.ignoreHashChange === 'boolean'\n ? options.ignoreHashChange\n : true;\n\n function findParentByTagName(tagname, el) {\n while (el) {\n if ((el.nodeName || el.tagName).toLowerCase() === tagname.toLowerCase()) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n }\n\n function extractScheme(uri) {\n var groups = uri.match(/(\\w+):\\/\\//);\n return (groups && groups.length > 1 && groups[1]) || '';\n }\n\n var interceptClickEvent = context.makeCallbackSafe(function (e) {\n var target = e.target || e.srcElement;\n var anchor = findParentByTagName('a', target);\n if (anchor) {\n var href = anchor.href;\n if (\n ignoreHashChange &&\n anchor.origin === window.location.origin &&\n anchor.pathname === window.location.pathname\n ) {\n return;\n }\n var rect = anchor.getBoundingClientRect();\n var clickedAnchorBoundingRect = {\n top: rect.top,\n left: rect.left,\n bottom: rect.bottom,\n right: rect.right,\n width: rect.width,\n height: rect.height\n };\n preventDefault && e.preventDefault();\n context.postMessageToShell({\n uri: href,\n scheme: extractScheme(href),\n hrefAttribute: anchor.getAttribute('href'),\n downloadAttribute: anchor.getAttribute('download'),\n targetAttribute: anchor.getAttribute('target'),\n hreflangAttribute: anchor.getAttribute('hreflang'),\n referrerpolicyAttribute: anchor.getAttribute('referrerpolicy'),\n relAttribute: anchor.getAttribute('rel'),\n typeAttribute: anchor.getAttribute('type'),\n idAttribute: anchor.getAttribute('id'),\n classAttribute: anchor.getAttribute('class'),\n nameAttribute: anchor.getAttribute('name'),\n dataAttributes: anchor.dataset,\n clickedAnchorBoundingRect: clickedAnchorBoundingRect,\n page: {\n href: window.location.href,\n origin: window.location.origin\n }\n });\n }\n });\n document.addEventListener('click', interceptClickEvent, false);\n}\n"; var defaultOptions = { preventDefault: true, ignoreHashChange: true }; /** * This feature provides `onDOMLinkPress` prop with payloads of type {@link LinkPressTarget}. * It will intercept clicks on anchors such as: * * ```html * <a href="https://domain.com/">Let's Travel</a> * ``` * * @remarks * By default, it will prevent the click from propagating. But you can disable * this option, see {@link LinkPressOptions}. * * If you need to intercept click on hash fragments, consider {@link HandleHashChangeFeature} instead. * * @public */ var HandleLinkPressFeature = new _FeatureBuilder["default"]({ script: linkPressScript, defaultOptions: defaultOptions, identifier: 'org.formidable-webview/webshell.link-press' }).withShellHandler('onDOMLinkPress').build(); exports.HandleLinkPressFeature = HandleLinkPressFeature; //# sourceMappingURL=HandleLinkPressFeature.js.map