diff --git a/var/mongoose/cgi-bin/browse.jim b/var/mongoose/cgi-bin/browse.jim index 4e88f7f..38a05ef 100755 --- a/var/mongoose/cgi-bin/browse.jim +++ b/var/mongoose/cgi-bin/browse.jim @@ -217,6 +217,7 @@ puts { <script type="text/javascript" src="/js/jquery.contextMenu.js"></script> <link href=/css/jquery.bar.css rel=stylesheet type=text/css /> <script type="text/javascript" src="/js/jquery.bar.js"></script> + <script type=text/javascript src=/js/enadis.js></script> <script type=text/javascript src=/cgi-bin/browse/browse.js></script> <link type=text/css rel=stylesheet href=/cgi-bin/browse/style.css /> } diff --git a/var/mongoose/cgi-bin/browse/browse.js b/var/mongoose/cgi-bin/browse/browse.js index f3e71e1..350724d 100755 --- a/var/mongoose/cgi-bin/browse/browse.js +++ b/var/mongoose/cgi-bin/browse/browse.js @@ -1,23 +1,3 @@ -(function($) -{ - $.fn.enable = function() - { - return this.each(function() { - $(this) - .removeClass('ui-state-disabled') - .removeProp('disabled'); - }); - }; - - $.fn.disable = function() - { - return this.each(function() { - $(this) - .addClass('ui-state-disabled') - .prop('disabled', true); - }); - }; -})(jQuery); var dir; diff --git a/var/mongoose/cgi-bin/edit/edit.jim b/var/mongoose/cgi-bin/edit/edit.jim new file mode 100755 index 0000000..41fcae1 --- /dev/null +++ b/var/mongoose/cgi-bin/edit/edit.jim @@ -0,0 +1,43 @@ +#!/mod/bin/jimsh + +package require cgi +source /mod/var/mongoose/lib/setup + +puts "Content-Type: text/html" +puts "" + +header + +cgi_input +#cgi_dump +set file [cgi_get file "/tmp/hosts"] + +puts " +<script type=text/javascript src=/js/enadis.js></script> +<script type=text/javascript src=/js/tabsupport.js></script> +<script type=text/javascript src=script.js></script> +<link rel=stylesheet href=style.css type=text/css /> + +<fieldset class=cleft> +<legend>File Editor</legend> +<div class=blood style=\"padding-bottom: 0.7em\"> + Editing: <span id=filename>$file</span> +</div> + +<textarea cols=80 rows=15 id=editor class=loading> + +Loading file... + +</textarea> +<br> +<button class=afterload id=revert>Revert</button> +<button class=afterload id=save>Save</button> +<div id=result class=\"blood hidden\"></div> +</fieldset> +<div class=cleft> +<button id=back>Back to diagnostics</button> +</div> +" + +footer + diff --git a/var/mongoose/cgi-bin/edit/get.jim b/var/mongoose/cgi-bin/edit/get.jim new file mode 100755 index 0000000..735044b --- /dev/null +++ b/var/mongoose/cgi-bin/edit/get.jim @@ -0,0 +1,24 @@ +#!/mod/bin/jimsh + +package require cgi +source /mod/var/mongoose/lib/setup +require chunked + +cgi_input +#cgi_dump + +set file [cgi_get file "/tmp/hosts"] +if {$file eq "-"} { exit } + +start_chunked + +if {![file exists $file]} { + chunk ">>> File $file does not exist.\r\n" +} else { + set fp [open $file r] + chunk [read $fp] + close $fp +} + +end_chunked + diff --git a/var/mongoose/cgi-bin/edit/put.jim b/var/mongoose/cgi-bin/edit/put.jim new file mode 100755 index 0000000..eb318da --- /dev/null +++ b/var/mongoose/cgi-bin/edit/put.jim @@ -0,0 +1,23 @@ +#!/mod/bin/jimsh + +package require cgi +source /mod/var/mongoose/lib/setup + +puts "Content-Type: text/html" +puts "" + +cgi_input +#cgi_dump + +set file [cgi_get file "/tmp/testfile"] +if {$file eq "-"} { exit } +set data [cgi_get data] + +if {[catch {set fp [open $file w]} msg]} { + puts "Error, $msg" +} else { + $fp puts -nonewline $data + close $fp + puts "File saved." +} + diff --git a/var/mongoose/cgi-bin/edit/script.js b/var/mongoose/cgi-bin/edit/script.js new file mode 100644 index 0000000..d33f9a4 --- /dev/null +++ b/var/mongoose/cgi-bin/edit/script.js @@ -0,0 +1,51 @@ + +$(function() { + +var file = $('#filename').text(); + +function loadfile() +{ + $('button.afterload').disable(); + $('#editor') + .addClass('loading') + .val('Loading file...'); + $.get('get.jim?file=' + encodeURIComponent(file), function(data) { + $('#editor') + .removeClass('loading') + .val(data); + $('button.afterload').enable(); + }); +} + +$('#save') + .button() + .click(function() { + $.post('put.jim', { + 'file': file, + 'data': $('#editor').val() + }, function(data) { + $('#result') + .html(data) + .slideDown('slow') + .delay(5000) + .slideUp('slow'); + }); + }); + +$('#revert') + .button() + .click(function() { + loadfile(); + }); + +$('#back') + .button() + .click(function() { + window.location = '/diag.shtml'; + }); + +$('#editor').tabsupport(); +loadfile(); + +}); + diff --git a/var/mongoose/cgi-bin/edit/style.css b/var/mongoose/cgi-bin/edit/style.css new file mode 100644 index 0000000..06a07fd --- /dev/null +++ b/var/mongoose/cgi-bin/edit/style.css @@ -0,0 +1,18 @@ +textarea +{ + background: white; + font-color: black; +} + +#filename +{ + font-style: italic; +} + +.loading +{ + font-style: italic; + color: #aaa; + background: white; +} + diff --git a/var/mongoose/html/diag.shtml b/var/mongoose/html/diag.shtml index 75af1f1..919ccd7 100644 --- a/var/mongoose/html/diag.shtml +++ b/var/mongoose/html/diag.shtml @@ -1,6 +1,8 @@ <!--#include virtual="/lib/header.shtml" --> -<fieldset style="display: inline; float: left; clear: left"> +<script type=text/javascript src=/js/enadis.js></script> + +<fieldset class=cleft> <legend>Diagnostics</legend> Diagnostic: <input name=seq id=seq autocorrect=off autocapitalize=off @@ -9,7 +11,16 @@ Diagnostic: <button id=rundiag>Run Diagnostic</button> </fieldset> -<fieldset style="display: inline; float: left; clear: left"> +<fieldset class=cleft> +<legend>File Editor</legend> +File: +<input name=editfile id=editfile autocorrect=off autocapitalize=off + value='' size=30 maxlength=50 + class="text ui-widget-content ui-corner-all"> +<button id=runedit>Edit File</button> +</fieldset> + +<fieldset class=cleft> <legend>Log Files</legend> <!--#exec cmd="/mod/var/mongoose/include/logfiles.jim" --> </fieldset> @@ -27,6 +38,14 @@ $('#rundiag').button().click(function() { $('#results').wrapInner('<pre>'); }); }); + +$('#runedit').button().click(function() { + if ($('#editfile').val().length) + window.location = '/cgi-bin/edit/edit.jim?file=' + + encodeURIComponent($('#editfile').val()); +}); + + $('a.log').click(function() { $('#results') .slideDown() diff --git a/var/mongoose/html/js/enadis.js b/var/mongoose/html/js/enadis.js new file mode 100755 index 0000000..fb91ac1 --- /dev/null +++ b/var/mongoose/html/js/enadis.js @@ -0,0 +1,20 @@ +(function($) +{ + $.fn.enable = function() + { + return this.each(function() { + $(this) + .removeClass('ui-state-disabled') + .removeProp('disabled'); + }); + }; + + $.fn.disable = function() + { + return this.each(function() { + $(this) + .addClass('ui-state-disabled') + .prop('disabled', true); + }); + }; +})(jQuery); diff --git a/var/mongoose/html/js/tabsupport.js b/var/mongoose/html/js/tabsupport.js new file mode 100644 index 0000000..0b7f525 --- /dev/null +++ b/var/mongoose/html/js/tabsupport.js @@ -0,0 +1,23 @@ +(function($) +{ + $.fn.tabsupport = function() + { + return this.each(function() { + $(this).keydown(function(e) { + if (e.keyCode == 9) + { + var el = $(this).get(0); + var start = el.selectionStart; + var end = el.selectionEnd; + $(this).val( + $(this).val().substring(0, start) + + "\t" + + $(this).val().substring(end) + ); + el.selectionStart = el.selectionEnd = start + 1; + return false; + } + }); + }); + } +})(jQuery);