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

KindEditor设计思路

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for d2forum d2forum
July 18, 2012
19k

 KindEditor设计思路

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

Avatar for d2forum

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)