Add persistence across sessions
This commit is contained in:
@@ -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!" />
|
||||||
|
|||||||
+48
-20
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user