Modificado wp.media.view.Settings.Gallery no Backbone JS, mas a edição não funciona

9

Eu adicionei ao pop-up normal da galeria WordPress (ao clicar em "Adicionar mídia" no editor do WordPress), para permitir que meu tipo de galeria personalizado seja selecionado (o que interage com / usa o shortcode da galeria principal do WordPress).

Eu posso selecionar meus tipos de galeria personalizados (eu tenho dois) ou "Nativo" (que é a galeria normal do WordPress).

Atualmente, tudo funciona como planejado para a criação de uma galeria (se um tipo de galeria não nativo for escolhido, o tipo de galeria será adicionado ao código de acesso enviado ao editor, além de algumas outras opções que o meu não usa a galeria nativa).

No entanto, a questão é que, ao querer editar uma galeria que já criei, o menu suspenso que usaria para selecionar o tipo de galeria (nativo ou personalizado) 'congela' - ou seja, clicar nela revela todas as opções , mas selecionar uma opção diferente da originalmente escolhida não faz nada, e ela volta para a opção original.

Aqui está o meu código abaixo:

 <script type="text/html" id="tmpl-mygallery-gallery-type">
<label class="setting">
  <span><?php _e('Gallery type'); ?></span>
  <select data-setting="gallerytype">
    <option value="native" <# if ( 'native' == wp.media.gallery.defaults.gallerytype ) { #>selected="selected"<# } #>> WordPress Native </option>
    <option value="mygallery_slide" <# if ( 'mygallery_slide' == wp.media.gallery.defaults.gallerytype ) { #>selected="selected"<# } #>> On-page slide </option>        
    <option value="mygallery_fade" <# if ( 'mygallery_fade' == wp.media.gallery.defaults.gallerytype ) { #>selected="selected"<# } #>> On-page fade </option>       
  </select>
</label>
<label class="setting" style="display: none;">
    <input data-setting="slidenumbers" value="<?php echo $this->mygallery_saved_settings['numslides']; ?>" type="hidden" />
</label>
</script>
 <script type="text/javascript">
jQuery(document).ready(function() {

    var mygallery_options = {
        slidenumbers: '<?php echo $this->mygallery_saved_settings['numslides']; ?>',
        slidespeed: '<?php echo $this->mygallery_saved_settings['thespeed']; ?>',
        slidetitles: '<?php echo $this->mygallery_saved_settings['thetitles']; ?>',
        slidesize: '<?php echo $this->mygallery_saved_settings['thesize']; ?>',
    };
    var the_defaults = {
        gallerytype: 'native'
    };

    jQuery.extend(the_defaults, mygallery_options);
    _.extend(wp.media.gallery, {
        defaults: the_defaults,
        setDefaults: function(attrs) {
            var self = this;
            // Remove default attributes from the shortcode, unless DeLight
            _.each(this.defaults, function(value, key) {
                attrs[key] = self.coerce(attrs, key);
                if (value === attrs[key]) {
                    delete attrs[key];
                }
            });
            if ('gallerytype' in attrs) {
                jQuery.extend(attrs, mygallery_options);
            }
            return attrs;
        },
    });

    //Extend media gallery
    wp.media.view.Settings.Gallery = wp.media.view.Settings.Gallery.extend({
        events: function(args) {

            var the_events = {};

            //NEED TO GET STATE (ie, 'creating gallery for first time' rather than 'edit gallery'....
            var is_create_gallery = true;

            //IF WE'RE EDITING, SET IT TO FALSE
            //if(editing??) > is_create_gallery = false;

            if (is_create_gallery) {
                _.extend( the_events, { 'change select[data-setting="gallerytype"]' : 'gallerytypechanged' } );
            }

            return the_events;
        },
        gallerytypechanged: function( e ){
            e.preventDefault();

            var self = this;

            var gallery_type = jQuery( e.currentTarget ).val();

            if( gallery_type != 'native' ){

                var parent_container = jQuery(self.$el);

                var gallery_size = jQuery(parent_container).find('select[data-setting="size"]');
                var gallery_link = jQuery(parent_container).find('select[data-setting="link"]');

                //Set vars for DeLight selection
                jQuery( gallery_size ).val('thumbnail');
                jQuery( gallery_link ).val('none');

                //Update vars so the editor thinks they were clicked
                self.update.apply( self, ['size'] );
                self.update.apply( self, ['link'] );
                self.update.apply( self, ['gallerytype'] );
                self.update.apply( self, ['slidenumbers'] );
                self.update.apply( self, ['slidespeed'] );
                self.update.apply( self, ['slidetitles'] );
                self.update.apply( self, ['slidesize'] );
            }

            return self;
        },
        template: function(view) {
            return wp.media.template('gallery-settings')(view) + wp.media.template('mygallery-gallery-type')(view);
        },
    });
});
</script>

Qualquer sugestão sobre como corrigir este comportamento seria muito apreciada!

Quando eu comento a linha 'self.update.apply (self, [' gallerytype ']);' , funciona ao editar, mas ao criar do zero, não envia minhas configurações personalizadas para o shortcode no editor. Quando eu deixo a linha, o Create funciona, mas o comportamento do dropdown de voltar para o valor original ocorre.

Obrigado!

    
por Lloyd Jones 16.07.2015 / 21:51

0 respostas