KindEditor 设计思路

    2012. 7. 7
KindEditor Project



定位:轻量级富文本编辑器

源码:http://github.com/kindsoft/kindeditor
Team

•   罗龙浩(Roddy)
•   www.weibo.com/luolonghao
•   luolonghao@gmail.com
•   luolonghao@hotmail.com
历史版本
KindEditor 1.0




  2005年12月
KindEditor 2.0




   2006年7月
KindEditor 3.0




   2009年1月
KindEditor 4.0




   2011年8月
Who is using?
富文本编辑器


      样式系统            UI组件




• 样式系统:Bold, Insert HTML, Hyperlink, …
• UI组件:Dialog, Menu, Tabs, Button, …
设计理念
只包含最常用的功能
只包含最常用的功能
核心不基于第三方类库



 KindEditor 4.1.1 – 28.9KB

 jQuery 1.7.2 – 32.9KB



原因:其它类库不包含Range、Command
兼容性,稳定性


  连IE6都兼容的编辑器

  稳定压倒一切



单元测试,人肉测试,自动化测试
可定制,可扩展




定制风格,自定义插件、多语言
模块化,按需加载

点击


加载



执行
文件、代码结构
目录结构
themes/
      common/
      default/
plugins/
      image/
      table/
      …
lang/
      zh_CN.js
      …
kindeditor-min.js
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
JS模块
•   Core – 基础
•   Event – 事件
•   Node – 处理Element,类似jQuery接口
•   Range – 范围,W3C标准
•   Command – 样式命令
•   Edit – 编辑框
•   Html – HTML格式化
•   Toolbar – 工具栏
•   Menu – 下拉菜单
•   Dialog – 弹出框
•   ColorPicker – 取色器
•   …
•   Main – 组装编辑器

一个模块一个文件,可单独调用
kindeditor.js代码结构

(function (window, undefined) {
  var K = function() {};
  K.range = function() {};
  K.cmd = function(){};
  K.edit = function(){};
  K.create = function(){};
  window.KindEditor = K;
})(window);
header.js代码

(function (window, undefined) {

 if (window.KindEditor) {
     return;
 }
footer.js代码


})(window);
core.js代码结构

var _VERSION = ‘4.1.1’;
var _IE = ...;
var _GECKO = …;
var _inArray = function(){ … };
var _trim = function(){ … };
var _each = function(){ … };
var _extend = function(){ … };
…

下划线(_)开头表示跨文件的变量、函数
event.js部分代码
…
if (_IE) {
    window.attachEvent('onunload', function() {
        _each(_eventData, function(key, events) {
             if (events.el) {
                    _unbind(events.el);
             }
        });
    });
}
重点模块
Node模块
   面向编辑器的jQuery缩小版
KindEditor.ready(function(K) {
   K(‘#id div’).click(function(e) {
       K(this). addClass(‘my-class’);
   });
});


Reference: http://www.kindsoft.net/docs/node.html
Range模块
               90% W3C标准
KindEditor.ready(function(K) {
   var range = K.range(document);
   range.selectNodeContents(element);
   range.insertNode(node);
});


Reference: http://www.kindsoft.net/docs/range.html
Command模块
           对应execCommand
KindEditor.ready(function(K) {
   var cmd = K.cmd(document);
   cmd.bold();
   cmd.inserthtml(‘<div>text</div>’);
});


Reference: http://www.kindsoft.net/docs/cmd.html
单元测试
QUnit
 http://localhost/kindeditor/test/cmd.html




每个模块有对应的单元测试
加粗测试(1)

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>');
});
自动化测试
Selenium
java -jar selenium-server-standalone-2.21.0.jar
加粗测试(2)

require_once '/KindEditorDriver.php';

$driver = new KindEditorDriver('test/total.html');
$driver->html('');
$driver->clickToolbar('bold');
$driver->input('abc');
equals($driver->html(), '<strong>abc</strong>');
$driver->close();
KindEditor 缺点

• HTML解析基于正则
• 有些功能基于execCommand
• 有些模块缺少单元测试
谢谢

More Related Content

PDF
编辑器设计Kissy editor
PPT
编辑器设计U editor
PDF
百度前端性能监控与优化实践
PPTX
第三方内容开发最佳实践
PPTX
广告投放代码和创意代码持续优化
PDF
Berserk js
PPT
Node.js在淘宝的应用实践
PPTX
淘宝开放产品前端实践
编辑器设计Kissy editor
编辑器设计U editor
百度前端性能监控与优化实践
第三方内容开发最佳实践
广告投放代码和创意代码持续优化
Berserk js
Node.js在淘宝的应用实践
淘宝开放产品前端实践

What's hot (20)

PPTX
Blazor 與 Radzen 同行
PPT
Kindeditor 设计思路
PDF
编辑器设计2
PDF
前端MVVM框架安全
PDF
KISSY for starter
PDF
KISSY Editor Design 2
PDF
Class 20170126
PDF
Koubei banquet 34
PDF
Kindeditor设计思路v2
PPTX
Angular 4 新手入門攻略完全制霸
PPTX
使用 Visual Studio Code 建構 JavaScript 應用程式
PDF
Node develop expirements
PPTX
使用kslite支持第三方内容开发
PDF
使用Bigpipe提升浏览速度
PDF
不一樣的 Web Server coServ Part II
PPTX
浅析浏览器解析和渲染
PDF
Web coding principle
PPTX
ASP.Net MVC Framework
PDF
Blazor Component 開發實戰
PPTX
Inside the-browser
Blazor 與 Radzen 同行
Kindeditor 设计思路
编辑器设计2
前端MVVM框架安全
KISSY for starter
KISSY Editor Design 2
Class 20170126
Koubei banquet 34
Kindeditor设计思路v2
Angular 4 新手入門攻略完全制霸
使用 Visual Studio Code 建構 JavaScript 應用程式
Node develop expirements
使用kslite支持第三方内容开发
使用Bigpipe提升浏览速度
不一樣的 Web Server coServ Part II
浅析浏览器解析和渲染
Web coding principle
ASP.Net MVC Framework
Blazor Component 開發實戰
Inside the-browser
Ad

Viewers also liked (20)

PDF
Construction Insolvency
PDF
Splinternetmarketing Ranking Report Internet Marketing
DOC
Y O G A A N D S T R E S S Dr
PDF
Chapter 02 planet earth is alive - but not well
PDF
Atténuation des risques liés aux applications mobiles afin de garantir des dé...
PPT
Simplifying social business
PPT
Techspo 2010 ver. 2
 
DOC
Berpikir Kreatif I
PPS
世界各地歌劇院
DOC
Corruption Shriniwas Kashalikar
DOC
Mauna (Silence) & Superliving Dr Shriniwas Kashalikar
PPS
絕美冰域 南極
PPS
為人的藝術
DOC
R E M E D I E S I F O U N D U S E F U L I N J O I N T P A I N S D R S...
PDF
Common Licensing Layer Build and Assist
PPT
幸運星繁體簡報
PPT
Mrs Tabby Gray
PPTX
Personal Branding For Job Seekers
PPS
光電塗鴉
PPTX
Social Monitoring Tools -- Considerations and Selection
Construction Insolvency
Splinternetmarketing Ranking Report Internet Marketing
Y O G A A N D S T R E S S Dr
Chapter 02 planet earth is alive - but not well
Atténuation des risques liés aux applications mobiles afin de garantir des dé...
Simplifying social business
Techspo 2010 ver. 2
 
Berpikir Kreatif I
世界各地歌劇院
Corruption Shriniwas Kashalikar
Mauna (Silence) & Superliving Dr Shriniwas Kashalikar
絕美冰域 南極
為人的藝術
R E M E D I E S I F O U N D U S E F U L I N J O I N T P A I N S D R S...
Common Licensing Layer Build and Assist
幸運星繁體簡報
Mrs Tabby Gray
Personal Branding For Job Seekers
光電塗鴉
Social Monitoring Tools -- Considerations and Selection
Ad

More from taobao.com (20)

PDF
百度前端性能监控与优化实践
PDF
Java script physical engine
PPTX
Html5环保小游戏
PDF
阅读类Web应用前端技术探索
PPTX
完颜:移动网站的兼容性探索
PPTX
张平:JavaScript引擎实现
PPTX
高力:19楼现有前端架构
PDF
李成银:前端编译平台
PDF
钱宝坤:多浏览器集成的JavaScript单元测试工具
PDF
张克军:前端基础架构的实践和思考
PDF
刘平川:【用户行为分析】Marmot实践
PDF
吴英杰:【用户行为分析】淘宝页面显微镜系统原理及实践
PPT
前端Mvc探讨及实践
PPT
黄希彤:【无障碍访问】Margin
PDF
何一鸣:【无障碍访问】Aria in taobao
PDF
西乔:理性的设计
PDF
杨永全:【组障碍访问】一个盲人眼中的网页内容无障碍体验与设计 大纲
PDF
More weapons, more power
PDF
无名小站首页改版 -渐进增强与css3
KEY
【前端Mvc】之豆瓣说实践
百度前端性能监控与优化实践
Java script physical engine
Html5环保小游戏
阅读类Web应用前端技术探索
完颜:移动网站的兼容性探索
张平:JavaScript引擎实现
高力:19楼现有前端架构
李成银:前端编译平台
钱宝坤:多浏览器集成的JavaScript单元测试工具
张克军:前端基础架构的实践和思考
刘平川:【用户行为分析】Marmot实践
吴英杰:【用户行为分析】淘宝页面显微镜系统原理及实践
前端Mvc探讨及实践
黄希彤:【无障碍访问】Margin
何一鸣:【无障碍访问】Aria in taobao
西乔:理性的设计
杨永全:【组障碍访问】一个盲人眼中的网页内容无障碍体验与设计 大纲
More weapons, more power
无名小站首页改版 -渐进增强与css3
【前端Mvc】之豆瓣说实践

Kind editor设计思路