xhtml_report_generator 2.2.0 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,22 @@
1
+ /*
2
+ Copyright (c) 2015 Nathan Cahill
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ of this software and associated documentation files (the "Software"), to deal
6
+ in the Software without restriction, including without limitation the rights
7
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is
9
+ furnished to do so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in
12
+ all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ THE SOFTWARE.
21
+ */
22
+ "use strict";(function(){var e=this,t="addEventListener",i="removeEventListener",s="getBoundingClientRect",r=e.attachEvent&&!e[t],n=e.document,a=function(){var e,t=["","-webkit-","-moz-","-o-"];for(var i=0;i<t.length;i++){e=n.createElement("div");e.style.cssText="width:"+t[i]+"calc(9px)";if(e.style.length){return t[i]+"calc"}}}(),o=function(e){if(typeof e==="string"||e instanceof String){return n.querySelector(e)}else{return e}},l=function(l,u){var c,f,g,p,h,z,d,S,y=[];u=typeof u!=="undefined"?u:{};if(!u.gutterSize)u.gutterSize=10;if(!u.minSize)u.minSize=100;if(!u.snapOffset)u.snapOffset=30;if(!u.direction)u.direction="horizontal";if(u.direction=="horizontal"){c="width";g="clientWidth";p="clientX";h="left";z="gutter gutter-horizontal";d="paddingLeft";S="paddingRight";if(!u.cursor)u.cursor="ew-resize"}else if(u.direction=="vertical"){c="height";g="clientHeight";p="clientY";h="top";z="gutter gutter-vertical";d="paddingTop";S="paddingBottom";if(!u.cursor)u.cursor="ns-resize"}var v=function(i){var s=this,r=s.a,n=s.b;if(!s.dragging&&u.onDragStart){u.onDragStart()}i.preventDefault();s.dragging=true;s.move=b.bind(s);s.stop=m.bind(s);e[t]("mouseup",s.stop);e[t]("touchend",s.stop);e[t]("touchcancel",s.stop);s.parent[t]("mousemove",s.move);s.parent[t]("touchmove",s.move);r[t]("selectstart",U);r[t]("dragstart",U);n[t]("selectstart",U);n[t]("dragstart",U);r.style.userSelect="none";r.style.webkitUserSelect="none";r.style.MozUserSelect="none";r.style.pointerEvents="none";n.style.userSelect="none";n.style.webkitUserSelect="none";n.style.MozUserSelect="none";n.style.pointerEvents="none";s.gutter.style.cursor=u.cursor;s.parent.style.cursor=u.cursor;M.call(s)},m=function(){var t=this,s=t.a,r=t.b;if(t.dragging&&u.onDragEnd){u.onDragEnd()}t.dragging=false;e[i]("mouseup",t.stop);e[i]("touchend",t.stop);e[i]("touchcancel",t.stop);t.parent[i]("mousemove",t.move);t.parent[i]("touchmove",t.move);delete t.stop;delete t.move;s[i]("selectstart",U);s[i]("dragstart",U);r[i]("selectstart",U);r[i]("dragstart",U);s.style.userSelect="";s.style.webkitUserSelect="";s.style.MozUserSelect="";s.style.pointerEvents="";r.style.userSelect="";r.style.webkitUserSelect="";r.style.MozUserSelect="";r.style.pointerEvents="";t.gutter.style.cursor="";t.parent.style.cursor=""},b=function(e){var t;if(!this.dragging)return;if("touches"in e){t=e.touches[0][p]-this.start}else{t=e[p]-this.start}if(t<=this.aMin+u.snapOffset){t=this.aMin}else if(t>=this.size-this.bMin-u.snapOffset){t=this.size-this.bMin}x.call(this,t);if(u.onDrag){u.onDrag()}},M=function(){var t=e.getComputedStyle(this.parent),i=this.parent[g]-parseFloat(t[d])-parseFloat(t[S]);this.size=this.a[s]()[c]+this.b[s]()[c]+this.aGutterSize+this.bGutterSize;this.percentage=Math.min(this.size/i*100,100);this.start=this.a[s]()[h]},x=function(e){this.a.style[c]=a+"("+e/this.size*this.percentage+"% - "+this.aGutterSize+"px)";this.b.style[c]=a+"("+(this.percentage-e/this.size*this.percentage)+"% - "+this.bGutterSize+"px)"},G=function(){var e=this,t=e.a,i=e.b;if(t[s]()[c]<e.aMin){t.style[c]=e.aMin-e.aGutterSize+"px";i.style[c]=e.size-e.aMin-e.aGutterSize+"px"}else if(i[s]()[c]<e.bMin){t.style[c]=e.size-e.bMin-e.bGutterSize+"px";i.style[c]=e.bMin-e.bGutterSize+"px"}},w=function(){var e=this,t=e.a,i=e.b;if(i[s]()[c]<e.bMin){t.style[c]=e.size-e.bMin-e.bGutterSize+"px";i.style[c]=e.bMin-e.bGutterSize+"px"}else if(t[s]()[c]<e.aMin){t.style[c]=e.aMin-e.aGutterSize+"px";i.style[c]=e.size-e.aMin-e.aGutterSize+"px"}},E=function(e){for(var t=0;t<e.length;t++){M.call(e[t]);G.call(e[t])}for(t=e.length-1;t>=0;t--){M.call(e[t]);w.call(e[t])}},U=function(){return false},D=o(l[0]).parentNode;if(!u.sizes){var k=100/l.length;u.sizes=[];for(f=0;f<l.length;f++){u.sizes.push(k)}}if(!Array.isArray(u.minSize)){var L=[];for(f=0;f<l.length;f++){L.push(u.minSize)}u.minSize=L}for(f=0;f<l.length;f++){var O=o(l[f]),B=f==1,F=f==l.length-1,A,C=u.gutterSize,N;if(f>0){N={a:o(l[f-1]),b:O,aMin:u.minSize[f-1],bMin:u.minSize[f],dragging:false,parent:D,isFirst:B,isLast:F,direction:u.direction};N.aGutterSize=u.gutterSize;N.bGutterSize=u.gutterSize;if(B){N.aGutterSize=u.gutterSize/2}if(F){N.bGutterSize=u.gutterSize/2}}if(!r){if(f>0){var R=n.createElement("div");R.className=z;R.style[c]=u.gutterSize+"px";R[t]("mousedown",v.bind(N));R[t]("touchstart",v.bind(N));D.insertBefore(R,O);N.gutter=R}if(f===0||f==l.length-1){C=u.gutterSize/2}if(typeof u.sizes[f]==="string"||u.sizes[f]instanceof String){A=u.sizes[f]}else{A=a+"("+u.sizes[f]+"% - "+C+"px)"}}else{if(typeof u.sizes[f]==="string"||u.sizes[f]instanceof String){A=u.sizes[f]}else{A=u.sizes[f]+"%"}}O.style[c]=A;if(f>0){y.push(N)}}E(y)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports){exports=module.exports=l}exports.Split=l}else{e.Split=l}}).call(window);
@@ -1,164 +1,164 @@
1
1
  /* general styles */
2
+ html {
3
+ height: 100%; /* needed for split.js */
4
+ }
5
+
2
6
  body {
3
- background: #FFFFFF;
4
- font: 100% Arial, Helvetica, sans-serif;
5
- color: #404040;
6
- line-height: 110%;
7
- margin: 0;
7
+ background: #FFFFFF;
8
+ font: 100% Arial, Helvetica, sans-serif;
9
+ color: #404040;
10
+ line-height: 110%;
11
+ margin: 0;
12
+ height: 100%; /* needed for split.js */
13
+ box-sizing: border-box; /* needed for split.js */
8
14
  }
9
15
 
10
16
  p {
11
- background: #FFFFFF;
12
- font: 100% Arial, Helvetica, sans-serif;
13
- color: #202020;
14
- line-height: 110%;
15
- text-align: left;
17
+ background: #FFFFFF;
18
+ font: 100% Arial, Helvetica, sans-serif;
19
+ color: #202020;
20
+ line-height: 110%;
21
+ text-align: left;
22
+ }
23
+
24
+ #layout {
25
+ /* this element is just used as a hint how to seed split.js
26
+ it's class value indicates 0-3 which means if only middle
27
+ ltoc, rtoc or all are shown.
28
+ */
29
+ display: none;
30
+ }
31
+
32
+ /***********************
33
+ split.js specifics
34
+ thanks to
35
+ https://github.com/nathancahill/Split.js
36
+ ************************/
37
+
38
+ .gutter {
39
+ background-color: #eee;
40
+ background-repeat: no-repeat;
41
+ background-position: 50%;
42
+ }
43
+
44
+ .gutter.gutter-horizontal {
45
+ /* base 64 encoded version of ../../resource/horizontal.png */
46
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==');
47
+ cursor: ew-resize;
48
+ }
49
+
50
+ .gutter.gutter-vertical {
51
+ /* base 64 encoded version of ../../resource/vertical.png */
52
+ background-image: url('data:image/png;base64,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');
53
+ cursor: ns-resize;
54
+ }
55
+
56
+ .split {
57
+ -webkit-box-sizing: border-box;
58
+ -moz-box-sizing: border-box;
59
+ box-sizing: border-box;
60
+ overflow: auto;
61
+ }
62
+
63
+ .split.split-horizontal, .gutter.gutter-horizontal {
64
+ height: 94%;
65
+ float: left;
16
66
  }
17
67
 
18
68
  /***********************
19
69
  div classes
20
70
  ************************/
21
71
  div.head {
22
- font: 200% Arial, Helvetica, sans-serif, bold;
23
- text-align: center;
24
- width: 100%;
25
- position: fixed;
26
- top: 0px;
27
- height: 90px;
28
- background: #FFFFFF;
29
- z-index: 99;
72
+ font: 200% Arial, Helvetica, sans-serif, bold;
73
+ font-size: 16px; font-size: 4vh;
74
+ text-align: center;
75
+ width: 100%;
76
+ height: 5%;
30
77
  }
31
78
 
32
79
  div.lefttoc {
33
- position: fixed;
34
- width: 20%;
35
- /*height:90%;*/
36
- top: 100px;
37
- left: 5px;
38
- bottom: 20px;
39
- border: solid 1px #000000;
40
- overflow: auto;
41
- white-space: nowrap;
42
- /*display:none;*/ /*uncomment on the left for printing*/
80
+ white-space: nowrap;
43
81
  }
44
82
 
45
83
  div.middle {
46
- position: relative;
47
- margin: 100px 160px 0 23%; /*top right bottom left */
48
- /* margin: x y = Xpx each - botten and top, ypx each - left and right */
49
84
  }
50
85
 
51
86
  div.righttoc {
52
- position: fixed;
53
- width: 150px;
54
- top: 100px;
55
- right: 5px;
56
- border: solid 1px #000000;
57
- /*display:none;*/ /*uncomment on the left for printing*/
87
+ white-space: nowrap;
58
88
  }
59
89
 
60
- button {
61
- width: 100%;
90
+ #pre_toggle_linewrap {
91
+ float: right;
92
+ font-size: 10px; font-size: 2vh;
93
+ border-radius: 10px;
94
+ text-align: center;
95
+ text-decoration: none;
96
+ display: inline-block;
97
+ background-color: #008CBA;
62
98
  }
63
99
 
64
100
  /*code light-blue*/
65
101
  pre {
66
- font-family: courier;
67
- background: #E5F1F4;
68
- font-size: 80%;
69
- border: 1px dotted;
70
- line-height: 110%;
71
- color: #000000;
72
- white-space: pre-wrap;
73
- word-wrap: break-word;
102
+ font-family: courier;
103
+ background: #E5F1F4;
104
+ font-size: 80%;
105
+ border: 1px dotted;
106
+ line-height: 110%;
107
+ color: #000000;
108
+ white-space: pre-wrap; /* default: pre */
109
+ word-wrap: break-word; /* default: initial */
74
110
  }
75
111
  .code0 {
76
- background: #E5F1F4;
112
+ background: #E5F1F4;
77
113
  }
78
114
  /*code red-brown*/
79
115
  .code1 {
80
- background: #A66C75;
116
+ background: #A66C75;
81
117
  }
82
118
  /*code light-green*/
83
119
  .code2 {
84
- background: #DAF1DD;
120
+ background: #DAF1DD;
85
121
  }
86
122
  /*code light-yellow*/
87
123
  .code3 {
88
- background: #F5F2B7;
124
+ background: #F5F2B7;
89
125
  }
90
126
 
91
127
 
92
128
  /*default highlight yellow*/
93
129
  span {
94
- background: #FFFF00;
130
+ background: #FFFF00;
95
131
  }
96
132
 
97
133
  /*red*/
98
134
  span.r {
99
- background: #FF0000;
135
+ background: #FF0000;
100
136
  }
101
137
 
102
138
  /*green*/
103
139
  span.g {
104
- background: #00FF00;
140
+ background: #00FF00;
105
141
  }
106
142
  /*blue*/
107
143
  span.b {
108
- background: #00FFFF;
144
+ background: #00FFFF;
109
145
  }
110
146
 
111
147
  a {
112
- text-decoration: none;
113
- color: #057fac;
148
+ text-decoration: none;
149
+ color: #057fac;
114
150
  }
115
151
 
116
152
  a:hover {
117
- text-decoration: none;
118
- color: #999999;
153
+ text-decoration: none;
154
+ color: #999999;
119
155
  }
120
156
 
121
157
  h1 {
122
- font-size: 140%;
123
- margin: 20px 0px;
158
+ font-size: 140%;
159
+ margin: 20px 0px;
124
160
  }
125
161
 
126
162
  h2 {
127
- font-size: 120%;
128
- }
129
-
130
- /* work-around for margin/padding issues with hash-tag links */
131
- /* http://css-tricks.com/hash-tag-links-padding/ */
132
- h1:before {
133
- font-size: 140%;
134
- display: block;
135
- content: " ";
136
- margin-top: -100px;
137
- height: 100px;
138
- visibility: hidden;
163
+ font-size: 120%;
139
164
  }
140
-
141
- h2:before {
142
- font-size: 120%;
143
- display: block;
144
- content: " ";
145
- margin-top: -100px;
146
- height: 100px;
147
- visibility: hidden;
148
- }
149
-
150
- h3:before {
151
- display: block;
152
- content: " ";
153
- margin-top: -100px;
154
- height: 100px;
155
- visibility: hidden;
156
- }
157
-
158
- /*End of work-around*/
159
-
160
- form {
161
- margin: 1em 0;
162
- padding: .2em 20px;
163
- background: #eeeeee;
164
- }
@@ -0,0 +1,6 @@
1
+ $(document).ready(function(){switch($("#layout").attr("class")){case "1":Split(["#ltoc","#middle"],{minSize:[5,100],sizes:[20,80],snapOffset:50,gutterSize:10});break;case "2":Split(["#middle","#rtoc"],{minSize:[100,5],sizes:[85,15],snapOffset:50,gutterSize:10});break;case "3":Split(["#ltoc","#middle","#rtoc"],{minSize:[5,100,5],sizes:[20,70,10],snapOffset:50,gutterSize:10});break;default:$("#middle").attr("style","width:100%;")}$("td").each(function(b){b=$(this);null!==b.html().match(/^passed$/i)?
2
+ b.attr("style","background-color:#19D119;"):null!==b.html().match(/^failed$/i)?b.attr("style","background-color:#FF4719;"):null!==b.html().match(/^check$/i)&&b.attr("style","background-color:#FFFF00;")});$("[class=rtoconly],[class=bothtoc]").each(function(b){var a=$(this),c=a.attr("class");a.attr("id",c+b);$("#rtoc").append("<a href='#"+c+b+"'>"+a.html()+"</a> <br />\n")});h3index=h2index=h1index=0;$("h1, h2, h3, a.h2, a.h1").each(function(b){var a=$(this);void 0==a.attr("id")&&a.attr("id","title"+
3
+ b);if("H1"==a.prop("tagName").toUpperCase())h1index+=1,h3index=h2index=0,a.prepend(h1index+" "),$("#ltoc").append("<br />\n"),lasth1="#"+a.attr("id"),lasth1cont=a.html();else if("H2"==a.prop("tagName").toUpperCase())h2index+=1,h3index=0,a.prepend(h1index+"."+h2index+" "),lasth2="#"+a.attr("id"),lasth2cont=a.html();else if("H3"==a.prop("tagName").toUpperCase())h3index+=1,a.prepend(h1index+"."+h2index+"."+h3index+" ");else{if("H1"==a.attr("class").toUpperCase())return a.attr("href",lasth1),a.html(lasth1cont),
4
+ 0;if("H2"==a.attr("class").toUpperCase())return a.attr("href",lasth2),a.html(lasth2cont),0}if("undefined"!=typeof a.attr("class")&&"RTOCONLY"==a.attr("class").toUpperCase())return 0;$("#ltoc").append("<div id='div_fold_"+h1index+"_"+h2index+"_"+h3index+"'><a id='a_fold_"+h1index+"_"+h2index+"_"+h3index+"' style='cursor:pointer'>&#160;-&#160;</a> <a id='link"+b+"' href='#"+a.attr("id")+"' >"+a.html()+"</a> <br /> </div>\n");return 0});pre_style=!1;$("#pre_toggle_linewrap").click(function(){pre_style?
5
+ ($("pre").css({"white-space":"pre-wrap","word-wrap":"break-word"}),pre_style=!1):($("pre").css({"white-space":"pre","word-wrap":"initial"}),pre_style=!0)});$('a[id^="a_fold"]').click(function(){var b=$(this),a=b.attr("id").match(/(\d+)_(\d+)_(\d+)/);if(b.html().match(/-/))var c="&#160;+&#160;",e=!1;else c="&#160;-&#160;",e=!0;b.html(c);if("0"==a[2]){var d=new RegExp("div_fold_"+a[1]+"_[1-9]\\d*_0");$("div").filter(function(){return this.id.match(d)}).each(function(){$(this).children('a[id^="a_fold"]').html(c);
6
+ $(this).toggle(e)});d=new RegExp("div_fold_"+a[1]+"_\\d+_[1-9]\\d*");$("div").filter(function(){return this.id.match(d)}).each(function(){$(this).children('a[id^="a_fold"]').html(c);$(this).toggle(e)})}else"0"==a[3]&&(d=new RegExp("div_fold_"+a[1]+"_"+a[2]+"_[1-9]\\d*"),$("div").filter(function(){return this.id.match(d)}).each(function(){$(this).children('a[id^="a_fold"]').html(c);$(this).toggle(e)}))})});
@@ -1,5 +1,5 @@
1
1
  module XhtmlReportGenerator
2
- VERSION = '2.2.0'
2
+ VERSION = '3.0.1'
3
3
  end
4
4
 
5
5
  # puts XhtmlReportGenerator::VERSION
@@ -10,49 +10,62 @@ module XhtmlReportGenerator
10
10
  attr_accessor :document, :file
11
11
  # @param opts [Hash] See the example for an explanation of the valid symbols
12
12
  # @example Valid symbols for the opts Hash
13
- # :jquery if specified, path to a version of jquery, that will be inlined into the html header section
14
- # :toc if specified, path to a javascript.js.rb file that contains the magic to generate all
15
- # :css if specified, path to a css file that contains the markup rules for your generated reports
16
- # :css_print if specified, path to a css file that contains the markup rules for printing the report
17
- # :custom_rb if specified, path to a custom Module containing
13
+ # :js if specified, array of javascript files which are inlined into the html header section
14
+ # :css if specified, array of css files which are inlined into the html header section
15
+ # :css_print if specified, array of css files which are inlined into the html header section with media=print
16
+ # :custom_rb if specified, path to a custom Module containing all the logic to create content for the report
17
+ # see (custom.rb) on how to write it. As a last statement you should extend your module name
18
+ # outside of the module definition.
18
19
  def initialize(opts = {})
19
20
  # define the default values
20
21
  path = File.expand_path("../xhtml_report_generator", __FILE__)
21
- symbols = {
22
- :jquery => File.expand_path("jquery.js",path),
23
- :toc => File.expand_path("toc.js",path),
24
- :css => File.expand_path("style_template.css",path),
25
- :css_print => File.expand_path("print_template.css",path),
22
+ defaults = {
23
+ :js => [
24
+ File.expand_path("jquery.min.js",path),
25
+ File.expand_path("split.min.js",path),
26
+ File.expand_path("toc.min.js",path)
27
+ ],
28
+ :css => [
29
+ File.expand_path("style_template.css",path)
30
+ ],
31
+ :css_print => [
32
+ File.expand_path("print_template.css",path)
33
+ ],
26
34
  :custom_rb => File.expand_path("custom.rb",path)
27
35
  }
28
- # either use the default files provided with the gem, or those provided by the caller
29
- symbols = symbols.merge(opts)
30
- custom_rb_path = symbols[:custom_rb]
31
- for key in symbols.keys do
32
- # read the contents into the symbols hash
33
- symbols[key] = File.read(symbols[key])
34
- end
36
+
37
+ opts[:js] = defaults[:js] if !opts.has_key?(:js)
38
+ opts[:css] = defaults[:css] if !opts.has_key?(:css)
39
+ opts[:css_print] = defaults[:css_print] if !opts.has_key?(:css_print)
40
+ opts[:custom_rb] = defaults[:custom_rb] if !opts.has_key?(:custom_rb)
41
+
35
42
  # load the custom module and extend it, use instance_eval otherwise the module will affect
36
43
  # all existing Generator classes
37
- instance_eval(symbols[:custom_rb], custom_rb_path)
44
+ instance_eval(File.read(opts[:custom_rb]), opts[:custom_rb])
38
45
 
39
46
  @document = Generator.create_xhtml_document("Title")
40
47
  head = @document.elements["//head"]
41
48
 
42
49
  head.add_element("meta", {"charset" => "utf-8"})
43
50
 
44
- # insert the custom css, and javascript files
45
- style = head.add_element("style", {"type" => "text/css"})
46
- cdata(symbols[:css], style)
47
-
48
- style = head.add_element("style", {"type" => "text/css", "media"=>"print"})
49
- cdata(symbols[:css_print], style)
50
-
51
- script = head.add_element("script", {"type" => "text/javascript"})
52
- cdata(symbols[:jquery], script)
53
-
54
- script = head.add_element("script", {"type" => "text/javascript"})
55
- cdata(symbols[:toc], script)
51
+ # insert css
52
+ opts[:css].each do |css_path|
53
+ style = head.add_element("style", {"type" => "text/css"})
54
+ cdata(File.read(css_path), style)
55
+ end
56
+
57
+ # insert css for printing
58
+ opts[:css_print].each do |css_path|
59
+ style = head.add_element("style", {"type" => "text/css", "media"=>"print"})
60
+ cdata(File.read(css_path), style)
61
+ end
62
+
63
+ # inster js files
64
+ opts[:js].each do |js_path|
65
+ script = head.add_element("script", {"type" => "text/javascript"})
66
+ cdata(File.read(js_path), script)
67
+ end
68
+
56
69
  end
57
70
 
58
71
  # Surrounds CData tag with c-style comments to remain compatible with normal html.
@@ -93,6 +106,7 @@ module XhtmlReportGenerator
93
106
  # don't use version 1.1 - firefox has not yet a parser vor xml 1.1
94
107
  # https://bugzilla.mozilla.org/show_bug.cgi?id=233154
95
108
  header = '<?xml version="1.0" encoding="UTF-8"?>'
109
+ # change of doctype to <!DOCTYPE html> for html5 compatibility
96
110
  header << '<!DOCTYPE html>'
97
111
 
98
112
  doc = REXML::Document.new(header)
metadata CHANGED
@@ -1,27 +1,21 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xhtml_report_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manuel Widmer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-29 00:00:00.000000000 Z
11
+ date: 2016-06-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: "The generator can be used to create html or xhtml files. It comes with
14
- many utility functions.\n== Example usage\n gen1 = XhtmlReportGenerator::Generator.new\n
15
- \ gen1.create_layout(\"Title\")\n gen1.heading(\"h1\", {\"class\" => \"bothtoc\"})
16
- {\"titel\"}\n gen1.heading(\"h2\") {\"subtitel\"}\n gen1.heading(\"h3\") {\"section\"}\n
17
- \ gen1.content({\"class\"=>\"bold\"}) {\"content function: Hallo welt <br /> html
18
- test <span class=\"r\" >red span test</span>\"}\n gen1.html(\"<p class=\"italic\">html
19
- function: Hallo welt <br /> html test <span class=\"r\" >red span test<span></p>\")\n
20
- \ gen1.highlight(/Ha.*lt/)\n \nThe javascript to render the table of contents,
21
- the custom generator functions and style sheet all can be\nsupplied by your own,
22
- if necessary. By default there are methods to insert tables, links, paragraphs,
23
- preformatted text\nand arbitrary xhtml code. Due to the xml nature it is also easy
24
- to insert SVG graphs / pictures.\n\n"
14
+ many utility functions.\n \nThe javascript to render the table of contents, the
15
+ custom generator functions and style sheet all can be\nsupplied by your own, if
16
+ necessary. By default there are methods to insert tables, links, paragraphs, preformatted
17
+ text\nand arbitrary xhtml code. Due to the xml nature it is also easy to insert
18
+ SVG graphs / pictures.\n\nCheckout the github project to see some examples.\n"
25
19
  email: m-widmer@gmx.ch
26
20
  executables: []
27
21
  extensions: []
@@ -31,10 +25,11 @@ files:
31
25
  - README.md
32
26
  - lib/xhtml_report_generator.rb
33
27
  - lib/xhtml_report_generator/custom.rb
34
- - lib/xhtml_report_generator/jquery.js
28
+ - lib/xhtml_report_generator/jquery.min.js
35
29
  - lib/xhtml_report_generator/print_template.css
30
+ - lib/xhtml_report_generator/split.min.js
36
31
  - lib/xhtml_report_generator/style_template.css
37
- - lib/xhtml_report_generator/toc.js
32
+ - lib/xhtml_report_generator/toc.min.js
38
33
  - lib/xhtml_report_generator/version.rb
39
34
  homepage: https://rubygems.org/gems/xhtml_report_generator
40
35
  licenses:
@@ -48,7 +43,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
48
43
  requirements:
49
44
  - - ">="
50
45
  - !ruby/object:Gem::Version
51
- version: 1.9.3
46
+ version: 2.0.0
52
47
  required_rubygems_version: !ruby/object:Gem::Requirement
53
48
  requirements:
54
49
  - - ">="
@@ -59,5 +54,6 @@ rubyforge_project:
59
54
  rubygems_version: 2.4.5.1
60
55
  signing_key:
61
56
  specification_version: 4
62
- summary: A simple html or xhtml generator to create human readable support
57
+ summary: A simple html or xhtml generator or logger to create human readable reports
58
+ and logs
63
59
  test_files: []