Your IP : 216.73.216.123


Current Path : /home/smartbloks/.trash/docly-core/widgets/
Upload File :
Current File : /home/smartbloks/.trash/docly-core/widgets/Code.php

<?php
namespace DoclyCore\Widgets;

use Elementor\Core\Kits\Documents\Tabs\Global_Typography;
use Elementor\Group_Control_Border;
use Elementor\Group_Control_Box_Shadow;
use Elementor\Widget_Base;
use Elementor\Controls_Manager;
use Elementor\Scheme_Color;
use Elementor\Scheme_Typography;
use Elementor\Group_Control_Typography;

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly.
}

class Code extends Widget_Base {

    public function get_name() {
        return 'docly_code_syntax_highlighter';
    }

    public function get_title() {
        return __( 'Code Syntax Highlighter', 'docly-core' );
    }

    public function get_icon() {
        return 'eicon-editor-code';
    }

    public function get_categories() {
        return [ 'docly-elements' ];
    }

    public function get_keywords() {
        return [ 'code', 'syntax', 'highlighter', 'source code' ];
    }

    public function get_style_depends() {
        return ['prism'];
    }

    public function get_script_depends() {
        return ['prism'];
    }

    public function lng_type() {
        return [
            'markup' => __('HTML Markup', 'docly-core'),
            'css' => __('CSS', 'docly-core'),
            'clike' => __('Clike', 'docly-core'),
            'javascript' => __('JavaScript', 'docly-core'),
            'abap' => __('ABAP', 'docly-core'),
            'abnf' => __('Augmented Backus–Naur form', 'docly-core'),
            'actionscript' => __('ActionScript', 'docly-core'),
            'ada' => __('Ada', 'docly-core'),
            'apacheconf' => __('Apache Configuration', 'docly-core'),
            'apl' => __('APL', 'docly-core'),
            'applescript' => __('AppleScript', 'docly-core'),
            'arduino' => __('Arduino', 'docly-core'),
            'arff' => __('ARFF', 'docly-core'),
            'asciidoc' => __('AsciiDoc', 'docly-core'),
            'asm6502' => __('6502 Assembly', 'docly-core'),
            'aspnet' => __('ASP.NET (C#)', 'docly-core'),
            'autohotkey' => __('AutoHotkey', 'docly-core'),
            'autoit' => __('Autoit', 'docly-core'),
            'bash' => __('Bash', 'docly-core'),
            'basic' => __('BASIC', 'docly-core'),
            'batch' => __('Batch', 'docly-core'),
            'bison' => __('Bison', 'docly-core'),
            'bnf' => __('Bnf', 'docly-core'),
            'brainfuck' => __('Brainfuck', 'docly-core'),
            'bro' => __('Bro', 'docly-core'),
            'c' => __('C', 'docly-core'),
            'csharp' => __('Csharp', 'docly-core'),
            'cpp' => __('Cpp', 'docly-core'),
            'cil' => __('Cil', 'docly-core'),
            'coffeescript' => __('Coffeescript', 'docly-core'),
            'cmake' => __('Cmake', 'docly-core'),
            'clojure' => __('Clojure', 'docly-core'),
            'crystal' => __('Crystal', 'docly-core'),
            'csp' => __('Csp', 'docly-core'),
            'css-extras' => __('Css-extras', 'docly-core'),
            'd' => __('D', 'docly-core'),
            'dart' => __('Dart', 'docly-core'),
            'diff' => __('Diff', 'docly-core'),
            'django' => __('Django', 'docly-core'),
            'dns-zone-file' => __('Dns-zone-file', 'docly-core'),
            'docker' => __('Docker', 'docly-core'),
            'ebnf' => __('Ebnf', 'docly-core'),
            'eiffel' => __('Eiffel', 'docly-core'),
            'ejs' => __('Ejs', 'docly-core'),
            'elixir' => __('Elixir', 'docly-core'),
            'elm' => __('Elm', 'docly-core'),
            'erb' => __('Erb', 'docly-core'),
            'erlang' => __('Erlang', 'docly-core'),
            'fsharp' => __('Fsharp', 'docly-core'),
            'firestore-security-rules' => __('Firestore-security-rules', 'docly-core'),
            'flow' => __('Flow', 'docly-core'),
            'fortran' => __('Fortran', 'docly-core'),
            'gcode' => __('Gcode', 'docly-core'),
            'gdscript' => __('Gdscript', 'docly-core'),
            'gedcom' => __('Gedcom', 'docly-core'),
            'gherkin' => __('Gherkin', 'docly-core'),
            'git' => __('Git', 'docly-core'),
            'glsl' => __('Glsl', 'docly-core'),
            'gml' => __('Gml', 'docly-core'),
            'go' => __('Go', 'docly-core'),
            'graphql' => __('Graphql', 'docly-core'),
            'groovy' => __('Groovy', 'docly-core'),
            'haml' => __('Haml', 'docly-core'),
            'handlebars' => __('Handlebars', 'docly-core'),
            'haskell' => __('Haskell', 'docly-core'),
            'haxe' => __('Haxe', 'docly-core'),
            'hcl' => __('Hcl', 'docly-core'),
            'http' => __('Http', 'docly-core'),
            'hpkp' => __('Hpkp', 'docly-core'),
            'hsts' => __('Hsts', 'docly-core'),
            'ichigojam' => __('Ichigojam', 'docly-core'),
            'icon' => __('Icon', 'docly-core'),
            'inform7' => __('Inform7', 'docly-core'),
            'ini' => __('Ini', 'docly-core'),
            'io' => __('Io', 'docly-core'),
            'j' => __('J', 'docly-core'),
            'java' => __('Java', 'docly-core'),
            'javadoc' => __('Javadoc', 'docly-core'),
            'javadoclike' => __('Javadoclike', 'docly-core'),
            'javastacktrace' => __('Javastacktrace', 'docly-core'),
            'jolie' => __('Jolie', 'docly-core'),
            'jq' => __('Jq', 'docly-core'),
            'jsdoc' => __('Jsdoc', 'docly-core'),
            'js-extras' => __('Js-extras', 'docly-core'),
            'js-templates' => __('Js-templates', 'docly-core'),
            'json' => __('Json', 'docly-core'),
            'jsonp' => __('Jsonp', 'docly-core'),
            'json5' => __('Json5', 'docly-core'),
            'julia' => __('Julia', 'docly-core'),
            'keyman' => __('Keyman', 'docly-core'),
            'kotlin' => __('Kotlin', 'docly-core'),
            'latex' => __('Latex', 'docly-core'),
            'less' => __('Less', 'docly-core'),
            'lilypond' => __('Lilypond', 'docly-core'),
            'liquid' => __('Liquid', 'docly-core'),
            'lisp' => __('Lisp', 'docly-core'),
            'livescript' => __('Livescript', 'docly-core'),
            'lolcode' => __('Lolcode', 'docly-core'),
            'lua' => __('Lua', 'docly-core'),
            'makefile' => __('Makefile', 'docly-core'),
            'markdown' => __('Markdown', 'docly-core'),
            'markup-templating' => __('Markup-templating', 'docly-core'),
            'matlab' => __('Matlab', 'docly-core'),
            'mel' => __('Mel', 'docly-core'),
            'mizar' => __('Mizar', 'docly-core'),
            'monkey' => __('Monkey', 'docly-core'),
            'n1ql' => __('N1ql', 'docly-core'),
            'n4js' => __('N4js', 'docly-core'),
            'nand2tetris-hdl' => __('Nand2tetris-hdl', 'docly-core'),
            'nasm' => __('Nasm', 'docly-core'),
            'nginx' => __('Nginx', 'docly-core'),
            'nim' => __('Nim', 'docly-core'),
            'nix' => __('Nix', 'docly-core'),
            'nsis' => __('Nsis', 'docly-core'),
            'objectivec' => __('Objectivec', 'docly-core'),
            'ocaml' => __('Ocaml', 'docly-core'),
            'opencl' => __('Opencl', 'docly-core'),
            'oz' => __('Oz', 'docly-core'),
            'parigp' => __('Parigp', 'docly-core'),
            'parser' => __('Parser', 'docly-core'),
            'pascal' => __('Pascal', 'docly-core'),
            'pascaligo' => __('Pascaligo', 'docly-core'),
            'pcaxis' => __('Pcaxis', 'docly-core'),
            'perl' => __('Perl', 'docly-core'),
            'php' => __('Php', 'docly-core'),
            'phpdoc' => __('Phpdoc', 'docly-core'),
            'php-extras' => __('Php-extras', 'docly-core'),
            'plsql' => __('Plsql', 'docly-core'),
            'powershell' => __('Powershell', 'docly-core'),
            'processing' => __('Processing', 'docly-core'),
            'prolog' => __('Prolog', 'docly-core'),
            'properties' => __('Properties', 'docly-core'),
            'protobuf' => __('Protobuf', 'docly-core'),
            'pug' => __('Pug', 'docly-core'),
            'puppet' => __('Puppet', 'docly-core'),
            'pure' => __('Pure', 'docly-core'),
            'python' => __('Python', 'docly-core'),
            'q' => __('Q', 'docly-core'),
            'qore' => __('Qore', 'docly-core'),
            'r' => __('R', 'docly-core'),
            'jsx' => __('Jsx', 'docly-core'),
            'tsx' => __('Tsx', 'docly-core'),
            'renpy' => __('Renpy', 'docly-core'),
            'reason' => __('Reason', 'docly-core'),
            'regex' => __('Regex', 'docly-core'),
            'rest' => __('Rest', 'docly-core'),
            'rip' => __('Rip', 'docly-core'),
            'roboconf' => __('Roboconf', 'docly-core'),
            'ruby' => __('Ruby', 'docly-core'),
            'rust' => __('Rust', 'docly-core'),
            'sas' => __('Sas', 'docly-core'),
            'sass' => __('Sass', 'docly-core'),
            'scss' => __('Scss', 'docly-core'),
            'scala' => __('Scala', 'docly-core'),
            'scheme' => __('Scheme', 'docly-core'),
            'shell-session' => __('Shell-session', 'docly-core'),
            'smalltalk' => __('Smalltalk', 'docly-core'),
            'smarty' => __('Smarty', 'docly-core'),
            'soy' => __('Soy', 'docly-core'),
            'splunk-spl' => __('Splunk-spl', 'docly-core'),
            'sql' => __('Sql', 'docly-core'),
            'stylus' => __('Stylus', 'docly-core'),
            'swift' => __('Swift', 'docly-core'),
            'tap' => __('Tap', 'docly-core'),
            'tcl' => __('Tcl', 'docly-core'),
            'textile' => __('Textile', 'docly-core'),
            'toml' => __('Toml', 'docly-core'),
            'tt2' => __('Tt2', 'docly-core'),
            'turtle' => __('Turtle', 'docly-core'),
            'twig' => __('Twig', 'docly-core'),
            'typescript' => __('Typescript', 'docly-core'),
            't4-cs' => __('T4-cs', 'docly-core'),
            't4-vb' => __('T4-vb', 'docly-core'),
            't4-templating' => __('T4-templating', 'docly-core'),
            'vala' => __('Vala', 'docly-core'),
            'vbnet' => __('Vbnet', 'docly-core'),
            'velocity' => __('Velocity', 'docly-core'),
            'verilog' => __('Verilog', 'docly-core'),
            'vhdl' => __('Vhdl', 'docly-core'),
            'vim' => __('Vim', 'docly-core'),
            'visual-basic' => __('Visual-basic', 'docly-core'),
            'wasm' => __('Wasm', 'docly-core'),
            'wiki' => __('Wiki', 'docly-core'),
            'xeora' => __('Xeora', 'docly-core'),
            'xojo' => __('Xojo', 'docly-core'),
            'xquery' => __('Xquery', 'docly-core'),
            'yaml' => __('Yaml', 'docly-core'),
        ];
    }

    /**
     * Register content related controls
     */
    protected function register_controls() {
        // Source Code Section Start
        $this->start_controls_section(
            '_section_source_code',
            [
                'label' => __('Source Code', 'docly-core'),
                'tab' => Controls_Manager::TAB_CONTENT,
            ]
        );

        $this->add_control(
            'lng_type',
            [
                'label' => __('Language Type', 'docly-core'),
                'label_block' => true,
                'type' => Controls_Manager::SELECT2,
                'default' => 'markup',
                'options' => $this->lng_type(),
            ]
        );

        $this->add_control(
            'theme',
            [
                'label' => __('Theme', 'docly-core'),
                'label_block' => true,
                'type' => Controls_Manager::SELECT,
                'default' => 'prism',
                'options' => [
                    'prism' => __('Default', 'docly-core'),
                    'prism-coy' => __('Coy', 'docly-core'),
                    'prism-dark' => __('Dark', 'docly-core'),
                    'prism-funky' => __('Funky', 'docly-core'),
                    'prism-okaidia' => __('Okaidia', 'docly-core'),
                    'prism-solarizedlight' => __('Solarized light', 'docly-core'),
                    'prism-tomorrow' => __('Tomorrow', 'docly-core'),
                    'prism-twilight' => __('Twilight', 'docly-core'),
                ],
                'style_transfer' => true,
            ]
        );

        $this->add_control(
            'source_code',
            [
                'label' => __('Source Code', 'docly-core'),
                'type' => Controls_Manager::CODE,
                'rows' => 20,
                'default' => '<p class="random-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>',
                'placeholder' => __('Source Code....', 'docly-core'),
                'condition' => [
                    'lng_type!' => '',
                ],
            ]
        );
        $this->end_controls_section();

        /**
         * Style Controls
         */
        $this->start_controls_section(
            '_section_source_code_style',
            [
                'label' => __('Style', 'docly-core'),
                'tab' => Controls_Manager::TAB_STYLE,
            ]
        );

        $this->add_responsive_control(
            'source_code_box_height',
            [
                'label' => __('Height', 'docly-core'),
                'type' => Controls_Manager::SLIDER,
                'size_units' => ['px', '%'],
                'range' => [
                    'px' => [
                        'min' => 0,
                        'max' => 1000,
                        'step' => 1,
                    ],
                    '%' => [
                        'min' => 0,
                        'max' => 100,
                    ],
                ],
                'selectors' => [
                    '{{WRAPPER}} .docly-source-code pre' => 'height: {{SIZE}}{{UNIT}};',
                ],
            ]
        );

        $this->add_group_control(
            Group_Control_Border::get_type(),
            [
                'name' => 'box_border',
                'label' => __('Box Border', 'docly-core'),
                'selector' => '{{WRAPPER}}  .docly-source-code pre[class*="language-"]',
                'separator' => 'before',
            ]
        );

        $this->add_control(
            'box_border_radius',
            [
                'label' => __('Border Radius', 'docly-core'),
                'type' => Controls_Manager::DIMENSIONS,
                'size_units' => ['px', '%'],
                'selectors' => [
                    '{{WRAPPER}} .docly-source-code pre[class*="language-"]' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
                ],
                'separator' => 'before',
            ]
        );

        $this->add_responsive_control(
            'source_code_box_padding',
            [
                'label' => __('Padding', 'docly-core'),
                'type' => Controls_Manager::DIMENSIONS,
                'size_units' => ['px', '%'],
                'selectors' => [
                    '{{WRAPPER}} .docly-source-code pre' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
                ]
            ]
        );

        $this->add_responsive_control(
            'source_code_box_margin',
            [
                'label' => __('Margin', 'docly-core'),
                'type' => Controls_Manager::DIMENSIONS,
                'size_units' => ['px', '%'],
                'selectors' => [
                    '{{WRAPPER}} .docly-source-code pre' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
                ]
            ]
        );

        $this->end_controls_section();

    }

    protected function render() {
        $settings = $this->get_settings_for_display();
        wp_enqueue_style('prism');
        $source_code = $settings['source_code'];
        $theme = !empty($settings['theme']) ? $settings['theme'] : 'prism';
        $this->add_render_attribute('docly-code-wrap', 'class', 'docly-source-code');
        $this->add_render_attribute('docly-code-wrap', 'class', $theme);
        $this->add_render_attribute('docly-code-wrap', 'data-lng-type', $settings['lng_type']);
        $this->add_render_attribute('docly-code', 'class', 'language-' . $settings['lng_type']);
        ?>
        <?php if (!empty($source_code)): ?>
            <div <?php $this->print_render_attribute_string('docly-code-wrap'); ?>>
			<pre>
				<code <?php $this->print_render_attribute_string('docly-code'); ?>>
					<?php echo esc_html($source_code); ?>
				</code>
			</pre>
            </div>
        <?php endif; ?>
        <?php

    }

}