狠狠撸

狠狠撸Share a Scribd company logo
KISSY Editor 设计(2)
          yiminghe@gmail.com
       kissyteam@weibo,twitter
              yiminghe@twitter

              2012.06.25 Draft
大纲
? 1. KISSY Editor 介绍

? 2. 编辑器基本原理

? 3. KISSY Editor 实践
  – 3.1 API
  – 3.2 设计
  – 3.4 使用
KISSY Editor ?
KISSY Editor



又一个开源的可视化编辑器


底层以及 UI 基于 KISSY 框架


编辑核心算法借鉴 CKEditor


应用于淘宝商品发布/店铺装修/论坛/….
KISSY Editor
KISSY Editor
? Toggle Button



? Select
KISSY Editor
? Overlay




? ContextMenu
KISSY Editor
? Bubble
编辑器基本原理
编辑器基本原理
? contentEditable
? designMode

? 使某个元素可编辑
  – Iframe.contentWindow.document.body.conten
    tEditable = true

? http://www.w3.org/TR/html5/editing.html#attr-
  contenteditable
编辑器基本原理
? document.execCommand
编辑器基本原理
? Range/Selection
  – IE (<=8)
    ? Selection: http://msdn.microsoft.com/en-
      us/library/ie/ms535869(v=vs.85).aspx
       – createRange/clear/empty


    ? Range: http://msdn.microsoft.com/en-
      us/library/ie/ms535872(v=vs.85).aspx
       – compareEndPoints/move/select/parentElement
编辑器基本原理
? Range/Selection
  – W3c
  – http://www.w3.org/TR/DOM-Level-2-
    Traversal-Range/ranges.html
  – Selection
    ? rangeCount/getRangeAt/addRange/removeRange
  – Range
    ? startContainer/startOffset/endContainer/endOffset
编辑器基本原理
编辑器基本原理
? 根据规范由 javascript 实现浏览器内置的编
  辑算法
 – http://dvcs.w3.org/hg/editing/raw-file/tip/editing.html

                       Body


        P         P                   p


        12        34          56   strong      89


                                      7
编辑器基本原理
? 编辑 api
  – 加粗
  – xhtml DTD
                            Body


               P              P               p


           1       strong   strong   strong       9


                     2       34      5678
编辑器基本原理
? 编辑 api
  – 标题 h1


                   p


            123   strong   789


                   456
编辑器基本原理
? 编辑 api
  – 标题 h1


                  h1


            123   strong   789


                   456
其他兼容性问题
? Copy/paste     <font face="宋体"></font><p
                 style="margin: 0cm 0cm 0pt;"
  – Word         class="MsoNormal"><span lang="EN-
                 US"><font face="Calibri">123<b
                 style="mso-bidi-font-weight:
                 normal;">456</b>789<?xml:namespace
? Html parser    prefix = o ns = "urn:schemas-microsoft-
                 com:office:office"
                 /><o:p></o:p></font></span></p><font
                 face="宋体"></font>



  123456789
                 <p>123<strong>456</strong>789</p>
其他兼容性问题
? 换行
 – P / Br ?
                   table


                    tr


                    td


                  123456
其他兼容性问题
? 图片选择
 – 输入内容
   ? IE/firefox/chrome


? 失去焦点选区丢失
 – IE


? ………
KISSY Editor

? API

? 设计

? 使用
KISSY Editor
? 基于 KISSY
 – 模块化机制
 – 组件基础设施
   ?   事件              KISSY Component
   ?   属性
   ?   方法
   ?   生命周期
 – 使用 KISSY UI           KISSY Editor
API
KISSY.use(“editor”, function (S,Editor){
 S.use(“plugin1,plugin2”, function (S,P1,P2){
    new Editor({
    // …
    plugins:[
        new P1({…}), P2
    ]
});});});


不启用自动 combine 时推荐 use ”editor/full”
继承属性
? width/height
  – 高宽(包括工具栏与状态栏)


? focused
  – 是否编辑区起始具备焦点


? prefixCls
  – 编辑器 UI 样式前缀
继承属性
? xclass
  – 组件嵌套时的快速生成

  new Overlay({

   children:[{

        xclass: ’editor’,

        width:500,

        height:500

   }]
  });
继承属性
? srcNode
  – 从已有节点生成编辑器组件



? render
  – 编辑器组件渲染容器
继承属性
? listeners
  – 方便绑定事件
  new Editor({

    listeners:{

     focus: function(){}
  }}).render;



? plugins
  – 添加插件
编辑器属性
? customStyle
  – 作用于编辑区域的特有样式


? customLink
  – 作用于编辑区域的特有样式链接


? attachForm
  – 绑定所属 form submit 事件
编辑器方法
? addButton
  – 添加按钮到工具栏
? addSelect
  – 添加 select 到工具栏


? insertHtml
  – 插入 html 到光标位置
? execCommand
  – 执行自定义命令
设计
Editor & plugins


button   select     menu    overlay           Edit API
                                                               Html
                                                              Parser
           component                   range      selection     &
                                                              xhtml
                                                               dtd
 dom        event          node          ua          base


                            KISSY Loader
模块
? 所有代码都是模块



KISSY.add("editor/range",function(S,DOM){
},{
requires:['dom']
});
懒加载
? 懒加载非初始模块
懒加载
? 使用 KISSY.use


KISSY.add("editor/plugin/image",function(S,DOM){
  xx.on("click",function(){
      S.use("editor/plugin/image/dialog");
  });
});
按需自动 combo
? 仅加载需要的模块
  – 最优的链接数与代码引入大小
KISSY.use("editor",function(){
KISSY.use("editor/plugin/fontSize/,editor/plugin

/fontFamily/",

function(){

// use plugins

});});
按需自动 combo
无障碍
? Aria in KISSY UI
  – Tab 支持
  – 所有功能键盘可访问
  – Aria 标记


? 编辑区域快捷键
插件
? 具备介入组件生命周期能力的普通模块




  createDOM   renderUI    bindUI   syncUI
插件示例
KISSY.add("editor/plugin/bold/index",function(){
 function FontSize(cfg){this.cfg=cfg;}
 FontSize.prototype={
      renderUI:function(editor){
          editor.addButton(...);
      }
 };
 return FontSize;
});
消息通信
? 核心 ? 插件
                                         plugin2
? 插件 ? 插件


editor.fire("selectionChange
");                                      editor
editor.on("selectionChange",
function(){                    plugin3             Plugin1
});
命令系统
? document.execCommand
? editor.execCommand

 editor.execCommand("fontSize","1
 8px");                                        fontFamily

 editor.execCommand("fontFamily",
                                    fontSize                bold
 "kaiti");


 editor.execCommand("bold",true);
                                                editor
单元测试
? 部分核心 jasmine
单元测试
describe("cloneContents", function () {


  it(“works for simple text node”, function () {
   var range = new Range(document);
   range.setStart(text, 2);
   range.setEnd(text, 5);
   var f = range.cloneContents();
   var newDiv = KISSY.all("<div>").appendTo("body");
   newDiv.append(f);


   expect(myHtml(newDiv)).toBe("345");
  });
});
使用
引入脚本


<script src=/slideshow/ss-13442557/13442557/&
min.js'></script>


<!-- or -->

<script src='http://a.tbcdn.cn/s/kissy/1.3.0/kissy-
min.js'></script>
载入模块、插件

// 自动 combo
KISSY.config("combine",true);
// editor 核心/种子文件
KISSY.use("editor",function(S,Editor){
 // editor 插件
 S.use("editor/plugin1,editor/plugin2...",
 function(S,Plugin1,Plugin2){});
});
初始化
? 从已有节点产生
 new Editor({
  width:,
  height:,
  srcNode:'#editor',
  plugins:[
       new Plugin1({..}),
       Plugin2
  ]
 });
初始化
? 全新创建编辑器
 new Editor({
  width:,
  height:,
  render:'#editorContainer',
  plugins:[
       new Plugin1({..}),
       Plugin2
  ]
 });
定制插件
? 实现指定接口的普通模块

?   editor.addButton
?   editor.addSelect
?   editor.execCommand
?   editor.insertHtml
回顾
? 了解 KISSY Editor

? 编辑器基本原理

? KISSY Editor 设计
下一步
? I18n 全球化

? 主题 Theme 架构

? 单元测试完善

? 紧密结合 KISSY UI
KISSY Editor Design 2
Ad

Recommended

PDF
编辑器设计2
yiming he
?
PDF
编辑器设计Kissy editor
taobao.com
?
PDF
Kind editor设计思路
taobao.com
?
PPTX
第叁方内容开发最佳实践
taobao.com
?
PPTX
广告投放代码和创意代码持续优化
taobao.com
?
PPT
编辑器设计U editor
taobao.com
?
PPTX
改善 Angular 開發流程:你所不知道的 Schematics 程式碼產生器
Chieh Kai Yang
?
PDF
View 與 Blade 樣板引擎
Shengyou Fan
?
PDF
Composer 套件管理
Shengyou Fan
?
PPTX
Angular 7 全新功能探索 (Angular Taiwan 2018)
Will Huang
?
PPTX
淘宝开放产物前端实践
taobao.com
?
PDF
CRUD 綜合運用
Shengyou Fan
?
PPTX
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
Will Huang
?
PDF
笔补肠办补驳别安装与使用
Shengyou Fan
?
PDF
CRUD 綜合運用
Shengyou Fan
?
PPTX
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
Will Huang
?
PPTX
鲍濒颈飞别产设计分享
modou li
?
PPT
狈辞诲别.箩蝉在淘宝的应用实践
taobao.com
?
PDF
HTML 語法教學
Shengyou Fan
?
PDF
工作坊总结
Shengyou Fan
?
PDF
Migrations 與 Schema 操作
Shengyou Fan
?
PDF
AngularJS training in Luster
Jason Chung
?
PDF
应用程式部署
Shengyou Fan
?
PDF
Package 安裝與使用
Shengyou Fan
?
PDF
使用 Controller
Shengyou Fan
?
PDF
开发流程与工具介绍
Shengyou Fan
?
PPTX
Study4.TW .NET Conf 2018 - Fp in c#
Chieh Kai Yang
?
PDF
使用 Controller
Shengyou Fan
?
PPTX
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
Will Huang
?
KEY
a glance of Javascript module
zipeng zhang
?

More Related Content

What's hot (20)

PDF
Composer 套件管理
Shengyou Fan
?
PPTX
Angular 7 全新功能探索 (Angular Taiwan 2018)
Will Huang
?
PPTX
淘宝开放产物前端实践
taobao.com
?
PDF
CRUD 綜合運用
Shengyou Fan
?
PPTX
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
Will Huang
?
PDF
笔补肠办补驳别安装与使用
Shengyou Fan
?
PDF
CRUD 綜合運用
Shengyou Fan
?
PPTX
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
Will Huang
?
PPTX
鲍濒颈飞别产设计分享
modou li
?
PPT
狈辞诲别.箩蝉在淘宝的应用实践
taobao.com
?
PDF
HTML 語法教學
Shengyou Fan
?
PDF
工作坊总结
Shengyou Fan
?
PDF
Migrations 與 Schema 操作
Shengyou Fan
?
PDF
AngularJS training in Luster
Jason Chung
?
PDF
应用程式部署
Shengyou Fan
?
PDF
Package 安裝與使用
Shengyou Fan
?
PDF
使用 Controller
Shengyou Fan
?
PDF
开发流程与工具介绍
Shengyou Fan
?
PPTX
Study4.TW .NET Conf 2018 - Fp in c#
Chieh Kai Yang
?
PDF
使用 Controller
Shengyou Fan
?
Composer 套件管理
Shengyou Fan
?
Angular 7 全新功能探索 (Angular Taiwan 2018)
Will Huang
?
淘宝开放产物前端实践
taobao.com
?
CRUD 綜合運用
Shengyou Fan
?
快快樂樂學會 Angular 2 網站開發框架 (Modern Web 2016)
Will Huang
?
笔补肠办补驳别安装与使用
Shengyou Fan
?
CRUD 綜合運用
Shengyou Fan
?
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
Will Huang
?
鲍濒颈飞别产设计分享
modou li
?
狈辞诲别.箩蝉在淘宝的应用实践
taobao.com
?
HTML 語法教學
Shengyou Fan
?
工作坊总结
Shengyou Fan
?
Migrations 與 Schema 操作
Shengyou Fan
?
AngularJS training in Luster
Jason Chung
?
应用程式部署
Shengyou Fan
?
Package 安裝與使用
Shengyou Fan
?
使用 Controller
Shengyou Fan
?
开发流程与工具介绍
Shengyou Fan
?
Study4.TW .NET Conf 2018 - Fp in c#
Chieh Kai Yang
?
使用 Controller
Shengyou Fan
?

Similar to KISSY Editor Design 2 (20)

PPTX
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
Will Huang
?
KEY
a glance of Javascript module
zipeng zhang
?
PDF
Kissy design
yiming he
?
PDF
美团前端架构介绍
pan weizeng
?
PPT
富文本编辑器在互联网上的应用
luolonghao
?
PPTX
ASP.NET MVC 6 新功能探索
Will Huang
?
PDF
Simple kissy1.3
yiming he
?
PDF
Kissy editor开发与设计
yiming he
?
PDF
4. Go 工程化实践-0124-v2.pdf
ssuserd6c7621
?
PPTX
ASP.NET Core 6.0 全新功能探索
Will Huang
?
DOC
网易相册前端页面开发规范2010版
昌里大金猪 Luke
?
PPT
Kindeditor 设计思路
luolonghao
?
PDF
Berserk js
taobao.com
?
PDF
Template mb-kao
xwcoder
?
PDF
kissy@2013
yiming he
?
PDF
KISSY for starter
yiming he
?
PDF
百度前端性能监控与优化实践
Welefen Lee
?
PDF
百度前端性能监控与优化实践
taobao.com
?
PDF
Introduction to MVC of CodeIgniter 2.1.x
Bo-Yi Wu
?
PPT
Osgi Intro
Ching Yi Chan
?
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
Will Huang
?
a glance of Javascript module
zipeng zhang
?
Kissy design
yiming he
?
美团前端架构介绍
pan weizeng
?
富文本编辑器在互联网上的应用
luolonghao
?
ASP.NET MVC 6 新功能探索
Will Huang
?
Simple kissy1.3
yiming he
?
Kissy editor开发与设计
yiming he
?
4. Go 工程化实践-0124-v2.pdf
ssuserd6c7621
?
ASP.NET Core 6.0 全新功能探索
Will Huang
?
网易相册前端页面开发规范2010版
昌里大金猪 Luke
?
Kindeditor 设计思路
luolonghao
?
Berserk js
taobao.com
?
Template mb-kao
xwcoder
?
kissy@2013
yiming he
?
KISSY for starter
yiming he
?
百度前端性能监控与优化实践
Welefen Lee
?
百度前端性能监控与优化实践
taobao.com
?
Introduction to MVC of CodeIgniter 2.1.x
Bo-Yi Wu
?
Osgi Intro
Ching Yi Chan
?
Ad

More from yiming he (20)

PDF
kissy 1.5 progress
yiming he
?
PDF
kissy at alibaba
yiming he
?
PDF
kissy modularization part2
yiming he
?
PDF
kissy modularization part1
yiming he
?
PDF
KISSY @ 2013-2
yiming he
?
PDF
KISSY 1.4.0 released
yiming he
?
PDF
callSuper in kissy
yiming he
?
PDF
KISSY XTemplate
yiming he
?
PDF
Introduction to kissy for adc 2013
yiming he
?
PDF
Kissy component system
yiming he
?
PDF
KISSY@2013.05
yiming he
?
PDF
kissy@2013.03
yiming he
?
PDF
KISSY 1.3-released
yiming he
?
PDF
Hujs 总结
yiming he
?
PDF
Kissy in-progress
yiming he
?
PDF
Kissy dpl-practice
yiming he
?
PDF
KISSY Component API Design
yiming he
?
PDF
Kissy autocomplete
yiming he
?
PDF
KISSY_Component
yiming he
?
PDF
kissy-past-now-future
yiming he
?
kissy 1.5 progress
yiming he
?
kissy at alibaba
yiming he
?
kissy modularization part2
yiming he
?
kissy modularization part1
yiming he
?
KISSY @ 2013-2
yiming he
?
KISSY 1.4.0 released
yiming he
?
callSuper in kissy
yiming he
?
KISSY XTemplate
yiming he
?
Introduction to kissy for adc 2013
yiming he
?
Kissy component system
yiming he
?
KISSY@2013.05
yiming he
?
kissy@2013.03
yiming he
?
KISSY 1.3-released
yiming he
?
Hujs 总结
yiming he
?
Kissy in-progress
yiming he
?
Kissy dpl-practice
yiming he
?
KISSY Component API Design
yiming he
?
Kissy autocomplete
yiming he
?
KISSY_Component
yiming he
?
kissy-past-now-future
yiming he
?
Ad

KISSY Editor Design 2