true, 'prismjs_loader' => true, 'prismjs_normalize' => true, 'highlight_handler' => true, 'prismjs_line_numbers' => true, 'prismjs_line_highlight' => true, 'prismjs_copy_to_clipboard' => true, ]; if ( ! Plugin::elementor()->preview->is_preview_mode() ) { $settings = $this->get_settings_for_display(); if ( ! $settings['line_numbers'] ) { unset( $depends['prismjs_line_numbers'] ); } if ( ! $settings['highlight_lines'] ) { unset( $depends['prismjs_line_highlight'] ); } if ( ! $settings['copy_to_clipboard'] ) { unset( $depends['prismjs_copy_to_clipboard'] ); } } return array_keys( $depends ); } public function get_css_config() { // This widget is loading its own CSS using get_style_depends. return [ 'key' => $this->get_group_name(), 'version' => ELEMENTOR_PRO_VERSION, 'file_path' => '', 'data' => [], ]; } protected function register_controls() { $this->start_controls_section( 'section_content', [ 'label' => esc_html__( 'Code Highlight', 'elementor-pro' ), ] ); $language_option = [ 'markup' => 'Markup', 'html' => 'HTML', 'css' => 'CSS', 'sass' => 'Sass (Sass)', 'scss' => 'Sass (Scss)', 'less' => 'Less', 'javascript' => 'JavaScript', 'typescript' => 'TypeScript', 'jsx' => 'React JSX', 'tsx' => 'React TSX', 'php' => 'PHP', 'ruby' => 'Ruby', 'json' => 'JSON + Web App Manifest', 'http' => 'HTTP', 'xml' => 'XML', 'svg' => 'SVG', 'rust' => 'Rust', 'csharp' => 'C#', 'dart' => 'Dart', 'git' => 'Git', 'java' => 'Java', 'sql' => 'SQL', 'go' => 'Go', 'kotlin' => 'Kotlin + Kotlin Script', 'julia' => 'Julia', 'python' => 'Python', 'swift' => 'Swift', 'bash' => 'Bash + Shell', 'scala' => 'Scala', 'haskell' => 'Haskell', 'perl' => 'Perl', 'objectivec' => 'Objective-C', 'visual-basic,' => 'Visual Basic + VBA', 'r' => 'R', 'c' => 'C', 'cpp' => 'C++', 'aspnet' => 'ASP.NET (C#)', ]; /** * Code highlight languages. * * Filters the available programming languages in the code highlight. * * By default supports a code list of programming languages. This hook * allows developers to add or remove languages. * * @param array $language_option An array of languages. */ $language_option = apply_filters( 'elementor_pro/code_highlight/languages', $language_option ); $this->add_control( 'language', [ 'label' => esc_html__( 'Language', 'elementor-pro' ), 'type' => Controls_Manager::SELECT2, 'multiple' => false, 'options' => $language_option, 'default' => 'javascript', ] ); $this->add_control( 'code', [ 'label' => esc_html__( 'Code', 'elementor-pro' ), 'type' => Controls_Manager::CODE, 'default' => 'console.log( \'Code is Poetry\' );', 'dynamic' => [ 'active' => true, 'categories' => [ TagsModule::TEXT_CATEGORY, ], ], ] ); $this->add_control( 'line_numbers', [ 'label' => esc_html__( 'Line Numbers', 'elementor-pro' ), 'type' => Controls_Manager::SWITCHER, 'return_value' => 'line-numbers', 'default' => 'line-numbers', ] ); $this->add_control( 'copy_to_clipboard', [ 'label' => esc_html__( 'Copy to Clipboard', 'elementor-pro' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'On', 'elementor-pro' ), 'label_off' => esc_html__( 'Off', 'elementor-pro' ), 'return_value' => 'copy-to-clipboard', 'default' => 'copy-to-clipboard', ] ); $this->add_control( 'highlight_lines', [ 'label' => esc_html__( 'Highlight Lines', 'elementor-pro' ), 'type' => Controls_Manager::TEXT, 'default' => '', 'placeholder' => '1, 3-6', 'dynamic' => [ 'active' => true, ], ] ); $this->add_control( 'word_wrap', [ 'label' => esc_html__( 'Word Wrap', 'elementor-pro' ), 'type' => Controls_Manager::SWITCHER, 'label_on' => esc_html__( 'On', 'elementor-pro' ), 'label_off' => esc_html__( 'Off', 'elementor-pro' ), 'return_value' => 'word-wrap', 'default' => '', ] ); $this->add_control( 'theme', [ 'label' => esc_html__( 'Theme', 'elementor-pro' ), 'type' => Controls_Manager::SELECT, 'default' => 'default', 'options' => [ 'default' => 'Solid', 'dark' => 'Dark', 'okaidia' => 'Okaidia', 'solarizedlight' => 'Solarizedlight', 'tomorrow' => 'Tomorrow', 'twilight' => 'Twilight', ], 'separator' => 'before', ] ); $this->add_responsive_control( 'height', [ 'label' => esc_html__( 'Height', 'elementor-pro' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'vh', 'custom' ], 'range' => [ 'px' => [ 'min' => 115, 'max' => 1000, ], 'em' => [ 'min' => 6, 'max' => 50, ], 'rem' => [ 'min' => 6, 'max' => 50, ], ], 'selectors' => [ '{{WRAPPER}} .highlight-height' => 'height: {{SIZE}}{{UNIT}};', ], ] ); $this->add_responsive_control( 'font_size', [ 'label' => esc_html__( 'Font Size', 'elementor-pro' ), 'type' => Controls_Manager::SLIDER, 'size_units' => [ 'px', 'em', 'rem', 'vw', 'custom' ], 'range' => [ 'px' => [ 'min' => 1, 'max' => 200, ], 'em' => [ 'max' => 20, ], 'rem' => [ 'max' => 20, ], 'vw' => [ 'min' => 0.1, 'max' => 10, 'step' => 0.1, ], ], 'responsive' => true, 'selectors' => [ '{{WRAPPER}} pre, {{WRAPPER}} code, {{WRAPPER}} .line-numbers .line-numbers-rows' => 'font-size: {{SIZE}}{{UNIT}};', ], ] ); $this->end_controls_section(); } protected function render() { $settings = $this->get_settings_for_display(); if ( empty( $settings['code'] ) ) { return; } ?>
print_unescaped_setting( 'code' ); ?>
{{{ settings.code }}}