# Change History This document tracks the enhancements and bug fixes between releases of WYMeditor. ## 1.0.0b5 (Beta 5) *release-date* July 31, 2013 ### Enhancements * We now have all of the documentation in one place at [wymeditor.readthedocs.org](https://wymeditor.readthedocs.org)! No more switching back and forth between the old Trac site and the github Wiki. The new documentation uses [Sphinx](http://sphinx-doc.org/) and new pull requests will now be able to come with `docs/` already committed! Thanks to Nick McLaughlin for the herculean effort in combining the years of spread-out documentation. * We now document how to run WYMeditor with jQuery 1.8.x and 1.9.x via [jquery-migrate](https://github.com/jquery/jquery-migrate/). The unit tests now also support those versions of jQuery. * Some community members have created a [Django-CMS 3](https://github.com/wymeditor/djangocms_wymeditor_plugin) plugin for WYMeditor. If you're upgrading from Django-CMS 2 to 3, you'll want to check it out. * Tables can now be inserted and used in lists. Previously, the editor would not let the user insert a table anywhere in a list, but now, the user can insert a table at any point in a list or sublist and can even insert multiple tables in the same list item. In addition, the tables should properly indent, outdent, and space themselves within a list. * Elements in the editor can now easily be flagged to be removed from the editor output by the XHTML parser. This allows elements to be "editor-only" in the sense that they will be visible in the editor but not included in the outputted XHTML from the editor. Simply add the class `WYMeditor.EDITOR_ONLY_CLASS` to an element to specify it to be removed by the XHTML parser in this manner. * Classes can now be specified to be removed from tags' `class` attribute by the XHTML parser. Simply add a string for each of the class names to remove to the `WYMeditor.CLASSES_REMOVED_BY_PARSER` array, and the XHTML parser will remove all of those classes from all the tags in the editor's output. * `div` elements are now visible and labeled in the editor so that they can easily be worked with. In addition, `div` containers can now be switched to other container types using the containers panel. This change was made to allow for the addition of the selectable default root container feature described in the following point. * The default root container used by the editor can now be specified as an option to be either `p` or `div`. The specified container for this option will be used by default when an unspecified new container is created in the root of the editor, and it will also be used as the default container for wrapping any text or inline elements inserted directly into the editor body. In addition, the editor will enforce that the unchosen option for the default root container is not allowed in the root of the document by converting the unchosen default root container to the chosen default root container when possible (e.g. if `div` is specified as the default root container, the editor will convert `p` elements in the root of the document to `div` elements when the user modifies those containers). The default root container option can be specified as an option of the new `structureRules` option in the editor's initialization. For example: ```javascript jQuery('.wymeditor').wymeditor({ structureRules: { defaultRootContainer: 'div' } }); ``` ### Bug Fixes * WYMeditor now works properly in Chrome when using jQuery 1.4 or higher. Thanks to several folks for outlining the fix and for Nick McLaughlin for the pull request. * When using the bold tool in a heading in Chrome, there was an issue where a span with a style attribute set to `font-weight: normal` would be wrapped around the header's content. This has been fixed so that this span will no longer occur after bolding. * When attempting to insert an image outside of a container in Chrome such as in the case of inserting an image into a blank document, there was an issue where the image was being moved outside of the wymeditor body causing none of the user-entered values for the attributes of the image to be applied to the image. This has been fixed so that inserting an image properly places it within the wymeditor body and properly applies the user-entered values for its attributes. * When switching between a normal table cell and a table header using the "Table Header" option in the containers panel in the editor, any `colspan` or other attributes were being lost in the container conversion. This has been fixed so that all attributes such as `colspan` are retained when switching between a normal table cell and a table header. * In various situations when working in the editor, hitting enter to create a new container in the root of the document would erroneously create a `div` container instead of a `p` container. This `div` container would not be labeled in the editor, and it could not be converted to another type of container. As part of the feature addition of a selectable default root container, this issue has been fixed so that the selected default root container is always inserted when hitting enter to create a new container in the root of the document. In addition, `div` containers are now clearly labeled in the editor and can now be converted to other types of containers using the containers panel. * A couple bugs in IE dealing with content not allowed to be in the root of the editor body not being properly wrapped in containers have been fixed. The first bug fixed was that text directly typed into the body of the editor was not being wrapped in a container, but this is now fixed and the text will be properly wrapped in the default root container. The second bug fixed was that inline elements not allowable to be directly inserted into the body of the editor (e.g. `strong`, `em`, `a`, etc.) were not being wrapped in a container, but this is also now fixed and those elements will be properly wrapped in the default root container when modified in the body. ### Build Process Improvements * [Grunt](http://gruntjs.com/) has been set up for the WYMeditor project so that the unit test suite can now easily be run from the command line in a headless [Phantom.js](http://phantomjs.org/) browser using the Grunt `test` task. See the testing section in the README or the docs for more information. * The WYMeditor project is now set up on [Travis CI](https://travis-ci.org/) for continuous integration using the unit test suite run with a variety of jQuery versions using the Grunt `test` task. * [Selenium2](http://seleniumhq.org/) tests have been set up for the WYMeditor project to allow for testing coverage of some behaviors that can't be replicated well with JavaScript. See the README for information on running the Selenium tests. ### Deprecation * The `WYMeditor.editor.html()` function has been deprecated and replaced with the `WYMeditor.editor._html()` function that has the same functionality. This change was made to discourage users from using the `html()` function (which is intended only for internal use) as a means to get the HTML output from the editor because that function bypasses all parsing and cross-browser cleanup for the HTML. In most cases, users should be using the `WYMeditor.editor.xhtml()` function to get the HTML output from the editor because it does parse and apply cross-browser cleanup to the HTML. Now, using the `html()` function will still work but just give a console warning of its deprecation, but the function will be fully removed in the release of version 1.0.0. ## 1.0.0b4 (Beta 4) *release-date* February 15, 2013 ### Enhancements * Added a Danish translation. Thanks Sebastian Kolind. * The Makefile now supports building a WYMeditor distribution based on Google's Closure Compiler instead of UglifyJS. Thanks Michael Farrell. ### Bug Fixes * The editor area is now properly displayed when using the Compact skin and styling with `white-space: nowrap'`. Thanks to Jorge Salinas for the fix. * Fixed several bugs related to parsing void elements (br, hr, etc) which could be either self-closing or not. These usually manifested when used near other inline elements (eg. span). Thanks to Craig MacGregor for the fix. * Fixed several XHTML-strict non-compliance problems. WYMeditor aims to always output fully-compliant XHTML. Thanks Philipp Cordes for the report and fix. * The Makefile now fails more gracefully when you don't have UglifyJS installed and you attempt to build a distribution. Thanks to Michael Farrell for the fix. * Fixed the Slovak translation language code. Thanks to Josef Šimánek for the fix. * In 1.0.0b2, we added a bug fix to allow DIV tags to peacefully co-exist with P tags in document structure. It turned out that this fix was a bit half-baked and actually broke both P and DIV tags in subtle ways, especially in webkit browsers. We've reverted that change, so DIVs are now just as broken as they were previously, but P tags are back to being peachy. The full fix for mixing DIV and P tags for structure is being worked on as part of [Issue 360](https://github.com/wymeditor/wymeditor/pull/360) and will hopefully land in 1.0.0b5, which is now definitely going to be a thing. ### 1.0.0 Blocking Issues In an attempt to ovary-up (or whatever your preferred genatalia) and actually get a 1.0.0 out the door, we've moved the goalposts a bit. The applicable 1.0.x issues have been narrowed down a bit to the major bugs in supported browsers. I understand that `major` is in the eye of the beholder, but this is an attempt to more-effectively allocated the project's limited resources. The remaining issues are listed on the [1.0.0 milestone](https://github.com/wymeditor/wymeditor/issues?milestone=5) and you'll notice there are no features that made the cut. It's all bug-fix mode. Folks have been using WYMeditor in production longer than Chrome has existed as a browser. Perhaps it's time to not pretend like a non-1.0 version number means anything. ## 1.0.0b3 (Beta 3) *release-date* June 26, 2012 This is a small hotfix release to fix `jQuery.noConflict()` compatibility, which is necessary for Drupal integration. ## 1.0.0b2 (Beta 2) *release-date* June 22, 2012 ### Enhancements * Added a Slovak translation. Thanks Miroslav Bendik. ### Bug Fixes * A missing space in the tools HTML was triggering quirks mode in FF and other browsers. Thanks to corphi for the fix. * Inserting `div` tags via the API or DOM no longer breaks document structure in chrome and safari. Thanks to Jakub Krčma for the fix. * It is once again possible to use the Drupal 7 wysiwyg module to integrate WYMeditor. Thanks to Jean-Francois Hovinne for the patch. * Newline characters are no longer incorrectly removed in IE, which could cause words in copy/pasted lists to join together. Thanks to Jakub Krčma for the fix. * Tables and images are once again properly inserted at your cursor location in Internet Explorer. This was a regression bug in 1.0.0b1. ## 1.0.0b1 (Beta 1) *release-date* February 27, 2012 We're almost there! Following up on the later October alpha release, we're happy to announce the availability of a beta-quality WYMeditor release. This release is not without bugs, but we think it is strictly better than 0.5.0rc2 with a variety of enhancements and bug fixes. Users currently on an earlier alpha or on 0.5.0rc2 are encouraged to try out this release and report any bugs, especially those that are new since 0.5.0rc2. Bugs that are determined to be regressions from 0.5.0rc2 will receive the highest priority fixes. Any feedback or discussion would be appreciated on the [WYMeditor Forums](http://community.wymeditor.org/). Versus 0.5.0rc2 we have: * *19* major bug fixes * *8* major enhancements including a new theme. * A huge internal code refactor to make maintaining and improving WYMeditor easier * A passing unit test suite containing more than 600 tests across all supported browsers ### Upgrade Cycle Once all [milestone 1.0.0 issues](https://github.com/wymeditor/wymeditor/issues?milestone=10&sort=created&direction=desc&state=open) are completed, this cycle will culminate in a 1.0.0 stable release. ### Enhancements * The parser now works harder to correct any invalid list nesting that might occur due to browser-specific problems or HTML that was loaded to begin. On every list action (indent, outdent, order/unordered conversion), the parser crawls your list to make any necessary corrections. This ensures a much more consistent list-editing experience, especially in Internet Explorer. * A new *pretty* theme option is now available for modern browsers (ie9+, FF, Chrome, Safari). This theme uses CSS instead of images to provide context clues for blocks, resulting in fewer HTTP requests and better network performance. Additionally, the context clues have been expanded to provide a better "plain english" explanation of the elements. Give this new theme a swing at [the example](http://wymeditor.no.de/wymeditor/examples/17-pretty-theme.html). You can enable it in your project by passing the `iframeBasePath: "wymeditor/iframe/pretty/"` option to your WYMeditor instance. Thanks to first-time contributor Gyuris Gellért for the theme. * The Embed plugin now supports embedding via an iframe. * List indent/outdent has been rewritten to fix several outstanding bugs in various browsers. Indent and outdent are now always opposites of each other (outdenting what you just indented returns you to your original state) and the behavior is consistent across all supported browsers. * A list plugin is now available that enables tab for list indent and shift + tab for list outdent. It is available at `wymeditor/plugins/list/jquery.wymeditor.list.js`. To enable the plugin, create a ListPlugin object via the `wymeditor.postInit` option. eg:: $('.wymeditor').wymeditor({ postInit: function(wym) { var listPlugin = new ListPlugin({}, wym); } }); * A new Table editing plugin is now available The table editing plugin enables the following: * Users can now add and remove rows and columns from existing tables. * Users can merge table cells to create either `colspan` or `rowspan`. * Hitting the `tab` key while inside a table now moves the cursor to the next cell, improving usability when editing tables. This can be disabled by passing `enableCellTabbing: false` to the plugin initialization. The plugin is available at `wymeditor/plugins/table/jquery.wymeditor.table.js`. To enable the plugin, instantiate it during the `wymeditor.postInit` option. eg:: $('.wymeditor').wymeditor({ postInit: function(wym) { var tableEditor = wym.table(); } }); * Rangy is now included as part of the distribution and used to create consistent cross-browser selection objects. * A console warning message is now created if no wymPath option is provided and it can't be automatically determined. The editor also attempts to continue with the assumption that your wymPath is your current directory, instead of throwing an exception immediately. ### Bug Fixes * A rare bug affecting ie8 users with certain combinations of CSS attributes has been fixed (with a work-around). This bug would manifest as all content in the editor temporarily and randomly disappearing after a keypress, only to re-appear when the user moved their mouse. * The editor height no longer changes height by a few pixels the first time someone hovers over a tool. * Several list indent/outdent bugs that could result in invalid HTML and broken lists are now fixed. Users can no-longer break their lists with specific combinations of double indents and outdents. * The HTML parser/validator now corrects unclosed