2015-05-13 18:30:35 +02:00
# Summernote
2016-03-23 18:39:41 +01:00
Super simple WYSIWYG Editor.
[](http://travis-ci.org/summernote/summernote)
[](http://badge.fury.io/js/summernote)
[](https://gemnasium.com/summernote/summernote)
[](https://coveralls.io/github/summernote/summernote?branch=develop)
[](https://gratipay.com/~HackerWins/)
[](https://saucelabs.com/u/summernoteis)
2015-05-13 18:30:35 +02:00
### Summernote
Summernote is a JavaScript library that helps you create WYSIWYG editors online.
2016-03-23 18:39:41 +01:00
Home page: < http: / / summernote . org >
2015-05-13 18:30:35 +02:00
### 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
### Installation and dependencies
Summernote uses opensource libraries: [jQuery ](http://jquery.com/ ), [Bootstrap ](http://getbootstrap.com ), [Font Awesome ](https://github.com/FortAwesome/Font-Awesome ).
For [Meteor ](http://github.com/meteor/meteor ), just run `meteor add summernote:summernote` . More info in the [Meteor README ](meteor/README.md ).
For other/no frameworks:
#### 1. include JS/CSS
Include the following code in the `<head>` tag of your HTML:
```html
<!-- include libraries(jQuery, bootstrap, fontawesome) -->
2016-03-23 18:39:41 +01:00
< script type = "text/javascript" src = "//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js" > < / script >
< link rel = "stylesheet" href = "//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.min.css" / >
< script type = "text/javascript" src = "//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/js/bootstrap.min.js" > < / script >
< link rel = "stylesheet" href = "//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css" / >
2015-05-13 18:30:35 +02:00
<!-- include summernote css/js -->
< link href = "summernote.css" rel = "stylesheet" >
2016-03-23 18:39:41 +01:00
< script src = "summernote.js" > < / script >
2015-05-13 18:30:35 +02:00
```
#### 2. target elements
Then place a `div` tag somewhere in the `body` tag. This element will be replaced with the summernote editor.
```html
< div id = "summernote" > Hello Summernote< / div >
```
#### 3. summernote
Finally, run this script after the DOM is ready:
```javascript
$(document).ready(function() {
$('#summernote ').summernote();
});
```
### API
`code` - get the HTML source code underlying the text in the editor:
```javascript
2016-03-23 18:39:41 +01:00
var html = $('#summernote ').summernote('code');
2015-05-13 18:30:35 +02:00
```
`Destroy` summernote:
```javascript
2016-03-23 18:39:41 +01:00
$('#summernote ').summernote('destroy');
2015-05-13 18:30:35 +02:00
```
2016-03-23 18:39:41 +01:00
#### Warning - code injection
The code view allows the user to enter script contents. Make sure to filter/[sanitize the HTML on the server ](https://github.com/search?l=JavaScript&q=sanitize+html ). Otherwise, an attacker can inject arbitrary JavaScript code into clients.
2015-05-13 18:30:35 +02:00
### 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
2016-03-23 18:39:41 +01:00
#### document structure
2015-05-13 18:30:35 +02:00
```
2016-03-23 18:39:41 +01:00
- 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
2015-05-13 18:30:35 +02:00
```
2016-03-23 18:39:41 +01:00
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.
4. A block node only has inline nodes.
5. A inline nodes has another inline nodes
6. `#text` and void inline node doesn't have children.
2015-05-13 18:30:35 +02:00
#### build summernote
```bash
# 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
2016-03-23 18:39:41 +01:00
run tests with Karma and PhantomJS
2015-05-13 18:30:35 +02:00
```bash
grunt test
```
2016-03-23 18:39:41 +01:00
If you want run tests on other browser,
change the values for `broswers` properties in `Gruntfile.js` .
```
karma: {
all: {
browsers: ['PhantomJS'],
reporters: ['progress']
}
}
```
You can use `Chrome` , `ChromeCanary` , `Firefox` , `Opera` , `Safari` , `PhantomJS` and `IE` beside `PhantomJS` .
Once you run `grunt test` , it will watch all javascript file. Therefore karma run tests every time you chage code.
2015-05-13 18:30:35 +02:00
#### start local server for developing summernote.
run local server with connect and watch.
```bash
grunt server
2016-03-23 18:39:41 +01:00
# Open a browser on http://localhost:3000.
2015-05-13 18:30:35 +02:00
# If you change source code, automatically reload your page.
```
#### Coding convention
* JSHint: http://www.jshint.com/about/
* JSHint rule: https://github.com/summernote/summernote/blob/master/.jshintrc
2016-03-23 18:39:41 +01:00
#### Contribution guide
* Please read [CONTRIBUTING.md ](https://github.com/summernote/summernote/blob/develop/CONTRIBUTING.md ) before sending pull requests.
2015-05-13 18:30:35 +02:00
### Contacts
* Email: susukang98@gmail .com
* Twitter: http://twitter.com/hackerwins
2016-03-23 18:39:41 +01:00
* Chat with us:
[](https://gitter.im/summernote/summernote?utm_source=badge& utm_medium=badge& utm_campaign=pr-badge& utm_content=badge)
2015-05-13 18:30:35 +02:00
### License
summernote may be freely distributed under the MIT license.