Codepoint

by Trentia Consulting

GridView y CellSpacing en IE8

Muchos somos los desarrolladores que con la aparición del nuevo y flamante navegador de Microsoft, hemos notado que algunos de los controles que ofrece Visual Studio no se ven de la manera que lo tendrían que hacer.

Uno de estos problemas es el atributo CellSpacing del GridView, donde IE8 hace caso omiso de este atributo, por lo que notaremos que aparece una separación entre nuestras columnas.

Algunos son los foros, donde se contentan con que pongas la directiva a nivel de página con la compatibilidad de IE7. Como siempre, nuestro objetivo es dar la solución más elegante, por eso le hemos dado la vuelta al asunto.

Después de darle vueltas y vueltas, hemos dado con la solución.

Basta con aplicar a nuestra CSS las siguientes entradas:

Suponiendo que nuestro GridView va a tener un estilo llamado MyGridViewClass, entraremos lo siguiente:

	/* PARA EL HEADER */
. MyGridViewClass th
{
    border: 0px;
    padding: 0px;
}

/* PARA LAS ROWS */
.MyGridViewClass td
{
    border: 0px;
    padding: 0px;
}

Con esto, y a la espera que la nueva versión del Framework 4.0 y de los controles de Visual Studio 2010 corrijan esta serie de incompatibilidades, esta será nuestra solución preventiva.

Bloqueo del debugger de VS 2005 con IE8

Si tiene abiertas varias instancias de IE8 e intenta depurar un proyecto se encontrará con que el debugger de VS no se detiene (hace caso omiso de los puntos de interrupción introducidos).

Resulta que IE8 se ejecuta a través de diferentes procesos. Los debuggers anteriores se confunden y no saben a qué proceso asociarse.

Para solucionarlo ejecute los siguientes pasos:

1. Abra RegEdit
2. Vaya a HKEY_LOCAL_MACHINE -> SOFTWARE -> Microsoft -> Internet Explorer -> Main

regedit

3. Añada un valor DWORD llamado TabProcGrowth con valor 0

dword

4. Desactive el modo protegido en la seguridad del IE8 (en las Opciones de Internet)

Como integrar TinyMCE en Sharepoint

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.

(1)    Descargar y desplegar TinyMCE en \TEMPLATE\LAYOUTS\3082\tinymce. Se puede descargar desde http://tinymce.moxiecode.com/download.php

(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');

tinymce