Changeset 27797
- Timestamp:
- 03/27/2014 10:40:06 PM (11 years ago)
- Location:
- trunk/src/wp-includes
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/css/media-views.css
r27773 r27797 1463 1463 } 1464 1464 1465 .media-frame .imgedit-wrap table { 1466 width: 100%; 1467 } 1468 1465 1469 .media-frame .imgedit-wrap table td { 1466 1470 vertical-align: top; … … 1514 1518 } 1515 1519 1520 .image-details .media-modal { 1521 left: 140px; 1522 right: 140px; 1523 } 1524 1525 .image-details .media-frame-menu { 1526 display: none; 1527 } 1528 1529 .image-details .media-frame-title, 1530 .image-details .media-frame-content, 1531 .image-details .media-frame-router { 1532 left: 0; 1533 } 1534 1516 1535 .image-details .embed-media-settings { 1517 1536 top: 0; 1518 } 1537 overflow: visible; 1538 } 1539 1540 .image-details .column-settings { 1541 width: 44%; 1542 float: left; 1543 margin-right: 20px; 1544 } 1545 1546 .image-details .column-image { 1547 width: 53%; 1548 float: left; 1549 } 1550 1551 .image-details .column-image:after { 1552 content: ''; 1553 display: table; 1554 clear: both; 1555 } 1556 1557 .image-details .image img { 1558 max-width: 100%; 1559 max-height: 500px; 1560 } 1561 1519 1562 1520 1563 .media-embed .thumbnail { … … 1530 1573 } 1531 1574 1532 .media-embed .edit-attachment {1533 margin-left: 10px;1534 }1535 1536 1575 .media-embed .thumbnail:after { 1537 1576 content: ''; … … 1549 1588 .media-embed .setting { 1550 1589 width: 100%; 1551 margin -top: 10px;1590 margin: 10px 0; 1552 1591 float: left; 1553 1592 display: block; … … 1555 1594 } 1556 1595 1557 .media-embed .setting .hidden { 1596 .image-details .setting { 1597 float: none; 1598 } 1599 1600 .image-details .actions { 1601 margin: 10px 0; 1602 } 1603 1604 .media-embed .setting input[type="text"], 1605 .media-embed .setting textarea { 1606 display: block; 1607 width: 100%; 1608 max-width: 400px; 1609 margin: 1px 0; 1610 } 1611 1612 .image-details .setting input[type="text"], 1613 .image-details .setting textarea { 1614 max-width: inherit; 1615 } 1616 1617 .media-embed .setting input.hidden { 1558 1618 display: none; 1559 1619 } … … 1571 1631 } 1572 1632 1573 .media-embed .setting input[type="text"], 1574 .media-embed .setting textarea { 1575 display: block; 1576 width: 100%; 1577 max-width: 400px; 1578 margin: 1px 0; 1633 .media-embed-sidebar { 1634 position: absolute; 1635 top: 0; 1636 left: 440px; 1637 } 1638 1639 .advanced, 1640 .link-settings { 1641 margin-top: 10px; 1642 } 1643 1644 .advanced .hidden { 1645 display: none; 1579 1646 } 1580 1647 … … 1782 1849 } 1783 1850 1851 .image-details .media-modal { 1852 left: 30px; 1853 right: 30px; 1854 } 1855 1784 1856 .media-selection { 1785 1857 min-width: 120px; … … 1850 1922 } 1851 1923 1924 .image-details .media-frame-title { 1925 display: block; 1926 top: 0; 1927 font-size: 14px; 1928 } 1929 1852 1930 .media-frame-toolbar { 1853 1931 position: absolute; … … 1906 1984 } 1907 1985 1986 .image-details .media-frame.hide-router .media-frame-content { 1987 top: 40px; 1988 } 1989 1908 1990 .media-frame .attachments-browser { 1909 1991 padding-bottom: 300px; … … 1940 2022 1941 2023 /* Full-bleed modal */ 1942 .media-modal { 2024 .media-modal, 2025 .image-details .media-modal { 1943 2026 position: fixed; 1944 2027 top: 0; … … 1974 2057 .embed-media-settings { 1975 2058 padding-bottom: 52px; 2059 } 2060 2061 .image-details .column-settings, 2062 .image-details .column-image { 2063 float: none; 2064 width: 100%; 1976 2065 } 1977 2066 -
trunk/src/wp-includes/js/media-views.js
r27789 r27797 762 762 this.image = options.image; 763 763 media.controller.State.prototype.initialize.apply( this, arguments ); 764 }, 765 766 activate: function() { 767 this.frame.modal.$el.addClass('image-details'); 764 768 } 765 769 }); … … 2623 2627 }, 2624 2628 2625 2626 2629 renderMenu: function( view ) { 2627 2630 var lastState = this.lastState(), … … 2678 2681 2679 2682 renderReplaceImageToolbar: function() { 2683 var frame = this, 2684 lastState = frame.lastState(), 2685 previous = lastState && lastState.id; 2686 2680 2687 this.toolbar.set( new media.view.Toolbar({ 2681 2688 controller: this, 2682 2689 items: { 2690 back: { 2691 text: l10n.back, 2692 priority: 20, 2693 click: function() { 2694 if ( previous ) { 2695 frame.setState( previous ); 2696 } else { 2697 frame.close(); 2698 } 2699 } 2700 }, 2701 2683 2702 replace: { 2684 2703 style: 'primary', … … 5971 5990 template: media.template('image-details'), 5972 5991 events: _.defaults( media.view.Settings.AttachmentDisplay.prototype.events, { 5973 'click .edit-attachment': 'editAttachment' 5992 'click .edit-attachment': 'editAttachment', 5993 'click .replace-attachment': 'replaceAttachment', 5994 'click .show-advanced': 'showAdvanced' 5974 5995 } ), 5975 5996 initialize: function() { … … 5977 5998 this.options.attachment = this.model.attachment; 5978 5999 if ( this.model.attachment ) { 5979 this.listenTo( this.model.attachment, 'change:url', this.updateUrl ); 6000 this.listenTo( this.model, 'change:url', this.updateUrl ); 6001 this.listenTo( this.model, 'change:link', this.toggleLinkSettings ); 5980 6002 } 5981 6003 media.view.Settings.AttachmentDisplay.prototype.initialize.apply( this, arguments ); … … 6002 6024 media.view.Settings.AttachmentDisplay.prototype.render.apply( self, args ); 6003 6025 self.resetFocus(); 6026 self.toggleLinkSettings(); 6004 6027 } ).fail( function() { 6005 6028 self.model.attachment = false; 6006 6029 media.view.Settings.AttachmentDisplay.prototype.render.apply( self, args ); 6007 6030 self.resetFocus(); 6031 self.toggleLinkSettings(); 6008 6032 } ); 6009 6033 } else { 6010 6034 media.view.Settings.AttachmentDisplay.prototype.render.apply( this, arguments ); 6011 6035 setTimeout( function() { self.resetFocus(); }, 10 ); 6036 self.toggleLinkSettings(); 6012 6037 } 6013 6038 … … 6016 6041 6017 6042 resetFocus: function() { 6018 this.$( '. caption textarea' ).focus();6019 this.$( '.embed- image-settings' ).scrollTop( 0 );6043 this.$( '.link-to-custom' ).blur(); 6044 this.$( '.embed-media-settings' ).scrollTop( 0 ); 6020 6045 }, 6021 6046 6022 6047 updateUrl: function() { 6023 this.$( '. thumbnailimg' ).attr( 'src', this.model.get('url' ) );6048 this.$( '.image img' ).attr( 'src', this.model.get('url' ) ); 6024 6049 this.$( '.url' ).val( this.model.get('url' ) ); 6050 }, 6051 6052 toggleLinkSettings: function() { 6053 if ( this.model.get( 'link' ) === 'none' ) { 6054 this.$( '.link-settings' ).addClass('hidden'); 6055 } else { 6056 this.$( '.link-settings' ).removeClass('hidden'); 6057 } 6058 }, 6059 6060 showAdvanced: function( event ) { 6061 event.preventDefault(); 6062 $( event.target ).closest('.advanced') 6063 .find( '.hidden' ).removeClass( 'hidden' ); 6064 $( event.target ).remove(); 6025 6065 }, 6026 6066 … … 6033 6073 this.controller.setState( 'edit-image' ); 6034 6074 } 6075 }, 6076 6077 replaceAttachment: function( event ) { 6078 event.preventDefault(); 6079 this.controller.setState( 'replace-image' ); 6035 6080 } 6036 6081 }); -
trunk/src/wp-includes/js/tinymce/plugins/wpeditimage/plugin.js
r27786 r27797 115 115 116 116 function extractImageData( imageNode ) { 117 var classes, metadata, captionBlock, caption, 117 var classes, metadata, captionBlock, caption, link, 118 118 dom = editor.dom; 119 119 … … 124 124 height: '', 125 125 width: '', 126 size: 'none',126 size: false, 127 127 caption: '', 128 128 alt: '', 129 129 align: 'none', 130 130 link: false, 131 linkUrl: '' 131 linkUrl: '', 132 linkClassName: '', 133 linkTargetBlank: false, 134 linkRel: '', 135 title: '', 136 className: '' 132 137 }; 133 138 134 139 metadata.url = dom.getAttrib( imageNode, 'src' ); 135 140 metadata.alt = dom.getAttrib( imageNode, 'alt' ); 141 metadata.title = dom.getAttrib( imageNode, 'title' ); 136 142 metadata.width = parseInt( dom.getAttrib( imageNode, 'width' ), 10 ); 137 143 metadata.height = parseInt( dom.getAttrib( imageNode, 'height' ), 10 ); 138 139 //TODO: probably should capture attributes on both the <img /> and the <a /> so that they can be restored 140 // when the image and/or caption are updated 141 // maybe use getAttribs() 142 143 // extract meta data from classes (candidate for turning into a method) 144 classes = imageNode.className.split( ' ' ); 144 metadata.className = imageNode.className; 145 146 classes = metadata.className.split( ' ' ); 145 147 tinymce.each( classes, function( name ) { 146 148 … … 158 160 } ); 159 161 160 // extract caption162 // Extract caption 161 163 captionBlock = dom.getParents( imageNode, '.wp-caption' ); 162 164 … … 174 176 if ( caption.length ) { 175 177 caption = caption[0]; 176 // need to do some more thinking about this 178 177 179 metadata.caption = editor.serializer.serialize( caption ) 178 180 .replace( /<br[^>]*>/g, '$&\n' ).replace( /^<p>/, '' ).replace( /<\/p>$/, '' ); … … 180 182 } 181 183 182 // extract linkTo184 // Extract linkTo 183 185 if ( imageNode.parentNode && imageNode.parentNode.nodeName === 'A' ) { 184 metadata.linkUrl = dom.getAttrib( imageNode.parentNode, 'href' ); 186 link = imageNode.parentNode; 187 metadata.linkUrl = dom.getAttrib( link, 'href' ); 188 metadata.linkTargetBlank = dom.getAttrib( link, 'target' ) === '_blank' ? true : false; 189 metadata.linkRel = dom.getAttrib( link, 'rel' ); 190 metadata.linkClassName = link.className; 185 191 } 186 192 … … 224 230 } 225 231 } 226 // uniqueId isn't super exciting, so maybe we want to use something else 232 227 233 uid = editor.dom.uniqueId( 'wp_' ); 228 234 editor.dom.setAttrib( node, 'data-wp-replace-id', uid ); … … 247 253 function createImageAndLink( imageData, mode ) { 248 254 var classes = [], 249 props;255 attrs, linkAttrs; 250 256 251 257 mode = mode ? mode : 'node'; … … 262 268 } 263 269 264 props = {270 attrs = { 265 271 src: imageData.url, 266 272 width: imageData.width, 267 273 height: imageData.height, 268 alt: imageData.alt 274 alt: imageData.alt, 275 title: imageData.title || null 269 276 }; 270 277 271 278 if ( classes.length ) { 272 props['class'] = classes.join( ' ' );279 attrs['class'] = classes.join( ' ' ); 273 280 } 274 281 275 282 if ( imageData.linkUrl ) { 283 284 linkAttrs = { 285 href: imageData.linkUrl 286 }; 287 288 if ( imageData.linkRel ) { 289 linkAttrs.rel = imageData.linkRel; 290 } 291 292 if ( imageData.linkTargetBlank ) { 293 linkAttrs.target = '_blank'; 294 } 295 296 if ( imageData.linkClassName ) { 297 linkAttrs['class'] = imageData.linkClassName; 298 } 299 276 300 if ( mode === 'node' ) { 277 return editor.dom.create( 'a', { href: imageData.linkUrl }, editor.dom.createHTML( 'img', props ) );301 return editor.dom.create( 'a', linkAttrs, editor.dom.createHTML( 'img', attrs ) ); 278 302 } else if ( mode === 'html' ) { 279 return editor.dom.createHTML( 'a', { href: imageData.linkUrl }, editor.dom.createHTML( 'img', props ) ); 280 } 303 return editor.dom.createHTML( 'a', linkAttrs, editor.dom.createHTML( 'img', attrs ) ); 304 } 305 281 306 } else if ( mode === 'node' ) { 282 return editor.dom.create( 'img', props );307 return editor.dom.create( 'img', attrs ); 283 308 } else if ( mode === 'html' ) { 284 return editor.dom.createHTML( 'img', props );309 return editor.dom.createHTML( 'img', attrs ); 285 310 } 286 311 } -
trunk/src/wp-includes/media-template.php
r27796 r27797 639 639 640 640 <script type="text/html" id="tmpl-image-details"> 641 <?php // reusing .media-embed to pick up the styles for now ?>642 641 <div class="media-embed"> 643 642 <div class="embed-media-settings"> 644 <div class="thumbnail"> 645 <img src="{{ data.model.url }}" draggable="false" /> 646 </div> 647 <# if ( data.attachment && window.imageEdit ) { #> 648 <input type="button" class="edit-attachment button" value="<?php esc_attr_e( 'Edit Image' ); ?>" /> 649 <# } #> 650 651 <div class="setting url"> 652 <?php // might want to make the url editable if it isn't an attachment ?> 653 <input type="text" disabled="disabled" value="{{ data.model.url }}" /> 654 </div> 655 656 <?php 657 /** This filter is documented in wp-admin/includes/media.php */ 658 if ( ! apply_filters( 'disable_captions', '' ) ) : ?> 659 <label class="setting caption"> 660 <span><?php _e('Caption'); ?></span> 661 <textarea data-setting="caption">{{ data.model.caption }}</textarea> 643 <div class="column-settings"> 644 <?php 645 /** This filter is documented in wp-admin/includes/media.php */ 646 if ( ! apply_filters( 'disable_captions', '' ) ) : ?> 647 <label class="setting caption"> 648 <span><?php _e('Caption'); ?></span> 649 <textarea data-setting="caption">{{ data.model.caption }}</textarea> 650 </label> 651 <?php endif; ?> 652 653 <label class="setting alt-text"> 654 <span><?php _e('Alternative Text'); ?></span> 655 <input type="text" data-setting="alt" value="{{ data.model.alt }}" /> 662 656 </label> 663 <?php endif; ?> 664 665 <label class="setting alt-text"> 666 <span><?php _e('Alt Text'); ?></span> 667 <input type="text" data-setting="alt" value="{{ data.model.alt }}" /> 668 </label> 669 670 <div class="setting align"> 671 <span><?php _e('Align'); ?></span> 672 <div class="button-group button-large" data-setting="align"> 673 <button class="button" value="left"> 674 <?php esc_attr_e('Left'); ?> 675 </button> 676 <button class="button" value="center"> 677 <?php esc_attr_e('Center'); ?> 678 </button> 679 <button class="button" value="right"> 680 <?php esc_attr_e('Right'); ?> 681 </button> 682 <button class="button active" value="none"> 683 <?php esc_attr_e('None'); ?> 684 </button> 685 </div> 686 </div> 687 <div class="setting link-to"> 688 <span><?php _e('Link To'); ?></span> 689 <div class="button-group button-large" data-setting="link"> 690 <# if ( data.attachment ) { #> 691 <button class="button" value="file"> 692 <?php esc_attr_e('Media File'); ?> 693 </button> 694 <button class="button" value="post"> 695 <?php esc_attr_e('Attachment Page'); ?> 696 </button> 697 <# } else { #> 698 <button class="button" value="file"> 699 <?php esc_attr_e('Image URL'); ?> 700 </button> 701 <# } #> 702 <button class="button" value="custom"> 703 <?php esc_attr_e('Custom URL'); ?> 704 </button> 705 <button class="button active" value="none"> 706 <?php esc_attr_e('None'); ?> 707 </button> 708 </div> 709 <input type="text" class="link-to-custom" data-setting="linkUrl" /> 710 </div> 711 712 <# if ( data.attachment ) { #> 713 <div class="setting size"> 714 <span><?php _e('Size'); ?></span> 715 <div class="button-group button-large" data-setting="size"> 716 <?php 717 /** This filter is documented in wp-admin/includes/media.php */ 718 $sizes = apply_filters( 'image_size_names_choose', array( 719 'thumbnail' => __('Thumbnail'), 720 'medium' => __('Medium'), 721 'large' => __('Large'), 722 'full' => __('Full Size'), 723 ) ); 724 725 foreach ( $sizes as $value => $name ) : ?> 726 <# var size = data.attachment.sizes['<?php echo esc_js( $value ); ?>']; 727 if ( size ) { #> 728 <button class="button" value="<?php echo esc_attr( $value ); ?>"> 729 <?php echo esc_html( $name ); ?> 730 </button> 731 <# } #> 732 <?php endforeach; ?> 657 658 <div class="setting advanced"> 659 <a class="show-advanced" href="#"><?php _e('show advanced'); ?></a> 660 <div class="hidden"> 661 <label class="setting title-text"> 662 <span><?php _e('Title Attribute'); ?></span> 663 <input type="text" data-setting="title" value="{{ data.model.title }}" /> 664 </label> 733 665 </div> 734 666 </div> 735 <# } #> 667 668 <div class="setting align"> 669 <span><?php _e('Align'); ?></span> 670 <div class="button-group button-large" data-setting="align"> 671 <button class="button" value="left"> 672 <?php esc_attr_e('Left'); ?> 673 </button> 674 <button class="button" value="center"> 675 <?php esc_attr_e('Center'); ?> 676 </button> 677 <button class="button" value="right"> 678 <?php esc_attr_e('Right'); ?> 679 </button> 680 <button class="button active" value="none"> 681 <?php esc_attr_e('None'); ?> 682 </button> 683 </div> 684 </div> 685 686 <# if ( data.attachment ) { #> 687 <div class="setting size"> 688 <span><?php _e('Size'); ?></span> 689 <div class="button-group button-large" data-setting="size"> 690 <?php 691 /** This filter is documented in wp-admin/includes/media.php */ 692 $sizes = apply_filters( 'image_size_names_choose', array( 693 'thumbnail' => __('Thumbnail'), 694 'medium' => __('Medium'), 695 'large' => __('Large'), 696 'full' => __('Full Size'), 697 ) ); 698 699 foreach ( $sizes as $value => $name ) : ?> 700 <# var size = data.attachment.sizes['<?php echo esc_js( $value ); ?>']; 701 if ( size ) { #> 702 <button class="button" value="<?php echo esc_attr( $value ); ?>"> 703 <?php echo esc_html( $name ); ?> 704 </button> 705 <# } #> 706 <?php endforeach; ?> 707 </div> 708 </div> 709 <# } #> 710 711 <div class="setting link-to"> 712 <span><?php _e('Link To'); ?></span> 713 <div class="button-group button-large" data-setting="link"> 714 <# if ( data.attachment ) { #> 715 <button class="button" value="file"> 716 <?php esc_attr_e('Media File'); ?> 717 </button> 718 <button class="button" value="post"> 719 <?php esc_attr_e('Attachment Page'); ?> 720 </button> 721 <# } else { #> 722 <button class="button" value="file"> 723 <?php esc_attr_e('Image URL'); ?> 724 </button> 725 <# } #> 726 <button class="button" value="custom"> 727 <?php esc_attr_e('Custom URL'); ?> 728 </button> 729 <button class="button active" value="none"> 730 <?php esc_attr_e('None'); ?> 731 </button> 732 </div> 733 <input type="text" class="link-to-custom" data-setting="linkUrl" /> 734 </div> 735 736 737 <div class="setting link-settings"> 738 <div class="setting link-target"> 739 <label><input type="checkbox" data-setting="linkTargetBlank" value="_blank" <# if ( data.model.linkTargetBlank ) { #>checked="checked"<# } #>><?php _e( 'Open link in a new window/tab' ); ?></label> 740 </div> 741 <div class="advanced"> 742 <a class="show-advanced" href="#"><?php _e('show advanced'); ?></a> 743 <div class="hidden"> 744 <label class="setting link-rel"> 745 <span><?php _e('Link Rel'); ?></span> 746 <input type="text" data-setting="linkRel" value="{{ data.model.linkClassName }}" /> 747 </label> 748 <label class="setting link-class-name"> 749 <span><?php _e('CSS Class'); ?></span> 750 <input type="text" data-setting="linkClassName" value="{{ data.model.linkClassName }}" /> 751 </label> 752 </div> 753 </div> 754 </div> 755 756 </div> 757 <div class="column-image"> 758 <div class="image"> 759 <img src="{{ data.model.url }}" draggable="false" /> 760 </div> 761 <# if ( data.attachment && window.imageEdit ) { #> 762 <div class="actions"> 763 <input type="button" class="edit-attachment button" value="<?php esc_attr_e( 'Edit Original' ); ?>" /> 764 <input type="button" class="replace-attachment button" value="<?php esc_attr_e( 'Replace' ); ?>" /> 765 </div> 766 <# } #> 767 </div> 736 768 </div> 737 769 </div>
Note: See TracChangeset
for help on using the changeset viewer.