Changeset 30309 for trunk/src/wp-includes/class-wp-customize-control.php
- Timestamp:
- 11/11/2014 11:51:48 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/class-wp-customize-control.php
r30214 r30309 638 638 */ 639 639 class WP_Customize_Upload_Control extends WP_Customize_Control { 640 public $type = 'upload'; 641 public $removed = ''; 642 public $context; 643 public $extensions = array(); 640 public $type = 'upload'; 641 public $mime_type = ''; 642 public $button_labels = array(); 643 public $removed = ''; // unused 644 public $context; // unused 645 public $extensions = array(); // unused 646 647 /** 648 * Constructor. 649 * 650 * @since 4.1.0 651 * @uses WP_Customize_Control::__construct() 652 * 653 * @param WP_Customize_Manager $manager 654 */ 655 public function __construct( $manager, $id, $args = array() ) { 656 parent::__construct( $manager, $id, $args ); 657 658 $this->button_labels = array( 659 'select' => __( 'Select File' ), 660 'change' => __( 'Change File' ), 661 'default' => __( 'Default' ), 662 'remove' => __( 'Remove' ), 663 'placeholder' => __( 'No file selected' ), 664 'frame_title' => __( 'Select File' ), 665 'frame_button' => __( 'Choose File' ), 666 ); 667 } 644 668 645 669 /** … … 649 673 */ 650 674 public function enqueue() { 651 wp_enqueue_ script( 'wp-plupload');675 wp_enqueue_media(); 652 676 } 653 677 … … 660 684 public function to_json() { 661 685 parent::to_json(); 662 663 $this->json['removed'] = $this->removed; 664 665 if ( $this->context ) 666 $this->json['context'] = $this->context; 667 668 if ( $this->extensions ) 669 $this->json['extensions'] = implode( ',', $this->extensions ); 670 } 671 672 /** 673 * Render the control's content. 674 * 675 * @since 3.4.0 676 */ 677 public function render_content() { 686 $this->json['mime_type'] = $this->mime_type; 687 $this->json['button_labels'] = $this->button_labels; 688 689 if ( is_object( $this->setting ) ) { 690 if ( $this->setting->default ) { 691 // Fake an attachment model - needs all fields used by template. 692 $type = in_array( substr( $this->setting->default, -3 ), array( 'jpg', 'png', 'gif', 'bmp' ) ) ? 'image' : 'document'; 693 $default_attachment = array( 694 'id' => 1, 695 'url' => $this->setting->default, 696 'type' => $type, 697 'sizes' => array( 698 'full' => array( 'url' => $this->setting->default ), 699 ), 700 'icon' => wp_mime_type_icon( $type ), 701 'title' => basename( $this->setting->default ), 702 ); 703 $this->json['defaultAttachment'] = $default_attachment; 704 } 705 706 // Get the attachment model for the existing file. 707 if ( $this->value() ) { 708 $attachment_id = attachment_url_to_postid( $this->value() ); 709 if ( $attachment_id ) { 710 $this->json['attachment'] = wp_prepare_attachment_for_js( $attachment_id); 711 } 712 } else if ( $this->setting->default ) { 713 // Set the default as the attachment. 714 $this->json['attachment'] = $default_attachment; 715 } 716 } 717 } 718 719 /** 720 * Don't render any content for this control from PHP. 721 * 722 * @see WP_Customize_Upload_Control::content_template() 723 * @since 3.4.0 724 */ 725 public function render_content() {} 726 727 /** 728 * Render a JS template for the content of the upload control. 729 * 730 * @since 4.1.0 731 */ 732 public function content_template() { 678 733 ?> 679 <label> 680 <?php if ( ! empty( $this->label ) ) : ?> 681 <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> 682 <?php endif; 683 if ( ! empty( $this->description ) ) : ?> 684 <span class="description customize-control-description"><?php echo $this->description; ?></span> 685 <?php endif; ?> 686 <div> 687 <a href="#" class="button-secondary upload"><?php _e( 'Upload' ); ?></a> 688 <a href="#" class="remove"><?php _e( 'Remove' ); ?></a> 734 <label for="{{ data.settings.default }}-button"> 735 <# if ( data.label ) { #> 736 <span class="customize-control-title">{{ data.label }}</span> 737 <# } #> 738 <# if ( data.description ) { #> 739 <span class="description customize-control-description">{{ data.description }}</span> 740 <# } #> 741 </label> 742 743 <# // Ensure that the default attachment is used if it exists. 744 if ( _.isEmpty( data.attachment ) && data.defaultAttachment ) { 745 data.attachment = data.defaultAttachment; 746 } 747 748 if ( data.attachment && data.attachment.id ) { #> 749 <div class="attachment-media-view {{ data.attachment.orientation }}"> 750 <div class="thumbnail thumbnail-{{ data.attachment.type }}"> 751 <# if ( 'image' === data.attachment.type && data.attachment.sizes && data.attachment.sizes.medium ) { #> 752 <img class="attachment-thumb" src="{{ data.attachment.sizes.medium.url }}" draggable="false" /> 753 <# } else if ( 'image' === data.attachment.type && data.attachment.sizes && data.attachment.sizes.full ) { #> 754 <img class="attachment-thumb" src="{{ data.attachment.sizes.full.url }}" draggable="false" /> 755 <# } else if ( -1 === jQuery.inArray( data.attachment.type, [ 'audio', 'video' ] ) ) { #> 756 <img class="attachment-thumb type-icon" src="{{ data.attachment.icon }}" class="icon" draggable="false" /> 757 <p class="attachment-title">{{ data.attachment.title }}</p> 758 <# } #> 759 760 <# if ( 'audio' === data.attachment.type ) { #> 761 <div class="wp-media-wrapper"> 762 <p class="attachment-title">{{ data.attachment.title }}</p> 763 <audio style="visibility: hidden" controls class="wp-audio-shortcode" width="100%" preload="none"> 764 <source type="{{ data.attachment.mime }}" src="{{ data.attachment.url }}"/> 765 </audio> 766 </div> 767 <# } else if ( 'video' === data.attachment.type ) { 768 var w_rule = h_rule = ''; 769 if ( data.attachment.width ) { 770 w_rule = 'width: ' + data.attachment.width + 'px;'; 771 } else if ( wp.media.view.settings.contentWidth ) { 772 w_rule = 'width: ' + wp.media.view.settings.contentWidth + 'px;'; 773 } 774 if ( data.attachment.height ) { 775 h_rule = 'height: ' + data.attachment.height + 'px;'; 776 } 777 #> 778 <div style="{{ w_rule }}{{ h_rule }}" class="wp-media-wrapper wp-video"> 779 <video controls="controls" class="wp-video-shortcode" preload="metadata" 780 <# if ( data.attachment.width ) { #>width="{{ data.attachment.width }}"<# } #> 781 <# if ( data.attachment.height ) { #>height="{{ data.attachment.height }}"<# } #> 782 <# if ( data.attachment.image && data.attachment.image.src !== data.attachment.icon ) { #>poster="{{ data.attachment.image.src }}"<# } #>> 783 <source type="{{ data.attachment.mime }}" src="{{ data.attachment.url }}"/> 784 </video> 785 </div> 786 <# } #> 787 </div> 689 788 </div> 690 </label> 789 <a class="button upload-button" id="{{ data.settings.default }}-button" href="#"><?php echo $this->button_labels['change']; ?></a> 790 <# if ( data.defaultAttachment && data.defaultAttachment.id !== data.attachment.id ) { #> 791 <a class="default-button remove-button" href="#"><?php echo $this->button_labels['default']; ?></a> 792 <# } else { #> 793 <a class="remove-button" href="#"><?php echo $this->button_labels['remove']; ?></a> 794 <# } #> 795 <# } else { #> 796 <p class="placeholder-text"><?php echo $this->button_labels['placeholder']; ?></p> 797 <a class="button upload-button" id="{{ data.settings.default }}-button" href="#"><?php echo $this->button_labels['select']; ?></a> 798 <# if ( ! data.defaultAttachment ) { #> 799 <a class="default-button remove-button" href="#"><?php echo $this->button_labels['default']; ?></a> 800 <# } #> 801 <# } #> 691 802 <?php 692 803 } … … 702 813 class WP_Customize_Image_Control extends WP_Customize_Upload_Control { 703 814 public $type = 'image'; 704 public $get_url; 705 public $statuses; 706 public $extensions = array( 'jpg', 'jpeg', 'gif', 'png' ); 707 708 protected $tabs = array(); 815 public $mime_type = 'image'; 709 816 710 817 /** … … 715 822 * 716 823 * @param WP_Customize_Manager $manager 717 * @param string $id 718 * @param array $args 719 */ 720 public function __construct( $manager, $id, $args ) { 721 $this->statuses = array( '' => __('No Image') ); 722 824 */ 825 public function __construct( $manager, $id, $args = array() ) { 723 826 parent::__construct( $manager, $id, $args ); 724 827 725 $this-> add_tab( 'upload-new', __('Upload New'), array( $this, 'tab_upload_new' ) );726 $this->add_tab( 'uploaded', __('Uploaded'), array( $this, 'tab_uploaded' ) );727 728 // Early priority to occur before $this->manager->prepare_controls();729 add_action( 'customize_controls_init', array( $this, 'prepare_control' ), 5 );730 }731 732 /**733 * Prepares the control.734 *735 * If no tabs exist, removes the control from the manager. 736 *828 $this->button_labels = array( 829 'select' => __( 'Select Image' ), 830 'change' => __( 'Change Image' ), 831 'remove' => __( 'Remove' ), 832 'default' => __( 'Default' ), 833 'placeholder' => __( 'No image selected' ), 834 'frame_title' => __( 'Select Image' ), 835 'frame_button' => __( 'Choose Image' ), 836 ); 837 } 838 839 /** 737 840 * @since 3.4.2 738 */ 739 public function prepare_control() { 740 if ( ! $this->tabs ) 741 $this->manager->remove_control( $this->id ); 742 } 743 744 /** 745 * Refresh the parameters passed to the JavaScript via JSON. 746 * 747 * @since 3.4.0 748 * @uses WP_Customize_Upload_Control::to_json() 749 */ 750 public function to_json() { 751 parent::to_json(); 752 $this->json['statuses'] = $this->statuses; 753 } 754 755 /** 756 * Render the control's content. 757 * 758 * @since 3.4.0 759 */ 760 public function render_content() { 761 $src = $this->value(); 762 if ( isset( $this->get_url ) ) 763 $src = call_user_func( $this->get_url, $src ); 764 765 ?> 766 <div class="customize-image-picker"> 767 <?php if ( ! empty( $this->label ) ) : ?> 768 <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span> 769 <?php endif; 770 if ( ! empty( $this->description ) ) : ?> 771 <span class="description customize-control-description"><?php echo $this->description; ?></span> 772 <?php endif; ?> 773 774 <div class="customize-control-content"> 775 <div class="dropdown preview-thumbnail" tabindex="0"> 776 <div class="dropdown-content"> 777 <?php if ( empty( $src ) ): ?> 778 <img style="display:none;" /> 779 <?php else: ?> 780 <img src="<?php echo esc_url( set_url_scheme( $src ) ); ?>" /> 781 <?php endif; ?> 782 <div class="dropdown-status"></div> 783 </div> 784 <div class="dropdown-arrow"></div> 785 </div> 786 </div> 787 788 <div class="library"> 789 <ul> 790 <?php foreach ( $this->tabs as $id => $tab ): ?> 791 <li data-customize-tab='<?php echo esc_attr( $id ); ?>' tabindex='0'> 792 <?php echo esc_html( $tab['label'] ); ?> 793 </li> 794 <?php endforeach; ?> 795 </ul> 796 <?php foreach ( $this->tabs as $id => $tab ): ?> 797 <div class="library-content" data-customize-tab='<?php echo esc_attr( $id ); ?>'> 798 <?php call_user_func( $tab['callback'] ); ?> 799 </div> 800 <?php endforeach; ?> 801 </div> 802 803 <div class="actions"> 804 <a href="#" class="remove"><?php _e( 'Remove Image' ); ?></a> 805 </div> 806 </div> 807 <?php 808 } 809 810 /** 811 * Add a tab to the control. 812 * 813 * @since 3.4.0 841 * @deprecated 4.1.0 842 */ 843 public function prepare_control() {} 844 845 /** 846 * @since 3.4.0 847 * @deprecated 4.1.0 814 848 * 815 849 * @param string $id … … 817 851 * @param mixed $callback 818 852 */ 819 public function add_tab( $id, $label, $callback ) { 820 $this->tabs[ $id ] = array( 821 'label' => $label, 822 'callback' => $callback, 823 ); 824 } 825 826 /** 827 * Remove a tab from the control. 828 * 829 * @since 3.4.0 853 public function add_tab( $id, $label, $callback ) {} 854 855 /** 856 * @since 3.4.0 857 * @deprecated 4.1.0 830 858 * 831 859 * @param string $id 832 860 */ 833 public function remove_tab( $id ) { 834 unset( $this->tabs[ $id ] ); 835 } 836 837 /** 838 * @since 3.4.0 839 */ 840 public function tab_upload_new() { 841 if ( ! _device_can_upload() ) { 842 echo '<p>' . sprintf( __('The web browser on your device cannot be used to upload files. You may be able to use the <a href="%s">native app for your device</a> instead.'), 'https://apps.wordpress.org/' ) . '</p>'; 843 } else { 844 ?> 845 <div class="upload-dropzone"> 846 <?php _e('Drop a file here or <a href="#" class="upload">select a file</a>.'); ?> 847 </div> 848 <div class="upload-fallback"> 849 <span class="button-secondary"><?php _e('Select File'); ?></span> 850 </div> 851 <?php 852 } 853 } 854 855 /** 856 * @since 3.4.0 857 */ 858 public function tab_uploaded() { 859 ?> 860 <div class="uploaded-target"></div> 861 <?php 862 } 863 864 /** 865 * @since 3.4.0 861 public function remove_tab( $id ) {} 862 863 /** 864 * @since 3.4.0 865 * @deprecated 4.1.0 866 866 * 867 867 * @param string $url 868 868 * @param string $thumbnail_url 869 869 */ 870 public function print_tab_image( $url, $thumbnail_url = null ) { 871 $url = set_url_scheme( $url ); 872 $thumbnail_url = ( $thumbnail_url ) ? set_url_scheme( $thumbnail_url ) : $url; 873 ?> 874 <a href="#" class="thumbnail" data-customize-image-value="<?php echo esc_url( $url ); ?>"> 875 <img src="<?php echo esc_url( $thumbnail_url ); ?>" /> 876 </a> 877 <?php 878 } 870 public function print_tab_image( $url, $thumbnail_url = null ) {} 879 871 } 880 872 … … 900 892 'label' => __( 'Background Image' ), 901 893 'section' => 'background_image', 902 'context' => 'custom-background',903 'get_url' => 'get_background_image',904 894 ) ); 905 906 if ( $this->setting->default )907 $this->add_tab( 'default', __('Default'), array( $this, 'tab_default_background' ) );908 }909 910 /**911 * @since 3.4.0912 */913 public function tab_uploaded() {914 $backgrounds = get_posts( array(915 'post_type' => 'attachment',916 'meta_key' => '_wp_attachment_is_custom_background',917 'meta_value' => $this->manager->get_stylesheet(),918 'orderby' => 'none',919 'nopaging' => true,920 ) );921 922 ?><div class="uploaded-target"></div><?php923 924 if ( empty( $backgrounds ) )925 return;926 927 foreach ( (array) $backgrounds as $background )928 $this->print_tab_image( esc_url_raw( $background->guid ) );929 }930 931 /**932 * @since 3.4.0933 * @uses WP_Customize_Image_Control::print_tab_image()934 */935 public function tab_default_background() {936 $this->print_tab_image( $this->setting->default );937 895 } 938 896 }
Note: See TracChangeset
for help on using the changeset viewer.