A JS library for building WYSIWYG editors for HTML content.

Overview

For information on the ContentTools 2.x roadmap please view the: Roadmap repo


ContentTools

Build Status

A JS library for building WYSIWYG editors for HTML content.

Demo

Install

Using bower

bower install --save ContentTools

Using npm

npm install --save ContentTools

Building

To build the library you'll need to use Grunt. First install the required node modules (grunt-cli must be installed):

git clone https://github.com/GetmeUK/ContentTools.git
cd ContentTools
npm install

Install Sass (if not already installed):

gem install sass

Then run grunt build to build the project.

Testing

To test the library you'll need to use Jasmine. First install Jasmine:

git clone https://github.com/pivotal/jasmine.git
mkdir ContentTools/jasmine
mv jasmine/dist/jasmine-standalone-2.0.3.zip ContentTools/jasmine
cd ContentTools/jasmine
unzip jasmine-standalone-2.0.3.zip

Then open ContentTools/SpecRunner.html in a browser to run the tests.

Alternatively you can use grunt jasmine to run the tests from the command line.

ContentTools via jsdelivr

ContentTools is available via the jsdelivr open source CDN, to reference a file from the ContentTools build directory use the following URL format:

http://cdn.jsdelivr.net/npm/ContenTools@{version}/{file}

For example to access the current primary JavaScript file the URL would be:

https://cdn.jsdelivr.net/npm/[email protected]/build/content-tools.min.js

As the project's CSS uses relative file paths you will need to either role your own version of CSS from the SASS files (recommended) or override references to fonts/images within your local CSS.

Documentation

Full documentation is available at http://getcontenttools.com/api/content-tools

Where to post...

  • How do I? -- StackOverflow
  • I got this error, why? -- StackOverflow
  • I got this error and I'm sure it's a bug -- post an issue
  • I have an idea/request -- post an issue
  • Why do you? -- chat with me on gitter (I may then post it as an issue)
  • When will you? -- chat with me on gitter (I may then post it as an issue)
  • You suck and I hate you -- contact us privately at [email protected]!
  • You're awesome -- please find a megaphone and suitably high rooftop (but seriously any help spreading the word about ContentTools is much appreciated)

Stolen almost in it's entirety from this post on meta.stackexchange.com

Browser support

The current aim is for all the libraries to support IE9+, Chrome and Firefox. Test suites are complete for all the libraries except ContentTools and I'm using Jasmine to check that the tests pass in those browsers.

There will be some visual differences for ContentTools in IE9 as I use CSS animations for some of the UI feedback.

Helpful organizations

ContentTools is developed using a number of tools & services provided for free by nice folks at organizations committed to supporting open-source projects including BrowserStack, GitHub and jsdelivr, Travis CI.

Comments
  • Clicking outside an empty text element makes it unfocusable

    Clicking outside an empty text element makes it unfocusable

    This is better explained by following these steps:

    1. put your cursor on the end of a paragraph
    2. press enter to create an empty paragraph
    3. click just a bit above or below the empty paragraph (outside to make the caret go away, but not on another element)
    4. you can't click on the empty paragraph anymore to put the caret back inside.

    May be related to #116

    bug 
    opened by bfintal 27
  • How to crop images ?

    How to crop images ?

    Hello, First of all thank you for this amazing library.

    I can't crop images in dialog i followed the http://getcontenttools.com/tutorials/handling-image-uploads tutorial and the following link contain the image upload function ----> http://ideone.com/br0wlV

    i can't update the crop Region and crop buttons didn't work with me. Thanks in advance.

    question 
    opened by mohamedveron 25
  • Image doesn't become editable after insert

    Image doesn't become editable after insert

    Hello, first I'll like to thank you for this amazing app, I'm just hoping you can help me out on a little issue.

    I was able to make all the images functions work but when the image is saved into the editor for some reason the editor does not allow me to edit it, change sizes or even move or align it. Is there any method needed to be called on the imageUploader.save function to enable these features?

    Best regards.

    bug 
    opened by jlgit 20
  • Disable Rich Text Options

    Disable Rich Text Options

    Is it possible already, or to add in, the ability to turn off styling options for specific areas of text, using an extra data attribute?

    Use case: On an editable page there are regions, such as headings, where I don't want a user to be able to apply formatting beyond plain text as to do so would break the design. On other sections of the page the editor should be able to use the full rich text toolbar.

    I haven't been able to find a way of doing this in the documentation. If it is in there then maybe it should be highlighted on the demo page.

    Thank you.

    enhancement question 
    opened by dominicr 18
  • Can't edit files that were included or read by php

    Can't edit files that were included or read by php

    I made small system that allows you to chose which page to edit using php. First i used include 'file'; then i saw i cant edit them so i went with other method which reads the whole file and places it in webpage. Now i have yellow box around it which is indicator that is editable. But it's not. So i totally removed editable region from main page and placed it in function where php is "including" desired files. Same result.

    question 
    opened by ElStefanos 17
  • Support for dynamic creation and management of editable regions

    Support for dynamic creation and management of editable regions

    Is it possible to allow editing of div children elements of editable parent? I could definitelly use that for user-friendly responsive layouts creation.

    I have this idea: Tool similar to insert table, which inserts div.row. If div.row is focused, another tool insert div.col will be activated, so user can insert div.col as direct child of focused div.row. This div.col could be examined in inspector bar, so predefined styles could be applied on it (.col-lg-6 etc.). But this will need support for class selectors on style targets for ContentTools.Style class. It could be used like: new ContentTools.Style('1/2 Column on Large screen', 'col-lg-6', ['div.col']),

    enhancement question 
    opened by tvaliasek 16
  • Edit mode right after loading

    Edit mode right after loading

    I need to start editor on the page as soon as it will be loaded. So I've added Editor start method in load event listener:

    editor = ContentTools.EditorApp.get();
    editor.init('[data-editable], [data-fixture]', 'data-name');
    editor.start();
    

    Edit mode is turned on, editor.getState() has been changed from ready to editing, but start editor button one the top-left corner is not changed to save\cancel buttons. And clicking on it just hides it and displays save\cancel buttons which work as expected then.

    question 
    opened by antonkomarev 15
  • Enable rails js_compressor `:uglifier`

    Enable rails js_compressor `:uglifier`

    When trying to edit in production. I'm getting errors in production Uncaught TypeError: this.element.tagName is not a function on the concat/uglifier source

    errors

    bug 
    opened by dakotalightning 15
  • newInquiryEditor._ignition.trigger is not a function

    newInquiryEditor._ignition.trigger is not a function

    I try to hide the editing icon and auto-edit the content, but cannot make it with xxx._ignition.trigger('start'), the following is my code:

    HTML:

    <template name="newInquiryModal">
        <div class="modal fade" id="newInquiryModal" data-keyboard="false">
            <div class="modal-dialog">
                <div class="modal-content">
                    {{> newInquiryModalInner}}
                </div>
            </div>
        </div>
    </template>
    
    <template name="newInquiryModalInner">
        <div class="modal-header popupHeader">
            <h3>New Inquiry</h3>
            <span class="modal_close js-cancel"><span class="glyphicon glyphicon-remove"></span></span>
        </div>
        <div class="modal-body">
            <div class="form-group">
                <div class="input-group">
                    <span class="input-group-addon">Inquiry</span>
                    <div data-editable data-name="newinquiry1" id="newinquiry1"> </div>
                </div>
            </div>
    
        </div>
        <div class="modal-footer">
            <button type="button" class="btn btn-primary js-submit">Submit</button>
            <button type="button" class="btn btn-primary js-cancel">Cancel</button>
        </div>
    </template>
    

    .js:

    
                newInquiryEditor = ContentTools.EditorApp.get();
                newInquiryEditor.init('[data-editable]', 'data-name', fixtureTest=null, withIgnition=true);
                //newInquiryEditor.start();
                newInquiryEditor._ignition.trigger('start');
    
    
                // Starting the editor manually
                //editor._ignition.trigger('start');
    
                // Stoping the editor manually (save)
                //editor._iginition.trigger('stop', true);
    
                // Stoping the editor manually (cancel)
                //editor._iginition.trigger('stop', false);
    
                newInquiryEditor.addEventListener('saved', function(ev) {
                    var saved;
                    console.log(ev.detail().regions);
                    if (Object.keys(ev.detail().regions).length === 0) {
                        return;
                    }
                    newInquiryEditor.busy(true);
                    saved = (function(_this) {
                        return function() {
                            newInquiryEditor.busy(false);
                            return new ContentTools.FlashUI('ok');
                        };
                    })(this);
                    return setTimeout(saved, 2000);
                });
                FIXTURE_TOOLS = [['undo', 'redo', 'remove']];
                ContentEdit.Root.get().bind('focus', function(element) {
                    var tools;
                    if (element.isFixed()) {
                        tools = FIXTURE_TOOLS;
                    } else {
                        tools = ContentTools.DEFAULT_TOOLS;
                    }
                    if (newInquiryEditor.toolbox().tools() !== tools) {
                        return newInquiryEditor.toolbox().tools(tools);
                    }
                });
    
                $("#newInquiryModal").modal("show");
    

    However, I can use the newInquiryEditor.start() to show up the editor.

    Is there anything I should check for my code.

    question 
    opened by FrancoisYu 14
  • Editor does not load demo in Edge

    Editor does not load demo in Edge

    Hi,

    I noticed that the editor in the demo does not load when you click the pencil in Microsoft Edge, UNLESS you have the dev tools open, which seems really weird. No errors thrown, it just doesn't load (spinning gear).

    I tried it on 3 different computers (owned by different people) with the same results.

    Edge version 25.10586.0.0

    bug help wanted 
    opened by ElijahFowler 14
  • Bower package

    Bower package

    Hi! Awesome work done here, really enjoy this!

    I'm currently writing an Angular wrapper for this project, and I wonder if you could add this package to bower? Will simplify a lot of things as I currently have to include the build in my project and every time you create a new compatible build I have to replace the old build with the new build.

    Cheers!

    enhancement 
    opened by Svenskunganka 14
  • Add image pasting ability

    Add image pasting ability

    I don't know CoffeScript at all, so a thorough review is required, the changes here are reversed from a proven JS implementation I made. If you like it, please adjust accordingly.

    Example code for handling the paste event:

      const uploader = function (ev) {
        var formData = new FormData();
        formData.append("image", ev.detail().file);
    
        var xhr = new XMLHttpRequest();
        xhr.open("POST", "/api/upload");
        xhr.onload = function () {
          if (xhr.status == 200) {
            const response = JSON.parse(xhr.responseText) || {};
            if (ev.detail().element && response.url) {
              editor.pasteHTML(ev.detail().element, `<p><img src="${response.url}"/></p>`, true);
            }
          } else {
            console.log("Nope");
          }
        };
    
        xhr.send(formData);
      };
    
      editor.addEventListener("imagepaste", uploader);
    

    Or, you can close it, no hard feelings :)

    opened by deejayy 0
  • npm install failed

    npm install failed

    Hi, I was installing the library into a Docker container and after a bunch of deprecated notices, npm install threw an error. I ran git clone per the readme, cd ContentTools and then npm install:

    npm ERR! code 1 npm ERR! path /var/www/html/resources/js/ContentTools/node_modules/phantomjs npm ERR! command failed npm ERR! command sh -c /tmp/install65745564693.sh npm ERR! PhantomJS not found on PATH npm ERR! Phantom installation failed TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received undefined npm ERR! at new NodeError (node:internal/errors:371:5) npm ERR! at validateString (node:internal/validators:120:11) npm ERR! at Object.join (node:path:1172:7) npm ERR! at findSuitableTempDirectory (/var/www/html/resources/js/ContentTools/node_modules/phantomjs/install.js:127:30) npm ERR! at /var/www/html/resources/js/ContentTools/node_modules/phantomjs/install.js:476:19 npm ERR! at nextTickCallback (/var/www/html/resources/js/ContentTools/node_modules/kew/kew.js:47:28) npm ERR! at processTicksAndRejections (node:internal/process/task_queues:78:11) { npm ERR! code: 'ERR_INVALID_ARG_TYPE' npm ERR! } TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received undefined npm ERR! at new NodeError (node:internal/errors:371:5) npm ERR! at validateString (node:internal/validators:120:11) npm ERR! at Object.join (node:path:1172:7) npm ERR! at findSuitableTempDirectory (/var/www/html/resources/js/ContentTools/node_modules/phantomjs/install.js:127:30) npm ERR! at /var/www/html/resources/js/ContentTools/node_modules/phantomjs/install.js:476:19 npm ERR! at nextTickCallback (/var/www/html/resources/js/ContentTools/node_modules/kew/kew.js:47:28) npm ERR! at processTicksAndRejections (node:internal/process/task_queues:78:11)

    opened by fpolli 2
  • Hot to keep style attributes on save.

    Hot to keep style attributes on save.

    Hi, I'm trying to use the style attribute to store modifications like color or font-size change, however when I save the project, these attributes are erased. How could I keep these attributes on save?

    Here is a code snippet, used in a custom tool:

    SelectColor();
    element._domElement.style.color = selectedColor;
    element.addCSSClass(this.className);
    callback(true);
    return this.dispatchEditorEvent('tool-applied', toolDetail);
    
    opened by 33Heisenberg33 0
  • How to use assign ?

    How to use assign ?

    I'm trying to build a minimal HTML editor, in my HTML file I have some buttons and content-editable div like this :

    <button id="tag_b">B</button>
    <div id="text_prompt" contenteditable="true" data-editable data-name="main-content"></div>
    

    The goal is when I click the button, the text selected in the div have the bold tag. In the doc I saw the method ContentTools.Tool.apply(element, selection, callback) In the source I saw that there is ContentTools.Bold.apply(element, selection, callback) So I tried something like this :

    editable = document.getElementBiId('text_prompt');
    ContentTools.Bold.apply(editable, ContentSelect.Range.query(editable));
    

    It does not work because editable is not a member of ContentTools.Node, I tried to load the editor and to put the first region as the first argument of the apply method with no success. What is the right to do what I want to do ?

    question 
    opened by D-Kalck 2
  • Missing translation in /src/scripts/ui/dialogs/table.coffee

    Missing translation in /src/scripts/ui/dialogs/table.coffee

    In /src/scripts/ui/dialogs/table.coffee on line 93 there is a static text "Apply" instead of the translation (ahich exists in the translations files)

    @_domApply.textContent = 'Apply'

    I couldn't figure out how to fix it because of lack of know-how in CoffeeScript, otherwise I would love to create a PR for this.

    bug Minor 
    opened by chriszuercher 0
Releases(1.6.16)
  • 1.6.12(Feb 1, 2020)

    • Updated ContentEdit dependency to 1.3.5 which now supports drag / clone of elements (see https://github.com/GetmeUK/ContentEdit/releases/tag/1.3.5) thanks to @cyclaero.
    Source code(tar.gz)
    Source code(zip)
  • 1.6.11(Jan 25, 2020)

    • https://github.com/GetmeUK/ContentTools/issues/542
    • https://github.com/GetmeUK/ContentTools/issues/541
    • https://github.com/GetmeUK/ContentTools/issues/510
    • Added ca.json for catalan translation (thanks to Abel Cano Quintana)

    Thanks to all who reported these issues and contributed fixes.

    Source code(tar.gz)
    Source code(zip)
  • 1.6.10(Aug 9, 2018)

    • Fixed issue where an error was raised if clearing a link from an image with no link
    • Fixed issue where pressing return against a non text element added a new paragraph regardless of whether a tool (dialog) was active
    • Fixed issue where hitting enter while a fixture was active raised an error as the editor attempted to add a paragraph to the fixture
    Source code(tar.gz)
    Source code(zip)
  • 1.6.9(Jul 27, 2018)

  • 1.6.8(Jul 27, 2018)

  • 1.6.7(Jul 27, 2018)

  • 1.6.5(May 21, 2018)

  • 1.6.4(Jan 18, 2018)

    This release fixes and issue where pasting inline content would force inline elements to be stripped and text to be placed across multiple paragraphs.

    Source code(tar.gz)
    Source code(zip)
  • 1.6.3(Jan 11, 2018)

    • Fix for #452 where thead was (re)inserted at the end of the table rather than at the start when using the table tool (thanks to @ccqgithub for the report).
    • Fix for #469 additional HTML big fixes, spans are now removed from copied in content and styles applied are no longer being inserted within the page content on paste.
    Source code(tar.gz)
    Source code(zip)
  • 1.6.2(Jan 7, 2018)

    • Fixes issue #463 where pasting HTML into fixtures would fail (thanks to @a-komarev for the report).
    • Fixes issue #467 where passive save calls (typically used for autosave) would blur the currently focused element (thanks to @darksnake747 for the report).
    • Improved the cleansing of deeper HTML structures which previously meant copy/paste of deeper structures (for example div > div > p) would result in nothing being pasted.
    Source code(tar.gz)
    Source code(zip)
  • 1.6.1(Dec 11, 2017)

  • 1.6.0(Nov 9, 2017)

    HTML copy and paste of HTML content is now supported.

    Sanitising HTML and ensuring that what ends up in the page is safe (especially when copying in from Word docs) isn't a small task, we've spent a couple of weeks testing this across a number of sites and it feels stable - but there's bound to be cases we've missed, please flag issues (with instructions/resources to reproduce) and we'll address them as a priority.

    Source code(tar.gz)
    Source code(zip)
  • 1.5.6(Sep 17, 2017)

    This release only resolves a single issue (#398) where if you save the document with an empty text element selected that element wont be removed from the output (the region HTML typically saved). To resolve this I now blur any focused element on save which triggers the default blur behaviour for an element (which for empty text elements is to remove themselves).

    Source code(tar.gz)
    Source code(zip)
  • 1.5.5(Sep 13, 2017)

    Bug fixes (both reported by @capr :+1:)

    • #444 Fixed issue where attempting to save a empty content fixture (e.g Text element) caused the editor to crash.
    • #443 Fixed issue where the _domRegion attribute against the editor became out of sync with fixtures on init, save and revert.

    New features

    • The editor now supports started and stopped events (to complement the start/stop events).
    Source code(tar.gz)
    Source code(zip)
  • 1.5.2(Aug 18, 2017)

    This upgrade makes it easier to manage fixed editable buttons within your content. For example if our content contains the following HTML:

    <a
        data-ce-tag="p"
        data-fixture
        data-name="my-button"
        href="/test"
        class="button"
        >
        CLICK HERE!!!
    </a>
    

    Pre 1.5.0 this would have been mostly pointless because you wouldn't have been able to modify the HREF attribute, in 1.5.0 it became possible to edit the HREF using the tag inspector, and this little release means you can edit the HREF using the standard link tool which is a more user friendly approach.

    Source code(tar.gz)
    Source code(zip)
  • 1.5.1(Aug 16, 2017)

  • 1.5.0(Aug 16, 2017)

    I've been looking to improve support for Fixtures over the last couple of weeks, not least because we are using text and image fixtures (via the img-fixture tag) heavily in a couple of new projects. This release changes the approach to how fixtures are saved to reflect the latest release of ContentEdit 1.3.0 which means that the html() output for fixtures now includes the outer html not just the inner.

    IMPORTANT If you're not currently using fixtures this change wont effect you, if you are then this change is breaking and will mean that content saved as fixtures will no longer work as only the inner HTML will currently be saved but the outer HTML is now required.

    Fixtures have always been a little experimental and this latest release is a step towards a more stable interface for them.

    New features

    • You can now inspect and changes the attributes for fixtures within the inspector (this is experimental).
    • You can now disable the the alerts on cancel/refresh by setting the ContentTools.CANCEL_MESSAGE to null (#269 - thanks to all who requested this).
    Source code(tar.gz)
    Source code(zip)
  • 1.4.0(Jul 27, 2017)

    New features

    • Support for managing the new ImageFixtures element is now in place, and example can be found at the top of the sandbox demo page. Image fixtures make it easy to manage background images against elements such as hero images or user avatars. Docs to follow shortly.
    • Translation for Uzbek added (thanks to @ruslanmedia), that makes 25 languages (including English).

    Bug fixes

    • Fixed issue with the link dialog not being contained on the page, see issue #397 (thanks to @timemrah for the report).
    • Fixed issue with undo/redo being triggered unintentionally when entering non-latin characters, see issue #390 (thanks to @deartify).
    • Fixed issue with the image uploader fileready handler being called twice, first with an empty value then the file, see issue #385 (thanks to @Trinitonn for the report).

    External update

    • Updated to release 1.2.2 of ContentEdit/
    Source code(tar.gz)
    Source code(zip)
  • 1.3.4(Jul 1, 2017)

    This patch provides a fix for issue #423 (thanks to uncanny for the bug report and suggested fix) and a translation for Arabic kindly provided by XLBro.

    Source code(tar.gz)
    Source code(zip)
  • 1.3.3(Apr 24, 2017)

    This patch release fixes issue #404 (thanks to @damienflament for the report). You should now use detach not detatch (a warning will be used if the detatch method is called).

    Source code(tar.gz)
    Source code(zip)
  • 1.3.2(Apr 11, 2017)

    • We now have a Persian(farsi) translation thanks very much to @jafar-rezaei .
    • The icon font has now been moved into the images build folder and the $image-path-prefix is used in the path to the icon.woff making it easier to use the libraries SASS libraries directly (in particular in a webpack build).
    Source code(tar.gz)
    Source code(zip)
  • 1.3.1(Oct 24, 2016)

    Part of this release is an update to ContentEdit 1.2.1, please view the release notes for the enhancements and bug fixes that introduced: https://github.com/GetmeUK/ContentEdit/releases:

    Thanks to:

    • @carpusmedia for #266 (introduction ContentEdit.LINE_ENDINGS option).
    • @megamuf for #323 (flagging an issue with background-image property when value or url() is not surrounded in quotes).
    • @cgriffin4 for originally reporting #331 (an issue with ordered lists <ol> containing sub lists).
    • @kure- for reporting #339 (an issue with selecting content in IE).
    • @Hoiy for reporting #312
    • @boyum for the Norwegian translation.
    • @joenilson for the Spanish translation.
    • @nzod for reporting and fixing issue #344 (an issue which prevented the selection styles with no element).

    Bug fixes

    • Resolved issue #312 where in some scenarios the regions highlights effect could get stuck on.
    Source code(tar.gz)
    Source code(zip)
  • 1.3.0(Sep 17, 2016)

    Long time in coming but a new release is out with some much needed bug fixes, updated documentation and a few additional features:

    Bug fixes

    • Fixed issue where clicking the ignition switch buttons twice in quick succession would break the editor - thanks to @Hoiy for the spot and report.
    • Fixed issue where EditorApp.revertToSnapshot (used when calling undo/redo) would corrupt key lastModified timestamps against the root element and region elements preventing the correct changes being reported on save - thanks very much to @ChrisKanger for spotting and reporting this.

    Features

    • We now have a Danish translation thanks very much to @Reached.
    • Tab indentation in PreText elements is now a feature - I love this one since most of the time when I'm using CT I'm writing technical documentation with examples, suggested a long time ago by @bfintal (thank you :)) took a little longer than planned to implement.
    • It's now easy to capture events for when tools are applied, you can now listen tool-apply and tool-applied events against the EditorApp. The event includes details of the tool class applied, the element it's applied to and if applicable the content selection.
    Source code(tar.gz)
    Source code(zip)
  • 1.2.11(Aug 15, 2016)

    • Fix for issue #280 where anchored dialogs would appear off-screen. Thanks to @beckend for the report.
    • Fix and tidy up of handling of empty strings and lists being sent through to the editor when initialising. Thanks to @mattsah for the report and fix.
    Source code(tar.gz)
    Source code(zip)
  • 1.2.10(Aug 2, 2016)

    • Fix for issue inserting BR tags into empty paragraphs.
    • Fixed bug where br tags could not be inserted into empty text elements using the return+shift key combination.
    Source code(tar.gz)
    Source code(zip)
Owner
getme
a small team of boffins and creatives obsessed with all things web
getme
A React framework for building text editors.

Draft.js Draft.js is a JavaScript rich text editor framework, built for React and backed by an immutable model. Extensible and Customizable: We provid

Facebook 22.3k Jan 4, 2023
A completely customizable framework for building rich text editors. (Currently in beta.)

A completely customizable framework for building rich text editors. Why? · Principles · Demo · Examples · Documentation · Contributing! Slate lets you

Ian Storm Taylor 26.2k Dec 30, 2022
Collection of tools for building rich text editors.

psst we have great documentation at https://bangle.dev What is bangle.dev ? bangle.dev is a collection of components for building powerful editing exp

null 553 Dec 29, 2022
Raptor, an HTML5 WYSIWYG content editor!

Raptor Editor Raptor Editor is a user-focused extensible WYSIWYG website content editor - check out the Demo. It is designed to be user and developer

PANmedia 533 Sep 24, 2022
The next generation Javascript WYSIWYG HTML Editor.

Froala Editor V3 Froala WYSIWYG HTML Editor is one of the most powerful JavaScript rich text editors ever. Slim - only add the plugins that you need (

Froala 5k Jan 1, 2023
Pure javascript based WYSIWYG html editor, with no dependencies.

SunEditor Pure javscript based WYSIWYG web editor, with no dependencies Demo : suneditor.com The Suneditor is a lightweight, flexible, customizable WY

Yi JiHong 1.1k Jan 2, 2023
A lightweight HTML and BBCode WYSIWYG editor

SCEditor v3.1.1 A lightweight WYSIWYG BBCode and XHTML editor. For more information visit sceditor.com Usage Include the SCEditor JavaScript: <link re

Sam 566 Dec 23, 2022
A modern, simple and elegant WYSIWYG rich text editor.

jQuery-Notebook A simple, clean and elegant WYSIWYG rich text editor for web aplications Note: Check out the fully functional demo and examples here.

Raphael Cruzeiro 1.7k Dec 12, 2022
Quill is a modern WYSIWYG editor built for compatibility and extensibility.

Note: This branch and README covers the upcoming 2.0 release. View 1.x docs here. Quill Rich Text Editor Quickstart • Documentation • Development • Co

Quill 34.3k Jan 2, 2023
Medium.com WYSIWYG editor clone. Uses contenteditable API to implement a rich text solution.

If you would be interested in helping to maintain one of the most successful WYSIWYG text editors on github, let us know! (See issue #1503) MediumEdit

yabwe 15.7k Jan 4, 2023
A lightweight and amazing WYSIWYG JavaScript editor - 20kB only (8kB gzip)

Supporting Trumbowyg Trumbowyg is an MIT-licensed open source project and completely free to use. However, the amount of effort needed to maintain and

Alexandre Demode 3.8k Jan 7, 2023
Simple, beautiful wysiwyg editor

This repo is no longer maintained. bootstrap3-wysiwyg is much better Overview Bootstrap-wysihtml5 is a javascript plugin that makes it easy to create

James Hollingworth 4.2k Dec 30, 2022
Super simple WYSIWYG editor

Summernote Super simple WYSIWYG Editor. Summernote Summernote is a JavaScript library that helps you create WYSIWYG editors online. Home page: https:/

Summernote 11k Jan 7, 2023
🍞📝 Markdown WYSIWYG Editor. GFM Standard + Chart & UML Extensible.

TOAST UI Editor v3 major update planning ?? ?? ?? TOAST UI Editor is planning a v3 major update for 2021. You can see our detail RoadMap here! GFM Mar

NHN 15.5k Jan 3, 2023
A powerful WYSIWYG rich text web editor by pure javascript

KothingEditor A powerful WYSIWYG rich text web editor by pure javascript Demo : kothing.github.io/editor The KothingEditor is a lightweight, flexible,

Kothing 34 Dec 25, 2022
The best enterprise-grade WYSIWYG editor. Fully customizable with countless features and plugins.

CKEditor 4 - Smart WYSIWYG HTML editor A highly configurable WYSIWYG HTML editor with hundreds of features, from creating rich text content with capti

CKEditor Ecosystem 5.7k Dec 27, 2022
An Easy and Fast WYSIWYG Editor

Simditor Simditor is a browser-based WYSIWYG text editor. It is used by Tower -- a popular project management web application. Supported Browsers: IE1

彩程设计 5k Jan 3, 2023
WYSIWYG editor developed as jQuery plugin

RichText WYSIWYG editor developed as jQuery plugin. Requirements jQuery (v.3+, v.3.2+ recommended) FontAwesome (v.4.7.0 / v.5+) src/jquery.richtext.mi

Bob 95 Dec 30, 2022
Dynamic content filtering in org-mode exported HTML documents based on tags.

Dynamic tag filtering in org-mode exported HTML documents This JavaScript code adds dynamic tag filtering to HTML documents exported from Emacs Org-mo

Øyvind Stegard 7 Sep 6, 2022