diff --git a/app/assets/javascripts/application.js.erb b/app/assets/javascripts/application.js.erb index 9cb8c9a80..e261384ac 100644 --- a/app/assets/javascripts/application.js.erb +++ b/app/assets/javascripts/application.js.erb @@ -233,7 +233,7 @@ var HelperModule = (function(){ // initialize code markup in rich text fields (function() { $(document).ready(function() { - $('pre code [class^=language]').each(function(i, block) { + $('[class^=language]').each(function(i, block) { hljs.highlightBlock(block); }); }); diff --git a/app/assets/javascripts/protocols/steps.js.erb b/app/assets/javascripts/protocols/steps.js.erb index 8104718f4..3c7a501ae 100644 --- a/app/assets/javascripts/protocols/steps.js.erb +++ b/app/assets/javascripts/protocols/steps.js.erb @@ -79,6 +79,7 @@ function applyCancelCallBack() { setTimeout(function() { initStepsComments(); + TinyMCE.destroyAll(); }, 1000); }) @@ -245,6 +246,7 @@ function formNewAjax($form) { toggleButtons(true); TinyMCE.init(); + TinyMCE.highlight(); //Rerender tables $new_step.find("div.step-result-hot-table").each(function() { $(this).handsontable("render"); diff --git a/app/assets/javascripts/sitewide/tiny_mce.js b/app/assets/javascripts/sitewide/tiny_mce.js.erb similarity index 67% rename from app/assets/javascripts/sitewide/tiny_mce.js rename to app/assets/javascripts/sitewide/tiny_mce.js.erb index 8214eaaa1..381bef698 100644 --- a/app/assets/javascripts/sitewide/tiny_mce.js +++ b/app/assets/javascripts/sitewide/tiny_mce.js.erb @@ -2,13 +2,18 @@ var TinyMCE = (function() { 'use strict'; function initHighlightjs() { - $('pre code [class^=language]').each(function(i, block) { - if(!$(block).hasClass('hljs')) { - hljs.highlightBlock(block); - } + $('[class*=language]').each(function(i, block) { + hljs.highlightBlock(block); }); } + function initHighlightjsIframe(iframe) { + $('[class*=language]', iframe).each(function(i, block) { + hljs.highlightBlock(block); + }); + } + + // returns a public API for TinyMCE editor return Object.freeze({ init : function() { if (typeof tinyMCE != 'undefined') { @@ -19,13 +24,27 @@ var TinyMCE = (function() { codesample_languages: [{"text":"R","value":"r"},{"text":"MATLAB","value":"matlab"},{"text":"Python","value":"python"},{"text":"JSON","value":"javascript"},{"text":"HTML/XML","value":"markup"},{"text":"JavaScript","value":"javascript"},{"text":"CSS","value":"css"},{"text":"PHP","value":"php"},{"text":"Ruby","value":"ruby"},{"text":"Java","value":"java"},{"text":"C","value":"c"},{"text":"C#","value":"csharp"},{"text":"C++","value":"cpp"}], init_instance_callback: function(editor) { SmartAnnotation.init($(editor.contentDocument.activeElement)); + initHighlightjsIframe($(this.iframeElement).contents()); }, setup: function(editor) { - editor.on('keydown', function(e) { - if(e.keyCode == 13 && $(editor.contentDocument.activeElement).atwho('isSelecting')) + editor.on('Change', function(e) { + if(e.keyCode == 13 && $(editor.contentDocument.activeElement).atwho('isSelecting')) { return false; + } }); - } + + editor.on('NodeChange', function(e) { + var node = e.element; + var editor = this; + setTimeout(function() { + if($(node).is('pre') && !editor.isHidden()){ + initHighlightjsIframe($(editor.iframeElement).contents()); + } + }, 200); + + }); + }, + codesample_content_css: '<%= asset_path('highlightjs-github-theme') %>' }); } }, diff --git a/app/helpers/bootstrap_form_helper.rb b/app/helpers/bootstrap_form_helper.rb index 1db5da6fb..9857adc37 100644 --- a/app/helpers/bootstrap_form_helper.rb +++ b/app/helpers/bootstrap_form_helper.rb @@ -263,7 +263,7 @@ module BootstrapFormHelper # Returns