/summernote

Super simple WYSIWYG Editor using Bootstrap

Primary LanguageJavaScript

Summernote

Super simple WYSIWYG Editor using Bootstrap (3.0 and 2.x).

Build Status

Summernote

Summernote is a JavaScript library that helps you create WYSIWYG editors online.

Home Page: http://summernote.org

Why Summernote?

Summernote has a few special features:

  • Paste images from clipboard
  • Saves images directly in the content of the field using base64 encoding, so you don't need to implement image handling at all
  • Simple UI
  • Interactive WYSIWYG editing
  • Handy integration with server

Inspired by

Installation and dependencies

Summernote uses opensource libraries: jQuery, Bootstrap, Font Awesome.

For Meteor, just run meteor add summernote:summernote. More info in the Meteor README.

For other/no frameworks:

1. include JS/CSS

Include the following code in the <head> tag of your HTML:

<!-- include libraries(jQuery, bootstrap, fontawesome) -->
<script type="text/javascript" src="//code.jquery.com/jquery-1.9.1.min.js"></script> 
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" />
<script type="text/javascript" src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css" />

<!-- include summernote css/js-->
<link href="summernote.css" rel="stylesheet">
<script src="summernote.min.js"></script>

2. target elements

Then place a div tag somewhere in the body tag. This element will be replaced with the summernote editor.

<div id="summernote">Hello Summernote</div>

3. summernote

Finally, run this script after the DOM is ready:

$(document).ready(function() {
  $('#summernote').summernote();
});

API

code - get the HTML source code underlying the text in the editor:

var sHTML = $('#summernote').code();

Destroy summernote:

$('#summernote').destroy();

Warning - code injection

The code view allows the user to enter script contents. Make sure to filter/sanitize the HTML on the server. Otherwise, an attacker can inject arbitrary JavaScript code into clients.

Supported platforms

Any modern browser: Safari, Chrome, Firefox, Opera, Internet Explorer 9+.

Upcoming Features

  • Responsive toolbar
  • Table: Handles (sizing, selection) and popover
  • IE8 Support
  • Clipboard (you can paste images already)
  • Media object selection

Developer information

structure of summernote.js

summernote.js - Renderer.js (Generate markup) - Locale.js (Locale object)
              ㄴEventHandler.js - Toolbar.js (Toolbar module)
                                ㄴPopover.js (Popover module)
                                ㄴHandle.js  (Handle module)
                                ㄴDialog.js  (Dialog module)
                                ㄴEditor.js  (Abstract editor module) - Style.js (Style Getter and Setter)
                                                                      ㄴHistory.js (Store on jQuery.data)
-----------------------------Core Script-----------------------------
  agent.js  (agent information)
  async.js  (aysnc utility)
  key.js    (keycode object)
  dom.js    (dom functions)
  list.js   (list functions)
  range.js  (W3CRange extention)
---------------------------------------------------------------------

document structure

 - body container: <div class="note-editable">, <td>, <blockquote>, <ul>
 - block node: <div>, <p>, <li>, <h1>, <table>
 - void block node: <hr>
 - inline node: <span>, <b>, <font>, <a>, ...
 - void inline node: <img>
 - text node: #text
  1. A body container has block node, but <ul> has only <li> nodes.
  2. A body container also has inline nodes sometimes. This inline nodes will be wraped with <p> when enter key pressed.
  3. A block node only has inline nodes.
  4. A inline nodes has another inline nodes
  5. #text and void inline node doesn't have children.

build summernote

# grunt-cli is need by grunt; you might have this installed already
npm install -g grunt-cli
npm install

# build full version of summernote: dist/summernote.js
grunt build

# generate minified copy: dist/summernote.min.js, dist/summernote.css
grunt dist

At this point, you should now have a build/ directory populated with everything you need to use summernote.

test summernote

run tests with PhantomJS

grunt test

start local server for developing summernote.

run local server with connect and watch.

# this will open a browser on http://localhost:3000.
grunt server
# If you change source code, automatically reload your page.

Coding convention

Contribution guide

Contacts

License

summernote may be freely distributed under the MIT license.