# Changelog
## 3.4.13
### Bug fixes
* https://github.com/xdan/jodit/issues/379

## 3.4.12
### Bug fixes
* https://github.com/xdan/jodit/issues/424
Fixed `allowTabNavigation`  By default: `false`.
```js
const jodit = new Jodit('#editor', {
    allowTabNavigation: true // enable tab navigation between toolbar's buttons
});
```
* https://github.com/xdan/jodit/issues/421
* https://github.com/xdan/jodit/issues/420
* https://github.com/xdan/jodit/issues/419
* https://github.com/xdan/jodit/issues/418#issuecomment-651145548
* https://github.com/xdan/jodit/issues/415

## 3.4.2
### Bug fixes
https://github.com/xdan/jodit/issues/359

## 3.4
### Bug fixes
* https://github.com/xdan/jodit/issues/408
* https://github.com/xdan/jodit/issues/405
* https://github.com/xdan/jodit/issues/404 See more in Features
* https://github.com/xdan/jodit/issues/400
* https://github.com/xdan/jodit/issues/398
* https://github.com/xdan/jodit/issues/396
* https://github.com/xdan/jodit/issues/393
* https://github.com/xdan/jodit/issues/392
* https://github.com/xdan/jodit/issues/391
* https://github.com/xdan/jodit/issues/385
* https://github.com/xdan/jodit/issues/378
* https://github.com/xdan/jodit/issues/369
* https://github.com/xdan/jodit/issues/360
* https://github.com/xdan/jodit/issues/352
* Fixed unde-redo subsystem for source mode

### Features
* All `less` variables were replaced to css custom properties for modern browsers.
* Added `WrapTextNodes` plugin - it wrap all alone text node(or inline elements) inside `options.enter` element.
You can disable this behaviour:
```js
const editor = Jodit.make('#editor', {
    disablePlugins: ['WrapTextNodes']
})
```
* Added `shadowRoot` option for ShadowDom support.
> ACE source editor does not support Shadow Dom
```html
<div id="editor"></div>
```
```js
const app = document.getElementById("editor");
app.attachShadow({ mode: "open" });
const root = app.shadowRoot;

root.innerHTML = `
<link rel="stylesheet" href="./build/jodit.css"/>
<h1>Jodit example in Shadow DOM</h1>
<div id="edit"></div>
`;

var editor = new Jodit(root.getElementById("edit"), {
    globalFullSize: false,
    shadowRoot: root
});
editor.value = "<p>start</p>";
```

* From `NativeEvent.on` method was removed `selector` argument. It was `jQuery.live` style.
Example:
```html
<div class="test">
    <button>1</button>
    <button>2</button>
</div>
```
Earlier, you can use something like this
```js
editor.events.on(document.querySelector('div'), 'click', function () {
    alert(this.innerText);
}, 'button')
```

Now, you should use event.target
```js
editor.events.on(document.querySelector('div'), 'click', function (e) {
    alert(e.target.innerText);
})
```

* `Select.applyCSS` was renamed to `Select.applyStyle`
```js
const editor = Jodit.make('#editor');
editor.s.applyStyle({color: 'red'}) // will add to all selection text - red color
```
* `FileBrowser`, `Dialog` etc. modules which extend `View` has only one argument in the constructor - options.
Before:
```js
const editor = Jodit.make('#editor');
const fb = Jodit.modules.FileBroser(editor, {
    ajax: {
        url: 'https://xdsoft.net'
    }
});
fb.open();
fb.close();

editor.destruct();
fb.open(); // error, fb is already destructed
```

Now:
```js
const editor = Jodit.make('#editor');
const fb = Jodit.modules.FileBroser({
    ajax: {
        url: 'https://xdsoft.net'
    }
});
fb.open();
fb.close();

editor.destruct();
fb.open(); // Normal

fb.destruct();
//or
editor.e.on('beforeDestruct', () => {
    fb.destruct();
});
```

* Split `table` plugin on `select-cells` and `resize-cells` plugins. `useTableProcessor` was removed.
Instead, use
```js
Jodit.make('#editor', {table: {
	allowCellSelection: true,
	selectionCellStyle: 'border: 1px double #1e88e5 !important;',

	allowCellResize: true,
	useExtraClassesOptions: true
}});
```
* All `less` files were moved near with TS. Class naming was changed closer to BEM.
* Removed `PopupList` and `Popup`. Instead, use only `PopupMenu`.
* Added `ui.button` and `ui.list` for working with buttons. `toolbar.button` extends `ui.button`.
UIButton - is reactive:
```js
const button = new UIButton();
button.state.activated = true; // will automatically change setAttribute('area-pressed', 'true')
button.state.icon = 'plus'; // will add `svg` icon in container

// or use `setState`
button
    .setState({
        text: "Click me"
    })
    .onAction(() => {
        Jodit.Alert('Click');
    })
    .appendTo(document.body); // will append it inside the body
```
* In `tsconfig` added decorators supports.
Methods that need binding binds with `@autobind` decorator.
* Added `watch` decorator.
* All filenames were renamed to kebab-case.
* Added short aliases for. Can be used as chain - `this.j.e.on`
  *  `this.jodit` => `this.j`
  *  `this.options` => `this.o`
  *  `this.selection` => `this.s`
  *  `this.create` => `this.c`
  *  `this.events` => `this.e`
  *  `this.ownerDocument` => `this.od`
  *  `this.ownerWindow` => `this.ow`
  *  `this.editorDocument` => `this.ed`
  *  `this.editorWindow` => `this.ew`
* Change name `Dialog`.`setTitle` to `Dialog`.`setHeader`
* Remove `Create.inside` field and instead added `Jodit.createInside`
* In popups added position strategies: `'leftBottom' | 'rightBottom' | 'leftTop' | 'rightTop'` etc.

## 3.3.24
### BugFix
* [342](https://github.com/xdan/jodit/issues/342)
* [343](https://github.com/xdan/jodit/issues/343)

## 3.3.23
### BugFix
* [#325](https://github.com/xdan/jodit/issues/325) [#239](https://github.com/xdan/jodit/issues/239)
* [#327](https://github.com/xdan/jodit/issues/327)
* [#292](https://github.com/xdan/jodit/issues/292)
* [#203](https://github.com/xdan/jodit/issues/203)
* [#339](https://github.com/xdan/jodit/issues/339)

### Feature
* Added `Dom`.`isTag` method
```js
const editor = Jodit.make('#editor');

const a = editor.createInside.element('a');
const br = document.createElement('br');

Jodit.modules.Dom.isTag(a, 'a') // true
Jodit.modules.Dom.isTag(br, 'br') // true
```
* Added `Helpers`.`call` method
```js
const f = Math.random();
Jodit.modules.Helpers.call(f > 0.5 ? Math.ceil : Math.floor, f);
```
* Added `Helpers`.`position` method - Helper function to get an element's exact position
```js
console.log(Jodit.modules.Helpers.position(editor.editor.querySelector('p')));
```
## 3.3.19
### BugFix
* Fixed a lots bugs inside `link` plugin
[#331](https://github.com/xdan/jodit/issues/331)
[#334](https://github.com/xdan/jodit/issues/334)
[#334](https://github.com/xdan/jodit/issues/334)
[#235](https://github.com/xdan/jodit/issues/235)

### Feature
* In `link` plugin added `formTemplate` and `formClassName` options [#333](https://github.com/xdan/jodit/issues/333)
```js
const editor = getJodit({
  link: {
    formTemplate: function() {
      return '<form class="form_url"><input ref="url_input" type="url"><button>save</button></form>';
    },
    formClassName: "some_class"
  }
});
```
* Added deprecated mechanism. Some methods will not be removed and only will be marked as deprecated until major release. [#330](https://github.com/xdan/jodit/issues/330)

## 3.3.16
Added `createAttributes` option [#243](https://github.com/xdan/jodit/issues/243)
All elements which will be inserted in editor will be created with these attributes

```js
const editor2 = Jodit.make('#editor', {
    createAttributes: {
      div: {
        class: 'test'
      },
      ul: function (ul) {
        ul.classList.add('ui-test');
      }
    }
});

const div2 = editor2.createInside.div();
expect(div2.className).equals('test');

const ul = editor2.createInside.element('ul');
expect(ul.className).equals('ui-test');

```

## 3.3.15

### Bugfix
Fixed SPLIT_MODE

### Feature
Added `editHTMLDocumentMode` in order to allow the user to edit the entire document [#241](https://github.com/xdan/jodit/issues/241).

Also added `iframeTitle` and `iframeDoctype` options
```js
const editor = Jodit.make('#editor', {
	iframe: true,
	iframeTitle: 'Hello world!',
	iframeDoctype: '<!DOCTYPE html>',
	editHTMLDocumentMode: true,
	iframeStyle: ''
});

console.log(editor.value);

// <html dir="" class="jodit" lang="en" spellcheck="true" style="min-height: 113px;">
// <head>
//     <title>Hello world!</title>
// </head>
// <body class="jodit-wysiwyg" style="outline:none">test test <a href="#">test</a></body>
// </html>
```

## 3.3.14
### Bugfix
Fixed https://github.com/xdan/jodit/issues/316
Fixed bug when Jodit was initialized inside iframe.
```js
const iframe = document.createElement('iframe');
document.body.appendChild(iframe);

const win = iframe.contentWindow;
const doc = win.document;
doc.open();
doc.write('<html><body><textarea id="editor"></textarea><' + 'script src="./build/jodit.js"><' + '/script></body></html>');
doc.close();

Jodit.make('#editor', {
	ownerWindow: win,
	ownerDocument: doc
});
```
Fixed bug with ProgressBar - it simply does not work(

### Feature
Source plugin was separated on several classes. Now you can choose SourceEditor
or make yourself (https://github.com/xdan/jodit/issues/242)
> Before
```js
Jodit.make('#editor', {
	useAceEditor: true
});
```

> Now
```js
Jodit.make('#editor', {
	sourceEditor: 'area' || 'ace' // || 'mirror' in PRO
});
```
In PRO version you can choose mirrror&
* Added Async module for control asynchronous operations
```javascript
const editor = new Jodit('#editor');
setTimeout(() => {
	editor.s.insertHTML('Hello!')
}, 1000);

editor.async.setTimeout(() => {
	editor.s.insertHTML('World!')
}, 1000);

editor.destruct();
```
After destruct the first timeout will throw the error, but second will be cleared.

Added two methods setPanel and addPlace
```html
<textarea id="editor"></textarea>
<textarea id="editor2"></textarea>
<textarea id="editor3"></textarea>
<div id="toolbar"></div>
```
```js
const editor = new Jodit('#editor');
editor.setPanel('#toolbar');
//add id instance to editor
editor.addPlace('#editor2');
editor.addPlace('#editor3');
```

### Events
Added `afterRemoveNode` event
```js
const editor = new Jodit('#editor');
editor.events.on('afterRemoveNode', (node) => {
	if (node.nodeName === 'IMG') {
		fetch('delete.php', {image: node.src});
	}
});
```

## 3.3.8

### Plugin system was changed

> Before
```javascript
Jodit.plugins.insertText = function (editor) {
    editor.events.on('someEvent', function (text) {
        editor.s.insertHTMl('Hello ' + text);
    });
};
```
> Now
```javascript
Jodit.plugins.add('insertText', function (editor) {
    editor.events.on('someEvent', function (text) {
        editor.s.insertHTMl('Hello ' + text);
    });
});
console.log(Jodit.plugins.get('insertText'));
Jodit.plugins.remove('insertText');
```
### `extraPlugins` options

Inside plugin you can use several fields:
```js
// emoji.js

class Emoji {
    hasStyle = true; //
    requires = ['autocomplete'];
    init(editor) {
        // this code will be execute only after autocomplete.init
    }
}

Jodit.plugins.add('emoji', Emoji);
```
And inside you init code
```javascript
Jodit.make('#editor', {
	basePath: 'https://sitename.com/somepath/',
	extraPlugins: ['emoji']
});
```

It will try to download
```
https://sitename.com/somepath/plugins/emoji/emoji.js
```
`hasStyle = true;` means try download and include in page style file:
```
https://sitename.com/somepath/plugins/emoji/emoji.css
```

In `plugins/example` folder you can find an example.

extraPlugins option allows appending in editor extra plugins from npm, bower etc.

### Build System

In Build system was added gulp subsystem to build extra plugins.
You can make extra plugins like `plugins/example` and after build,
this plugin will not be inside `jodit.min.js` file. It will be in separate
folder (eg `build/plugins/emoji/`).

Also in root you can find `make.js` file for install your plugin
in build system.

______________________
### 2.5.61
Added `zIndex` option
```javascript
var editor = new Jodir('.editor', {
    zIndex: 10000
})
```

### 2.5.60
* Fix table editor in iframe mode
* Fix styles

### 2.5.57
* Added `useIframeResizer` option for resize IFRAME tag
![Iframe resizer](http://xdsoft.net/jodit/stuf/iframe-resizer.jpg)
* Added `offsetTopForAssix` option.
For example, in Joomla, the top menu bar closes Jodit toolbar when scrolling. Therefore, it is necessary to move the toolbar Jodit by this amount
```javascript
var editor = new Jodit('#editor', {
    offsetTopForAssix: 74
});
```
Without affix offset
![Without affix](http://xdsoft.net/jodit/stuf/joomla-exampla-affix-bad.jpg)
With affix offset
![Withou affix](http://xdsoft.net/jodit/stuf/joomla-exampla-affix-good.jpg)

### 2.5.55
Added `Embed video` button. Added `vimeo` or `youtube` video embeded code.

### 2.5.54
When you insert text into the editor from another site, all the images are from a remote site. Before Jodit, it was quite uncomfortable: first I had to download the image from a remote resource, and then upload it to your site, then replace the image in the editor.
In 2.5.54 it can be done in 3 clicks

![Upload remote image](http://xdsoft.net/jodit/stuf/upload-remote-image.jpg)

> `Note`. Need update [PHP Connector](https://github.com/xdan/jodit-connectors)

### 2.5.53
Added [Jodit.focus](http://xdsoft.net/jodit/doc/module-Jodit.html#.focus) method
```javascript
var editor = new Jodit('.redactor');
editor.focus();
```

### 2.5.52
Added `OK` button in Alert dialog
#### More About dialogs
#### Alert

```javascript
Jodit.Alert("File was uploaded");
Jodit.Alert("File was uploaded", "Message");
Jodit.Alert("File was uploaded", function() {
   $('form').hide();
});
Jodit.Alert("File wasn't uploaded", "Error", function() {
   $('form').hide();
});
```

#### Promt
![Promt dialog](http://xdsoft.net/jodit/stuf/promt.jpg)
```javascript
Jodit.Promt("Enter your name", function (name) {
    if (name.length < 3) {
        Jodit.Alert("The name must be at least 3 letters");
        return false;
    }
    // do something
});
Jodit.Promt("Enter your name", "Promt Dialog", function (name) {
    if (name.length < 3) {
        Jodit.Alert("The name must be at least 3 letters");
        return false;
    }
    // do something
});
```
#### Confirm
![Confirm dialog](http://xdsoft.net/jodit/stuf/confirm.jpg)
```javascript
Jodit.Confirm("Are you shure?", function (yes) {
    if (yes) {
        // do something
    }
});
```

### 2.5.49
First step for Mobile-friendly [sizeLG,sizeMD,sizeSM](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#sizeLG) and sets of buttons for different sizes editors.
> `Note`. this is not the width of the device, the width of the editor

* buttons The list of buttons that appear in the editor's toolbar on large places (≥ options.sizeLG).
* buttonsMD The list of buttons that appear in the editor's toolbar on medium places (≥ options.sizeMD).
* buttonsSM The list of buttons that appear in the editor's toolbar on small places (≥ options.sizeSM).
* buttonsXS The list of buttons that appear in the editor's toolbar on extra small places (< options.sizeSM).

```javascript
var editor = new Jodit('#some-editor', {
    sizeLG: 900,
    sizeMD: 700,
    sizeSM: 400,

    buttons: [
        'source', '|',
        'bold',
        'italic', '|',
        'ul',
        'ol', '|',
        'font',
        'fontsize',
        'brush',
        'paragraph', '|',
        'image',
        'table',
        'link', '|',
        'left',
        'center',
        'right',
        'justify', '|',
        'undo', 'redo', '|',
        'hr',
        'eraser',
        'fullsize',
        'about'
    ],
    buttonsMD: [
        'source', '|',
        'bold',
        'italic', '|',
        'ul',
        'ol', '|',
        'font',
        'fontsize',
        'brush',
        'paragraph', '|',
        'image',
        'table',
        'link', '|',
        'left',
        'center',
        'right',
        'justify', '|',
        'undo', 'redo', '|',
        'hr',
        'eraser',
        'fullsize'
    ],
    buttonsSM: [
        'bold',
        'italic', '|',
        'ul',
        'ol', '|',
        'fontsize',
        'brush',
        'paragraph', '|',
        'image',
        'table',
        'link', '|',
        'left',
        'center',
        'right', '|',
        'undo', 'redo', '|',
        'eraser',
        'fullsize'
    ],
    buttonsXS: [
        'bold',
        'image', '|',
        'brush',
        'paragraph', '|',
        'left',
        'center',
        'right', '|',
        'undo', 'redo', '|',
        'eraser'
    ],
});
```

### 2.5.46
* More comfortable colorpicker

![More comfortable colorpicker](http://xdsoft.net/jodit/stuf/colorpicker.jpg)

* Added [Helper.normalizeColor](http://xdsoft.net/jodit/doc/module-Helper.html#~normalizeColor)
* Fixed [Helper.colorToHex](http://xdsoft.net/jodit/doc/module-Helper.html#~colorToHex) now for transparent color it will return NaN

### 2.5.45
* Fixed bug in Image Resizer when border was less than Image
* Rename Selection.setCursorTo to Selection.moveCursorTo
* Fixed style for Dialog resizer

### 2.5.42
Fix a few bugs in [JJE](http://xdsoft.net/jodit/#extesions)

### 2.5.40
* In [Helper](http://xdsoft.net/jodit/doc/module-Helper.html) module added [isHTML] method. Used plugin `insertHTML`
* Added simple plugin `insertHTML` and him option `askBeforePasteHTML` - Ask before paste HTML in WYSIWYG mode. Try insert in WYSIWYG mode some HTML source
```javascript
(function ($) {
    "use strict";
    Jodit.defaultOptions = $.extend(true, Jodit.defaultOptions, {
        /**
         * @property {boolean} askBeforePasteHTML=true Ask before paste HTML in WYSIWYG mode
         */
        askBeforePasteHTML: true
    });

    /**
     * Ask before paste HTML source
     *
     * @module insertHTML
     */
    Jodit.plugins.insertHTML = function (parent) {
        if (parent.options.askBeforePasteHTML) {
            parent.events.on('beforePaste', function (event) {
                if (event && event.clipboardData && event.clipboardData.getData && event.clipboardData.types[0] === 'text/plain') {
                    var html = event.clipboardData.getData('text/plain');
                    if (parent.helper.isHTML(html)) {
                        Jodit.Confirm('Your code is similar to HTML. Paste as HTML?', 'Paste as HTML', function (agree) {
                            if (agree) {
                                parent.s.insertHTML(html);
                            } else {
                                parent.s.insertHTML(parent.helper.htmlspecialchars(html));
                            }
                            parent.syncCode(true);
                        });
                        return false;
                    }
                }
            });
        }
    };
}(Jodit.modules.Dom));
```

### 2.5.39
Fix [#issue 11](https://github.com/xdan/jodit/issues/11) in `file:` mode CDN CodeMirror not working

### 2.5.38
* Added `Filter` in FileBrowser
* Added `SortBy` in FileBrowser

### 2.5.37
* Fixed bug in [`Beautifier`](http://xdsoft.net/jodit/doc/module-Beautifier.html) plugin. When in `source` mode, start comment enter `<!--` Browser stops responding.
* Added `tiles` and `list` switcher in filebrowser

### 2.5.36
* In PHP FileBrowser connector added MaxFileSize option
* Fixed popap error in filebrowser

### 2.5.30
Fix Splitmode autohaight
![Autoheight in Split mode Jodit](http://xdsoft.net/jodit/stuf/split-mode.jpg)
Fix syncronize code in TableProcessor module

### 2.5.28
Fix bug in Dialog.Confirm
```javascript
Jodit.Confirm("Are you shure?", "Confirm", function (success) {
    if (success) {
        alert("Agree");
    }
});
```

### 2.5.27
* Fixed IE11's bug [http://xdsoft.net/jodit/doc/module-Jodit.html#comment-2866837441](http://xdsoft.net/jodit/doc/module-Jodit.html#comment-2866837441)
* Added [textIcons](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#texticons) options - Use text instead of icons. In IE9 it is default - true [Example](http://xdsoft.net/jodit/#example-text-icons)
```javascript
var editor = new Jodit("#example2_0", {
    textIcons: true,
    removeButtons: [
        "hr",
        "ol",
        "about",
        "italic",
        "format",
        "fullsize",
        "justify"
    ]
});
```
![Text icons](http://xdsoft.net/jodit/stuf/texticons.jpg)
![Text icons in filebrowser](http://xdsoft.net/jodit/stuf/texticons-filebrowser.jpg)

### 2.5.26
Dom Module is now compatible with jQuery objects
```javascript
var a = jQuery("<a href="#link">Link</a>");
jodit.modules.Dom('.selector').append(a);
jodit.modules.Dom(jQuery("#someid")).val();
jodit.modules.Dom("#someid").val();
```
But you must remember that Jodit.modules.Dom! = JQuery

### 2.5.23
* Added `expand button` In filebrowser
* Added [fullsize](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#dialog) and [fullsizeButton](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#dialog) options

### 2.5.20
* Fix [Dom.prev](http://xdsoft.net/jodit/doc/module-Dom.html#prev) method
* Added navigation and select in preview
![Navigation and select buttons](http://xdsoft.net/jodit/stuf/preview_navigation.jpg)
* Added [showSelectButtonInPreview](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#filebrowser) and [showPreviewNavigation](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#filebrowser)

### 2.5.19
Added [cleanHTML.allowTags](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#cleanhtml) option.
```javascript
var editor = Jodit('#editor', {
    allowTags: 'p,a[href],table,tr,td, img[src=1.png]' // allow only <p>,<a>,<table>,<tr>,<td>,<img> tags and for <a> allow only `href` attribute and <img> allow only `src` atrribute == '1.png'
});
editor.val('Sorry! <strong>Goodby</strong> <span>mr.</span> <a style="color:red" href="http://xsoft.net">Freeman</a>');
console.log(editor.val()); //Sorry! <a href="http://xsoft.net">Freeman</a>
```

Or you can use PlainObject. This code equivalent to the top
```javascript
var editor = Jodit('#editor', {
    allowTags: {
        p: true,
        a: {
            href: true
        },
        table: true,
        tr: true,
        td: true,
        img: {
            src: '1.png'
        }
    }
});
```


### 2.5.18
Fixed bug in Image plugin

### 2.5.17
Fixed bug in JJE

### 2.5.16
* Fixed a few styles

### 2.5.15
* Fixed `package.json`

### 2.5.13
* Added in FileBrowser [sort](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#filebrowser) options
* Jodit.Promt and Jodit.Alert by default set focus to OK button
```javascript
Jodit.Promt('Enter your name', function (name) {
    if (!name.length) {
        Jodit.Alert('You need enter 3 chars');
        return false;
    }
    //... some logic
});
```
* Fix `$config` bug in [JJE](http://xdsoft.net/jodit/release/joomla.zip)
* Added a few options in JJE plugin

### 2.5.12
Added edit button in Image Properties Dialog
![Edit button](http://xdsoft.net/jodit/stuf/editbutton.jpg)

### 2.5.11
* Added file info in filebrowser
![Filebrowser file info](http://xdsoft.net/jodit/stuf/filebrowsernames.jpg)
* Added [showFileName,showFileSize,showFileChangeTime](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#filebrowser)

### 2.5.1
* Dom module was rewrited and was fixed  afew bugs
* In [OEM and Pro](http://xdsoft.net/jodit/#download) added [Image Editor module](http://xdsoft.net/jodit/doc/module-ImageEditor.html) resize and crop image.  You can try [here](http://xdsoft.net/jodit/)
![Crop Image](http://xdsoft.net/jodit/stuf/crop.jpg)
![Resize Image](http://xdsoft.net/jodit/stuf/resize.jpg)

### 2.4.22
* Added contextmenu module.
* Added context menu in FileBrowser
* Added preview in FilwBrowser

### 2.4.21
* Fixed TableProcessor's bugs. In a situation did not appear resizer cells and the resizer throughout the table.

### 2.4.20
* Fixed z-index Popap
* Fixed behavior of selection table cells

### 2.4.17
Fixed copy-paste html behavior

### 2.4.16
Fixed bug on after type `Enter`

### 2.4.15
Fixed bug with insert `OL` tag and Fixed Dom module work with Text node

### 2.4.12
Added [toolbarButtonSize](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#toolbarbuttonsize) Size of icons in the toolbar (can be "small", "middle", "large")
```javascript
var editor  = new  Jodit("#editor", {
    toolbarButtonSize: "small"
});
```
### 2.4.10
* Added [node.create](http://xdsoft.net/jodit/doc/module-Node.html#create) method
```javascript
var editor = new Jodit('.jodit'),
    node = editor.node.create('text', 'Hellow world');
editor.s.insertNode(node);
```
* Added [link](http://xdsoft.net/jodit/doc/module-link.html) plugin. And its options
  * [processPastedLink](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#link) Wrap inserted link in `<a href="link">link</a>`
  * [openLinkDialogAfterPost](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#link) Open Link dialog after post
  * [removeLinkAfterFormat](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#link) When the button is pressed to clean format, if it was done on the link is removed like command `unlink`
* Replace format icon

### 2.4.8
Fixed Base icons [issue](https://gist.github.com/leonderijke/c5cf7c5b2e424c0061d2)

### 2.4.6
Fast Fixed in JJE
Fixed a lot of bugs in Jodit

### 2.4.1
* Fixed a lot of bugs in Dom module
* Fixed a lot of bugs in TableProcessor module
* Replace PNG icon on SVG sprite
* Added new module Icons
* Added theme `Dark`
* Fixed bug Popap's module
* Divide one less file by modules

### 2.3.59
* Added [Cookie](http://xdsoft.net/jodit/doc/module-Cookie.html) module
* Added [saveModeInCookie](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#savemodeincookie) if it is true that the current mode is saved in a cookie , and is restored after a reload of the page
* In Joomla Jodit Editor(JJE) added corresponding option saveModeInCookie [Download Jodit Joomla editor](http://xdsoft.net/jodit/release/joomla.zip)

### 2.3.57
* Fixed issue with `input[type=checkbox]` and [Dom.attr](http://xdsoft.net/jodit/doc/module-Dom.html#attr) method
* Release Joomla Jodit Editor (JJE) [Download JJE](http://xdsoft.net/jodit/release/joomla.zip)

### 2.3.53
* Added option [cleanHTML.cleanOnPaste](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#cleanhtml) The plugin [cleanHTML](http://xdsoft.net/jodit/doc/module-cleanHTML.html) automatically cleans up content from Microsoft Word and other HTML sources to ensure clean, compliant content that matches the look and feel of the site.
* Added [beforePaste](http://xdsoft.net/jodit/doc/module-Jodit.html#~event:beforePaste),[processPaste](http://xdsoft.net/jodit/doc/module-Jodit.html#~event:processPaste),[afterPaste](http://xdsoft.net/jodit/doc/module-Jodit.html#~event:afterPaste) events

### 2.3.49
Added [iframeBaseUrl](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#iframebaseurl) option - Base URL where the root directory for [iframe](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#iframe) mode

### 2.3.48
Added [spellcheck](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#spellcheck) option specifies whether the editor is to have its spelling and grammar checked or not

### 2.3.47
Added [removeEmptyBlocks](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#removeemptyblocks) option - Remove empty blocks

```javascript
var editor = new Jodit('#editor', {
   removeEmptyBlocks: false
});
editor.val(' ');// add space in editor
console.log(editor.val()); //<p>&nbsp;</p>

editor.options.removeEmptyBlocks = true;
editor.val(' ');
console.log(editor.val()); //''
```

### 2.3.46
* Fixed critical bug in Safari (window.performance)
* Fixed bug when editor can get selection from another place

### 2.3.44
Added [direction](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#direction) option.
The writing direction of the language which is used to create editor content.
Allowed values are:
* '' (an empty string) – Indicates that content direction will be the same as either the editor UI direction or the page element direction.
* 'ltr' – Indicates a Left-To-Right text direction (like in English).
* 'rtl' – Indicates a Right-To-Left text direction (like in Arabic).

### 2.3.43
Fixed styles bugs

### 2.3.41
When [filebrowser.showFoldersPanel](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#filebrowser) === false show 4 colums in filelist

### 2.3.40
* Added [filebrowser.moveFolder](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#filebrowser) option. Allow/deny move folder
* Added [filebrowser.moveFile](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#filebrowser) option. Allow/deny move file
* Added [filebrowser.showFoldersPanel](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#filebrowser) option. Hide/show folders panel in filebrowser

### 2.3.39
Fixed [Filebrowser](http://xdsoft.net/jodit/doc/module-Filebrowser.html) uploader's options bug.
Previously , you had to either use a general [Uploader](http://xdsoft.net/jodit/doc/module-Uploader.html) module settings , or override them completely
```javascript
var editor = new Jodit('.redactor', {
    filebrowser: {
        uploader: null
    },
    uploader: {
        url: 'uploader.php',
        format: 'json',
    }
});

// or
var editor = new Jodit('.redactor', {
    filebrowser: {
        uploader:  {
            url: 'uploader.php',
            format: 'json',
            filesVariableName: 'fils',
            //... all options from [uploader](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#uploader)
        }
    }
});
```

Now you can just override some of your settings
```javascript
var editor = new Jodit('.redactor', {
    filebrowser: {
        uploader: {
            url: 'uploader2.php',
        }
    },
    uploader: {
        url: 'uploader.php',
    }
});
```

### 2.3.38
* Fixed i18n bug
* [useSplitMode](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#usesplitmode) set default false
* Fixed toolbar width after fullsize mode
* Fixed [#issue5](https://github.com/xdan/jodit/issues/5)

### 2.3.37
Fast fix
### 2.3.36
* Added plugin `Fullsize`. Now you can change fullsize mode
```javascript
var editor = new Jodit();
editor.events.fire('toggleFullsize');
editor.events.fire('toggleFullsize', [true]); // fullsize
editor.events.fire('toggleFullsize', [false]); // usual mode
```
* Added [globalFullsize](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#globalFullsize) (default `true`) if true, after `fullsize` - all parents element get `jodit_fullsize_box` class (z-index: 100000 !important;)
* Fixed focus bug

### 2.3.35
* Fixed placeholder style
* Fixed [Dom.css](http://xdsoft.net/jodit/doc/module-Dom.html#~css) then
```html
<div class="idclass" style="margin-top:20px;"></div>
```
```javascript
Jodit.modules.Dom('.idclass').css('margin-top');//has returned string `20px`
Jodit.modules.Dom('.idclass').css('margin-top');//now it returns int `20`
```

### 2.3.33
* Fixed placeholder style. Placeholder placed in a separate module [Placeholder](http://xdsoft.net/jodit/doc/module-Placeholder.html)
* Added [showPlaceholder](http://xdsoft.net/jodit/doc/module-Placeholder.html#showplaceholder) option
* Added [useInputsPlaceholder](http://xdsoft.net/jodit/doc/module-Placeholder.html#useinputsplaceholder) option
* Added [placeholder](http://xdsoft.net/jodit/doc/module-Placeholder.html#placeholder) option

### 2.3.32
Added [uploader.data](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#uploader) option. Data to be sent to the server like POST parameters
### 2.3.31
Added [editorCssClass](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#editorcssclass) option - Class name that can be appended to the editor
Fixed internacionalization
### 2.3.30
Added [triggerChangeEvent](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#triggerchangeevent) option
Fixed uploader's options - When the uploader is not configured, the editor still displays images upload button
### 2.3.29
Add [Dom.defaultAjaxOptions.async](http://xdsoft.net/jodit/doc/module-Dom.html#.__.defaultAjaxOptions) By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false
### 2.3.28
Added `headers` option in {@link module:FileBrowser|FileBrowser} and {@link module:Uploader|Uploader}. But primarily in {@link module:Dom|Dom}
```javascript
var token = document.querySelector('meta[name="csrf-token"]').getAttribute('content'),
    editor = new Jodit("#redactor", {
        uploader: {
            url: '../connector/index.php?action=upload',
            headers: {
                'X-CSRF-Token': token
            }
        },
        filebrowser: {
            ajax: {
                url: '../connector/index.php',
                headers: {
                    'X-CSRF-Token': token
                }
            }
        },
    });
// or replace global options
Jodit.modules.Dom.defaultAjaxOptions.headers = {
    headers: {
        'X-CSRF-Token': token
    }
};
```
```javascript
Jodit.modules.Dom.ajax({
    url: 'data.json',
    headers: {
        'Accept-Language': 'en-US,en;q=0.8,ru;q=0.6,de;q=0.4,ja;q=0.2'
    },
    success: function (resp) {
        console.log(resp)
    }
})
```
### 2.3.27
Fixed [#issues1](https://github.com/xdan/jodit/issues/1)
### 2.3.24
Fixed dialog's module when was opened Promt window, after Enter submit the form and the page reloaded.
Fixed connector's bugs
Update [Jodit.i18n](http://xdsoft.net/jodit/doc/module-Jodit.html#.i18n) method. Now it can be used staticly
```javascript
var editor = new Jodit("#redactor", {
     langusage: 'ru'
});
console.log(editor.i18n('Cancel')) //Отмена;

Jodit.defaultOptions.language = 'ru';
console.log(Jodit.prototype.i18n('Cancel')) //Отмена

Jodit.lang.cs = {
   Cancel: 'Zrušit'
};
Jodit.defaultOptions.language = 'cs';
console.log(Jodit.prototype.i18n('Cancel')) //Zrušit

Jodit.lang.cs = {
   'Hello world': 'Hello 1$ Good 2$'
};
Jodit.defaultOptions.language = 'cs';
console.log(Jodit.prototype.i18n('Hello world', 'mr.Perkins', 'day')) //Hello mr.Perkins Good day
```
Fixed [Jodit.destroy](http://xdsoft.net/jodit/doc/module-Jodit.html#.destroy) method
```javascript
var editor = new Jodit('.jodit');
editor.destroy();
```
### 2.3.22
Fixed bug when Dialog module was used without Jodit context
```javascript
Jodit.Alert('Hello world!!!');
```
### 2.3.20
Fixed dialog's module zIndex manage.
Fixed [Dom.css](http://xdsoft.net/jodit/doc/module-Dom.html#~css) method bug. That example has not worked.
```javascript
Jodit.modules.Dom('.someelement').css('z-index', 1000)
```
### 2.3.19
Fixed bug in Uploader module when `http://sitename.net/jodit///files/fg.jpg` was replaced `http:/sitename.net/jodit/files/fg.jpg`
### 2.3.18
Added `afterInsertImage` event - triggered after image was inserted [selection.insertImage](http://xdsoft.net/jodit/doc/module-Selection.html#-insertImage__anchor).
This method can executed from [Filebrowser](http://xdsoft.net/jodit/doc/module-Filebrowser.html) or [Uploader](http://xdsoft.net/jodit/doc/module-Uploader.html)
```javascript
var editor = new Jodit("#redactor");
editor.events.on('afterInsertImage', function (image) {
    image.className = 'bloghead4';
});
```
### 2.3.15
Fixed bug with inserting table
### 2.3.14
Work with table became faster
### 2.3.12
* Fixed filbrowser bug. When a new file is uploaded file list has not been updated
* Added [dialog.zIndex](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#.dialog) option

### 2.3.11
Fixed toolbar width fot fullsize mode

### 2.3.10
* Fixed CodeMirror bug on download XML parser
* Fixed CodeMirror bug endless cycle
* Fixed overflow behavior in fullsize mode

### 2.3.8
Fixed connector problem and Fixed item's style in filebrowser
### 2.3.3
Switched on FontAwesome icons
### 2.3.0
Added copy-paste image file for FireFox
### 2.2.6
Fixed copy-paste for FireFox
### 2.2.5
Added copy-paste support by clipboard image. [Try](http://xdsoft.net/jodit) paste print screen.
### 2.2.4
Added the ability in the file browser to obtain data about the file not as a string and as an object with parameters {file: 'name.jpg', thumb: '_thumbs/name.jpg'}
### 2.2.3
Fixed conflict between textProcessor and Beatyfier plugins
### 2.2.2
Fixed BACKSPACE entering behavior. And Fixed ie10 support
### 2.2.0
Added [iframe](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#.iframe), [iframeStyle](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#.iframeStyle), [iframeIncludeJoditStyle](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#.iframeIncludeJoditStyle), [iframeCSSLinks](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#.iframeCSSLinks), [width](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#.width), [height](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#.height), [minHeight](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#.minHeight).
 `iframe` by default false. When this option is enabled, the editor's content will be placed in an iframe and isolated from the rest of the page.
 `width` and `height` you can set size fot editor
### 2.1.0
Added internationalization. Read more http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#.language
### 2.0.9
Added Split mode. Added [useSplitMode](http://xdsoft.net/jodit/doc/Jodit.defaultOptions.html#.useSplitMode) options (default true) Example [here](http://xdsoft.net/jodit/#splitmode)
### 2.0.8
Fixed dialog bug
### 2.0.4
Added CodeMirror plugin. Enable by default {@link defaultOptions~codeMirror.|options.codeMirror}
### 2.0.0
We got rid of jQuery
### 1.2.1
Fixed bug in filebrowser
### 1.2.0
Fixed bug when [selection.insertHTML](http://xdsoft.net/jodit/doc/module-Selection.html#-inner-insertHTML__anchor) dosn't work without focus
### 1.1.0
Fixed bug with uploader and filebrowser
### 1.0.6
If source `textarea` has `placeholder` attribute then Jodit use it how placeholder
### 1.0.4
Added About button
### 1.0.1
First release
