Source of appspot

/* appjet:version 0.1 */ import("quickforms"); var query = unescape(request.params.q); var pageNum = request.params.pagenum; var numResults = 0; // prepare source storage if (!storage.appsrc)     storage.appsrc = new StorableObject(); // start with an empty query if (query == "undefined")     query = ""; // start with page 1 if (pageNum == "undefined" || pageNum == undefined)     pageNum = "1"; /**  * Prints the heading and the search box  */ function printHeading() {     print(DIV({className: "header", id: "header"}, "Search powered by ", link("http://apps.jgate.de""JGate on AppJet")));     print(TABLE(TR(TD(B({style: "font-size: 18px; margin-right: 10px;"}, "Application Directory")),         TD(FORM(INPUT({id: "phrase", value: query, type: "text", name: "q", size: "41", style: "margin-right: 5px;"}),         new QuickButton("Search"))),         TD(P({className: "searchbox_desc"}, html("Search within source (e.g. source:split)<br />Search for author (e.g. author:dvbportal)"))))),         HR()); } /**  * Prints the paging footer  *  * @param pageNum the current page number  */ function printFooter(pageNum) {     var maxPage = parseInt((numResults + 9) / 10);     // no results, no footer     if (numResults == 0)         return;     print(DIV({className: "cursor-prev"}, pageNum == 1 ? SPAN({style: "text-decration: none;"}, "Previous") : link("?q=" + query + "&pagenum=" + (pageNum - 1), "Previous")));     if (pageNum <= Math.min(10, maxPage))         for (i = 1; i <= Math.min(10, maxPage); i++)             print(pageNum == i ? DIV({className: "cursor-current"}, i) : DIV({className: "cursor-page"}, link("?q=" + query + "&pagenum=" + i, i)));     else         for (i = parseInt((pageNum + 5) / 10) * 10 - 5; i <= (parseInt((pageNum + 5 ) / 10) * 10 ) + 5 && i < maxPage; i++)             print(pageNum == i ? DIV({className: "cursor-current"}, i) : DIV({className: "cursor-page"}, link("?q=" + query + "&pagenum=" + i, i)));     print(DIV({className: "cursor-more"}, pageNum == maxPage ? "" : link("?q=" + query + "&pagenum=" + (pageNum + 1), "Next"))); } /**  * Main execution starts here  */ function get_main() {     var path = request.path;     // redirect to subdomain     var result = wget("http://appspot-api.jgate.de/", {q: query, pagenum: pageNum}, {complete: "true", redirect: true});     page.head.write('<script type="text/javascript" src="http://static.jgate.de/ratingsys.js"></script>');     printHeading();     if (result.status == 200)     {         // parse number of result         var pos1 = result.data.indexOf("<!-- Results:");         var pos2 = result.data.indexOf("-->", pos1);         var s = result.data.substring(pos1 + 13, pos2);         //var piwik = appjet._native.codeSection('piwik')[0].code         numResults = parseInt(s);         print(DIV({className: "results"}, "Results: " + numResults));         print(html(result.data));         printFooter(parseInt(pageNum));         //print(html(piwik));     }     else         print(SPAN({className: "cursor-current"}, "Cannot contact appspot webservice. Please retry later. (status: " + result + ")")); } function countLines(str) {     /* counts \n */     try     {         return((str.match(/[^\n]*\n[^\n]*/gi).length));     }     catch(e)     {         return 0;     } } /**  * Print source code  */ function get_source() {     import("lib-hilight");     page.head.write("""         <style type="text/css">         .js_keyword{color:#0000FF;}         .js_comment{color:#008200;}         .js_string{color:#A51410;}         </style>     """);     var appName = request.params.app;     if (appName != "undefined")     {         var appsrc = storage.appsrc[appName];         var theCode;         page.setTitle("Source of " + appName);         print(html("""<IMG src="http://static.jgate.de/icon_beta.jpg" />"""));         if (!appsrc)         {             appsrc = new StorableObject();             // not cached, get original             theCode = wget('http://txt.source.' + appName + '.appjet.net/');             appsrc.code = theCode;             appsrc.cached = new Date();             storage.appsrc[appName] = appsrc;             print(H3("Source of " + appName), SMALL(" (current)"));         }         else         {             theCode = storage.appsrc[appName].code;             print(H3("Source of " + appName));             print(SMALL(" (cached on: " + sprintf("%tD - %tT", storage.appsrc[appName].cached, storage.appsrc[appName].cached) + ")"));         }         var numLines = countLines(theCode)         print(SMALL(" - " + numLines + " Lines"));         print(HR());         if (numLines < 1000 && appName != "lib-time" && appName != "monitapp")         {             theCode = syntaxJSCode(theCode);             print(PRE(html(theCode)));         }         else         {             print(CODE(theCode));         }     } } /**  * Prints a cache statistic  */ function get_cache() {     print(DIV({className: "header", id: "header"}, "Search powered by ", link("http://apps.jgate.de""JGate on AppJet")));     print(TABLE(TR(TD(B({style: "font-size: 18px; margin-right: 10px"}, "Cached Application Source Codes")))));     var htmlbuffer = TABLE();     var i = 0;     htmlbuffer.push(TR());     htmlbuffer.push(TD(B("Application")), TD(B("Cached on")));     eachProperty(storage.appsrc, function(app)     {         htmlbuffer.push(TR());         htmlbuffer.push(TD((link("src?app=" + app, app)), TD(sprintf("%tD - %tT", storage.appsrc[app].cached, storage.appsrc[app].cached))));         i++;     });     print(SMALL(i + " applications cached"), HR());     print(htmlbuffer); } /**  * Proxy XHR function to prevent XSS exception  */ function post_vote() {     var app = request.params.app;     var rate = request.params.rate;     var result = wget("http://appspot-api.jgate.de/vote", {app: app, rate: rate}, {complete: "true"});     return result; } patternDispatch(     [/^\/$/, get_main],     [/^\/src$/, get_source],     [/^\/cache$/, get_cache],     [/^\/vote$/, post_vote] ); /* appjet:css */ body, table { font-size: 12px; } a:link, a:visited { color: black; text-decoration: none; } tr { border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(143, 129, 100); } tbody tr.even td { background-color: #eee; } table a:hover, #header a:visited, #header a:link { text-decoration: underline; } .cursor-current, .cursor-prev, .cursor-more, .cursor-page { display: inline; margin-right: 8px; width: 7px; text-decoration: underline; display: inline; } .cursor-more, a:link.cursor-more, a:visited.cursor-more {color: rgb(0, 0, 204); font-weight: bold; } .cursor-prev {color: rgb(0, 0, 204); margin-left: 214px; font-weight: bold; } .cursor-current { color: rgb(169, 10, 8); text-decoration: none; font-weight: bold; } div.header { position: absolute; right: 20px; font-size: 12px; top: 5px;} div.results { position: absolute; right: 20px; font-size: 13px;} .rateStatus{height:20px;color:grey; padding-top: 4px;} #rateMe{float: left; height:auto; padding-left: 6px; padding-top: 6px; padding-right: 10px;} #rateMe .on{background:url(http://static.jgate.de/small_star_on.gif) no-repeat;} #rateMe a{float: left;background:url(http://static.jgate.de/small_star_off.gif) no-repeat;width:12px; height:12px; cursor: pointer} #ratingSaved{display:none;} .saved{color:red; } p.searchbox_desc { color: rgb(102, 102, 102); font-size: 0.85em; margin: 18px 0px 2em 0px; padding: 0px;}

Go Back to this app | Get plain source

Powered by AppJet on JGate
source
rendered in 0.966s