// This was taken from the SCEditor plugin for MyBB $(document).ready(function($) { 'use strict'; var $document = $(document); /*********************** * Add custom MyBB CSS * ***********************/ $('').appendTo('body'); /******************************************** * Update editor to use align= as alignment * ********************************************/ $.sceditor.plugins.bbcode.bbcode .set('align', { html: function(element, attrs, content) { return '
' + content + '
'; }, isInline: false }) .set('center', { format: '[align=center]{0}[/align]' }) .set('left', { format: '[align=left]{0}[/align]' }) .set('right', { format: '[align=right]{0}[/align]' }) .set('justify', { format: '[align=justify]{0}[/align]' }); $.sceditor.command .set('center', { txtExec: ['[align=center]', '[/align]'] }) .set('left', { txtExec: ['[align=left]', '[/align]'] }) .set('right', { txtExec: ['[align=right]', '[/align]'] }) .set('justify', { txtExec: ['[align=justify]', '[/align]'] }); /************************************************ * Update font to support MyBB's BBCode dialect * ************************************************/ $.sceditor.plugins.bbcode.bbcode .set('list', { html: function(element, attrs, content) { var type = (attrs.defaultattr === '1' ? 'ol' : 'ul'); if(attrs.defaultattr === 'a') type = 'ol type="a"'; return '<' + type + '>' + content + ''; }, breakAfter: false }) .set('ul', { format: '[list]{0}[/list]' }) .set('ol', { format: function($elm, content) { var type = ($elm.attr('type') === 'a' ? 'a' : '1'); return '[list=' + type + ']' + content + '[/list]'; } }) .set('li', { format: '[*]{0}', excludeClosing: true }) .set('*', { excludeClosing: true, isInline: true }); $.sceditor.command .set('bulletlist', { txtExec: ['[list]\n[*]', '\n[/list]'] }) .set('orderedlist', { txtExec: ['[list=1]\n[*]', '\n[/list]'] }); /*********************************************************** * Update size tag to use xx-small-xx-large instead of 1-7 * ***********************************************************/ $.sceditor.plugins.bbcode.bbcode.set('size', { format: function($elm, content) { var fontSize, sizes = ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'], size = $elm.attr('size');; if (!size) { fontSize = $elm.css('fontSize'); // Most browsers return px value but IE returns 1-7 if(fontSize.indexOf('px') > -1) { // convert size to an int fontSize = fontSize.replace('px', '') - 0; size = 1; if(fontSize > 9) size = 2; if(fontSize > 12) size = 3; if(fontSize > 15) size = 4; if(fontSize > 17) size = 5; if(fontSize > 23) size = 6; if(fontSize > 31) size = 7; } else { size = (~~fontSize) + 1; } if(size > 7) size = 7; if(size < 1) size = 1; size = sizes[size-1]; } else { size = sizes[size-1]; } return '[size=' + size + ']' + content + '[/size]'; }, html: function(token, attrs, content) { var sizes = ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'], size = $.inArray(attrs.defaultattr, sizes)+1; if (!isNaN(attrs.defaultattr)) { size = attrs.defaultattr; if(size > 7) size = 7; if(size < 1) size = 1; } if (size < 0) { size = 0; } return '' + content + ''; } }); $.sceditor.command.set('size', { _dropDown: function(editor, caller, callback) { var content = $('
'), clickFunc = function (e) { callback($(this).data('size')); editor.closeDropDown(true); e.preventDefault(); }; for (var i=1; i <= 7; i++) content.append($('' + i + '').click(clickFunc)); editor.createDropDown(caller, 'fontsize-picker', content); }, exec: function (caller) { var editor = this; $.sceditor.command.get('size')._dropDown( editor, caller, function(fontSize) { editor.execCommand('fontsize', fontSize); } ); }, txtExec: function(caller) { var editor = this, sizes = ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large']; $.sceditor.command.get('size')._dropDown( editor, caller, function(size) { size = (~~size); size = (size > 7) ? 7 : ( (size < 1) ? 1 : size ); editor.insertText('[size=' + sizes[size-1] + ']', '[/size]'); } ); } }); /******************************************** * Update quote to support pid and dateline * ********************************************/ $.sceditor.plugins.bbcode.bbcode.set('quote', { format: function(element, content) { var author = '', $elm = $(element), $cite = $elm.children('cite').first(); $cite.html($cite.text()); if($cite.length === 1 || $elm.data('author')) { author = $cite.text() || $elm.data('author'); $elm.data('author', author); $cite.remove(); content = this.elementToBbcode($(element)); author = '=' + author.replace(/(^\s+|\s+$)/g, ''); $elm.prepend($cite); } if($elm.data('pid')) author += " pid='" + $elm.data('pid') + "'"; if($elm.data('dateline')) author += " dateline='" + $elm.data('dateline') + "'"; return '[quote' + author + ']' + content + '[/quote]'; }, html: function(token, attrs, content) { var data = ''; if(attrs.pid) data += ' data-pid="' + attrs.pid + '"'; if(attrs.dateline) data += ' data-dateline="' + attrs.dateline + '"'; if(typeof attrs.defaultattr !== "undefined") content = '' + attrs.defaultattr.replace(/ /g, ' ') + '' + content; return '' + content + ''; }, quoteType: function(val, name) { return "'" + val.replace("'", "\\'") + "'"; }, breakStart: true, breakEnd: true }); /************************************************************ * Update font tag to allow limiting to only first in stack * ************************************************************/ $.sceditor.plugins.bbcode.bbcode.set('font', { format: function(element, content) { var font; if(element[0].nodeName.toLowerCase() !== 'font' || !(font = element.attr('face'))) font = element.css('font-family'); if(typeof font == 'string' && font != '' && font != 'defaultattr') { return '[font=' + this.stripQuotes(font) + ']' + content + '[/font]'; } else { return content; } }, html: function(token, attrs, content) { if(typeof attrs.defaultattr == 'string' && attrs.defaultattr != '' && attrs.defaultattr != '{defaultattr}') { return '' + content + ''; } else { return content; } } }); /************************ * Add MyBB PHP command * ************************/ $.sceditor.plugins.bbcode.bbcode.set('php', { allowsEmpty: true, isInline: false, allowedChildren: ['#', '#newline'], format: '[php]{0}[/php]', html: '{0}' }); $.sceditor.command.set("php", { _dropDown: function (editor, caller) { var $content; $content = $( '
' + ' ' + '