( function() { var trim = $.trim, /** * @param {string} sHtml * @return {string} */ htmlToPlain = function (sHtml) { var sText = '', sQuoteChar = '> ', convertBlockquote = function () { if (arguments && 1 < arguments.length) { var sText = trim(arguments[1]) .replace(/__bq__start__(.|[\s\S\n\r]*)__bq__end__/gm, convertBlockquote) ; sText = '\n' + sQuoteChar + trim(sText).replace(/\n/gm, '\n' + sQuoteChar) + '\n>\n'; return sText.replace(/\n([> ]+)/gm, function () { return (arguments && 1 < arguments.length) ? '\n' + trim(arguments[1].replace(/[\s]/, '')) + ' ' : ''; }); } return ''; }, convertDivs = function () { if (arguments && 1 < arguments.length) { var sText = trim(arguments[1]); if (0 < sText.length) { sText = sText.replace(/
]*>/gmi, '\n__bq__start__\n') .replace(/<\/blockquote>/gmi, '\n__bq__end__\n') .replace(/]*>(.|[\s\S\r\n]*)<\/a>/gmi, convertLinks) .replace(/ /gi, ' ') .replace(/<[^>]*>/gm, '') .replace(/>/gi, '>') .replace(/</gi, '<') .replace(/&/gi, '&') .replace(/&\w{2,6};/gi, '') ; return sText .replace(/\n[ \t]+/gm, '\n') .replace(/[\n]{3,}/gm, '\n\n') .replace(/__bq__start__(.|[\s\S\r\n]*)__bq__end__/gm, convertBlockquote) .replace(/__bq__start__/gm, '') .replace(/__bq__end__/gm, '') ; }, /** * @param {string} sPlain * @return {string} */ plainToHtml = function (sPlain) { return sPlain.toString() .replace(/&/g, '&').replace(/>/g, '>').replace(/'); } ; CKEDITOR.plugins.add('plain', { lang: '', icons: 'plain', hidpi: false, init: function(editor) { // Source mode isn't available in inline mode yet. if (editor.elementMode === CKEDITOR.ELEMENT_MODE_INLINE) return; var plain = CKEDITOR.plugins.plain; editor.addMode( 'plain', function( callback ) { var contentsSpace = editor.ui.space('contents'), textarea = contentsSpace.getDocument().createElement('textarea'); textarea.setStyles( CKEDITOR.tools.extend( { // IE7 has overflow the