mirror of
https://github.com/vrana/adminer.git
synced 2025-08-06 22:56:46 +02:00
Defer syntax highlighting
This commit is contained in:
@@ -1005,13 +1005,13 @@ class Adminer {
|
|||||||
*/
|
*/
|
||||||
function syntaxHighlighting(array $tables): void {
|
function syntaxHighlighting(array $tables): void {
|
||||||
// this is matched by compile.php
|
// this is matched by compile.php
|
||||||
echo script_src("../externals/jush/modules/jush.js");
|
echo script_src("../externals/jush/modules/jush.js", true);
|
||||||
echo script_src("../externals/jush/modules/jush-autocomplete-sql.js");
|
echo script_src("../externals/jush/modules/jush-autocomplete-sql.js", true);
|
||||||
echo script_src("../externals/jush/modules/jush-textarea.js");
|
echo script_src("../externals/jush/modules/jush-textarea.js", true);
|
||||||
echo script_src("../externals/jush/modules/jush-txt.js");
|
echo script_src("../externals/jush/modules/jush-txt.js", true);
|
||||||
echo script_src("../externals/jush/modules/jush-js.js");
|
echo script_src("../externals/jush/modules/jush-js.js", true);
|
||||||
if (support("sql")) {
|
if (support("sql")) {
|
||||||
echo script_src("../externals/jush/modules/jush-" . JUSH . ".js");
|
echo script_src("../externals/jush/modules/jush-" . JUSH . ".js", true);
|
||||||
echo "<script" . nonce() . ">\n";
|
echo "<script" . nonce() . ">\n";
|
||||||
if ($tables) {
|
if ($tables) {
|
||||||
$links = array();
|
$links = array();
|
||||||
@@ -1028,13 +1028,11 @@ class Adminer {
|
|||||||
$tablesColumns[$table][] = $field["field"];
|
$tablesColumns[$table][] = $field["field"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
echo "autocompleter = jush.autocompleteSql('" . idf_escape("") . "', " . json_encode($tablesColumns) . ");\n";
|
echo "addEventListener('DOMContentLoaded', () => { autocompleter = jush.autocompleteSql('" . idf_escape("") . "', " . json_encode($tablesColumns) . "); });\n";
|
||||||
}
|
}
|
||||||
echo "</script>\n";
|
echo "</script>\n";
|
||||||
}
|
}
|
||||||
echo script("syntaxHighlighting('" . preg_replace('~^(\d\.?\d).*~s', '\1', connection()->server_info) . "'"
|
echo script("syntaxHighlighting('" . preg_replace('~^(\d\.?\d).*~s', '\1', connection()->server_info) . "', '" . connection()->flavor . "');");
|
||||||
. (connection()->flavor == 'maria' ? ", 'maria'" : (connection()->flavor == 'cockroach' ? ", 'cockroach'" : "")) . ");"
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Print databases list in menu */
|
/** Print databases list in menu */
|
||||||
|
@@ -7,8 +7,8 @@ function script(string $source, string $trailing = "\n"): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Return <script src> element */
|
/** Return <script src> element */
|
||||||
function script_src(string $url): string {
|
function script_src(string $url, bool $defer = false): string {
|
||||||
return "<script src='" . h($url) . "'" . nonce() . "></script>\n";
|
return "<script src='" . h($url) . "'" . nonce() . ($defer ? " defer" : "") . "></script>\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get a nonce="" attribute with CSP nonce */
|
/** Get a nonce="" attribute with CSP nonce */
|
||||||
|
@@ -7,56 +7,58 @@ let autocompleter; // set in adminer.inc.php
|
|||||||
* @param [string]
|
* @param [string]
|
||||||
*/
|
*/
|
||||||
function syntaxHighlighting(version, vendor) {
|
function syntaxHighlighting(version, vendor) {
|
||||||
if (window.jush) {
|
addEventListener('DOMContentLoaded', () => {
|
||||||
jush.create_links = 'target="_blank" rel="noreferrer noopener"';
|
if (window.jush) {
|
||||||
if (version) {
|
jush.create_links = 'target="_blank" rel="noreferrer noopener"';
|
||||||
for (let key in jush.urls) {
|
if (version) {
|
||||||
let obj = jush.urls;
|
for (let key in jush.urls) {
|
||||||
if (typeof obj[key] != 'string') {
|
let obj = jush.urls;
|
||||||
obj = obj[key];
|
if (typeof obj[key] != 'string') {
|
||||||
key = 0;
|
obj = obj[key];
|
||||||
if (vendor == 'maria') {
|
key = 0;
|
||||||
for (let i = 1; i < obj.length; i++) {
|
if (vendor == 'maria') {
|
||||||
obj[i] = obj[i]
|
for (let i = 1; i < obj.length; i++) {
|
||||||
.replace('.html', '/')
|
obj[i] = obj[i]
|
||||||
.replace('-type-syntax', '-data-types')
|
.replace('.html', '/')
|
||||||
.replace(/numeric-(data-types)/, '$1-$&')
|
.replace('-type-syntax', '-data-types')
|
||||||
.replace(/replication-options-(master|binary-log)\//, 'replication-and-binary-log-system-variables/')
|
.replace(/numeric-(data-types)/, '$1-$&')
|
||||||
.replace('server-options/', 'server-system-variables/')
|
.replace(/replication-options-(master|binary-log)\//, 'replication-and-binary-log-system-variables/')
|
||||||
.replace('innodb-parameters/', 'innodb-system-variables/')
|
.replace('server-options/', 'server-system-variables/')
|
||||||
.replace(/#(statvar|sysvar|option_mysqld)_(.*)/, '#$2')
|
.replace('innodb-parameters/', 'innodb-system-variables/')
|
||||||
.replace(/#sysvar_(.*)/, '#$1')
|
.replace(/#(statvar|sysvar|option_mysqld)_(.*)/, '#$2')
|
||||||
;
|
.replace(/#sysvar_(.*)/, '#$1')
|
||||||
|
;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
obj[key] = (vendor == 'maria' ? obj[key].replace('dev.mysql.com/doc/mysql', 'mariadb.com/kb') : obj[key]) // MariaDB
|
obj[key] = (vendor == 'maria' ? obj[key].replace('dev.mysql.com/doc/mysql', 'mariadb.com/kb') : obj[key]) // MariaDB
|
||||||
.replace('/doc/mysql', '/doc/refman/' + version) // MySQL
|
.replace('/doc/mysql', '/doc/refman/' + version) // MySQL
|
||||||
;
|
;
|
||||||
if (vendor != 'cockroach') {
|
if (vendor != 'cockroach') {
|
||||||
obj[key] = obj[key].replace('/docs/current', '/docs/' + version); // PostgreSQL
|
obj[key] = obj[key].replace('/docs/current', '/docs/' + version); // PostgreSQL
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (window.jushLinks) {
|
||||||
|
jush.custom_links = jushLinks;
|
||||||
|
}
|
||||||
|
jush.highlight_tag('code', 0);
|
||||||
|
adminerHighlighter = els => jush.highlight_tag(els, 0);
|
||||||
|
for (const tag of qsa('textarea')) {
|
||||||
|
if (/(^|\s)jush-/.test(tag.className)) {
|
||||||
|
const pre = jush.textarea(tag, autocompleter);
|
||||||
|
if (pre) {
|
||||||
|
setupSubmitHighlightInput(pre);
|
||||||
|
tag.onchange = () => {
|
||||||
|
pre.textContent = tag.value;
|
||||||
|
pre.oninput();
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (window.jushLinks) {
|
});
|
||||||
jush.custom_links = jushLinks;
|
|
||||||
}
|
|
||||||
jush.highlight_tag('code', 0);
|
|
||||||
adminerHighlighter = els => jush.highlight_tag(els, 0);
|
|
||||||
for (const tag of qsa('textarea')) {
|
|
||||||
if (/(^|\s)jush-/.test(tag.className)) {
|
|
||||||
const pre = jush.textarea(tag, autocompleter);
|
|
||||||
if (pre) {
|
|
||||||
setupSubmitHighlightInput(pre);
|
|
||||||
tag.onchange = () => {
|
|
||||||
pre.textContent = tag.value;
|
|
||||||
pre.oninput();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Get value of dynamically created form field
|
/** Get value of dynamically created form field
|
||||||
|
@@ -334,7 +334,7 @@ if ($_SESSION["lang"]) {
|
|||||||
$file = str_replace('<?php echo LANG; ?>', $_SESSION["lang"], $file);
|
$file = str_replace('<?php echo LANG; ?>', $_SESSION["lang"], $file);
|
||||||
}
|
}
|
||||||
$file = str_replace('echo script_src("static/editing.js");' . "\n", "", $file); // merged into functions.js
|
$file = str_replace('echo script_src("static/editing.js");' . "\n", "", $file); // merged into functions.js
|
||||||
$file = preg_replace('~\s+echo script_src\("\.\./externals/jush/modules/jush-(autocomplete-sql|textarea|txt|js|" \. JUSH \. ")\.js"\);~', '', $file); // merged into jush.js
|
$file = preg_replace('~\s+echo script_src\("\.\./externals/jush/modules/jush-(autocomplete-sql|textarea|txt|js|" \. JUSH \. ")\.js", true\);~', '', $file); // merged into jush.js
|
||||||
$file = preg_replace('~echo .*/jush(-dark)?.css\'>.*~', '', $file); // merged into default.css or dark.css
|
$file = preg_replace('~echo .*/jush(-dark)?.css\'>.*~', '', $file); // merged into default.css or dark.css
|
||||||
if (function_exists('stripTypes')) {
|
if (function_exists('stripTypes')) {
|
||||||
$file = stripTypes($file);
|
$file = stripTypes($file);
|
||||||
|
Reference in New Issue
Block a user