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

Summary

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

define(["core/lib","preview/jsonSchema","preview/ref","preview/harSchema","core/cookies","core/trace","i18n!nls/harModel"],function(e,t,n,r,i,s,o){function u(){this.input=null}function a(){var e={};for(var t in this)t!="toJSON"&&(e[t]=this[t]);return this.text?(e.text=Array.prototype.map.call(this.text,function(e){var t=e.charCodeAt(0);if(t>=32&&t<127||t==10||t==13)return e.charAt(0);var n=t.toString(16).toUpperCase();while(n.length<4)n="0"+n;return"\\u"+n}).join(""),e):e}return u.prototype={append:function(t){if(!t){s.error("HarModel.append; Trying to append null input!");return}t.log.entries.sort(function(t,n){var r=e.parseISO8601(t.startedDateTime),i=e.parseISO8601(n.startedDateTime);return r<i?-1:r>i?1:0});if(this.input){if(!t.log.pages)return s.error("Import of additional data without a page is not yet supported."),null;for(var n=0;n<t.log.pages.length;n++)this.importPage(t.log.pages[n],t.log.entries)}else this.input=e.cloneJSON(t);return this.input},getPages:function(){return this.input?this.input.log.pages?this.input.log.pages:[]:[]},getFirstPage:function(){var e=this.getPages();return e.length>0?e[0]:null},getPageEntries:function(e){return u.getPageEntries(this.input,e)},getAllEntries:function(e){return this.input?this.input.log.entries:[]},getParentPage:function(e){return u.getParentPage(this.input,e)},importPage:function(e,t){var n=this.getUniquePageID(e.id),r=e.id;e.id=n,this.input.log.pages.push(e);for(var i=0;i<t.length;i++){var s=t[i];s.pageref==r&&(s.pageref=n,this.input.log.entries.push(s))}},getUniquePageID:function(e){var t=this.input.log.pages,n={};for(var r=0;r<t.length;r++)n[t[r].id]=!0;if(!n[e])return e;var i=1;for(;;){var s=e+i;if(!n[s])return s;i++}},toJSON:function(e){e||(e=this.input);if(!e)return"";var t=this.input.log.entries;for(var n=0;n<t.length;n++){var r=t[n];r.response.content.text&&(r.response.content.toJSON=a)}var i=JSON.stringify(this.input,null,"    "),s=i.replace(/\\\\u/g,"\\u");return s},getSize:function(e){e||(e=this.input);if(!e)return 0;var t=dojo.toJson(e,!0);return t.length}},u.parse=function(e,i){var s=e;try{typeof e=="string"&&(s=jQuery.parseJSON(e))}catch(o){throw console.exception("HarModel.parse; EXCEPTION",o),{errors:[{message:"Failed to parse JSON",property:"JSON evaluation"}]}}if(!i)return s;var u=n.resolveJson(r),a=t.validate(s,u.logType);if(a.valid)return this.validateRequestTimings(s),s;throw a},u.getPageEntries=function(e,t){var n=[],r=e.log.entries;if(!r)return n;for(var i=0;i<r.length;i++){var s=r[i];!s.pageref&&!t&&n.push(s),t&&s.pageref==t.id&&n.push(s)}return n},u.getParentPage=function(e,t){var n=e.log.pages;if(!n)return null;for(var r=0;r<n.length;r++)if(n[r].id==t.pageref)return n[r];return null},u.validateRequestTimings=function(t){var n=[],r=t.log.entries;for(var i=0;i<r.length;i++){var s=r[i],u=s.timings;if(u.blocked<-1||u.connect<-1||u.dns<-1||u.receive<-1||u.send<-1||u.wait<-1){var a=e.formatString(o.validationNegativeTimeError,s.request.url,i,s.pageref);n.push({input:t,file:s,message:a,property:o.validationType})}}if(n.length)throw{errors:n,input:t}},u.Loader={run:function(t,n){var r=e.getURLParameter("baseUrl");r&&r[r.length-1]!="/"&&(r+="/");var i=e.getURLParameters("path"),s=e.getURLParameter("callback"),o=e.getURLParameters("inputUrl").concat(e.getHashParameters("inputUrl")),u=[];for(var a in i)u.push(r?r+i[a]:i[a]);for(var a in o)u.push(o[a]);if((r||o.length>0)&&u.length>0)return this.loadRemoteArchive(u,s,t,n);var f=e.getURLParameter("path");if(f)return this.loadLocalArchive(f,t,n)},loadExample:function(e,t){var n=document.location.href,r=n.indexOf("?");document.location=n.substr(0,r)+"?path="+e,i.setCookie("timeline",!0),i.setCookie("stats",!0)},loadLocalArchive:function(e,t,n){return $.ajax({url:e,context:this,dataType:"json",success:function(e){t(e)},error:function(e,t,r){n(e,t,r)}}),!0},loadRemoteArchive:function(e,t,n,r){if(!e.length)return!1;var i=e.shift();return t||(t="onInputData"),$.ajax({url:i,context:this,dataType:"jsonp",jsonp:"callback",jsonpCallback:t,success:function(i){n&&n(i);if(e.length){var s=this;setTimeout(function(){s.loadRemoteArchive(e,t,n,r)},300)}},error:function(e,t,n){r&&r(e,t,n)}}),!0},load:function(e,t,n,r,i,s){function o(t){e.appendPreview&&e.appendPreview(t),i&&i.call(e,t)}function u(t,n,r){e.onLoadError&&e.onLoadError(t,n,r),s&&s.call(e,t,n,r)}return n?this.loadRemoteArchive([t],r,o,u):this.loadLocalArchive(t,o,u)}},u});