-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.php
110 lines (86 loc) · 2.74 KB
/
index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
defined('ABSPATH') or die();
$fields->registered_elements = [];
/**
* Register an element
*/
$fields->register_element = function(
string $name,
array $args
) use ($fields) : void {
if ( ! empty( $fields->registered_elements[ $name ] ) ) {
$backtrace = debug_backtrace();
$caller = array_shift( $backtrace );
$caller = array_shift( $backtrace );
trigger_error("Element {$name} is already registered, called from <b>{$caller['file']}</b> in <b>{$caller['line']}</b>. Will overwrite.", E_USER_WARNING);
}
if ( empty( $args ) ) {
$backtrace = debug_backtrace();
$caller = array_shift( $backtrace );
$caller = array_shift( $backtrace );
trigger_error("Element {$name} can't be registered with empty args, called from <b>{$caller['file']}</b> in <b>{$caller['line']}</b>.", E_USER_WARNING);
return;
}
$fields->registered_elements[ $name ] = $args;
};
/**
* Get a registered field or null.
*/
$fields->get_element = function(
string $name
) use ($fields) {
return $this->registered_elements[ $name ] ?? null;
};
$fields->is_element = function(string $type) : bool {
return in_array($type, [
'button',
'description',
'label',
'modal'
]);
};
/**
* Render a registered element
*/
$fields->render_element = function(
string $name,
array $args = []
) use($fields) : string {
if ( ! $field = $fields->get_element( $name ) ) {
$caller = current( debug_backtrace() );
trigger_error("Element {$name} is not registered, called from <b>{$caller['file']}</b> in <b>{$caller['line']}</b>. Permissions, storage, validation callbacks are inert.", E_USER_WARNING);
$fields->register_element( $name, $args );
return $fields->render_element( $name );
}
$field = array_merge( $field, $args );
$args = $fields->format_element_args( $name, $field );
$fields->enqueue_item( $name, 'elements', $args );
return '<div id="' . $args['element'] . '" ></div>';
};
/**
* For each control type, convert $args to props expected the react component
* associated
*
* @see ./assets/src/types.js
*/
$fields->format_element_args = function(
string $name,
array $args
) use($fields) {
$type = $args['type'] ?? '';
$args['element'] = uniqid( 'tangible-element-' . $name .'-' );
switch($type) {
case 'modal':
$args = $fields->format_value($args, 'cancel_text', 'cancelText');
$args = $fields->format_value($args, 'confirm_text', 'confirmText');
$args = $fields->format_value($args, 'button_props', 'buttonProps');
break;
case 'button':
$args = $fields->format_value($args, 'button_type', 'buttonType');
break;
case 'tooltip':
$args = $fields->format_value($args, 'button_props', 'buttonProps');
break;
}
return $args;
};