在 github issue 这里发评论,有两个功能每天实在离不了。第一个就是如果敲 @,后面可以自动补全参与讨论的用户名。第二个是,发评论的时候,我不用再去伸手够鼠标点发布按钮,而是可以顺手一个 Cmd+Enter 就搞定了。这里, 咱俩也来做做这两个小而美的功能。

Css Fix

不过,先来看看这个评论框,输入框和按钮总会出现蓝边,这个不太好看。有经验的前端会一眼看出问题所在。现在假设咱们不知道发生了什么,看看如何来自己定位这个问题。

首先来看到底是哪个状态下会出现蓝边呢?打开 devtools,选中这个 element,点击右侧的小箭头,试一下。发现是 :focus 这个状态的时候会有蓝边。对应的 css 是浏览器自动生成的 outline:xxx

这样,解决方法就简单了,就是到 common.css.scss 中的 form 样式的花括号内部,添加

form {
  ...
  * {
    &:focus {
      outline: none;
    }
  }
  ...
}

Atwho

需要用到 jquery-atwho-rails gem

Gemfile 中添加

gem 'jquery-atwho-rails'

不要忘记运行 bundle 命令来安装。

application.js 中来添加

//= require jquery.atwho

当然是应该在 jquery 加载之后的位置。

如果你发现 css 看起来很乱,那一定是忘了在 application.css 中添加

*= require jquery.atwho

关键的一步,到 _comment_box.html.erb 的末尾添加

<script>
  var commenter_exist = [];
  $('.reply .name a').each(function() {
    if($.inArray($(this).text(), commenter_exist) < 0) {
      commenter_exist.push($(this).text());
    }
  });
  $('textarea').atwho({ at: "@", 'data': commenter_exist });
</script>

快捷键

jquery.hotkeys 是一个 js 库,相应的 gem 有一年多没更新了,所以还是直接把 js 添加进源码吧。

下载 这个文件 放到 app/assets/javascript/vendor/ 目录下,然后在 application.js 中添加

//= require vendor/jquery.hotkeys

同样是要放在 require jquery 之后。

到 _comment_box.html.erb 的末尾添加

<script>
  $(".reply textarea#comment_content").keydown(function(e) {
    if ((e.ctrlKey||e.metaKey) && e.keyCode == 13) {
      $(".reply input[type=submit]").click();
    }
  });
</script>

13 对应回车键,ctrKey 对应 ctrl,metaKey 在 Mac 下对应 Command 键, Windows 下应该对应 Window 键。 到 源码 中可以看到更多的键值。

好,这一集就是这些了,休息,休息一会。