前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >介绍一个文章划线标记小功能

介绍一个文章划线标记小功能

作者头像
2Broear
发布于 2024-03-22 01:41:14
发布于 2024-03-22 01:41:14
15400
代码可运行
举报
文章被收录于专栏:2B博客2B博客
运行总次数:0
代码可运行

文章摘要chatGPT standby chatGPT responsing..

想法

灵感来源于某次逛公众号文章的时候,在文章中偶然看到了一个下划线,经过它时还会显示多少人划线标记。感觉这个功能其实对博文也挺方便的,因为都有评论系统,感觉可以通过评论用户信息做一个多人划线标记功能,自己留作标记的同时也方便其他浏览文章的博友发现和标记文章主要相关内容。

众所周知我目前用的平台是 wordpress,所以该功能也是基于 php 环境下进行开发的,由于标记数据储存在本地而非数据库中,可以灵活应用于各类基于php框架的博客系统上(如typecho、zblog、emlog等)。唯一一点是使用了 wordpress 的文章 id 来区分不同文章页面(关于这点其实可以使用加密 location.pathname 发送到后端作为文章别名区分,后续版本可能以此更新),故若使用其他平台需要修改前端请求中的pid参数

功能简介

划线标记功能结构由文章—用户—标记三部分组成,通过wordpress文章id区分:同一篇文章下可以理论上可以存在不限量标记,但同一个用户(md5邮件区分)默认情况下仅能存在3个标记(可携带自定义参数初始化标记)。而同一个标记(内容)仅能在该文章中存在一次。(若通过某种手段重复标记某段已存在于远程记录时,后端会返回标记已存在的错误信息),另若当前选中文本在当前段落中存在多个相同字符时,前端会阻止用户提交标记。

本着只要能把功能复现就行的想法,在持续一周左右的时间后正式开始测试,目前该功能已集成到2BLOG主题最新的 #v1.3.9.2 版本中,后续将对其进行持续迭代更新,下面讲下简单实现思路。

实现思路

前端直接用的 getSelection api 执行选中标记操作(之前本想做跨浏览器兼容,后面想想太麻烦,先实现可以用了再说,反正又不是上线的东西 后面可以慢慢迭代无所叼谓),用户信息存了本地cookie(刚开始做的内容储存,后来改为用户本地校验内容)。

后端用的东西基本和我之前那篇实现gpt的思路基本是一致的,都是本地储存。唯一只是多了部分用户校验,因为涉及到用户新增和删除操作问题(毕竟所有人在评论后都可以对文章进行标记或删除)暂时只能先这么弄(虽然目前配置了文章标记次数限制,不过并没有做黑白名单限制)。

WordPress 简单实现 chatGPT 文章摘要

灵感来源于之前在浏览 HEO 博文时候偶然看到文章前有一段 AI 摘要,第三人称以打字形式来简述文章内容还是蛮酷的~ 于是拟了个把这个功能集成到 2BLOG ...

2BROEAR 21/03/2024 chatgpt | 2306 views.

用户校验

目前做了两个信息校验,一个是最基本的邮件mail(明文验证,其实刚开始的方案是有md5来做,后来因为新增了显示标记用户 gravatar 头像的需求所以不得不放弃该方案,取而代之的只能是远程明文对比验证。但是,为了防止出现邮件明文暴露后造成伪造请求的情况,在执行部分敏感操作时必须携带储存在用户本地的 timestamp 时间戳(明文)与储存在远程服务器中的ts(加密,防止远程ts暴露后获取到对应的本地ts明文)进行校验,通过后再放行相关操作。

但ts交互验证有一个明显的坏处就是:如果标记浏览器与执行操作的浏览器环境不同(即本地cookie无相关ts记录)哪怕当前是用户本人操作也无法通过远程ts验证,这种情况目前仅做了用户操作提示,暂无具体替代解决方案。

其他

这个功能目前处于测试阶段,使用过程中有任何bug欢迎反馈哟/doge。(*另附一些常用的初始化参数如下(具体参数等内容可前往 github 查看)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const custom_args = {
    static: {
        dataMax: 3, // 最大标记数量
        lineAnimate: true, // 划线动画
        lineColor: "red", // 划线颜色
        lineBold: 10, // 划线高度(标准百分比)
        lineBoldMax: 30, // 划线高度(悬浮百分比)
    },
    element: {
        effectsArea: document.querySelector('.content'), // 可选区域
        commentArea: document.querySelector('#vcomments textarea'), // 评论区域
        commentInfo: {
            userNick: document.querySelector('input[name=nick]'), // 评论用户
            userMail: document.querySelector('input[name=mail]'), // 评论邮箱
        }
    },
}
// 携带参数初始化
new marker.init(custom_args);

todo

一些預計添加或修復的待辦事項

  • 約束後端請求頻率,修復并發請求失敗但返回已完成問題
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024/03/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Newbe.Claptrap 框架入门,第四步 —— 利用 Minion,商品下单
接上一篇 Newbe.Claptrap 框架入门,第三步 —— 定义 Claptrap,管理商品库存 ,我们继续要了解一下如何使用 Newbe.Claptrap 框架开发业务。通过本篇阅读,您便可以开始学会在 Claptrap 框架中使用 Minion 进行异步的业务处理。
newbe36524
2020/08/27
4880
Newbe.Claptrap 框架入门,第四步 —— 利用 Minion,商品下单
Newbe.Claptrap框架入门,第二步——简单业务,清空购物车
本篇,我通过实现“清空购物车”的需求来了解一下如何在已有的项目样例中增加一个业务实现。
newbe36524
2023/08/23
1430
Newbe.Claptrap 框架入门,第二步 —— 简单业务,清空购物车
接上一篇 Newbe.Claptrap 框架入门,第一步 —— 创建项目,实现简易购物车 ,我们继续要了解一下如何使用 Newbe.Claptrap 框架开发业务。通过本篇阅读,您便可以开始尝试使用 Claptrap 实现业务了。
newbe36524
2020/07/20
4240
Newbe.Claptrap 框架入门,第二步 —— 简单业务,清空购物车
Newbe.Claptrap 框架入门,第一步 —— 创建项目,实现简易购物车
让我们来实现一个简单的 “电商购物车” 需求来了解一下如何使用 Newbe.Claptrap 进行开发。
newbe36524
2020/07/09
1.1K0
Newbe.Claptrap 框架入门,第一步 —— 创建项目,实现简易购物车
Newbe.Claptrap框架入门,第一步——创建项目,实现简易购物车
让我们来实现一个简单的“电商购物车”需求来了解一下如何使用 Newbe.Claptrap 进行开发。
newbe36524
2023/08/23
2440
Newbe.Claptrap框架入门,第一步——创建项目,实现简易购物车
Newbe.Claptrap 框架入门,第二步 —— 创建项目
接上一篇 Newbe.Claptrap 框架入门,第一步 —— 开发环境准备 ,我们继续了解如何创建一个 Newbe.Claptrap 项目。
newbe36524
2021/02/27
3160
Newbe.Claptrap 框架入门,第二步 —— 创建项目
使用 Tye 辅助开发 k8s 应用竟如此简单(五)
续上篇,这篇我们来进一步探索 Tye 更多的使用方法。本篇我们来了解一下如何在 Tye 中实现对分布式链路追踪。
newbe36524
2021/02/23
4310
使用 Tye 辅助开发 k8s 应用竟如此简单(五)
Newbe.Mahua.Samples.Sqlite SQLite操作实例
文本将通过实现一个记录”收到消息数量”的功能,来演示如何在本SDK中操作数据库的SQLite数据库。
newbe36524
2020/03/16
6740
只要十步,你就可以应用表达式树来优化动态调用
表达式树是 .net 中一系列非常好用的类型。在一些场景中使用表达式树可以获得更好的性能和更佳的扩展性。本篇我们将通过构建一个 “模型验证器” 来理解和应用表达式树在构建动态调用方面的优势。
newbe36524
2020/10/14
6510
只要十步,你就可以应用表达式树来优化动态调用
谈反应式编程在服务端中的应用,数据库操作优化,从20秒到0.5秒
反应式编程在客户端编程当中的应用相当广泛,而当前在服务端中的应用相对被提及较少。本篇将介绍如何在服务端编程中应用响应时编程来改进数据库操作的性能。
newbe36524
2020/06/10
8170
分布式事务 | 使用 dotnetcore/CAP 的本地消息表模式
本地消息表模式,其作为柔性事务的一种,核心是将一个分布式事务拆分为多个本地事务,事务之间通过事件消息衔接,事件消息和上个事务共用一个本地事务存储到本地消息表,再通过定时任务轮询本地消息表进行消息投递,下游业务订阅消息进行消费,本质上是依靠消息的重试机制达到最终一致性。其示意图如下所示,主要分为以下三步:
圣杰
2023/02/10
7850
分布式事务 | 使用 dotnetcore/CAP 的本地消息表模式
.NET分布式Orleans - 6 - 事件溯源
事件溯源(Event Sourcing)是一种设计模式,它记录并存储了应用程序状态变化的所有事件。
Chester Chen
2024/03/29
1230
.NET分布式Orleans - 6 - 事件溯源
MassTransit | 基于StateMachine实现Saga编排式分布式事务
状态机作为一种程序开发范例,在实际的应用开发中有很多的应用场景,其中.NET 中的async/await 的核心底层实现就是基于状态机机制。状态机分为两种:有限状态机和无限状态机,本文介绍的就是有限状态机,有限状态机在任何时候都可以准确地处于有限状态中的一种,其可以根据一些输入从一个状态转换到另一个状态。一个有限状态机是由其状态列表、初始状态和触发每个转换的输入来定义的。如下图展示的就是一个闸机的状态机示意图:
圣杰
2023/01/31
1.3K1
.NET分布式Orleans - 2 - Grain的通信原理与定义
Grain 是 Orleans 框架中的基本单元,代表了应用程序中的一个实体或者一个计算单元。
Chester Chen
2024/03/25
2170
.NET分布式Orleans - 2 - Grain的通信原理与定义
.NET分布式Orleans - 4 - 计时器和提醒
与标准的 .NET System.Threading.Timer 类相似,Orleans 的 Timer 允许在一段时间后执行特定的操作,或者在特定的时间间隔内重复执行操作。
Chester Chen
2024/03/26
1600
.NET分布式Orleans - 4 - 计时器和提醒
Xamarin.Forms读取并展示Android和iOS通讯录 - TerminalMACS客户端
完整思维导图:https://github.com/dotnet9/TerminalMACS/blob/master/docs/TerminalMACS.xmind
DDGarfield
2022/06/23
4.2K0
Xamarin.Forms读取并展示Android和iOS通讯录 - TerminalMACS客户端
MassTransit 知多少 | 基于MassTransit Courier实现Saga 编排式分布式事务
Saga 最初出现在1987年Hector Garcaa-Molrna & Kenneth Salem发表的一篇名为《Sagas》的论文里。其核心思想是将长事务拆分为多个短事务,借助Saga事务协调器的协调,来保证要么所有操作都成功完成,要么运行相应的补偿事务以撤消先前完成的工作,从而维护多个服务之间的数据一致性。举例而言,假设有个在线购物网站,其后端服务划分为订单服务、支付服务和库存服务。那么一次下订单的Saga流程如下图所示:
圣杰
2022/12/13
1.3K0
MassTransit 知多少 | 基于MassTransit Courier实现Saga 编排式分布式事务
移动商城第七篇【购物车增删改查、提交订单】
把商品加入购物车 接下来我们要做的就是将商品加入到购物车中。我们这次使用的是Cookie来将用户的信息存储起来。那为什么要用cookie呢?? 如果将购物车存储在Session,那么Session里边的值容易丢失。 存储在Cookie中,用户不需要登陆就能够查看得到购物车的数据。 那我们现在决定将购物车存储在Cookie中了,那Cookie中保存的是怎么样的字符串数据呢??? 显而易见我们第一时间想到的就是JSON JSON能够很好地将字符串转成Java对象,将Java对象转成JSON给浏览器进行显示! 看
Java3y
2018/04/02
4K0
移动商城第七篇【购物车增删改查、提交订单】
移动商城第四篇(商品管理)【添加商品续篇、商品审核和上下架、前台展示、后台筛选】
属性选项卡 第三个选项卡涉及到了我们的手机属性,因此,还是需要用到我们其他的数据库表:EB_FEATURE 继续做逆向工程: 这里写图片描述 查询出普通属性和特殊属性: <select id="s
Java3y
2018/04/02
3.5K0
移动商城第四篇(商品管理)【添加商品续篇、商品审核和上下架、前台展示、后台筛选】
asp.net web api 2.2 基础框架(带例子)
简介 这个是我自己编写的asp.net web api 2.2的基础框架,使用了Entity Framework 6.2(beta)作为ORM。 该模板主要采用了 Unit of Work 和 Rep
solenovex
2018/03/01
5K0
asp.net web api 2.2 基础框架(带例子)
推荐阅读
相关推荐
Newbe.Claptrap 框架入门,第四步 —— 利用 Minion,商品下单
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档