El editor de texto enriquecido que incorpora Sharepoint resulta excesivamente limitado en muchísimos aspectos. Una alternativa para suplir estas carencias es hacer uso de otro editor de los muchos que se ven por internet. Uno de ellos, por su simplicidad de uso y su potencia nos interesa especialmente, además de ser de descarga y uso libre. Se trata de TinyMCE.
El siguiente procedimiento nos lleva de forma sencilla a la sustitución del editor por defecto por TinyMCE.
(2) Editar los ficheros TEMPLATE\LAYOUTS\3082\IE55UP.JS y TEMPLATE\LAYOUTS\3082\NON_IE.JS, versiones para IE y otros navegadores para añadir las líneas para IE55UP.JS
//TINYMCE editor
var MOSSBASIC = {
theme: "advanced",
theme_advanced_resizing: true,
theme_advanced_path: false,
plugins: "advlink,directionality",
theme_advanced_buttons1: "fontselect, fontsizeselect, formatselect, |, bold, italic, underline, |, justifyleft, justifycenter, justifyright, |, numlist, bullist, link, unlink, |, code",
theme_advanced_buttons2: "",
theme_advanced_buttons3: "",
theme_advanced_toolbar_location: "top",
theme_advanced_toolbar_align: "left",
theme_advanced_statusbar_location: "bottom",
extended_valid_elements: "a[name|href|target|title|onclick], img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name], hr[class|width|size|noshade], font[face|size|color|style], span[class|align|style], kbd, code",
relative_urls: false
};
var MOSSFULL = {
theme: "advanced",
theme_advanced_resizing: true,
theme_advanced_path: false,
plugins: "table,advimage,advlink,searchreplace,contextmenu,directionality,xhtmlxtras",
theme_advanced_buttons1: "save, newdocument, |, bold, italic, underline, strikethrough, |, justifyleft, justifycenter, justifyright, justifyfull, |, styleselect, formatselect, fontselect, fontsizeselect",
theme_advanced_buttons2: "cut, copy, paste, pastetext, pasteword, |, search, replace, |, bullist, numlist, |, outdent, indent, blockquote, |, undo, redo, |, link, unlink, anchor, image, cleanup, help, code, |, insertdate, inserttime, preview, |, forecolor, backcolor",
theme_advanced_buttons3: "tablecontrols, |, hr, removeformat, visualaid, |, sub, sup, |, charmap, emotions, iespell, media, advhr, |, print, |, ltr, rtl, |, fullscreen, |, insertlayer, moveforward, movebackward, absolute, |, styleprops, spellchecker, |, cite, abbr, acronym, del, ins, attribs, |, visualchars, nonbreaking, template, blockquote, pagebreak, |, insertfile, insertimage",
theme_advanced_toolbar_location: "top",
theme_advanced_toolbar_align: "left",
theme_advanced_statusbar_location: "bottom",
extended_valid_elements: "a[name|href|target|title|onclick], img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name], hr[class|width|size|noshade], font[face|size|color|style], span[class|align|style], kbd, code",
relative_urls: false
};
var head = document.getElementsByTagName("head")[0]
script = document.createElement('script');
script.id = 'tinymceScript';
script.type = 'text/javascript';
head.appendChild(script);
script.src = '/_layouts/3082/tinymce/jscripts/tiny_mce/tiny_mce.js';
function ctv_enableTinyMce() {
if (getCookie('ctvPortalTinyMCESafariDisable')) {
return;
}
var rx = /RTE_ConvertTextAreaToRichEdit\("(\w+)"/;
var as = document.getElementsByTagName("script");
var enableForPage = false;
for (i = 0; i < as.length; i++) {
var st = as[i].text;
if (rx.test(st)) {
var ctlid = rx.exec(st)[1];
if (tinymce.isWebKit && !enableForPage) {
if (!confirm('TinyMCE support for Safari is experimental. Would you like to load it?\n\nClicking cancel will prevent this dialog from appearing for the rest of your SharePoint session.')) {
setCookie('ctvPortalTinyMCESafariDisable', true); //set a cookie to not load tinymce for this session
return;
} else {
enableForPage = true;
}
}
if (st.indexOf('FullHtml') >= 0) {
tinyMCE.init(MOSSFULL);
} else {
tinyMCE.init(MOSSBASIC);
}
tinyMCE.execCommand("mceAddControl", false, ctlid);
}
}
}
_spBodyOnLoadFunctionNames.push('ctv_enableTinyMce');
function getCookie(name) {
var start = document.cookie.indexOf(name + "=");
var len = start + name.length + 1;
if ((!start) && (name != document.cookie.substring(0, name.length))) {
return null;
}
if (start == -1) return null;
var end = document.cookie.indexOf(';', len);
if (end == -1) end = document.cookie.length;
return unescape(document.cookie.substring(len, end));
}
function setCookie(name, value, expires, path, domain, secure) {
var today = new Date();
today.setTime(today.getTime());
if (expires) {
expires = expires * 1000 * 60 * 60 * 24;
}
var expires_date = new Date(today.getTime() + (expires));
document.cookie = name + '=' + escape(value) +
((expires) ? ';expires=' + expires_date.toGMTString() : '') + //expires.toGMTString()
((path) ? ';path=' + path : '') +
((domain) ? ';domain=' + domain : '') +
((secure) ? ';secure' : '');
}
Para NON_IE.JS (navegadores no IE), solamente hace falta quitar o comentar la linea:
_spBodyOnLoadFunctionNames.push('ctv_enableTinyMce');
