Add persistence across sessions

master
Jordi Boggiano 12 years ago
parent 50b2bd3e38
commit 6818fed762
  1. 2
      README.mdown
  2. 3
      index.php
  3. 68
      php-console.js

@ -33,6 +33,8 @@ Jordi Boggiano - <j.boggiano@seld.be><br />
Changelog Changelog
--------- ---------
- 1.3.0
- Added code persistence across sessions in localStorage + a reset button
- 1.2.3 - 1.2.3
- Fixed syntax highlighting - Fixed syntax highlighting
- Fixed some styling issues - Fixed some styling issues

@ -23,7 +23,7 @@ if (!in_array($_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1'), true)) {
die('ERR/401 Go Away'); die('ERR/401 Go Away');
} }
define('PHP_CONSOLE_VERSION', '1.3.0-dev'); define('PHP_CONSOLE_VERSION', '1.3.0');
require 'krumo/class.krumo.php'; require 'krumo/class.krumo.php';
ini_set('log_errors', 0); ini_set('log_errors', 0);
@ -112,6 +112,7 @@ if (isset($_POST['code'])) {
/> />
</object> </object>
</span> </span>
<a href="" class="reset">Reset</a>
</div> </div>
</div> </div>
<input type="submit" name="subm" value="Try this!" /> <input type="submit" name="subm" value="Try this!" />

@ -1,3 +1,5 @@
/*jslint browser: true */
/*global ace, jQuery */
/** /**
* PHP Console * PHP Console
* *
@ -11,10 +13,10 @@
* *
* Source on Github http://github.com/Seldaek/php-console * Source on Github http://github.com/Seldaek/php-console
*/ */
(function(require, $, ace) { (function (require, $, ace) {
"use strict"; "use strict";
var updateStatusBar, prepareClippyButton, refreshKrumoState, handleSubmit, initializeAce, var updateStatusBar, prepareClippyButton, refreshKrumoState, handleSubmit, initializeAce, handleAjaxError,
options, editor; options, editor;
options = { options = {
tabsize: 4, tabsize: 4,
@ -24,15 +26,15 @@
/** /**
* updates the text of the status bar * updates the text of the status bar
*/ */
updateStatusBar = function(e) { updateStatusBar = function (e) {
var cursor_position = editor.getCursorPosition(); var cursor_position = editor.getCursorPosition();
$('.statusbar .position').text('Line: ' + (1+cursor_position.row) + ', Column: ' + cursor_position.column); $('.statusbar .position').text('Line: ' + (1 + cursor_position.row) + ', Column: ' + cursor_position.column);
}; };
/** /**
* prepares a clippy button for clipboard access * prepares a clippy button for clipboard access
*/ */
prepareClippyButton = function(e) { prepareClippyButton = function (e) {
var selection = editor.getSession().doc.getTextRange(editor.getSelectionRange()); var selection = editor.getSession().doc.getTextRange(editor.getSelectionRange());
if (!selection) { if (!selection) {
$('.statusbar .copy').hide(); $('.statusbar .copy').hide();
@ -46,11 +48,11 @@
/** /**
* adds a toggle button to expand/collapse all krumo sub-trees at once * adds a toggle button to expand/collapse all krumo sub-trees at once
*/ */
refreshKrumoState = function() { refreshKrumoState = function () {
if ($('.krumo-expand').length > 0) { if ($('.krumo-expand').length > 0) {
$('<a class="expand" href="#">Toggle all</a>') $('<a class="expand" href="#">Toggle all</a>')
.click(function(e) { .click(function (e) {
$('div.krumo-element.krumo-expand').each(function(idx, el) { $('div.krumo-element.krumo-expand').each(function (idx, el) {
window.krumo.toggle(el); window.krumo.toggle(el);
}); });
e.preventDefault(); e.preventDefault();
@ -62,36 +64,51 @@
/** /**
* does an async request to eval the php code and displays the result * does an async request to eval the php code and displays the result
*/ */
handleSubmit = function(e) { handleSubmit = function (e) {
e.preventDefault(); e.preventDefault();
$('div.output').html('<img src="loader.gif" class="loader" alt="" /> Loading ...'); $('div.output').html('<img src="loader.gif" class="loader" alt="" /> Loading ...');
$.post('?js=1', { code: editor.getSession().getValue() }, function(res) { // store session
if (window.localStorage) {
localStorage.setItem('phpCode', editor.getSession().getValue());
}
// eval server-side
$.post('?js=1', { code: editor.getSession().getValue() }, function (res) {
if (res.match(/#end-php-console-output#$/)) { if (res.match(/#end-php-console-output#$/)) {
$('div.output').html(res.substring(0, res.length-24)); $('div.output').html(res.substring(0, res.length - 24));
} else { } else {
$('div.output').html(res + "<br /><br /><em>Script ended unexpectedly.</em>"); $('div.output').html(res + "<br /><br /><em>Script ended unexpectedly.</em>");
} }
refreshKrumoState(); refreshKrumoState();
}); });
}; };
handleAjaxError = function(event, jqxhr, settings, exception) { handleAjaxError = function (event, jqxhr, settings, exception) {
$('div.output').html("<em>Error occured while posting your code.</em>"); $('div.output').html("<em>Error occured while posting your code.</em>");
refreshKrumoState(); refreshKrumoState();
}; };
initializeAce = function() { initializeAce = function () {
var PhpMode, code; var PhpMode, code, storedCode;
code = $('#' + options.editor).text(); code = $('#' + options.editor).text();
$('#' + options.editor).replaceWith('<div id="'+options.editor+'" class="'+options.editor+'"></div>');
// reload last session
if (window.localStorage && code.match(/(<\?php)?\s*/)) {
storedCode = localStorage.getItem('phpCode');
if (storedCode) {
code = storedCode;
}
}
$('#' + options.editor).replaceWith('<div id="' + options.editor + '" class="' + options.editor + '"></div>');
$('#' + options.editor).text(code); $('#' + options.editor).text(code);
editor = ace.edit(options.editor); editor = ace.edit(options.editor);
editor.focus(); editor.focus();
editor.gotoLine(3,0); editor.gotoLine(3, 0);
// set mode // set mode
PhpMode = require("ace/mode/php").Mode; PhpMode = require("ace/mode/php").Mode;
@ -107,6 +124,17 @@
editor.getSession().selection.on('changeSelection', prepareClippyButton); editor.getSession().selection.on('changeSelection', prepareClippyButton);
} }
// reset button
if (window.localStorage) {
$('.statusbar .reset').on('click', function (e) {
editor.getSession().setValue('<?php\n\n');
editor.focus();
editor.gotoLine(3, 0);
window.localStorage.setItem('phpCode', '');
e.preventDefault();
});
}
// commands // commands
editor.commands.addCommand({ editor.commands.addCommand({
name: 'submitForm', name: 'submitForm',
@ -114,16 +142,16 @@
win: 'Ctrl-Return|Alt-Return', win: 'Ctrl-Return|Alt-Return',
mac: 'Command-Return|Alt-Return' mac: 'Command-Return|Alt-Return'
}, },
exec: function(editor) { exec: function (editor) {
$('form').submit(); $('form').submit();
} }
}); });
}; };
$.console = function(settings) { $.console = function (settings) {
$.extend(options, settings); $.extend(options, settings);
$(function() { $(function () {
$(document).ready(initializeAce); $(document).ready(initializeAce);
$(document).ajaxError(handleAjaxError); $(document).ajaxError(handleAjaxError);

Loading…
Cancel
Save