(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(/
]*>([\s\S\r\n]*)<\/div>/gmi, convertDivs);
sText = '\n' + trim(sText) + '\n';
}
return sText;
}
return '';
},
fixAttibuteValue = function () {
return (arguments && 1 < arguments.length) ?
'' + arguments[1] + arguments[2].replace(//g, '>') : '';
},
convertLinks = function () {
return (arguments && 1 < arguments.length) ? trim(arguments[1]) : '';
}
;
sText = sHtml
.replace(/[\s]+/gm, ' ')
.replace(/((?:href|data)\s?=\s?)("[^"]+?"|'[^']+?')/gmi, fixAttibuteValue)
.replace(/
/gmi, '\n')
.replace(/<\/h\d>/gi, '\n')
.replace(/<\/p>/gi, '\n\n')
.replace(/<\/li>/gi, '\n')
.replace(/<\/td>/gi, '\n')
.replace(/<\/tr>/gi, '\n')
.replace(/
]*>/gmi, '\n_______________________________\n\n')
.replace(/
![]()
]*>/gmi, '')
.replace(/
]*>([\s\S\r\n]*)<\/div>/gmi, convertDivs)
.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: true,
init: function(editor)
{
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({
width: CKEDITOR.env.ie7Compat ? '99%' : '100%',
height: '100%',
resize: 'none',
outline: 'none',
'text-align': 'left'
},
CKEDITOR.tools.cssVendorPrefix('tab-size', 4)))
;
textarea.setAttribute('dir', 'ltr');
textarea.addClass('cke_plain');
contentsSpace.append(textarea);
var editable = editor.editable(new plainEditable(editor, textarea));
editable.setData(editor.getData(1));
editor.__plain = editable;
// Having to make