recogito-js:用于文本注释/图像注释的前端插件

创建批注:

 

继续批注:

右侧批注列表:

1、功能与应用

  • 文本注释:recogito-js可以将注释功能添加到网页上,或者作为构建完全自定义注释应用程序的工具箱。
  • 图像注释:除了文本注释外,它还支持为网页中的图像添加绘图、注释和标签功能。
  • PDF注释:通过@recogito/recogito-react-pdf插件,它还能够支持在React中注释PDF文档。

2、官网及示例

官网:https://github.com/recogito/recogito-js/wiki/API-Reference

示例:https://recogito.github.io/recogito-js/

3、需求:

前面的文章提到过很多的tinyMCE、Vditor、cherryMarkdown、wangEditor等等markdown和富文本编辑器,在这些编辑器生成的文本内容的预览基础上要加上批注功能,用户选中文本后就要弹出批注弹窗,确认批注后右侧会相应展示出批注内容,同时在右侧进行批注的编辑、删除

4、安装与使用:

npm i @recogito/recogito-js@1.8.2

以下示例为文本注释功能:

import { Recogito } from "@recogito/recogito-js";
import "@recogito/recogito-js/dist/recogito.min.css";// 初始化批注
const initRecogito = () => {getAnnoList();r = new Recogito({content: document.querySelector(".artDetail"), // 批注区域readOnly: false,  // 是否只读locale: "auto", // 可选择语言 auto会根据浏览器设置选择语言});r.setServerTime(Date.now()); // 设置批注日期r.setAuthInfo({   // 这里设置每个批注携带的默认信息id: useUserStore().userId,displayName: useUserStore().nickName,});// 创建批注事件r.on("createAnnotation", async function (annotation, overrideId) {// 定义一个getInitAnnotate方法拿到创建的这个批注信息let newAnno = getInitAnnotate("create", annotation);// 因为批注插件不管有没有输入内容都会创建,这里要求了没有批注内容时不允许新建批注if (!newAnno.annotationContent?.trim()?.length) {getAnnoList(); // 刷新批注列表避免页面出现空批注内容return proxy.$modal.msgWarning("请先输入批注内容");}// 将批注信息存入后端submitAnnotation(newAnno).then(({ data }) => {recogitoList.value.push(data);  // 在页面右侧回展示批注信息proxy.$modal.msgSuccess("新增成功!");}).catch((err) => {getAnnoList();// 刷新批注列表避免页面出现空批注内容});});// 在已有批注基础上补充批注r.on("updateAnnotation", function (annotation, previous) {let newAnno = getInitAnnotate("update", annotation);if (!newAnno.annotationContent?.trim()?.length) {getAnnoList();return proxy.$modal.msgWarning("请先输入批注内容");}submitAnnotation(newAnno).then(({ data }) => {// 补充批注时let index = recogitoList.value.findIndex((item) => item.id === data.id);recogitoList.value[index] = data;proxy.$modal.msgSuccess("新增成功!");}).catch((err) => {getAnnoList();});});
};// 更改批注参数
const getInitAnnotate = (title, newAnno, pkId) => {let data = {};// 创建批注时if (title === "create") {data.annotationContent = newAnno.body[0]?.value;data.textContent = newAnno.target.selector.find((item) => item.type === "TextQuoteSelector")?.exact;// 修改批注时} else if (title === "update") {data.annotationContent = newAnno.body[newAnno.body?.length - 1]?.value;} else {// 通过外部input框编辑批注let annoBody = newAnno.body.find((item) => item.pkId === pkId);data.annotationContent = annoBody?.iptValue;data.pkId = pkId;}let annoPosition = newAnno.target.selector.find((item) => item.type === "TextPositionSelector");// 按照后端入参要求组装批注内容的结构data.annotationId = newAnno.id;data.createdBy = useUserStore().name;data.endCoordinate = annoPosition.end;data.startCoordinate = annoPosition.start;data.knwlgId = artDetails.value.pkId;data.knwlgNo = artDetails.value.knwlgNo;return data;
};// 获取批注列表并回显
const getAnnoList = () => {getAnnotationList({ knwlgId: artDetails.value.pkId }).then((res) => {recogitoList.value = res.data;  // 批注列表setTimeout(() => {r.clearAnnotations(); //清除所有批注r.setAnnotations(recogitoList.value); // 设置已有批注内容}, 500);}).catch(() => {});
};// 根据批注id在点击右侧批注列表激活文本域内批注弹窗
const selectAnnotation = (id) => {let domList = document.querySelectorAll(".r6o-annotation");let activeTop =Array.from(domList).find((item) => item.dataset.id === id && item.innerText?.length)?.offsetTop - 5;document.querySelector(".article-container").scrollTop = activeTop;r.selectAnnotation(id);
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch 版本与 CUDA 版本的兼容性示例

PyTorch 1.9.0 及以上版本支持 CUDA 11.1。PyTorch 1.8.0 支持 CUDA 11.0。PyTorch 1.7.0 支持 CUDA 10.2。PyTorch 1.6.0 支持 CUDA 10.1。PyTorch 1.5.0 支持 CUDA 10.1。PyTorch 1.4.0 支持 CUDA 10.1。PyTorch 1.3.0 支持 CUDA 10.0。PyTorch 1.2.0 支持 CUDA 9.2。PyTorch…

WITS核心价值观【创新】篇|从财务中来,到业务中去

「客尊」、「诚信」、「创新」 与「卓越」 是纬创软件的核心价值观。我们秉持诚信态度,致力于成为客户长期且值得信赖的合作伙伴。持续提升服务厚度,透过数字创新实践多市场的跨境交付,助客户保持市场领先地位。以追求卓越的不懈精神&#xf…

腾讯云点播VOD(sprintboot后端+vue前端)

1. 腾讯云点播 官网文档入口: 云点播简介_云点播购买指南_云点播操作指南-腾讯云 2. 业务需求 2.1.上传视频 2.2.浏览视频 2.3.删除视频 3. 腾讯云提供服务器上传和客户端上传。我使用springboot后端实现客户端上传视频。 3.1 后端要求 生成签名,前端拿着签名凭证,才能上…

easyui的topjui前端框架使用指南

博主今天也是第一次点开easyui的商业搜权页面,之前虽然一直在使用easyui前端框架(easyui是我最喜欢的前端ui框架),但是都是使用的免费版。 然后就发现了easyui的开发公司居然基于easyui开发出了一个新的前端框架,于是我…

AppFlow无代码轻松搭建模型Agent

随着大语言模型发展至今,如何深度开发和使用模型也有了各种各样的答案,在这些答案当中,Agent无疑是一个热点回答。 通过模型也各种插件的组合,可以让你的模型应用具备各种能力,例如,通过天气查询插件机票查…

解决卸载TabX explorer软件后导致系统文件资源管理器无法正常使用问题

最近安装了最新版本的鲁大师,安装过程中不小心同时安装了捆绑软件TabX explorer。这个软件和系统自带的文件资源管理器很像,最后弹出会员到期才发现,这个不是系统文件资源管理器,是第三方的文件资源管理器,就按正常流程…

Paillier半同态加密 【练习markdown】

Paillier半同态加密 Paillier算法介绍 基本概念 质数: 也称素数,是指只能被1和本身整除的自然数,即大于1的自然数中,除了1和它本身以外,没有其它的因数。比如2、3、5、7、11等都是质数,而4、6、8、9等则…

服务器机柜和网络机柜有什么区别

服务器机柜和网络机柜虽然在外观上可能相似,都遵循19英寸的标准,但它们的设计目的、功能、结构和特性存在明显的区别。下面是两者的主要区别: 1. 用途 服务器机柜:主要用于承载和组织服务器设备,包括主机、存储设备、交…

两个基因相关性CPTAC蛋白组数据

目录 蛋白数据下载 ①蛋白数据下载 1,TCGA-选择泛癌数据 2,TCGA-TCPA 3,CPTAC(非TCGA) ②蛋白相关性分析 1,数据整理 2,蛋白相关性分析 PCAS在线分析 蛋白数据下载 CPTAC蛋白组学数据库介绍及数据下载分析 – 王进的个人网站 (jingege.wang) ①蛋白数据下载 可…

智能化物业服务:楼层动态一目了然

通过图扑先进的可视化技术,实现对物业楼层的实时监控与高效管理。全面掌握楼层动态,优化资源配置,提升响应速度和服务质量,为业主提供智能化、便捷化的物业管理体验。

智慧校园-就业管理系统总体概述

在当代教育与信息技术深度融合的背景下,智慧校园就业管理系统成为了连接学生、高校与企业的重要纽带,它以创新的服务理念和技术手段,重塑了职业规划与就业服务的传统模式。这一系统致力于为即将步入社会的学生们提供全面、个性化的支持&#…

酒店民宿预订小程序:高效管理,便捷入住

目前,我国旅游业发展非常旺盛,同时也带动了酒店民宿的快速发展。随着互联网科技的快速发展,酒店民宿小程序层出不穷。一个高效的小程序目前已经成为了各大服务业中必不可少的环节,对于酒店民宿商家来说,线上小程序不仅…

2024年6月大众点评广州餐饮店铺POI分析20万家

2024年6月大众点评广州餐饮店铺POI共有199175家 店铺POI点位示例: 店铺id k9uiFADtAvs9EdPC 店铺名称 点都德(聚福楼店) 十分制服务评分 8.6 十分制环境评分 8.3 十分制划算评分 8.5 人均价格 77 评价数量 41673 店铺地址 惠福东路470号(富临食府对面) 大…

2024年6月17日~2024年6月26日周报

一、前言 在上周主要完成了可变形卷积的学习的部署。 本周,结合前段时间的工作与闵老师的讨论,思考了接下来的一些尝试方向。本周重新在之前的网络上尝试添加可变形卷积v4,或者将可变形卷积v2修改为可变形卷积v4。另外,继续学习了…

入职必备-Git安装(为什么Git安装包无法直接安装)

1.首先下载Mac Git应用,打开Git官网https://git-scm.com/download,执行以下操作(见下图一和下图二),然后会打开页面(见下图三),向上滑动一下会见到页面(见下图四&#xf…

定个小目标之刷LeetCode热题(30)

560. 和为 K 的子数组 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums [1,2,3], k 3 输出:2 今天刷这道题目,采…

逆变器使用手册:类型详解、安装要点与维护须知

逆变器随着可再生能源的兴起和移动电源需求的激增已成为连接直流电与交流电世界的桥梁,其重要性不言而喻。无论是太阳能发电系统的高效利用,还是汽车、游艇等移动设备的电力供应,逆变器都扮演着关键角色。然而,正确的使用方法是确…

ELK日志集成

https://www.bilibili.com/video/BV1x94y1674x/?buvidXY705117E90F73A790429C9CFBD5F70F22168&vd_source939ea718db29535a3847d861e5fe37ef

期货日内交易口诀

1、向下差价法 前提:要判断准确后市是向下行情走势。被套后,等反弹到一定的高度,估计见短线高点了,先卖出,待其下跌一段后再买回。通过这样不断地高卖低买来降低成本,最后等总资金补回了亏损,完…

Java中如何优雅地处理FileNotFoundException异常?

Java中如何优雅地处理FileNotFoundException异常? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Java开发中,文件操作是非常常见的…