<?php if ( ! defined( 'ABSPATH' ) ) { die; } // Cannot access directly.
/**
 *
 * Field: code_editor
 *
 * @since 1.0.0
 * @version 1.0.0
 *
 */
if ( ! class_exists( 'WPAS_Field_code_editor' ) ) {
  class WPAS_Field_code_editor extends WPAS_Fields {

    public $version = '5.62.2';
    // Note: CodeMirror files should be placed in assets/codemirror/ folder locally
    // or use WordPress core code editor
    // Source: https://github.com/codemirror/codemirror5 (MIT License)

    public function __construct( $field, $value = '', $unique = '', $where = '', $parent = '' ) {
      parent::__construct( $field, $value, $unique, $where, $parent );
    }

    public function render() {

      $codemirror_base = WPAS::include_plugin_url( 'assets/codemirror/' );
      
      $default_settings = array(
        'tabSize'       => 2,
        'lineNumbers'   => true,
        'theme'         => 'default',
        'mode'          => 'htmlmixed',
        'cdnURL'        => $codemirror_base,
      );

      $settings = ( ! empty( $this->field['settings'] ) ) ? $this->field['settings'] : array();
      $settings = wp_parse_args( $settings, $default_settings );

      echo $this->field_before();
      echo '<textarea name="'. esc_attr( $this->field_name() ) .'"'. $this->field_attributes() .' data-editor="'. esc_attr( wp_json_encode( $settings ) ) .'">'. $this->value .'</textarea>';
      echo $this->field_after();

    }

    public function enqueue() {

      $page = ( ! empty( $_GET[ 'page' ] ) ) ? sanitize_text_field( wp_unslash( $_GET[ 'page' ] ) ) : '';

      // Do not loads CodeMirror in revslider page.
      if ( in_array( $page, array( 'revslider' ) ) ) { return; }

      $codemirror_base = WPAS::include_plugin_url( 'assets/codemirror/' );

      if ( ! wp_script_is( 'wpas-codemirror' ) ) {
        wp_enqueue_script( 'wpas-codemirror', esc_url( $codemirror_base . 'lib/codemirror.min.js' ), array( 'wpas' ), $this->version, true );
        wp_enqueue_script( 'wpas-codemirror-loadmode', esc_url( $codemirror_base . 'addon/mode/loadmode.min.js' ), array( 'wpas-codemirror' ), $this->version, true );
      }

      if ( ! wp_style_is( 'wpas-codemirror' ) ) {
        wp_enqueue_style( 'wpas-codemirror', esc_url( $codemirror_base . 'lib/codemirror.min.css' ), array(), $this->version );
      }

    }

  }
}
