summernote富文本编辑器的基本使用(一)
本文主要是跟官网的一些翻译,也锻炼下英语水平。原英文网址
http://summernote.org/getting-started/
基础API
初始化 summernote
$('#summernote').summernote();
初始化并配置summernote
高度和焦点设置
如果对summernote设置了focus项,在编辑器初始化之后会自动获取焦点。
$('#summernote').summernote({
height: 300, // set editor height
minHeight:null, // set minimum heightof editor
maxHeight:null, // set maximum heightof editor
focus: true // set focus to editable areaafter initializing summernote
});
对高度进行设置后,如果内容超过编辑器高度会出现滚动条。否则,编辑器高度会随内容高度变化而变化。
编辑器的销毁(destroy)
销毁summernote
$('#summernote').summernote('destroy');
获取&设置HTML内容(get&set)
获取编辑器内的HTML内容
var markupStr = $('#summernote').summernote('code');
如果初始化了多个编辑器,可以通过jquery的eq方法获取某个编辑器的HTML内容。eg,获取第二个编辑器的。
var markupStr = $('.summernote').eq(1).summernote('code');
给指定的编辑器设置HTML内容
var markupStr = 'hello world';
$('#summernote').summernote('code', markupStr);
国际化支持
语言
引入需要支持的语言库。eg. summernote-ko-KR.js
<linkhref="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.css"rel="stylesheet">
<scriptsrc="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.js"></script>
<scriptsrc="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.js"></script>
<link href="summernote.css"rel="stylesheet">
<script src="summernote.min.js"></script>
<!-- include summernote-ko-KR -->
<scriptsrc="lang/summernote-ko-KR.js"></script>
通过本地配置运行引入的脚本
$(document).ready(function() {
$('#summernote').summernote({
lang: 'ko-KR' // default: 'en-US'
});
});
初始化配置
通过配置option和组件来自定义编辑器
自定义工具栏,弹出框
summernote允许自定义工具栏`
$('#summernote').summernote({
toolbar: [
// [groupName, [list of button]]
['style', ['bold', 'italic', 'underline', 'clear']],
['font', ['strikethrough', 'superscript', 'subscript']],
['fontsize', ['fontsize']],
['color', ['color']],
['para', ['ul', 'ol', 'paragraph']],
['height', ['height']]
]
});
你也可以使用插件中已经预先定义好的工具栏。
你可以使用popover.air项来自定义极简模式的弹出框而不是工具栏。
$('#summernote').summernote({
popover: {
air: [
['color', ['color']],
['font', ['bold', 'underline', 'clear']]
]
}
});
同样也可以配置其他弹出框的按钮。
自定义placeholder
$('#summernote').summernote({
placeholder: 'write here...'
});
自定义字体
$('#summernote').summernote({
fontNames: ['Arial', 'Arial Black', 'Comic Sans MS', 'Courier New']
});
summernote在把配置项中的字体添加到字体下拉框之前会先进行字体检测,因此当我们使用网络字体时会遇到问题。可以在fontNamesIgnoreCheck配置项中定义网络字体的列表来使编辑器忽略对网络字体的检测。
Dialogs
对话框不止可以放置在编辑器内,也可以被置于body中。
$('#summernote').summernote({
dialogsInBody: true
});
Dialogs默认是没有淡入淡出效果的,可以使用dialogsFade配置
$('#summernote').summernote({
dialogsFade: true // Add fade effect on dialogs
});
禁止拖放
可以使用disableDragAndDrop禁止拖放
$('#summernote').summernote({
disableDragAndDrop: true
});
禁止使用快捷键
$('#summernote').summernote({
shortcuts: false
});
基础API(editor模块)
使用summernote初始化编辑器
$('#summernote').summernote();
然后可以使用summernote调用编辑器提供的API。下面是一个插入文本的示例代码。
$('#summernote').summernote('editor.insertText', 'hello world'));
它调用了editor模块的‘insertText’函数,第一个参数是代表模块及其方法的字符串,其余的是需要传入方法的参数。
第一个参数没有模块名的情况下,会默认为editor。
$('#summernote').summernote('insertText', 'hello world');
editor模块中支持以下方法
createRange
为用户当前选中的内容创建一个范围对象。
var range = $('#summernote').summernote('createRange');
saveRange, restoreRange
保存当前用户选中的内容
$('#summernote').summernote('saveRange');
重新保存选中的区域
$('#summernote').summernote('saveRange');
// move cursor and select another
$('#summernote').summernote('restoreRange');
undo, redo
撤销和恢复最后一个命令
$('#summernote').summernote('undo');
$('#summernote').summernote('redo');
focus
为编辑器设置焦点
$('#summernote').summernote('focus');
isEmpty
返回编辑器中内容是否为空
编辑区域获取焦点时会自动生成
,即使并没有实际内容。所以summernote提供了这个方法来判断内容是否真的为空。
if ($('#summernote').summernote('isEmpty')) {
alert('contents is empty');
}
reset(重置)
清除内容和存储记录
$('#summernote').summernote('reset');
disable, enable
disable使编辑器处于不可用状态。
$('#summernote').summernote('disable');
调用enable可以使编辑器从不可以转换到可用状态。
$('#summernote').summernote('enable');
字体样式API
bold, italic, underline, strikethrough
设置编辑器所有内容的字体样式。
$('#summernote').summernote('bold');//加粗
$('#summernote').summernote('italic');//斜体
$('#summernote').summernote('underline');//下划线
$('#summernote').summernote('strikethrough');//删除线
superscript, subscript(上角标,下角标)
$('#summernote').summernote('superscript');
$('#summernote').summernote('subscript');
removeFormat(清除样式)
$('#summernote').summernote('removeFormat');
backColor, foreColor(背景色,前景色)
// @param {String} color
$('#summernote').summernote('backColor', 'red');
// @param {String} color
$('#summernote').summernote('foreColor', 'blue');
fontName(字体)
// @param {String} fontName
$('#summernote').summernote('fontName', 'Arial');
fontSize(字体大小)
// @param {Number} font size - unit is px
$('#summernote').summernote('fontSize', 20);
Paragraph API
justify left, right and more
设置段落居中样式
$('#summernote').summernote('justifyLeft');
$('#summernote').summernote('justifyRight');
$('#summernote').summernote('justifyCenter');
$('#summernote').summernote('justifyFull');
insertParagraph(插入段落)
$('#summernote').summernote('insertParagraph');
insertOrderedList(插入列表)
$('#summernote').summernote('insertOrderedList');
$('#summernote').summernote('insertUnorderedList');
indent and outdent(缩进和凸排)
$('#summernote').summernote('indent');
$('#summernote').summernote('outdent');
formatPara
将编辑器内容格式化为段落
$('#summernote').summernote('formatPara');
formatH1-H6
$('#summernote').summernote('formatH2');
$('#summernote').summernote('formatH6');
lineHeight(设置行高)
// @param {Number} line height - unit is px
$('#summernote').summernote('lineHeight', 20);
Insertion API
insertImage(插入图片)
// @param {String} url
// @param {String|Function} filename - optional
$('#summernote').summernote('insertImage', url, filename);
你也可以把第二个参数设置为回调函数来对上传的图片进行修改
$('#summernote').summernote('insertImage', url, function ($image){
$image.css('width', $image.width() / 3);
$image.attr('data-filename', 'retriever');
});
insertNode
插入元素和文本节点
var node =document.createElement('div');
// @param {Node} node
$('#summernote').summernote('insertNode', node);
insertText(插入文本)
// @param {String} text
$('#summernote').summernote('insertText', 'Hello, world');
createLink, unlink(创建、取消链接)
// @param {String} text - link text
// @param {String} url - link url
// @param {Boolean} newWindow - whether link's target isnew window or not
$('#summernote').summernote('createLink', {
text: 'This is the Summernote's Official Site',
url: 'http://summernote.org',
newWindow: true
});
$('#summernote').summernote('unlink');
Callbacks
summernote支持初始化回调函数和jquery自定义事件的回调函数 在V0.7.0之后的版本中callback选项配置的位置变化了。
在V0.7.0之后的版本中callback应该被
callbacks
对象包裹。
在V0.6.5之后的版本中事件的回调函数键值必须使用驼峰命名法。
在V0.6.5之前的版本中基本的事件命名(比如:oninit,onenter,onfocus,onblur,onkeyup,onkeydown,onpaste)都是使用小写字符串,但是在
Callbacks
中的对高级特性的事件回调函数命名使用驼峰命名法,这样就造成了命名不一致,更加混乱。所以我们把所有的小写的callback改成了驼峰命名法。
onInit
// onInit callback
$('#summernote').summernote({
callbacks: {
onInit: function() {
console.log('Summernote is launched');
}
}
});
// summernote.init
$('#summernote').on('summernote.init', function() {
console.log('Summernote is launched');
});
onEnter
// onEnter callback
$('#summernote').summernote({
callbacks: {
onEnter: function() {
console.log('Enter/Return key pressed');
}
}
});
// summernote.enter
$('#summernote').on('summernote.enter', function() {
console.log('Enter/Return key pressed');
});
onFocus, onBlur
// onFocus callback
$('#summernote').summernote({
callbacks: {
onFocus: function() {
console.log('Editable area is focused');
}
}
});
// summernote.focus
$('#summernote').on('summernote.focus', function() {
console.log('Editable area is focused');
});
onKeyup, onKeydown
// onKeyup callback
$('#summernote').summernote({
callbacks: {
onKeyup: function(e) {
console.log('Key is released:', e.keyCode);
}
}
});
// summernote.keyup
$('#summernote').on('summernote.keyup', function(we, e) {
console.log('Key is released:', e.keyCode);
});
// onKeydown callback
$('#summernote').summernote({
callbacks: {
onKeydown: function(e) {
console.log('Key is downed:', e.keyCode);
}
}
});
// summernote.keydown
$('#summernote').on('summernote.keydown', function(we, e) {
console.log('Key is downed:', e.keyCode);
});
onPaste
// onPaste callback
$('#summernote').summernote({
callbacks: {
onPaste: function(e) {
console.log('Called event paste');
}
}
});
// summernote.paste
$('#summernote').on('summernote.paste', function(e) {
console.log('Called event paste');
});
onImageUpload
重写图片上传方法
// onImageUpload callback
$('#summernote').summernote({
callbacks: {
onImageUpload: function(files) {
// uploadimage to server and create imgNode...
$summernote.summernote('insertNode', imgNode);
}
}
});
// summernote.image.upload
$('#summernote').on('summernote.image.upload', function(we,files) {
// upload image to server andcreate imgNode...
$summernote.summernote('insertNode', imgNode);
});
onChange
// onChange callback
$('#summernote').summernote({
callbacks: {
onChange: function(contents, $editable) {
console.log('onChange:', contents,$editable);
}
}
});
// summernote.change
$('#summernote').on('summernote.change', function(we,contents, $editable) {
console.log('summernote\'s content ischanged.');
});
Custom button(自定义按钮)
summernote也支持自定义按钮。如果你想要创建你自己的按钮,可以定义新按钮并在options中配置它。
定义按钮
使用$.summernote.ui创建button对象,按钮具有以下属性:
- contents:在按钮中显示的内容
- tooltip:鼠标悬浮时的提示文字
-
click:按钮被点击时的回调函数
下面是一个插入“hello”按钮的示例代码
var HelloButton = function (context) {
var ui = $.summernote.ui;
// create button
var button = ui.button({
contents: '<i class="fa fa-child"/> Hello',
tooltip: 'hello',
click: function () {
// invokeinsertText method with 'hello' on editor module.
context.invoke('editor.insertText', 'hello');
}
});
return button.render(); // return button as jquery object
}
将按钮作为jquery对象返回renderr()
Using button with options(在配置项中使用按钮)
在工具栏中使用button。首先,定义一个键为buttons的button对象,然后在工具栏中定义定制的按钮
$('.summernote').summernote({
toolbar: [
['mybutton', ['hello']]
],
buttons: {
hello: HelloButton
}
});
同样也可以在POPover中使用自定义按钮
模块化
summernote通过模块化支持功能的扩展。这种模块体系的建立受益于spring框架的启发。
关键术语
- Module:模块
- Context:Context包含modules和editor’s 声明的容器
- Renderer:Renderer是用来创建元素的方法
- UI:UI是用来新建ui元素的渲染函数
Module
Module是用来扩展功能的组件,具有生命周期,也有辅助函数和依赖于生命周期的函数
initialize
通过$(‘..’).summernote()进行初始化的时候会调用这个函数,可以用来在editor中绑定事件和创建元素
this.initialize = function () {
// create button
var button = ui.button({
className: 'note-btn-bold',
contents: '<i class="fa fa-bold">'
click: function (e) {
context.invoke('editor.bold'); // 调用editor中的bold方法
}
});
// button.render()返回button生成的jquery对象
this.$button = button.render();
$toolbar.append(this.$button);
}
destroy
当$(‘..’).summernote(‘destroy’)的时候调用这个方法,移除initlize即初始化时创建的元素,并解绑事件
this.destroy = function () {
this.$button.remove();
this.$button = null;
}
shouldInitialize
这个方法来决定模块是否会被初始化/
/ AirPopover's shouldInitialize
this.shouldInitialize = function () {
return options.airMode && !list.isEmpty(options.popover.air);
};
下面是AutoLink 模块的完整代码
// Module Name is AutoLink
// @param {Object} context - states of editor
var AutoLink = function (context) {
// you can get current editor's elements from layoutInfo
var layoutInfo = context.layoutInfo;
var $editor = layoutInfo.editor;
var $editable = layoutInfo.editable;
var $toolbar = layoutInfo.toolbar;
// ui is a set of renderers to build ui elements.
var ui = $.summernote.ui;
// this method will be called when editor is initialized by $('..').summernote();
// You can attach events and created elements on editor elements(eg, editable, ...).
this.initialize = function () {
// create button
var button = ui.button({
className: 'note-btn-bold',
contents: '<i class="fa fa-bold">'
click: function (e) {
// invoke bold method of a module named editor
context.invoke('editor.bold');
}
});
// generate jQuery element from button instance.
this.$button = button.render();
$toolbar.append(this.$button);
}
// this method will be called when editor is destroyed by $('..').summernote('destroy');
// You should detach events and remove elements on `initialize`.
this.destroy = function () {
this.$button.remove();
this.$button = null;
}
};
配置模块
可以通过option自定义模块
$(".summernote").summernote({
modules: {
myModule: MyModule
}
});
可以通过暴露的API来调用自定义模块中的方法
$(".summernote").summernote("myModule.method", 'hello');
Plugin
可以以插件形式来自定义模块
// src/mymodule.js
$.extend($.summernote.plugins, {
myModule: function (context) {
// define module
...
}
});