diff --git a/README.mdown b/README.mdown index 9f9f77e..6ee52c4 100644 --- a/README.mdown +++ b/README.mdown @@ -36,6 +36,7 @@ Changelog - Added a toggle button to expand/collapse all krumo sub-trees at once - Cross-browser compatibility enhancements - Removing a tab (i.e. 4 spaces) on backspace now + - Made tab character(s) configurable (see index.php) - 1.0.0 - Initial Public Release diff --git a/index.php b/index.php index 1b166f6..c0dbfdc 100644 --- a/index.php +++ b/index.php @@ -1,5 +1,10 @@ ' ', +); + /** * PHP Console * @@ -67,6 +72,10 @@ if (isset($_POST['code'])) { + diff --git a/php-console.js b/php-console.js index 832d911..7c6dc67 100644 --- a/php-console.js +++ b/php-console.js @@ -11,9 +11,13 @@ * * Source on Github http://github.com/Seldaek/php-console */ -$(function() { +(function() { - var updateStatusBar, handleKeyPress; + var updateStatusBar, handleKeyPress, options; + + options = { + tab: ' ' + } // updates the text of the status bar updateStatusBar = function() { @@ -35,12 +39,12 @@ $(function() { }; handleKeyPress = function(e) { - var caret, part, matches; + var caret, part, matches, re; switch(e.keyCode) { case 9: // add 4 spaces when tab is pressed e.preventDefault(); - $(this).injectText(" "); + $(this).injectText(options.tab); break; case 13: // submit form on ctrl-enter or alt-enter @@ -53,7 +57,7 @@ $(function() { // indent automatically the new lines caret = $(this).getCaret(); part = $(this).val().substr(0, caret); - matches = part.match(/(\n +)[^\r\n]*$/); + matches = part.match(/(\n[ \t]+)[^\r\n]*$/); if (matches) { $(this).val(function(idx, val) { return val.substring(0, caret) + matches[1] + val.substring(caret); @@ -66,11 +70,12 @@ $(function() { // deindent automatically on backspace caret = $(this).getCaret(); part = $(this).val().substr(0, caret); - if (part.match(/\n( {4,})$/)) { + re = new RegExp('\n[ \t]*?'+options.tab+'$'); + if (part.match(re)) { $(this).val(function(idx, val) { - return val.substring(0, caret - 4) + val.substring(caret); + return val.substring(0, caret - options.tab.length) + val.substring(caret); }); - $(this).setCaret(caret - 4); + $(this).setCaret(caret - options.tab.length); e.preventDefault(); } break; @@ -79,48 +84,55 @@ $(function() { updateStatusBar(); }; - $('textarea[name="code"]') - .keyup(updateStatusBar) - .click(updateStatusBar) - .focus(); + $.console = function(settings) { + $.extend(options, settings); - if ($.browser.opera) { - $('textarea[name="code"]').keypress(handleKeyPress); - } else { - $('textarea[name="code"]').keydown(handleKeyPress); - } + $(function() { + $('textarea[name="code"]') + .keyup(updateStatusBar) + .click(updateStatusBar) + .focus(); - updateStatusBar(); + if ($.browser.opera) { + $('textarea[name="code"]').keypress(handleKeyPress); + } else { + $('textarea[name="code"]').keydown(handleKeyPress); + } - $('input[name="subm"]').keyup(function(e) { - // set the focus back to the textarea if pressing tab moved - // the focus to the submit button (opera bug) - if (e.keyCode === 9) { - $('textarea[name="code"]').focus(); - } - }); + updateStatusBar(); - $('form').submit(function(e){ - e.preventDefault(); - $('div.output').html(' Loading ...'); - $.post('?js=1', $(this).serializeArray(), function(res) { - if (res.match(/#end-php-console-output#$/)) { - $('div.output').html(res.substring(0, res.length-24)); - } else { - $('div.output').html(res + "

Script ended unexpectedly."); + $('input[name="subm"]').keyup(function(e) { + // set the focus back to the textarea if pressing tab moved + // the focus to the submit button (opera bug) + if (e.keyCode === 9) { + $('textarea[name="code"]').focus(); + } + }); + + $('form').submit(function(e){ + e.preventDefault(); + $('div.output').html(' Loading ...'); + $.post('?js=1', $(this).serializeArray(), function(res) { + if (res.match(/#end-php-console-output#$/)) { + $('div.output').html(res.substring(0, res.length-24)); + } else { + $('div.output').html(res + "

Script ended unexpectedly."); + } + }); + }); + + // adds a toggle button to expand/collapse all krumo sub-trees at once + if ($('.krumo-expand').length > 0) { + $('Toggle all') + .click(function(e) { + $('div.krumo-element.krumo-expand').each(function(idx, el) { + krumo.toggle(el); + }); + e.preventDefault(); + }) + .prependTo('.output'); } }); - }); - // adds a toggle button to expand/collapse all krumo sub-trees at once - if ($('.krumo-expand').length > 0) { - $('Toggle all') - .click(function(e) { - $('div.krumo-element.krumo-expand').each(function(idx, el) { - krumo.toggle(el); - }); - e.preventDefault(); - }) - .prependTo('.output'); } -}); +}()); \ No newline at end of file