Changeset 41092
- Timestamp:
- 07/19/2017 01:40:31 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/js/tinymce/plugins/wpeditimage/plugin.js
r40786 r41092 588 588 dom.addClass( editor.getBody(), captionClass ); 589 589 590 // Add caption field to the default image dialog591 editor.on( 'wpLoadImageForm', function( event ) {592 if ( editor.getParam( 'wpeditimage_disable_captions' ) ) {593 return;594 }595 596 var captionField = {597 type: 'textbox',598 flex: 1,599 name: 'wpcaption',600 minHeight: 60,601 multiline: true,602 scroll: true,603 label: 'Image caption'604 };605 606 event.data.splice( event.data.length - 1, 0, captionField );607 });608 609 // Fix caption parent width for images added from URL610 editor.on( 'wpNewImageRefresh', function( event ) {611 var parent, captionWidth;612 613 if ( parent = dom.getParent( event.node, 'dl.wp-caption' ) ) {614 if ( ! parent.style.width ) {615 captionWidth = parseInt( event.node.clientWidth, 10 ) + 10;616 captionWidth = captionWidth ? captionWidth + 'px' : '50%';617 dom.setStyle( parent, 'width', captionWidth );618 }619 }620 });621 622 editor.on( 'wpImageFormSubmit', function( event ) {623 var data = event.imgData.data,624 imgNode = event.imgData.node,625 caption = event.imgData.wpcaption,626 captionId = '',627 captionAlign = '',628 captionWidth = '',629 imgId = null,630 wrap, parent, node, html;631 632 // Temp image id so we can find the node later633 data.id = '__wp-temp-img-id';634 // Cancel the original callback635 event.imgData.cancel = true;636 637 if ( ! data.style ) {638 data.style = null;639 }640 641 if ( ! data.src ) {642 // Delete the image and the caption643 if ( imgNode ) {644 if ( wrap = dom.getParent( imgNode, 'div.mceTemp' ) ) {645 dom.remove( wrap );646 } else if ( imgNode.parentNode.nodeName === 'A' ) {647 dom.remove( imgNode.parentNode );648 } else {649 dom.remove( imgNode );650 }651 652 editor.nodeChanged();653 }654 return;655 }656 657 if ( caption ) {658 caption = caption.replace( /\r\n|\r/g, '\n' ).replace( /<\/?[a-zA-Z0-9]+( [^<>]+)?>/g, function( a ) {659 // No line breaks inside HTML tags660 return a.replace( /[\r\n\t]+/, ' ' );661 });662 663 // Convert remaining line breaks to <br>664 caption = caption.replace( /(<br[^>]*>)\s*\n\s*/g, '$1' ).replace( /\s*\n\s*/g, '<br />' );665 caption = verifyHTML( caption );666 }667 668 if ( ! imgNode ) {669 // New image inserted670 html = dom.createHTML( 'img', data );671 672 if ( caption ) {673 node = editor.selection.getNode();674 675 if ( data.width ) {676 captionWidth = parseInt( data.width, 10 );677 678 if ( ! editor.getParam( 'wpeditimage_html5_captions' ) ) {679 captionWidth += 10;680 }681 682 captionWidth = ' style="width: ' + captionWidth + 'px"';683 }684 685 html = '<dl class="wp-caption alignnone"' + captionWidth + '>' +686 '<dt class="wp-caption-dt">'+ html +'</dt><dd class="wp-caption-dd">'+ caption +'</dd></dl>';687 688 if ( node.nodeName === 'P' ) {689 parent = node;690 } else {691 parent = dom.getParent( node, 'p' );692 }693 694 if ( parent && parent.nodeName === 'P' ) {695 wrap = dom.create( 'div', { 'class': 'mceTemp' }, html );696 parent.parentNode.insertBefore( wrap, parent );697 editor.selection.select( wrap );698 editor.nodeChanged();699 700 if ( dom.isEmpty( parent ) ) {701 dom.remove( parent );702 }703 } else {704 editor.selection.setContent( '<div class="mceTemp">' + html + '</div>' );705 }706 } else {707 editor.selection.setContent( html );708 }709 } else {710 // Edit existing image711 712 // Store the original image id if any713 imgId = imgNode.id || null;714 // Update the image node715 dom.setAttribs( imgNode, data );716 wrap = dom.getParent( imgNode, 'dl.wp-caption' );717 718 if ( caption ) {719 if ( wrap ) {720 if ( parent = dom.select( 'dd.wp-caption-dd', wrap )[0] ) {721 parent.innerHTML = caption;722 }723 } else {724 if ( imgNode.className ) {725 captionId = imgNode.className.match( /wp-image-([0-9]+)/ );726 captionAlign = imgNode.className.match( /align(left|right|center|none)/ );727 }728 729 if ( captionAlign ) {730 captionAlign = captionAlign[0];731 imgNode.className = imgNode.className.replace( /align(left|right|center|none)/g, '' );732 } else {733 captionAlign = 'alignnone';734 }735 736 captionAlign = ' class="wp-caption ' + captionAlign + '"';737 738 if ( captionId ) {739 captionId = ' id="attachment_' + captionId[1] + '"';740 }741 742 captionWidth = data.width || imgNode.clientWidth;743 744 if ( captionWidth ) {745 captionWidth = parseInt( captionWidth, 10 );746 747 if ( ! editor.getParam( 'wpeditimage_html5_captions' ) ) {748 captionWidth += 10;749 }750 751 captionWidth = ' style="width: '+ captionWidth +'px"';752 }753 754 if ( imgNode.parentNode && imgNode.parentNode.nodeName === 'A' ) {755 node = imgNode.parentNode;756 } else {757 node = imgNode;758 }759 760 html = '<dl ' + captionId + captionAlign + captionWidth + '>' +761 '<dt class="wp-caption-dt"></dt><dd class="wp-caption-dd">'+ caption +'</dd></dl>';762 763 wrap = dom.create( 'div', { 'class': 'mceTemp' }, html );764 765 if ( parent = dom.getParent( node, 'p' ) ) {766 parent.parentNode.insertBefore( wrap, parent );767 } else {768 node.parentNode.insertBefore( wrap, node );769 }770 771 editor.$( wrap ).find( 'dt.wp-caption-dt' ).append( node );772 773 if ( parent && dom.isEmpty( parent ) ) {774 dom.remove( parent );775 }776 }777 } else {778 if ( wrap ) {779 // Remove the caption wrapper and place the image in new paragraph780 if ( imgNode.parentNode.nodeName === 'A' ) {781 html = dom.getOuterHTML( imgNode.parentNode );782 } else {783 html = dom.getOuterHTML( imgNode );784 }785 786 parent = dom.create( 'p', {}, html );787 dom.insertAfter( parent, wrap.parentNode );788 editor.selection.select( parent );789 editor.nodeChanged();790 dom.remove( wrap.parentNode );791 }792 }793 }794 795 imgNode = dom.get('__wp-temp-img-id');796 dom.setAttrib( imgNode, 'id', imgId || null );797 event.imgData.node = imgNode;798 });799 800 editor.on( 'wpLoadImageData', function( event ) {801 var parent,802 data = event.imgData.data,803 imgNode = event.imgData.node;804 805 if ( parent = dom.getParent( imgNode, 'dl.wp-caption' ) ) {806 parent = dom.select( 'dd.wp-caption-dd', parent )[0];807 808 if ( parent ) {809 data.wpcaption = editor.serializer.serialize( parent )810 .replace( /<br[^>]*>/g, '$&\n' ).replace( /^<p>/, '' ).replace( /<\/p>$/, '' );811 }812 }813 });814 815 590 // Prevent IE11 from making dl.wp-caption resizable 816 591 if ( tinymce.Env.ie && tinymce.Env.ie > 10 ) {
Note: See TracChangeset
for help on using the changeset viewer.