/** Wysiwyg. A wrapper for Bootstrap wyswiwyg plugin. It's just a wrapper so you still need to include Bootstrap wysiwyg script first. */ (function($ , undefined) { $.fn.ace_wysiwyg = function($options , undefined) { var options = $.extend( { speech_button:true, wysiwyg:{} }, $options); var color_values = [ '#ac725e','#d06b64','#f83a22','#fa573c','#ff7537','#ffad46', '#42d692','#16a765','#7bd148','#b3dc6c','#fbe983','#fad165', '#92e1c0','#9fe1e7','#9fc6e7','#4986e7','#9a9cff','#b99aff', '#c2c2c2','#cabdbf','#cca6ac','#f691b2','#cd74e6','#a47ae2', '#444444' ] var button_defaults = { 'font' : { values:['Arial', 'Courier', 'Comic Sans MS', 'Helvetica', 'Open Sans', 'Tahoma', 'Verdana'], icon:'fa fa-font', title:'Font' }, 'fontSize' : { values:{5:'Huge', 3:'Normal', 1:'Small'}, icon:'fa fa-text-height', title:'Font Size' }, 'bold' : { icon : 'fa fa-bold', title : 'Bold (Ctrl/Cmd+B)' }, 'italic' : { icon : 'fa fa-italic', title : 'Italic (Ctrl/Cmd+I)' }, 'strikethrough' : { icon : 'fa fa-strikethrough', title : 'Strikethrough' }, 'underline' : { icon : 'fa fa-underline', title : 'Underline' }, 'insertunorderedlist' : { icon : 'fa fa-list-ul', title : 'Bullet list' }, 'insertorderedlist' : { icon : 'fa fa-list-ol', title : 'Number list' }, 'outdent' : { icon : 'fa fa-outdent', title : 'Reduce indent (Shift+Tab)' }, 'indent' : { icon : 'fa fa-indent', title : 'Indent (Tab)' }, 'justifyleft' : { icon : 'fa fa-align-left', title : 'Align Left (Ctrl/Cmd+L)' }, 'justifycenter' : { icon : 'fa fa-align-center', title : 'Center (Ctrl/Cmd+E)' }, 'justifyright' : { icon : 'fa fa-align-right', title : 'Align Right (Ctrl/Cmd+R)' }, 'justifyfull' : { icon : 'fa fa-align-justify', title : 'Justify (Ctrl/Cmd+J)' }, 'createLink' : { icon : 'fa fa-link', title : 'Hyperlink', button_text : 'Add', placeholder : 'URL', button_class : 'btn-primary' }, 'unlink' : { icon : 'fa fa-chain-broken', title : 'Remove Hyperlink' }, 'insertImage' : { icon : 'fa fa-picture-o', title : 'Insert picture', button_text : ' Choose Image …', placeholder : 'Image URL', button_insert : 'Insert', button_class : 'btn-success', button_insert_class : 'btn-primary', choose_file: true //show the choose file button? }, 'foreColor' : { values : color_values, title : 'Change Color' }, 'backColor' : { values : color_values, title : 'Change Background Color' }, 'undo' : { icon : 'fa fa-undo', title : 'Undo (Ctrl/Cmd+Z)' }, 'redo' : { icon : 'fa fa-repeat', title : 'Redo (Ctrl/Cmd+Y)' }, 'viewSource' : { icon : 'fa fa-code', title : 'View Source' } } var toolbar_buttons = options.toolbar || [ 'font', null, 'fontSize', null, 'bold', 'italic', 'strikethrough', 'underline', null, 'insertunorderedlist', 'insertorderedlist', 'outdent', 'indent', null, 'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', null, 'createLink', 'unlink', null, 'insertImage', null, 'foreColor', null, 'undo', 'redo', null, 'viewSource' ] this.each(function() { var toolbar = '
'; //if we have a function to decide where to put the toolbar, then call that if(options.toolbar_place) toolbar = options.toolbar_place.call(this, toolbar); //otherwise put it just before our DIV else toolbar = $(this).before(toolbar).prev(); toolbar.find('a[title]').tooltip({animation:false, container:'body'}); toolbar.find('.dropdown-menu input[type=text]').on('click', function() {return false}) .on('change', function() {$(this).closest('.dropdown-menu').siblings('.dropdown-toggle').dropdown('toggle')}) .on('keydown', function (e) { if(e.which == 27) { this.value = ''; $(this).change(); } else if(e.which == 13) { e.preventDefault(); e.stopPropagation(); $(this).change(); } }); toolbar.find('input[type=file]').prev().on(ace.click_event, function (e) { $(this).next().click(); }); toolbar.find('.wysiwyg_colorpicker').each(function() { $(this).ace_colorpicker({pull_right:true}).change(function(){ $(this).nextAll('input').eq(0).val(this.value).change(); }).next().find('.btn-colorpicker').tooltip({title: this.title, animation:false, container:'body'}) }); var self = $(this); //view source var view_source = false; toolbar.find('a[data-view=source]').on('click', function(e){ e.preventDefault(); if(!view_source) { $('') .css({'width':self.outerWidth(), 'height':self.outerHeight()}) .val(self.html()) .insertAfter(self) self.hide(); $(this).addClass('active'); } else { var textarea = self.next(); self.html(textarea.val()).show(); textarea.remove(); $(this).removeClass('active'); } view_source = !view_source; }); var $options = $.extend({}, { activeToolbarClass: 'active' , toolbarSelector : toolbar }, options.wysiwyg || {}) $(this).wysiwyg( $options ); }); return this; } })(window.jQuery);