cnastasi/async_http_client

View on GitHub
metrics.html

Summary

Maintainability
Test Coverage
<html>
<head>
    <title>PhpMetrics report v1.10.0 - by Jean-François Lépine</title>
    <meta charset="utf-8">
    <link href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFA+LP9QPiz/UD4s/1A+LP9QPiz/UD4s/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUD4s/1A+LP9QPiz/UD4s/1A+LP9QPiz/UD4s/1A+LP9QPiz/UD4s/wAAAAAAAAAAAAAAAAAAAAAAAAAAUD4s/1A+LP9QPiz/UD4s/1A+LP9QPiz/UD4s/wC6eP8sdU7/ALp4/1A+LP9QPiz/AAAAAAAAAAAAAAAAUD4s/1A+LP9QPiz/UD4s/1A+LP9QPiz/UD4s/wC6eP9QPiz/SUgy/wC6eP9LRTD/ALp4/1A+LP8AAAAAAAAAAFA+LP9QPiz/UD4s/1A+LP9QPiz/UD4s/wC6eP89Wz3/ALp4/wCz9P8As/T/UD4s/wC6eP9QPiz/AAAAAFA+LP9QPiz/UD4s/1A+LP9QPiz/TkAt/1A+LP8Aunj/OGJC/wCz9P8As/T/ALP0/xSbZf9QPiz/UD4s/1A+LP9QPiz/UD4s/1A+LP9QPiz/ALp4/1A+LP8Aunj/ALp4/wui2P9QPiz/Cabd/wevcf8Aunj/UD4s/1A+LP9QPiz/UD4s/1A+LP9QPiz/TUMv/wC6eP8Aunj/ALp4/wC6eP8Aunj/ALp4/wynbP9QPiz/K3dP/zZmRP9QPiz/UD4s/1A+LP9QPiz/ALp4/wC6eP8Aunj/TEQw/xqSX/8As/T/SEoz/wC6eP8BuHf/ALP0/wC6eP8Aunj/C6ht/1A+LP9QPiz/OWFC/wC6eP8Aunj/ALp4/01BLv8qdYv/UD4s/wCz9P9QPiz/ALp4/1A+LP8Aunj/ALp4/wC6eP9QPiz/UD4s/1A+LP8As/T/ALP0/1A+LP8As/T/ALP0/wC6eP8Aunj/UD4s/wC6eP8za0f/UD4s/xeVYv8Kqm7/UD4s/wAAAABQPiz/ALP0/wCz9P8Aunj/ALP0/zdhaf9QPiz/UD4s/wC6eP9QPiz/ALp4/wC6eP8Aunj/UD4s/wAAAAAAAAAAUD4s5FA+LP9QPiz/UD4s/wCz9P8As/T/UD4s/wC6eP8Snmf/UD4s/1A+LP9QPiz/UD4s/1A+LP8AAAAAAAAAAAAAAABQPiz/UD4s/1A+LP8As/T/ALP0/1A+LP8Aunj/UD4s/1A+LP9QPiz/UD4s/1A+LP8AAAAAAAAAAAAAAAAAAAAAAAAAADwvIZJQPiz/UD4s/1A+LP9QPiz/UD4s/1A+LP9QPiz/UD4s/1A+LNMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEY2J1ZQPiz/UD4s/1A+LP9QPiz/RjYnpQAAAAAAAAAAAAAAAAAAAAAAAAAA+B8AAOAHAADAAwAAgAEAAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAAgAEAAMADAADgBwAA/B8AAA==" rel="icon" type="image/x-icon" />    <style type="text/css">
                        /* ---- layout ---- */
body {
    font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
    margin: 0;
    padding: 0;
    font-size: 1em;
    text-align: center;
    margin-bottom: 2.5em;
}
.container {
    width: 1170px;
    text-align: left;
    margin: 0 auto;
}
.row {
    position: relative;
    clear: left;
}
.col-3 {
    float:left;
    width:28%;
    margin-right:2%;
}
.col-3:last-child {
    margin-right: 0;
}
.col-3:last-child:after {
    content:" ";
    clear:left;
}

.col-6 {
    float:left;
    width:48%;
    margin-right:2%;
}
.col-3:last-child {
    margin-right: 0;
}
.col-3:last-child:after {
    content:" ";
    clear:left;
}

.accessibility-box {
    float:right;
    width: 200px;
}

.menu, .menu li {
    list-style: none;
    margin: 0;
    padding: 0;
}
.menu li {
    display: inline-block;
    padding: 10px 15px;
}
.menu li.active {
    background-color: #428bca;
    border-radius: 4px;
}
.menu li.active a {
    color: #fff;
}
.footer {
    position: fixed;
    bottom: 0;
    left:0;
    text-align: center;
    font-size: 0.9em;
    background: #FFF;
    height: 2.5em;
    width: 100%;
}
.footer .container {
    text-align: center;
}


/* ---- tabs ---- */
.tab-pane {
    display:none;
}
.tab-pane.active {
    display:block;
}


/* ----- fonts ----- */
a:hover, a:focus {
    color: #2a6496;
    text-decoration: underline;
}
a:active, a:hover {
    outline: 0;
}
a {
    color: #428bca;
    text-decoration: none;
    cursor: pointer;
}
h1, h2, h3, h4, h5, h6 {
    font-family: inherit;
    font-weight: 500;
    line-height: 1.1;
    color: inherit;
}
h4 {
    font-weight: bold;
}
.more {
    color: #666;
    font-size: 0.9em;
}


/* ---- general styles ----- */
.validate-critical, .critical {
    background-color:#B01E00 !important;
    color:#FFF;
}
.validate-warning, .warning {
    background-color:#f4b300 !important;
    color:#333;
}
.validate-good, .good {
    background-color:#78ba00 !important;
    color:#FFF;
}
.validate-unknown, .unknown {
}

/* ---- tables ---- */
table {
    border-spacing: 0;
    border-collapse: collapse;
}
.table {
    width: 100%;
    max-width: 100%;
    margin-bottom: 20px;
    font-size:0.8em;
}
.table-bordered {
    border: 1px solid #ddd;
}
.table thead {
    font-weight:normal;
}
.table>thead>tr>th, .table>tbody>tr>th, .table>tfoot>tr>th, .table>thead>tr>td, .table>tbody>tr>td, .table>tfoot>tr>td {
    padding: 8px;
    line-height: 1.42857143;
    vertical-align: top;
    border-top: 1px solid #ddd;
}
.table-striped>tbody>tr:nth-child(odd)>td, .table-striped>tbody>tr:nth-child(odd)>th {
    background-color: #f9f9f9;
}
.mytable td {
    width:4%;
    text-align:center;
}
.mytable .sep {
    border-left:1px solid #CCC;
}

.well {
    min-height: 20px;
    padding: 19px;
    margin-bottom: 20px;
    background-color: #f5f5f5;
    border: 1px solid #e3e3e3;
    border-radius: 4px;
    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.05);
    box-shadow: inset 0 1px 1px rgba(0,0,0,.05);
}


/* ---- form ---- */
.form-control {
    display: block;
    width: 100%;
    height: 34px;
    padding: 6px 12px;
    font-size: 14px;
    line-height: 1.42857143;
    color: #555;
    background-color: #fff;
    background-image: none;
    border: 1px solid #ccc;
    border-radius: 4px;
    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
    box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
    -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;
    -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
    transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
}

/* ---- Charts ---- */
#chart-tableview .critical,
#chart-tableview .warning,
#chart-tableview .good,
#chart-tableview .unknown {
    display:block;
    text-align: center;
}

#svg-custom,
#svg-maintainability,
#svg-abstractness {
    width:300px;
    height:300px;
}
.svg-main {
    margin: 0 auto;
    width:960px;;
    height:960px;;
}


/* ---- maintainability ---- */
#svg-maintainability svg circle:hover {
    fill:steelblue !important;
}

/* ---- relations ---- */
.node {
    font: 300 11px "Helvetica Neue", Helvetica, Arial, sans-serif;
    fill: #bbb;
}
.node:hover {
    fill: #000;
}
.link {
    stroke: steelblue;
    stroke-opacity: .4;
    fill: none;
    pointer-events: none;
}
.node:hover,
.node--source,
.node--target {
    font-weight: 700;
}
.node--source {
    fill: #AE113D;
}
.node--target {
    fill: #4617B4;
}
.link--source,
.link--target {
    stroke-opacity: 1;
    stroke-width: 2px;
}
.link--source {
    stroke: #AE113D;
}
.link--target {
    stroke: #4617B4;
}
.relation-source {
    background-color: #AE113D;
}
.relation-target {
    background-color: #4617B4;
}


/* ---- tooltip ---- */
.tooltip {
    position: absolute;
    background: #333;
    border-radius: 5px;
    padding: 5px 15px;
    box-shadow: 1px 1px 3px;
    text-align: left;
    color:#FFF;
    z-index: 4;
}

/* ---- zoom ---- */
.zoomed {
    position: fixed;
    z-index: 2;
    top: 20px;
    left: 0;
    width: 100% !important;
    height: 95% !important;
    background: #FFF;
}
.btn-close {
    position: fixed;
    z-index: 3;
    top: 0;
    background: #333;
    width: 100%;
    text-align: center;
    margin: 0 auto;
    padding: 3px 0;
    height: 20px;
    lien-height: 20px;
}
.btn-close a {
    color: #FFF;
}
    </style>
                <link rel="stylesheet" type="text/css" href="http://nvd3.org/assets/css/nv.d3.css">
        <link rel="stylesheet" type="text/css" href="https://cdn.rawgit.com/alangrafu/radar-chart-d3/master/src/radar-chart.min.css">
    </head>

<body>

<div class="container">



    <h1 id="title">PhpMetrics report</h1>

    <div class="row">
        <div class="well accessibility-box">
            <label>
                <input type="checkbox" onclick="toggleAccessibility()"> I'm colorblind
            </label>
        </div>

        <div class="menu-box">
            <ul id="menu" class="menu" >
                <li id="link-overview" class="active"><a >Overview</a></li>
                <li id="link-score"><a >Evaluation</a></li>
                <li id="link-relations"><a  >Relations map</a></li>
                <li id="link-repartition"><a  >Repartition</a></li>
                <li id="link-explore"><a >Explore</a></li>
                
                <li id="link-help"><a  >Help</a></li>
            </ul>
        </div>


    </div>


    <div class="tab-content row">


        <!-- General details -->
        <div class="row tab active" id="overview">
            <div class="col-3">
                <h3>Evaluation</h3>
                <small><a id="btn-save-maintainability" download="phpmetric-maintainability.svg">Download (as SVG)</a> | <a onclick="return zoom('svg-maintainability', updateMaintainabilityChart);">zoom</a></small>
                <div id="svg-maintainability"><svg /></div>

                <div class="well ">

                    <h4>Information</h4>
                    <p>
                        Each file is symbolized by a circle.
                        Size of the circle represents the Cyclomatic complexity.
                        Color of the circle represents the Maintainability Index.
                    </p>
                    <p>Large red circles will be probably hard to maintain.</p>
                </div>

            </div>
            <div class=" col-3">

                <h3 id="title-custom">Custom chart</h3>
                <small><a id="btn-save-custom" download="phpmetric-custom.svg">Download (as SVG)</a> | <a onclick="return zoom('svg-custom', updateCustomChart);">zoom</a></small>
                <div id="svg-custom"><svg /></div>

                <div class="well">
                    <h4>Configuration</h4>
                    <p>
                        Select metrics you want to display in chart.
                    </p>
                    <table class="table table-condensed table-bordered">
                        <tr>
                            <td>X Axis</td>
                            <td>Y Axis</td>
                            <td>Diameter</td>
                        </tr>
                        <tr>
                            <td>
                                <select id="xAxis" class="form-control" onchange="xAxis = this.value; updateCustomChart();">
                                                                            <option value="afferentCoupling">Afferent Coupling </option>
                                                                            <option value="bugs">Bugs </option>
                                                                            <option value="commentWeight">Comment Weight </option>
                                                                            <option value="cyclomaticComplexity">Cyclomatic Complexity </option>
                                                                            <option value="dc">Dc </option>
                                                                            <option value="difficulty">Difficulty </option>
                                                                            <option value="efferentCoupling">Efferent Coupling </option>
                                                                            <option value="effort">Effort </option>
                                                                            <option value="filename">Filename </option>
                                                                            <option value="instability">Instability </option>
                                                                            <option value="intelligentContent">Intelligent Content </option>
                                                                            <option value="lcom">Lcom </option>
                                                                            <option value="length">Length </option>
                                                                            <option value="loc">Loc </option>
                                                                            <option value="logicalLoc">Logical Loc </option>
                                                                            <option value="maintainabilityIndex">Maintainability Index </option>
                                                                            <option value="maintainabilityIndexWithoutComment">Maintainability Index Without Comment </option>
                                                                            <option value="myerDistance">Myer Distance </option>
                                                                            <option value="myerInterval">Myer Interval </option>
                                                                            <option value="name">Name </option>
                                                                            <option value="noc">Noc </option>
                                                                            <option value="noc-anon">Noc-anon </option>
                                                                            <option value="noca">Noca </option>
                                                                            <option value="nocc">Nocc </option>
                                                                            <option value="noi">Noi </option>
                                                                            <option value="nom">Nom </option>
                                                                            <option value="operators">Operators </option>
                                                                            <option value="rdc">Rdc </option>
                                                                            <option value="rsc">Rsc </option>
                                                                            <option value="rsysc">Rsysc </option>
                                                                            <option value="sc">Sc </option>
                                                                            <option value="sysc">Sysc </option>
                                                                            <option value="time">Time </option>
                                                                            <option value="vocabulary">Vocabulary </option>
                                                                            <option value="volume">Volume </option>
                                                                    </select>
                            </td>
                            <td>
                                <select id="yAxis" class="form-control" onchange="yAxis = this.value; updateCustomChart();">
                                                                            <option value="afferentCoupling">Afferent Coupling </option>
                                                                            <option value="bugs">Bugs </option>
                                                                            <option value="commentWeight">Comment Weight </option>
                                                                            <option value="cyclomaticComplexity">Cyclomatic Complexity </option>
                                                                            <option value="dc">Dc </option>
                                                                            <option value="difficulty">Difficulty </option>
                                                                            <option value="efferentCoupling">Efferent Coupling </option>
                                                                            <option value="effort">Effort </option>
                                                                            <option value="filename">Filename </option>
                                                                            <option value="instability">Instability </option>
                                                                            <option value="intelligentContent">Intelligent Content </option>
                                                                            <option value="lcom">Lcom </option>
                                                                            <option value="length">Length </option>
                                                                            <option value="loc">Loc </option>
                                                                            <option value="logicalLoc">Logical Loc </option>
                                                                            <option value="maintainabilityIndex">Maintainability Index </option>
                                                                            <option value="maintainabilityIndexWithoutComment">Maintainability Index Without Comment </option>
                                                                            <option value="myerDistance">Myer Distance </option>
                                                                            <option value="myerInterval">Myer Interval </option>
                                                                            <option value="name">Name </option>
                                                                            <option value="noc">Noc </option>
                                                                            <option value="noc-anon">Noc-anon </option>
                                                                            <option value="noca">Noca </option>
                                                                            <option value="nocc">Nocc </option>
                                                                            <option value="noi">Noi </option>
                                                                            <option value="nom">Nom </option>
                                                                            <option value="operators">Operators </option>
                                                                            <option value="rdc">Rdc </option>
                                                                            <option value="rsc">Rsc </option>
                                                                            <option value="rsysc">Rsysc </option>
                                                                            <option value="sc">Sc </option>
                                                                            <option value="sysc">Sysc </option>
                                                                            <option value="time">Time </option>
                                                                            <option value="vocabulary">Vocabulary </option>
                                                                            <option value="volume">Volume </option>
                                                                    </select>
                            </td>
                            <td>
                                <select id="rAxis" class="form-control" onchange="rAxis = this.value; updateCustomChart();">
                                                                            <option value="afferentCoupling">Afferent Coupling </option>
                                                                            <option value="bugs">Bugs </option>
                                                                            <option value="commentWeight">Comment Weight </option>
                                                                            <option value="cyclomaticComplexity">Cyclomatic Complexity </option>
                                                                            <option value="dc">Dc </option>
                                                                            <option value="difficulty">Difficulty </option>
                                                                            <option value="efferentCoupling">Efferent Coupling </option>
                                                                            <option value="effort">Effort </option>
                                                                            <option value="filename">Filename </option>
                                                                            <option value="instability">Instability </option>
                                                                            <option value="intelligentContent">Intelligent Content </option>
                                                                            <option value="lcom">Lcom </option>
                                                                            <option value="length">Length </option>
                                                                            <option value="loc">Loc </option>
                                                                            <option value="logicalLoc">Logical Loc </option>
                                                                            <option value="maintainabilityIndex">Maintainability Index </option>
                                                                            <option value="maintainabilityIndexWithoutComment">Maintainability Index Without Comment </option>
                                                                            <option value="myerDistance">Myer Distance </option>
                                                                            <option value="myerInterval">Myer Interval </option>
                                                                            <option value="name">Name </option>
                                                                            <option value="noc">Noc </option>
                                                                            <option value="noc-anon">Noc-anon </option>
                                                                            <option value="noca">Noca </option>
                                                                            <option value="nocc">Nocc </option>
                                                                            <option value="noi">Noi </option>
                                                                            <option value="nom">Nom </option>
                                                                            <option value="operators">Operators </option>
                                                                            <option value="rdc">Rdc </option>
                                                                            <option value="rsc">Rsc </option>
                                                                            <option value="rsysc">Rsysc </option>
                                                                            <option value="sc">Sc </option>
                                                                            <option value="sysc">Sysc </option>
                                                                            <option value="time">Time </option>
                                                                            <option value="vocabulary">Vocabulary </option>
                                                                            <option value="volume">Volume </option>
                                                                    </select>
                            </td>
                        </tr>
                    </table>
                </div>

            </div>
            <div class="col-3">
                <h3>Abstractness / Instability</h3>
                <small><a id="btn-save-abstractness" download="phpmetric-abstractness.svg">Download (as SVG)</a> | <a onclick="return zoom('svg-abstractness', updateAbstractnessChart);">zoom</a></small>
                <div id="svg-abstractness"><svg /></div>
            </div>
        </div>
        <!-- end: General details -->

        <!-- Score -->
        <div class="tab" id="score">
            <div class="col-sm-12">
                <h3>Score</h3>

                <div class="col-6">
                    <div id="chart-score"></div>
                </div>

                <div class="col-6">
                    <p>
                        This score is not absolute. This chart is a comparison of your project relative to a representative average of recent PHP projects.
                    </p>
                    <p>
                        Each score is calculated from <acronym title="Cyclomatic complexity, Halstead metrics, Maintainability Index, Comment weight, Difficulty, Logical lines of code...">various criterias</acronym> from 8 files in your projects.
                        Your score is a note between 0 (poor) and 100 (excellent).
                    </p>
                    <table class="table">
                        <thead>
                            <tr>
                                <th>Factor</th>
                                <th>Score</th>
                            </tr>
                        </thead>
                        <tbody>
                                                    <tr>
                                <td>Maintainability</td>
                                <td>100 / 100</td>
                            </tr>
                                                    <tr>
                                <td>Accessibility for new developers</td>
                                <td>91.1 / 100</td>
                            </tr>
                                                    <tr>
                                <td>Simplicity of algorithms</td>
                                <td>96.43 / 100</td>
                            </tr>
                                                    <tr>
                                <td>Volume</td>
                                <td>100 / 100</td>
                            </tr>
                                                    <tr>
                                <td>Reducing bug&#039;s probability</td>
                                <td>100 / 100</td>
                            </tr>
                                                </tbody>
                    </table>
                    <p>
                        <strong>This score does not replace the judgement of a human.</strong>
                    </p>
                </div>
            </div>
        </div>
        <!-- end: Score -->

        <!-- Relations -->
        <div class="tab" id="relations">
            <h3>Relations</h3>
            <div class="col-sm-12">
                <div class="well">
                    <p>
                        Class uses another when it calls, constructs, types hint, extends or implements it.
                    </p>
                    <ul>
                        <li><span class="badge relation-source">Used by</span> : this class is used by hovered element.</li>
                        <li><span class="badge relation-target">Uses</span> : this class uses hovered element.</li>
                    </ul>

                </div>
                <small><a id="btn-save-relations" download="phpmetric-relations.svg">Download (as SVG)</a></small>
                <div class="svg-main" id="svg-relations"><svg /></div>

            </div>
        </div>
        <!-- end: Relations -->


        <!-- Tabular datas -->
        <div class="tab" id="explore">
            <div class="col-sm-12">
                <h3>Explore</h3>
                <p>
                    <select id="select-display-tabular">
                        <option value="all" selected="selected">Display metrics</option>
                        <option value="essential">Essential</option>
                        <option value="all">All</option>
                    </select>
                </p>
                <div id="chart-tableview"></div>
            </div>
        </div>
        <!-- end: Tabular datas -->


        <!-- Volume -->
        <div class="tab" id="repartition">
            <h3>Repartition</h3>
            <div class="col-3">
                <table class="table table-striped">
                    <tbody>
                        <tr>
                            <td>Files</td>
                            <td>8</td>
                        </tr>
                        <tr>
                            <td>Lines of code</td>
                            <td>
                                325
                                                                    <span class="more">(41 by class,
                                        14 by method)</span>
                                                            </td>
                        </tr>
                        <tr>
                            <td>Logical lines of code</td>
                            <td>
                                67
                                                                    <span class="more">(8 by class,
                                        3 by method)</span>
                                                            </td>
                        </tr>
                        <tr>
                            <td>Classes</td>
                            <td>8
                                                                    <div>
                                        <span class="more">
                                            4 interfaces (50 %)
                                        </span>
                                    </div>
                                    <div>
                                        <span class="more">
                                            4 concrete classes (50 %)
                                        </span>
                                    </div>
                                    <div>
                                        <span class="more">
                                            4 abstract classes (50 %)
                                        </span>
                                    </div>
                                    <div>
                                        <span class="more">
                                            0 anonymous classes (0 %)
                                        </span>
                                    </div>
                                                            </td>
                        </tr>

                        <tr>
                            <td>Methods</td>
                            <td>
                                23
                                                                    <span class="more">(2.9 by class )</span>
                                                            </td>
                        </tr>
                    </tbody>
                </table>
            </div>
            <div class="col-3">
                <table class="table table-striped">
                    <tbody>
                    <tr>
                        <td>Relative system complexity</td>
                        <td>1.48</td>
                    </tr>
                    <tr>
                        <td>Relative data complexity</td>
                        <td>0.98</td>
                    </tr>
                    <tr>
                        <td>Relative structure complexity</td>
                        <td>0.5</td>
                    </tr>
                    </tbody>
                </table>
            </div>
            <div class="col-3">
                <table class="table table-striped">
                    <tbody>
                    <tr>
                        <td>Lack of cohesion of methods</td>
                        <td>0.5</td>
                    </tr>
                    <tr>
                        <td>Efferent Coupling</td>
                        <td>1.25</td>
                    </tr>
                    <tr>
                        <td>Afferent Coupling</td>
                        <td>0</td>
                    </tr>
                    <tr>
                        <td>Abstractness</td>
                        <td>0.5</td>
                    </tr>
                    </tbody>
                </table>
            </div>
        </div>
        <!-- end: Volume -->

        <!-- Help -->
        <div class="tab" id="help">
            <div class="col-sm-12">
                <h3>Help</h3>
                <ul>
                    <li>You're using PhpMetrics v1.10.0</li>
                    <li>Online help is available on the <a href="http://www.phpmetrics.org/documentation/index.html">PhpMetrics website</a>.</li>
                    <li>Sources of PhpMetrics are available on <a href="https://github.com/PhpMetrics/PhpMetrics">Github</a>.</li>
                    <li>PhpMetrics is created by <a href="http://lepine.pro">Jean-François Lépine</a>.</li>
                </ul>
            </div>
        </div>
        <!-- end: Help -->

        <!-- Extensions blocks -->
        
        <!-- end: Extensions -->

    </div>


    <div class="row footer">
        <div class="container">
            Powered by <a href="http://www.phpmetrics.org">PhpMetrics</a> v1.10.0 - Copyright Jean-François Lépine
            <br/> Generated on 28th of December 2016 at 01:23:36 AM
        </div>
    </div>

</div>







<script type="text/javascript">


    function validate() {
        return 'unknown';
    }


    function validate(key, value) {
        var rule = ruleSet[key];

        if(typeof(rule) === 'undefined' || rule === undefined) {
            return 'unknown';
        }

        // according order
        if(rule[0] < rule[2]) {
            // critical < warn < good
            switch(true) {
                case value < rule[1]:
                    return 'critical';
                case value >= rule[1] && value < rule[2]:
                    return 'warning';
                default:
                    return 'good';
            }
        } else {
            // critical > warn > good
            switch(true) {
                case value > rule[1]:
                    return 'critical';
                case value < rule[2]:
                    return 'good';
                default:
                    return 'warning';
            }
        }
    }

    function validateIn(results, key, type) {
        type = type || 'average';
        var value = results[type] ? results[type][key] : results[key];
        return validate(key, value);
    }


    function textify(string) {
        string = string.charAt(0).toUpperCase() + string.slice(1);
        return string.replace(/([a-z0-9])([A-Z])/, "$1 $2");
    }

    function toggleAccessibility() {
        accessibilityEnabled = !!!accessibilityEnabled;
        document.getElementById('svg-maintainability').firstElementChild.innerHTML = '';
        updateMaintainabilityChart();

    }


    function displayTab(e, id) {

        var i, tabs = document.getElementsByClassName('tab');
        for(i = 0; i < tabs.length; i++) {
            tabs[i].style.display = 'none';
        }
        document.getElementById(id).style.display = 'block';

        var child, menu = document.getElementById('menu');
        var nodes = menu.childNodes;
        for(var i = 0; i < nodes.length; i++) {
            nodes[i].className = '';
        }

        e.className = 'active';
    }

    function zoom(id, callback) {
        var e = document.getElementById(id);

        // preserve olds values
        e.setAttribute('data-original-width', e.offsetWidth);
        e.setAttribute('data-original-height', e.offsetHeight);

        // zoom
        e.className = 'zoomed';

        // add close button
        var close = document.createElement('div');
        close.setAttribute('id', 'btn-close');
        close.innerHTML = '<a>Close</a>';
        document.body.appendChild(close);
        close.className = 'btn-close'
        close.onclick = function(id, callback) {
            return function() {
                zoomOut(id, callback);
            }
        }(id, callback);

        // apply callback
        callback();
    }

    function zoomOut(id, callback) {
        var e = document.getElementById(id);

        // zoom
        e.className = '';

        // remove close button
        var close = document.getElementById('btn-close');
        close.parentNode.removeChild(close);

        // apply callback
        var w = e.getAttribute('data-original-width');
        callback(w);
    }

</script>
    <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
    <script src="http://nvd3.org/assets/js/nv.d3.js" charset="utf-8"></script>
    <script src="https://cdn.rawgit.com/alangrafu/radar-chart-d3/master/src/radar-chart.min.js" charset="utf-8"></script>
<script type="text/javascript">

    function updateScoreChart() {
        if(updateScoreChart.initiazed) return;
        updateScoreChart.initiazed = true;
        var score = [
            {
                className: 'score',
                axes: [
                                            {axis: "Maintainability", value: 100 },
                                            {axis: "Accessibility for new developers", value: 91 },
                                            {axis: "Simplicity of algorithms", value: 96 },
                                            {axis: "Volume", value: 100 },
                                            {axis: "Reducing bug's probability", value: 100 },
                                    ]
            }
        ];

        var chart = RadarChart.chart();
        chart.config({
            maxValue: 100,
            w: 500,
            h: 500
        });
        var svg = d3.select('#chart-score').append('svg');

        // darw one
        svg.append('g').classed('focus', 1).datum(score).call(chart);
        svg.attr('width', 500).attr('height', 500);
    }
</script>
<script type="text/javascript">

    var tabularCurrentView = 'all';

    function updateTableView() {

        document.getElementById('chart-tableview').innerHTML = '';

        /**
         * Get column header
         *
         * @param label
         * @param key
         * @param type [average|sum|min|max]
         * @returns object
         */
        function getCol(label, key, type, help, doValidate) {
            type = type || false;
            if(doValidate == undefined) {
                doValidate = true;
            }
            return {
                format: function(d) {
                    if(type) {
                        return d[type] ? d[type][key] : d[key];
                    }
                    return d[key];
                },
                label: '<abbr title="' + help + '">' + label + '</abbr>',
                type: type,
                classes:
                        ( doValidate
                            ? function(d) { return validateIn(d,key, type); }
                            : ''
                        )
            };
        }

        /**
         * Get all columns
         *
         * @returns {*[]}
         */
        function getAllColumns() {
            return [
                getCol('loc'            , 'loc'                     , 'sum'     , 'Number of lines of code'                 , false),
                getCol('lloc'           , 'logicalLoc'              , 'sum'     , 'Number of logical lines of code'         ,false),
                getCol('CommW'          , 'commentWeight'           , 'average' , 'Comment Weight'),
                getCol('Length'         , 'length'                  , 'sum'     , 'Halstead length'),
                getCol('Volume'         , 'volume'                  , 'average' , 'Halstead Volume'),
                getCol('Vocabulary'     , 'vocabulary'              , 'average' , 'Halstead Vocabulary'),
                getCol('Eff.'           , 'effort'                  , 'average' , 'Halstead effort'),
                getCol('MI'             , 'maintainabilityIndex'     , 'average' , 'Maintainability Index (mi < 65: low ; 65 < mi < 85: correct; 85 < mi: good)'),
                getCol('MIwC'           , 'maintainabilityIndexWithoutComment' , 'average', 'Maintainability index without comments'),
                getCol('Diff'           , 'difficulty'              , 'average' , 'Halstead difficulty (average)'),
                getCol('Bugs'           , 'bugs'                    , 'average' , 'Estimated number of bugs (average by file)'),
                getCol('IC'             , 'intelligentContent'      , 'average' , 'Intelligent content'),
                getCol('CC'             , 'cyclomaticComplexity'    , 'average' , "Cyclomatic complexity"),
                getCol('Dist.'          , 'myerDistance'            , 'average' , "Myer's distance"),
                getCol('Oper.'          , 'operators'               , 'sum'     , 'Number of operators'                 , false),
                getCol('lcom'           , 'lcom'                    , 'average' , 'Lack of cohesion of methods (LCOM4)'),
                getCol('rsysc'          , 'rsysc'                   , 'average' , 'Relative System complexity'),
                getCol('rdc'            , 'rdc'                     , 'average' , 'Relative Data complexity'),
                getCol('rsc'            , 'rsc'                     , 'average' , 'Relative Structural complexity'),
                getCol('Abstr.'         , 'abstractness'            , false     , 'Abstractness'),
                getCol('Inst.'          , 'instability'             , false     , 'Instability'),
                getCol('EC'             , 'efferentCoupling'        , 'average' , 'Efferent coupling'),
                getCol('AC'             , 'afferentCoupling'        , 'average' , 'Afferent coupling'),
                getCol('noc'            , 'noc'                     , 'sum'     , 'Number of classes'                   , false),
                getCol('noca'           , 'noca'                    , 'sum'     , 'Number of abstract classes and interfaces'          , false),
                getCol('nocc'           , 'nocc'                    , 'sum'     , 'Number of concrete classes'          , false),
                getCol('noi'            , 'noi'                     , 'sum'     , 'Number of interfaces'                , false)
            ];
        }

        /**
         * Get essentials columns
         *
         * @returns {*[]}
         */
        function getEssentialColumns() {
            return [
                getCol('Lines of code'            , 'loc'                     , 'sum'     , 'Number of lines of code'                 , false),
                getCol('Logical lines of code'           , 'logicalLoc'              , 'sum'     , 'Number of logical lines of code'         ,false),
                getCol('Comment weight'          , 'commentWeight'           , 'average' , 'Comment Weight'),
                getCol('Maintainability index'             , 'maintainabilityIndex'     , 'average' , 'Maintainability Index (mi < 65: low ; 65 < mi < 85: correct; 85 < mi: good)'),
                getCol('Bugs'           , 'bugs'                    , 'average' , 'Estimated number of bugs (average by file)'),
                getCol('Lack of cohesion of methods'           , 'lcom'                    , 'average' , 'Lack of cohesion of methods (LCOM4)'),
            ];
        }

        /**
         * Get only active columns
         *
         * @returns {*[]}
         */
        function getActiveColumns() {
            switch(tabularCurrentView) {
                case 'essential':
                    return getEssentialColumns();
                case 'all':
                default:
                    return getAllColumns();
            }
        }

        nv.addGraph(function() {
            var columns = getActiveColumns();
            columns.unshift({
                key: 'name',
                label: 'Name',
                showCount: true,
                type: 'text',
                classes: function(d) {
                    return  'name '
                            + (d.childs ? 'clickable ' : '')
                            + 'depth-' + d._depth;
                }
            });
            var chart = nv.models.indentedTree()
                    .tableClass('table table-striped') //for bootstrap styling
                    .columns(columns);

            d3.select('#chart-tableview')
                    .datum(tabularize(JSON.parse(JSON.stringify(groupedData))))
                    .call(chart);

            // fix bug with nvd3js and html in labels
            d3.select('#chart-tableview').selectAll('th').each(function() {
                this.innerHTML = this.innerText;
            });



            return chart;
        });

        // select type of display
        var d = document.getElementById('select-display-tabular');
        d.onchange = function(){
            tabularCurrentView = this.options[this.selectedIndex].value;
            updateTableView();
        }

    }

    function tabularize(root) {
        var result = root;

        var i, len = root.length;

        for(i = 0; i < len; i++) {
            result[i]._values = root[i].childs;
            delete result[i].childs;
            result[i]._depth = result[i].depth;
        }

        // we want to display results in a tree
        var parents = [
            { name: "temporary", _values: []}
        ];
        var final, e, level, separator;
        separator = "/";
        for(i = 0; i < len; i++) {
            if (result[i].name.indexOf("\\") !== -1) {
                separator = "\\";
                break;
            }
        }
        for(i = 0; i < len; i++) {
            e = result[i];
            level = (e.name.split(separator).length - 1);
            if(!e.name.match(/\.php$/)) {
                parents[level + 1] = e;
                parents[level]._values.push(e);
            } else {
                parents[level]._values.push(e);
            }
        }
        final = parents[1];
        return [final];
    }



</script>
<script type="text/javascript">

    function updateMaintainabilityChart() {
        chartMaintainability();
    };

    function chartMaintainability() {
        var maxHeight = document.getElementById('svg-maintainability').offsetHeight,
            maxWidth = document.getElementById('svg-maintainability').offsetWidth,
            format = d3.format(",d"),
            color = d3.scale.category20c();

        var bubble = d3.layout.pack()
            .sort(null)
            .size([maxWidth, maxHeight])
            .padding(1.5);

        var r = d3.scale.linear().range([1, maxWidth / 4]).domain([1, 100]);
        var x = d3.scale.linear().range([1, maxWidth]);
        var y = d3.scale.linear().range([1, maxHeight]);



        d3.select("#svg-maintainability").html("<svg></svg>");
        var svg = d3.select("#svg-maintainability").select("svg")
            .attr("width", maxWidth)
            .attr("height", maxHeight)
            .attr("class", "bubble");


        // accessibility for colorblind
        var defs= svg.append('defs');
        defs.append('pattern')
                    .attr('id', 'hash-warning')
                    .attr('patternUnits', 'userSpaceOnUse')
                    .attr('width', 4)
                    .attr('height', 4)
                    .append('path')
                        .attr('d', 'M-1,1 l2,-2 M0,4 l4,-4 M3,5 l2,-2')
                        .attr('stroke', '#000000')
                        .attr('stroke-width', 1);
        defs.append('pattern')
                    .attr('id', 'hash-critical')
                    .attr('patternUnits', 'userSpaceOnUse')
                    .attr('width', 4)
                    .attr('height', 4)
                    .append('path')
                        .attr('d', 'M-1,1 l2,-2 M0,4 l4,-4 M3,5 l2,-2')
                        .attr('stroke', '#000000')
                        .attr('stroke-width', 3);
        defs.append('pattern')
                .attr('id', 'hash-good')
                .attr('patternUnits', 'userSpaceOnUse')
                .attr('width', 5)
                .attr('height', 5)
                .append('circle')
                    .attr('cx', 2)
                    .attr('cy', 2)
                    .attr('r', 2)
                    .attr('style', "stroke:none;fill:#eee");

        // initialization
        d3
            .select('#svg-maintainability')
            .datum(data)
            .call(bubble)
                ;

        var node = svg.selectAll(".node")
            .data(
                bubble.nodes(mapDatas(data))
                .filter(function(d) { return !d.children; })
            )
            .enter().append("g")
            .attr("class", "node");

            node
                .append('circle')
                // uncomment following line if you want fixed size for your bubble (cyclo=1 => size=1)
                //.attr("r", function(d) { return r(d.value);})
                .attr("r", function(d) { return d.r; })
                .attr("x", function(d) { return x(d.x)})
                .attr("y", function(d) { return y(d.y)})

                .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; })
                // events
                .on('mouseover', function(d) {
                    var text = '<strong>' + d.name + '</strong>'
                            + "<br />Cyclomatic Complexity : " + format(d.cyclomaticComplexity)
                            + "<br />Maintainability Index: " + format(d.maintainabilityIndex);
                    d3.select('.tooltip').html(text);
                    d3.select(".tooltip").style("opacity", 1);
                })
                .on('mousemove', function() {
                    d3.select(".tooltip")
                            .style("left", (d3.event.pageX + 5) + "px")
                            .style("top",  (d3.event.pageY + 5) + "px");
                })
                .on('mouseout', function() {
                    d3.select(".tooltip").style("opacity", 0);
                })
                // for colorblinds
                .style("fill", function(d) {
                    if(accessibilityEnabled) {
                        return 'url(#hash-'+ validate('maintainabilityIndex', d.maintainabilityIndex) +')'
                    }
                    switch(validate('maintainabilityIndex', d.maintainabilityIndex)) {
                        case 'good':
                            return '#78BA00';
                        case 'warning':
                            return '#F4B300';
                        case 'critical':
                            return '#FF2E12';
                        default:
                            return '#CCCCCC';
                    }
                })
                .style('stroke-width', function(d) {
                    return accessibilityEnabled ? 1 : 0;
                })
                .style('stroke', '#000')
        ;

        // tooltip
        d3.select("body")
                .append("div")
                .attr("class", "tooltip")
                .style("opacity", 0);

        // Save as
        function mapDatas(root) {
            var datas = [];
            var i, color;
            for(i in root) {
                var e = root[i];
                datas.push({
                    "value": parseFloat(e.cyclomaticComplexity) + 1
                    , "name": e.filename
                    , "cyclomaticComplexity": parseFloat(e.cyclomaticComplexity)
                    , "maintainabilityIndex": parseInt(e.maintainabilityIndex)
                });
            }
            return {"children":datas};
        }

        d3.select(self.frameElement).style("height", maxWidth + "px");


        // Save as
        document.getElementById('btn-save-maintainability').onmouseover = function() {
            var e = this;
            if(e.className != 'initialized') {
                var svgc  = document.getElementById('svg-maintainability').childNodes[0]
                        , xml  = new XMLSerializer().serializeToString(svgc)
                        , xmldata = btoa(xml);
                e.href = 'data:application/octet-stream;base64,' + xmldata;
                e.className = 'initialized';
            }
        };


    }






</script>
<script type="text/javascript">



    function updateCustomChart() {
        chartCustom(xAxis, yAxis, rAxis);
        document.getElementById('title-custom').innerHTML = textify(xAxis) + ' / ' + textify(yAxis);
    };


    function chartCustom(xData, yData, rData) {


        var chart;
        document.getElementById('svg-custom').innerHTML = '<svg />';
        nv.addGraph(function() {
            chart = nv.models.scatterChart()
                    .showDistX(true)
                    .showDistY(true)
                    .showLegend(false)
                    .useVoronoi(false)
                    .color(d3.scale.category10().range())
                    .transitionDuration(300)
            ;

            chart.xAxis.tickFormat(d3.format('.02f')).axisLabel(textify(xData));
            chart.yAxis.tickFormat(d3.format('.02f')).axisLabel(textify(yData));
            chart.tooltipContent(function(key, x, y, e, graph) {
                return '<h2>' + e.point.title + '</h2>';
            });
            chart.scatter.useVoronoi(false);


            d3.select("#svg-custom").select("svg")
                    .attr("width",380)
                    .attr("height",300)
                    .datum(mapDatas(data))
                    .call(chart);

            nv.utils.windowResize(chart.update);

            chart.dispatch.on('stateChange', function(e) { ('New State:', JSON.stringify(e)); });


            // Save as
            var svg  = document.getElementById('svg-custom').childNodes[0],
                    xml  = new XMLSerializer().serializeToString(svg),
                    xmldata = btoa(xml),
                    img  = new Image();
            document.getElementById('btn-save-custom').href =  'data:application/octet-stream;base64,' + xmldata;


            return chart;
        });


        function mapDatas(root) {
            var results = [
                { key: textify(xData) + " / " + textify(yData) + " chart", "values": [] }
            ];
            var i;
            for(i in root) {
                var e = root[i];
                results[0].values.push({
                    "title": e.filename
                    , "x": Math.max(0,parseFloat(e[xData]))
                    , "y": Math.max(0,parseFloat(e[yData]))
                    , size: Math.max(0,parseFloat(e[rData]))
                    , shape: 'round'
                });
            }
            return results;
        }

    }


</script>
<script type="text/javascript">

    function updateAbstractnessChart() {
            chartAbstractness();
    };

    function chartAbstractness() {
        if(chartAbstractness.initiazed) return;
        chartAbstractness.initiazed = true;

        var xData = 'abstractness';
        var yData = 'instability';
        var rData = 'loc';

        var chart;
        nv.addGraph(function() {
            chart = nv.models.scatterChart()
                    .showDistX(true)
                    .showDistY(true)
                    .useVoronoi(false)
                    .showLegend(false)
                    .color(d3.scale.category10().range())
                    .transitionDuration(300)
                    .forceY([0, 1])
                    .forceX([0, 1])
            ;

            chart.xAxis.tickFormat(d3.format('.02f'))
                    .axisLabel('Abstractness');
            chart.yAxis.tickFormat(d3.format('.02f'))
                    .axisLabel('Instability')
            chart.tooltipContent(function(key, x, y, e, graph) {
                return '<h2>' + e.point.name + '</h2>';
            });
            chart.scatter.useVoronoi(false);

            d3.select("#svg-abstractness").select("svg")
                    .attr("width",380)
                    .attr("height",300)
                    .attr("class",'svg')
                    .datum(mapDatas(groupedData))
                    .call(chart);

            nv.utils.windowResize(chart.update);

            chart.dispatch.on('stateChange', function(e) { ('New State:', JSON.stringify(e)); });


            // line (legend)
            chart = nv.models.lineChart()
                    .options({
                        margin: {left: 75, bottom: 50},
                        x: function(d,i) { return i},
                        showXAxis: false,
                        showYAxis: false,
                        showLegend: false,
                        transitionDuration: 300
                    })
                    .forceY([0, 1])
                    .forceX([0, 1])
            ;

            d3.select("#svg-abstractness").select("svg")
                    .datum([{key:" ", values:[ {x:0, y:1}, {x:1, y:0}  ]  , color: '#EEE'  }])
                    .attr("width",380)
                    .attr("height",300)
                    .call(chart);



            // btn save as
            var svg = document.getElementById('svg-abstractness').childNodes[0],
                    xml  = new XMLSerializer().serializeToString(svg),
                    xmldata = btoa(xml);
            document.getElementById('btn-save-abstractness').href = 'data:application/octet-stream;base64,' + xmldata;

            return chart;
        });

        function mapDatas(root) {
            var results = [
                { key: textify(xData) + " / " + textify(yData) + " chart", "values": [] }
            ];
            var i;
            for(i in root) {
                var e = root[i];
                results[0].values.push({
                    "name": e.name
                    , "x": Math.max(0,parseFloat(e[xData]))
                    , "y": Math.max(0,parseFloat(e[yData]))
                    , size: Math.max(0,parseFloat([rData]))
                    , shape: 'round'
                });
            }
            return results;
        }
    }
</script>
<script type="text/javascript">
    /**
     * Thank's to http://bl.ocks.org/mbostock/raw/7607999/
     */
    var relations = [{"name":"\\AsyncHttpClient\\Service\\AsyncHttpService","size":3000,"relations":["React\\HttpClient\\Response"]},{"name":"\\AsyncHttpClient\\Service\\AsyncHttpGenericService","size":3000,"relations":["React\\HttpClient\\Response"]},{"name":"\\AsyncHttpClient\\Logger\\AsyncHttpLogger","size":3000,"relations":[]},{"name":"\\AsyncHttpClient\\Logger\\AsyncHttpLoggerDefault","size":3000,"relations":["AsyncHttpClient\\Helper\\Time"]},{"name":"\\AsyncHttpClient\\Helper\\Time","size":3000,"relations":[]},{"name":"\\AsyncHttpClient\\Helper\\TimeDefault","size":3000,"relations":[]},{"name":"\\AsyncHttpClient\\Core\\AsyncHttpClientDefault","size":3000,"relations":["React\\HttpClient\\Client","React\\EventLoop\\LoopInterface","AsyncHttpClient\\Logger\\AsyncHttpLogger","AsyncHttpClient\\Service\\AsyncHttpService","React\\HttpClient\\Request","React\\HttpClient\\Response"]},{"name":"\\AsyncHttpClient\\Core\\AsyncHttpClient","size":3000,"relations":["AsyncHttpClient\\Service\\AsyncHttpService"]},{"name":"React\\HttpClient\\Response","relations":[],"size":3000},{"name":"AsyncHttpClient\\Helper\\Time","relations":[],"size":3000},{"name":"React\\HttpClient\\Client","relations":[],"size":3000},{"name":"React\\EventLoop\\LoopInterface","relations":[],"size":3000},{"name":"AsyncHttpClient\\Logger\\AsyncHttpLogger","relations":[],"size":3000},{"name":"AsyncHttpClient\\Service\\AsyncHttpService","relations":[],"size":3000},{"name":"React\\HttpClient\\Request","relations":[],"size":3000}];

    function updateRelationsChart() {

        if(updateRelationsChart.initiazed) return;
        updateRelationsChart.initiazed = true;

        var diameter = 960,
                radius = diameter / 2,
                innerRadius = radius - 120;

        var cluster = d3.layout.cluster()
                .size([360, innerRadius])
                .sort(null)
                .value(function(d) { return d.size; });

        var bundle = d3.layout.bundle();

        var line = d3.svg.line.radial()
                .interpolate("bundle")
                .tension(.85)
                .radius(function(d) { return d.y; })
                .angle(function(d) { return d.x / 180 * Math.PI; });

        var svg = d3.select("#svg-relations").select("svg")
                .attr("width", diameter)
                .attr("height", diameter)
                .append("g")
                .attr("transform", "translate(" + radius + "," + radius + ")");

        var link = svg.append("g").selectAll(".link"),
                node = svg.append("g").selectAll(".node");



        var nodes = cluster.nodes(packageHierarchy(relations)),
                links = packageImports(nodes);
        link = link
                .data(bundle(links))
                .enter().append("path")
                .each(function(d) { d.source = d[0], d.target = d[d.length - 1]; })
                .attr("class", "link")
                .attr("d", line);

        node = node
                .data(nodes.filter(function(n) { return !n.children; }))
                .enter().append("text")
                .attr("class", "node")
                .attr("dy", ".31em")
                .attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + (d.y + 8) + ",0)" + (d.x < 180 ? "" : "rotate(180)"); })
                .style("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; })
                .text(function(d) { return d.key; })
                .on("mouseover", mouseovered)
                .on("mouseout", mouseouted);


//        d3.data(relations);

        function mouseovered(d) {
            node
                    .each(function(n) { n.target = n.source = false; });

            link
                    .classed("link--target", function(l) { if (l.target === d) return l.source.source = true; })
                    .classed("link--source", function(l) { if (l.source === d) return l.target.target = true; })
                    .filter(function(l) { return l.target === d || l.source === d; })
                    .each(function() { this.parentNode.appendChild(this); });

            node
                    .classed("node--target", function(n) { return n.target; })
                    .classed("node--source", function(n) { return n.source; });
        }

        function mouseouted(d) {
            link
                    .classed("link--target", false)
                    .classed("link--source", false);

            node
                    .classed("node--target", false)
                    .classed("node--source", false);
        }

        d3.select(self.frameElement).style("height", diameter + "px");

        // Lazily construct the package hierarchy from class names.
        function packageHierarchy(classes) {
            var map = {};

            function find(name, data) {
                name = (data ? name + ' ' : name);
                var node = map[name], i;
                if (!node) {
                    node = map[name] = data || {name: name, children: []};
                    if (name.length) {
                        node.parent = find(name.substring(0, i = name.lastIndexOf("\\")));
                        if(!node.parent.children) {
                            node.parent.children = []; // fix anomalies
                        }
                        node.parent.children.push(node);
                        node.key = name.substring(i + 1);
                    }
                }
                return node;
            }

            classes.forEach(function(d) {
                find(d.name, d);
            });

            return map[""];
        }

        // Return a list of imports for the given array of nodes.
        function packageImports(nodes) {
            var map = {},
                    imports = [];

            // Compute a map from name to node.
            nodes.forEach(function(d) {
                map[d.name] = d;
            });

            // For each import, construct a link from the source to target node.
            nodes.forEach(function(d) {
                if (d.relations) d.relations.forEach(function(i) {
                    imports.push({source: map[d.name], target: map[i]});
                });
            });

            return imports;
        }


    }


    // Save as
    document.getElementById('btn-save-relations').onmouseover = function() {
        var e = this;
        if(e.className != 'initialized') {
            var svgc  = document.getElementById('svg-relations').childNodes[0]
                    , xml  = new XMLSerializer().serializeToString(svgc)
                    , xmldata = btoa(xml);
            e.href = 'data:application/octet-stream;base64,' + xmldata;
            e.className = 'initialized';
        }
    };


</script>


<script type="text/javascript">

    document.onreadystatechange = function() {
        if(document.readyState == 'complete') {
            // init tabs
            document.getElementById('link-overview').onclick = function() { displayTab(this, 'overview'); updateAbstractnessChart(); updateCustomChart(); updateMaintainabilityChart(); };
            document.getElementById('link-score').onclick = function() { displayTab(this, 'score'); updateScoreChart(); };
            document.getElementById('link-relations').onclick = function() { displayTab(this, 'relations'); updateRelationsChart(); };
            document.getElementById('link-explore').onclick = function() { displayTab(this, 'explore'); updateTableView(); };
            document.getElementById('link-repartition').onclick = function() { displayTab(this, 'repartition'); };
            document.getElementById('link-help').onclick = function() { displayTab(this, 'help')};
            document.getElementById('menu').firstElementChild.onclick();

            // selects
            document.getElementById('xAxis').value = xAxis;
            document.getElementById('yAxis').value = yAxis;
            document.getElementById('rAxis').value = rAxis;

            
        }
    }


    // default selected elements
    var xAxis = 'lcom';
    var yAxis = 'cyclomaticComplexity';
    var rAxis = 'loc';



        var data = [{"filename":"src\/Service\/AsyncHttpService.php","name":"src\/Service\/AsyncHttpService.php","loc":33,"logicalLoc":5,"volume":60.94,"length":17,"vocabulary":12,"effort":33.24,"difficulty":"0.55","time":2,"bugs":0.02,"intelligentContent":111.73,"maintainabilityIndexWithoutComment":"72.12","maintainabilityIndex":"117.64","commentWeight":45.52,"instability":1,"afferentCoupling":0,"efferentCoupling":1,"noc":1,"noca":1,"nocc":0,"noc-anon":0,"noi":1,"nom":3,"cyclomaticComplexity":1,"myerInterval":"1:1","myerDistance":0,"operators":0,"lcom":0,"sysc":2,"rsysc":0.67,"dc":1,"rdc":0.33,"sc":1,"rsc":0.33},{"filename":"src\/Service\/AsyncHttpGenericService.php","name":"src\/Service\/AsyncHttpGenericService.php","loc":66,"logicalLoc":12,"volume":349.77,"length":72,"vocabulary":29,"effort":2007.4,"difficulty":"5.74","time":112,"bugs":0.12,"intelligentContent":60.95,"maintainabilityIndexWithoutComment":"58.38","maintainabilityIndex":"100.21","commentWeight":41.83,"instability":1,"afferentCoupling":0,"efferentCoupling":1,"noc":1,"noca":0,"nocc":1,"noc-anon":0,"noi":0,"nom":4,"cyclomaticComplexity":2,"myerInterval":"2:2","myerDistance":0,"operators":0,"lcom":1,"sysc":7,"rsysc":1.75,"dc":6,"rdc":1.5,"sc":1,"rsc":0.25},{"filename":"src\/Logger\/AsyncHttpLogger.php","name":"src\/Logger\/AsyncHttpLogger.php","loc":16,"logicalLoc":3,"volume":43.19,"length":13,"vocabulary":10,"effort":23.99,"difficulty":"0.56","time":1,"bugs":0.01,"intelligentContent":77.73,"maintainabilityIndexWithoutComment":"78.01","maintainabilityIndex":"118.64","commentWeight":40.63,"instability":0,"afferentCoupling":0,"efferentCoupling":0,"noc":1,"noca":1,"nocc":0,"noc-anon":0,"noi":1,"nom":2,"cyclomaticComplexity":1,"myerInterval":"1:1","myerDistance":0,"operators":0,"lcom":0,"sysc":5,"rsysc":2.5,"dc":5,"rdc":2.5,"sc":0,"rsc":0},{"filename":"src\/Logger\/AsyncHttpLoggerDefault.php","name":"src\/Logger\/AsyncHttpLoggerDefault.php","loc":59,"logicalLoc":11,"volume":408.07,"length":84,"vocabulary":29,"effort":2986.33,"difficulty":"7.32","time":166,"bugs":0.14,"intelligentContent":55.76,"maintainabilityIndexWithoutComment":"58.87","maintainabilityIndex":"94.97","commentWeight":36.1,"instability":1,"afferentCoupling":0,"efferentCoupling":1,"noc":1,"noca":0,"nocc":1,"noc-anon":0,"noi":0,"nom":4,"cyclomaticComplexity":1,"myerInterval":"1:1","myerDistance":0,"operators":0,"lcom":1,"sysc":7.5,"rsysc":1.88,"dc":6.5,"rdc":1.63,"sc":1,"rsc":0.25},{"filename":"src\/Helper\/Time.php","name":"src\/Helper\/Time.php","loc":14,"logicalLoc":2,"volume":13.93,"length":6,"vocabulary":5,"effort":6.97,"difficulty":"0.5","time":0,"bugs":0,"intelligentContent":27.86,"maintainabilityIndexWithoutComment":"85.29","maintainabilityIndex":"127.74","commentWeight":42.45,"instability":0,"afferentCoupling":0,"efferentCoupling":0,"noc":1,"noca":1,"nocc":0,"noc-anon":0,"noi":1,"nom":1,"cyclomaticComplexity":1,"myerInterval":"1:1","myerDistance":0,"operators":0,"lcom":0,"sysc":0,"rsysc":0,"dc":0,"rdc":0,"sc":0,"rsc":0},{"filename":"src\/Helper\/TimeDefault.php","name":"src\/Helper\/TimeDefault.php","loc":16,"logicalLoc":2,"volume":31.7,"length":10,"vocabulary":9,"effort":31.7,"difficulty":"1","time":2,"bugs":0.01,"intelligentContent":31.7,"maintainabilityIndexWithoutComment":"82.79","maintainabilityIndex":"123.42","commentWeight":40.63,"instability":0,"afferentCoupling":0,"efferentCoupling":0,"noc":1,"noca":0,"nocc":1,"noc-anon":0,"noi":0,"nom":1,"cyclomaticComplexity":1,"myerInterval":"1:1","myerDistance":0,"operators":0,"lcom":1,"sysc":1,"rsysc":1,"dc":1,"rdc":1,"sc":0,"rsc":0},{"filename":"src\/Core\/AsyncHttpClientDefault.php","name":"src\/Core\/AsyncHttpClientDefault.php","loc":103,"logicalLoc":28,"volume":1108.25,"length":190,"vocabulary":57,"effort":11037.26,"difficulty":"9.96","time":613,"bugs":0.37,"intelligentContent":111.28,"maintainabilityIndexWithoutComment":"46.84","maintainabilityIndex":"82.47","commentWeight":35.63,"instability":1,"afferentCoupling":0,"efferentCoupling":6,"noc":1,"noca":0,"nocc":1,"noc-anon":0,"noi":0,"nom":6,"cyclomaticComplexity":2,"myerInterval":"2:2","myerDistance":0,"operators":0,"lcom":1,"sysc":19.92,"rsysc":3.32,"dc":3.92,"rdc":0.65,"sc":16,"rsc":2.67},{"filename":"src\/Core\/AsyncHttpClient.php","name":"src\/Core\/AsyncHttpClient.php","loc":18,"logicalLoc":4,"volume":42,"length":14,"vocabulary":8,"effort":30,"difficulty":"0.71","time":2,"bugs":0.01,"intelligentContent":58.8,"maintainabilityIndexWithoutComment":"75.37","maintainabilityIndex":"114.36","commentWeight":38.99,"instability":1,"afferentCoupling":0,"efferentCoupling":1,"noc":1,"noca":1,"nocc":0,"noc-anon":0,"noi":1,"nom":2,"cyclomaticComplexity":1,"myerInterval":"1:1","myerDistance":0,"operators":0,"lcom":0,"sysc":1.5,"rsysc":0.75,"dc":0.5,"rdc":0.25,"sc":1,"rsc":0.5}]
    var groupedData = [{"name":"src","childs":[],"depth":1,"abstractness":0.5,"instability":1,"average":{"filename":0,"name":0,"loc":40.63,"logicalLoc":8.38,"volume":257.23,"length":50.75,"vocabulary":19.88,"effort":2019.61,"difficulty":3.29,"time":112.25,"bugs":0.09,"intelligentContent":66.98,"maintainabilityIndexWithoutComment":69.71,"maintainabilityIndex":109.93,"commentWeight":40.22,"instability":0.63,"afferentCoupling":0,"efferentCoupling":1.25,"noc":1,"noca":0.5,"nocc":0.5,"noc-anon":0,"noi":0.5,"nom":2.88,"cyclomaticComplexity":1.25,"myerInterval":1.25,"myerDistance":0,"operators":0,"lcom":0.5,"sysc":5.49,"rsysc":1.48,"dc":2.99,"rdc":0.98,"sc":2.5,"rsc":0.5},"min":{"filename":"src\/Core\/AsyncHttpClient.php","name":"src\/Core\/AsyncHttpClient.php","loc":14,"logicalLoc":2,"volume":13.93,"length":6,"vocabulary":5,"effort":6.97,"difficulty":"0.5","time":0,"bugs":0,"intelligentContent":27.86,"maintainabilityIndexWithoutComment":"46.84","maintainabilityIndex":"82.47","commentWeight":35.63,"instability":0,"afferentCoupling":0,"efferentCoupling":0,"noc":1,"noca":0,"nocc":0,"noc-anon":0,"noi":0,"nom":1,"cyclomaticComplexity":1,"myerInterval":"1:1","myerDistance":0,"operators":0,"lcom":0,"sysc":0,"rsysc":0,"dc":0,"rdc":0,"sc":0,"rsc":0},"max":{"filename":"src\/Service\/AsyncHttpService.php","name":"src\/Service\/AsyncHttpService.php","loc":103,"logicalLoc":28,"volume":1108.25,"length":190,"vocabulary":57,"effort":11037.26,"difficulty":"9.96","time":613,"bugs":0.37,"intelligentContent":111.73,"maintainabilityIndexWithoutComment":"85.29","maintainabilityIndex":"127.74","commentWeight":45.52,"instability":1,"afferentCoupling":0,"efferentCoupling":6,"noc":1,"noca":1,"nocc":1,"noc-anon":0,"noi":1,"nom":6,"cyclomaticComplexity":2,"myerInterval":"2:2","myerDistance":0,"operators":0,"lcom":1,"sysc":19.92,"rsysc":3.32,"dc":6.5,"rdc":2.5,"sc":16,"rsc":2.67},"sum":{"filename":0,"name":0,"loc":325,"logicalLoc":67,"volume":2057.85,"length":406,"vocabulary":159,"effort":16156.89,"difficulty":26.34,"time":898,"bugs":0.68,"intelligentContent":535.81,"maintainabilityIndexWithoutComment":557.67,"maintainabilityIndex":879.45,"commentWeight":321.78,"instability":5,"afferentCoupling":0,"efferentCoupling":10,"noc":8,"noca":4,"nocc":4,"noc-anon":0,"noi":4,"nom":23,"cyclomaticComplexity":10,"myerInterval":10,"myerDistance":0,"operators":0,"lcom":4,"sysc":43.92,"rsysc":11.87,"dc":23.92,"rdc":7.86,"sc":20,"rsc":4}},{"name":"src\/Service","childs":[{"filename":"src\/Service\/AsyncHttpService.php","name":"src\/Service\/AsyncHttpService.php","loc":33,"logicalLoc":5,"volume":60.94,"length":17,"vocabulary":12,"effort":33.24,"difficulty":"0.55","time":2,"bugs":0.02,"intelligentContent":111.73,"maintainabilityIndexWithoutComment":"72.12","maintainabilityIndex":"117.64","commentWeight":45.52,"instability":1,"afferentCoupling":0,"efferentCoupling":1,"noc":1,"noca":1,"nocc":0,"noc-anon":0,"noi":1,"nom":3,"cyclomaticComplexity":1,"myerInterval":"1:1","myerDistance":0,"operators":0,"lcom":0,"sysc":2,"rsysc":0.67,"dc":1,"rdc":0.33,"sc":1,"rsc":0.33},{"filename":"src\/Service\/AsyncHttpGenericService.php","name":"src\/Service\/AsyncHttpGenericService.php","loc":66,"logicalLoc":12,"volume":349.77,"length":72,"vocabulary":29,"effort":2007.4,"difficulty":"5.74","time":112,"bugs":0.12,"intelligentContent":60.95,"maintainabilityIndexWithoutComment":"58.38","maintainabilityIndex":"100.21","commentWeight":41.83,"instability":1,"afferentCoupling":0,"efferentCoupling":1,"noc":1,"noca":0,"nocc":1,"noc-anon":0,"noi":0,"nom":4,"cyclomaticComplexity":2,"myerInterval":"2:2","myerDistance":0,"operators":0,"lcom":1,"sysc":7,"rsysc":1.75,"dc":6,"rdc":1.5,"sc":1,"rsc":0.25}],"depth":2,"abstractness":0.5,"instability":1,"average":{"filename":0,"name":0,"loc":49.5,"logicalLoc":8.5,"volume":205.36,"length":44.5,"vocabulary":20.5,"effort":1020.32,"difficulty":3.15,"time":57,"bugs":0.07,"intelligentContent":86.34,"maintainabilityIndexWithoutComment":65.25,"maintainabilityIndex":108.93,"commentWeight":43.68,"instability":1,"afferentCoupling":0,"efferentCoupling":1,"noc":1,"noca":0.5,"nocc":0.5,"noc-anon":0,"noi":0.5,"nom":3.5,"cyclomaticComplexity":1.5,"myerInterval":1.5,"myerDistance":0,"operators":0,"lcom":0.5,"sysc":4.5,"rsysc":1.21,"dc":3.5,"rdc":0.92,"sc":1,"rsc":0.29},"min":{"filename":"src\/Service\/AsyncHttpGenericService.php","name":"src\/Service\/AsyncHttpGenericService.php","loc":33,"logicalLoc":5,"volume":60.94,"length":17,"vocabulary":12,"effort":33.24,"difficulty":"0.55","time":2,"bugs":0.02,"intelligentContent":60.95,"maintainabilityIndexWithoutComment":"58.38","maintainabilityIndex":"100.21","commentWeight":41.83,"instability":1,"afferentCoupling":0,"efferentCoupling":1,"noc":1,"noca":0,"nocc":0,"noc-anon":0,"noi":0,"nom":3,"cyclomaticComplexity":1,"myerInterval":"1:1","myerDistance":0,"operators":0,"lcom":0,"sysc":2,"rsysc":0.67,"dc":1,"rdc":0.33,"sc":1,"rsc":0.25},"max":{"filename":"src\/Service\/AsyncHttpService.php","name":"src\/Service\/AsyncHttpService.php","loc":66,"logicalLoc":12,"volume":349.77,"length":72,"vocabulary":29,"effort":2007.4,"difficulty":"5.74","time":112,"bugs":0.12,"intelligentContent":111.73,"maintainabilityIndexWithoutComment":"72.12","maintainabilityIndex":"117.64","commentWeight":45.52,"instability":1,"afferentCoupling":0,"efferentCoupling":1,"noc":1,"noca":1,"nocc":1,"noc-anon":0,"noi":1,"nom":4,"cyclomaticComplexity":2,"myerInterval":"2:2","myerDistance":0,"operators":0,"lcom":1,"sysc":7,"rsysc":1.75,"dc":6,"rdc":1.5,"sc":1,"rsc":0.33},"sum":{"filename":0,"name":0,"loc":99,"logicalLoc":17,"volume":410.71,"length":89,"vocabulary":41,"effort":2040.64,"difficulty":6.29,"time":114,"bugs":0.14,"intelligentContent":172.68,"maintainabilityIndexWithoutComment":130.5,"maintainabilityIndex":217.85,"commentWeight":87.35,"instability":2,"afferentCoupling":0,"efferentCoupling":2,"noc":2,"noca":1,"nocc":1,"noc-anon":0,"noi":1,"nom":7,"cyclomaticComplexity":3,"myerInterval":3,"myerDistance":0,"operators":0,"lcom":1,"sysc":9,"rsysc":2.42,"dc":7,"rdc":1.83,"sc":2,"rsc":0.58}},{"name":"src\/Logger","childs":[{"filename":"src\/Logger\/AsyncHttpLogger.php","name":"src\/Logger\/AsyncHttpLogger.php","loc":16,"logicalLoc":3,"volume":43.19,"length":13,"vocabulary":10,"effort":23.99,"difficulty":"0.56","time":1,"bugs":0.01,"intelligentContent":77.73,"maintainabilityIndexWithoutComment":"78.01","maintainabilityIndex":"118.64","commentWeight":40.63,"instability":0,"afferentCoupling":0,"efferentCoupling":0,"noc":1,"noca":1,"nocc":0,"noc-anon":0,"noi":1,"nom":2,"cyclomaticComplexity":1,"myerInterval":"1:1","myerDistance":0,"operators":0,"lcom":0,"sysc":5,"rsysc":2.5,"dc":5,"rdc":2.5,"sc":0,"rsc":0},{"filename":"src\/Logger\/AsyncHttpLoggerDefault.php","name":"src\/Logger\/AsyncHttpLoggerDefault.php","loc":59,"logicalLoc":11,"volume":408.07,"length":84,"vocabulary":29,"effort":2986.33,"difficulty":"7.32","time":166,"bugs":0.14,"intelligentContent":55.76,"maintainabilityIndexWithoutComment":"58.87","maintainabilityIndex":"94.97","commentWeight":36.1,"instability":1,"afferentCoupling":0,"efferentCoupling":1,"noc":1,"noca":0,"nocc":1,"noc-anon":0,"noi":0,"nom":4,"cyclomaticComplexity":1,"myerInterval":"1:1","myerDistance":0,"operators":0,"lcom":1,"sysc":7.5,"rsysc":1.88,"dc":6.5,"rdc":1.63,"sc":1,"rsc":0.25}],"depth":2,"abstractness":0.5,"instability":1,"average":{"filename":0,"name":0,"loc":37.5,"logicalLoc":7,"volume":225.63,"length":48.5,"vocabulary":19.5,"effort":1505.16,"difficulty":3.94,"time":83.5,"bugs":0.08,"intelligentContent":66.75,"maintainabilityIndexWithoutComment":68.44,"maintainabilityIndex":106.81,"commentWeight":38.37,"instability":0.5,"afferentCoupling":0,"efferentCoupling":0.5,"noc":1,"noca":0.5,"nocc":0.5,"noc-anon":0,"noi":0.5,"nom":3,"cyclomaticComplexity":1,"myerInterval":1,"myerDistance":0,"operators":0,"lcom":0.5,"sysc":6.25,"rsysc":2.19,"dc":5.75,"rdc":2.07,"sc":0.5,"rsc":0.13},"min":{"filename":"src\/Logger\/AsyncHttpLogger.php","name":"src\/Logger\/AsyncHttpLogger.php","loc":16,"logicalLoc":3,"volume":43.19,"length":13,"vocabulary":10,"effort":23.99,"difficulty":"0.56","time":1,"bugs":0.01,"intelligentContent":55.76,"maintainabilityIndexWithoutComment":"58.87","maintainabilityIndex":"94.97","commentWeight":36.1,"instability":0,"afferentCoupling":0,"efferentCoupling":0,"noc":1,"noca":0,"nocc":0,"noc-anon":0,"noi":0,"nom":2,"cyclomaticComplexity":1,"myerInterval":"1:1","myerDistance":0,"operators":0,"lcom":0,"sysc":5,"rsysc":1.88,"dc":5,"rdc":1.63,"sc":0,"rsc":0},"max":{"filename":"src\/Logger\/AsyncHttpLoggerDefault.php","name":"src\/Logger\/AsyncHttpLoggerDefault.php","loc":59,"logicalLoc":11,"volume":408.07,"length":84,"vocabulary":29,"effort":2986.33,"difficulty":"7.32","time":166,"bugs":0.14,"intelligentContent":77.73,"maintainabilityIndexWithoutComment":"78.01","maintainabilityIndex":"118.64","commentWeight":40.63,"instability":1,"afferentCoupling":0,"efferentCoupling":1,"noc":1,"noca":1,"nocc":1,"noc-anon":0,"noi":1,"nom":4,"cyclomaticComplexity":1,"myerInterval":"1:1","myerDistance":0,"operators":0,"lcom":1,"sysc":7.5,"rsysc":2.5,"dc":6.5,"rdc":2.5,"sc":1,"rsc":0.25},"sum":{"filename":0,"name":0,"loc":75,"logicalLoc":14,"volume":451.26,"length":97,"vocabulary":39,"effort":3010.32,"difficulty":7.88,"time":167,"bugs":0.15,"intelligentContent":133.49,"maintainabilityIndexWithoutComment":136.88,"maintainabilityIndex":213.61,"commentWeight":76.73,"instability":1,"afferentCoupling":0,"efferentCoupling":1,"noc":2,"noca":1,"nocc":1,"noc-anon":0,"noi":1,"nom":6,"cyclomaticComplexity":2,"myerInterval":2,"myerDistance":0,"operators":0,"lcom":1,"sysc":12.5,"rsysc":4.38,"dc":11.5,"rdc":4.13,"sc":1,"rsc":0.25}},{"name":"src\/Helper","childs":[{"filename":"src\/Helper\/Time.php","name":"src\/Helper\/Time.php","loc":14,"logicalLoc":2,"volume":13.93,"length":6,"vocabulary":5,"effort":6.97,"difficulty":"0.5","time":0,"bugs":0,"intelligentContent":27.86,"maintainabilityIndexWithoutComment":"85.29","maintainabilityIndex":"127.74","commentWeight":42.45,"instability":0,"afferentCoupling":0,"efferentCoupling":0,"noc":1,"noca":1,"nocc":0,"noc-anon":0,"noi":1,"nom":1,"cyclomaticComplexity":1,"myerInterval":"1:1","myerDistance":0,"operators":0,"lcom":0,"sysc":0,"rsysc":0,"dc":0,"rdc":0,"sc":0,"rsc":0},{"filename":"src\/Helper\/TimeDefault.php","name":"src\/Helper\/TimeDefault.php","loc":16,"logicalLoc":2,"volume":31.7,"length":10,"vocabulary":9,"effort":31.7,"difficulty":"1","time":2,"bugs":0.01,"intelligentContent":31.7,"maintainabilityIndexWithoutComment":"82.79","maintainabilityIndex":"123.42","commentWeight":40.63,"instability":0,"afferentCoupling":0,"efferentCoupling":0,"noc":1,"noca":0,"nocc":1,"noc-anon":0,"noi":0,"nom":1,"cyclomaticComplexity":1,"myerInterval":"1:1","myerDistance":0,"operators":0,"lcom":1,"sysc":1,"rsysc":1,"dc":1,"rdc":1,"sc":0,"rsc":0}],"depth":2,"abstractness":0.5,"instability":0,"average":{"filename":0,"name":0,"loc":15,"logicalLoc":2,"volume":22.82,"length":8,"vocabulary":7,"effort":19.34,"difficulty":0.75,"time":1,"bugs":0.01,"intelligentContent":29.78,"maintainabilityIndexWithoutComment":84.04,"maintainabilityIndex":125.58,"commentWeight":41.54,"instability":0,"afferentCoupling":0,"efferentCoupling":0,"noc":1,"noca":0.5,"nocc":0.5,"noc-anon":0,"noi":0.5,"nom":1,"cyclomaticComplexity":1,"myerInterval":1,"myerDistance":0,"operators":0,"lcom":0.5,"sysc":0.5,"rsysc":0.5,"dc":0.5,"rdc":0.5,"sc":0,"rsc":0},"min":{"filename":"src\/Helper\/Time.php","name":"src\/Helper\/Time.php","loc":14,"logicalLoc":2,"volume":13.93,"length":6,"vocabulary":5,"effort":6.97,"difficulty":"0.5","time":0,"bugs":0,"intelligentContent":27.86,"maintainabilityIndexWithoutComment":"82.79","maintainabilityIndex":"123.42","commentWeight":40.63,"instability":0,"afferentCoupling":0,"efferentCoupling":0,"noc":1,"noca":0,"nocc":0,"noc-anon":0,"noi":0,"nom":1,"cyclomaticComplexity":1,"myerInterval":"1:1","myerDistance":0,"operators":0,"lcom":0,"sysc":0,"rsysc":0,"dc":0,"rdc":0,"sc":0,"rsc":0},"max":{"filename":"src\/Helper\/TimeDefault.php","name":"src\/Helper\/TimeDefault.php","loc":16,"logicalLoc":2,"volume":31.7,"length":10,"vocabulary":9,"effort":31.7,"difficulty":"1","time":2,"bugs":0.01,"intelligentContent":31.7,"maintainabilityIndexWithoutComment":"85.29","maintainabilityIndex":"127.74","commentWeight":42.45,"instability":0,"afferentCoupling":0,"efferentCoupling":0,"noc":1,"noca":1,"nocc":1,"noc-anon":0,"noi":1,"nom":1,"cyclomaticComplexity":1,"myerInterval":"1:1","myerDistance":0,"operators":0,"lcom":1,"sysc":1,"rsysc":1,"dc":1,"rdc":1,"sc":0,"rsc":0},"sum":{"filename":0,"name":0,"loc":30,"logicalLoc":4,"volume":45.63,"length":16,"vocabulary":14,"effort":38.67,"difficulty":1.5,"time":2,"bugs":0.01,"intelligentContent":59.56,"maintainabilityIndexWithoutComment":168.08,"maintainabilityIndex":251.16,"commentWeight":83.08,"instability":0,"afferentCoupling":0,"efferentCoupling":0,"noc":2,"noca":1,"nocc":1,"noc-anon":0,"noi":1,"nom":2,"cyclomaticComplexity":2,"myerInterval":2,"myerDistance":0,"operators":0,"lcom":1,"sysc":1,"rsysc":1,"dc":1,"rdc":1,"sc":0,"rsc":0}},{"name":"src\/Core","childs":[{"filename":"src\/Core\/AsyncHttpClientDefault.php","name":"src\/Core\/AsyncHttpClientDefault.php","loc":103,"logicalLoc":28,"volume":1108.25,"length":190,"vocabulary":57,"effort":11037.26,"difficulty":"9.96","time":613,"bugs":0.37,"intelligentContent":111.28,"maintainabilityIndexWithoutComment":"46.84","maintainabilityIndex":"82.47","commentWeight":35.63,"instability":1,"afferentCoupling":0,"efferentCoupling":6,"noc":1,"noca":0,"nocc":1,"noc-anon":0,"noi":0,"nom":6,"cyclomaticComplexity":2,"myerInterval":"2:2","myerDistance":0,"operators":0,"lcom":1,"sysc":19.92,"rsysc":3.32,"dc":3.92,"rdc":0.65,"sc":16,"rsc":2.67},{"filename":"src\/Core\/AsyncHttpClient.php","name":"src\/Core\/AsyncHttpClient.php","loc":18,"logicalLoc":4,"volume":42,"length":14,"vocabulary":8,"effort":30,"difficulty":"0.71","time":2,"bugs":0.01,"intelligentContent":58.8,"maintainabilityIndexWithoutComment":"75.37","maintainabilityIndex":"114.36","commentWeight":38.99,"instability":1,"afferentCoupling":0,"efferentCoupling":1,"noc":1,"noca":1,"nocc":0,"noc-anon":0,"noi":1,"nom":2,"cyclomaticComplexity":1,"myerInterval":"1:1","myerDistance":0,"operators":0,"lcom":0,"sysc":1.5,"rsysc":0.75,"dc":0.5,"rdc":0.25,"sc":1,"rsc":0.5}],"depth":2,"abstractness":0.5,"instability":1,"average":{"filename":0,"name":0,"loc":60.5,"logicalLoc":16,"volume":575.13,"length":102,"vocabulary":32.5,"effort":5533.63,"difficulty":5.34,"time":307.5,"bugs":0.19,"intelligentContent":85.04,"maintainabilityIndexWithoutComment":61.11,"maintainabilityIndex":98.42,"commentWeight":37.31,"instability":1,"afferentCoupling":0,"efferentCoupling":3.5,"noc":1,"noca":0.5,"nocc":0.5,"noc-anon":0,"noi":0.5,"nom":4,"cyclomaticComplexity":1.5,"myerInterval":1.5,"myerDistance":0,"operators":0,"lcom":0.5,"sysc":10.71,"rsysc":2.04,"dc":2.21,"rdc":0.45,"sc":8.5,"rsc":1.59},"min":{"filename":"src\/Core\/AsyncHttpClient.php","name":"src\/Core\/AsyncHttpClient.php","loc":18,"logicalLoc":4,"volume":42,"length":14,"vocabulary":8,"effort":30,"difficulty":"0.71","time":2,"bugs":0.01,"intelligentContent":58.8,"maintainabilityIndexWithoutComment":"46.84","maintainabilityIndex":"82.47","commentWeight":35.63,"instability":1,"afferentCoupling":0,"efferentCoupling":1,"noc":1,"noca":0,"nocc":0,"noc-anon":0,"noi":0,"nom":2,"cyclomaticComplexity":1,"myerInterval":"1:1","myerDistance":0,"operators":0,"lcom":0,"sysc":1.5,"rsysc":0.75,"dc":0.5,"rdc":0.25,"sc":1,"rsc":0.5},"max":{"filename":"src\/Core\/AsyncHttpClientDefault.php","name":"src\/Core\/AsyncHttpClientDefault.php","loc":103,"logicalLoc":28,"volume":1108.25,"length":190,"vocabulary":57,"effort":11037.26,"difficulty":"9.96","time":613,"bugs":0.37,"intelligentContent":111.28,"maintainabilityIndexWithoutComment":"75.37","maintainabilityIndex":"114.36","commentWeight":38.99,"instability":1,"afferentCoupling":0,"efferentCoupling":6,"noc":1,"noca":1,"nocc":1,"noc-anon":0,"noi":1,"nom":6,"cyclomaticComplexity":2,"myerInterval":"2:2","myerDistance":0,"operators":0,"lcom":1,"sysc":19.92,"rsysc":3.32,"dc":3.92,"rdc":0.65,"sc":16,"rsc":2.67},"sum":{"filename":0,"name":0,"loc":121,"logicalLoc":32,"volume":1150.25,"length":204,"vocabulary":65,"effort":11067.26,"difficulty":10.67,"time":615,"bugs":0.38,"intelligentContent":170.08,"maintainabilityIndexWithoutComment":122.21,"maintainabilityIndex":196.83,"commentWeight":74.62,"instability":2,"afferentCoupling":0,"efferentCoupling":7,"noc":2,"noca":1,"nocc":1,"noc-anon":0,"noi":1,"nom":8,"cyclomaticComplexity":3,"myerInterval":3,"myerDistance":0,"operators":0,"lcom":1,"sysc":21.42,"rsysc":4.07,"dc":4.42,"rdc":0.9,"sc":17,"rsc":3.17}}]
    var ruleSet = {"cyclomaticComplexity":[10,6,2],"maintainabilityIndex":[0,69,85],"logicalLoc":[800,400,200],"volume":[1300,1000,300],"bugs":[0.35,0.25,0.15],"commentWeight":[36,38,41],"vocabulary":[51,34,27],"difficulty":[18,15,5.8],"instability":[1,0.95,0.45],"afferentCoupling":[20,15,9],"efferentCoupling":[15,11,7],"myerDistance":[10,5,2],"lcom":[3,2,1.5]}
    
    // accessibility for colorblinds
    var accessibilityEnabled = false;

    // fixes links to tab
    // Javascript to enable link to tab
//    var hash = document.location.hash;
//    var prefix = "tab_";
//    if (hash) {
//        $('#menu a[href='+hash.replace(prefix,"")+']').tab('show');
//    }
//    // Change hash for page-reload
//    $('#menu a').on('shown', function (e) {
//        window.location.hash = e.target.hash.replace("#", "#" + prefix);
//    });

</script>


</body>
</html>