summaryrefslogtreecommitdiff
path: root/assets/js/unminified/extend-customizer.js
diff options
context:
space:
mode:
Diffstat (limited to 'assets/js/unminified/extend-customizer.js')
-rw-r--r--assets/js/unminified/extend-customizer.js349
1 files changed, 349 insertions, 0 deletions
diff --git a/assets/js/unminified/extend-customizer.js b/assets/js/unminified/extend-customizer.js
new file mode 100644
index 0000000..e82d516
--- /dev/null
+++ b/assets/js/unminified/extend-customizer.js
@@ -0,0 +1,349 @@
+/**
+ * Extend Customizer Panel
+ *
+ * @package Astra
+ */
+
+( function( $ ) {
+
+ var api = wp.customize;
+
+ api.bind( 'pane-contents-reflowed', function() {
+
+ // Reflow sections
+ var sections = [];
+
+ api.section.each( function( section ) {
+
+ if (
+ 'ast_section' !== section.params.type ||
+ 'undefined' === typeof section.params.section
+ ) {
+
+ return;
+
+ }
+
+ sections.push( section );
+
+ });
+
+ sections.sort( api.utils.prioritySort ).reverse();
+
+ $.each( sections, function( i, section ) {
+
+ var parentContainer = $( '#sub-accordion-section-' + section.params.section );
+
+ parentContainer.children( '.section-meta' ).after( section.headContainer );
+
+ });
+
+ // Reflow panels
+ var panels = [];
+
+ api.panel.each( function( panel ) {
+
+ if (
+ 'ast_panel' !== panel.params.type ||
+ 'undefined' === typeof panel.params.panel
+ ) {
+
+ return;
+
+ }
+
+ panels.push( panel );
+
+ });
+
+ panels.sort( api.utils.prioritySort ).reverse();
+
+ $.each( panels, function( i, panel ) {
+
+ var parentContainer = $( '#sub-accordion-panel-' + panel.params.panel );
+
+ parentContainer.children( '.panel-meta' ).after( panel.headContainer );
+
+ });
+
+ });
+
+
+ // Extend Panel
+ var _panelEmbed = wp.customize.Panel.prototype.embed;
+ var _panelIsContextuallyActive = wp.customize.Panel.prototype.isContextuallyActive;
+ var _panelAttachEvents = wp.customize.Panel.prototype.attachEvents;
+
+ wp.customize.Panel = wp.customize.Panel.extend({
+ attachEvents: function() {
+
+ if (
+ 'ast_panel' !== this.params.type ||
+ 'undefined' === typeof this.params.panel
+ ) {
+
+ _panelAttachEvents.call( this );
+
+ return;
+
+ }
+
+ _panelAttachEvents.call( this );
+
+ var panel = this;
+
+ panel.expanded.bind( function( expanded ) {
+
+ var parent = api.panel( panel.params.panel );
+
+ if ( expanded ) {
+
+ parent.contentContainer.addClass( 'current-panel-parent' );
+
+ } else {
+
+ parent.contentContainer.removeClass( 'current-panel-parent' );
+
+ }
+
+ });
+
+ panel.container.find( '.customize-panel-back' )
+ .off( 'click keydown' )
+ .on( 'click keydown', function( event ) {
+
+ if ( api.utils.isKeydownButNotEnterEvent( event ) ) {
+
+ return;
+
+ }
+
+ event.preventDefault(); // Keep this AFTER the key filter above
+
+ if ( panel.expanded() ) {
+
+ api.panel( panel.params.panel ).expand();
+
+ }
+
+ });
+
+ },
+ embed: function() {
+
+ if (
+ 'ast_panel' !== this.params.type ||
+ 'undefined' === typeof this.params.panel
+ ) {
+
+ _panelEmbed.call( this );
+
+ return;
+
+ }
+
+ _panelEmbed.call( this );
+
+ var panel = this;
+ var parentContainer = $( '#sub-accordion-panel-' + this.params.panel );
+
+ parentContainer.append( panel.headContainer );
+
+ },
+ isContextuallyActive: function() {
+
+ if (
+ 'ast_panel' !== this.params.type
+ ) {
+
+ return _panelIsContextuallyActive.call( this );
+
+ }
+
+ var panel = this;
+ var children = this._children( 'panel', 'section' );
+
+ api.panel.each( function( child ) {
+
+ if ( ! child.params.panel ) {
+
+ return;
+
+ }
+
+ if ( child.params.panel !== panel.id ) {
+
+ return;
+
+ }
+
+ children.push( child );
+
+ });
+
+ children.sort( api.utils.prioritySort );
+
+ var activeCount = 0;
+
+ _( children ).each( function ( child ) {
+
+ if ( child.active() && child.isContextuallyActive() ) {
+
+ activeCount += 1;
+
+ }
+
+ });
+
+ return ( activeCount !== 0 );
+
+ }
+
+ });
+
+
+ // Extend Section
+ var _sectionEmbed = wp.customize.Section.prototype.embed;
+ var _sectionIsContextuallyActive = wp.customize.Section.prototype.isContextuallyActive;
+ var _sectionAttachEvents = wp.customize.Section.prototype.attachEvents;
+
+ wp.customize.Section = wp.customize.Section.extend({
+ attachEvents: function() {
+
+ if (
+ 'ast_section' !== this.params.type ||
+ 'undefined' === typeof this.params.section
+ ) {
+
+ _sectionAttachEvents.call( this );
+
+ return;
+
+ }
+
+ _sectionAttachEvents.call( this );
+
+ var section = this;
+
+ section.expanded.bind( function( expanded ) {
+
+ var parent = api.section( section.params.section );
+
+ if ( expanded ) {
+
+ parent.contentContainer.addClass( 'current-section-parent' );
+
+ } else {
+
+ parent.contentContainer.removeClass( 'current-section-parent' );
+
+ }
+
+ });
+
+ section.container.find( '.customize-section-back' )
+ .off( 'click keydown' )
+ .on( 'click keydown', function( event ) {
+
+ if ( api.utils.isKeydownButNotEnterEvent( event ) ) {
+
+ return;
+
+ }
+
+ event.preventDefault(); // Keep this AFTER the key filter above
+
+ if ( section.expanded() ) {
+
+ api.section( section.params.section ).expand();
+
+ }
+
+ });
+
+ },
+ embed: function() {
+
+ if (
+ 'ast_section' !== this.params.type ||
+ 'undefined' === typeof this.params.section
+ ) {
+
+ _sectionEmbed.call( this );
+
+ return;
+
+ }
+
+ _sectionEmbed.call( this );
+
+ var section = this;
+ var parentContainer = $( '#sub-accordion-section-' + this.params.section );
+
+ parentContainer.append( section.headContainer );
+
+ },
+ isContextuallyActive: function() {
+
+ if (
+ 'ast_section' !== this.params.type
+ ) {
+
+ return _sectionIsContextuallyActive.call( this );
+
+ }
+
+ var section = this;
+ var children = this._children( 'section', 'control' );
+
+ api.section.each( function( child ) {
+
+ if ( ! child.params.section ) {
+
+ return;
+
+ }
+
+ if ( child.params.section !== section.id ) {
+
+ return;
+
+ }
+
+ children.push( child );
+
+ });
+
+ children.sort( api.utils.prioritySort );
+
+ var activeCount = 0;
+
+ _( children ).each( function ( child ) {
+
+ if ( 'undefined' !== typeof child.isContextuallyActive ) {
+
+ if ( child.active() && child.isContextuallyActive() ) {
+
+ activeCount += 1;
+
+ }
+
+ } else {
+
+ if ( child.active() ) {
+
+ activeCount += 1;
+
+ }
+
+ }
+
+ });
+
+ return ( activeCount !== 0 );
+
+ }
+
+ });
+
+})( jQuery ); \ No newline at end of file