configurationengine/source/scripts/gen_report_template.html
changeset 3 e7e0ae78773e
parent 0 2e8eeb919028
--- a/configurationengine/source/scripts/gen_report_template.html	Fri Mar 12 08:30:17 2010 +0200
+++ b/configurationengine/source/scripts/gen_report_template.html	Tue Aug 10 14:29:28 2010 +0300
@@ -1,6 +1,7 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
 <html lang="en">
 <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
     <title>ConE generation report</title>
     <style type="text/css">
         body {
@@ -110,331 +111,409 @@
             font: Tahoma, Verdana, Arial;
             _font-size: 0.8em;
         }
-
+        div.popup  {
+            background-color: #f9fafd;
+            font: #595a5f Tahoma, Verdana, Arial bold;
+            font-size: 0.8em;
+            border-top: 1px #9d9da1;
+            border-bottom: 1px #9d9da1;
+        }
+        div.floater  {
+            text-align: left; 
+            width: 50%; 
+            float: left;
+        }
+        div.floater-right  {
+            text-align: right; 
+            width: 50%; 
+            float: right;
+        }
+        table.log {
+            word-wrap: break-word;
+            border: 1px #EBEBEB;
+            padding: 5px;
+            border-style: solid; 
+            vertical-align: top;
+            font: #595a5f Tahoma, Verdana, Arial;
+            font-size: 0.8em;
+        }
         .currentValue {
             background-color: #e8f2fe;
         }
     </style>
+    <script language="javascript" type="text/javascript">
+    //<![CDATA[
+    {% include 'tablefilter.js' without context %}
+    //]]>
+    </script>
+    
+    <script language="javascript" type="text/javascript">
+    //<![CDATA[
+    {% include 'popup.js' without context %}
+    //]]>
+    </script>
+
 </head>
 <body>
 
     <h1>Generation summary:</h1>
     <table class="summary">
-     <tr>
-        <th class="featureName" colspan="2">Statistics</th>
-     </tr>
-     <tr>
+    <tr>
+        <th class="featureName">Statistics</th>
+        {% for report in rep_data -%}
+        <th class="featureName">{{ report.label }}</th>
+        {% endfor -%}
+    </tr>
+    <tr>
         <td>Refs in files</td>
-        <td>{{ rep_data.nbr_of_refs }}</td>
+        {% for report in rep_data -%}
+        <td>{{ report.context.changed_refs|length }}</td>
+        {% endfor -%}
     </tr>
     <tr>
-        <td>Refs with no implementation</td>
-        <td>{{ rep_data.nbr_of_refs_noimpl }}</td>
+        <td>Not generated Refs</td>
+        {% for report in rep_data -%}
+        <td>{{ report.context.get_refs_with_no_output()|length }}</td>
+        {% endfor -%}
     </tr>
     <tr>
-        <th class="featureName" colspan="2">Details</th>
-     </tr>
+        <th class="featureName" colspan="{{ rep_data|length + 1 }}">Details</th>
+    </tr>
     <tr>
         <td>Report generated</td>
-        <td>{{ rep_data.generation_time }}</td>
+        {% for report in rep_data -%}
+        <td>{{ report.generation_time }}</td>
+        {% endfor -%}
     </tr>
     <tr>
         <td>Generation duration</td>
-        <td>{{ rep_data.duration }}</td>
+        {% for report in rep_data -%}
+        <td>{{ report.duration }}</td>
+        {% endfor -%}
     </tr>
     <tr>
         <td>Generation log</td>
-        <td><a href="file:{{ rep_data.cwd|pathname_to_url }}/cone.log">cone.log</a></td>
+        {% for report in rep_data -%}
+        <td><a href="file:{{ report.context.log_file|pathname_to_url }}">cone log</a></td>
+        {% endfor -%}
     </tr>
     <tr>
-        <th class="featureName" colspan="2">Generation options</th>
+        <th class="featureName" colspan="{{ rep_data|length + 1 }}">Generation options</th>
     </tr>
     <tr>
         <td align="left">Layers</td>
-        <td align="left">{{ rep_data.options.layers }}</td>
+        {% for report in rep_data -%}
+        <td align="left">{{ report.options.layers }}</td>
+        {% endfor -%}
     </tr>
     <tr>
         <td align="left">Added</td>
-        <td align="left">{{ rep_data.options.added }}</td>
+        {% for report in rep_data -%}
+        <td align="left">{{ report.options.added }}</td>
+        {% endfor -%}
     </tr>
     <tr>
         <td align="left">Dryrun</td>
-        <td align="left">{{ rep_data.options.dryrun }}</td>
+        {% for report in rep_data -%}
+        <td align="left">{{ report.options.dryrun }}</td>
+        {% endfor -%}
     </tr>
     <tr>
         <td align="left">Verbose</td>
-        <td align="left">{{ rep_data.options.verbose }}</td>
+        {% for report in rep_data -%}
+        <td align="left">{{ report.options.verbose }}</td>
+        {% endfor -%}
     </tr>
     <tr>
         <td align="left">Overrides</td>
-        <td align="left">{{ rep_data.options.overrides }}</td>
+        {% for report in rep_data -%}
+        <td align="left">{{ report.options.overrides }}</td>
+        {% endfor -%}
     </tr>
     <tr>
         <td align="left">Project</td>
-        <td align="left">{{ rep_data.options.project }}</td>
+        {% for report in rep_data -%}
+        <td align="left">{{ report.options.project }}</td>
+        {% endfor -%}
     </tr>
         <tr>
         <td align="left">Report</td>
-        <td align="left">{{ rep_data.options.report }}</td>
+        {% for report in rep_data -%}
+        <td align="left">{{ report.options.report }}</td>
+        {% endfor -%}
     </tr>
     <tr>
         <td align="left">Impls</td>
-        <td align="left">{{ rep_data.options.impls }}</td>
+        {% for report in rep_data -%}
+        <td align="left">{{ report.options.impls }}</td>
+        {% endfor -%}
+    </tr>
+    <tr>
+        <td align="left">Tags</td>
+        {% for report in rep_data -%}
+        <td align="left">{{ report.context.tags }}</td>
+        {% endfor -%}
     </tr>
     <tr>
         <td align="left">Output</td>
-        <td align="left">{{ rep_data.options.output }}</td>
+        {% for report in rep_data -%}
+        <td align="left">{{ report.options.output }}</td>
+        {% endfor -%}
     </tr>
     <tr>
         <td align="left">Configuration</td>
-        <td align="left">{{ rep_data.options.configuration }}</td>
-    </tr>
-    <tr>
-        <td align="left">Working directory</td>
-        <td align="left">{{ rep_data.cwd }}</td>
+        {% for report in rep_data -%}
+        <td align="left">{{ report.options.configuration }}</td>
+        {% endfor -%}
     </tr>
     </table>
     
-    <h1>Rule execution results:</h1><br>
-    
-    <table class="report">
-        <tr>
-            <th class="featureName">File</th>
-            <th class="featureName">Rule No.</th>
-            <th class="featureName">Input refs</th>
-            <th class="featureName">Affected refs</th>
-        </tr>
+    <h1>Generation Outputs:</h1><br>
+    <p>Predefined filters:<br>
+        <FORM>
+        <INPUT type="button" value="Refs with no implementation" onclick="tf_outputs.SetFilterValue(1,'None');tf_outputs.SetFilterValue(0, '');tf_outputs.SetFilterValue(2, '');tf_outputs.Filter();return false;" name="Refs with no implementation"">
+        <br>
+        <INPUT type="button" value="Refs with not output" onclick="tf_outputs.SetFilterValue(2, 'None');tf_outputs.SetFilterValue(0, '');tf_outputs.SetFilterValue(1, '');tf_outputs.Filter();return false;" name="Refs with not output">
+        </FORM>
+    </p>
+    <table class="report" id="outputs">
+    <tr>
+        <th class="featureName">Settings</th>
+        <th class="featureName">Impl. file</th>
+        <th class="featureName">Outputs</th>
+    </tr>
+
+    {% macro popup_link(source, linkid, linkname) -%}
+        {% if 'all' in report_options %}
+            <a href="#" onclick="Showpopup({{source}}, '{{linkid}}');return false;">{{ linkname }}</a>
+        {% else %}
+           {{ linkname }}
+        {% endif %}
+    {%- endmacro %}
+
+    {% macro get_report_colums(reports_list, report_elem) -%}        
+    {%- endmacro %}
+
+    <!-- process the output files -->    
+    {% for out in merged_context.get_output() %}
+    <tr>
+        <td>
+            {%- if out.implementation.get_refs() %}
+                {%- for ref in out.implementation.get_refs() %}
+                   {%- if ref in merged_context.changed_refs %}                  
+                     {%- if ref in merged_context.temp_features %}
+                       <i>{{ popup_link('this', ref+'.apidiv',ref) }}</i><br>
+                     {%- else %}
+                       <B>{{ popup_link('this', ref+'.apidiv', ref) }}</B><br>
+                     {%- endif %}
+                   {%- else %}
+                     {{ ref }}<br>
+                   {%- endif %}
+                {%- endfor %}
+            {%- endif %}
+        </td>
+        <td>
+          {%- if out.type == 'ref' %}
+            Rule: 
+          {%- elif out.type == 'exception'  %}
+            Exception: 
+          {%- endif  %}
+          {{ popup_link('this',out.implementation.ref|replace("/", ".") +':'+out.implementation.lineno|string+'.impldiv',out.implementation.ref+':'+out.implementation.lineno|string) }}
+        </td>
+        <td>
+        {%- if out.name != None and out.type != 'exception' %}
+        {{ popup_link('this',out.name|replace("/", ".")|replace("\\", ".")+'.output',out.name) }}
+        {%- else %}
+            <span class="red">None</span><br>
+        {%- endif %}
+        </td>
+    </tr>
+    {%- endfor %}
+            
+    <!-- process the refs with no output -->    
+    {%- for ref in merged_context.get_refs_with_no_output(merged_context.get_changed_refs(operation='intersection',ignore_temps=True)) %}
+    <tr>
+        <td>
+          <B>
+            {{ popup_link('this',ref+'.apidiv',ref) }}
+          </B><br>
+        </td>
+        <td>
+          {%- if merged_context.impl_set.get_implementations_with_ref(ref) %}    
+              {%- for impl in merged_context.impl_set.get_implementations_with_ref(ref) %}
+                {{ popup_link('this',impl.ref|replace("/", ".")|replace("\\", ".")+'.impldiv',impl.ref) }}
+              {%- endfor %}
+          {%- else %}
+            <span class="red">None</span><br>           
+          {%- endif %}
+        </td>
+        <td>
+            <span class="red">None</span><br> 
+        </td>
+    </tr>
+    {%- endfor %}
+
+    </table>
         
-        {% for result in rep_data.rule_exec_results %}
-        {#- Report only rule executions that affected something #}
-        {%- if result.affected_refs|length > 0 %}
-        <tr>
-            <a name="rule:{{result.source}}:{{result.index}}"/>
-            <td><a href="file:{{ rep_data.project_dir|pathname_to_url }}/{{ result.source|pathname_to_url }}">{{ result.source }}</a></td>
-            <td>{{result.index}}</td>
-            <td>
-            {%- for ref in result.input_refs -%}
-                {{ref}}<br/>
-            {% endfor %}
-            </td>
-            <td>
-            {%- for ref in result.affected_refs -%}
-                {{ref}}<br/>
-            {% endfor %}
-            </td>
-        </tr>
-        {% endif -%}
+    <!-- Create extra data divs only when debug is on -->        
+    {% if 'all' in report_options %}
+        <!-- Create data divs for feature ref elements -->
+        {%- for feat in merged_context.features.get_features(merged_context.changed_refs) %}
+            <div id="{{ feat.fqr|replace("/", ".")  }}.apidiv" style="background-color:#f9fafd;border:1px solid black;display:none;padding:2px;width:50%;">
+                <table class="report">
+                <tr><td>
+                    <div class="floater"><b>Ref:</b>{{ feat.fqr }}</div> 
+                    <div class="floater-right"><a href="#" onclick="Popup.hide('{{ feat.fqr }}.apidiv');return false;">Close</a></div>
+                </td></tr>
+                <tr><td>
+                    <div>
+                        <b>Name: </b>{{ feat.name }}<br>
+                        <b>Type: </b>{{ feat.type }}<br>
+                        <b>ConfML: </b><a href="file:{{ rep_data[0].project_dir|pathname_to_url }}/{{ feat.get_proxied_obj().get_configuration_path()|pathname_to_url }}">{{ feat.get_proxied_obj().get_configuration_path() }}</a>
+                    </div>
+                </tr></td>
+                </table>
+                <b>Data: </b>
+                <table class="report">
+                {%- if feat.is_sequence_root() %}
+                    <tr>
+                      {%- for columnfea in feat.get_column_features() %}
+                      <th class="th.header">{{ columnfea.ref }}</th>
+                      {%- endfor %}
+                    </tr>
+                    {%- for row in feat.get_value() %}
+                       <tr>
+                        {%- for col in row %}
+                            <td>{{ col|e|xml_charref_replace  }}</td>
+                        {%- endfor %}
+                       </tr>
+                    {%- endfor %}
+                {%- else %}
+                    {%- for data in feat.get_datas() %}
+                        {% if loop.first %}
+                            <tr>
+                                <th class="th.header">Layer</th>
+                                <th class="th.header">Value</th>
+                            </tr>
+                        {% endif -%}    
+                        {% if not data.template %}
+                            <tr>
+                                <td><a href="file:{{ rep_data[0].project_dir|pathname_to_url }}/{{ data.get_configuration_path()|pathname_to_url }}">{{ data.get_configuration_path() }}</a></td>
+                                <td>{{ data.get_value()|e|xml_charref_replace  }}</td>
+                            </tr>
+                        {% endif -%}
+                    {% endfor %}
+                {% endif -%}
+                </table>
+            </div>
+        {%- endfor %}
+    
+        <!-- Create data divs for generation output elements -->
+        {% for output in merged_context.outputs.values() %}
+            <div id="{{ output.name|replace("/", ".")|replace("\\", ".") }}.output" style="background-color:#f9fafd;border:1px solid black;display:none;padding:2px;width:50%;">
+                <table class="report">
+                <tr><td>
+                    <div class="floater"><b>Ref:</b>{{ output.name }}</div> 
+                    <div class="floater-right"><a href="#" onclick="Popup.hide('{{ output.name|replace("/", ".")|replace("\\", ".") }}.output');return false;">Close</a></div>
+                </td></tr>
+                <tr><td>
+                    <div>
+                        <b>Implml: </b>{{ output.implementation }}<br>
+                        <b>Type: </b>{{ output.type }}<br>
+                        {% if output.type == 'file' %}
+                        <b>File: </b><a href="file:{{ output.abspath|pathname_to_url }}">{{ output.name }}</a><br>
+                        {% elif output.type == 'ref' %}
+                        <b>Target ref: </b>{{ output.name }} <a href="#" onclick="tf_outputs.SetFilterValue(0, '{{output.name}}');tf_outputs.SetFilterValue(1, '');tf_outputs.SetFilterValue(2, '');tf_outputs.Filter();return false;">filter</a><br>
+                        {% elif output.type == 'exception' %}
+                        <b>Exception: </b>{{ output.exception }}<br>
+                        {% endif %}
+                        <b>Related log entries: </b><br>
+                        <table class="log">
+                        {% for log in merged_context.grep_log(output.filename) -%}
+                        <tr><td>{{ log[0] }}</td><td>{{ log[1] }}</td></tr>
+                        {% endfor -%}
+                        </table>
+                    </div>
+                </tr></td>
+                </table>
+            </div>
+        {% endfor %}
+    
+        <!-- Create data divs for generation specific implementation elements -->
+        {% for output in merged_context.outputs.values() %}
+            <div id="{{ output.implementation.ref|replace("/", ".") }}:{{ output.implementation.lineno }}.impldiv" style="background-color:#f9fafd;border:1px solid black;display:none;padding:2px;width:50%;">
+                <table class="report">
+                <tr><td>
+                    <div class="floater"><b>Ref:</b>{{ output.name }}</div> 
+                    <div class="floater-right"><a href="#" onclick="Popup.hide('{{ output.implementation.ref|replace("/", ".") }}:{{ output.implementation.lineno }}.impldiv');return false;">Close</a></div>
+                </td></tr>
+                <tr><td>
+                    <div>
+                        <b>Implml: </b>{{ output.implementation }}<br>
+                        <b>Type: </b>{{ output.implementation.__class__.__name__ }}<br>
+                        <b>File: </b><a href="file:{{ [rep_data[0].project_dir,output.implementation.ref]|join('/')|pathname_to_url }}">{{ output.implementation.ref }}</a><br>
+                        <b>Line: </b>{{output.implementation.lineno}}<br>
+                        {% if output.type == 'exception' %}
+                        <b>Exception: </b>{{ output.exception }}<br>
+                        {% endif %}
+                        <b>Related log entries: </b><br>
+                        <table class="log">
+                        {% for log in merged_context.grep_log(output.implementation.ref) -%}
+                        <tr><td>{{ log[0] }}</td><td>{{ log[1] }}</td></tr>
+                        {% endfor -%}
+                        </table>
+                    </div>
+                </tr></td>
+                </table>
+            </div>
         {% endfor %}
         
-    </table>
-    
-    
-    <h1>Output files:</h1><br>
-    
-    <table class="report">
-    <tr>
-        <th class="featureName">API</th>
-        <th class="featureName">Data</th>
-        <th class="featureName">Impl. file</th>
-        <th class="featureName">Impl. type</th>
-        <th class="featureName">Generated for</th>
-        <th class="featureName">Output files</th>
-    </tr>
-    {% for feat in rep_data.lines %}
+        <!-- Create data divs for implementation elements -->
+        {% for impl in merged_context.impl_dict.values() %}
+            <div id="{{ impl.ref|replace("/", ".")|replace("\\", ".") }}.impldiv" style="background-color:#f9fafd;border:1px solid black;display:none;padding:2px;width:50%;">
+                <table class="report">
+                <tr><td>
+                    <div class="floater"><b>Ref:</b>{{ impl.ref|replace("/", ".")|replace("\\", ".") }}}</div> 
+                    <div class="floater-right"><a href="#" onclick="Popup.hide('{{ impl.ref|replace("/", ".")|replace("\\", ".") }}.impldiv');return false;">Close</a></div>
+                </td></tr>
+                <tr><td>
+                    <div>
+                        <b>Implml: </b><a href="file:{{ [rep_data[0].project_dir,impl.ref]|join('/')|pathname_to_url }}">{{ impl.ref }}</a><br>
+                        <b>Type: </b>{{ impl.__class__.__name__ }}<br>
+                        <b>Related log entries: </b><br>
+                        <table class="log">
+                        {% for log in merged_context.grep_log(impl.ref) -%}
+                        <tr><td>{{ log[0] }}</td><td>{{ log[1] }}</td></tr>
+                        {% endfor -%}
+                        </table>
     
-        <tr>
-            <td align="left" rowspan={{ feat.nbr_impls }}>
-                {% if feat.is_temp_feature -%}
-                <b><i>{{ feat.ref }}</i></b><br>
-                {%- else -%}
-                <b>{{ feat.ref }}</b><br>
-                {%- endif %}
-                <b>Name: </b>{{ feat.feat_name }}<br>
-                <b>Type: </b>{{ feat.feat_type }}<br>
-                <b>ConfML: </b><a href="file:{{ rep_data.project_dir|pathname_to_url }}/{{ feat.config_path|pathname_to_url }}">{{ feat.config_path }}</a>
-            </td>
-            <td align="left" rowspan={{ feat.nbr_impls }}>
-            <table class="report">
-            
-            {% for data in feat.datas %}
-                {% if loop.first %}
-                    <tr>
-                        <th class="th.header">Layer</th>
-                        <th class="th.header">Value</th>
-                    </tr>
-                    <tr>
-                        <td><a href="file:{{ rep_data.project_dir|pathname_to_url }}/{{ data.layer|pathname_to_url }}">{{ data.layer }}</a></td>
-                        <td>{{ data.value|e|xml_charref_replace }}</td>
-                    </tr>
-                {% else %}
-                    <tr>
-                        <td><a href="file:{{ rep_data.project_dir|pathname_to_url }}/{{ data.layer|pathname_to_url }}">{{ data.layer }}</a></td>
-                        <td>{{ data.value|e|xml_charref_replace  }}</td>
-                    </tr>
-                {% endif %}
-            {% endfor %}
-            </table>
-
-            <table class="report">
-                {% for data in feat.seq_data %}
-                    {% if loop.first %}
-                        <tr>
-                            <th class="th.header">Setting</th>
-                            <th class="th.header">Value</th>
-                        </tr>
-                        <tr>
-                            <td><b>{{ data[0]|e|xml_charref_replace }}</b></td>
-                            <td>
-                                {% for value in data[1] %}
-                                    {{ value|e|xml_charref_replace }}<br>
-                                {% endfor %}
-                            </td>
-                        </tr>
-                    {% else %}
-                        <tr>
-                            <td><b>{{ data[0]|e|xml_charref_replace }}</b></td>
-                            <td>
-                                {% for value in data[1] %}
-                                    {{ value|e|xml_charref_replace }}<br>
-                                {% endfor %}
-                            </td>
-                        </tr>
-                    {% endif %}
-                {% endfor %}
-            </table>
+                    </div>
+                </tr></td>
+                </table>
+            </div>
+        {% endfor %}
+    {% endif %} <!-- verbose 3 -->
+        
+    <script language="javascript" type="text/javascript">
+        //<![CDATA[
+             var output_Props =  {  
+                     paging: false,
+                     highlight_keywords: true,                      
+                     rows_counter: true,  
+                     rows_counter_text: "Rows:",  
+                     btn_reset: true,  
+                     loader: true,  
+                     loader_text: "Filtering data..."  
+                 }; 
+            setFilterGrid("outputs", output_Props);
             
-            {% for impl in feat.impls %}
-                {% if loop.first %}
-                    <td align="left">
-                        <a href="file:{{ rep_data.project_dir|pathname_to_url }}/{{ impl.name|pathname_to_url }}">{{ impl.name }}</a>
-                    </td>
-                    <td align="left">
-                        {{ impl.type }}
-                    </td>
-                    <td align="left">
-                        {{ ', '.join(impl.generation_runs) }}
-                    </td>
-                    <td align="left">
-                        {% for output in impl.outputfiles -%}
-                            {% if output.exists %}
-                                <a href="file:{{ output.abs_filename|pathname_to_url }}">{{ output.filename }}</a><br>
-                            {% else %}
-                                <span class="red">{{ output.filename }}</span><br>
-                            {% endif %}
-                        {%- endfor %}
-                    </td>
-                {% else %}
-                    <tr>
-                    <td align="left">
-                        <a href="file:{{ rep_data.project_dir|pathname_to_url }}/{{ impl.name|pathname_to_url }}">{{ impl.name }}</a>
-                    </td>
-                    <td align="left">
-                        {{ impl.type }}
-                    </td>
-                    <td align="left">
-                        {{ ', '.join(impl.generation_runs) }}
-                    </td>
-                    <td align="left">
-                        {% for output in impl.outputfiles %}
-                            {% if output.exists %}
-                                <a href="file:{{ output.abs_filename|pathname_to_url }}">{{ output.filename }}</a><br>
-                            {% else %}
-                                <span class="red">{{ output.filename }}</span><br>
-                            {% endif %}
-                        {% endfor %}
-                    </td>
-                    </tr>
-                {% endif %}
-                
-            {% endfor %}
-        </tr>
-    {% endfor %}    
-    </table>
+            function Showpopup(item_over, popup_ref)
+            {
+                Popup.show(popup_ref, item_over,'top left', {'offsetTop':20});
+            } 
+        //]]>
+    </script>
 
-    <h1>Refs with no implementation:</h1><br>
-    
-    <table class="report">
-    <tr>
-        <th class="featureName">API</th>
-        <th class="featureName">Data</th>
-    </tr>
-    {% for feat in rep_data.ref_noimpl %}
-        <tr>
-            <td align="left" >
-                {% if feat.is_temp_feature -%}
-                <b><i>{{ feat.ref }}</i></b><br>
-                {%- else -%}
-                <b>{{ feat.ref }}</b><br>
-                {%- endif %}
-                <b>Name: </b>{{ feat.feat_name|e|xml_charref_replace }}<br>
-                <b>Type: </b>{{ feat.feat_type|e|xml_charref_replace }}<br>
-                <b>ConfML: </b><a href="file:{{ rep_data.project_dir|pathname_to_url }}/{{ feat.config_path|pathname_to_url }}">{{ feat.config_path }}</a>
-            </td>
-            <td align="left">
-            <table class="report">
-            
-            {% for data in feat.datas %}
-                {% if loop.first %}
-                    <tr>
-                        <th class="th.header">Layer</th>
-                        <th class="th.header">Value</th>
-                    </tr>
-                    <tr>
-                        <td><a href="file:{{ rep_data.project_dir|pathname_to_url }}/{{ data.layer|pathname_to_url }}">{{ data.layer }}</a></td>
-                        <td>{{ data.value|e|xml_charref_replace }}</td>
-                    </tr>
-                {% else %}
-                    <tr>
-                        <td><a href="file:{{ rep_data.project_dir|pathname_to_url }}/{{ data.layer|pathname_to_url }}">{{ data.layer }}</a></td>
-                        <td>{{ data.value|e|xml_charref_replace }}</td>
-                    </tr>
-                {% endif %}
-            {% endfor %}
-            </table>
-            
-            <table class="report">
-                {% for data in feat.seq_data %}
-                    {% if loop.first %}
-                        <tr>
-                            <th class="th.header">Setting</th>
-                            <th class="th.header">Value</th>
-                        </tr>
-                        <tr>
-                            <td><b>{{ data[0] }}</b></td>
-                            <td>
-                                {% for value in data[1] %}
-                                    {{ value|e|xml_charref_replace }}<br>
-                                {% endfor %}
-                            </td>
-                        </tr>
-                    {% else %}
-                        <tr>
-                            <td><b>{{ data[0] }}</b></td>
-                            <td>
-                                {% for value in data[1] %}
-                                    {{ value|e|xml_charref_replace }}<br>
-                                {% endfor %}
-                            </td>
-                        </tr>
-                    {% endif %}
-                {% endfor %}
-            </table>
-        </tr>
-    {% endfor %}    
-    </table>
-    <h1>Not generated output files:</h1><br>
-    
-    <table class="report">
-    <tr>
-        <th class="featureName">Output file</th>
-    </tr>
-    {% for file in rep_data.missing_output_files %}
-        <tr>
-            <td align="left" >
-                {{ file.filename }}
-            </td>
-    {% endfor %}
-    </table>
     
 </body>
-</html>
+</html>
\ No newline at end of file