htmlgrid 1.1.4 → 1.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -22,8 +22,8 @@
22
22
  # ywesee - intellectual capital connected, Winterthurerstrasse 52, CH-8006 Zuerich, Switzerland
23
23
  # htmlgrid@ywesee.com, www.ywesee.com/htmlgrid
24
24
  #
25
- # HtmlGrid::Component -- htmlgrid -- 23.12.2012 -- mhatakeyama@ywesee.com
26
- # HtmlGrid::Component -- htmlgrid -- 23.10.2002 -- hwyss@ywesee.com
25
+ # HtmlGrid::Component -- htmlgrid -- 23.12.2012 -- mhatakeyama@ywesee.com
26
+ # HtmlGrid::Component -- htmlgrid -- 23.10.2002 -- hwyss@ywesee.com
27
27
  #++
28
28
 
29
29
  module HtmlGrid
@@ -72,7 +72,7 @@ module HtmlGrid
72
72
  83 => "Sigma", 115 => "sigma",
73
73
  84 => "Tau", 116 => "tau",
74
74
  85 => "Upsilon", 117 => "upsilon",
75
- 86 => "sigmaf",
75
+ 86 => "sigmaf",
76
76
  87 => "Omega", 119 => "omega",
77
77
  88 => "Xi", 120 => "xi",
78
78
  89 => "Psi", 121 => "psi",
@@ -163,7 +163,7 @@ module HtmlGrid
163
163
  end
164
164
  # escape '&', '<' and '>' characters in txt
165
165
  def escape(txt)
166
- @@html_entities.inject(txt.to_s.dup) { |str, map|
166
+ @@html_entities.inject(txt.to_s.dup) { |str, map|
167
167
  char, entity = map
168
168
  str.gsub!(char, '&' << entity << ';')
169
169
  str
@@ -214,16 +214,18 @@ module HtmlGrid
214
214
  @attributes.store('tabIndex', tab.to_s)
215
215
  end
216
216
  def to_html(context)
217
- _to_html(context, @value).to_s.force_encoding('utf-8')
217
+ _to_html(context, @value).to_s.encode('utf-8')
218
218
  end
219
219
  @@nl2br_ptrn = /(\r\n)|(\n)|(\r)/
220
220
  def _to_html(context, value=@value)
221
221
  if(value.is_a?(Array))
222
222
  value.collect { |item| _to_html(context, item) }.join(' ')
223
223
  elsif(value.respond_to?(:to_html))
224
- value.to_html(context).to_s.force_encoding('utf-8')
224
+ value.to_html(context).to_s.dup.force_encoding('utf-8')
225
225
  else
226
- value.to_s.gsub(@@nl2br_ptrn, '<br>')
226
+ if value && value.is_a?(String)
227
+ value =CGI.unescape(value.gsub('+', CGI.escape('+')))
228
+ end
227
229
  end
228
230
  end
229
231
  private
@@ -86,7 +86,7 @@ module HtmlGrid
86
86
  html = ''
87
87
  @components.each { |component|
88
88
  if component.respond_to? :to_html
89
- html << component.to_html(cgi).to_s.force_encoding('utf-8')
89
+ html << component.to_html(cgi).to_s.dup.force_encoding('utf-8')
90
90
  else
91
91
  html << component.to_s
92
92
  end
@@ -22,9 +22,10 @@
22
22
  # ywesee - intellectual capital connected, Winterthurerstrasse 52, CH-8006 Zuerich, Switzerland
23
23
  # htmlgrid@ywesee.com, www.ywesee.com/htmlgrid
24
24
  #
25
- # Template -- htmlgrid -- 19.11.2002 -- hwyss@ywesee.com
25
+ # Template -- htmlgrid -- 19.11.2002 -- hwyss@ywesee.com
26
26
 
27
27
  require 'htmlgrid/composite'
28
+ require 'uri'
28
29
 
29
30
  module HtmlGrid
30
31
  module TemplateMethods
@@ -35,17 +36,28 @@ module HtmlGrid
35
36
  LEGACY_INTERFACE = true
36
37
  CSS_FILES = []
37
38
  JAVASCRIPTS = []
39
+ @@local_doc_dir = File.join(Dir.pwd, 'doc')
40
+ def TemplateMethods.get_inline(ressource)
41
+ local_file = File.join(@@local_doc_dir, URI(ressource).path)
42
+ File.exist?(local_file) ? File.read(local_file) : nil
43
+ end
38
44
  def css_link(context, path=@lookandfeel.resource(:css))
39
45
  properties = {
40
46
  "rel" => "stylesheet",
41
47
  "type" => "text/css",
42
- "href" => path,
48
+ "async" => "true",
49
+ 'href' => path,
43
50
  }
44
- context.link(properties)
51
+ if (content = TemplateMethods.get_inline(path))
52
+ properties.delete('href')
53
+ context.style(properties) { content }
54
+ else
55
+ context.link(properties)
56
+ end
45
57
  end
46
58
  def css_links(context, path=@lookandfeel.resource(:css))
47
- links = self.class.const_get(:CSS_FILES).collect { |key|
48
- css_link(context, @lookandfeel.resource(key))
59
+ links = self.class.const_get(:CSS_FILES).collect { |key|
60
+ css_link(context, @lookandfeel.resource(key))
49
61
  }
50
62
  links.push(css_link(context, path)) if(path)
51
63
  links.join
@@ -71,8 +83,8 @@ module HtmlGrid
71
83
  context.head {
72
84
  if(block_given?)
73
85
  block.call
74
- end.to_s <<
75
- title(context) <<
86
+ end
87
+ context.head << title(context) <<
76
88
  meta_tags(context) <<
77
89
  other_html_headers(context) <<
78
90
  css_links(context) <<
@@ -85,7 +97,7 @@ module HtmlGrid
85
97
  "language" => "JavaScript",
86
98
  "type" => "text/javascript",
87
99
  "src" => @lookandfeel.resource_global(:javascript, "#{key}.js"),
88
- }
100
+ }
89
101
  context.script(properties)
90
102
  }
91
103
  jscripts.join
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
  # encoding: utf-8
3
3
  module HtmlGrid
4
- VERSION = '1.1.4'
4
+ VERSION = '1.1.9'
5
5
  end
@@ -25,9 +25,11 @@
25
25
 
26
26
  $: << File.expand_path("../lib", File.dirname(__FILE__))
27
27
  $: << File.expand_path("../ext", File.dirname(__FILE__))
28
+ $: << File.dirname(__FILE__)
28
29
 
29
30
  require 'minitest/autorun'
30
31
  require 'htmlgrid/component'
32
+ require 'stub/cgi'
31
33
 
32
34
  module HtmlGrid
33
35
  class Component
@@ -36,6 +38,9 @@ module HtmlGrid
36
38
  end
37
39
 
38
40
  class TestComponent < Minitest::Test
41
+ STRING_WITH_SHARP = "Test_#_gartenhat"
42
+ STRING_WITH_PLUS = "Test_+_plus"
43
+ STRING_WITH_UMLAUT = "Test_with_Umlaut_üé"
39
44
  class StubAttributeComponent < HtmlGrid::Component
40
45
  HTML_ATTRIBUTES = { "key" => "val" }
41
46
  end
@@ -51,6 +56,14 @@ class TestComponent < Minitest::Test
51
56
  class StubContainer
52
57
  attr_accessor :onsubmit
53
58
  end
59
+ class ToHTMLreturnFrozen
60
+ def initialize content
61
+ @content = content
62
+ end
63
+ def to_html(what)
64
+ return @content.to_s.freeze
65
+ end
66
+ end
54
67
  def setup
55
68
  @component = HtmlGrid::Component.new(nil, nil)
56
69
  end
@@ -71,6 +84,41 @@ class TestComponent < Minitest::Test
71
84
  assert_equal("bar", comp.session)
72
85
  assert_equal("baz", comp.container)
73
86
  end
87
+ def test_to_html
88
+ comp = HtmlGrid::Component.new("foo", "bar", "baz").to_html(CGI.new)
89
+ assert_equal("", comp)
90
+ end
91
+ # Next is test for https://github.com/zdavatz/oddb.org/issues/118 FrozenError at /de/just-medical
92
+ def test_to_html_frozen_empty
93
+ comp = HtmlGrid::Component.new('context')
94
+ comp.value = ToHTMLreturnFrozen.new('')
95
+ result = comp.to_html(CGI.new)
96
+ assert_equal('', result)
97
+ end
98
+ def test_gartenhag_to_html
99
+ comp = HtmlGrid::Component.new('context')
100
+ comp.value = STRING_WITH_SHARP
101
+ result = comp.to_html(CGI.new)
102
+ assert_equal(STRING_WITH_SHARP, result)
103
+ end
104
+ def test_minus_to_html
105
+ comp = HtmlGrid::Component.new('context')
106
+ comp.value = STRING_WITH_PLUS
107
+ result = comp.to_html(CGI.new)
108
+ assert_equal(STRING_WITH_PLUS, result)
109
+ end
110
+ def test_umlaut_to_html
111
+ comp = HtmlGrid::Component.new('context')
112
+ comp.value = STRING_WITH_UMLAUT
113
+ result = comp.to_html(CGI.new)
114
+ assert_equal(STRING_WITH_UMLAUT, result)
115
+ end
116
+ def test_escaped_STRING_WITH_UMLAUT_to_html
117
+ comp = HtmlGrid::Component.new('context')
118
+ comp.value =CGI.escape(STRING_WITH_UMLAUT)
119
+ result = comp.to_html(CGI.new)
120
+ assert_equal(STRING_WITH_UMLAUT, result)
121
+ end
74
122
  def test_initialize3
75
123
  comp = StubAttributeComponent.new("foo", "bar")
76
124
  expected = { "key" => "val" }
@@ -27,9 +27,11 @@ $: << File.dirname(__FILE__)
27
27
 
28
28
  require 'minitest/autorun'
29
29
  require 'stub/cgi'
30
+ require 'htmlgrid/template'
30
31
  require 'htmlgrid/dojotoolkit'
31
32
  require 'test_helper'
32
33
  require 'flexmock/minitest'
34
+ require 'sbsm/lookandfeel'
33
35
 
34
36
  class TestDojotoolkit < Minitest::Test
35
37
  class StubAttributeComponent < HtmlGrid::Component
@@ -72,3 +74,60 @@ class TestDojotoolkit < Minitest::Test
72
74
  assert(/href="my_tooltip"/.match(result))
73
75
  end
74
76
  end
77
+ class StubTemplateLookandfeel < SBSM::Lookandfeel
78
+ RESOURCES = {
79
+ :css => "test.css"
80
+ }
81
+ DICTIONARIES = {
82
+ "de" => {
83
+ :html_title => "Test",
84
+ }
85
+ }
86
+ def lookandfeel
87
+ self
88
+ end
89
+ end
90
+ class StubTemplateSession
91
+ def flavor
92
+ "gcc"
93
+ end
94
+ def language
95
+ "de"
96
+ end
97
+ def http_protocol
98
+ 'http'
99
+ end
100
+ def server_name
101
+ "testserver.com"
102
+ end
103
+ def server_port
104
+ '80'
105
+ end
106
+ alias :default_language :language
107
+ end
108
+ class PublicTemplate < HtmlGrid::Template
109
+ include HtmlGrid::DojoToolkit::DojoTemplate
110
+ COMPONENTS = {}
111
+ def dynamic_html_headers(context)
112
+ headers = super
113
+ end
114
+ end
115
+
116
+ class TestTemplate < Minitest::Test
117
+ def setup
118
+ lookandfeel = StubTemplateLookandfeel.new(StubTemplateSession.new)
119
+ @template = PublicTemplate.new(nil, lookandfeel, nil)
120
+ end
121
+ def test_dynamic_html_headers
122
+ @cgi = CGI.new
123
+ result = @template.to_html(@cgi)
124
+ @session = flexmock('session')
125
+ comp = HtmlGrid::Component.new("foo", @session)
126
+ comp.dojo_tooltip = 'my_tooltip'
127
+ assert_equal("foo", comp.model)
128
+ assert_equal(false, comp.label?)
129
+ result= comp.to_html(@cgi)
130
+ skip 'tooltip test does not work'
131
+ assert(/href="my_tooltip"/.match(result))
132
+ end
133
+ end
@@ -28,6 +28,7 @@ $LOAD_PATH << File.dirname(__FILE__)
28
28
 
29
29
  require 'minitest'
30
30
  require 'minitest/autorun'
31
+ require 'flexmock/minitest'
31
32
  require 'stub/cgi'
32
33
  require 'sbsm/lookandfeel'
33
34
  require 'htmlgrid/template'
@@ -44,6 +45,9 @@ class StubTemplateSession
44
45
  end
45
46
  def server_name
46
47
  "testserver.com"
48
+ end
49
+ def server_port
50
+ '80'
47
51
  end
48
52
  alias :default_language :language
49
53
  end
@@ -60,6 +64,7 @@ class StubTemplateLookandfeel < SBSM::Lookandfeel
60
64
  self
61
65
  end
62
66
  end
67
+
63
68
  class Template < HtmlGrid::Template
64
69
  META_TAGS = [
65
70
  {
@@ -86,11 +91,29 @@ class TestTemplate < Minitest::Test
86
91
  result << @template.to_html(CGI.new)
87
92
  expected = [
88
93
  '<TITLE>Test</TITLE>',
89
- "<LINK rel=\"stylesheet\" type=\"text/css\" href=\"http://testserver.com/resources/gcc/test.css\">",
94
+ '<LINK rel="stylesheet" type="text/css" async="true" href="http://testserver.com:80/resources/gcc/test.css">',
90
95
  '<META http-equiv="robots" content="follow, index">',
91
96
  ]
92
97
  expected.each_with_index { |line, idx|
93
98
  assert(result.index(line), "#{idx} Missing: #{line} in #{result}")
94
99
  }
95
100
  end
101
+ def test_to_html_with_inline_css
102
+ @lookandfeel = flexmock('lnf', StubTemplateLookandfeel.new(StubTemplateSession.new))
103
+ @lookandfeel.should_receive(:resource).with(:css).and_return('test/inline.css')
104
+ @lookandfeel.should_receive(:lookup).with(:html_title).and_return('html_title').by_default
105
+ @lookandfeel.should_receive(:lookup).with(any).and_return(nil).by_default
106
+ @template = Template.new(nil, @lookandfeel, nil)
107
+ result = ""
108
+ result << @template.to_html(CGI.new)
109
+ expected = [
110
+ '<TITLE>html_title</TITLE>',
111
+ 'this is a dummy CSS file, which should be inlined',
112
+ '<STYLE rel="stylesheet" type="text/css" async="true">',
113
+ '<META http-equiv="robots" content="follow, index">',
114
+ ]
115
+ expected.each_with_index { |line, idx|
116
+ assert(result.index(line), "#{idx} Missing: #{line} in #{result}")
117
+ }
118
+ end
96
119
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: htmlgrid
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.4
4
+ version: 1.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masaomi Hatakeyama, Zeno R.R. Davatz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-19 00:00:00.000000000 Z
11
+ date: 2020-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sbsm
@@ -157,6 +157,8 @@ extensions: []
157
157
  extra_rdoc_files: []
158
158
  files:
159
159
  - Manifest.txt
160
+ - TooltipDialog.txt
161
+ - interaction_no_inline.txt
160
162
  - lib/htmlgrid/booleanvalue.rb
161
163
  - lib/htmlgrid/button.rb
162
164
  - lib/htmlgrid/centeredcomposite.rb
@@ -244,8 +246,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
244
246
  - !ruby/object:Gem::Version
245
247
  version: '0'
246
248
  requirements: []
247
- rubyforge_project:
248
- rubygems_version: 2.6.8
249
+ rubygems_version: 3.1.2
249
250
  signing_key:
250
251
  specification_version: 4
251
252
  summary: HtmlGrid is a Html-ToolKit for Ruby Webframeworks.