views:

103

answers:

1

i want to strip all the html tags when pasting in tinymce editor. following is the code which is not functional... following is the tinymce settings... the paste_preprocess callback is not trigering... am i missing some option..?

tinyMCESettings = [ {
        mode : "none,textareas",
        height:heightEditor,
        width:'100%',
        plugins: "paste",
        theme : "advanced", //skin : "wp_theme",
        theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter",
        relative_urls : "true",
        paste_use_dialog : false,
        paste_auto_cleanup_on_paste : false,
        content_css: styleSheetToLoadForTinyMCE + "?" + new Date().getTime(),
        force_p_newlines: false,
        setup: function (ed) {
            ed.onInit.add(
                function (ed, evt) {
                    //resizeFrame1();
                    var a = tinyMCE.get(ed.id).getContent();
                    if(a.indexOf("hcRestrictedMode", 0) > 0){
                        ed.getDoc().designMode = "off";
                        setTimeout(function(){
                            tinyMCE.activeEditor.dom.setAttrib(tinyMCE.activeEditor.dom.select(".hcEditable"), 'contenteditable', 'true');
                        }, 1000);
                    }
                });
        },
        paste_preprocess : function(pl, o) {
            // Content string containing the HTML from the clipboard
            alert(o.content);
            o.content = o.content.replace(/<.+?>/,"");
        },
        paste_postprocess : function(pl, o) {
           // Content DOM node containing the DOM structure of the clipboard
           alert(o.content)
           o.content = o.content.replace(/<.+?>/,"");
       }
    }];

help here... thnx in advance...

+1  A: 

Here is the config code:

paste_preprocess : function(pl, o) {
  alert('pasteprocess startet');
  o.content = strip_tags(o.content,'');
  //o.content = strip_tags(o.content,'<b><u><i><p><br><img>'); // use this i.e. to keep some tags
  alert('pasteprocess ended - function strip_tags found and used');
},

Here is the function used (taken from here)

function strip_tags (str, allowed_tags) {
    // Strips HTML and PHP tags from a string  
    // 
    // version: 1006.1915
    // discuss at: http://phpjs.org/functions/strip_tags    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Luke Godfrey
    // +      input by: Pul
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Onno Marsman    // +      input by: Alex
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Marc Palau
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Brett Zamir (http://brett-zamir.me)    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Eric Nagel
    // +      input by: Bobby Drake
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Tomasz Wesolowski    // *     example 1: strip_tags('<p>Kevin</p> <b>van</b> <i>Zonneveld</i>', '<i><b>');
    // *     returns 1: 'Kevin <b>van</b> <i>Zonneveld</i>'
    // *     example 2: strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>');
    // *     returns 2: '<p>Kevin van Zonneveld</p>'
    // *     example 3: strip_tags("<a href='http://kevin.vanzonneveld.net'&gt;Kevin van Zonneveld</a>", "<a>");    // *     returns 3: '<a href='http://kevin.vanzonneveld.net'&gt;Kevin van Zonneveld</a>'
    // *     example 4: strip_tags('1 < 5 5 > 1');
    // *     returns 4: '1 < 5 5 > 1'
    var key = '', allowed = false;
    var matches = [];    var allowed_array = [];
    var allowed_tag = '';
    var i = 0;
    var k = '';
    var html = ''; 
    var replacer = function (search, replace, str) {
        return str.split(search).join(replace);
    };
     // Build allowes tags associative array
    if (allowed_tags) {
        allowed_array = allowed_tags.match(/([a-zA-Z0-9]+)/gi);
    }
     str += '';

    // Match tags
    matches = str.match(/(<\/?[\S][^>]*>)/gi);
     // Go through all HTML tags
    for (key in matches) {
        if (isNaN(key)) {
            // IE7 Hack
            continue;        }

        // Save HTML tag
        html = matches[key].toString();
         // Is tag not in allowed list? Remove from str!
        allowed = false;

        // Go through all allowed tags
        for (k in allowed_array) {            // Init
            allowed_tag = allowed_array[k];
            i = -1;

            if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+'>');}            if (i != 0) { i = html.toLowerCase().indexOf('<'+allowed_tag+' ');}
            if (i != 0) { i = html.toLowerCase().indexOf('</'+allowed_tag)   ;}

            // Determine
            if (i == 0) {                allowed = true;
                break;
            }
        }
         if (!allowed) {
            str = replacer(html, "", str); // Custom replace. No regexing
        }
    }
     return str;
}

EDIT: set paste_auto_cleanup_on_paste to true and it will work (checked your config in my system)

Thariama
thnx aloadz for the reply...actually the regular expression is OK... am i missing something in the tinymce configuration as the paste_preprocess call back is not triggering on pasting something in editor...?
Jamal Abdul Nasir
you say the paste plugin is activated, then make sure the function is globaly callable.
Thariama
i am using the paste_preprocess callback function in the tinymce initialization function... and the function in which this initialization resides is globally callable... still i am having the problem... checkout the link.... http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste
Jamal Abdul Nasir
does 'pasteprocess ended - function strip_tags found and used' show up?
Thariama
if this still does not work please post your full tinymce init function
Thariama
i have provided the code in the question... please review the question... thnx once again...
Jamal Abdul Nasir
i edited my post, one config setting was interfering with paste_preprocess
Thariama
your code is also OK.. but what is wrong with my code..? is there something missing..?
Jamal Abdul Nasir
did you alter the paste_auto_cleanup_on_paste setting?
Thariama
yes i did... still it is not working...
Jamal Abdul Nasir
hmmm, did you restart the server? (usualy this shouldn't be necessary cause of js)
Thariama