Zombien.. det er asp..
Jeg har selv lavet noget lignende, og synes det fungerer ok - har dog kun testet det i IE..
Det består af 3 filer.
Show_files.php:
Danner en liste over filer.
I min version kan du kun editere php-filer, men det kan simpelt ændres i denne linje:
kun php filer:
if(eregi("(php)$",$file)){
php og htm(l) filer
if(eregi("(php|html?)$",$file)){
edit_file.php
Denne åbnes af Show_files.php i et vindue, hvor der kun er statusbar.
Der er et textarea på 100% af siden.
For at gemme trykkes Ctrl+s.
Jeg har enabled tab i textarea vha. javascript.
edit_file_post.php
Denne fil ses ikke, men kører i en skjult iframe.
Når der trykkes Ctrl+s sendes indholdet af textareaet, og edit_file_post.php gemmer filen. Mens der gemmes ses teksten "Saving" i nederste højre hjørne. Når filen er gemt, skrives "Saved", som begynder at fade ud efter 1.5 sekunder
I øjeblikket kan man ikke redigere filnavne eller oprette/slette filer/foldere, men det er på tegnebrættet..
Desuden har jeg planer om at lave AJAX post og lave browsersupport og validere koden, men det er når jeg får tid..
Hvis det kan bruges, står det dig frit at redigere og videresende..
Enabling af tab er taget fra
http://www.webdeveloper.com/forum/showthread.php?t=32317Jeg mener, der er en built-in function til at tjekke om ctrl er down, men den har jeg ikke gjort brug af - det er også på tegnebrættet.
Denne del:
include("./Library/PHP/connect.php");
include("./Library/PHP/login.php");
if(userrights("admin")){
er min måde at tjekke om brugeren har rettigheder til at ændre indholdet.
Show_files.php
<?php
include("./Library/PHP/connect.php");
include("./Library/PHP/login.php");
if(userrights("admin")){
function list_folder($path){
$hasContent = false;
$outString = "<table style='display: inline;'>";
$dir = opendir($path);
while(($file = readdir($dir)) !== false){
if($file == "."||$file == ".."){
continue;
}
$full_path = $path . "/" . $file;
if(is_file($full_path)){
if(eregi("(php)$",$file)){
$hasContent = true;
$outString .= "<tr><td><a href='#' onclick='window.open(\"edit_file.php?Path=" . $full_path . "\",\"\",\"location=yes,menubar=no,toolbar=no,resizable=yes\");'>" . $file . "</a></td></tr>";
}
}else if(is_dir($full_path)){
$folder_output = list_folder($full_path);
if($folder_output != false){
$outString .= "<tr><td>" . $file . "<br><div style='width: 30px;display: inline;'></div>";
$outString .= $folder_output;
$outString .= "</td></tr>";
$hasContent = true;
}
}
}
closedir($dir);
$outString .= "</table>";
if($hasContent){
return $outString;
}else{
return false;
}
}
echo list_folder(".");
}
?>
edit_file.php
<?php include("./Library/PHP/connect.php");
include("./Library/PHP/login.php");
if(userrights("admin")){
echo "<html>";
echo "<head>";
echo "<title>" . $_GET['Path'] . "</title>";
?>
<style>
textarea
{
overflow: auto;
}
html,body
{
overflow: hidden;
}
html,body, textarea, form
{
height: 100%;
width: 100%;
margin: 0px;
font-size: 12px;
}
iframe
{
display: none;
border: none;
}
#save
{
position: absolute;
bottom: 0px;
right: 0px;
border: 1px solid #000000;
font-family: Trebuchet MS;
font-size: 20px;
filter: alpha(opacity=0);
}
</style>
<script>
var CTRL = false;
function keydown(obj){
return_value = true;
switch(event.keyCode){
case 83:
// S
if(CTRL == true){
var saveElement = document.getElementById("save")
saveElement.style.filter = 'alpha(opacity=100)';
saveElement.innerHTML = "Saving";
document.forms[0].submit();
return_value = false;
}
break;
case 9:
// TAB
insertText(obj,String.fromCharCode(9));
return_value = false;
break;
}
if(event.keyCode == 17){
CTRL = true;
}else{
CTRL = false;
}
return return_value;
}
function keyup(){
if(event.keyCode == 17){
CTRL = false;
}
}
function insertText(input, replaceString){
if (input.setSelectionRange) {
var selectionStart = input.selectionStart;
var selectionEnd = input.selectionEnd;
input.value = input.value.substring(0, selectionStart)+ replaceString + input.value.substring(selectionEnd);
if (selectionStart != selectionEnd){
setSelectionRange(input, selectionStart, selectionStart + replaceString.length);
}else{
setSelectionRange(input, selectionStart + replaceString.length, selectionStart + replaceString.length);
}
}else if (document.selection) {
var range = document.selection.createRange();
if (range.parentElement() == input) {
var isCollapsed = range.text == '';
range.text = replaceString;
if (!isCollapsed) {
range.moveStart('character', -replaceString.length);
range.select();
}
}
}
}
</script>
</head>
<body>
<iframe name='save_frame'></iframe>
<button id='save'></button>
<form method='post' action='edit_file_post.php' target='save_frame'>
<?php
echo "<textarea onkeydown='return keydown(this);' onkeyup='keyup();' name='Content'>";
if(isset($_GET['Path'])){
echo htmlspecialchars(fread(fopen($_GET['Path'],"r"),filesize($_GET['Path'])));
}
echo "</textarea>";
echo "<input type='hidden' name='Path' value='" . $_GET['Path'] . "'>";
?>
</form>
</body>
</html>
<?php
}
?>
edit_file_post.php
<?php
include("./Library/PHP/connect.php");
include("./Library/PHP/login.php");
if(userrights("admin")){
if(isset($_POST['Path'])){
$handle = fopen($_POST['Path'], 'w');
fwrite($handle,stripslashes($_POST['Content']));
}
?>
<html>
<head>
<script type='text/javascript'>
var current;
function action(output){
top.document.getElementById("save").innerHTML = output;
current = 100;
setTimeout('decrease_opacity()','1500');
}
function decrease_opacity(){
top.document.getElementById("save").style.filter = 'alpha(opacity='+current+')';
current = current - 5;
if(current>0){
setTimeout('decrease_opacity()','50');
}
}
</script>
</head>
<body onload='action("Saved");'>
</body>
</html>
<?php
}
?>