<\/span>/i', '', $str);
33 |
34 | // Replace our markers back to PHP tags.
35 | $str = str_replace(
36 | ['phptagopen', 'phptagclose', 'asptagopen', 'asptagclose', 'backslashtmp', 'scriptclose'],
37 | ['<?', '?>', '<%', '%>', '\\', '</script>'],
38 | $str
39 | );
40 |
41 | return $str;
42 | }
43 |
44 | /**
45 | * Sets up the third party add-ons path
46 | * @return string
47 | */
48 | public function thirdPartyPath(): string
49 | {
50 | $path = '';
51 | if (defined('PATH_THIRD')) {
52 | $path = PATH_THIRD;
53 | } else {
54 | $path = APPPATH . 'third_party/';
55 | }
56 |
57 | return $path;
58 | }
59 |
60 | /**
61 | * Sets up the third party themes path
62 | * @return string
63 | */
64 | public function themePath(): string
65 | {
66 | $path = '';
67 | if (defined('PATH_THIRD_THEMES')) {
68 | $path = PATH_THIRD_THEMES;
69 | } else {
70 | $path = rtrim(ee()->config->config['theme_folder_path'], '/') . '/third_party/';
71 | }
72 |
73 | return $path;
74 | }
75 |
76 | /**
77 | * Sets up the third party theme URL
78 | * @return string
79 | */
80 | public function themeUrl(): string
81 | {
82 | if (defined('URL_THIRD_THEMES')) {
83 | $url = URL_THIRD_THEMES;
84 | } else {
85 | $url = rtrim(ee()->config->config['theme_folder_url'], '/') . '/third_party/';
86 | }
87 |
88 | return $url;
89 | }
90 |
91 | /**
92 | * Formats $arr for use in Panels with Array data
93 | * @param array $arr
94 | * @param string $default
95 | * @param string $pair_delim
96 | * @param string $tail_delim
97 | * @return string
98 | */
99 | public function outputArray(array $arr, string $default = 'nothing_found', string $pair_delim = ' => ', string $tail_delim = '
'): string
100 | {
101 | if (!is_array($arr) || count($arr) == '0') {
102 | return lang($default);
103 | }
104 |
105 | $return = '';
106 | foreach ($arr as $key => $value) {
107 | if (is_array($value)) {
108 | $return .= $key . $pair_delim . '' . print_r($value, true) . '
';
109 | } else {
110 | $return .= $key . $pair_delim . $value . $tail_delim;
111 | }
112 | }
113 |
114 | return $return;
115 | }
116 | }
--------------------------------------------------------------------------------
/system/user/addons/eedt/views/partials/files.php:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | getAllTemplates();
23 | if($templates_used) {
24 | echo '
' . lang('eedt.templates_used') . '
';
25 | foreach($templates_used AS $template) {
26 | if($template['template_name']) {
27 | echo '
' .
28 | $template_groups[$template['group_id']] . '/' . $template['template_name'] . '';
29 | }
30 | }
31 |
32 | echo '
';
33 | }
34 | ?>
35 |
36 |
37 |
APPPATH:
38 |
SYSDIR:
39 |
FCPATH:
40 |
SYSPATH:
41 |
EESELF:
42 |
BASEPATH:
43 |
PATH_THEMES:
44 |
PATH_THIRD:
45 |
PATH_CACHE:
46 |
PATH_MBR_THEMES:
47 |
48 |
49 |
PATH_JAVASCRIPT:
50 |
51 |
52 |
53 |
54 |
55 | Add-ons (' . $total_addon_files . ')
';
57 | foreach ($included_file_data['third_party_addon'] as $file) {
58 | echo $file . '
';
59 | }
60 | foreach ($included_file_data['first_party_modules'] as $file) {
61 | echo $file . '
';
62 | }
63 | ?>
64 |
65 |
66 |
67 | EE (' . $total . ')
';
70 | foreach ($included_file_data['expressionengine_core'] as $file) {
71 | echo $file . '
';
72 | }
73 | ?>
74 |
75 |
76 |
77 | Composer (' . $total . ')
';
80 | foreach ($included_file_data['composer'] as $file) {
81 | echo $file . '
';
82 | }
83 | ?>
84 |
85 |
86 |
87 | Other Files (' . $total . ')
';
90 | foreach ($included_file_data['other_files'] as $file) {
91 | echo $file . '
';
92 | }
93 | ?>
94 |
95 |
--------------------------------------------------------------------------------
/system/user/addons/eedt/views/partials/database.php:
--------------------------------------------------------------------------------
1 |
2 |
getLog();
4 | echo $log->getQueryCount() . ' ' . lang('database_queries') . ' ' . lang('total'); ?>
5 |
6 |
12 |
13 |
14 |
15 |
16 | 0
17 |
18 | getQueries() as $query): ?>
21 | = $settings['max_query_time']) {
25 | $class = 'flash';
26 | }
27 |
28 | if($memory >= $settings['max_query_memory']) {
29 | $class = 'flash';
30 | }
31 | ?>
32 | .
[
33 | s
34 | / filesizeFormat($memory); ?>
35 | ]
36 |
37 |
40 |
41 |
42 |
43 | getQueries() as $query): ?>
47 | = $settings['max_query_time']):
50 | ?>
51 |
52 | .
[s
53 | / filesizeFormat($memory); ?>
54 | ]
55 |
56 |
61 |
62 |
No Slow Queries
63 |
64 |
65 |
66 |
67 | getQueryMetrics() as $query): ?>
71 |
72 | = 2): ?>
73 |
74 | ' . $query['query']; ?>
75 | x
76 |
77 |
78 |
', $query['locations']); ?>
79 |
80 |
81 |
82 |
83 |
87 |
88 |
89 |
No Duplicate Queries
90 |
91 |
92 |
93 |
94 | getQueries() as $query): ?>
98 | = $settings['max_query_memory']):
101 | ?>
102 |
103 | .
[s
104 | / filesizeFormat($memory); ?>
105 | ]
106 |
107 |
112 |
113 |
No Duplicate Queries
114 |
115 |
116 |
--------------------------------------------------------------------------------
/system/user/addons/eedt_email/Email/Parser.php:
--------------------------------------------------------------------------------
1 | '', 'html' => '', 'attachments' => []];
15 | if (ee()->config->config['mail_protocol'] == 'mail') {
16 | if (strpos($header_str, "Content-Type: text/plain") !== false) {
17 | $return['text'] = $email['finalbody'];
18 | } elseif (strpos($email['header_str'], "Content-Type: text/html") !== false) {
19 | $return['html'] = $email['finalbody'];
20 | } else {
21 | preg_match('/Content-Type: multipart\/[^;]+;\s*boundary="([^"]+)"/i', $email['header_str'], $matches);
22 | }
23 | } else {
24 | if (stripos($email['finalbody'], "Content-Type: text/plain") === 0) {
25 | $return['text'] = self::removeChunks($email['finalbody']);
26 | } elseif (stripos($email['finalbody'], "Content-Type: text/html") === 0) {
27 | $return['html'] = self::removeChunks($email['finalbody']);
28 | } else {
29 | preg_match('/^Content-Type: multipart\/[^;]+;\s*boundary="([^"]+)"/i', $email['finalbody'], $matches);
30 | }
31 | }
32 |
33 | if (!empty($matches) && !empty($matches[1])) {
34 | $boundary = $matches[1];
35 | $chunks = explode('--' . $boundary, $email['finalbody']);
36 | foreach ($chunks as $chunk) {
37 | if (stristr($chunk, "Content-Type: text/plain") !== false) {
38 | $return['text'] = self::removeChunks($chunk);
39 | }
40 |
41 | if (stristr($chunk, "Content-Type: text/html") !== false) {
42 | $return['html'] = self::removeChunks($chunk);
43 | }
44 |
45 | if (stristr($chunk, "Content-Disposition: attachment") !== false) {
46 | preg_match('/Content-Type: (.*?); name=["|\'](.*?)["|\']/is', $chunk, $attachment_matches);
47 | if (!empty($attachment_matches)) {
48 | $type = $name = '';
49 | if (!empty($attachment_matches[1])) {
50 | $type = $attachment_matches[1];
51 | }
52 |
53 | if (!empty($attachment_matches[2])) {
54 | $name = $attachment_matches[2];
55 | }
56 |
57 | $attachment = array(
58 | 'type' => trim($type),
59 | 'name' => trim($name),
60 | 'content' => self::removeChunks($chunk)
61 | );
62 | $return['attachments'][] = $attachment;
63 | }
64 | }
65 |
66 | if (stristr($chunk, "Content-Type: multipart") !== false) {
67 | preg_match('/Content-Type: multipart\/[^;]+;\s*boundary="([^"]+)"/i', $chunk, $inner_matches);
68 | if (!empty($inner_matches) && !empty($inner_matches[1])) {
69 | $inner_boundary = $inner_matches[1];
70 | $inner_chunks = explode('--' . $inner_boundary, $chunk);
71 | foreach ($inner_chunks as $inner_chunk) {
72 | if (stristr($inner_chunk, "Content-Type: text/plain") !== false) {
73 | $return['text'] = self::removeChunks($inner_chunk);
74 | }
75 |
76 | if (stristr($inner_chunk, "Content-Type: text/html") !== false) {
77 | $return['html'] = self::removeChunks($inner_chunk);
78 | }
79 | }
80 | }
81 | }
82 | }
83 | }
84 |
85 | if (!empty($return['html'])) {
86 | $return['html'] = quoted_printable_decode($return['html']);
87 | }
88 |
89 | return $return;
90 | }
91 |
92 | /**
93 | * @param string $chunk
94 | * @return string
95 | */
96 | static protected function removeChunks(string $chunk): string
97 | {
98 | return trim(preg_replace("/Content-(Type|ID|Disposition|Transfer-Encoding):.*?" . NL . "/is", "", $chunk));
99 | }
100 | }
--------------------------------------------------------------------------------
/system/user/addons/eedt/Services/XmlService.php:
--------------------------------------------------------------------------------
1 | rootName = $rootName;
44 | return $this;
45 | }
46 |
47 | /**
48 | * @param string $version
49 | * @return $this
50 | */
51 | public function setXmlVersion(string $version): XmlService
52 | {
53 | $this->xmlVersion = $version;
54 | return $this;
55 | }
56 |
57 | /**
58 | * @param string $charSet
59 | * @return $this
60 | */
61 | public function setCharSet(string $charSet): XmlService
62 | {
63 | $this->charSet = $charSet;
64 | return $this;
65 | }
66 |
67 | /**
68 | * @param $indentString
69 | * @return $this
70 | */
71 | public function setIndentStr($indentString): XmlService
72 | {
73 | $this->indentString = $indentString;
74 | return $this;
75 | }
76 |
77 | /**
78 | * @param string $xsltFilePath
79 | * @return $this
80 | */
81 | public function setXsltFilePath(string $xsltFilePath): XmlService
82 | {
83 | $this->xsltFilePath = $xsltFilePath;
84 | return $this;
85 | }
86 |
87 | /**
88 | * @return $this
89 | */
90 | public function initiate(): XmlService
91 | {
92 | // Create new xmlwriter using memory for string output.
93 | $this->openMemory();
94 |
95 | // Set indenting, if any.
96 | if ($this->indentString) {
97 | $this->setIndent(true);
98 | $this->setIndentString($this->indentString);
99 | }
100 |
101 | // Set DTD.
102 | $this->startDocument($this->xmlVersion, $this->charSet);
103 |
104 | // Set XSLT stylesheet path, if any.
105 | if ($this->xsltFilePath) {
106 | $this->writePi('xml-stylesheet', 'type="text/xsl" href="' . $this->xsltFilePath . '"');
107 | }
108 |
109 | // Set the root tag.
110 | $this->startElement($this->rootName);
111 | return $this;
112 | }
113 |
114 | /**
115 | * @param string $name
116 | * @param array $attributes
117 | * @return $this
118 | */
119 | public function startBranch(string $name, array $attributes = []): XmlService
120 | {
121 | $this->startElement($name);
122 | $this->addAttributes($attributes);
123 | return $this;
124 | }
125 |
126 | /**
127 | * End an open branch. A branch needs to be closed explicitely if the branch
128 | * is followed directly by another branch.
129 | */
130 | public function endBranch()
131 | {
132 | $this->endElement();
133 | }
134 |
135 | /**
136 | * @param string $name
137 | * @param string $value
138 | * @param array $attributes
139 | * @param bool $cdata
140 | * @return $this
141 | */
142 | public function addNode(string $name, string $value, array $attributes = [], bool $cdata = false): XmlService
143 | {
144 | $this->startElement($name);
145 | $this->addAttributes($attributes);
146 |
147 | if ($cdata) {
148 | $this->writeCdata($value);
149 | } else {
150 | $this->text($value);
151 | }
152 |
153 | $this->endElement();
154 | return $this;
155 | }
156 |
157 | /**
158 | * @param bool $echo
159 | * @return string
160 | */
161 | public function getXml(bool $echo = false): string
162 | {
163 | if ($echo === true) {
164 | header('Content-type: text/xml');
165 | }
166 |
167 | $this->endElement();
168 | $this->endDocument();
169 |
170 | $output = $this->outputMemory();
171 | if ($echo === true) {
172 | echo $output;
173 | }
174 |
175 | return $output;
176 | }
177 |
178 | /**
179 | * @param array $attributes
180 | * @return $this
181 | */
182 | protected function addAttributes(array $attributes): XmlService
183 | {
184 | if (count($attributes) > 0) {
185 | // We have attributes, let's set them
186 | foreach ($attributes as $key => $value) {
187 | $this->writeAttribute($key, $value);
188 | }
189 | }
190 |
191 | return $this;
192 | }
193 | }
--------------------------------------------------------------------------------
/system/user/addons/eedt/Services/SettingsService.php:
--------------------------------------------------------------------------------
1 | 'default',
12 | 'toolbar_position' => 'bottom-left',
13 | 'allowed_roles' => [
14 | 1,
15 | ],
16 | 'display_member_ids' => [],
17 | 'visibility' => [
18 | 'CP',
19 | 'PAGE',
20 | 'ACT',
21 | ],
22 | 'disable_internal_debugger' => true,
23 | 'hidden_config_items' => [
24 | 'database',
25 | 'encryption_key',
26 | 'session_crypt_key',
27 | ],
28 | 'profile_exts' => [
29 | 'js',
30 | 'css',
31 | 'jpg',
32 | 'jpeg',
33 | 'gif',
34 | 'png',
35 | 'bmp',
36 | 'pdf',
37 | 'svg',
38 | 'htm',
39 | 'html',
40 | 'xhtml',
41 | 'csv',
42 | 'rss',
43 | 'atom',
44 | 'xml',
45 | ],
46 | 'max_exec_time' => 0.5,
47 | 'max_memory' => 30,
48 | 'max_queries' => 100,
49 | 'max_sql_time' => 0.1,
50 | 'max_query_time' => 0.01,
51 | 'max_query_memory' => 100000,
52 | ];
53 |
54 | /**
55 | * @var string
56 | */
57 | protected string $settings_table = 'eedt_settings';
58 |
59 | /**
60 | * Returns the value straight from the database
61 | * @param string $setting
62 | */
63 | public function getSetting(string $key)
64 | {
65 | return ee()->db->get_where($this->settings_table, ['setting_key' => $key])->result_array();
66 | }
67 |
68 | /**
69 | * @param string $setting
70 | * @return mixed
71 | */
72 | public function addSetting(string $setting)
73 | {
74 | $data = [
75 | 'setting_key' => $setting,
76 | 'setting_value' => '',
77 | ];
78 |
79 | return ee()->db->insert($this->settings_table, $data);
80 | }
81 |
82 | /**
83 | * @param $key
84 | * @return bool
85 | */
86 | protected function isSetting($key)
87 | {
88 | if (array_key_exists($key, $this->_defaults)) {
89 | if (!$this->getSetting($key)) {
90 | return false;
91 | }
92 |
93 | return true;
94 | }
95 |
96 | return false;
97 | }
98 |
99 | /**
100 | * @param string $key
101 | * @param string $value
102 | * @return false|void
103 | */
104 | public function updateSetting(string $key, $value)
105 | {
106 | if (!$this->isSetting($key)) {
107 | $this->addSetting($key);
108 | }
109 |
110 | $data = [];
111 | if (is_array($value)) {
112 | $value = serialize($value);
113 | $data['serialized '] = '1';
114 | }
115 |
116 | $data['setting_value'] = $value;
117 | ee()->db->where('setting_key', $key);
118 | ee()->db->update($this->settings_table, $data);
119 | }
120 |
121 | /**
122 | * @param array $data
123 | * @return void
124 | */
125 | public function updateSettings(array $data): void
126 | {
127 | foreach ($data as $key => $value) {
128 | $this->updateSetting($key, $value);
129 | }
130 | }
131 |
132 | /**
133 | * @return array
134 | */
135 | public function getDefaults(): array
136 | {
137 | return $this->_defaults;
138 | }
139 |
140 | /**
141 | * @param array $new_defaults
142 | * @return $this
143 | */
144 | public function setDefaults(array $new_defaults = []): SettingsService
145 | {
146 | foreach ($new_defaults as $key => $value) {
147 | $this->_defaults[$key] = $value;
148 | }
149 |
150 | return $this;
151 | }
152 |
153 | /**
154 | * @return array
155 | */
156 | public function getSettings(): array
157 | {
158 | ee()->db->flush_cache();
159 | ee()->db->select('setting_key, setting_value, `serialized`');
160 | $query = ee()->db->get($this->settings_table);
161 | $_settings = $query->result_array();
162 | $settings = [];
163 | foreach ($_settings as $setting) {
164 | $settings[$setting['setting_key']] = ($setting['serialized'] == '1' ? unserialize($setting['setting_value']) : $setting['setting_value']);
165 | }
166 |
167 | //now check to make sure they're all there and set default values if not
168 | foreach ($this->_defaults as $key => $value) {
169 | //setup the override check
170 | if (isset(ee()->config->config['eedt'][$key])) {
171 | $settings[$key] = ee()->config->config['eedt'][$key];
172 | }
173 |
174 | //normal default check
175 | if (!isset($settings[$key])) {
176 | $settings[$key] = $value;
177 | }
178 | }
179 |
180 | return $settings;
181 | }
182 | }
--------------------------------------------------------------------------------
/system/user/addons/eedt/views/partials/variables.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
12 |
13 |
14 |
15 |
16 |
17 |
$_GET
18 |
19 | = 1): ?>
20 |
21 | $value): ?>
22 |
23 | | =$key;?> |
24 | =$value;?> |
25 |
26 |
27 |
28 |
29 | =lang('no_get_vars'); ?>
30 |
31 |
32 |
33 |
34 |
35 |
$_POST
36 | = 1): ?>
37 |
38 | $value): ?>
39 |
40 | | =$key;?> |
41 | =$value;?> |
42 |
43 |
44 |
45 |
46 | =lang('no_post_vars'); ?>
47 |
48 |
49 |
50 |
51 |
66 |
67 |
68 |
Registered Cookies
69 | $value): ?>
72 |
=$key;?> (=$value['type'] ?>) Lifetime: =$value['cookie_lifetime'];?>
73 |
outputArray($value['value']);
76 | } else {
77 | echo $value['value'];
78 | }
79 | ?>
80 |
81 |
82 |
83 |
84 | =lang('eedt.no_registered_cookies'); ?>
85 |
86 |
87 |
88 |
Unregistered Cookies
89 | $value): ?>
92 |
=$key;?> -> =$value;?>
93 |
94 |
95 |
96 | =lang('eedt.no_unregistered_cookies'); ?>
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 | $value): ?>
106 |
107 | | =$key;?> |
108 | outputArray($value);
111 | } else {
112 | echo $value;
113 | }
114 |
115 | ?> |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
$_SESSION
123 |
outputArray($_SESSION, 'no_session_vars');
126 | }
127 | ?>
128 |
--------------------------------------------------------------------------------
/system/user/addons/eedt/language/english/lang.eedt.php:
--------------------------------------------------------------------------------
1 | 'Debug Toolbar',
5 | 'ee_debug_toolbar_module_description' => 'Adds an unobtrusive interface for debugging output',
6 | 'extensions' => 'Extensions',
7 | 'ext_name' => 'Debug Toolbar',
8 | 'no_get_vars' => 'No $_GET vars found.',
9 | 'no_cookie_vars' => 'No $_COOKIE vars found.',
10 | 'no_post_vars' => 'No $_POST vars found.',
11 | 'no_session_vars' => 'No Session vars found.',
12 | 'time' => 'Time',
13 | 'config' => 'Config',
14 | 'configuration_data' => 'Configuration Data',
15 | 'memory' => 'Memory',
16 | 'in' => 'in',
17 | 'database' => 'Database',
18 | 'variables' => 'Variables',
19 | 'credits' => 'Credits',
20 | 'files' => 'Files',
21 | 'ee_session' => 'EE Session',
22 | 'file_information' => 'File Information',
23 | 'files_included' => 'Files Included',
24 | 'system_paths' => 'System Paths',
25 | 'headers' => 'Headers',
26 | 'app' => 'App',
27 | 'themes' => 'Themes',
28 | 'third_party' => 'Third Party',
29 | 'third_party_themes' => 'Third Party Themes',
30 | 'javascript' => 'Javascript',
31 | 'application_files' => 'Application Files',
32 | 'template_debugging' => 'Template Debugging',
33 | 'templates_not_enabled' => 'Templates Not Enabled',
34 | 'benchmarks' => 'Benchmarks',
35 | 'configuration' => 'Configuration',
36 | 'database_queries' => 'Database Queries',
37 | 'disabled' => 'Disabled',
38 | 'enabled' => 'Enabled',
39 | 'query_cache_is' => 'EE Query Cache is',
40 | 'mysql_query_cache_is' => 'MySQL Query Cache is',
41 | 'adapter' => 'Adaptor',
42 | 'member_themes' => 'Member Themes',
43 | 'bootstrap_file' => 'Bootstrap File',
44 | 'third_party_addon' => 'Third Party Add-ons',
45 | 'other_files' => 'Other Files',
46 | 'expressionengine_core' => 'ExpressionEngine Core Files',
47 | 'first_party_modules' => 'First Party Modules',
48 | 'theme' => 'Theme',
49 | 'theme_instructions' => 'Select the theme you want the Toolbar to use.',
50 | //'contributor_list' => 'Eric Lamb (mithra62) & Christopher Imrie',
51 | 'addon_developers' => 'Add-on Developers',
52 | 'toolbar_position' => 'Toolbar Position',
53 | 'toolbar_position_instructions' => 'Where do you want the toolbar to appear on the page?',
54 | 'eedt_in' => 'in',
55 | 'requested_url' => 'Requested URL',
56 | 'add_ons' => 'Add-ons',
57 |
58 | 'eedt.settings' => 'Settings',
59 | 'eedt.save' => 'Save',
60 | 'eedt.saving' => 'saving...',
61 | 'eedt.form.theme' => 'Theme',
62 | 'eedt.form.desc.theme' => 'Select the theme you want the Toolbar to use.',
63 | 'eedt.form.toolbar_position' => 'Toolbar Position',
64 | 'eedt.form.desc.toolbar_position' => 'Where do you want the toolbar to appear on the page?',
65 | 'eedt.form.header.settings' => 'General',
66 | 'eedt.header.settings_save' => 'Debug Toolbar Settings',
67 | 'eedt.settings_saved' => 'Settings Saved',
68 | 'eedt.templates_used' => 'Templates Used',
69 | 'eedt.profiler_not_enabled' => 'The Debug Profiler isn\'t enabled; your debug output will be limited to what\'s available instead.',
70 | 'eedt.profiler_enabled_non_sa' => 'Your debug details are available for non Super Admins! Be VERY careful in production!',
71 | 'eedt.path_constants' => 'Path Constants',
72 |
73 | 'eedt_perf_alerts_module_name' => 'Debug Toolbar - Perfomance Alerts',
74 | 'eedt_perf_alerts_module_description' => 'Adds notifications to toolbar on suspicous performance',
75 | 'eedt_perf_alerts.form.max_exec_time' => 'Maximum Execution Time',
76 | 'eedt_perf_alerts.form.desc.form.max_exec_time' => 'What is the most time allowed for your ExpressionEngine site before throwing an alarm. You can use decimal format.',
77 | 'eedt_perf_alerts.form.max_memory' => 'Maximum Memory',
78 | 'eedt_perf_alerts.form.desc.form.max_memory' => 'How much memory, in MB, is too much? You must use decimal format.',
79 | 'eedt_perf_alerts.form.max_queries' => 'Maximum SQL Queries',
80 | 'eedt_perf_alerts.form.desc.form.max_queries' => 'How many SQL queries are too many for the site?',
81 | 'eedt_perf_alerts.form.max_sql_time' => 'Maximum SQL Execution Time',
82 | 'eedt_perf_alerts.form.desc.form.max_sql_time' => 'How much much time is too much for your expected SQL load?',
83 | 'eedt_perf_alerts.form.max_query_time' => 'Maximum Query Time',
84 | 'eedt_perf_alerts.form.desc.form.max_query_time' => 'What is the maximum amount of time an individual SQL query should take to load?',
85 | 'eedt_perf_alerts.form.max_query_memory' => 'Maximum Query Memory',
86 | 'eedt_perf_alerts.form.desc.form.max_query_memory' => 'What is the maximum amount of memory, in bytes, an individual SQL query should use?',
87 | 'eedt_errors.form.allowed_roles' => 'Allowed Roles',
88 | 'eedt_errors.form.desc.allowed_roles' => 'Which Member Roles are allowed to view the Toolbar. BE VERY CAREFUL WITH THIS SETTING.',
89 | 'total' => 'Total',
90 |
91 | 'eedt_perf_alerts.form.header.settings' => 'Performance Alerts',
92 | 'eedt.no_registered_cookies' => 'No Registered Cookies',
93 | 'eedt.no_unregistered_cookies' => 'No Unregistered Cookies',
94 | ];
95 |
--------------------------------------------------------------------------------
/system/user/addons/eedt/Services/ConfigService.php:
--------------------------------------------------------------------------------
1 | overrides);
246 | foreach($pieces AS $key => $value) {
247 | $pieces[$key] = trim($value);
248 | }
249 |
250 | return $pieces;
251 | }
252 |
253 | /**
254 | * Compiles the Config details and removes unwanted items
255 | * @return array
256 | */
257 | public function getConfig(): array
258 | {
259 | $vars = ee()->config->config;
260 | $settings = ee('eedt:ToolbarService')->getSettings();
261 | if (isset($settings['hidden_config_items']) &&
262 | is_array($settings['hidden_config_items'])) {
263 | foreach ($settings['hidden_config_items'] as $value) {
264 | if (isset($vars[$value])) {
265 | unset($vars[$value]);
266 | }
267 | }
268 | }
269 |
270 | return $vars;
271 | }
272 | }
--------------------------------------------------------------------------------
/system/user/addons/eedt/Panels/Model.php:
--------------------------------------------------------------------------------
1 | name = $name;
98 | }
99 |
100 | /**
101 | * @return string
102 | */
103 | public function getName(): string
104 | {
105 | return $this->name;
106 | }
107 |
108 | /**
109 | * @return string
110 | */
111 | public function getTarget(): string
112 | {
113 | return $this->target_prefix . $this->getName() . $this->target_suffix;
114 | }
115 |
116 | /**
117 | * @param string $label
118 | */
119 | function setButtonLabel(string $label)
120 | {
121 | $this->button_label = $label;
122 | }
123 |
124 | /**
125 | * @return string
126 | */
127 | public function getButtonLabel(): string
128 | {
129 | return $this->button_label;
130 | }
131 |
132 | /**
133 | * @param string $filename
134 | */
135 | public function setButtonIcon(string $filename)
136 | {
137 | $this->button_icon = $filename;
138 | }
139 |
140 | /**
141 | * @return string
142 | */
143 | public function getButtonIcon()
144 | {
145 | return $this->button_icon;
146 | }
147 |
148 | /**
149 | * @param string $text
150 | */
151 | public function setButtonIconAltText($text = "")
152 | {
153 | $this->button_icon_alt_title = $text;
154 | }
155 |
156 | /**
157 | * @return string
158 | */
159 | public function getButtonIconAltText()
160 | {
161 | if ($this->button_icon_alt_title) {
162 | return $this->button_icon_alt_title;
163 | }
164 |
165 | return $this->getButtonLabel();
166 | }
167 |
168 | /**
169 | * @param string $html
170 | */
171 | public function setPanelContents(string $html = ''): void
172 | {
173 | $this->output = $html;
174 | }
175 |
176 | /**
177 | * @return string
178 | */
179 | public function getPanelContents(): string
180 | {
181 | return $this->output;
182 | }
183 |
184 | /**
185 | * @param string $css
186 | */
187 | public function setPanelCssClass(string $css)
188 | {
189 | $this->panel_css_class = $css;
190 | }
191 |
192 | /**
193 | * @return string
194 | */
195 | public function getPanelCssClass(): string
196 | {
197 | return $this->panel_css_class;
198 | }
199 |
200 | /**
201 | * @param string $filename
202 | * @param boolean $page_load
203 | */
204 | function addJs(string $filename, bool $page_load = false)
205 | {
206 | if ($page_load) {
207 | $this->page_load_js[] = $filename;
208 | return;
209 | }
210 | $this->js[] = $filename;
211 | }
212 |
213 | /**
214 | * @return array
215 | */
216 | public function getJs(): array
217 | {
218 | return $this->js;
219 | }
220 |
221 | /**
222 | * @return array
223 | */
224 | public function getPageLoadJs(): array
225 | {
226 | return $this->page_load_js;
227 | }
228 |
229 | /**
230 | * @param string $filename
231 | * @param boolean $page_load
232 | */
233 | public function addCss(string $filename, bool $page_load = false)
234 | {
235 | if ($page_load) {
236 | $this->page_load_css[] = $filename;
237 | return;
238 | }
239 | $this->css[] = $filename;
240 | }
241 |
242 | /**
243 | * @return array
244 | */
245 | public function getCss()
246 | {
247 | return $this->css;
248 | }
249 |
250 | /**
251 | * @return array
252 | */
253 | public function getPageLoadCss()
254 | {
255 | return $this->page_load_css;
256 | }
257 |
258 | /**
259 | * @param int $injection_point
260 | * @return void
261 | */
262 | function setInjectionPoint(int $injection_point = Model::PANEL_IN_TOOLBAR)
263 | {
264 | $this->injection_point = $injection_point;
265 | }
266 |
267 | /**
268 | * @return int
269 | */
270 | public function getInjectionPoint(): int
271 | {
272 | return $this->injection_point;
273 | }
274 |
275 | /**
276 | * @param bool $enabled
277 | */
278 | public function setShowButton(bool $enabled = true)
279 | {
280 | $this->show_button = $enabled;
281 | }
282 |
283 | /**
284 | * @return bool
285 | */
286 | public function showButton(): bool
287 | {
288 | return $this->show_button;
289 | }
290 |
291 | /**
292 | * @return string
293 | */
294 | public function getPanelFetchUrl(): string
295 | {
296 | return $this->panel_fetch_url;
297 | }
298 |
299 | /**
300 | * @param string $panel_fetch_url
301 | */
302 | public function setPanelFetchUrl($panel_fetch_url)
303 | {
304 | $this->panel_fetch_url = str_replace("&", "&", $panel_fetch_url);
305 | }
306 | }
307 |
--------------------------------------------------------------------------------
/themes/user/eedt/themes/hot_dog_stand/css/eedt.css:
--------------------------------------------------------------------------------
1 | /**
2 | * EE Debug Toolbar CSS
3 | */
4 | #Eedt_debug_toolbar {
5 | font: 11px/1.4em Lucida Grande, Lucida Sans Unicode, sans-serif;
6 | position: fixed;
7 | bottom: 5px;
8 | left: 0px;
9 | color: #000;
10 | z-index: 1000;
11 | display: none;
12 | }
13 |
14 | #Eedt_debug_toolbar.top {
15 | bottom: auto;
16 | top: 5px;
17 | }
18 |
19 | #Eedt_debug_toolbar.right {
20 | left: auto;
21 | right: 0px;
22 | }
23 |
24 | /* Toolbar open/close */
25 | #Eedt_debug_toolbar .Eedt_debug_toolbar_buttons_wrap {
26 | display: none;
27 | }
28 | #Eedt_debug_toolbar.toolbar-open {
29 | left: 5px;
30 | }
31 | #Eedt_debug_toolbar.right.toolbar-open {
32 | right: 5px;
33 | }
34 | #Eedt_debug_toolbar.toolbar-open .Eedt_debug_toolbar_buttons_wrap {
35 | display: inline;
36 | }
37 |
38 |
39 |
40 | #Eedt_debug_toolbar ol {
41 | margin: 10px 0px;
42 | padding: 0 25px;
43 | list-style-type:lower-alpha;
44 | }
45 |
46 | #Eedt_debug_toolbar li {
47 | margin: 0 0 10px 0;
48 | list-style-type:decimal;
49 | }
50 |
51 | #Eedt_debug_toolbar h4 {
52 | margin: 0;
53 | font-size: 11px;
54 | font-weight: bold;
55 | }
56 |
57 | #Eedt_debug_toolbar_toggle_btn {
58 | font-weight: bold;
59 | background: #c6c6c6;
60 | width: 8px !important;
61 | color: #000;
62 | height: 17px;
63 | cursor: pointer;
64 | float:left;
65 | min-height: 17px;
66 | }
67 |
68 | .Eedt_debug_toolbar_button {
69 | border: 1px solid #000;
70 | border-right: 0px;
71 | background: #ff0000;
72 | padding: 5px 5px;
73 | cursor: pointer;
74 | float:left;
75 | position: relative;
76 | z-index: 2000;
77 | color:#ffffff;
78 | }
79 | #Eedt_debug_toolbar.right .Eedt_debug_toolbar_button {
80 | float: right;
81 | border: 1px solid #000;
82 | border-left: 0px;
83 | }
84 |
85 |
86 | #Eedt_debug_toolbar.left .Eedt_debug_toolbar_button_last,
87 | #Eedt_debug_toolbar.right .Eedt_debug_toolbar_button_last {
88 | border: 1px solid #000;
89 | }
90 |
91 | .Eedt_debug_panel {
92 | text-align: left;
93 | position: absolute;
94 | bottom: 28px;
95 | width: 600px;
96 | height:0;
97 | max-height: 400px;
98 | overflow: scroll;
99 | overflow-x:hidden;
100 | overflow-y:scroll;
101 | background: #ffff00;
102 | padding: 0 5px;
103 | -webkit-transition: height 0.2s linear;
104 | -moz-transition: height 0.2s linear;
105 | -o-transition: height 0.2s linear;
106 | transition: height 0.2s linear;
107 | z-index: 1000;
108 | }
109 |
110 | #Eedt_debug_toolbar.top .Eedt_debug_panel{
111 | bottom: auto;
112 | top:28px;
113 | }
114 | #Eedt_debug_toolbar.right .Eedt_debug_panel{
115 | right:0;
116 | }
117 |
118 | .Eedt_debug_panel.active {
119 | border: 1px solid #000;
120 | padding: 5px;
121 | height:600px;
122 | display: block;
123 | overflow: scroll;
124 | overflow-x: hidden;
125 | overflow-y: scroll;
126 | }
127 |
128 |
129 | #EEDebug_exception {
130 | border: 1px solid #CD0A0A;
131 | display: block;
132 | }
133 |
134 |
135 | .Eedt_debug_panel code {
136 | background-color: #E8E8E8;
137 | padding:0;
138 | margin:0;
139 | border: 0;
140 | display:inline-block;
141 | font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
142 | font-size: 11px;
143 | }
144 |
145 | .Eedt_debug_panel pre {
146 | font: 11px/1.4em Monaco, Lucida Console, monospace;
147 | margin: 0 0 0 22px;
148 | word-wrap: break-word;
149 | }
150 |
151 | .Eedt_debug_panel h4 {
152 | font-size: 11px;
153 | font-weight: bold;
154 | margin: 0;
155 | color: #000;
156 | }
157 |
158 | #Eedt_debug_toolbar .Eedt_debug_panel.Eedt_debug_panel_loading{
159 | background-image: url(data:image/gif;base64,R0lGODlhIAAgAIQAAKyqrNza3MTGxOzu7LS2tPz6/OTm5MzOzLSytPT29Ly+vKyurOTi5MzKzPTy9Ly6vPz+/Ozq7NTS1Ojo6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCQATACwAAAAAIAAgAAAF2+AkjuQ0JEUxGYTSBEYpz1EC3fcUATywNLHZzIErrnq9xUFIihSKBUeExDgokI+gcIArTJkMAW+hLUWm3AGzFFAwTF9SKr6eDVIlIkRVFz4hDiMROGp9djhfNnuGTIoJOoiMQoM5XIuSQooOmphCeg5/dJ2CN38Qo0KIZ6g0q6x1f68lpaGyIpQFnLaWCXp8spqUEKKdwiKOwDePkDeFo5bDI4q/nX/LI0/EjFzUt2gFznV3aNomOAnlt9PpOqZ7A3QRJ1Dsx0WlzPfXfTX3+aX1aGzCMyhXoDUhAAAh+QQJCQAUACwAAAAAIAAgAISsqqzc2tzEwsTs7uy0trTk5uTMzsz8+vzk4uTMysz09vS8vrysrqzc3tzExsT08vS8urzs6uzU0tT8/vzo6OgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF3iAljiQ1KMdBRakylHC8KlNdr3atRHL85DYccPLojVi5w4M3GjwOSaZsYDtIYxFa7UqK8Kgv4+jJaxRgKa6Y1GBASr+Jah0jAACGoy1MLwXuDAgiWnN9MAJ3DkITaoYUbQAMEVRyjjILdwFaRZYwEolQjJ0wCHcLQaMwDAAEXo2psHShsSQ1KVu0QgebuZQKcYWwmxE2r33ENxRaCrHLIsgTfJaUooO2qaHMJFDGYlTBz18H0kYDViav1DtGWbbdSFUDV5Na7mv1VYs52nTtOfpyusmI8ACFCmK7OPUIAQAh+QQJCQAVACwAAAAAIAAgAISsqqzc2tzEwsTs7uy0trTk5uTMzsz8+vy0srTk4uTMysz09vS8vrysrqzc3tzExsT08vS8urzs6uzU0tT8/vzo6OgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF3mAljmQ1LMdRSekylHC8LlRdr3a9SHIM5TYckALpjVi5A4Q3GkAOSaZsYDtIYxJa7UqS8Kgv4+j55VZSZnEzVfpRVOoYlHi0heMl6lakheNhWgtCFGl/EkF6fn+ANRBaRYs+jXOFi4dvQZEyNl6VkZ2aeHOhMQgNDJSkJAkAABGPqiMTrQ9uiqQMrQGXhLEJDQANBRWBsQ+0Irx3kQGtDQkjfaQErQYlUJ5GzQQwXiYHy0YDVhUO0DF6FDtGWTXkPUhVA1cSJ1FqWkmDOYJ47Tn73mTD4ojNoQMLIPUIAQAh+QQJCQATACwAAAAAIAAgAISsqqzU1tTs7uy8vrzk4uT8+vy0trTMzszc3tz09vTExsTs6uysrqzc2tz08vTEwsTk5uT8/vy8urzo6OgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF3OAkjuQkJEUxLWkilHC8JlFdr3adLHLs5DYcMOLojVi5goM3EjgKSaZMYCtIYwta7Upa8Kgv4+j55U5SZnEzVfpFVOoYlHi0heMl6lakheNhWglCEWl/C0F6fn+ANQ5aRYs+jXOFi4dvQZEyNl6VkZ2aeHOhMTUpe6R1b4+pTTpuiqSPl4SttHw6rYEitHeRerW4b6RzgiRQnkZUsStfBb5GCAMEE0tTNjtGBAoAAAYQRkhVAlcQAQ8M3d7gYlpJExDp6t0H7GpZQCvzDAoImguO2EAwIEFBAHsxQgAAIfkECQkAEgAsAAAAACAAIACErKqs1NbU7O7svL685OLk/Pr8tLa0xMbE9Pb07OrsrK6s3N7c9PL0xMLE5Obk/P78vLq8zMrM6OjoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdygJI6kJCBFISUpIpRwvCJPXa92jSRyzOQ2HPDB6I1YuQKDNxIwCkmmTGArSGMJWu1KSvCoL+Po+eVKUmZxM1X6PVTqGJR4tIXjJepWpIXjYVoIQg9pfwlBen5/gDUMWkWLPo1zhYuHb0GRMjZelZGdmnhzoTE1KXukdW+PqU06boqkj5eErbR8Oq2BIrR3kXq1uG+kc4IkUJ5GVLErPAsQC3gCViaFCwoAAAcORlmmngQQ2QAKDQHcR9NRYg4R2OMAEIM5xnEEB+8ABvNvyTEOAQ4YaCDBwSpIPUIAACH5BAkJABMALAAAAAAgACAAhKyqrNTW1Ozu7Ly+vLS2tOTi5Pz6/MTGxLSytPT29Ozq7KyurNze3PTy9MTCxLy6vOTm5Pz+/MzKzOjo6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXe4CSO5CQkhjEpaSKUcLwmUV2vdp0octzkNhww0uiNWDlDgzcSNAxJpkxgM0hjClrtSlLwqC/j6PnlTlJmcTNV+kVU6hiUeLSF4yXqVqSF42FaCUIRaX8KQXp+f4A1DVpFiz6Nc4WLh29BkTI2XpWRnZp4DwsEoTE1Bg8AABCmXagHqwGuYzoBqw60fI0QCwALBbSXESKxAAe0gSIFvgAMpnqEIxKrA6ZzgiMQBATBoVSKy8ECBndi5GUywztGWaieSFUCVwonUWpaSYM52XHuOfveeFLniM0hAwkg9QgBACH5BAkJABIALAAAAAAgACAAhKyqrNTW1Ozu7Ly+vOTi5Pz6/LS2tMzOzPT29MTGxOzq7KyurNze3PTy9MTCxOTm5Pz+/Ly6vOjo6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXhoCSOpCQgRSEpKSKUcLwiUF2vdo0octzkNhwQ0uiNWLlCgzcSNApJpkxgK0hjClrtSiI8TIWXcfTkCbiPiIEw7glSpQMAMGjLoMQRYQ5g2GNUWyIJcwl/MloIEg8LAAtshzAKQQFzdZExeA1yAAGYPjUNEXNfnyWTEAUGjqYxQa0yCrKwY3i0JDUpgreoBVpFt4EIP6m3Er+oEFyYySKJtM9CEGKfgcojWiqmeIokUMt/VNoks2/UY29m4CY2O0ZZuesiSFVn5CdRbVpJ0jnddvBy9Eslr4eCBihUTPIFrEcIACH5BAkJABMALAAAAAAgACAAhKyqrNTW1Ozu7MTCxOTi5Pz6/LS2tMzKzNze3PT29Ozq7KyurNza3PTy9MTGxOTm5Pz+/Ly6vMzOzOjo6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXe4CSO5MMc0TApRZEIZCyTxLEAuDE9UN8niplQgisCdAKfsiGkRYqLgeRBEjQKykKwybgBHIjmKuHbyhRBhiEgJl2DAvOoRW0Lk4VYo5e3z7AQTCIKPjB+Mns9W2QQfYcyjAkrZY8zhD0TSY2VQowNnpwziVeKoWd8PqYzZWiqZ62uYoCxJHyAcqqXLj2CsZoJiY6unpcQuJzFIpGxy5M9hqGaxiOMwpWAkiRYx4d4r5kF0G0CWpncmT5AYgrV54OAfHEkCgKMfO7USnzO+tl+7Pr43Qul4FOLSS56CQkBADs=);
160 | background-repeat: no-repeat;
161 | background-position: center center;
162 | background-color: #ddd;
163 | }
164 | #Eedt_debug_toolbar .Eedt_debug_panel.Eedt_debug_panel_loading * {
165 | display: none !important;
166 | }
167 |
168 | #Eedt_debug_toolbar .flash {
169 | color: #000;
170 | }
--------------------------------------------------------------------------------
/themes/user/eedt/themes/default/css/eedt.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Core Overrides
3 | */
4 | #Eedt_debug_toolbar, #Eedt_debug_toolbar * {
5 | box-sizing: content-box !important;
6 | margin: 0;
7 | padding:0;
8 | font: 12px/1.4em 'Lucida Grande', 'Lucida Sans Unicode', sans-serif;
9 | }
10 | #Eedt_debug_toolbar img {
11 | width: auto;
12 | height: auto;
13 | display: inline;
14 | }
15 |
16 | /**
17 | * EEDT Default Theme
18 | */
19 | #Eedt_debug_toolbar {
20 | position: fixed;
21 | bottom: 5px;
22 | left: 0px;
23 | color: #000;
24 | z-index: 1000;
25 | display: none;
26 | }
27 |
28 | #Eedt_debug_toolbar.top {
29 | bottom: auto;
30 | top: 5px;
31 | }
32 |
33 | #Eedt_debug_toolbar.right {
34 | left: auto;
35 | right: 0px;
36 | }
37 |
38 | /* Toolbar open/close */
39 | #Eedt_debug_toolbar .Eedt_debug_toolbar_buttons_wrap {
40 | display: none;
41 | }
42 | #Eedt_debug_toolbar.toolbar-open {
43 | left: 5px;
44 | }
45 | #Eedt_debug_toolbar.right.toolbar-open {
46 | right: 5px;
47 | }
48 | #Eedt_debug_toolbar.toolbar-open .Eedt_debug_toolbar_buttons_wrap {
49 | display: inline;
50 | }
51 |
52 |
53 |
54 | #Eedt_debug_toolbar ol {
55 | margin: 10px 0px;
56 | padding: 0 25px;
57 | list-style-type:lower-alpha;
58 | }
59 |
60 | #Eedt_debug_toolbar li {
61 | margin: 0 0 10px 0;
62 | list-style-type:decimal;
63 | }
64 |
65 | #Eedt_debug_toolbar h4 {
66 | margin: 0;
67 | font-size: 14px;
68 | font-weight: bold;
69 | }
70 |
71 | #Eedt_debug_toolbar_toggle_btn {
72 | font-weight: bold;
73 | background: #BFBFBF;
74 | width: 8px !important;
75 | height: 17px;
76 | cursor: pointer;
77 | float:left;
78 | }
79 |
80 | #Eedt_debug_toolbar .Eedt_debug_toolbar_button {
81 | border: 1px solid #999;
82 | border-right: 0px;
83 | background: #DFDFDF;
84 | padding: 5px 5px;
85 | cursor: pointer;
86 | float:left;
87 | position: relative;
88 | z-index: 2000;
89 | min-height: 17px;
90 | }
91 | #Eedt_debug_toolbar.right .Eedt_debug_toolbar_button {
92 | float: right;
93 | border: 1px solid #999;
94 | border-left: 0px;
95 | }
96 |
97 |
98 | #Eedt_debug_toolbar.left .Eedt_debug_toolbar_button_last,
99 | #Eedt_debug_toolbar.right .Eedt_debug_toolbar_button_last {
100 | border: 1px solid #999;
101 | }
102 |
103 | #Eedt_debug_toolbar .Eedt_debug_panel {
104 | text-align: left;
105 | position: absolute;
106 | bottom: 28px;
107 | width: 600px;
108 | height:0;
109 | max-height: 400px;
110 | overflow: scroll;
111 | overflow-x:hidden;
112 | overflow-y:scroll;
113 | background: #E8E8E8;
114 | padding: 0 5px;
115 | -webkit-transition: height 0.2s linear;
116 | -moz-transition: height 0.2s linear;
117 | -o-transition: height 0.2s linear;
118 | transition: height 0.2s linear;
119 | z-index: 1000;
120 | }
121 |
122 | #Eedt_debug_toolbar.top .Eedt_debug_panel{
123 | bottom: auto;
124 | top:28px;
125 | }
126 | #Eedt_debug_toolbar.right .Eedt_debug_panel{
127 | right:0;
128 | }
129 |
130 | #Eedt_debug_toolbar .Eedt_debug_panel.active {
131 | border: 1px solid #999;
132 | padding: 5px;
133 | height:600px;
134 | display: block;
135 | overflow: scroll;
136 | overflow-x: hidden;
137 | overflow-y: scroll;
138 | }
139 |
140 |
141 | #EEDebug_exception {
142 | border: 1px solid #CD0A0A;
143 | display: block;
144 | }
145 |
146 |
147 | #Eedt_debug_toolbar .Eedt_debug_panel code {
148 | background-color: #E8E8E8;
149 | padding:0;
150 | margin:0;
151 | border: 0;
152 | display:inline-block;
153 | font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
154 | font-size: 12px;
155 | }
156 |
157 | #Eedt_debug_toolbar .Eedt_debug_panel pre {
158 | font: 12px/1.4em Monaco, Lucida Console, monospace;
159 | margin: 0 0 0 22px;
160 | word-wrap: break-word;
161 | }
162 |
163 | #Eedt_debug_toolbar .Eedt_debug_panel h4 {
164 | font-size: 14px;
165 | font-weight: bold;
166 | margin: 0;
167 | color: #000;
168 | }
169 |
170 | #Eedt_debug_toolbar .Eedt_debug_panel.Eedt_debug_panel_loading{
171 | background-image: url(data:image/gif;base64,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);
172 | background-repeat: no-repeat;
173 | background-position: center center;
174 | background-color: #ddd;
175 | }
176 | #Eedt_debug_toolbar .Eedt_debug_panel.Eedt_debug_panel_loading * {
177 | display: none !important;
178 | }
179 | #Eedt_debug_toolbar .flash {
180 | color: #FF0000;
181 | }
182 |
183 | #Eedt_debug_toolbar .nice {
184 | color: #3548e7;
185 | }
--------------------------------------------------------------------------------