var TinyMCE = (function() { 'use strict'; function initHighlightjs() { $('[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') { tinyMCE.init({ selector: 'textarea.tinymce', toolbar: ["undo redo | insert | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link | forecolor backcolor | customimageuploader | codesample"], plugins: "customimageuploader,link,advlist,codesample,autolink,lists,charmap,hr,anchor,searchreplace,wordcount,visualblocks,visualchars,insertdatetime,nonbreaking,save,contextmenu,directionality,paste,textcolor,colorpicker,textpattern,imagetools", 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"}], removed_menuitems: 'newdocument', elementpath: false, default_link_target: "_blank", target_list: [ {title: 'New page', value: '_blank'}, {title: 'Same page', value: '_self'} ], style_formats: [ {title: 'Headers', items: [ {title: 'Header 1', format: 'h1'}, {title: 'Header 2', format: 'h2'}, {title: 'Header 3', format: 'h3'}, {title: 'Header 4', format: 'h4'}, {title: 'Header 5', format: 'h5'}, {title: 'Header 6', format: 'h6'} ]}, {title: 'Inline', items: [ {title: 'Bold', icon: 'bold', format: 'bold'}, {title: 'Italic', icon: 'italic', format: 'italic'}, {title: 'Underline', icon: 'underline', format: 'underline'}, {title: 'Strikethrough', icon: 'strikethrough', format: 'strikethrough'}, {title: 'Superscript', icon: 'superscript', format: 'superscript'}, {title: 'Subscript', icon: 'subscript', format: 'subscript'}, {title: 'Code', icon: 'code', format: 'code'} ]}, {title: 'Blocks', items: [ {title: 'Paragraph', format: 'p'}, {title: 'Blockquote', format: 'blockquote'} ]}, {title: 'Alignment', items: [ {title: 'Left', icon: 'alignleft', format: 'alignleft'}, {title: 'Center', icon: 'aligncenter', format: 'aligncenter'}, {title: 'Right', icon: 'alignright', format: 'alignright'}, {title: 'Justify', icon: 'alignjustify', format: 'alignjustify'} ]} ], 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')) { 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') %>' }); } }, destroyAll: function() { _.each(tinymce.editors, function(editor) { editor.destroy(); initHighlightjs(); }); }, refresh: function() { this.destroyAll(); this.init(); }, getContent: function() { return tinymce.editors[0].getContent(); }, highlight: initHighlightjs }); })();