Example #1
0
 function et_builder_get_font_options_items()
 {
     $output = '';
     $font_options = et_builder_font_options();
     foreach ($font_options as $key => $value) {
         $output .= sprintf('<option value="%1$s">%2$s</option>', esc_attr($key), esc_html($value));
     }
     return $output;
 }
    function render_field($field)
    {
        $classes = array();
        $hidden_field = '';
        $is_custom_color = isset($field['custom_color']) && $field['custom_color'];
        $reset_button_html = '<span class="et-pb-reset-setting"></span>';
        if ('select' !== $field['type']) {
            $classes = array('regular-text');
        }
        foreach ($this->get_validation_class_rules() as $rule) {
            if (!empty($field[$rule])) {
                $this->validation_in_use = true;
                $classes[] = $rule;
            }
        }
        if (!empty($field['class'])) {
            if (is_string($field['class'])) {
                $field['class'] = array($field['class']);
            }
            $classes = array_merge($classes, $field['class']);
        }
        $field['class'] = implode(' ', $classes);
        $field_name = $this->get_field_name($field);
        $field['id'] = !empty($field['id']) ? $field['id'] : $field_name;
        $field['name'] = $field_name;
        if (isset($this->type) && 'child' === $this->type) {
            $field_name = "data.{$field_name}";
        }
        $default = isset($field['default']) ? $field['default'] : '';
        $value_html = ' value="<%%- typeof( %1$s ) !== \'undefined\' ?  %2$s : \'%3$s\' %%>" ';
        $value = sprintf($value_html, esc_attr($field_name), esc_attr($field_name), $default);
        $attributes = '';
        if (!empty($field['attributes'])) {
            if (is_array($field['attributes'])) {
                foreach ($field['attributes'] as $attribute_key => $attribute_value) {
                    $attributes .= ' ' . esc_attr($attribute_key) . '="' . esc_attr($attribute_value) . '"';
                }
            } else {
                $attributes = ' ' . $field['attributes'];
            }
        }
        if (!empty($field['affects'])) {
            $field['class'] .= ' et-pb-affects';
            $attributes .= sprintf(' data-affects="%s"', esc_attr(implode(', ', $field['affects'])));
        }
        if ('font' === $field['type']) {
            $field['options'] = et_builder_font_options();
            $field['class'] .= ' et-pb-font-select';
        }
        if (in_array($field['type'], array('font', 'hidden'))) {
            $hidden_field = sprintf('<input type="hidden" name="%1$s" id="%2$s" class="et-pb-main-setting %3$s" %4$s %5$s/>', esc_attr($field['name']), esc_attr($field['id']), esc_attr($field['class']), $value, $attributes);
        }
        foreach ($this->get_validation_attr_rules() as $rule) {
            if (!empty($field[$rule])) {
                $this->validation_in_use = true;
                $attributes .= ' data-rule-' . esc_attr($rule) . '="' . esc_attr($field[$rule]) . '"';
            }
        }
        switch ($field['type']) {
            case 'tiny_mce':
                if (!empty($field['tiny_mce_html_mode'])) {
                    $field['class'] .= ' html_mode';
                }
                $main_content_property_name = $main_content_field_name = 'et_pb_content_new';
                if (isset($this->type) && 'child' === $this->type) {
                    $main_content_property_name = "data.{$main_content_property_name}";
                }
                $field_el = sprintf('<div id="%1$s"><%%= typeof( %2$s ) !== \'undefined\' ? %2$s : \'\' %%></div>', esc_attr($main_content_field_name), esc_html($main_content_property_name));
                break;
            case 'textarea':
            case 'custom_css':
                $field_custom_value = esc_html($field_name);
                if ('custom_css' === $field['type']) {
                    $field_custom_value .= '.replace( /\\|\\|/g, "\\n" )';
                }
                $field_el = sprintf('<textarea class="et-pb-main-setting large-text code%1$s" rows="4" cols="50" id="%2$s"><%%= typeof( %3$s ) !== \'undefined\' ? %4$s : \'\' %%></textarea>', esc_attr($field['class']), esc_attr($field['id']), esc_html($field_name), $field_custom_value);
                break;
            case 'select':
            case 'yes_no_button':
            case 'font':
                if ('font' === $field['type']) {
                    $field['id'] .= '_select';
                    $field_name .= '_select';
                    $field['class'] .= ' et-pb-helper-field';
                }
                $button_options = array();
                if ('yes_no_button' === $field['type']) {
                    $button_options = isset($field['button_options']) ? $field['button_options'] : array();
                }
                $field_el = $this->render_select($field_name, $field['options'], $field['id'], $field['class'], $attributes, $field['type'], $button_options);
                if ('font' === $field['type']) {
                    $font_style_button_html = '<div class="et_builder_%1$s_font et_builder_font_style mce-widget mce-btn">
							<button type="button">
								<i class="mce-ico mce-i-%1$s"></i>
							</button>
						</div>';
                    $field_el .= sprintf('<div class="et_builder_font_styles mce-toolbar">
							%1$s
							%2$s
							%3$s
							%4$s
						</div> <!-- .et_builder_font_styles -->', sprintf($font_style_button_html, 'bold'), sprintf($font_style_button_html, 'italic'), sprintf($font_style_button_html, 'uppercase'), sprintf($font_style_button_html, 'underline'));
                    $field_el .= $hidden_field;
                }
                break;
            case 'color':
            case 'color-alpha':
                $field['default'] = !empty($field['default']) ? $field['default'] : '';
                if ($is_custom_color && (!isset($field['default']) || '' === $field['default'])) {
                    $field['default'] = '';
                }
                $default = !empty($field['default']) && !$is_custom_color ? sprintf(' data-default-color="%s"', $field['default']) : '';
                $color_id = sprintf(' id="%1$s"', esc_attr($field['id']));
                $color_value_html = '<%%- typeof( %1$s ) !== \'undefined\' && %1$s !== \'\' ? %1$s : \'%2$s\' %%>';
                $main_color_value = sprintf($color_value_html, esc_attr($field_name), $field['default']);
                $hidden_color_value = sprintf($color_value_html, esc_attr($field_name), '');
                $field_el = sprintf('<input%1$s class="et-pb-color-picker-hex%5$s%8$s" type="text"%6$s%7$s placeholder="%9$s" value="%2$s"%3$s />
					%4$s', !$is_custom_color ? $color_id : '', $main_color_value, $default, !empty($field['additional_code']) ? $field['additional_code'] : '', 'color-alpha' === $field['type'] ? ' et-pb-color-picker-hex-alpha' : '', 'color-alpha' === $field['type'] ? ' data-alpha="true"' : '', 'color' === $field['type'] ? ' maxlength="7"' : '', !$is_custom_color ? ' et-pb-main-setting' : '', esc_attr__('Hex Value', 'et_builder'));
                if ($is_custom_color) {
                    $field_el = sprintf('<span class="et-pb-custom-color-button et-pb-choose-custom-color-button"><span>%1$s</span></span>
						<div class="et-pb-custom-color-container et_pb_hidden">
							%2$s
							<input%3$s class="et-pb-main-setting et-pb-custom-color-picker" type="hidden" value="%4$s" />
							%5$s
						</div> <!-- .et-pb-custom-color-container -->', esc_html__('Choose Custom Color', 'et_builder'), $field_el, $color_id, $hidden_color_value, $reset_button_html);
                }
                break;
            case 'upload':
                $field_data_type = !empty($field['data_type']) ? $field['data_type'] : 'image';
                $field['upload_button_text'] = !empty($field['upload_button_text']) ? $field['upload_button_text'] : __('Upload', 'et_builder');
                $field['choose_text'] = !empty($field['choose_text']) ? $field['choose_text'] : __('Choose image', 'et_builder');
                $field['update_text'] = !empty($field['update_text']) ? $field['update_text'] : __('Set image', 'et_builder');
                $field['classes'] = !empty($field['classes']) ? ' ' . $field['classes'] : '';
                $field_additional_button = !empty($field['additional_button']) ? "\n\t\t\t\t\t" . $field['additional_button'] : '';
                $field_el = sprintf('<input id="%1$s" type="text" class="et-pb-main-setting regular-text et-pb-upload-field%8$s" value="<%%- typeof( %2$s ) !== \'undefined\' ? %2$s : \'\' %%>" />
					<input type="button" class="button button-upload et-pb-upload-button" value="%3$s" data-choose="%4$s" data-update="%5$s" data-type="%6$s" />%7$s', esc_attr($field['id']), esc_attr($field_name), esc_attr($field['upload_button_text']), esc_attr($field['choose_text']), esc_attr($field['update_text']), esc_attr($field_data_type), $field_additional_button, esc_attr($field['classes']));
                break;
            case 'checkbox':
                $field_el = sprintf('<input type="checkbox" name="%1$s" id="%2$s" class="et-pb-main-setting" value="on" <%%- typeof( %1$s ) !==  \'undefined\' && %1$s == \'on\' ? checked="checked" : "" %%>>', esc_attr($field['name']), esc_attr($field['id']));
                break;
            case 'hidden':
                $field_el = $hidden_field;
                break;
            case 'custom_margin':
            case 'custom_padding':
                $field_el = sprintf('<div class="et_custom_margin_padding">
						%6$s
						%7$s
						%8$s
						%9$s
						<input type="hidden" name="%1$s" data-default="%5$s" id="%2$s" class="et-pb-main-setting et_custom_margin_main" %3$s %4$s/>
					</div> <!-- .et_custom_margin_padding -->', esc_attr($field['name']), esc_attr($field['id']), $value, $attributes, esc_attr($default), !isset($field['sides']) || !empty($field['sides']) && in_array('top', $field['sides']) ? sprintf('<label>%1$s <input type="text" class="et_custom_margin et_custom_margin_top" /></label>', esc_html__('Top', 'et_builder')) : '', !isset($field['sides']) || !empty($field['sides']) && in_array('right', $field['sides']) ? sprintf('<label>%1$s <input type="text" class="et_custom_margin et_custom_margin_right" /></label>', esc_html__('Right', 'et_builder')) : '', !isset($field['sides']) || !empty($field['sides']) && in_array('bottom', $field['sides']) ? sprintf('<label>%1$s <input type="text" class="et_custom_margin et_custom_margin_bottom" /></label>', esc_html__('Bottom', 'et_builder')) : '', !isset($field['sides']) || !empty($field['sides']) && in_array('left', $field['sides']) ? sprintf('<label>%1$s <input type="text" class="et_custom_margin et_custom_margin_left" /></label>', esc_html__('Left', 'et_builder')) : '');
                break;
            case 'text':
            case 'date_picker':
            case 'range':
            default:
                $validate_number = isset($field['number_validation']) && $field['number_validation'] ? true : false;
                if ('date_picker' === $field['type']) {
                    $field['class'] .= ' et-pb-date-time-picker';
                }
                $field['class'] .= 'range' === $field['type'] ? ' et-pb-range-input' : ' et-pb-main-setting';
                $field_el = sprintf('<input id="%1$s" type="text" class="%2$s%5$s"%6$s%3$s%8$s %4$s/>%7$s', esc_attr($field['id']), esc_attr($field['class']), $value, $attributes, $validate_number ? ' et-validate-number' : '', $validate_number ? ' maxlength="3"' : '', !empty($field['additional_button']) ? $field['additional_button'] : '', '' !== $default ? sprintf(' data-default="%1$s"', esc_attr($default)) : '');
                if ('range' === $field['type']) {
                    $value = sprintf($value_html, esc_attr($field_name), esc_attr(sprintf('parseFloat( %1$s )', $field_name)), '' !== $default ? floatval($default) : '');
                    $range_settings_html = '';
                    $range_properties = apply_filters('et_builder_range_properties', array('min', 'max', 'step'));
                    foreach ($range_properties as $property) {
                        if (isset($field['range_settings'][$property])) {
                            $range_settings_html .= sprintf(' %2$s="%1$s"', esc_attr($field['range_settings'][$property]), esc_html($property));
                        }
                    }
                    $range_el = sprintf('<input type="range" class="et-pb-main-setting et-pb-range" data-default="%2$s"%1$s%3$s />', $value, esc_attr($default), $range_settings_html);
                    $field_el = $range_el . "\n" . $field_el;
                }
                break;
        }
        if (isset($field['type']) && isset($field['tab_slug']) && 'advanced' === $field['tab_slug'] && !$is_custom_color) {
            $field_el .= $reset_button_html;
        }
        return "\t" . $field_el;
    }