+ }
+
+ /**
+ * Check whether section is active to current Customizer preview.
+ *
+ * @since 4.1.0
+ * @access public
+ *
+ * @return bool Whether the section is active to the current preview.
+ */
+ final public function active() {
+ $section = $this;
+ $active = call_user_func( $this->active_callback, $this );
+
+ /**
+ * Filter response of {@see WP_Customize_Section::active()}.
+ *
+ * @since 4.1.0
+ *
+ * @param bool $active Whether the Customizer section is active.
+ * @param WP_Customize_Section $section {@see WP_Customize_Section} instance.
+ */
+ $active = apply_filters( 'customize_section_active', $active, $section );
+
+ return $active;
+ }
+
+ /**
+ * Default callback used when invoking {@see WP_Customize_Section::active()}.
+ *
+ * Subclasses can override this with their specific logic, or they may provide
+ * an 'active_callback' argument to the constructor.
+ *
+ * @since 4.1.0
+ * @access public
+ *
+ * @return true Always true.
+ */
+ public function active_callback() {
+ return true;
+ }
+
+ /**
+ * Gather the parameters passed to client JavaScript via JSON.
+ *
+ * @since 4.1.0
+ *
+ * @return array The array to be exported to the client as JSON.
+ */
+ public function json() {
+ $array = wp_array_slice_assoc( (array) $this, array( 'id', 'description', 'priority', 'panel', 'type' ) );
+ $array['title'] = html_entity_decode( $this->title, ENT_QUOTES, get_bloginfo( 'charset' ) );
+ $array['content'] = $this->get_content();
+ $array['active'] = $this->active();
+ $array['instanceNumber'] = $this->instance_number;
+
+ if ( $this->panel ) {
+ /* translators: ▸ is the unicode right-pointing triangle, and %s is the section title in the Customizer */
+ $array['customizeAction'] = sprintf( __( 'Customizing ▸ %s' ), esc_html( $this->manager->get_panel( $this->panel )->title ) );
+ } else {
+ $array['customizeAction'] = __( 'Customizing' );
+ }