Skip to content

Commit

Permalink
Highlight code in textarea by CodeMirror
Browse files Browse the repository at this point in the history
  • Loading branch information
vrana committed Apr 16, 2012
1 parent 48df7aa commit bf54c13
Show file tree
Hide file tree
Showing 8 changed files with 28 additions and 6 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Expand Up @@ -16,3 +16,6 @@
[submodule "JsShrink"]
path = externals/JsShrink
url = git://github.com/vrana/JsShrink.git
[submodule "CodeMirror2"]
path = externals/CodeMirror2
url = git://github.com/marijnh/CodeMirror2.git
4 changes: 3 additions & 1 deletion adminer/include/design.inc.php
Expand Up @@ -4,9 +4,10 @@
* @param string
* @param mixed array("key" => "link=desc", "key2" => array("link", "desc")), null for nothing, false for driver only, true for driver and server
* @param string used after colon in title and heading, will be HTML escaped
* @param string printed in <head>
* @return null
*/
function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
function page_header($title, $error = "", $breadcrumb = array(), $title2 = "", $head = "") {
global $LANG, $adminer, $connection, $drivers;
header("Content-Type: text/html; charset=utf-8");
if ($adminer->headers()) {
Expand Down Expand Up @@ -38,6 +39,7 @@ function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
<link rel="stylesheet" type="text/css" href="adminer.css">
<?php } ?>
<?php } ?>
<?php echo $head; ?>

<body class="<?php echo lang('ltr'); ?> nojs"<?php echo ($_POST ? "" : " onclick=\"return bodyClick(event, '" . h(js_escape(DB) . "', '" . js_escape($_GET["ns"])) . "');\""); // avoid re-post confirmation after refreshing the next page in Google Chrome ?> onkeydown="bodyKeydown(event);" onload="bodyLoad('<?php echo (is_object($connection) ? substr($connection->server_info, 0, 3) : ""); ?>');<?php echo (isset($_COOKIE["adminer_version"]) ? "" : " verifyVersion();"); ?>">
<script type="text/javascript">
Expand Down
5 changes: 3 additions & 2 deletions adminer/include/editing.inc.php
Expand Up @@ -113,10 +113,11 @@ function referencable_primary($self) {
* @param int
* @param int
* @param string
* @param string
* @return null
*/
function textarea($name, $value, $rows = 10, $cols = 80) {
echo "<textarea name='$name' rows='$rows' cols='$cols' class='sqlarea' spellcheck='false' wrap='off' onkeydown='return textareaKeydown(this, event);'>"; // spellcheck, wrap - not valid before HTML5
function textarea($name, $value, $rows = 10, $cols = 80, $id = "") {
echo "<textarea name='$name'" . ($id ? " id='$id'" : "") . " rows='$rows' cols='$cols' class='sqlarea' spellcheck='false' wrap='off' onkeydown='return textareaKeydown(this, event);'>"; // spellcheck, wrap - not valid before HTML5
if (is_array($value)) {
foreach ($value as $val) { // not implode() to save memory
echo h($val[0]) . "\n\n\n"; // $val == array($query, $time)
Expand Down
17 changes: 14 additions & 3 deletions adminer/sql.inc.php
Expand Up @@ -14,7 +14,10 @@
redirect(remove_from_uri("history"));
}

page_header(lang('SQL command'), $error);
$codemirror_path = "../externals/CodeMirror2";
$codemirror_mode = ($jush == "sql" ? "mysql" : "plsql");

page_header(lang('SQL command'), $error, array(), "", "<link rel='stylesheet' href='$codemirror_path/lib/codemirror.css'>");

if (!$error && $_POST) {
$fp = false;
Expand Down Expand Up @@ -173,8 +176,8 @@
} elseif ($_GET["history"] != "") {
$q = $history[$_GET["history"]][0];
}
textarea("query", $q, 20);
echo ($_POST ? "" : "<script type='text/javascript'>document.getElementsByTagName('textarea')[0].focus();</script>\n");
textarea("query", $q, 20, 80, "query");
echo ($_POST ? "" : "<script type='text/javascript'>document.getElementById('query').focus();</script>\n");
echo "<p>" . (ini_bool("file_uploads")
? lang('File upload') . ': <input type="file" name="sql_file"' . ($_FILES && $_FILES["sql_file"]["error"] != 4 ? '' : ' onchange="this.form[\'only_errors\'].checked = true;"') . '> (&lt; ' . ini_get("upload_max_filesize") . 'B)' // ignore post_max_size because it is for all form fields together and bytes computing would be necessary
: lang('File uploads are disabled.')
Expand Down Expand Up @@ -212,3 +215,11 @@
?>

</form>

<script src="<?php echo $codemirror_path; ?>/lib/codemirror.js"></script>
<script src="<?php echo "$codemirror_path/mode/$codemirror_mode/$codemirror_mode.js"; ?>"></script>
<script type="text/javascript">
if (window.CodeMirror) {
CodeMirror.fromTextArea(document.getElementById('query'));
}
</script>
2 changes: 2 additions & 0 deletions adminer/static/default.css
Expand Up @@ -62,6 +62,8 @@ input[type=image] { vertical-align: middle; }
.rtl #breadcrumb { left: auto; right: 21em; margin: 0 -18px 0 0; }
.rtl #lang, .rtl #menu { left: auto; right: 0; }

.CodeMirror { border: 1px inset #777; }

@media print {
#lang, #menu { display: none; }
#content { margin-left: 1em; }
Expand Down
1 change: 1 addition & 0 deletions changes.txt
@@ -1,5 +1,6 @@
Adminer 3.4.0-dev:
Print current time next to executed SQL queries
Highlight code in textarea by CodeMirror
Link to original table in EXPLAIN of SELECT * FROM table t
Replace JSMin by better JavaScript minifier
Ukrainian translation
Expand Down
1 change: 1 addition & 0 deletions compile.php
Expand Up @@ -265,6 +265,7 @@ function compile_file($match) {
$file = preg_replace('~\\.\\./adminer/static/(default\\.css|functions\\.js|favicon\\.ico|loader\\.gif)~', '<?php echo ' . $replace . '"; ?>', $file);
$file = preg_replace('~\\.\\./adminer/static/([^\'"]*)~', '" . ' . $replace, $file);
$file = str_replace("'../externals/jush/'", "location.protocol + '//www.adminer.org/static/'", $file);
$file = str_replace('"../externals/CodeMirror2"', '($_SERVER["HTTPS"] ? "https" : "http") . "://www.adminer.org/static/CodeMirror2"', $file);
$file = preg_replace("~<\\?php\\s*\\?>\n?|\\?>\n?<\\?php~", '', $file);
$file = php_shrink($file);

Expand Down
1 change: 1 addition & 0 deletions externals/CodeMirror2
Submodule CodeMirror2 added at 8feb48

0 comments on commit bf54c13

Please sign in to comment.