如果你经常留迹于各大论坛、博客,肯定对它们的富编辑器稍有印象。纯 Javascript 富编辑器可以说是前台 JS 脚本的巅峰作品。一款完整的编辑器,其复杂的功能,会让你遇到各种头痛的浏览器兼容问题,对 JS 功底要求非常之高。

但各种经验总结,无数的解决方案,使得富编辑器能让 JS 爱好者们一次性、密集地学习到各种知认、技巧。

目前已经存在好几款成熟的富编辑器:

http://ckeditor.com/

http://www.tinymce.com/

....

但今天所导读的这款编辑器却可能很少有人听过,这是一款由国外某顶级 JS 大神 xing 独自编写,名为 wysihtml5。

官网地址:https://github.com/xing/wysihtml5

示例:

注意! 该项目虽代码精良,但已有数年未被维护,对最新几款浏览器的兼容稍显不足,本文作者在使用该编辑器时,曾遇到不少问题,但已一一解决。如果是大量修改后的版本,且使用了 Bootstrap 样式。

http://classfoo.com/app/editor

编辑效果可以前往查看

如下是本文作者修改后的,其基于 Bootstrap 样式,当然,您也可以轻松替换为其它样式(Semantic UI、foundation...)

查看具体:http://classfoo.com/app/editor

wysihtml5 优势有哪些?

1. 代码量少

tinymace.min.js 4.1.6 —— 295KB

ckeditor.min.js 4.4.5 —— 472KB

wysihtml5-0.3.0.min.js —— 110KB

  wysihtml 代码事实上还有很大压缩空间,也很容易删除不需要的代码,上面编辑器大小不包括素材、皮肤、插件、配置,最终大小可能不止于此,而 wysihtml5 可以很容易使用对应站点的皮肤,且对应的配置文件非常小,全部加起来做下优化能做到 < 100KB。

2. 容易修改

代码量少天生决定了该特定,熟悉代码后,你可以根据自已的需求做出相应调整。不考虑插件功能,也不做动态配置,不考虑国际化,不需要层层封装,架构简单太多。

3. 容易配置

包括皮肤、自定义样式、格式过滤等,不需要了解复杂的配置逻辑,一般直接改下 JSON 对象的值就行了,不用写一行代码。

4. 该有的都有

  • 通用编辑功能
  • 最低支持 IE8
  • 跨平台(官方本来说支持,但好久没维护了所以。。。不过自已改下代码量也不多)
  • 安全(沙盒、处理脏标签、脏样式,清除所有 Javascript 脚本)
  • 换肤
  • MarkDown 转换(需稍改代码即可)

废话到此,开始导读!

注意,本代码导读将分几个系列进行,欢迎关注。

简介

  1. 整体结构
  2. 全局变量
  3. 基类 Base
  4. 基础对象(数组、事件派发、对象操作、字符串)
  5. 视图
  6. 编辑面板
  7. 编辑器
  8. 工具栏
  9. Dom 封装
  10. 命令管理器
  11. 撤销管理器
  12. 范围管理器 Rangy
  13. 选择管理器 Selection
  14. 代码格式化及样式过滤
  15. 浏览器兼容性检测
  16. 工具栏语音功能
  17. 工具栏对话框

为保质量,逐步进行,请君关注 :)

【代码导读】Github 开源项目——wysihtml5 富编辑器(Bootstrap 风格)【一】的更多相关文章

  1. 如何参与一个 GitHub 开源项目?

    最近一年开源项目特别的热,很多技术大会或论坛都以开源项目作为主题进行探讨,可见这是一种趋势.而Github作为开源项目的著名托管地,可谓无 人不知,越来越多的个人和公司纷纷加入到Github的大家族里 ...

  2. 如何参与一个GitHub开源项目

    Github作为开源项目的著名托管地,可谓无人不知,越来越多的个人和公司纷纷加入到Github的大家族里来,为开源尽一份绵薄之力.对于个人来讲,你把自己的项目托管到Github上并不表示你参与了Git ...

  3. 开源项目福利-github开源项目免费使用Azure PipeLine

    微软收购Github后,很多人猜想微软可能会砍掉VSTS,然而事实VSTS并没有砍掉,关于Azure Devops的详细信息可以查看 这篇博客,如果想查看原文也可以从链接里提供的原始地址里查看. 今天 ...

  4. Android Hawk数据库 github开源项目

    Android Hawk数据库 github开源项目 Hawk 是一个很便捷的数据库  . 操作数据库仅仅需一行代码 , 能存不论什么数据类型 . github 地址: https://github. ...

  5. iOS:开发常用GitHub开源项目(持续更新)

    IOS开发常用GitHub开源项目(持续更新) 数据类 开源库 作者 简介 AFNetworking Mattt 网络请求库 ASIHTTPRequest pokeb 网络请求库 Alamofire ...

  6. 如何参与一个GitHub开源项目?

    如何参与一个GitHub开源项目? 摘要:本文是Github官如何参与一个GitHub开源项目方给出的参与Github上开源项目的一些指导,对希望加入开源社区的开发者是一个不错的参考. 最近一年开源项 ...

  7. 【Github开源项目体验】- ZFile 基于 Java 的在线网盘

    [Github开源项目体验]- ZFile 基于 Java 的在线网盘 在线云盘.网盘.OneDrive.云存储.私有云.对象存储.h5ai.上传.下载 date: 2022-08-02 addres ...

  8. 2015-2016最火的Android开源项目--github开源项目集锦(不看你就out了)

    标签: Android开发开源项目最火Android项目github 2015-2016最火的Android开源项目 本文整理与集结了近期github上使用最广泛最火热与最流行的开源项目,想要充电与提 ...

  9. Android笔记——导入Github开源项目CircleRefreshLayout

    百度n久都找不到android studio导入第三方类库的正确方法,纠结睡不着 ,最后终于蒙到了方法,原来想太多了  ---------------------------------------- ...

随机推荐

  1. 有用的java工具

    1.Jsoup html页面解析 2.FastJson java中json处理工具,类似于gson 3.jodd 类似于apache commons的一些常用工具集 4.Selenium IDE we ...

  2. 迅为4412开发板Linux驱动教程——编写简单应用调用驱动

    Linux驱动教程:http://pan.baidu.com/s/1c0hljUS 编写简单应用调用驱动--头文件 • 打印头文件 – include <stdio.h>调用打印函数pri ...

  3. 刷完OpenWrt在浏览器无法访问的解决办法

    其实问题很明显. 是因为刷了trunk版固件. 并没有集成luci. 那接下来就是装luci.但是装luci需要联网(不过其实不联网其实也是可以安装的.) 我说的联网是让路有联网.而不是网线接路由,路 ...

  4. fortune 计算公式

    fortune 计算PV值. 举例:一笔 120.00的债权; 12天还完,3.15号借款,3.16开始还款.等额本息还款计算出每天还款: 10.22 根据 现值计算公式 PV = CFn/(1+r) ...

  5. Mybatis源码分析之Mapper执行SQL过程(三)

    上两篇已经讲解了SqlSessionFactory的创建和SqlSession创建过程.今天我们来分析myabtis的sql是如何一步一步走到Excutor. 还是之前的demo    public  ...

  6. C++代码复习笔记:第三章

    getline这个方法的使用, 可以获取用户输入的一行数据, 保存到数组中: #include <iostream> #include <string> int main() ...

  7. HtmlAgilityPack 详细使用

    使用HtmlAgilityPack抓取网页数据 http://www.cnblogs.com/yxlblogs/p/3499420.html http://www.cnblogs.com/xdpxyx ...

  8. ACCESS和MSSQL-如何随机读取数据库记录

    查询语句只要这样写,就可以随机取出记录了 SQL="Select top 6 * from Dv_bbs1 where isbest = 1 and layer = 1 order by n ...

  9. 转:nginx模块开发——handler(二)

    模块上下文结构 这是一个ngx_http_module_t类型的静态变量.这个变量实际上是提供一组回调函数指针,这些函数有在创建存储配置信息的对象的函数,也有在创建前和创建后会调用的函数.这些函数都将 ...

  10. vuejs组件交互 - 02 - 事件中心管理组件间的通信

    事件中心 这个可以是一个空的全局的Vue实例,其他的组件利用这个实例emit和on自定义事件,这样组件定义了自己的事件处理方法. import Vue from 'Vue' window.eventH ...