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

Changeset 6231


Ignore:
Timestamp:
Apr 1, 2008, 8:38:34 PM (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

    r6167 r6231  
    5858            ed.onPostProcess.add(function(ed, o) {  // To text mode
    5959                if (o.save) {
    60                     o.content = t._previewToText(o.content);
     60                    o.content = t._previewToText(o.content, ed);
    6161                }
    6262            });
     
    8080        },
    8181
    82         _previewToText : function(s) {
    83             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>/;
    84             s = tinymce.trim(s);
     82        _previewToText : function(s, editor) {
     83            var editorDoc = editor.getBody();
    8584
    8685            function rep(re, str) {
     
    8887            };
    8988
    90             function convertHtmlTagToDecoTag(matches)
     89            s = tinymce.trim(s);
     90            editorDoc.innertHTML = s;
     91
     92            function convertHtmlTagToDecoTag(tagname, doc)
    9193            {
    92                 var tagname = matches[1];
    93                 var font_size = matches[3] || matches[7];
    94                 var font_color = matches[4] || matches[6];
    95                 var value = matches[8].gsub(rule, convertHtmlTagToDecoTag);
    96                 var opt = "";
    97                
    98                 // convert font tag
    99                 if (tagname == "font") {
    100                     if (font_size == "7") {
    101                         tagname = "large";
    102                     } else if (font_size == "2") {
    103                         tagname = "small";
     94                var tagList = doc.getElementsByTagName(tagname);
     95                var count = tagList.length;
     96                var org_tagname = tagname;
     97                while (tagList.length) {
     98                    targetObj = tagList[0];
     99
     100                    if (org_tagname == 'font') {
     101                        var size = targetObj.getAttribute('size');
     102                        var color = targetObj.getAttribute('color');
     103
     104                        if (size == '7') {
     105                            tagname = 'op:large';
     106                        } else if (size == '2') {
     107                            tagname = 'op:small';
     108                        }
     109
     110                        if (color) {
     111                            tagname = 'op:color:' + color.replace('#', '');
     112                        }
     113                    } else {
     114                        tagname = 'op:' + org_tagname;
    104115                    }
    105116
    106                     if (font_size && font_color) {
    107                         return "<op:color:" + font_color + "><op:" + tagname + ">" + value + "</op:" + tagname + "></op:color>";
    108                     } else if (font_color) {
    109                         tagname = "color";
    110                         opt = ":" + font_color;
    111                     }
     117                    var newObj = document.createElement(tagname);
     118                    editor.dom.replace(newObj, targetObj, true);
     119                    tagList = doc.getElementsByTagName(org_tagname);
     120                }
     121                s = editorDoc.innerHTML;
     122            }
    112123
    113                     if (tagname == "font") {  // can't convert
    114                         return value;
    115                     }
    116                 }
    117 
    118                 var converted = "<op:" + tagname + opt + ">" + value + "</op:" + tagname + ">";
    119                 return converted;
    120             };
    121 
    122             s = s.gsub(rule, convertHtmlTagToDecoTag);
    123             rep(/<br\s?\/?>/gi,"\n\n");
     124            var convertList = new Array('b', 'u', 's', 'i', 'font');
     125            for (var i = 0; i < convertList.length; i++) {
     126                convertHtmlTagToDecoTag(convertList[i], editor.getBody());
     127            }
     128            rep(/<\/op:color:[0-9a-f]{3,6}>/gi,"</op:color>");
     129            rep(/<\/p>/gi,"<br />");
     130            rep(/<p>/gi,"");
     131            rep(/<br\s?\/?[^>]*>/gi,"\n\n");
    124132            rep(/&nbsp;/gi," ");
    125133            rep(/&quot;/gi,"\"");
     
    133141        _textToPreview : function(s) {
    134142            s = tinymce.trim(s);
    135             var rule = /&lt;op:(b|u|s|i|large|small|color)(:(#[0-9a-f]{3,6})|)&gt;(.*?)&lt;\/op:\1&gt;/;
     143            var rule = /&lt;op:(b|u|s|i|large|small|color)(:([0-9a-f]{3,6})|)&gt;(.*?)&lt;\/op:\1&gt;/;
    136144
    137145            function rep(re, str) {
     
    148156                if (tagname == 'color' && color) {
    149157                    tagname = 'font';
    150                     opt = ' color="' + color + '"';
     158                    opt = ' color="#' + color + '"';
    151159                }
    152160
Note: See TracChangeset for help on using the changeset viewer.