@formidable-webview/webshell
Version:
🔥 Craft Robust React Native WebView-based components with ease.
41 lines (36 loc) • 3.62 kB
JavaScript
"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