【代码导读】Github 开源项目——wysihtml5 富编辑器(Bootstrap 风格)【二】

如果您意外进入该页面,或许从下述链接开始更容易理解:

【代码导读】Github 开源项目——wysihtml5 富编辑器(Bootstrap 风格)【一】

1. 整体结构

在 wysihtml5 中,所有对象受 wysihtml5 命令空间保护,从其初始化定义看,整个代码架构一目了然:

https://github.com/xing/wysihtml5/blob/master/src/wysihtml5.js

 1 var wysihtml5 = {
 2   version: "0.4.0pre",
 3
 4   // namespaces
 5   commands:   {},
 6   dom:        {},
 7   quirks:     {},
 8   toolbar:    {},
 9   lang:       {},
10   selection:  {},
11   views:      {},
12
13   INVISIBLE_SPACE: "\uFEFF",
14
15   EMPTY_FUNCTION: function() {},
16
17   ELEMENT_NODE: 1,
18   TEXT_NODE:    3,
19
20   BACKSPACE_KEY:  8,
21   ENTER_KEY:      13,
22   ESCAPE_KEY:     27,
23   SPACE_KEY:      32,
24   DELETE_KEY:     46
25 };

1.1. editor(编辑器类)

https://github.com/xing/wysihtml5/blob/master/src/editor.js

wysihtml5.Editor 编辑器类未在全局空间 wysihtml5 中直接初始化给出。它是整个编辑器的总控模块执行入口,通过调用其构造函数便能创建一个编辑器对象,且保证同一页面中的各个编辑器互不影响。

该类可以接收不同的配置项来修改编辑器的默认行为,且向外导出大量事件。

它是 app 与编辑器之前的通信结点。

快速初始化一个默认编辑器:

1 <script>
2 var editor = new wysihtml5.Editor("wysihtml5-textarea", { // id of textarea element
3   toolbar:      "wysihtml5-toolbar", // id of toolbar element
4   parserRules:  wysihtml5ParserRules // defined in parser rules set
5 });
6 </script>

1.2 views(视图命名空间)

该命名空间用于管理以下几个类:

  • wysihtml5.views.View
    https://github.com/xing/wysihtml5/blob/master/src/views/view.js
    视图类,编辑器与编辑面板之间的抽象层,主要用于切换代码视图与编辑面板视图。
  • wysihtml5.views.Composer
    https://github.com/xing/wysihtml5/blob/master/src/views/composer.js
    编辑面板类,由其构造产生的对象可以直接对应一个编辑区(即 iframe),用于控制一个编辑区的样式及行为,同时提供了访问编辑区中内容的接口。其创建时,会初始化沙箱,同时创建选择管理器、命令管理器、自动键接管理器、对象大小调整管理器、撤销管理器、换行管理器。
    它通过 wysihtml5.views.Composer.prototype.observe 监控编辑区中的事件,wysihtml5.views.Composer.prototype.style 管理编辑区显示样式、重置 placeholder、与 textarea 同步 focus/blur 事件。
    访问连接,可见如果效果:

    前往查看:http://classfoo.com/app/editor
  • wysihtml5.views.Synchronizer
    保证编辑面版与 textarea 元素中的内容永远一致。
  • wysihtml5.views.Textarea
    提供接口访问 textarea 元素。

1.3 wysihtml5.toolbar.Toolbar(工具栏类)

https://github.com/xing/wysihtml5/blob/master/src/toolbar/toolbar.js

管理编辑器中的工具栏,响应按钮事件,并转换成对应的命令发送给 wysihtml5.views.Composer 。

通过成员 wysihtml5.toolbar.Speech 提供语音功能。

通过成员 wysihtml5.toolbar.Dialog 实现对话框,实现除了点击之外的另一种交互输入,可以用于实现复杂的插件。

前往查看:http://classfoo.com/app/editor

1.4 wysihtml5.commands(命令命名空间)

https://github.com/xing/wysihtml5/blob/master/src/commands/formatBlock.js

将工具栏触发的事件转换成对应的命令,及实现撤销、重做命令。

1.5 wysihtml5.selection (选择器)

实现编辑过程中的范围选中功能,主要是由于浏览器自带的 window.getSelection 存在很多问题,当前主要基于外部库 Rangy 实现。

1.6 wysihtml5.dom(dom 操作)

大量 dom 操作,如果替换成 Jquery 实现,应该能减少不小代码体积。

https://github.com/xing/wysihtml5/tree/master/src/dom

1.7 wysihtml5.lang(语法命名空间)

https://github.com/xing/wysihtml5/tree/master/src/lang

实现几种常用的语法:

数组:

https://github.com/xing/wysihtml5/blob/master/src/lang/array.js

对象:

https://github.com/xing/wysihtml5/blob/master/src/lang/object.js

字符串:

https://github.com/xing/wysihtml5/blob/master/src/lang/string.js

事实派发:

https://github.com/xing/wysihtml5/blob/master/src/lang/dispatcher.js

1.8 wysihtml5.quirks

该命名空间中的内容主要用于修复、过滤格式。

时间: 2024-08-24 23:09:54

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

AS中导入GitHub开源项目SlidingMenu总结,此方法有效,但是太耗时间。 「我用了半个多小时」

AS中导入GitHub开源项目SlidingMenu总结,我开始AS导入SlidingMenu的时候也百度了很多文章,写的都不是很详细,所以导入成功后,写了这篇文章,希望对想用AndroidStudio导入SlidingMenu的小伙伴有所启发. 先上最终效果图动画 1,下载SlidingMenu(https://github.com/jfeinstein10/SlidingMenu) 2.新建AS项目,把SlidingMenu-master中的library文件夹(我把这个文件夹重命名为sli

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

IOS开发常用GitHub开源项目(持续更新) 数据类 开源库 作者 简介 AFNetworking Mattt 网络请求库 ASIHTTPRequest pokeb 网络请求库 Alamofire cnoon Swift简洁网络请求库 SBJson stig Json解析引擎 JSONKit johnezang Json解析引擎 MJExtension CoderMJLee 字典转模型框架 KissXML robbiehanson XML解析 RNCryptor rnapier AES加密 F

如何参与一个GitHub开源项目

最近一年开源项目特别的热,很多技术大会或论坛都以开源项目作为主题进行探讨,可见这是一种趋势.而Github作为开源项目的著名托管地,可谓无人不知,越来越多的个人和公司纷纷加入到Github的大家族里来,为开源尽一份绵薄之力.对于个人来讲,你把自己的项目托管到Github上并不表示你参与了Github开源项目,只能说你开源了自己的项目,可以任别人自由下载. 那么该如何参与Github的开源项目呢?相信很多人都有这方面的疑问,网上也有一些参差不齐的教程教大家如何"Pull Request"

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

如何参与一个GitHub开源项目? 摘要:本文是Github官如何参与一个GitHub开源项目方给出的参与Github上开源项目的一些指导,对希望加入开源社区的开发者是一个不错的参考. 最近一年开源项目特别的热,很多技术大会或论坛都以开源项目作为主题进行探讨,可见这是一种趋势.而Github作为开源项目的著名托管地,可谓无人不知,越来越多的个人和公司纷纷加入到Github的大家族里来,为开源尽一份绵薄之力.对于个人来讲,你把自己的项目托管到Github上并不表示你参与了Github开源项目,只能

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

微软收购Github后,很多人猜想微软可能会砍掉VSTS,然而事实VSTS并没有砍掉,关于Azure Devops的详细信息可以查看 这篇博客,如果想查看原文也可以从链接里提供的原始地址里查看. 今天要介绍的是做Azure devops的ci部分:Azure Pipeline. VSTS升级到Azure Devops之后对开源开发者带来的重大利好消息就是Github开源项目可以免费,无限时和并行运行10个CI/CD作业. 下面将简要介绍Azure PipeLine以及如何把Azure PipeL

GitHub开源项目总结

GitHub开源项目总结,有需要的朋友可以参考下 GitHub开源项目android-styled-dialogs GitHub开源项目之changelog GitHub开源项目之AppRater GitHub开源项目之Android四次元(新浪微博客户端) GitHub开源项目之高仿"遇见" GitHub开源项目之Twitter客户端源码 GitHub开源项目之Jamendo音乐播放器 GitHub开源Android客户端 GitHub开源项目Android之Bootstrap Gi

使用 GitHub 开源项目申请 IntelliJ License

一.写在前面 这次要介绍的是通过使用 GitHub 上的开源项目来申请 IntelliJ Pycharm 的正版 License,只需在 GitHub 上准备一个维护超过3个月的开源项目,就能免费使用 Pycharm 一年了!这么好的方法,还不赶紧 get 一下? 二.为项目添加 License 在申请 License 之前,需要先给我们的 GitHub 开源项目添加 License,具体步骤如下: 1.新建文件 打开自己的 GitHub 个人主页,打开自己的开源项目,然后选择“Create n

android开源项目之OTTO事件总线(二)官方demo解说

官方demo见  https://github.com/square/otto 注意自己该编译版本为2.3以上,默认的1.6不支持match_parent属性,导致布局文件出错. 另外需要手动添加android-support-v4和otto到自己的libs文件夹. 主要代码逻辑: 1,在主页面点clear按钮,发布两个事件并传递对象. 2,然后LocationHistoryFragment接收事件对象,并处理. 1,BusProvider提供一个全局唯一的Bus实例对象 调用的时候使用MyPr

github开源项目目录规范(简介)

此为前端开发团队遵循和约定的开源项目目录规范,意在实现开源项目目录结构的一致性. 说明 文档中使用的关键字「MUST」,「MUST NOT」,「REQUIRED」,「SHALL」,「SHALL NOT」,「SHOULD」,「SHOULD NOT」,「RECOMMENDED」,「MAY」和「OPTIONAL」在RFC2119中被说明. 还未定稿,对规范中提及的点有不赞同的欢迎提出 issues(请添加目录规范标签)讨论. 目录规范 参加的目录结构为: . ├── .editorconfig ├──