Subversion Repositories Applications.papyrus

Rev

Rev 1087 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--
 * FCKeditor - The text editor for internet
 * Copyright (C) 2003-2006 Frederico Caldeira Knabben
 * 
 * Licensed under the terms of the GNU Lesser General Public License:
 *              http://www.opensource.org/licenses/lgpl-license.php
 * 
 * For further information visit:
 *              http://www.fckeditor.net/
 * 
 * "Support Open Source software. What about a donation today?"
 * 
 * File Name: fck_paste.html
 *      This dialog is shown when, for some reason (usually security settings), 
 *      the user is not able to paste data from the clipboard to the editor using 
 *      the toolbar buttons or the context menu.
 * 
 * File Authors:
 *              Frederico Caldeira Knabben (fredck@fckeditor.net)
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="robots" content="noindex, nofollow" />
        <script type="text/javascript">
var oEditor = window.parent.InnerDialogLoaded() ;

window.onload = function ()
{
        // First of all, translate the dialog box texts
        oEditor.FCKLanguageManager.TranslatePage(document) ;
        
        if ( window.parent.dialogArguments.CustomValue == 'Word' )
        {
                var oFrame = document.getElementById('frmData')
                oFrame.style.display = '' ;
                
                if ( oFrame.contentDocument ) 
                        oFrame.contentDocument.designMode = 'on' ;
                else
                        oFrame.contentWindow.document.body.contentEditable = true ;
        }
        else
        {
                document.getElementById('txtData').style.display = '' ;
                document.getElementById('oWordCommands').style.display = 'none' ;
        }

        window.parent.SetOkButton( true ) ;     
        window.parent.SetAutoSize( true ) ;     
}

function Ok()
{
        var sHtml ;
        
        if ( window.parent.dialogArguments.CustomValue == 'Word' )
        {
                var oFrame = document.getElementById('frmData') ;
                
                if ( oFrame.contentDocument ) 
                        sHtml = oFrame.contentDocument.body.innerHTML ;
                else
                        sHtml = oFrame.contentWindow.document.body.innerHTML ;

                sHtml = CleanWord( sHtml ) ;
        }
        else
        {
                var sHtml = oEditor.FCKTools.HTMLEncode( document.getElementById('txtData').value )  ;
                sHtml = sHtml.replace( /\n/g, '<BR>' ) ;
        }
        
        oEditor.FCK.InsertHtml( sHtml ) ;
        
        return true ;
}

function CleanUpBox()
{
        var oFrame = document.getElementById('frmData') ;
        
        if ( oFrame.contentDocument ) 
                oFrame.contentDocument.body.innerHTML = '' ;
        else
                oFrame.contentWindow.document.body.innerHTML = '' ;
}

function CleanWord( html )
{
        var bIgnoreFont = document.getElementById('chkRemoveFont').checked ;
        var bRemoveStyles = document.getElementById('chkRemoveStyles').checked ;

        html = html.replace(/<o:p>\s*<\/o:p>/g, "") ;
        html = html.replace(/<o:p>.*?<\/o:p>/g, "&nbsp;") ;
        
        // Remove mso-xxx styles.
        html = html.replace( /\s*mso-[^:]+:[^;"]+;?/gi, "" ) ;

        // Remove margin styles.
        html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*;/gi, "" ) ;
        html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*"/gi, "\"" ) ;

        html = html.replace( /\s*TEXT-INDENT: 0cm\s*;/gi, "" ) ;
        html = html.replace( /\s*TEXT-INDENT: 0cm\s*"/gi, "\"" ) ;

        html = html.replace( /\s*TEXT-ALIGN: [^\s;]+;?"/gi, "\"" ) ;

        html = html.replace( /\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\"" ) ;

        html = html.replace( /\s*FONT-VARIANT: [^\s;]+;?"/gi, "\"" ) ;

        html = html.replace( /\s*tab-stops:[^;"]*;?/gi, "" ) ;
        html = html.replace( /\s*tab-stops:[^"]*/gi, "" ) ;

        // Remove FONT face attributes.
        if ( bIgnoreFont )
        {
                html = html.replace( /\s*face="[^"]*"/gi, "" ) ;
                html = html.replace( /\s*face=[^ >]*/gi, "" ) ;

                html = html.replace( /\s*FONT-FAMILY:[^;"]*;?/gi, "" ) ;
        }
        
        // Remove Class attributes
        html = html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ;

        // Remove styles.
        if ( bRemoveStyles )
                html = html.replace( /<(\w[^>]*) style="([^\"]*)"([^>]*)/gi, "<$1$3" ) ;

        // Remove empty styles.
        html =  html.replace( /\s*style="\s*"/gi, '' ) ;
        
        html = html.replace( /<SPAN\s*[^>]*>\s*&nbsp;\s*<\/SPAN>/gi, '&nbsp;' ) ;
        
        html = html.replace( /<SPAN\s*[^>]*><\/SPAN>/gi, '' ) ;
        
        // Remove Lang attributes
        html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ;
        
        html = html.replace( /<SPAN\s*>(.*?)<\/SPAN>/gi, '$1' ) ;
        
        html = html.replace( /<FONT\s*>(.*?)<\/FONT>/gi, '$1' ) ;

        // Remove XML elements and declarations
        html = html.replace(/<\\?\?xml[^>]*>/gi, "") ;
        
        // Remove Tags with XML namespace declarations: <o:p><\/o:p>
        html = html.replace(/<\/?\w+:[^>]*>/gi, "") ;
        
        // Remove comments [SF BUG-1481861].
        html = html.replace(/<\!--.*-->/g, "") ;
        
        html = html.replace( /<H\d>\s*<\/H\d>/gi, '' ) ;

        html = html.replace( /<H1([^>]*)>/gi, '<div$1><b><font size="6">' ) ;
        html = html.replace( /<H2([^>]*)>/gi, '<div$1><b><font size="5">' ) ;
        html = html.replace( /<H3([^>]*)>/gi, '<div$1><b><font size="4">' ) ;
        html = html.replace( /<H4([^>]*)>/gi, '<div$1><b><font size="3">' ) ;
        html = html.replace( /<H5([^>]*)>/gi, '<div$1><b><font size="2">' ) ;
        html = html.replace( /<H6([^>]*)>/gi, '<div$1><b><font size="1">' ) ;

        html = html.replace( /<\/H\d>/gi, '<\/font><\/b><\/div>' ) ;
        
        html = html.replace( /<(U|I|STRIKE)>&nbsp;<\/\1>/g, '&nbsp;' ) ;

        // Remove empty tags (three times, just to be sure).
        html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
        html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
        html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;

        // Transform <P> to <DIV>
        var re = new RegExp( "(<P)([^>]*>.*?)(<\/P>)", "gi" ) ; // Different because of a IE 5.0 error
        html = html.replace( re, "<div$2<\/div>" ) ;
        
        // Fix relative anchor URLs (IE automatically adds the current page URL).
        re = new RegExp( window.location + "#", "g" ) ;
        html = html.replace( re, '#') ;

        return html ;
}

        </script>
</head>
<body style="overflow: hidden">
        <table cellspacing="0" cellpadding="0" width="100%" border="0" style="height: 98%">
                <tr>
                        <td>
                                <span fcklang="DlgPasteMsg2">Please paste inside the following box using the keyboard
                                        (<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.</span>
                                <br />
                                &nbsp;
                        </td>
                </tr>
                <tr>
                        <td valign="top" height="100%" style="border-right: #000000 1px solid; border-top: #000000 1px solid;
                                border-left: #000000 1px solid; border-bottom: #000000 1px solid">
                                <textarea id="txtData" cols="80" rows="5" style="border: #000000 1px; display: none;
                                        width: 99%; height: 98%"></textarea>
                                <iframe id="frmData" src="javascript:void(0)" height="98%" width="99%" frameborder="0"
                                        style="border-right: #000000 1px; border-top: #000000 1px; display: none; border-left: #000000 1px;
                                        border-bottom: #000000 1px; background-color: #ffffff"></iframe>
                        </td>
                </tr>
                <tr id="oWordCommands">
                        <td>
                                <table border="0" cellpadding="0" cellspacing="0" width="100%">
                                        <tr>
                                                <td nowrap="nowrap">
                                                        <input id="chkRemoveFont" type="checkbox" checked="checked" />
                                                        <label for="chkRemoveFont" fcklang="DlgPasteIgnoreFont">
                                                                Ignore Font Face definitions</label>
                                                        <br />
                                                        <input id="chkRemoveStyles" type="checkbox" />
                                                        <label for="chkRemoveStyles" fcklang="DlgPasteRemoveStyles">
                                                                Remove Styles definitions</label>
                                                </td>
                                                <td align="right" valign="top">
                                                        <input type="button" fcklang="DlgPasteCleanBox" value="Clean Up Box" onclick="CleanUpBox()" />
                                                </td>
                                        </tr>
                                </table>
                        </td>
                </tr>
        </table>
</body>
</html>