Upgrade to Pro — share decks privately, control downloads, hide ads and more …

KindEditor设计思路

d2forum
July 18, 2012
19k

 KindEditor设计思路

KindEditor 属于轻量级富文本编辑器,不基于任何类库,初始加载 JS 文件被 gizp 压缩后只有 29 KB,最快的加载速度和流畅的操作体验是 KindEditor 一直追求的设计理念。 富文本编辑器几乎用到所有DOM API,开发过程中会碰到无数陷阱,要不停地打补丁,所以保持功能和稳定性的前提下,保持较小的体积是富文本编辑器的一大难题。 KindEditor 有自己独特的设计思想,也借鉴了其它类库的优秀设计,这些思想决定了代码的组织方式,本主题通过具体代码和例子向大家分享 KindEditor 的设计思想和实现原理。

d2forum

July 18, 2012
Tweet

Transcript

  1. JS源文件 • header.js 1KB • core.js 7KB • event.js 9KB

    • node.js 14KB • range.js 22KB • cmd.js 23KB • edit.js 9KB • toolbar.js 4KB • menu.js 3KB • dialog.js 5KB • … • main.js 42KB • footer.js 1KB 执行ant,生成kindeditor-min.js
  2. • Core – 基础 • Event – 事件 • Node

    – 处理Element,类似jQuery接口 • Range – 范围,W3C标准 • Command – 样式命令 • Edit – 编辑框 • Html – HTML格式化 • Toolbar – 工具栏 • Menu – 下拉菜单 • Dialog – 弹出框 • ColorPicker – 取色器 • … • Main – 组装编辑器 一个模块一个文件,可单独调用 JS模块
  3. kindeditor.js代码结构 (function (window, undefined) { var K = function() {};

    K.range = function() {}; K.cmd = function(){}; K.edit = function(){}; K.create = function(){}; window.KindEditor = K; })(window);
  4. core.js代码结构 var _VERSION = ‘4.1.1’; var _IE = ...; var

    _GECKO = …; var _inArray = function(){ … }; var _trim = function(){ … }; var _each = function(){ … }; var _extend = function(){ … }; … 下划线(_)开头表示跨文件的变量、函数
  5. KindEditor.ready(function(K) { K(‘#id div’).click(function(e) { K(this). addClass(‘my-class’); }); }); Node模块

    Reference: http://www.kindsoft.net/docs/node.html 面向编辑器的jQuery缩小版
  6. test('cmd.bold', function() { var div = K('<div/>').html(‘abc'); var range =

    K.range(document); range.selectNodeContents(div[0]); K.cmd(range).bold(); equals(range.html(), '<strong>abc</strong>'); }); 加粗测试(1)