diff --git a/adminer/file.inc.php b/adminer/file.inc.php
index 91343f77..75da39d4 100644
--- a/adminer/file.inc.php
+++ b/adminer/file.inc.php
@@ -12,10 +12,10 @@ if ($_GET["file"] == "favicon.ico") {
echo lzw_decompress(compile_file('../adminer/static/favicon.ico', 'lzw_compress'));
} elseif ($_GET["file"] == "default.css") {
header("Content-Type: text/css; charset=utf-8");
- echo lzw_decompress(compile_file('../adminer/static/default.css', 'minify_css'));
+ echo lzw_decompress(compile_file('../adminer/static/default.css;../externals/jush/jush.css', 'minify_css'));
} elseif ($_GET["file"] == "functions.js") {
header("Content-Type: text/javascript; charset=utf-8");
- echo lzw_decompress(compile_file('../adminer/static/functions.js;static/editing.js', 'minify_js'));
+ echo lzw_decompress(compile_file('../adminer/static/functions.js;static/editing.js;../externals/jush/modules/jush.js;../externals/jush/modules/jush-sql.js;../externals/jush/modules/jush-pgsql.js;../externals/jush/modules/jush-sqlite.js;../externals/jush/modules/jush-mssql.js;../externals/jush/modules/jush-oracle.js;../externals/jush/modules/jush-simpledb.js', 'minify_js'));
} else {
header("Content-Type: image/gif");
switch ($_GET["file"]) {
diff --git a/adminer/include/design.inc.php b/adminer/include/design.inc.php
index 6a3930f0..8f4f549c 100644
--- a/adminer/include/design.inc.php
+++ b/adminer/include/design.inc.php
@@ -19,8 +19,11 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
+
+
+
head()) { ?>
diff --git a/adminer/static/editing.js b/adminer/static/editing.js
index 92039c22..b2336a75 100644
--- a/adminer/static/editing.js
+++ b/adminer/static/editing.js
@@ -1,56 +1,35 @@
// Adminer specific functions
-var jushRoot = '../externals/jush/'; // global variable to allow simple customization
-
/** Load syntax highlighting
* @param string first three characters of database system version
*/
function bodyLoad(version) {
- if (jushRoot) {
- // copy of jush.style to load JS and CSS at once
- var link = document.createElement('link');
- link.rel = 'stylesheet';
- link.type = 'text/css';
- link.href = jushRoot + 'jush.css';
- document.getElementsByTagName('head')[0].appendChild(link);
-
- var script = document.createElement('script');
- script.src = jushRoot + 'jush.js';
- script.onload = function () {
- if (window.jush) { // IE runs in case of an error too
- jush.create_links = ' target="_blank" rel="noreferrer"';
- for (var key in jush.urls) {
- var obj = jush.urls;
- if (typeof obj[key] != 'string') {
- obj = obj[key];
- key = 0;
- }
- obj[key] = obj[key]
- .replace(/\/doc\/mysql/, '/doc/refman/' + version) // MySQL
- .replace(/\/docs\/current/, '/docs/' + version) // PostgreSQL
- ;
- }
- if (window.jushLinks) {
- jush.custom_links = jushLinks;
- }
- jush.highlight_tag('code', 0);
- var tags = document.getElementsByTagName('textarea');
- for (var i = 0; i < tags.length; i++) {
- if (/(^|\s)jush-/.test(tags[i].className)) {
- var pre = jush.textarea(tags[i]);
- if (pre) {
- setupSubmitHighlightInput(pre);
- }
- }
+ if (window.jush) {
+ jush.create_links = ' target="_blank" rel="noreferrer"';
+ for (var key in jush.urls) {
+ var obj = jush.urls;
+ if (typeof obj[key] != 'string') {
+ obj = obj[key];
+ key = 0;
+ }
+ obj[key] = obj[key]
+ .replace(/\/doc\/mysql/, '/doc/refman/' + version) // MySQL
+ .replace(/\/docs\/current/, '/docs/' + version) // PostgreSQL
+ ;
+ }
+ if (window.jushLinks) {
+ jush.custom_links = jushLinks;
+ }
+ jush.highlight_tag('code', 0);
+ var tags = document.getElementsByTagName('textarea');
+ for (var i = 0; i < tags.length; i++) {
+ if (/(^|\s)jush-/.test(tags[i].className)) {
+ var pre = jush.textarea(tags[i]);
+ if (pre) {
+ setupSubmitHighlightInput(pre);
}
}
- };
- script.onreadystatechange = function () {
- if (/^(loaded|complete)$/.test(script.readyState)) {
- script.onload();
- }
- };
- document.body.appendChild(script);
+ }
}
}
diff --git a/changes.txt b/changes.txt
index 3f19c43f..e95fb120 100644
--- a/changes.txt
+++ b/changes.txt
@@ -17,6 +17,7 @@ Don't append newlines to uploaded files, bug since Adminer 3.7.0
Don't display SQL edit form on Ctrl+click on the select query, introduced in Adminer 3.6.4
Use MD5 for editing long keys only in supported drivers, bug since Adminer 3.6.4
Don't execute external JavaScript when verifying version
+Include JUSH in the compiled version
Protect CSRF token against BREACH
SQLite: Allow editing primary key
SQLite: Allow editing foreign keys
diff --git a/compile.php b/compile.php
index 3d6b683b..d32fef6a 100755
--- a/compile.php
+++ b/compile.php
@@ -278,7 +278,6 @@ function minify_css($file) {
}
function minify_js($file) {
- $file = str_replace("'../externals/jush/'", "location.protocol + '//www.adminer.org/static/jush/2.0.0/'", $file);
if (function_exists('jsShrink')) {
$file = jsShrink($file);
}
@@ -363,7 +362,7 @@ if ($driver) {
$file = preg_replace_callback('~\\b(include|require) "([^"]*)";~', 'put_file', $file);
$file = str_replace('include "../adminer/include/coverage.inc.php";', '', $file);
if ($driver) {
- $file = preg_replace('(include "../adminer/drivers/(?!' . preg_quote($driver) . ').*\\s*)', '', $file);
+ $file = preg_replace('(include "../adminer/drivers/(?!' . preg_quote($driver) . '\.).*\\s*)', '', $file);
}
$file = preg_replace_callback('~\\b(include|require) "([^"]*)";~', 'put_file', $file); // bootstrap.inc.php
if ($driver) {
@@ -375,6 +374,11 @@ if ($driver) {
if (count($drivers) == 1) {
$file = str_replace('', "" . reset($drivers), $file);
}
+ $file = preg_replace('(;../externals/jush/modules/jush-(?!' . preg_quote($driver == "mysql" ? "sql" : $driver) . '\.)[^.]+.js)', '', $file);
+}
+if ($project == "editor") {
+ $file = preg_replace('~;../externals/jush/jush.css~', '', $file);
+ $file = preg_replace('~;../externals/jush/modules/jush[^.]*.js~', '', $file);
}
$file = preg_replace_callback("~lang\\('((?:[^\\\\']+|\\\\.)*)'([,)])~s", 'lang_ids', $file);
$file = preg_replace_callback('~\\b(include|require) "([^"]*\\$LANG.inc.php)";~', 'put_file_lang', $file);
@@ -386,8 +390,11 @@ if ($_SESSION["lang"]) {
$file = str_replace('', $_SESSION["lang"], $file);
}
$file = str_replace('' . "\n", "", $file);
+$file = str_replace('' . "\n", "", $file);
+$file = str_replace('' . "\n", "", $file);
+$file = str_replace('' . "\n", "", $file);
$file = preg_replace_callback("~compile_file\\('([^']+)'(?:, '([^']*)')?\\)~", 'compile_file', $file); // integrate static files
-$replace = 'h(preg_replace("~\\\\\\\\?.*~", "", ME)) . "?file=\\1&version=' . $VERSION;
+$replace = 'h(preg_replace("~\\\\\\\\?.*~", "", ME)) . "?file=\\1&version=' . $VERSION . ($driver ? '&driver=' . $driver : '');
$file = preg_replace('~\\.\\./adminer/static/(default\\.css|functions\\.js|favicon\\.ico)~', '', $file);
$file = preg_replace('~\\.\\./adminer/static/([^\'"]*)~', '" . ' . $replace, $file);
$file = preg_replace("~<\\?php\\s*\\?>\n?|\\?>\n?<\\?php~", '', $file);
diff --git a/externals/JsShrink b/externals/JsShrink
index 2298c30f..17cbfaca 160000
--- a/externals/JsShrink
+++ b/externals/JsShrink
@@ -1 +1 @@
-Subproject commit 2298c30f3f1fc35596b18044b5bff2fa4fb513fd
+Subproject commit 17cbfacae67dede6d94d94ce92214c8ca31d858e
diff --git a/externals/jush b/externals/jush
index a68f53b5..6185c497 160000
--- a/externals/jush
+++ b/externals/jush
@@ -1 +1 @@
-Subproject commit a68f53b5f66a3bb4dd512f7f4b79a99ecc8fba9a
+Subproject commit 6185c4979c7644b69acd9968ab5ea2d67ee7760b