64 lines
5.4 KiB
JavaScript
Executable File
64 lines
5.4 KiB
JavaScript
Executable File
! ( function( $ ) {
|
|
'use strict';wp.customize.controlConstructor['hester-widget'] = wp.customize.Control.extend({ready: function() {
|
|
var control = this;control.widget_count = control.container.find( '.widget' ).length, control.setupSortable(), control.container.on( 'click', '.hester-widget-container .widget-top', ( function() {
|
|
$( this ).closest( '.widget' ).toggleClass( 'hester-expanded' ).find( '.widget-inside' ).slideToggle( 200 );
|
|
}) ), control.container.on( 'click', '.hester-widget-container .widget-control-close', ( function() {
|
|
$( this ).closest( '.widget' ).toggleClass( 'hester-expanded' ).find( '.widget-inside' ).slideToggle( 200 );
|
|
}) ), control.container.on( 'click', '.hester-add-widget', ( function( e ) {
|
|
e.preventDefault(), control.updateList();
|
|
}) ), control.container.on( 'change paste keyup', 'input, textarea, select', ( function( e ) {
|
|
control.update();
|
|
}) ), control.container.on( 'click', '.widget-control-remove', ( function() {
|
|
$( this ).closest( '.widget' ).remove(), control.update(), control.updateList();
|
|
}) ), control.container.on( 'click', '.hester-widget-edit-nav', ( function() {
|
|
wp.customize.control( 'nav_menu_locations[' + $( this ).closest( '.hester-widget-nav-container' ).data( 'menu-location' ) + ']' ).focus(), control.close();
|
|
}) ), wp.customize.previewer.bind( 'url', this.close ), $( control.container ).find( '.hester-widget-nav-container' ).each( ( function() {
|
|
var $this = $( this );control.bindMenuLocation( $this );
|
|
}) );
|
|
}, bindMenuLocation: function( $container ) {
|
|
var menu_location = $container.data( 'menu-location' );wp.customize( 'nav_menu_locations[' + menu_location + ']', ( function( value ) {
|
|
value.bind( ( function( newval ) {
|
|
if ( newval ) {
|
|
var menu_name = wp.customize.control( 'nav_menu_locations[' + menu_location + ']' ).container.find( 'option:selected' ).html();$container.addClass( 'hester-widget-nav-has-menu' ).find( '.hester-widget-nav-name' ).html( menu_name );
|
|
} else {
|
|
$container.removeClass( 'hester-widget-nav-has-menu' );
|
|
}
|
|
}) );
|
|
}) );
|
|
}, updateList: function() {
|
|
var widget,
|
|
self = this,
|
|
widgets = self.params.widgets;widgets ? ( $( '#hester-available-widgets-list .hester-widget' ).hide().removeClass( 'disabled' ), $.each( widgets, ( function( index, el ) {
|
|
( widget = $( '#hester-available-widgets-list #hester-widget-tpl-hester_customizer_widget_' + index ) ).show(), el.hasOwnProperty( 'max_uses' ) && 0 < el.max_uses && el.max_uses <= $( self.container ).find( '.hester-widget-container [data-widget-type="' + index + '"]' ).length && widget.addClass( 'disabled' );
|
|
}) ) ) : $( '#hester-available-widgets-list .hester-widget' ).show();
|
|
}, addWidget: function( widget_id_base ) {
|
|
var widget_html, widget_uuid;widget_uuid = this.setting.id + '-' + this.widget_count, widget_html = ( widget_html = $.trim( $( this.container ).find( '.hester-widget-tpl-' + widget_id_base ).html() ) ).replace( /<[^<>]+>/g, ( function( m ) {
|
|
return m.replace( /__i__|%i%/g, widget_uuid );
|
|
}) );var $widget = $( widget_html ).appendTo( this.container.find( '.hester-widget-container' ) );this.widget_count++, $widget.find( '.widget-top' ).trigger( 'click' ), this.update(), $widget.find( '.hester-widget-nav-container' ).length && this.bindMenuLocation( $widget.find( '.hester-widget-nav-container' ) );
|
|
}, close: function() {
|
|
$( 'body' ).removeClass( 'hester-adding-widget' );
|
|
}, update: function() {
|
|
var inputs, widgetobj, option, checked, $widget,
|
|
widgets = this.container.find( '.hester-widget-container .widget' ),
|
|
new_value = [];widgets.length ? ( _.each( widgets, ( function( widget ) {
|
|
$widget = $( widget ), ( widgetobj = {}).classname = $widget.data( 'widget-base' ), widgetobj.type = $widget.data( 'widget-type' ), widgetobj.values = {}, inputs = $widget.find( 'input, textarea, select' ), _.each( inputs, ( function( input ) {
|
|
void 0 !== ( option = $( input ).attr( 'data-option-name' ) ) && ! 1 !== option && ( widgetobj.values[$( input ).attr( 'data-option-name' )] = $( input ).val() );
|
|
}) ), _.each( $widget.find( '.buttonset' ), ( function( buttonset ) {
|
|
void 0 !== ( checked = $( buttonset ).find( 'input[type="radio"]:checked' ) ) && ! 1 !== checked && ( widgetobj.values[checked.data( 'option-name' )] = checked.val() );
|
|
}) ), new_value.push( widgetobj );
|
|
}) ), this.setting.set( new_value ) ) : this.setting.set( ! 1 );
|
|
}, setupSortable: function() {
|
|
var self = this;$( this.container ).find( '.hester-widget-container' ).sortable({items: '> .widget', handle: '.widget-top', intersect: 'pointer', axis: 'y', update: function() {
|
|
self.update();
|
|
}});
|
|
}}), $( document ).ready( ( function() {
|
|
var control;$( '.wp-full-overlay' ).on( 'click', '.hester-add-widget, .hester-close-widgets-panel', ( function( e ) {
|
|
e.preventDefault(), $( 'body' ).toggleClass( 'hester-adding-widget' ), $( this ).data( 'location-title' ) && ( control = wp.customize.control( $( this ).data( 'control' ) ), $( '#hester-available-widgets' ).attr( 'data-control', control.params.id ).find( '.hester-widget-caption' ).find( 'h3' ).html( $( this ).data( 'location-title' ) ) );
|
|
}) ), $( '.wp-full-overlay' ).on( 'click', '.customize-section-back', ( function( e ) {
|
|
$( 'body' ).removeClass( 'hester-adding-widget' ), $( '#hester-available-widgets' ).removeAttr( 'data-control' );
|
|
}) ), $( '#hester-available-widgets' ).on( 'click', '.hester-widget', ( function( e ) {
|
|
control = wp.customize.control( $( '#hester-available-widgets' ).attr( 'data-control' ) );var widget_id = $( this ).data( 'widget-id' );control.addWidget( widget_id );control.close();
|
|
}) );
|
|
}) );
|
|
}( jQuery ) );
|