]> Pileus Git - vpaste/blobdiff - index.cgi
Add compression, speed up head
[vpaste] / index.cgi
index 527ffa1a7ef11e91689c315b70605be82c0d68a0..f3a4a7e76f11921aaa61c96a893a54b734fa0cd8 100755 (executable)
--- a/index.cgi
+++ b/index.cgi
@@ -47,7 +47,13 @@ function cut_file {
 # Print out a generic header
 function header {
        echo "Content-Type: $1; charset=UTF-8"
-       echo
+       if [[ "$HTTP_ACCEPT_ENCODING" == *'gzip'* ]]; then
+               echo "Content-Encoding: gzip"
+               echo
+               exec 1> >(gzip)
+       else
+               echo
+       fi
 }
 
 # Print plain message and exit
@@ -65,12 +71,15 @@ function do_cmd {
        header text/plain
        case "$1" in
        head)
-               for i in $(ls -t db/*); do
-                       basename $i
-                       basename $i | sed 's/./-/g'
-                       sed '1,/^$/d; /^\s*$/d' $i | sed -n '1,5s/\(.\{0,60\}\).*/\1/p'
-                       echo
-               done
+               awk '
+                       BEGIN       { rows=4; cols=60; }
+                       FNR==1      { gsub(/.*\//, "", FILENAME);
+                                     print FILENAME
+                                     print "-----" }
+                       FNR==1,/^$/ { next }
+                       /\S/        { i++; printf "%."cols"s\n", $0 }
+                       i>=rows     { i=0; print ""; nextfile  }
+               ' $(ls -t db/*)
                ;;
        ls)
                ls -t db | column
@@ -185,8 +194,8 @@ function do_help {
                                             margin-bottom: 0.5em; }
                                .buttons   { float: left; }
                                .links     { float: right; }
-                               .links a   { text-decoration: none;
-                                            margin-left: 0.4em; }
+                               .links *   { text-decoration: none;
+                                            margin-left: 0.5em; }
                                .box       { display: none;
                                             clear: both;
                                             margin-top: 2.7em;
@@ -200,24 +209,33 @@ function do_help {
                                span       { font-family: monospace; }
                                .cmds dd   { font-family: monospace; }
                        </style>
-                       <script>
+                       <script type="text/javascript">
+                               //<![CDATA[
                                function show(id) {
-                                       boxes = document.getElementsByClassName('box');
-                                       for (i=0; i<boxes.length; i++) {
-                                               box = boxes[i]
+                                       var boxes = document.getElementsByClassName('box')
+                                       for (var i = 0; i < boxes.length; i++) {
+                                               var box = boxes[i]
                                                if (box.id == id && box.style.display != 'block')
                                                        box.style.display = 'block'
                                                else
                                                        box.style.display = "none"
                                        }
                                }
+                               function autoshow() {
+                                       var id  = document.location.toString().replace(/.*#/, '')
+                                       var box = document.getElementById(id)
+                                       if (box) box.style.display = "block"
+                               }
+                               //]]>
                        </script>
                </head>
 
-               <body>
+               <body onload="autoshow()">
                        <form id="form" method="post" action="" enctype="multipart/form-data">
-                               <input style="display:none" type="text" name="ignoreme" value="" />
-                               <textarea name="text" cols="80" rows="25"></textarea>
+                               <div>
+                                       <input style="display:none" type="text" name="ignoreme" value="" />
+                                       <textarea name="text" cols="80" rows="25"></textarea>
+                               </div>
                                <div class="buttons">
                                        <select onchange="document.getElementById('form').action =
                                                          document.location + '?ft=' + this.value;">
@@ -233,9 +251,10 @@ function do_help {
                                        <input type="submit" value="Paste" />
                                </div>
                                <div class="links">
-                                       <a href="javascript:show('usage'  )">Usage</a>
-                                       <a href="javascript:show('devel'  )">Development</a>
-                                       <a href="javascript:show('uploads')">Uploads</a>
+                                       <a href="">vpaste</a> <span>-</span>
+                                       <a href="#usage"   onclick="show('usage'  )">Usage</a>
+                                       <a href="#devel"   onclick="show('devel'  )">Development</a>
+                                       <a href="#uploads" onclick="show('uploads')">Uploads</a>
                                </div>
                        </form>
 
@@ -259,14 +278,16 @@ function do_help {
                                <p>Options specified when uploading are saved as defaults.</p>
 
                                <dl>
-                                       <dt>ft, filetype={filetype}</dt>
-                                       <dd>A filetype to use for highlighting, see above menu for supported types</dd>
-                                       <dt>fdm, foldmethod=(syntax|indent)</dt>
-                                       <dd>Turn on dynamic code folding</dd>
                                        <dt>bg, background={light|dark}</dt>
                                        <dd>Background color to use for the page</dd>
                                        <dt>et, expandtab</dt>
                                        <dd>Expand tabs to spaces</dd>
+                                       <dt>fdm, foldmethod=(syntax|indent)</dt>
+                                       <dd>Turn on dynamic code folding</dd>
+                                       <dt>ft, filetype={filetype}</dt>
+                                       <dd>A filetype to use for highlighting, see above menu for supported types</dd>
+                                       <dt>nu, number</dt>
+                                       <dd>Add line numbers</dd>
                                        <dt>ts, tabstop=[N]</dt>
                                        <dd>Number of spaces to use for tabs when <b>et</b> is set</dd>
                                        <dt>...</dt>
@@ -277,8 +298,8 @@ function do_help {
                        <div class="box" id="devel">
                                <h1>License</h1>
                                <p>Copyright © 2009-2012
-                                  Andy spencer &lt;andy753421@gmail.com&gt;</p>
-                               <p>See individual files for license</p>
+                                  Andy Spencer &lt;andy753421@gmail.com&gt;</p>
+                               <p>See individual files for licenses</p>
 
                                <h1>Source code</h1>
                                <ul>