lib/har/viewer/scripts/preview/requestList.js

Summary

Maintainability
A
0 mins
Test Coverage
/* See license.txt for terms of usage */

define("preview/requestList",["domplate/domplate","core/lib","i18n!nls/requestList","preview/harModel","core/cookies","preview/requestBody","domplate/infoTip","domplate/popupMenu"],function(Domplate,Lib,Strings,HarModel,Cookies,RequestBody,InfoTip,Menu){with(Domplate){function RequestList(e){this.input=e,this.pageTimings=[],this.addPageTiming({name:"onContentLoad",classes:"netContentLoadBar",description:Strings.ContentLoad}),this.addPageTiming({name:"onLoad",classes:"netWindowLoadBar",description:Strings.WindowLoad}),InfoTip.addListener(this)}RequestList.columns=["url","status","type","domain","size","timeline"],RequestList.defaultColumns=["url","status","size","timeline"],RequestList.getVisibleColumns=function(){var e=Cookies.getCookie("previewCols");if(e)return e=e.replace(/\+/g," "),e=unescape(e),e.split(" ");if(!e){var t=document.getElementById("content");if(t){e=t.getAttribute("previewCols");if(e)return e.split(" ")}}return Lib.cloneArray(RequestList.defaultColumns)},RequestList.setVisibleColumns=function(e,t){e||(e=RequestList.getVisibleColumns()),e.join&&(e=e.join(" "));var n=document.getElementById("content");n&&n.setAttribute("previewCols",e),t||Cookies.setCookie("previewCols",e)},RequestList.setVisibleColumns(),RequestList.prototype=domplate({tableTag:TABLE({"class":"netTable",cellpadding:0,cellspacing:0,onclick:"$onClick",_repObject:"$requestList"},TBODY(TR({"class":"netSizerRow"},TD({"class":"netHrefCol netCol",width:"20%"}),TD({"class":"netStatusCol netCol",width:"7%"}),TD({"class":"netTypeCol netCol",width:"7%"}),TD({"class":"netDomainCol netCol",width:"7%"}),TD({"class":"netSizeCol netCol",width:"7%"}),TD({"class":"netTimeCol netCol",width:"100%"}),TD({"class":"netOptionsCol netCol",width:"15px"})))),fileTag:FOR("file","$files",TR({"class":"netRow loaded",$isExpandable:"$file|isExpandable",$responseError:"$file|isError",$responseRedirect:"$file|isRedirect",$fromCache:"$file|isFromCache"},TD({"class":"netHrefCol netCol"},DIV({"class":"netHrefLabel netLabel",style:"margin-left: $file|getIndent\\px"},"$file|getHref"),DIV({"class":"netFullHrefLabel netHrefLabel netLabel",style:"margin-left: $file|getIndent\\px"},"$file|getFullHref")),TD({"class":"netStatusCol netCol"},DIV({"class":"netStatusLabel netLabel"},"$file|getStatus")),TD({"class":"netTypeCol netCol"},DIV({"class":"netTypeLabel netLabel"},"$file|getType")),TD({"class":"netDomainCol netCol"},DIV({"class":"netDomainLabel netLabel"},"$file|getDomain")),TD({"class":"netSizeCol netCol"},DIV({"class":"netSizeLabel netLabel"},"$file|getSize")),TD({"class":"netTimeCol netCol"},DIV({"class":"netTimelineBar"},"&nbsp;",DIV({"class":"netBlockingBar netBar"}),DIV({"class":"netResolvingBar netBar"}),DIV({"class":"netConnectingBar netBar"}),DIV({"class":"netSendingBar netBar"}),DIV({"class":"netWaitingBar netBar"}),DIV({"class":"netReceivingBar netBar"},SPAN({"class":"netTimeLabel"},"$file|getElapsedTime")))),TD({"class":"netOptionsCol netCol"},DIV({"class":"netOptionsLabel netLabel",onclick:"$onOpenOptions"})))),headTag:TR({"class":"netHeadRow"},TD({"class":"netHeadCol",colspan:7},DIV({"class":"netHeadLabel"},"$doc.rootFile.href"))),netInfoTag:TR({"class":"netInfoRow"},TD({"class":"netInfoCol",colspan:7})),summaryTag:TR({"class":"netRow netSummaryRow"},TD({"class":"netHrefCol netCol"},DIV({"class":"netCountLabel netSummaryLabel"},"-")),TD({"class":"netStatusCol netCol"}),TD({"class":"netTypeCol netCol"}),TD({"class":"netDomainCol netCol"}),TD({"class":"netTotalSizeCol netSizeCol netCol"},DIV({"class":"netTotalSizeLabel netSummaryLabel"},"0KB")),TD({"class":"netTotalTimeCol netTimeCol netCol"},DIV({"class":"",style:"width: 100%"},DIV({"class":"netCacheSizeLabel netSummaryLabel"},"(",SPAN("0KB"),SPAN(" "+Strings.fromCache),")"),DIV({"class":"netTimeBar"},SPAN({"class":"netTotalTimeLabel netSummaryLabel"},"0ms")))),TD({"class":"netOptionsCol netCol"})),getIndent:function(e){return 0},isError:function(e){var t=Math.floor(e.response.status/100);return t==4||t==5},isRedirect:function(e){return!1},isFromCache:function(e){return e.cache&&e.cache.afterRequest},getHref:function(e){var t=Lib.getFileName(this.getFullHref(e));return unescape(e.request.method+" "+t)},getFullHref:function(e){return unescape(e.request.url)},getStatus:function(e){var t=e.response.status>0?e.response.status+" ":"";return t+e.response.statusText},getType:function(e){return e.response.content.mimeType},getDomain:function(e){return Lib.getPrettyDomain(e.request.url)},getSize:function(e){var t=e.response.bodySize,n=t&&t!=-1?t:e.response.content.size;return this.formatSize(n)},isExpandable:function(e){var t=e.response.headers.length>0,n=e.request.url.indexOf("data:")==0;return t||n},formatSize:function(e){return Lib.formatSize(e)},getElapsedTime:function(e){var t=Math.round(e.time*10)/10;return Lib.formatTime(t)},onClick:function(e){var t=Lib.fixEvent(e);if(Lib.isLeftClick(e)){var n=Lib.getAncestorByClass(t.target,"netRow");n&&(this.toggleHeadersRow(n),Lib.cancelEvent(e))}else Lib.isControlClick(e)&&window.open(e.target.innerText||e.target.textContent)},toggleHeadersRow:function(e){if(!Lib.hasClass(e,"isExpandable"))return;var t=e.repObject;Lib.toggleClass(e,"opened");if(Lib.hasClass(e,"opened")){var n=this.netInfoTag.insertRows({},e)[0];n.repObject=t;var r=new RequestBody;r.render(n.firstChild,t)}else{var n=e.nextSibling,i=Lib.getElementByClass(n,"netInfoBody");e.parentNode.removeChild(n)}},onOpenOptions:function(e){var t=Lib.fixEvent(e);Lib.cancelEvent(e);if(!Lib.isLeftClick(e))return;var n=t.target,r=Lib.getAncestorByClass(n,"netRow"),i=this.getMenuItems(r);if(!i.length)return;var s=new Menu({id:"requestContextMenu",items:i});s.showPopup(n)},getMenuItems:function(e){var t=e.repObject,n=e.phase,r=n.files[0]==t&&this.phases[0]==n,i=[{label:Strings.menuBreakTimeline,type:"checkbox",disabled:r,checked:n.files[0]==t&&!r,command:Lib.bind(this.breakLayout,this,e)},"-",{label:Strings.menuOpenRequest,command:Lib.bind(this.openRequest,this,t)},{label:Strings.menuOpenResponse,disabled:!t.response.content.text,command:Lib.bind(this.openResponse,this,t)}];return Lib.dispatch(this.listeners,"getMenuItems",[i,this.input,t]),i},openRequest:function(e,t){window.open(t.request.url)},openResponse:function(e,t){var n=t.response.content.text,r=t.response.content.mimeType,i=t.response.content.encoding,s="data:"+(r?r:"")+";"+(i?i:"")+","+n;window.open(s)},breakLayout:function(e,t){var n=t.repObject,r=t.phase,i=r.files[0]==n;t.breakLayout=!i,t.setAttribute("breakLayout",t.breakLayout?"true":"false");var s=Lib.getAncestorByClass(t,"netTable"),o=HarModel.getParentPage(this.input,n);this.updateLayout(s,o)},updateLayout:function(e,t){var n=HarModel.getPageEntries(this.input,t);this.table=e;var r=this.table.firstChild,i=this.firstRow=r.firstChild.nextSibling;this.phases=[];var s=Cookies.getCookie("phaseInterval");s||(s=4e3);var o=null,u=t?Lib.parseISO8601(t.startedDateTime):null,a=t&&t.pageTimings?t.pageTimings.onLoad:-1;a>0&&(a+=u);for(var f=0;f<n.length;f++){var l=n[f];Lib.hasClass(i,"netInfoRow")&&(i=i.nextSibling),i.repObject=l,u||(u=Lib.parseISO8601(l.startedDateTime));var c=Lib.parseISO8601(l.startedDateTime),h=o?Lib.parseISO8601(o.getLastStartTime()):0,p=o?o.endTime:0,d=!1;s>=0&&(d=c>a&&c-h>=s&&c+l.time>=p+s),typeof i.breakLayout=="boolean"?!o||i.breakLayout?o=this.startPhase(l):o.addFile(l):!o||d?o=this.startPhase(l):o.addFile(l),this.phases[0]!=o&&i.setAttribute("breakLayout",o.files[0]==l?"true":"false");if(o.startTime==undefined||o.startTime>c)o.startTime=c;if(o.endTime==undefined||o.endTime<c+l.time)o.endTime=c+l.time;i=i.nextSibling}this.updateTimeStamps(t),this.updateTimeline(t),this.updateSummaries(t)},startPhase:function(e){var t=new Phase(e);return this.phases.push(t),t},calculateFileTimes:function(e,t,n){n!=t.phase&&(n=t.phase,this.phaseStartTime=n.startTime,this.phaseEndTime=n.endTime,this.phaseElapsed=this.phaseEndTime-n.startTime);if(!t.timings)return n;var r=t.timings.blocked<0?0:t.timings.blocked,i=r+(t.timings.dns<0?0:t.timings.dns),s=i+(t.timings.connect<0?0:t.timings.connect),o=s+(t.timings.send<0?0:t.timings.send),u=o+(t.timings.wait<0?0:t.timings.wait),a=u+(t.timings.receive<0?0:t.timings.receive),f=t.time,l=Lib.parseISO8601(t.startedDateTime);return this.barOffset=((l-this.phaseStartTime)/this.phaseElapsed*100).toFixed(3),this.barBlockingWidth=(r/this.phaseElapsed*100).toFixed(3),this.barResolvingWidth=(i/this.phaseElapsed*100).toFixed(3),this.barConnectingWidth=(s/this.phaseElapsed*100).toFixed(3),this.barSendingWidth=(o/this.phaseElapsed*100).toFixed(3),this.barWaitingWidth=(u/this.phaseElapsed*100).toFixed(3),this.barReceivingWidth=(a/this.phaseElapsed*100).toFixed(3),this.calculatePageTimings(e,t,n),n},calculatePageTimings:function(e,t,n){if(!e)return;var r=Lib.parseISO8601(e.startedDateTime);for(var i=0;i<n.pageTimings.length;i++){var s=n.pageTimings[i].time;if(s>0){var o=r+s-n.startTime,u=(o/this.phaseElapsed*100).toFixed(3);n.pageTimings[i].offset=u}}},updateTimeline:function(e){var t=this.table.firstChild,n;for(var r=this.firstRow;r;r=r.nextSibling){var i=r.repObject;if(!i)continue;if(Lib.hasClass(r,"netInfoRow"))continue;n=this.calculateFileTimes(e,i,n),r.phase=i.phase,delete i.phase;var s=Lib.getElementByClass(r,"netTimelineBar"),o=s.children[0],u=o.nextSibling,a=u.nextSibling,f=a.nextSibling,l=f.nextSibling,c=l.nextSibling;o.style.left=a.style.left=u.style.left=f.style.left=l.style.left=c.style.left=this.barOffset+"%",o.style.width=this.barBlockingWidth+"%",u.style.width=this.barResolvingWidth+"%",a.style.width=this.barConnectingWidth+"%",f.style.width=this.barSendingWidth+"%",l.style.width=this.barWaitingWidth+"%",c.style.width=this.barReceivingWidth+"%";var h=Lib.getElementsByClass(s,"netPageTimingBar");for(var p=0;p<h.length;p++)h[p].parentNode.removeChild(h[p]);for(var p=0;p<n.pageTimings.length;p++){var d=n.pageTimings[p];if(!d.offset)continue;var v=s.ownerDocument.createElement("DIV");s.appendChild(v),d.classes&&Lib.setClass(v,d.classes),Lib.setClass(v,"netPageTimingBar netBar"),v.style.left=d.offset+"%",v.style.display="block",d.offset=null}}},updateTimeStamps:function(e){if(!e)return;var t=[];for(var n=0;e.pageTimings&&n<this.pageTimings.length;n++){var r=this.pageTimings[n],i=e.pageTimings[r.name];i>0&&t.push({label:r.name,time:i,classes:r.classes,comment:r.description})}var s=e.pageTimings?e.pageTimings._timeStamps:[];s&&t.push.apply(t,s);var o=this.phases;for(var n=0;n<o.length;n++){var u=o[n],a=o[n+1];for(var f=0;f<t.length;f++){var l=t[f],c=l.time;if(!c)continue;var h=Lib.parseISO8601(e.startedDateTime);c+=h;if(!a||c<a.startTime)if(n==0||c>=u.startTime)u.startTime>c&&(u.startTime=c),u.endTime<c&&(u.endTime=c),u.pageTimings.push({classes:l.classes?l.classes:"netTimeStampBar",name:l.label,description:l.comment,time:l.time})}}},updateSummaries:function(e){var t=this.phases,n=0,r=0,i=0,s=0;for(var o=0;o<t.length;++o){var u=t[o];u.invalidPhase=!1;var a=this.summarizePhase(u);n+=a.fileCount,r+=a.totalSize,i+=a.cachedSize,s+=a.totalTime}var f=this.summaryRow;if(!f)return;var l=Lib.getElementByClass(f,"netCountLabel");l.firstChild.nodeValue=this.formatRequestCount(n);var c=Lib.getElementByClass(f,"netTotalSizeLabel");c.setAttribute("totalSize",r),c.firstChild.nodeValue=Lib.formatSize(r);var h=Lib.getElementByClass(f,"netCacheSizeLabel");h.setAttribute("collapsed",i==0),h.childNodes[1].firstChild.nodeValue=Lib.formatSize(i);var p=Lib.getElementByClass(f,"netTotalTimeLabel"),d=Lib.formatTime(s);e&&e.pageTimings.onLoad>0&&(d+=" (onload: "+Lib.formatTime(e.pageTimings.onLoad)+")"),p.innerHTML=d},formatRequestCount:function(e){return e+" "+(e==1?Strings.request:Strings.requests)},summarizePhase:function(e){var t=0,n=0,r="all";r=="all"&&(r=null);var i=0,s=0,o=0;for(var u=0;u<e.files.length;u++){var a=e.files[u],f=Lib.parseISO8601(a.startedDateTime);if(!r||a.category==r){++i;var l=a.response.bodySize,c=l&&l!=-1?l:a.response.content.size;n+=c,a.response.status==304&&(t+=c);if(!s||f<s)s=f;var h=f+a.time;h>o&&(o=h)}}var p=o-s;return{cachedSize:t,totalSize:n,totalTime:p,fileCount:i}},showInfoTip:function(e,t,n,r){var i=Lib.getAncestorByClass(t,"netTable");if(!i||i.repObject!=this)return;var s=Lib.getAncestorByClass(t,"netRow");if(s){if(Lib.getAncestorByClass(t,"netBar")){e.setAttribute("multiline",!0);var o=s.repObject.startedDateTime+"-nettime";return this.infoTipURL=o,this.populateTimeInfoTip(e,s)}if(Lib.hasClass(t,"netSizeLabel")){var o=s.repObject.startedDateTime+"-netsize";return this.infoTipURL=o,this.populateSizeInfoTip(e,s)}}},populateTimeInfoTip:function(e,t){return EntryTimeInfoTip.render(this,t,e),!0},populateSizeInfoTip:function(e,t){return EntrySizeInfoTip.render(this,t,e),!0},render:function(e,t){var n=HarModel.getPageEntries(this.input,t);return n.length?this.append(e,t,n):null},append:function(e,t,n){this.table||(this.table=this.tableTag.replace({requestList:this},e,this)),this.summaryRow||(this.summaryRow=this.summaryTag.insertRows({},this.table.firstChild)[0]);var r=this.table.firstChild,i=r.lastChild.previousSibling,s=this.fileTag.insertRows({files:n},i,this);return this.updateLayout(this.table,t),s[0]},addPageTiming:function(e){this.pageTimings.push(e)}});function Phase(e){this.files=[],this.pageTimings=[],this.addFile(e)}Phase.prototype={addFile:function(e){this.files.push(e),e.phase=this},getLastStartTime:function(){return this.files[this.files.length-1].startedDateTime}};var EntryTimeInfoTip=domplate({tableTag:TABLE({"class":"timeInfoTip"},TBODY()),timingsTag:FOR("time","$timings",TR({"class":"timeInfoTipRow",$collapsed:"$time|hideBar"},TD({"class":"$time|getBarClass timeInfoTipBar",$loaded:"$time.loaded",$fromCache:"$time.fromCache"}),TD({"class":"timeInfoTipCell startTime"},"$time.start|formatStartTime"),TD({"class":"timeInfoTipCell elapsedTime"},"$time.elapsed|formatTime"),TD("$time|getLabel"))),startTimeTag:TR(TD(),TD("$startTime.time|formatStartTime"),TD({"class":"timeInfoTipStartLabel",colspan:2},"$startTime|getLabel")),separatorTag:TR({},TD({"class":"timeInfoTipSeparator",colspan:4,height:"10px"},SPAN("$label"))),eventsTag:FOR("event","$events",TR({"class":"timeInfoTipEventRow"},TD({"class":"timeInfoTipBar",align:"center"},DIV({"class":"$event|getPageTimingClass timeInfoTipEventBar"})),TD("$event.start|formatStartTime"),TD({colspan:2},"$event|getTimingLabel"))),hideBar:function(e){return!e.elapsed&&e.bar=="request.phase.Blocking"},getBarClass:function(e){var t=e.bar.substr(e.bar.lastIndexOf(".")+1);return"net"+t+"Bar"},getPageTimingClass:function(e){return e.classes?e.classes:""},formatTime:function(e){return Lib.formatTime(e)},formatStartTime:function(e){var t=e>0,n=Lib.formatTime(Math.abs(e));return e?(t>0?"+":"-")+n:n},getLabel:function(e){return Strings[e.bar]},getTimingLabel:function(e){return e.bar},render:function(e,t,n){var r=e.input,i=t.repObject,s=HarModel.getParentPage(r,i),o=s?Lib.parseISO8601(s.startedDateTime):null,u=Lib.parseISO8601(i.startedDateTime),a=EntryTimeInfoTip.tableTag.replace({},n),f={};o?f.time=u-o:f.time=u-t.phase.startTime,f.bar="request.Started",this.startTimeTag.insertRows({startTime:f},a.firstChild),this.separatorTag.insertRows({label:Strings["request.phases.label"]},a.firstChild);var l=0,c=[],h=i.timings.blocked,p=i.timings.dns,d=i.timings.ssl,v=i.timings.connect,m=i.timings.send,g=i.timings.wait,y=i.timings.receive;h>=0&&c.push({bar:"request.phase.Blocking",elapsed:h,start:l}),p>=0&&c.push({bar:"request.phase.Resolving",elapsed:p,start:l+=h<0?0:h}),v>=0&&c.push({bar:"request.phase.Connecting",elapsed:v,start:l+=p<0?0:p}),m>=0&&c.push({bar:"request.phase.Sending",elapsed:m,start:l+=v<0?0:v}),g>=0&&c.push({bar:"request.phase.Waiting",elapsed:g,start:l+=m<0?0:m}),y>=0&&c.push({bar:"request.phase.Receiving",elapsed:y,start:l+=g<0?0:g,loaded:i.loaded,fromCache:i.fromCache}),this.timingsTag.insertRows({timings:c},a.firstChild);if(!s)return!0;var b=[];for(var w=0;w<t.phase.pageTimings.length;w++){var E=t.phase.pageTimings[w];b.push({bar:E.description?E.description:E.name,start:o+E.time-u,classes:E.classes,time:E.time})}return b.length&&(b.sort(function(e,t){return e.time<t.time?-1:1}),this.separatorTag.insertRows({label:Strings["request.timings.label"]},a.firstChild),this.eventsTag.insertRows({events:b},a.firstChild)),!0}}),EntrySizeInfoTip=domplate({tag:DIV({"class":"sizeInfoTip"},"$file|getSize"),zippedTag:DIV(DIV({"class":"sizeInfoTip"},"$file|getBodySize"),DIV({"class":"sizeInfoTip"},"$file|getContentSize")),getSize:function(e){var t=e.response.bodySize;return t<0?Strings.unknownSize:Lib.formatString(Strings.tooltipSize,Lib.formatSize(t),Lib.formatNumber(t))},getBodySize:function(e){var t=e.response.bodySize;return t<0?Strings.unknownSize:Lib.formatString(Strings.tooltipZippedSize,Lib.formatSize(t),Lib.formatNumber(t))},getContentSize:function(e){var t=e.response.content.size;return t<0?Strings.unknownSize:Lib.formatString(Strings.tooltipUnzippedSize,Lib.formatSize(t),Lib.formatNumber(t))},render:function(e,t,n){var r=e.input,i=t.repObject;return i.response.bodySize==i.response.content.size?this.tag.replace({file:i},n):this.zippedTag.replace({file:i},n)}});return RequestList}});