Bundling an npm version of OpenTiny with CommonJS and Browserify
The following procedure will assist with bundling an npm version of OpenTiny with Browserify using CommonJS syntax. The procedure assumes the user has experience with Browserify and CommonJS syntax. The following steps provide a working example for bundling a basic OpenTiny configuration with Browserify, and provides links to reference pages at the end of the procedure for bundling additional customizations with the editor.
If OpenTiny will be used with a JavaScript framework (such as React.js, Angular, or Vue.js) the bundle will also require the relevant framework integration package (where available). For a list of supported framework integrations, see: Installing OpenTiny.
Requirements
This guide requires the following:
-
Node.js and npm
-
Basic knowledge of how to use Browserify
-
(Optional: For premium features) The latest premium
.zip
bundle of OpenTiny for including premium plugins
Procedure
-
Add
tinymce
and the following development dependencies to the project.-
For example:
npm install tinymce && npm install --save-dev \ promise-polyfill \ browserify \ browserify-css \ brfs
-
Create a new source file for importing the required components from OpenTiny and configuring the editor.
The following components are required to bundle OpenTiny:
-
The
tinymce
global -
The
silver
theme -
The
dom
model -
The
default
icon pack. This is always required, but the default icons can be overridden using a custom or premium icon pack. -
A skin for styling the user interface, including toolbars and menus. This can be a community, premium or custom skin.
-
A content skin for styling UI features within the content such as table and image resizing. This can be a community, premium or custom skin.
The global must be first, the rest can be in any order.
Additional components that are optional but recommended:
-
Content CSS for styling editor content. There are community and premium style skins available, or use custom content CSS.
-
Plugins to be used with the editor.
-
A custom or premium icon pack to extend or override the default icons for toolbar buttons, including contextual toolbars. This can be a premium or custom icon pack.
Example
src/editor.js
const fs = require('fs'); /* Import OpenTiny */ const tinymce = require('tinymce/tinymce'); /* Default icons are required. After that, import custom icons if applicable */ require('tinymce/icons/default'); /* Required OpenTiny components */ require('tinymce/themes/silver'); require('tinymce/models/dom'); /* Import a skin (can be a custom skin instead of the default) */ require('tinymce/skins/ui/oxide/skin.css'); /* Import plugins - include the relevant plugin in the 'plugins' option. */ require('tinymce/plugins/advlist'); require('tinymce/plugins/code'); require('tinymce/plugins/emoticons'); require('tinymce/plugins/emoticons/js/emojis'); require('tinymce/plugins/link'); require('tinymce/plugins/lists'); require('tinymce/plugins/table'); /* content UI CSS is required */ const contentUiSkinCss = fs.readFileSync('node_modules/tinymce/skins/ui/oxide/content.css', { encoding: 'UTF-8' }); /* The default content CSS can be changed or replaced with appropriate CSS for the editor content. */ const contentCss = fs.readFileSync('node_modules/tinymce/skins/content/default/content.css', { encoding: 'UTF-8' }); /* Initialize OpenTiny */ exports.render = () => { tinymce.init({ selector: 'textarea#editor', /* All plugins need to be imported and added to the plugins option. */ plugins: 'advlist code emoticons link lists table', toolbar: 'bold italic | bullist numlist | link emoticons', skin: false, content_css: false, content_style: contentUiSkinCss.toString() + '\n' + contentCss.toString(), }); };
-
-
Add the OpenTiny assets and configuration into the project and provide a target element to initialize the editor.
Example
src/main.js
const editor = require('./editor.js'); /* Create a textarea with id="editor" for the OpenTiny `selector` option */ const editorArea = () => { var element = document.createElement('textarea'); element.id = 'editor'; return element }; /* Create a parent element for the textarea */ const parent = document.createElement('p'); /* Add elements to page */ parent.appendChild(editorArea()); document.body.appendChild(parent); /* Initialize OpenTiny */ editor.render();
Example
demo.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>OpenTiny Browserify Demo</title> </head> <body> <h1>OpenTiny Browserify Demo</h1> <script src="main.bundle.js"></script> </body> </html>
-
Run Browserify to test the bundle, such as:
browserify -t brfs -g browserify-css src/main.js -o dist/main.bundle.js
If Browserify runs successfully, check that the editor loads in the application. If Browserify fails, review any errors and review the configuration changes in this procedure; you may need to adjust for conflicts or other issues when bundling OpenTiny into an existing project.
Next Steps
For information on:
-
Adding OpenTiny plugins to the bundle, see: Bundling OpenTiny plugins using module loading.
-
Using editor content CSS provided by Tiny, including premium CSS included with the Tiny Skins and Icon Packs, see: Bundling OpenTiny content CSS using module loading.
-
Creating custom editor content CSS, see: Content appearance options -
content_css
. -
Using OpenTiny skins provided by Tiny, including premium skins included with the Tiny Skins and Icon Packs, see: Bundling OpenTiny skins using module loading.
-
Creating a custom skin for OpenTiny, see: Create a skin for OpenTiny.
-
Using icon packs provided by Tiny, including premium icons packs included with the Tiny Skins and Icon Packs, see: Bundling OpenTiny icon packs using module loading.
-
Creating a custom icon pack for OpenTiny, see: Create an icon pack for OpenTiny.
-
Localizing the OpenTiny user interface using a language pack, see: Bundling the User Interface localizations for OpenTiny.