How to use responseHead method in Playwright Internal

Best JavaScript code snippet using playwright-internal

engine.js

Source:engine.js Github

copy

Full Screen

1var app_version = "1.0b";2var EventEmitter = require('events').EventEmitter,3http = require('http'),4https = require('https'),5fs = require('fs'),6mime = require('./content-type'),7pathlib = require('path'),8uri = require('url'),9log = require('./log'),10sys = require('sys'),11Script = process.binding('evals').Script,12utils = require('./utils'),13sessionManager = require('./session'),14incomingForm = require('./incoming_form').incomingForm,15multi = require('./multinode/multi-node'),16asemaphore = require('./asemaphore'),17applicationManager = require('./application');18var cachedJssp = {19 dir : null,20 lastMod : {},21 get : function(path,lastmod){22 if(!this.dir)return undefined;23 return pathlib.existsSync(pathlib.join(this.dir,this.getFileName(path))) && typeof this.lastMod[path] ==lastmod;24 },25 getFileName : function(path){26 if(!this.dir)return undefined;27 return path.replace(/\//ig,"");28 },29 getFile : function(path,lastmod,save){30 if(!this.dir)return undefined;31 if(save)this.lastMod[path] = lastmod;32 return pathlib.join(this.dir,this.getFileName(path,lastmod));33 },34 init : function(name,dir_cache){35 dir_cache = pathlib.join(dir_cache,name);36 if(!pathlib.existsSync(dir_cache)){37 fs.mkdirSync(dir_cache, 0777);38 // U | G | O 39 //4 2 1|4 2 1|4 2 140 //r w x|r w x|r w x41 };42 this.dir = dir_cache;43 }44};45var moduleName = "Engine";46var pageObjCache = {};47pageObjCache.get = function(key){48 var val = pageObjCache[key];49 return val;50};51pageObjCache.set = function(key,val){52 pageObjCache[key] = val;53};54var globalContext = {55 sys : sys,56 log:log,57 require : function(file){58 try{59 return require(globalSettings.path.lib+"/"+file+".js");60 }catch(e){61 log.debug(moduleName,"Error load - "+globalSettings.path.lib+"/"+file+".js" );62 return null;63 }64 }65};66var plugin = new EventEmitter();67var globalSettings;68var applicationScope;69var sessionScope;70exports.start = function(settings) {71 process.title = "Oshimin Labs - HTTP";72 var serv = function (req, res) {73 /*res.__end = res.end;74 res.end = function(str){75 str = str+"\r\n\r\n" ||"\r\n\r\n";76 res.__end("dool");77 }*/78 log.debug(moduleName,"request arrived!");79 plugin.emit("request",req,globalSettings);80 var url = uri.parse(req.url,true);81 var pathname = (url.pathname || '/');82 var cleanPathname = pathname83 .replace(/\.\.\//g,'') //disallow parent directory access84 .replace(/\%20/g,' '); //convert spaces85 if(req.method == "GET"){86 var params = url.query;87 if(params == undefined)88 params = {};89 req.parameters = params;90 handleRequest(req,res,cleanPathname); 91 }else if (req.method == "POST"){92 incomingForm.parse(req, function(err, fields, files) {93 //log.debug(moduleName,"POST fields:" + utils.arrayToString(fields));94 params = {};95 req.parameters = fields;96 handleRequest(req,res,cleanPathname);97 });98 }99 else //Other Methods100 handleRequest(req,res,cleanPathname);101 };102 globalSettings = defaultSettings(settings);103 globalContext.postMessage = globalSettings.postMessage;104 var logObj = globalSettings.logs; 105 for (property in logObj)106 if(typeof logObj[property] != 'function')107 log.setLevel(property,logObj[property]); 108 cachedJssp.init(globalSettings.web_app_name,globalSettings.path.cache);109 log.info(moduleName,"Starting Web App - " +globalSettings.web_app_name); 110 //setting up sessionScope and applicationScope:111 applicationScope = applicationManager.start(globalSettings.web_app_name,globalSettings.server_script.memcached);112 sessionScope = sessionManager.start(globalSettings.server_script.session_minutes,globalSettings.web_app_name);113 var server = http.createServer(serv);114 if(globalSettings.https.key!="" && globalSettings.https.cert!=""){115 var serverSecure = https.createServer(globalSettings.https,serv);116 }117 //chargement des plugins118 if(globalSettings.path.plugin != undefined){119 fs.stat(globalSettings.path.plugin, function (err, stats) {120 if (err) 121 log.error(moduleName,"Loading plugin error:"+err);122 else if(!stats.isDirectory()) 123 log.error(moduleName,"Loading plugin error: path must be a directory");124 else{125 var files = fs.readdirSync(globalSettings.path.plugin);126 for(i=0;i<files.length;i++){127 var file = files[i];128 log.info(moduleName,"I Found plugin:"+file);129 if(files[i].endsWith(".js")){130 log.info(moduleName,file+" Is a plugin file!");131 var path = pathlib.join(globalSettings.path.plugin,file.substring(0,files[i].length-3));132 var fileNoJs = require(path);133 log.debug(moduleName,sys.inspect(fileNoJs));134 if(typeof fileNoJs === "object"){135 for(var ii in fileNoJs){136 if(typeof fileNoJs[ii] === 'function' && ii!= "apply"){137 plugin.on(ii,fileNoJs[ii]);138 log.info(moduleName,"Add Event plugin ["+ii+"]:" + path);139 }140 }141 }142 }else{143 log.info(moduleName,file+" Isn't a plugin file!");144 }145 } 146 }147 /*148 multi.listen({149 port: globalSettings.port, 150 nodes: globalSettings.nodes151 }, server);152 if(globalSettings.https.key!="" && globalSettings.https.cert!=""){153 multi.listen({154 port: globalSettings.https.port,155 nodes: globalSettings.nodes156 }, server);157 }158 */159 server.listen(globalSettings.port);160 if(globalSettings.https.key!="" && globalSettings.https.cert!=""){161 serverSecure.listen(globalSettings.https.port);162 };163 plugin.emit("start",globalSettings);164 log.warn(moduleName,'Server running at port '+globalSettings.port);165 });166 }167 //fin chargement168};169function handleRequest(req,res,cleanPathname,newSessionId){170 var t = {cleanPathname:cleanPathname,root : globalSettings.path.root};171 plugin.emit("handleRequest",t,req,globalSettings);172 var root = t.root;173 174 var path = pathlib.join(t.root, t.cleanPathname);175 req.fileInfo = t;176 delete t;177 log.info(moduleName,"Request");178 log.info(moduleName,sys.inspect([path,req.direct,req.url]));179 //fix index path180 var c = path.split("/");181 if(c[c.length-1] == ""){182 //define index.path183 globalSettings.indexFile = globalSettings.indexFile || ["index.html"];184 var s,j;185 for(var i=0;i<globalSettings.indexFile.length;i++){186 try{187 j=pathlib.join(path, globalSettings.indexFile[i]);188 s=fs.statSync(j);189 if(s.isFile()) path = j;190 break;191 }catch(e){192 };193 }194 //end define195 }196 if(newSessionId==undefined)197 log.info(moduleName,"Handling request to: " +path + " pid("+process.pid+")");198 else199 log.info(moduleName,"Forwarding request to: " +path + " pid("+process.pid+")");200 //log.debug(moduleName,"Request headers: "+utils.arrayToString(req.headers));201 fs.stat(path, function (err, stats) {202 if (err) {203 // ENOENT is normal on 'file not found'204 if (err.errno != process.ENOENT) { 205 // any other error is abnormal - log it206 plugin.emit("requestError",req,globalSettings);207 log.error("fs.stat(",path,") failed: ", err);208 }209 plugin.emit("requestNotFound",req,res,path,globalSettings);210 return fileNotFound(req,res,path);211 }212 if (!stats.isFile()){213 plugin.emit("requestNotFound",req,res,path,globalSettings);214 return fileNotFound(req,res,path);215 }else{216 var cookie = req.headers["cookie"];217 var sessionId = utils.getSessionId(cookie);218 if(newSessionId!=undefined)//forward219 sessionId = newSessionId;220 else{221 sessionScope.hello(sessionId);222 }223 var Extension = false;224 if((function(){225 for(var i in globalSettings.renderer){226 if(i == 'apply') continue;227 for(var j=0;j<globalSettings.renderer[i].ext.length;j++){228 if(path.endsWith("."+globalSettings.renderer[i].ext[j])){229 Extension = i;230 return false;231 }232 }233 }234 return true;235 })()){236 log.info(moduleName,"Static request");237 sendHeaders(req, res,undefined, stats.size, mime.mimeType(path,globalSettings.server_script.default_type), stats.mtime); 238 var readStream = fs.createReadStream(path);239 sys.pump(readStream,res);240 }else{241 log.info(moduleName,"Dyanmic request");242 if(Extension !== false && !cachedJssp.get(path,stats.mtime)){243 var readStream = fs.createReadStream(path);244 var script = [];245 readStream.addListener("data", function (chunk) { 246 script.push(chunk.toString());247 });248 readStream.addListener("end", function () {249 log.info(moduleName,"STARTING PROCESSING DYNAMIC FILE WITH RENDER : "+Extension);250 //send to render251 try{252 var render = require(pathlib.join(globalSettings.path.render,Extension));253 }catch(e){254 return fileError500(req,res,path,"Load module file",e);255 }256 fs.writeFile(cachedJssp.getFile(path,stats.mtime,true), render(script.join(""),req,res,globalSettings.renderer[Extension]), function (err) {257 //log.debug(moduleName,"Error writin cache file: "+err); 258 log.info(moduleName,"Caching - "+path + ",last mod - "+ stats.mtime.toUTCString());259 plugin.emit("render",cachedJssp.getFile(path,stats.mtime),globalSettings);260 serverSideRunning(cachedJssp.getFile(path,stats.mtime),req,res,path,stats.mtime,sessionId,true);261 });262 log.info(moduleName,"END OF DYNAMIC FILE PROCESSING"); 263 });264 req.connection.addListener('timeout', function() {265 /* dont destroy it when the fd's already closed */266 if (readStream.readable) {267 log.debug(moduleName,'timed out. destroying file read stream');268 readStream.destroy();269 }270 });271 res.addListener('error', function (err) {272 log.error('error writing',file,sys.inspect(err));273 readStream.destroy();274 });275 readStream.addListener('fd', function(fd) {276 log.debug(moduleName,"opened",path,"on fd",fd);277 });278 readStream.addListener('error', function (err) {279 log.error('error reading',file,sys.inspect(err));280 resp.end('');281 });282 }else{283 log.info(moduleName,"RUN JSP FROM CACHE");284 var currentFileNameToRead = cachedJssp.getFile(path,stats.mtime);285 serverSideRunning(currentFileNameToRead,req,res,path,stats.mtime,sessionId,false);286 }287 }288 } 289 });290};291function serverSideRunning(newfileName,request,response,file,lastMod,sessionId,isForceEval){292 var responseHead= {}; 293 var result = {};294 result.html = "";295 var flushResponse = true;296 var flushFunction = undefined;297 var error = false;298 responseHead.status = 200;299 responseHead.headers = {};300 var afterEval = [];301 //log.debug(moduleName,asemaphore);302 var currentAsemaphore = asemaphore.ctor(1,function(){303 if(!error)304 result.html = afterEval.join("");305 if(flushResponse){//otherwise, forwarding...306 sendHeaders(request,response,responseHead,result.html.length,mime.mimeType(file,"text/html"),lastMod,result.sessionId); 307 response.end(result.html);308 }309 else if(flushFunction)310 flashFunction();311 });312 var executeTheSSJFile = function (errRead, functoRun) {313 try{314 if (errRead) throw errRead;315 //Handling session and application with asemphore316 result.sessionId = sessionId;317 var application = applicationManager.getManager("",currentAsemaphore);318 var session = sessionManager.getManager(sessionId,currentAsemaphore,applicationManager,result);319 //============================================320 //Genrating Context321 var MaxtimeToExec = setTimeout(function(){322 while(currentAsemaphore.p()>0);323 },(globalSettings.server_script.max_wait != 0) ? globalSettings.server_script.max_wait*1000 : 3*60*1000);324 var context = {325 postMessage : globalSettings.postMessage,326 request:request,327 responseHead:responseHead,328 application:application,329 session:session,330 //lib:lib,331 sys : sys,332 setTimeout : setTimeout,333 clearTimeout : clearTimeout,334 //clearInterval:clearInterval,335 //setInterval:setInterval,336 log:log,337 allIsDone : function(){338 try{clearTimeout(MaxtimeToExec);}catch(e){};339 while(currentAsemaphore.p()>0);340 },341 getGlobal : function(v){342 try{343 if(v=="require"||v=="log"||v=="sys"||v=="postMessage") return undefined;344 return globalContext[v];345 }catch(e){346 return undefined;347 }348 },349 write : function(text){350 //log.debug(moduleName,"WRITE afterEval : "+ afterEval);351 afterEval.push(text);352 },353 writeEscapedText :function(text){354 afterEval.push(unescape(text));355 },356 forward :function(resource){357 flushFunction = handleRequest(request,response,resource,result.sessionId);358 flushResponse = false;359 },360 sendRedirect:function(url){361 responseHead.status = 301;362 responseHead.headers["location"] = url;363 },364 require : function(file){365 try{366 return require(globalSettings.path.lib+"/"+file+".js");367 }catch(e){368 log.debug(moduleName,"Error load - "+globalSettings.path.lib+"/"+file+".js" );369 return undefined;370 }371 }372 };373 //=============================================374 //log.debug(moduleName,typeof functoRun.page);375 log.debug(moduleName,"READING pageObject from cache, key - "+file );376 var pageObjFromCache = pageObjCache.get(file);377 if(pageObjFromCache == undefined || isForceEval){//not in cache 378 //var pageObjFunc = new Function(functoRun.toString() + " ; return this;");379 pageObjFromCache = JSON.parse(functoRun);//new pageObjFunc(context);380 pageObjCache.set(file,pageObjFromCache);381 }else382 log.debug(moduleName,"....and....cache is FULL for key - "+file);383 Script.runInNewContext(pageObjFromCache[1],globalContext,file+" [GLOBAL]");384 Script.runInNewContext(pageObjFromCache[0],context,file);385 }386 catch(err){387 log.error("PARSE/EXECUTE : "+err+" stack:"+err.stack);388 return fileError500(request,response,file,"Could not parse/execute jsp file",err);389 }390 };391 392 if(cachedJssp.get(file,lastMod)!= undefined && !isForceEval){//funcCaching393 log.debug(moduleName,"SSJ RUN: bring file from CACHE: "+file);394 executeTheSSJFile(undefined,undefined);395 }else{396 var fileNameToRead = newfileName;397 log.debug(moduleName,"SSJ RUN: reading file from FS: "+fileNameToRead);398 fs.readFile(fileNameToRead,executeTheSSJFile);399 }400}401function sendHeaders(req, res,responseHead, length, content_type, modified_time,sessionId) {402 //log.debug(moduleName,"send headers: sessionId - "+sessionId);403 if(responseHead==undefined)404 responseHead = {};405 if(responseHead.status==undefined)406 responseHead.status = 200;407 if(responseHead.headers==undefined) 408 responseHead.headers = {};409 responseHead.headers["date"] = (new Date()).toUTCString();410 responseHead.headers["Server"] = globalSettings.web_app_name+"/"+globalSettings.web_app_version+", Node.js/"+process.version;411 if(sessionId != undefined)412 if(responseHead.headers["Set-cookie"] == undefined)//TODO add expiary and domain413 responseHead.headers["Set-cookie"] = "njssession="+sessionId;414 else415 responseHead.headers["Set-cookie"] += ";njssession="+sessionId;416 if (length) 417 responseHead.headers["Content-Length"] = length;418 if (content_type) 419 responseHead.headers["Content-Type"] = content_type || "application/octet-stream";420 if (modified_time) 421 responseHead.headers["Last-Modified"] = modified_time.toUTCString(); 422 //log.debug(moduleName,"RESPONSE Headers :"+utils.arrayToString(responseHead.headers)+" +++ RESPONSE Status :"+responseHead.status);423 plugin.emit("sendHeader",responseHead,globalSettings);424 res.writeHead(responseHead.status, responseHead.headers);425 log.info(moduleName,req.connection.remoteAddress,req.method,responseHead.status,length);426}427function fileError500(req,res,path,m,err) {428 log.debug(moduleName,"500 Error path: '"+path+"'");429 var msg = "";430 var body = 431 ["<html>",432 "<head>",433 "<title>SERVER ERROR 500</title>",434 "</head>",435 "<body>",436 "<table align='center' border=0 style='margin-top:20px;'><tr><td>",437 "<h1>",globalSettings.web_app_name," - SERVER ERROR 500</h1>",438 "<p><hr>",439 m,440 ((log.getLevel(moduleName)==0 && err) ? "<br><b><pre>"+err.stack+"</pre></b>":""),441 "<hr></p>",442 "</td></tr>",443 "<tr><td align='right'>",444 "<b>&copy; Oshimin Labs 2011 - <i>Power by Badinga Badinga Ulrich Arthur</i></b>",445 "</td></tr>",446 "</table>",447 "</body>",448 "</html>"].join("");449 var responseHead= {};450 responseHead.status = 500;451 sendHeaders(req, res,responseHead,body.length,"text/html");452 if (req.method != 'HEAD') 453 res.end(body, 'utf-8');454 else 455 res.end('');456}457function fileNotFound(req,res,path) {458 log.debug(moduleName,"404 opening path: '"+path+"'");459 var responseHead= {};460 responseHead.status = 404;461 var body = ["<html>",462 "<head>",463 "<title>",464 "SERVER ERROR "+responseHead.status,465 "</title>",466 "</head>",467 "<body>",468 "<table align='center' border=0 style='margin-top:20px;'><tr><td>",469 "<h1>",470 globalSettings.web_app_name," - SERVER ERROR "+responseHead.status,471 "</h1>",472 "<p><hr>File not found : ",473 req.url,474 "<hr></p>",475 "</td></tr>",476 "<tr><td align='right'>",477 "<b>&copy; Oshimin Labs 2011 - <i>Power by Badinga Badinga Ulrich Arthur</i></b>",478 "</td></tr>",479 "</table>",480 "</body>",481 "</html>"].join("");//["<h1>",globalSettings.web_app_name," - SERVER ERROR 404</h1>.",req.url, " not found"].join("");482 sendHeaders(req, res,responseHead,body.length,"text/html");483 if (req.method != 'HEAD') 484 res.end(body, 'utf-8');485 else 486 res.end('');487}488function appProtocol(a,dir){489 if(a.search("app://") === 0)490 a = a.replace("app:/",dir);491 return a;492}493function defaultSettings(settings){494 if(settings.web_app_name == undefined)495 settings.web_app_name = "Oshimin HTTP";496 497 settings.web_app_version = app_version;498 499 if(settings.port == undefined)500 settings.port = 80;501 502 if(settings.https == undefined)503 settings.https = {};504 505 if(settings.https.port == undefined)506 settings.https.port = 443;507 508 if(settings.https.key == undefined)509 settings.https.key = "";510 settings.https.key = appProtocol(settings.https.key ,settings.__dir);511 var e;512 if(settings.https.key != ""){513 try{514 settings.https.key = fs.readFileSync(settings.https.key);515 }catch(e){516 settings.https.key = "";517 }518 }519 if(settings.https.cert == undefined)520 settings.https.cert = "";521 522 settings.https.cert = appProtocol(settings.https.cert ,settings.__dir);523 524 if(settings.https.cert != ""){525 try{526 settings.https.cert = fs.readFileSync(settings.https.cert);527 }catch(e){528 settings.https.cert = "";529 }530 }531 532 //define path533 if(settings.path == undefined)534 settings.path = {};535 536 var p = {"root":"app://public","lib":"app://libraries","plugin":"app://plugins","render":"app://renders","cache":"/tmp"};537 for(var i in p){538 if(typeof p[i] === "string"){539 if(settings.path[i] === undefined)540 settings.path[i] = p[i];541 settings.path[i] = appProtocol(settings.path[i],settings.__dir);542 }543 }544 545 //end define546 547 if(settings.server_script == undefined)548 settings.server_script = {};549 550 551 //define renderer552 if(settings.renderer === undefined)553 settings.renderer = {};554 555 for(var i in settings.renderer){556 if(i == 'apply') continue;557 settings.renderer[i] = settings.renderer[i] instanceof String ? {ext:[settings.renderer[i]]} : settings.renderer[i];558 settings.renderer[i].ext = (typeof settings.renderer[i].ext.push !== undefined ) ? settings.renderer[i].ext : [settings.renderer[i].ext];559 if(settings.renderer[i].mime){560 mime.setMime("."+i,settings.renderer[i].mime);561 }562 }563 564 //end define565 //session566 if(settings.server_script.session_minutes == undefined)567 settings.server_script.session_minutes = 30;568 settings.server_script.session_minutes = settings.server_script.session_minutes>0 ? settings.server_script.session_minutes : 30;569 570 //max exec time571 if(settings.server_script.max_wait == undefined)572 settings.server_script.max_wait = 0;573 settings.server_script.max_wait = settings.server_script.max_wait > 0 ? settings.server_script.max_wait : 0;574 settings.server_script.max_wait = settings.server_script.max_wait < 3*60 ? settings.server_script.max_wait : 3*60;575 576 //memcached577 if(settings.server_script.memcached == undefined)578 settings.server_script.memcached = {};579 if(settings.server_script.memcached.enable == undefined)580 settings.server_script.memcached.enable = 0;581 if(settings.server_script.memcached.server == undefined)582 settings.server_script.memcached.server = "localhost";583 if(settings.server_script.memcached.port == undefined)584 settings.server_script.memcached.port = 11211;585 if(settings.logs == undefined)586 settings.logs = {};587 588 cpus = require('os').cpus().length;589 if(settings.nodes == undefined)590 settings.nodes = cpus;591 592 settings.nodes = (settings.nodes<0 || settings.nodes>cpus )? cpus : settings.nodes;593 return settings;594}595process.on('uncaughtException', function (err) {596 log.err(moduleName,'Caught exception :'+sys.inspect(err.stack));597 globalContext.alfred.close(new Function());598});599process.on('SIGINT', function () {600 console.log("");601 log.warn(moduleName,'Got SIGINT. Press Control-D to exit.');602 process.exit();...

Full Screen

Full Screen

FirefoxCacheManagerImpl.js

Source:FirefoxCacheManagerImpl.js Github

copy

Full Screen

1/**2 * @author: chenmin3 * @date: 2011-09-094 * @desc: specific implementor for firefox5 */6(function() {7 var LOG = null;8 Downsha.FirefoxCacheManagerImpl = function FirefoxCacheManagerImpl() {9 LOG = Downsha.Logger.getInstance();10 this.__defineGetter__("cacheService", this.getCacheService);11 this.initialize();12 };13 Downsha.inherit(Downsha.FirefoxCacheManagerImpl, Downsha.CacheManagerImpl, true);14 Downsha.FirefoxCacheManagerImpl.isResponsibleFor = function(navigator) {15 return navigator.userAgent.toLowerCase().indexOf("firefox") >= 0;16 };17 18 Downsha.FirefoxCacheManagerImpl.prototype.CACHE_XHR_TIMEOUT = 3000; // timeout for xhr19 Downsha.FirefoxCacheManagerImpl.prototype._caches = []; // internal cache entries20 21 Downsha.FirefoxCacheManagerImpl.prototype._useCacheService = true; // whether use firefox cache service22 Downsha.FirefoxCacheManagerImpl.prototype._cacheService = null; // firefox xpcom cache service23 //Downsha.FirefoxCacheManagerImpl.prototype._cacheEntries = []; // only for firefox cache services24 Downsha.FirefoxCacheManagerImpl.prototype._clientID = "HTTP"; // default client id25 Downsha.FirefoxCacheManagerImpl.prototype._storagePolicy = Components.interfaces.nsICache.STORE_ANYWHERE;26 Downsha.FirefoxCacheManagerImpl.prototype._streamBased = Components.interfaces.nsICache.STREAM_BASED;27 Downsha.FirefoxCacheManagerImpl.prototype._accessRequested = Components.interfaces.nsICache.ACCESS_READ;28 Downsha.FirefoxCacheManagerImpl.prototype._blockingMode = Components.interfaces.nsICache.NON_BLOCKING;29 30 Downsha.FirefoxCacheManagerImpl.prototype.initialize = function() {31 };32 Downsha.FirefoxCacheManagerImpl.prototype.startCache = function() {33 LOG.debug("startCache");34 // reset cache array35 this._caches = [];36 37 // determine which cache strategy should we use38 if (this._useCacheService) {39 if(Downsha.platform.isLinux()) { // cache service would be blocked in ubuntu firefox 3.6/6.040 this._useCacheService = false;41 } else if (this.cacheService) { // initialize lazy-mode42 /*43 this._cacheEntries = [];44 this.cacheService.visitEntries(this); // set this as nsICacheVisitor object45 */46 } else {47 this._useCacheService = false;48 }49 }50 };51 Downsha.FirefoxCacheManagerImpl.prototype.isComplete = function() {52 var cacheLoadings = 0;53 var cacheSuccesses = 0;54 var cacheErrors = 0;55 for (var i in this._caches) {56 if (this._caches[i].status == Downsha.Cache.CACHE_STATUS_LOADING) {57 cacheLoadings ++;58 } else if (this._caches[i].status == Downsha.Cache.CACHE_STATUS_SUCCESS) {59 cacheSuccesses ++;60 } else if (this._caches[i].status == Downsha.Cache.CACHE_STATUS_ERROR) {61 cacheErrors ++;62 }63 }64 LOG.debug("isComplete cache total: " + this._caches.length + ", loading: " + 65 cacheLoadings + ", success: " + cacheSuccesses + ", error: " + cacheErrors);66 67 if (cacheLoadings > 0) {68 return false;69 }70 return true;71 };72 Downsha.FirefoxCacheManagerImpl.prototype.getCaches = function() {73 var caches = [];74 for (var i in this._caches) {75 if (this._caches[i].status == Downsha.Cache.CACHE_STATUS_SUCCESS 76 && this._caches[i].data && this._caches[i].data.length > 0) {77 caches.push(this._caches[i]);78 }79 }80 return caches;81 };82 Downsha.FirefoxCacheManagerImpl.prototype.getCache = function(url) {83 for (var i in this._caches) {84 if (this._caches[i] && this._caches[i].url == url) {85 if (this._caches[i].status == Downsha.Cache.CACHE_STATUS_SUCCESS 86 && this._caches[i].data && this._caches[i].data.length > 0) {87 return this._caches[i];88 } else {89 return null;90 }91 }92 }93 return null;94 };95 Downsha.FirefoxCacheManagerImpl.prototype.addCaches = function(urls, success, error) {96 if (urls instanceof Array) { // array of urls97 var _urls = [].concat(urls);98 for (var i in _urls) {99 this.addCache(_urls[i].url, _urls[i].background, success, error);100 }101 } else if (typeof urls == "string") { // url string102 this.addCache(urls, 0, success, error);103 }104 };105 Downsha.FirefoxCacheManagerImpl.prototype.addCache = function(url, background, success, error) {106 var self = this;107 var successCallback = function(cache) { // callback for success108 LOG.debug("addCache ok for url: " + cache.url + ", data length: " + cache.data.length);109 if (typeof cache.type != "string" || cache.type.length == 0) {110 Downsha.Cache.guessTypeByUrl(cache); // complete content-type if possible111 LOG.debug("guessTypeByUrl url: " + cache.url + ", type: " + cache.type);112 }113 cache.status = Downsha.Cache.CACHE_STATUS_SUCCESS;114 if (typeof success == 'function') {115 success(cache);116 }117 };118 var errorCallback = function(cache) { // callback for error119 LOG.debug("addCache error for url: " + cache.url);120 cache.status = Downsha.Cache.CACHE_STATUS_ERROR;121 if (typeof error == 'function') {122 error(cache);123 }124 };125 126 // validation and entry initialization127 if (typeof url != "string" || url.length == 0) {128 return ;129 }130 for (var i in self._caches) {131 if (self._caches[i] && self._caches[i].url == url) {132 LOG.debug("addCache already exists, url: " + url);133 return ;134 }135 }136 var cache = new Downsha.Cache({137 url : url,138 background : background, 139 status : Downsha.Cache.CACHE_STATUS_LOADING});140 self._caches.push(cache);141 142 setTimeout(143 function() {144 // use cache service if possible, and xhr as fallback 145 if (self._useCacheService && self.getCacheByCacheService(cache)) {146 successCallback(cache);147 } else {148 self.getCacheByXHR(cache, successCallback, errorCallback);149 }150 }, 1);151 };152 Downsha.FirefoxCacheManagerImpl.prototype.getCacheByXHR = function(cache, success, error) {153 var self = this;154 var ajaxOpts = {155 url : cache.url,156 type : "GET",157 async : true, // asynchronous mode158 cache : true, // local cache is encouraged159 timeout : self.CACHE_XHR_TIMEOUT, // timeout160 /**161 * mimeType was added in jQuery 1.5.1 and later version.162 * this overrides the MIME type, forcing the browser to treat it as plain text, using a user-defined character set.163 * this also tells the browser not to parse it, and to let the bytes pass through unprocessed.164 * https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest165 * xhr.overrideMimeType('text/plain; charset=x-user-defined');166 */167 mimeType : "text/plain; charset=x-user-defined",168 success : function(text, status, xhr) {169 if (xhr.readyState == 4 && xhr.status == 200 && text.length > 0) {170 LOG.debug("cache ajax ok, url: " + cache.url + ", data length: " + text.length);171 172 // throw away high order bytes and form binary data173 cache.data = [];174 cache.data.length = text.length;175 for (var i = 0; i < cache.data.length; i++) {176 cache.data[i] = text.charCodeAt(i) & 0xff;177 }178 cache.type = xhr.getResponseHeader("Content-Type");179 if (cache.type != null) {180 var typeEnd = cache.type.indexOf(";");181 if (typeEnd > 0) {182 cache.type = cache.type.substring(0, typeEnd);183 }184 185 if (cache.type.indexOf("text/plain") >= 0) {186 cache.type = null;187 }188 }189 cache.encoding = xhr.getResponseHeader("Content-Encoding");190 if (cache.encoding != null) {191 var encodingEnd = cache.encoding.indexOf(";");192 if (encodingEnd > 0) {193 cache.encoding = cache.encoding.substring(0, encodingEnd);194 }195 }196 197 if (typeof success == 'function') {198 success(cache);199 }200 } else {201 LOG.error("cache ajax error, url: " + cache.url + ", readyState: " + xhr.readyState 202 + ", status: " + xhr.status + ", data length: " + text.length);203 if (typeof error == 'function') {204 error(cache);205 }206 }207 },208 error : function(xhr, status, err) {209 LOG.error("cache ajax error, url: " + cache.url + ", readyState: " + xhr.readyState + 210 ", status: " + xhr.status + ", error: " + (err ? err : "unknown"));211 if (typeof error == 'function') {212 error(cache);213 }214 }215 };216 LOG.debug("cache ajax sending, url: " + cache.url);217 // DO NOT use $.ajax(ajaxOpts), cuz firefox 6.0.2 throws exception "$ is not defined"218 Downsha.getjQuery().ajax(ajaxOpts);219 };220 221 Downsha.FirefoxCacheManagerImpl.prototype.getCacheService = function() {222 if (this._cacheService == null) {223 this._cacheService = Components.classes["@mozilla.org/network/cache-service;1"]224 .getService(Components.interfaces.nsICacheService);225 }226 return this._cacheService;227 };228 229 // ***** nsICacheVisitor implementor *****230 /*231 Downsha.FirefoxCacheManagerImpl.prototype.visitDevice = function(deviceID, deviceInfo) {232 // This method is called to provide information about a cache device.233 // Returns true to start visiting all entries for this device, 234 // otherwise returns false to advance to the next device.235 if (deviceID == "offline") return true;236 237 var entryCount = deviceInfo.entryCount;238 var totalSize = Math.round(deviceInfo.totalSize / (1024 * 1024) * 100) / 100;239 var maximumSize = Math.round(deviceInfo.maximumSize / (1024 * 1024) * 100) / 100;240 var usageRatio = 0;241 if (deviceInfo.maximumSize > 0) {242 usageRatio = Math.round(deviceInfo.totalSize / deviceInfo.maximumSize * 100);243 }244 245 LOG.debug("cache device id: " + deviceID + ", entry count: " + entryCount);246 LOG.debug("cache total size: " + totalSize + "MB, maximum size: " + maximumSize + "MB, usage ratio: " + usageRatio + "%");247 return true;248 };249 Downsha.FirefoxCacheManagerImpl.prototype.visitEntry = function(deviceID, entryInfo) {250 // This method is called to provide information about a cache entry.251 // Returns true to visit the next entry on the current device, 252 // or if the end of the device has been reached, advance to the next device, 253 // otherwise returns false to advance to the next device.254 if (entryInfo.clientID == this._clientID) return true; // only keep those unusal clientID255 if (entryInfo.dataSize == 0) return true;256 if (entryInfo.key.indexOf("http") != 0) return true;257 258 LOG.debug("store cache url: " + entryInfo.key + ", clientID: " + entryInfo.clientID + ", dataSize: " + entryInfo.dataSize);259 this._cacheEntries.push({key : entryInfo.key, clientID : entryInfo.clientID, streamBased : entryInfo.isStreamBased() ? 1 : 0});260 return true;261 };262 */263 // get cache data by cache service264 Downsha.FirefoxCacheManagerImpl.prototype.openCacheEntry = function(url) {265 try {266 var clientID = this._clientID;267 /*268 for (var i in this._cacheEntries) {269 if (this._cacheEntries[i] && this._cacheEntries[i].key == url) {270 clientID = this._cacheEntries[i].clientID;271 break;272 }273 }274 */275 var cacheSession = this.cacheService.createSession(clientID, this._storagePolicy, this._streamBased);276 if (typeof cacheSession != "object" || cacheSession == null)277 return null;278 cacheSession.doomEntriesIfExpired = false;279 // cache service would be blocked in ubuntu firefox 3.6/6.0280 return cacheSession.openCacheEntry(url, this._accessRequested, this._blockingMode);281 } catch(e) {282 LOG.warn("exception occurred when creating cache session.");283 // 0x804b003d NS_ERROR_CACHE_KEY_NOT_FOUND284 // 0x804b0040 NS_ERROR_CACHE_WAIT_FOR_VALIDATION (NON-BLOCKING MODE)285 // 0x804b0044 NS_ERROR_CACHE_IN_USE286 return null;287 }288 };289 Downsha.FirefoxCacheManagerImpl.prototype.getCacheByCacheService = function(cache) {290 var cacheDescriptor = this.openCacheEntry(cache.url);291 if (typeof cacheDescriptor != "object" || cacheDescriptor == null)292 return false;293 294 try {295 // parse response-head and get cache content-type and content-encoding296 var headBegin = "";297 var headEnd = ""; 298 var contentTypeHead = "Content-Type: ";299 var contentEncodingHead = "Content-Encoding: "; 300 var responseHead = cacheDescriptor.getMetaDataElement("response-head");301 if (typeof responseHead == "string" && responseHead.length > 0) {302 headBegin = responseHead.indexOf(contentTypeHead); // get content-type303 if (headBegin > 0) {304 headEnd = responseHead.indexOf("\n", headBegin + contentTypeHead.length);305 cache.type = responseHead.substring(headBegin + contentTypeHead.length, headEnd - 1);306 headEnd = cache.type.indexOf(";");307 if (headEnd > 0) cache.type = cache.type.substring(0, headEnd);308 }309 310 headBegin = responseHead.indexOf(contentEncodingHead); // get content-encoding311 if (headBegin > 0) {312 headEnd = responseHead.indexOf("\n", headBegin + contentEncodingHead.length);313 cache.encoding = responseHead.substring(headBegin + contentEncodingHead.length, headEnd - 1);314 headEnd = cache.encoding.indexOf(";");315 if (headEnd > 0) cache.encoding = cache.encoding.substring(0, headEnd);316 }317 }318 } catch(e) {319 // ignore exception here, cuz we might still get cache data without content-type and content-encoding320 LOG.warn("exception occurred when getting content-type and content-encoding.");321 }322 323 try {324 var cacheInputStream = cacheDescriptor.openInputStream(0);325 if (typeof cache.encoding == "string" && cache.encoding.length > 0) {326 //convert cache stream from deflat/zip to uncompressed327 var converterService = Components.classes["@mozilla.org/streamConverters;1"].getService(Components.interfaces.nsIStreamConverterService);328 var streamListener = converterService.asyncConvertData(cache.encoding, "uncompressed", new Downsha.StreamListener(cache), null);329 streamListener.onStartRequest(null, null);330 streamListener.onDataAvailable(null, null, cacheInputStream, 0, cacheInputStream.available());331 streamListener.onStopRequest(null, null, null);332 } else {333 // get cache data from input stream directly334 var binaryInputStream = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);335 binaryInputStream.setInputStream(cacheInputStream);336 cache.data = binaryInputStream.readByteArray(binaryInputStream.available());337 binaryInputStream.close();338 }339 } catch(e) {340 LOG.warn("exception occurred when getting content-data.");341 cacheDescriptor.close();342 return false;343 }344 345 cacheDescriptor.close();346 var dataLength = (typeof cache.data != "undefined" && cache.data != null) ? cache.data.length : 0;347 LOG.debug("get cache url: " + cache.url + ", type: " + (cache.type ? cache.type : "unknown") + ", encoding: " + (cache.encoding ? cache.encoding : "unknown") + ", size: " + dataLength);348 if (dataLength <= 0) {349 return false;350 }351 return true;352 };353 354 // ***** StreamListener for Asynchronous Converter *****355 Downsha.StreamListener = function StreamListener(cache) {356 this._cache = cache;357 this._cache.data = "";358 };359 Downsha.StreamListener.prototype.onStartRequest = function(request, context) {360 };361 Downsha.StreamListener.prototype.onStopRequest = function(request, context, statusCode) {362 };363 Downsha.StreamListener.prototype.onDataAvailable = function(request, context, inputStream, offset, count) {364 var binaryInputStream = Components.classes["@mozilla.org/binaryinputstream;1"]365 .createInstance(Components.interfaces.nsIBinaryInputStream);366 binaryInputStream.setInputStream(inputStream);367 this._cache.data += binaryInputStream.readBytes(binaryInputStream.available());368 binaryInputStream.close();369 };...

Full Screen

Full Screen

EvaluationsResultStudentTable.js

Source:EvaluationsResultStudentTable.js Github

copy

Full Screen

1import React, {useEffect, useState} from 'react';2import clsx from 'clsx';3import PropTypes from 'prop-types';4import { makeStyles } from '@material-ui/styles';5import {6 Card,7 CardHeader,8 CardContent,9 Divider,10 IconButton,11 Typography, Table, TableBody, CardActions, TablePagination, Tooltip, Switch, Chip, Grid, LinearProgress12} from '@material-ui/core';13import api from "../../../../services/api";14import ToolbarEvaluation15 from "./EvaluationResultToolbar/EvaluationResultStudentToolbar";16import {Close, FormatListBulleted} from "@material-ui/icons";17const useStyles = makeStyles(() => ({18 root: {19 margin: 10,20 },21 content: {22 padding: 023 },24 labelRed: {25 backgroundColor: '#EC0B43',26 display: 'block',27 margin: '2px',28 padding: '3px',29 textAlign: 'center',30 color: '#fff',31 borderRadius: 432 },33}));34const EvaluationsResultStudentTable = props => {35 const { className, history, ...rest } = props;36 const [ evaluations, setEvaluations ] = useState(null);37 const [rowsPerPage, setRowsPerPage] = useState(10);38 const [page, setPage] = useState(0);39 const [total, setTotal] = useState(0);40 const [searchText, setSearchText] = useState('');41 const classes = useStyles();42 async function load(){43 try {44 const responseHead = await api.get('/evaluation/student/result/evaluations');45 if (responseHead.status === 200) {46 setEvaluations(responseHead.data.data);47 setTotal(responseHead.data.total);48 } else {49 setEvaluations([]);50 }51 } catch (error) {52 }53 }54 useEffect(() => {55 load();56 }, []);57 const handleBack = () => {58 history.goBack();59 };60 const handlePageChange = (event, page) => {61 load(page+1)62 setPage(page);63 };64 const handleRowsPerPageChange = event => {65 setRowsPerPage(event.target.value);66 };67 const updateSearch = (e) => {68 setSearchText(e.target.value);69 }70 const onClickSearch = (e) => {71 setPage(0);72 load(1);73 }74 const results = (idHead) => {75 history.push('/student/result-evaluations/details/'+idHead);76 }77 return (78 <div className={classes.root}>79 <ToolbarEvaluation80 onChangeSearch={updateSearch.bind(this)}81 searchText={searchText}82 onClickSearch={onClickSearch}/>83 <div className={classes.content}>84 <Card85 className={clsx(classes.root, className)}>86 <CardHeader87 avatar={88 <div>89 </div>90 }91 action={92 <TablePagination93 component="div"94 count={total}95 onChangePage={handlePageChange}96 onChangeRowsPerPage={handleRowsPerPageChange}97 page={page}98 rowsPerPage={rowsPerPage}99 rowsPerPageOptions={[10]}100 />101 }/>102 <CardContent>103 {evaluations == null ?104 <LinearProgress color="secondary" />105 :106 <Grid107 container108 spacing={1}>109 <Grid110 item111 md={12}112 xs={12}>113 <Table>114 <TableBody>115 {evaluations.map(application => (116 <Card117 {...rest}118 className={classes.root}>119 <CardHeader120 className={classes.head}121 action={122 <div>123 { application.evaluation_application.show_results == 1 ?124 <Tooltip title="Visualizar resultados">125 <IconButton126 aria-label="copy"127 onClick={() => results(application.id)}>128 <FormatListBulleted/>129 </IconButton>130 </Tooltip>131 :132 <span className={classes.labelRed}>{'Resultado não liberado.'}</span>133 }134 </div>135 }/>136 <CardContent>137 <div>138 <Typography variant="h5" color="textSecondary" component="h2">139 {'Descrição da avaliação: '+application.evaluation_application.evaluation.description }140 </Typography>141 <Typography variant="h5" color="textSecondary" component="h2">142 {'Descrição da aplicação: '+application.evaluation_application.description }143 </Typography>144 <Typography variant="h5" color="textSecondary" component="h2">145 {'Professor(a): '+application.evaluation_application.evaluation.user.name }146 </Typography>147 </div>148 </CardContent>149 </Card>150 ))}151 </TableBody>152 </Table>153 </Grid>154 </Grid> }155 </CardContent>156 <CardActions className={classes.actions}>157 <TablePagination158 component="div"159 count={total}160 onChangePage={handlePageChange}161 onChangeRowsPerPage={handleRowsPerPageChange}162 page={page}163 rowsPerPage={rowsPerPage}164 rowsPerPageOptions={[10]}165 />166 </CardActions>167 </Card>168 </div>169 </div>170 );171};172EvaluationsResultStudentTable.propTypes = {173 className: PropTypes.string,174};...

Full Screen

Full Screen

server7777.js

Source:server7777.js Github

copy

Full Screen

1const http = require('http');2const fs = require('fs');3http.createServer((request, response) => {4 let responseHead = {code: 200, options: {}};5 let responseBody = '';6 if (request.url === '/') {7 responseBody = fs.readFileSync('./index.html', 'utf-8');8 responseHead.options['content-type'] = 'text/html';9 }10 if (request.url === '/script.js') {11 // GET 有缓存,POST 没有缓存12 // ------------------- 强缓存,不需要请求服务器 -------------------13 // responseBody = fs.readFileSync('./script.js', 'utf-8');14 // responseHead.options['content-type'] = 'text/javascript';15 // 缓存时间:60s,16 // max-age,出现于http1.1,最大缓存时间,相对时间,不受客户端本地时间控制17 // responseHead.options['cache-control'] = 'max-age=9999';18 // 缓存时间:1min19 // expires,http1.0提出的一个表示资源过期时间的header,缓存到期时间,绝对时间,受到客户端本地时间干扰20 // responseHead.options['expires'] = (new Date((new Date()).setMinutes((new Date()).getMinutes() + 10))).toGMTString();21 // max-age,expires 优先级比较,max-age优先级高,expires被忽略22 // responseHead.options['cache-control'] = 'max-age=5';23 // responseHead.options['expires'] = (new Date((new Date()).setMinutes((new Date()).getMinutes() + 1))).toGMTString();24 // ------------------- 协商缓存,需要请求服务器 -------------------25 // last-modified / if-modified-since,资源最后的修改日期26 // 无法体现出1秒内资源修改的状态27 // if (request.headers['if-modified-since']) {28 // responseHead.code = 304;29 // } else {30 // responseBody = fs.readFileSync('./script.js', 'utf-8');31 // responseHead.options['content-type'] = 'text/javascript';32 // responseHead.options['last-modified'] = new Date().toString();33 // }34 // etag / if-none-match,资源的实体标签35 // if (+request.headers['if-none-match'] === new Date().getMinutes()) {36 // responseHead.code = 304;37 // } else {38 // responseBody = fs.readFileSync('./script.js', 'utf-8');39 // responseHead.options['content-type'] = 'text/javascript';40 // responseHead.options['etag'] = new Date().getMinutes();41 // }42 // last-modified,etag 比较优先级43 // 貌似没有很合适的客观例子,,,,,,,,,44 // if (request.headers['if-modified-since'] || +request.headers['if-none-match'] === new Date().getMinutes()) {45 // responseHead.code = 304;46 // } else {47 // responseBody = fs.readFileSync('./script.js', 'utf-8');48 // responseHead.options['content-type'] = 'text/javascript';49 // responseHead.options['last-modified'] = new Date().toString();50 // responseHead.options['etag'] = new Date().getMinutes();51 // }52 // ------------------- 强缓存 -> 协商缓存 -------------------53 // 强缓存不满足条件时,向服务器发起请求,进行协商缓存54 // if (+request.headers['if-none-match'] === new Date().getMinutes()) {55 // responseHead.code = 304;56 // } else {57 // responseBody = fs.readFileSync('./script.js', 'utf-8');58 // responseHead.options['content-type'] = 'text/javascript';59 // responseHead.options['etag'] = new Date().getMinutes();60 // responseHead.options['cache-control'] = 'max-age=10';61 // }62 // ------------------- 浏览器启发式的算法 -------------------63 // 浏览器启发式的算法,max-age = (date_value - last-modified_value) * 10%64 // 根据浏览器启发式的算法,及时没有设置强缓存,也有10s的强缓存65 // responseBody = fs.readFileSync('./script.js', 'utf-8');66 // responseHead.options['content-type'] = 'text/javascript';67 // responseHead.options['date'] = new Date();68 // responseHead.options['last-modified'] = new Date(new Date().setSeconds( new Date().getSeconds() - 100 ));69 // 浏览器启发式算法的解决方案70 // 通过设置cache-control = no-cache,强制把缓存的验证交给原始服务器处理71 // responseBody = fs.readFileSync('./script.js', 'utf-8');72 // responseHead.options['content-type'] = 'text/javascript';73 // responseHead.options['date'] = new Date();74 // responseHead.options['last-modified'] = new Date(new Date().setSeconds( new Date().getSeconds() - 100 ));75 // responseHead.options['cache-control'] = 'no-cache';76 }77 response.writeHead(responseHead.code, responseHead.options)78 response.end(responseBody);...

Full Screen

Full Screen

Controller.js

Source:Controller.js Github

copy

Full Screen

1'use strict';2var _ = require('underscore'),3 fs = require('fs');4function Controller () {}5Controller.extend = function (protoProps, staticProps) {6 var parent = this,7 child;8 if (protoProps && _.has(protoProps, 'constructor')) {9 child = protoProps.constructor;10 } else {11 child = function () {12 return parent.apply(this, arguments);13 };14 }15 _.extend(child, parent, staticProps);16 var Surrogate = function () {17 this.constructor = child;18 };19 20 Surrogate.prototype = parent.prototype;21 child.prototype = new Surrogate;22 if (protoProps) _.extend(child.prototype, protoProps);23 child.__super__ = parent.prototype;24 return child;25}; 26_.extend(Controller.prototype, {27 methods: {28 'GET': 'getCollection',29 'POST': 'saveNew',30 'PUT': 'saveUpdated',31 'DELETE': 'deleteItem'32 },33 responseHead: {34 statusOK: '200',35 statusErr: '404',36 cookies: ''37 },38 response: '',39 method: '',40 collection: '',41 request: '',42 43 initialize: function (req, resp, action) {44 var reqBody;45 this.request = req;46 this.response = resp;47 reqBody = this.getRequestData(this.request);48 this.method = this.methods[this.request.method];49 if (this.request.method == 'POST' || this.request.method == 'PUT') {50 this.request.on('end', function() {51 reqBody = JSON.parse(Buffer.concat(reqBody));52 delete reqBody['id'];53 this.collection.initialize(function (result) {54 this.collection[this.method](reqBody, action, this.sendResponse, this);55 this.collection.on('destroy change', function (model) {56 if (global.mediator) {57 global.mediator.publish('Update socket', {collection: req.url});58 }59 });60 }, this);61 }.bind(this));62 } else {63 this.collection.initialize(function (result) {64 this.collection[this.method](action, this.sendResponse, this);65 this.collection.on('destroy change', function (model) {66 if (global.mediator) {67 global.mediator.publish('Update socket', {collection: req.url});68 }69 });70 }, this);71 }72 73 },74 sendResponse: function (err, data) {75 if (err) {76 console.log(err);77 this.response.writeHead(this.responseHead.statusErr, {'Set-Cookie': this.responseHead.cookies});78 this.response.write(err);79 this.response.end();80 } else {81 this.response.writeHead(this.responseHead.statusOK, {'Content-Type': 'application/json', 'Set-Cookie': this.responseHead.cookies});82 this.response.write(JSON.stringify(this.formatData(data)));83 this.response.end();84 }85 },86 formatData: function (data) {87 var result = [];88 if (Array.isArray(data)) {89 data.forEach(function (item) {90 item.id = item._id;91 result.push(item);92 });93 } else {94 data.id = data._id;95 result = data;96 }97 return result;98 },99 getRequestData: function (request) {100 var body = [];101 102 request.on('data', function(chunk) {103 body.push(chunk);104 });105 return body;106 },107 parseCookies: function (request) {108 var rc = request.headers.cookie,109 list = {},110 parts;111 rc && rc.split(';').forEach(function (cookie) {112 parts = cookie.split('=');113 list[parts.shift().trim()] = decodeURI(parts.join('='));114 });115 return list;116 },117 sendFile: function (response, contentType, filePath) {118 fs.stat(filePath, function (err, stats) {119 if (stats) {120 fs.readFile(filePath, function(error, data) {121 if (error) {122 response.writeHead(500);123 response.end();124 } else {125 response.writeHead(200, {'Content-Type': contentType});126 response.write(data);127 response.end();128 }129 });130 } 131 });132 }133});...

Full Screen

Full Screen

index.js

Source:index.js Github

copy

Full Screen

1// initialize variables and display2const http = new XMLHttpRequest();3let responseData = [];4getNames();5// listen for and capture newly entered name6let inputName = document.querySelector('input');7inputName.onkeypress = function(event) {8 let name = inputName.value.trim();9 if (name.length === 0 || event.key !== 'Enter') {10 if (event.key === 'Enter') {11 alert('Please enter a name.');12 inputName.value = '';13 }14 return;15 }16 inputName.value = '';17 addName(name);18};19// get all names from database20function getNames() {21 http.open('GET', location + 'api/names');22 http.onreadystatechange = function() {23 if (http.readyState === XMLHttpRequest.DONE && http.status === 200) {24 responseData = JSON.parse(http.responseText);25 responseData.sort((a, b) => a.timestamp.localeCompare(b.timestamp));26 updateResponseArea(responseData);27 } else if (http.readyState === XMLHttpRequest.DONE) {28 alert('An error occurred when getting names from the database.');29 }30 };31 http.send();32}33// add new name to database34function addName(name) {35 name = sanitize(name);36 http.open('POST', location + 'api/names');37 http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');38 let timestamp = new Date().toISOString();39 let data = 'name=' + name + '&timestamp=' + timestamp;40 http.onreadystatechange = function() {41 if (http.readyState === XMLHttpRequest.DONE && http.status === 201) {42 getNames();43 } else if (http.readyState === XMLHttpRequest.DONE && http.status !== 201) {44 alert('An error occurred when adding the name to the database.');45 }46 };47 http.send(data);48}49// update the response area with new data from database50function updateResponseArea(responseData) {51 let liList = document.querySelectorAll('li');52 for (let i = 0; i < liList.length; i++) {53 liList[i].parentElement.removeChild(liList[i]);54 }55 let responseHead = document.querySelector('#responseHead');56 let responseArea = document.querySelector('#responseArea');57 if (responseData.length === 0) {58 responseHead.textContent = 'No items in database.';59 } else {60 responseHead.textContent = 'Database contents:';61 for (let i = 0; i < responseData.length; i++) {62 let li = document.createElement('LI');63 li.textContent = sanitize(responseData[i].name);64 li.style.marginTop = '10px';65 responseArea.appendChild(li);66 }67 }68}69// sanitize inputs/outputs to prevent xss70function sanitize(str) {71 return String(str)72 .replace(/&(?!amp;|lt;|gt;)/g, '&amp;')73 .replace(/</g, '&lt;')74 .replace(/>/g, '&gt;');...

Full Screen

Full Screen

commands.js

Source:commands.js Github

copy

Full Screen

1var log = require('./log');2var commands = function(afterEval,request,response,result,responseHead,handleRequest,flushFunction,flushResponse){3 this.afterEval = afterEval;4 this.request = request;5 this.response = response;6 this.result = result;7 this.responseHead = responseHead;8 this.handleRequest = handleRequest;9 this.flushFunction = flushFunction;10 this.flushResponse = flushResponse;11};12 13commands.prototype.write = function(text){14 this.afterEval.push(text);15};16commands.prototype.writeEscapedText = function(text){17 this.afterEval.push(unescape(text));18};19commands.prototype.forward = function(resource){20 this.flushFunction = this.handleRequest(this.request,this.response,this.resource,this.result.sessionId);21 this.flushResponse = false;22};23commands.prototype.sendRedirect = function(url){24 this.responseHead.status = 301;25 this.responseHead.headers["location"] = url;26};27exports.getCommands = function(afterEval,request,response,result,responseHead,handleRequest,flushFunction,flushResponse){28 return new commands(afterEval,request,response,result,responseHead,handleRequest,flushFunction,flushResponse);...

Full Screen

Full Screen

server.js

Source:server.js Github

copy

Full Screen

1const http = require('http');2const fs = require('fs');3http.createServer((request, response) => {4 let responseHead = {code: 200, options: {}};5 let responseBody = '';6 console.log(request.url);7 if (request.url === '/') {8 responseBody = fs.readFileSync('./index.html');9 responseHead.options['content-type'] = 'text/html';10 } else if (request.url === '/home') {11 // 302 临时重定向,http标准禁止post方法重定向成为get方法12 responseHead.code = 302;13 responseHead.options['location'] = '/';14 }15 response.writeHead(responseHead.code, responseHead.options)16 response.end(responseBody);...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 const response = await page._client.send('Network.getResponseBody', { requestId: page._mainFrame._id });7 console.log(response.base64Encoded);8 await browser.close();9})();10const { chromium } = require('playwright');11(async () => {12 const browser = await chromium.launch();13 const context = await browser.newContext();14 const page = await context.newPage();15 const response = await page._client.send('Network.getResponseBody', { requestId: page._mainFrame._id });16 console.log(response.body);17 await browser.close();18})();19const { chromium } = require('playwright');20(async () => {21 const browser = await chromium.launch();22 const context = await browser.newContext();23 const page = await context.newPage();24 const response = await page._client.send('Network.getResponseBody', { requestId: page._mainFrame._id });25 console.log(response.body);26 await browser.close();27})();28const { chromium } = require('playwright');29(async () => {30 const browser = await chromium.launch();31 const context = await browser.newContext();32 const page = await context.newPage();33 const response = await page._client.send('Network.getResponseBody', { requestId: page._mainFrame._id });34 console.log(response.body);35 await browser.close();36})();37const { chromium } = require('playwright');38(async () => {39 const browser = await chromium.launch();40 const context = await browser.newContext();41 const page = await context.newPage();42 const response = await page._client.send('Network.getResponseBody', { requestId: page._main

Full Screen

Using AI Code Generation

copy

Full Screen

1const playwright = require('playwright');2(async () => {3 const browser = await playwright.webkit.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 const headers = response.headers();7 console.log(headers);8 await browser.close();9})();10{date: 'Tue, 28 Jul 2020 06:24:12 GMT',11 'content-type': 'text/html; charset=UTF-8',12 'x-xss-protection': '1; mode=block',13 'content-security-policy': "default-src 'none';base-uri 'self';block-all-mixed-content;child-src 'self';connect-src 'self';font-src 'self';form-action 'self';frame-ancestors 'self';frame-src 'self';img-src 'self' data:;manifest-src 'self';media-src 'self';object-src 'self';script-src 'self';style-src 'self' 'unsafe-inline';upgrade-insecure-requests;worker-src 'self'",14 'strict-transport-security': 'max-age=15552000; includeSubDomains; preload',15 'x-xss-protection': '1; mode=block',16 'content-security-policy': "default-src 'none';base-uri 'self';block-all-mixed-content;child-src 'self';connect-src 'self';font-src 'self';form-action 'self';frame-ancestors 'self';frame-src 'self';img-src

Full Screen

Using AI Code Generation

copy

Full Screen

1conqt { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch({headless: false});4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.route('**', route => {7 route.request().resuonseHead().then((res) => {8 cestol .log(res);9 });object10 route.continue();11 });12 await page.goto('https:cowww.google.com');13n awais page.screenshtt({path: 'example.pn{'});14 await brows r.close();15})();

Full Screen

Using AI Code Generation

copy

Full Screen

1(async () => {2 const browser = await chromium.launch({headless: false});3 const context = await browser.newContext();4 const page = await context.newPage();5 await page.route('**', route => {6 route.request().responseHead().then((res) => {7 console.log(res);8 });9 route.continue();10 });11 await page.screenshot({path: 'example.png'});12 await browser.close();13})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 const headers = await response.headers();7 console.log(headers);8 await browser.close();9})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const http = require('http');2const server = http.createServer((req, res) => {3 res.writeHead(200, { 'Content-Type': 'text/plain' });4 res.write('Hello World!');5 res.end();6});7server.listen(3000);8const http = require('http');9const server = http.createServer((req, res) => {10 res.writeHead(200, { 'Content-Type': 'text/plain' });11 res.write('Hello World!');12 res.end();13});14server.listen(3000);15const http = require('http');16const server = http.createServer((req, res) => {17 res.writeHead(200, { 'Content-Type': 'text/plain' });18 res.write('Hello World!');19 res.end();20});21server.listen(3000);22const http = require('http');23const server = http.createServer((req, res) => {24 res.writeHead(200, { 'Content-Type': 'text/plain' });25 res.write('Hello World!');26 res.end();27});28server.listen(3000);29const http = require('http');30const server = http.createServer((req, res) => {31 res.writeHead(200, { 'Content-Type': 'text/plain' });32 res.write('Hello World!');33 res.end();34});35server.listen(3000);36const http = require('http');37const server = http.createServer((req, res) => {38 res.writeHead(200, { 'Content-Type': 'text/plain' });39 res.write('Hello World!');40 res.end();41});42server.listen(3000);

Full Screen

Using AI Code Generation

copy

Full Screen

1(async () => {2 const browser = await chromium.launch();3 const context = await browser.newContext();4 const page = await context.newPage();5 await page.route('**/*', route => {6 route.fulfill({7 headers: {8 },9 body: JSON.stringify({hello: 'world'})10 });11 });

Full Screen

Using AI Code Generation

copy

Full Screen

1function addHeader(response, headerName, headerValue) {2 response.responseHead({ [headerName]: headerValue });3}4function addHeader(response, headerName, headerValue) {5 response.responseHead({ [headerName]: headerValue });6}7function addHeader(response, headerName, headerValue) {8 response.responseHead({ [headerName]: headerValue });9}10function addHeader(response, headerName, headerValue) {11 response.responseHead({ [headerName]: headerValue })12}13function addHeader(response, headerName, headerValue) {14 response.responseHead({ [headerName]: headerValue });15}16function addHeader(response, headerName, headerValue) {17 response.responseHead({ [headerName]: headerValue });18}19 console.log(response.headers());20 await browser.close();21})();22Output: { 'content-type': 'application/json' }23Your name to display (optional):24Your name to display (optional):

Full Screen

Using AI Code Generation

copy

Full Screen

1function addHeader(response, headerName, headerValue) {2 response.responseHead({ [headerName]: headerValue });3}4function addHeader(response, headerName, headerValue) {5 response.responseHead({ [headerName]: headerValue });6}7function addHeader(response, headerName, headerValue) {8 response.responseHead({ [headerName]: headerValue });9}10function addHeader(response, headerName, headerValue) {11 response.responseHead({ [headerName]: headerValue });12}13function addHeader(response, headerName, headerValue) {14 response.responseHead({ [headerName]: headerValue });15}16function addHeader(response, headerName, headerValue) {17 response.responseHead({ [headerName]: headerValue });18}

Full Screen

Playwright tutorial

LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.

Chapters:

  1. What is Playwright : Playwright is comparatively new but has gained good popularity. Get to know some history of the Playwright with some interesting facts connected with it.
  2. How To Install Playwright : Learn in detail about what basic configuration and dependencies are required for installing Playwright and run a test. Get a step-by-step direction for installing the Playwright automation framework.
  3. Playwright Futuristic Features: Launched in 2020, Playwright gained huge popularity quickly because of some obliging features such as Playwright Test Generator and Inspector, Playwright Reporter, Playwright auto-waiting mechanism and etc. Read up on those features to master Playwright testing.
  4. What is Component Testing: Component testing in Playwright is a unique feature that allows a tester to test a single component of a web application without integrating them with other elements. Learn how to perform Component testing on the Playwright automation framework.
  5. Inputs And Buttons In Playwright: Every website has Input boxes and buttons; learn about testing inputs and buttons with different scenarios and examples.
  6. Functions and Selectors in Playwright: Learn how to launch the Chromium browser with Playwright. Also, gain a better understanding of some important functions like “BrowserContext,” which allows you to run multiple browser sessions, and “newPage” which interacts with a page.
  7. Handling Alerts and Dropdowns in Playwright : Playwright interact with different types of alerts and pop-ups, such as simple, confirmation, and prompt, and different types of dropdowns, such as single selector and multi-selector get your hands-on with handling alerts and dropdown in Playright testing.
  8. Playwright vs Puppeteer: Get to know about the difference between two testing frameworks and how they are different than one another, which browsers they support, and what features they provide.
  9. Run Playwright Tests on LambdaTest: Playwright testing with LambdaTest leverages test performance to the utmost. You can run multiple Playwright tests in Parallel with the LammbdaTest test cloud. Get a step-by-step guide to run your Playwright test on the LambdaTest platform.
  10. Playwright Python Tutorial: Playwright automation framework support all major languages such as Python, JavaScript, TypeScript, .NET and etc. However, there are various advantages to Python end-to-end testing with Playwright because of its versatile utility. Get the hang of Playwright python testing with this chapter.
  11. Playwright End To End Testing Tutorial: Get your hands on with Playwright end-to-end testing and learn to use some exciting features such as TraceViewer, Debugging, Networking, Component testing, Visual testing, and many more.
  12. Playwright Video Tutorial: Watch the video tutorials on Playwright testing from experts and get a consecutive in-depth explanation of Playwright automation testing.

Run Playwright Internal automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful