blob: 839bbab28cac431fd73b821dc4f2651e9548871a [file] [log] [blame]
/**
* WYSIWYG Wrap Plugin
*
* The purpose of this plugin is to wrap the content being edited in Xinha
* with certain elements of given ID and/or class when in the WYSIWYG view.
*
* The reason for this is to assist when styling content.
*
*/
WysiwygWrap._pluginInfo = {
name : "WYSIWYG Wrap",
version : "1.0",
developer : "James Sleeman",
developer_url : "http://www.gogo.co.nz/",
c_owner : "James Sleeman",
license : "htmlArea"
};
Xinha.Config.prototype.WysiwygWrap =
{
'elements' : [ ]
// 'elements' : [ 'div.class#id', 'ul', 'li' ]
};
function WysiwygWrap(editor) {
this.editor = editor;
}
/** Take HTML and wrap it with the elements.
*
* @param string
* @return string
*/
WysiwygWrap.prototype.inwardHtml = function(html)
{
for(var x = this.editor.config.WysiwygWrap.elements.length - 1; x >= 0; x--)
{
var e = { tagName: this.editor.config.WysiwygWrap.elements[x], className: '', id: '' };
if(e.tagName.match(/#(.+)$/))
{
e.id = RegExp.$1;
e.tagName = e.tagName.replace(/#(.+)$/,'');
}
if(e.tagName.match(/[^.]*\.(.+)$/))
{
e.className = RegExp.$1.replace('.', ' ');
e.tagName = e.tagName.replace(/\..+$/, '');
}
if(!e.tagName.length)
{
e.tagName = 'div';
}
html = '<'+e.tagName+' id="'+e.id+'" class="'+e.className+'">'+html+'</'+e.tagName+'>';
}
return html;
}
/** Take HTML and strip it from the elements.
*
* @param string
* @return string
*/
WysiwygWrap.prototype.outwardHtml = function(html)
{
for(var x = 0; x < this.editor.config.WysiwygWrap.elements.length; x++)
{
var e = { tagName: this.editor.config.WysiwygWrap.elements[x], className: '', id: '' };
if(e.tagName.match(/#(.+)$/))
{
e.id = RegExp.$1;
e.tagName = e.tagName.replace(/#(.+)$/,'');
}
if(e.tagName.match(/[^.]*\.(.+)$/))
{
e.className = RegExp.$1.replace('.', ' ');
e.tagName = e.tagName.replace(/\..+$/, '');
}
if(!e.tagName.length)
{
e.tagName = 'div';
}
var r1 = new RegExp('^(\\s|\\n|\\r)*<'+e.tagName+'[^>]*>(\\s|\\n|\\r)*', 'i');
var r2 = new RegExp('(\\s|\\n|\\r)*</'+e.tagName+'[^>]*>(\\s|\\n|\\r)*$', 'i');
html = html.replace(r1, '');
html = html.replace(r2, '');
}
return html;
}