gitment icon indicating copy to clipboard operation
gitment copied to clipboard

初始化评论框方案讨论

Open ystyle opened this issue 8 years ago • 16 comments

我不太建议使用插件或cli工具之类的. 插件的话, 博客不止hexo, Jekyll. 这样照顾不了那么多博客工具.

cli的话. 有些博客还得抓取所有连接才行. 所有我写了个简单的方案, 大家一起讨论一下.

加载部分

  1. 加载评论框[不管有没有初始化都加载][可自定义在评论上边还是下边]
  2. GET /repos/:owner/:repo/issues 利用 [标签] 列出当前文章标题的issues
  3. 判断每个issue的[body|body_html]中是否存在当前页面连接[可自定义连接]

    <a href="http://demo.com/post/1" data-url="/post/1">http://demo.com/post/1</a> 可增加功能, 判断href和当前页面域名不一致时更新issue , 当更换域名时所有用

  4. 找到了就使用GET /repos/:owner/:repo/issues/:number/comments加载评论内容, 并记录当前评论为初始化成功
  5. 没找到就不加载评论, 也不提示没初始化什么的. 并记录当前评论为未初始化[未创建issue]

评论部分

  1. 用户评论, 判断 [初始化状态] 已初始化的直接提交评论
  2. 如果未初始化, 则先调用POST /repos/:owner/:repo/issues 创建issue[初始化], 创建成功后提交评论

ystyle avatar Apr 11 '17 02:04 ystyle

其实评论中的issue谁来创建都没什么关系的吧?

ystyle avatar Apr 11 '17 02:04 ystyle

如果是其他人创建的 issue,那他可以任意修改 issue 的内容,其他用户就无法知道页面对应的是哪个 issue。而且还能 lock conversation。

imsun avatar Apr 11 '17 02:04 imsun

搜索接口的第二个建议: 利用 GET /search/issues 的(高阶搜索接口中的)project=repo&q=in:title 应该可以做到只搜索标题, 这样就不会创建太多标签.

ystyle avatar Apr 11 '17 02:04 ystyle

@imsun 确实是个问题, 并不是所有人都那么的尊守规则.

ystyle avatar Apr 11 '17 02:04 ystyle

标题也都是可以改的。而且搜索 API 是有限制的。

imsun avatar Apr 11 '17 02:04 imsun

那创建issue的接口里, 标签是可以填的吧? 把这些元数据都扔标签里? 创建后是不是标签只能由所有者才能改?

ystyle avatar Apr 11 '17 02:04 ystyle

普通用户没有创建新标签的权限。

imsun avatar Apr 11 '17 02:04 imsun

反正owner的key什么的都有,初始化时应该可以直接让owner创建吧?

dontpanic92 avatar Apr 11 '17 14:04 dontpanic92

@dontpanic92 不一样的, 那个key只是属于应用的身份, 并不是所有者的登陆凭证, 无法用来操作的

要登陆后才可以, 但别人评论时登陆的并不是所有者的帐号

ystyle avatar Apr 12 '17 03:04 ystyle

  1. 由仓库所有者创建一个标题为博客域名的issue,以下称索引页
  2. 内容[body]为文章列表连接评论issue的#id号,以下称(评论)索引,第一楼的内容可以自行写些提示语,比如禁止在本issue回复任何内容
  3. 一篇博客可以有多个issue评论,多个时在文章索引列表下新建的子级列表 示例
## [文章标题](文章链接)//这里用顶级列表也行, 这里还是建议加个上唯一文章标记, 因为换域名时真的好麻烦.. 
- [博客第一楼回复内容](对应issue的链接)
- [博客第二楼回复内容](对应issue的链接)
  1. 新的issue评论相当于贴吧中的一楼,回复相当于楼中楼,close评论也加载到页面, 新建的issue还是按以前的方法(在一楼添加对应文章的标记)

  2. 所有者查看评论列表每个主楼层(issue)有个按钮同步楼层数据到索引页。

  3. 索引的issue页每篇文章的索引可以直接占用一个回复,并在同步索引时删除创建者不是所有者的回复

  4. 评论加载查询顺序变为:

    1. 用当前博客域名查询索引页的issue地址, 并在索引页评论中查询到当前url的评论连接(只查所有者创建的回复).
    2. 同时也查询没有同步在索引页的新issue, 建议优先显示未同步索引的数据
  5. 所有者查看时, 在主楼层添加删除按钮, 以便在索引页删除索引, 并close掉issue, 删除索引用另一种列表表示. 然后7.2时不加载删除列表中的评论

这样应该就可以做到控制了, #id号的链接并不能修改. 做过索引之后原issue想怎么改都没关系了. 回复者解决问题后的乱改了的话, 可以把该回复删除掉, 毕竟回复者这么做的原因也可能是不希望再显示吧.

ystyle avatar Apr 20 '17 18:04 ystyle

@imsun 这个方案怎么样? 应该可以实现吧

ystyle avatar Apr 20 '17 18:04 ystyle

能否自动初始化呢,手工显得麻烦。

panxw avatar Jul 07 '17 04:07 panxw

现在有自动初始化的方案么?我看隔壁的Gitalk貌似是自动的。

newdee avatar Sep 18 '17 11:09 newdee

同问,有自动初始化方案吗?

ithack avatar Oct 19 '17 02:10 ithack

来个自动化的:gitment自动初始化

主要是做了2点:

  • 自动初始化(注意token的保存。。)
  • 使用md5(window.location.pathname)作为KEY,以保证50字符

madordie avatar Aug 30 '18 06:08 madordie

自己写了个脚本,加到那个 script 标签中就可以了 :)

  // Auto Initialize Comments

  let cmtBtns = document.getElementsByClassName('gitment-comments-init-btn');
  let isClicked = false;

  let timer = setInterval(() => {
    Array.prototype.forEach.call(cmtBtns, item => {
      item.click();
      isClicked = true;
      if(isClicked) {
        clearInterval(timer);
        console.log('Clear timer.')
      }        
    })
  }, 1000)

loveminimal avatar Dec 01 '19 09:12 loveminimal