ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Changeset 5914


Ignore:
Timestamp:
Mar 21, 2008, 5:40:02 AM (13 years ago)
Author:
ebihara
Message:

#333:再帰による置換をおこない、入れ子関係が複雑になった場合も適切に変換できるようにした(ただしfontタグ複数指定時の対応が不完全)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • OpenPNE/branches/work/ebihara/prj_deco_diary/public_html/js/tiny_mce/plugins/openpne/editor_plugin.js

    r5911 r5914  
    9191
    9292        _previewToText : function(s) {
     93            var rule = /<(font|b|u|s|i)( size="(2|7)"| color="(#[0-9a-f]{3,6})"|)( color="(#[0-9a-f]{3,6})"| size="(2|7)"|)>(.*?)<\/\1>/;
    9394            s = tinymce.trim(s);
    9495
     
    9697                s = s.replace(re, str);
    9798            };
    98 console.debug('ptt b', s);
    99             rep(/<font size=\"2\">(.*?)<\/font>/gi,"<op:small>$1</op:small>");
    100             rep(/<font size=\"7\">(.*?)<\/font>/gi,"<op:large>$1</op:large>");
    101             rep(/<font color=\"(#[0-9a-f]{3,6})\">(.*?)<\/font>/gi,"<op:color:$1>$2</op:color>");
    102             rep(/<font color=\"(#[0-9a-f]{3,6})\" size=\"2\">(.*?)<\/font>/gi,"<op:color:$1><op:small>$2</op:small></op:color>");
    103             rep(/<font color=\"(#[0-9a-f]{3,6})\" size=\"7\">(.*?)<\/font>/gi,"<op:color:$1><op:large>$2</op:large></op:color>");
    104             rep(/<font size=\"2\"color=\"(#[0-9a-f]{3,6})\" >(.*?)<\/font>/gi,"<op:color:$1><op:small>$2</op:small></op:color>");
    105             rep(/<font size=\"7\" color=\"(#[0-9a-f]{3,6})\">(.*?)<\/font>/gi,"<op:color:$1><op:large>$2</op:large></op:color>");
    106             rep(/<(b|u|s|i)>/gi,"<op:$1>");
    107             rep(/<\/(b|u|s|i)>/gi,"</op:$1>");
    108             rep(/<p>/gi,"");
    109             rep(/<\/p>/gi,"\n\n");
     99
     100            function convertHtmlTagToDecoTag(matches)
     101            {
     102                var tagname = matches[1];
     103                var font_size = matches[3] || matches[7];
     104                var font_color = matches[4] || matches[6];
     105                var value = matches[8].gsub(rule, convertHtmlTagToDecoTag);
     106                var opt = "";
     107               
     108                // convert font tag
     109                if (tagname == "font") {
     110                    if (font_size == "7") {
     111                        tagname = "large";
     112                    } else if (font_size == "2") {
     113                        tagname = "small";
     114                    }
     115
     116                    if (font_size && font_color) {
     117                        return "<op:color:" + font_color + "><op:" + tagname + ">" + value + "</op:" + tagname + "></op:color>";
     118                    } else if (font_color) {
     119                        tagname = "color";
     120                        opt = ":" + font_color;
     121                    }
     122
     123                    if (tagname == "font") {  // can't convert
     124                        return value;
     125                    }
     126                }
     127
     128                var converted = "<op:" + tagname + opt + ">" + value + "</op:" + tagname + ">";
     129                return converted;
     130            };
     131
     132            s = s.gsub(rule, convertHtmlTagToDecoTag);
    110133            rep(/<br\s?\/?>/gi,"\n\n");
    111134            rep(/&nbsp;/gi," ");
     
    115138            rep(/&amp;/gi,"&");
    116139
    117 console.debug('ptt a', s);
    118140            return s;
    119141        },
     
    121143        _textToPreview : function(s) {
    122144            s = tinymce.trim(s);
     145            var rule = /&lt;op:(b|u|s|i|large|small|color)(:(#[0-9a-f]{3,6})|)&gt;(.*?)&lt;\/op:\1&gt;/;
    123146
    124147            function rep(re, str) {
     
    126149            };
    127150
    128 console.debug('ptp b', s);
     151            function convertDecoTagToHtmlTag(matches)
     152            {
     153                var tagname = matches[1];
     154                var color = matches[3];
     155                var value = matches[4].gsub(rule, convertDecoTagToHtmlTag);
     156                var opt = '';
     157
     158                if (tagname == 'color' && color) {
     159                    tagname = 'font';
     160                    opt = ' color="' + color + '"';
     161                }
     162
     163                if (tagname == 'large') {
     164                    tagname = 'font';
     165                    opt = ' size="7"';
     166                }
     167           
     168                if (tagname == 'small') {
     169                    tagname = 'font';
     170                    opt = ' size="2"';
     171                }
     172
     173                var converted = "<" + tagname + opt + ">" + value + "</" + tagname + ">";
     174                return converted;
     175            };
     176
    129177            rep(/</gi,"&lt;");
    130178            rep(/>/gi,"&gt;");
    131179            rep(/\n/gi,"<br />");
    132             rep(/&lt;op:color:?(.*?)&gt;/gi,"<font color=\"$1;\">");
    133             rep(/&lt;op:large&gt;/gi,"<font size=\"7\">");
    134             rep(/&lt;op:small&gt;/gi,"<font size=\"2\">");
    135             rep(/&lt;\/op:(small|large|color)&gt;/gi,"</font>");
    136             rep(/&lt;op:(b|u|s|i)&gt;/gi,"<$1>");
    137             rep(/&lt;\/op:(b|u|s|i)&gt;/gi,"</$1>");
     180            s = s.gsub(rule, convertDecoTagToHtmlTag);
    138181
    139 console.debug('ptp a', s);
    140182            return s;
    141183        }
Note: See TracChangeset for help on using the changeset viewer.