/*
This file is part of the Notesnook project (https://notesnook.com/)

Copyright (C) 2023 Streetwriters (Private) Limited

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
import { getAttributes } from "@tiptap/core";
import { Plugin, PluginKey } from "@tiptap/pm/state";
export function clickHandler(options) {
    return new Plugin({
        key: new PluginKey("handleClickLink"),
        props: {
            handleClick: (view, pos, event) => {
                var _a;
                if (event.button !== 0) {
                    return false;
                }
                let a = event.target;
                const els = [];
                while (a.nodeName !== "DIV") {
                    els.push(a);
                    a = a.parentNode;
                }
                if (!els.find((value) => value.nodeName === "A")) {
                    return false;
                }
                const attrs = getAttributes(view.state, options.type.name);
                const link = event.target;
                const href = (_a = link === null || link === void 0 ? void 0 : link.href) !== null && _a !== void 0 ? _a : attrs.href;
                // const target = link?.target ?? attrs.target;
                if (link && href) {
                    if (options.editor.storage.openLink) {
                        event.preventDefault();
                        setTimeout(() => { var _a, _b; return (_b = (_a = options.editor.storage).openLink) === null || _b === void 0 ? void 0 : _b.call(_a, href); });
                    }
                    return true;
                }
                return false;
            }
        }
    });
}
