Posted in javascript
15397
12:14 am, February 5, 2021
 

Adding HTML Templates into TinyMCE Editor

This can be very useful if you are using the tinymce editor on your site and want to be able to add simple or complex html templates.

Here is how to do it:

Add this to your tinymce init

Javascript

tinymce.init({ 
  /* ... */ plugins: "template", 
});

You can then add the option to access the templates either to the tinymce toolbar or as a dropdown menu.

Javascript

tinymce.init({ 
  /* ... */ menubar: "insert", 
  toolbar: "template", 
});

Adding the template you can choose if its a string included in the init or if its more detailed you can link it to a file. 

The template format is in:

  • title
  • description
  • content or url

Javascript

tinymce.init({ 
  /* ... */ 
  templates: [ 
    { 
      title: "Some title 1", 
      description: "Some desc 1", 
      content: "<p>My content</p>", 
    }, 
    { 
      title: "Some title 2", 
      description: "Some desc 2", 
      url: "templates/development.html", 
    }, 
  ], 
});

I usually have a block that i use to insert code for highlight js formatting, which is pretty basic, so ill just include it in the content in my init.

Javascript

templates: [ 
    { 
      title: "HLJS HTML", 
      description: "Some desc 1", 
      content: "<p>My content</p>", 
  },

Current Function to load tinymce

Javascript

function load_tinymce(idclass) {
      tinymce.init({
          selector: idclass,
          plugins: [ "spellchecker code autolink link image fullscreen searchreplace wordcount visualblocks visualchars insertdatetime media table paste textcolor textpattern emoticons media lists" ],
          toolbar1: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link unlink image | code | forecolor backcolor | emoticons",
          image_advtab: true,
                    skin: "oxide-dark",
                    content_css: "dark",
                    height: 400,
          /* content_css : "/css/style.css", */
                    relative_urls: false,
          convert_urls: false,
          remove_script_host : false
      });
}

Add a template for HLJS HTML block

Javascript

function load_tinymce(idclass) {
      tinymce.init({
          selector: idclass,
          plugins: [ "spellchecker code autolink link image fullscreen searchreplace wordcount visualblocks visualchars insertdatetime media table paste textcolor textpattern emoticons media lists" ],
          toolbar1: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link unlink image | code | forecolor backcolor | emoticons",
          image_advtab: true,
                    skin: "oxide-dark",
                    content_css: "dark",
                    height: 400,
          /* content_css : "/css/style.css", */
                    relative_urls: false,
          convert_urls: false,
                    templates: [ 
                    { 
                      title: "Some title 1", 
                      description: "Some desc 1", 
                      content: "<p>My content</p>", 
                    }, 
                    { 
                      title: "Some title 2", 
                      description: "Some desc 2", 
                      url: "templates/development.html", 
                    }, 
                  ],                    
          remove_script_host : false
      });
  }

Here is the final function including the plugin and menu item

Javascript

function load_tinymce_test(idclass) {
      tinymce.init({
          selector: idclass,
          plugins: [ "template spellchecker code autolink link image fullscreen searchreplace wordcount visualblocks visualchars insertdatetime media table paste textcolor textpattern emoticons media lists" ],
          toolbar1: "template | insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link unlink image | code | forecolor backcolor | emoticons",
          image_advtab: true,
                    skin: "oxide-dark",
                    content_css: "dark",
                    height: 400,
          /* content_css : "/css/style.css", */
                    relative_urls: false,
          convert_urls: false,
                    templates: [
                    {
                      title: "HTML",
                      description: "A HTML HLJS Code Block",
                      content: "<pre><code class='html hljs xml'>HTML</code></pre>",
                            /* url: "templates/development.html", */
                    },
                    {
                      title: "Some title 2",
                      description: "Some desc 2",
                      url: "templates/development.html",
                    },
                  ],
          remove_script_host : false
      });
}

You can see this adds an additional menu item to the tinymce editor, and allows you to access the templates.

Here is the icon location for the templates:

Then it opens the template selector, with our new templates:

Pick your template, and select save. which will add this block into the editor.

Paste your code in. I noticed sometimes while pasting in the code, it would delete some of the code block, so i had to add in some dots while pasting (might be a bug in tinymce). You can see in the demo below. 

HTML

<p>
test
</p>

The End! Hopefully this helps you adding templates into your tinymce installation.

You can see the full working demo, scripts and code below.

Here is another one for Video Embed with autoplay and loop

Javascript

{
title: "Video Embed",
description: "A PHP HLJS Code Block",
content: "<p><strong><video autoplay='autoplay' loop='loop' controls='controls' width='100%' height='600'><source src='https://i.imgur.com/ot1hc51.mp4' type='video/mp4' /></video></strong></p>",
},

HTML

<h2>Demo TinyMCE with Templates</h2>
<textarea id='mytinymce'></textarea>

Scripts

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tinymce/5.6.2/skins/ui/oxide/content.min.css" integrity="sha512-U8A/twP2qv8LP/I9jf9GOI6FioG4BhrB1yMkT6Z+5UI44Z5qhuVeR5Pnh4NATpPPmaPP34gm6GV1roiejydBYQ==" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tinymce/5.6.2/skins/ui/oxide-dark/skin.min.css" integrity="sha512-r3IXhPGM2XA8Yqjv5SKfx/3FNWSaAtk6h1TbZh2Oz38Mp+xO1zRGMu2Ek/IF870FyMV2f1Gq5og5i3wYEC5W8w==" crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/tinymce/5.6.2/tinymce.min.js" integrity="sha512-sOO7yng64iQzv/uLE8sCEhca7yet+D6vPGDEdXCqit1elBUAJD1jYIYqz0ov9HMd/k30e4UVFAovmSG92E995A==" crossorigin="anonymous"></script>

Javascript

function load_tinymce_test(idclass) {
      tinymce.init({
          selector: idclass,
          plugins: [ "template spellchecker code autolink link image fullscreen searchreplace wordcount visualblocks visualchars insertdatetime media table paste textcolor textpattern emoticons media lists" ],
          toolbar1: "template | insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link unlink image | code | forecolor backcolor | emoticons",
          image_advtab: true,
					skin: "oxide-dark",
					content_css: "dark",
					height: 400,
          /* content_css : "/css/style.css", */
					relative_urls: false,
          convert_urls: false,
					templates: [
				    {
				      title: "HTML",
				      description: "A HTML HLJS Code Block",
				      content: "<h4>HTML</h4><pre><code class='html hljs xml'>HTML</code></pre>",
							/* url: "templates/development.html", */
				    },
				    {
				      title: "CSS",
				      description: "A CSS HLJS Code Block",
				      content: "<h4>CSS</h4><pre><code class='css hljs'>.css { value: 1px; }</code></pre>",
				    },
				    {
				      title: "JS",
				      description: "A JS HLJS Code Block",
				      content: "<h4>Javascript</h4><pre><code class='javascript hljs'>function test() { console.log('test'); }</code></pre>",
				    },
				    {
				      title: "PHP",
				      description: "A PHP HLJS Code Block",
				      content: "<h4>PHP</h4><pre><code class='php hljs'>a = 1;</code></pre>",
				    },
                  ],
          remove_script_host : false
      });
  }

$(document).ready(function(){ 
  load_tinymce_test("#mytinymce");
});

Demo TinyMCE with Templates

View Statistics
This Week
456
This Month
2024
This Year
4108

No Items Found.

Add Comment
Type in a Nick Name here
 
Other Items in javascript
get current year in javascript find a text string and replace it in javascript check if an item id exists in javascript Twitter Post Fetcher v18.0.4 - javascript twitter feed fetcher Are you sure you want to navigate away from this page? #JavaScript warning floating message box on bottom right of screen with close button share to twitter javascript button function open a new window share to linked in current url button with javascript Get current URL and add a share to facebook share button with it encode url with javascript Twitter Post Fetcher Script Javascript Objects Notes javascript add class to element update value of element using javascript javascript attach a click event to an id not using jquery console dir usage how to write a javascript string over multiple lines best way to write html into an existing page javascript Uncaught TypeError: Cannot set properties of null (setting 'onclick') check url hash using javascript submit form with javascript Converting PHP to Javascript for State Extraction by numeric value Australian State Names get the value from a textarea element javascript get content from element convert characters to entities using javascript replace Auto Create HTML Code Snippets loop to arr.length or array length get tomorrows date with javascript get yesterdays date with javascript add new random image with button Create Strings using Template Literals Darkmode JS - Add darkmode to your site with one script Use destructuring assignment within the argument to the function half to send only max and min inside the function. Using Destructuring and the Rest Parameter to Reassign Array Elements Use destructuring assignment to swap the values of a and b Sweet Alert 2 Methods and Examples How to Assign the Value of One Variable to Another in Javascript Slick Slider Carousel with Custom Next and Prev Buttons Console Tips and Tricks javascript random string to put on url for cache javascript try catch example function load json data url or api with javascript log the console log output to a div javascript basic test array and loop how to join an array in javascript using the join method show the current date in javascript get element by id and hide it get element by id with javascript set a cookie on click and then check if the cookie is set and dont show that message again console table rather than console log for javascript objects and arrays
Related Search Terms
Search Code
Search Code by entering your search text above.
Welcome

This is my test area for webdev. I keep a collection of code here, mostly for my reference. Also if i find a good link, i usually add it here and then forget about it. more...

Subscribe to weekly updates about things i have added to the site or thought interesting during the last week.

You could also follow me on twitter or not... does anyone even use twitter anymore?

If you found something useful or like my work, you can buy me a coffee here. Mmm Coffee. ☕

❤️👩‍💻🎮

🪦 2000 - 16 Oct 2022 - Boots
Random Quote
The problem with hoarding is you end up living off your reserves. Eventually, you’ll become stale. If you give away everything you have, you are left with nothing. This forces you to look, to be aware, to replenish. . . . Somehow the more you give away, the more comes back to you.
Paul Arden
Random CSS Property

@namespace

@namespace is an at-rule that defines XML namespaces to be used in a CSS style sheet.
@namespace css reference