Permalink
Browse files

Highlight code in textarea by CodeMirror

  • Loading branch information...
1 parent 48df7aa commit bf54c13dfe04907abd589fb89379206c7c1da49b @vrana vrana committed Apr 16, 2012
Showing with 28 additions and 6 deletions.
  1. +3 −0 .gitmodules
  2. +3 −1 adminer/include/design.inc.php
  3. +3 −2 adminer/include/editing.inc.php
  4. +14 −3 adminer/sql.inc.php
  5. +2 −0 adminer/static/default.css
  6. +1 −0 changes.txt
  7. +1 −0 compile.php
  8. +1 −0 externals/CodeMirror2
View
3 .gitmodules
@@ -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
View
4 adminer/include/design.inc.php
@@ -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()) {
@@ -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">
View
5 adminer/include/editing.inc.php
@@ -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)
View
17 adminer/sql.inc.php
@@ -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;
@@ -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.')
@@ -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>
View
2 adminer/static/default.css
@@ -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; }
View
1 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
View
1 compile.php
@@ -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);
1 externals/CodeMirror2
@@ -0,0 +1 @@
+Subproject commit 8feb48b37c3678a102b2de41e24f0f43bee86f50

0 comments on commit bf54c13

Please sign in to comment.