Ticket #6199: 6199.patch

File 6199.patch, 5.7 KB (added by Frederico Caldeira Knabben, 14 years ago)
  • _dev/v2template/convert.html

     
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     2<!--
     3Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
     4For licensing, see LICENSE.html or http://ckeditor.com/license
     5-->
     6<html xmlns="http://www.w3.org/1999/xhtml">
     7<head>
     8        <title></title>
     9        <style type="text/css">
     10                textarea
     11                {
     12                        border: 1px solid #ddd;
     13                }
     14               
     15                #error
     16                {
     17                        border: red 1px solid;
     18                        background-color: #ffffcc;
     19                        padding: 10px;
     20                        visibility: hidden;
     21                }
     22        </style>
     23        <script type="text/javascript" src="../../_source/core/loader.js"></script>
     24        <script type="text/javascript">
     25
     26CKEDITOR.loader.load( 'core/xml' );
     27       
     28        </script>
     29        <script type="text/javascript">
     30
     31function convert( xml )
     32{
     33        if ( !xml )
     34        {
     35                hideError();
     36                return;
     37        }
     38        // Initialize the output.
     39        var output = '';
     40
     41        var v3 = document.getElementById( 'v3' );
     42        v3.value = '';
     43
     44        xml = new CKEDITOR.xml( xml );
     45
     46        var templatesNode = xml.selectSingleNode( '/Templates' );
     47
     48        if ( !templatesNode )
     49        {
     50                throwParsingError( 'The <Templates> node was not found' );
     51                return ;
     52        }
     53
     54        // Get the imagesBasePath attribute value.
     55        var imagesBasePath = templatesNode.getAttribute( 'imagesBasePath' );
     56
     57        output +=
     58'// Register a templates definition set named "default".\n' +
     59'CKEDITOR.addTemplates( \'default\',\n' +
     60'{\n';
     61
     62        if ( imagesBasePath )
     63        {
     64                // If using the default v2 path, use the default v3 as well.
     65                if ( imagesBasePath == 'fck_template/images/' )
     66                        imagesBasePath = 'CKEDITOR.plugins.getPath( \'templates\' ) + \'templates/images/\'';
     67                else
     68                        imagesBasePath = "'" + imagesBasePath + "'";
     69
     70                output +=
     71'       // The name of sub folder which holds the shortcut preview images of the templates.\n' +
     72'       imagesPath : CKEDITOR.getUrl( ' + imagesBasePath + ' ),\n' +
     73'\n';
     74        }
     75
     76        output +=
     77'       // The templates definitions.\n' +
     78'       templates :\n' +
     79'               [';
     80
     81        // Retrieve all <Template> nodes.
     82        var templateNodes = xml.selectNodes( 'Template', templatesNode );
     83
     84        for ( var i = 0 ; i < templateNodes.length ; i++ )
     85        {
     86                var templateNode = templateNodes[ i ];
     87                        title = fixJsString( templateNode.getAttribute( 'title' ) ),
     88                        image = fixJsString( templateNode.getAttribute( 'image' ) ),
     89                        description = fixJsString( xml.getInnerXml( 'Description', templateNode ) ),
     90                        html = convertHtmlCData( xml.getInnerXml( 'Html', templateNode ) );
     91
     92                if ( i > 0 )
     93                        output += ',';
     94
     95                output +=
     96'\n                     {\n';
     97
     98                title && ( output +=
     99'                               title: \'' + title + '\',\n' );
     100
     101                image && ( output +=
     102'                               image: \'' + image + '\',\n' );
     103
     104                description && ( output +=
     105'                               description: \'' + description + '\',\n' );
     106
     107                output +=
     108'                               html:\n' +
     109html + '\n' +
     110'                       }';
     111        }
     112
     113        output +=
     114'\n             ]\n' +
     115'});\n';
     116
     117        v3.value = output;
     118
     119        hideError();
     120}
     121
     122function fixJsString( str )
     123{
     124        return str && str.replace( /'/g, "\\'" );
     125}
     126
     127function convertHtmlCData( html )
     128{
     129        if ( !html )
     130                return "                                        ''";
     131
     132        var output = '';
     133
     134        // Remove the CDATA tag.
     135        html = html.replace( /^\s*<!\[CDATA\[/, '' );
     136        html = html.replace( /\]\]>\s*$/, '' );
     137
     138        // Break the HTML lines.
     139        var lines = html.split( /(?:\r\n)|\n|\r/ );
     140
     141        if ( lines.length && /^\s*$/.test( lines[ 0 ] ) )
     142                lines.shift();
     143
     144        if ( lines.length && /^\s*$/.test( lines[ lines.length - 1 ] ) )
     145                lines.pop();
     146
     147        // Find out how many tabs we must remove from the lines to remove the indentation.
     148        var indentSize = 0;
     149        for ( var i = 0 ; i < lines.length ; i++ )
     150        {
     151                var tabs = lines[ i ].match( /^\t*/ )[0].length;
     152
     153                if ( !i || tabs < indentSize )
     154                        indentSize = tabs;
     155        }
     156
     157        // Now remove the indentation and output the line.
     158        for ( var i = 0 ; i < lines.length ; i++ )
     159        {
     160                var line = lines[ i ];
     161
     162                if ( indentSize )
     163                        line = line.substr( indentSize );
     164
     165                if ( i )
     166                        output += ' +\n';
     167
     168                line = line.replace( /^\t+/, function( match )
     169                        {
     170                                output += match;
     171                                return '';
     172                        });
     173
     174                line = line.replace( /\u00A0/g, '&nbsp;' );
     175
     176                output += '                                     \'' + line + '\'';
     177        }
     178
     179        return output;
     180}
     181
     182function throwParsingError( extraMessage )
     183{
     184        document.getElementById( 'extraError' ).innerHTML = extraMessage.replace( /</g, '&lt;' );
     185        document.getElementById( 'error' ).style.visibility = 'visible';
     186}
     187
     188function hideError()
     189{
     190        document.getElementById( 'error' ).style.visibility = 'hidden';
     191}
     192
     193window.onload = function()
     194{
     195        var v2 = document.getElementById( 'v2' );
     196        v2.onchange = v2.onkeyup = v2.onpaste = function()
     197                {
     198                        setTimeout( function()
     199                                {
     200                                        convert( v2.value );
     201                                }, 0 );
     202                };
     203}
     204
     205        </script>
     206</head>
     207<body>
     208        <h1>
     209                FCKeditor 2 Template Converter for CKEditor 3</h1>
     210        <table style="width: 100%" cellspacing="10">
     211                <tr>
     212                        <td style="width: 50%">
     213                                <p>
     214                                        Paste the original FCKeditor 2 XML template here:<br />
     215                                        <textarea id="v2" style="width: 100%; height: 400px" wrap="off" spellcheck="false"></textarea></p>
     216                        </td>
     217                        <td style="width: 50%">
     218                                <p>
     219                                        Converted output for CKEditor 3 (double-click to select all):<br />
     220                                        <textarea id="v3" style="width: 100%; height: 400px" wrap="off" ondblclick="this.focus; this.select();"
     221                                                readonly="readonly"></textarea></p>
     222                        </td>
     223                </tr>
     224        </table>
     225        <p id="error">
     226                ERROR: It's not possible to parse the inputted template. <span id="extraError"></span>
     227        </p>
     228</body>
     229</html>
© 2003 – 2022, CKSource sp. z o.o. sp.k. All rights reserved. | Terms of use | Privacy policy