htmlgrid 1.1.4 → 1.1.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: d505cc41b84a12f80f67b30b425bd5466d261cc3
4
- data.tar.gz: 84670f093031efc69daef742c5c73f75e6e97474
2
+ SHA256:
3
+ metadata.gz: eda73d2e1ec602956e9dac7af185179cc676906adf4a34fd1a683685c391ed49
4
+ data.tar.gz: c7668593f88170c009de8cc42839d69ec24834aec487baed336152eab1f979a4
5
5
  SHA512:
6
- metadata.gz: fd47cfdb1298fcfe65d1c123b7c92aa8c92b99430424e505d6f5b4a1aeb39b9a7acb92c92cd49b34ebe559fd4bdcdb2269b2d3f798028efc5a284fbe28f752f9
7
- data.tar.gz: 48554f5b0ccb34936bf763d30b212895fb6edfff0e565429048b4774ec745f78e343c7818bc1d1f6a63e1d159dda2ba13f724a0849a5c41635a700e96cd082b6
6
+ metadata.gz: c85d82f860af997c13a4c6f3298a5ac1dfc1cfff668d28842b21f0e8723c4cc35cadb19fa4990070ba6fd3d735235d2ec0d1b54585e46a91ef229e3683af5ebf
7
+ data.tar.gz: 5701ee21b4d273fcef7e6caab0af4401f8d67019aff1214327d092567fa73798690aebec32163aa890cd79eb6f4984c6e90a676eb2ffaee38fbfe7dc0137f80d
@@ -5,12 +5,12 @@
5
5
 
6
6
  require 'htmlgrid/component'
7
7
  require 'htmlgrid/div'
8
+ require 'htmlgrid/template'
8
9
 
9
10
  module HtmlGrid
10
11
  class Component
11
12
  @@msie_ptrn = /MSIE\s*(\d)/
12
13
  attr_accessor :dojo_tooltip
13
- # DOJO_VERSION >= 1.7.0 only (removed old version support)
14
14
  def dojo_tag(widget, args={}, inner_html='')
15
15
  div = HtmlGrid::Div.new(@model, @session, self)
16
16
  div.set_attribute('data-dojo-type', widget)
@@ -38,9 +38,6 @@ module HtmlGrid
38
38
  def dynamic_html(context)
39
39
  html = ''
40
40
  attrs = {
41
- # NOTE:
42
- # DOJO >= 1.8 has support for type name separated by '/'
43
- # but, <= 1.7 must be separated with '.'
44
41
  'data-dojo-type' => 'dijit/TooltipDialog',
45
42
  'data-dojo-props' => "connectId:#{css_id}",
46
43
  'id' => "#{css_id}_widget",
@@ -66,9 +63,7 @@ module HtmlGrid
66
63
  html << @dojo_tooltip.to_html(context).force_encoding('utf-8')
67
64
  end
68
65
  unless html.empty? || dojo_parse_on_load
69
- html << context.script('type' => 'text/javascript') {
70
- "dojoConfig.searchIds.push('#{css_id}')"
71
- }
66
+ html << context.script('type' => 'text/javascript') { "dojoConfig.searchIds.push('#{css_id}')" }
72
67
  end
73
68
  # call original dynamic_html
74
69
  dojo_dynamic_html(context) << html
@@ -77,7 +72,7 @@ module HtmlGrid
77
72
  end
78
73
  module DojoToolkit
79
74
  module DojoTemplate
80
- DOJO_DEBUG = false
75
+ DOJO_DEBUG = true
81
76
  DOJO_BACK_BUTTON = false
82
77
  DOJO_ENCODING = nil
83
78
  DOJO_PARSE_ON_LOAD = true
@@ -96,52 +91,30 @@ module HtmlGrid
96
91
  "{ name: '#{prefix}', location: '#{path}' }"
97
92
  }.join(",")
98
93
  end
99
- config = [
100
- "parseOnLoad: #{self.class::DOJO_PARSE_ON_LOAD}",
101
- "isDebug: #{self.class::DOJO_DEBUG}",
102
- "preventBackButtonFix: #{!self.class::DOJO_BACK_BUTTON}",
103
- "bindEncoding: '#{encoding}'",
104
- "searchIds: []",
105
- "urchin: ''",
94
+ puts "dynamic_html_headers with pkgs: #{packages}"
95
+ config =config = [
106
96
  "has: {
107
- 'dojo-firebug': #{self.class::DOJO_DEBUG},
108
- 'dojo-debug-messages': #{self.class::DOJO_DEBUG}
97
+ 'dojo-debug-messages': true
109
98
  }",
110
- "packages: [ #{packages} ]"
111
99
  ].join(',')
112
- args.store('data-dojo-config', config)
113
- args.store('src', dojo_path)
100
+ headers << %(<script>
101
+ var dojoConfig = {
102
+ parseOnLoad: true,
103
+ isDebug: true,
104
+ async: true,
105
+ urchin: '',
106
+ };
107
+ </script>)
114
108
  headers << context.script(args)
115
- args = { 'type' => 'text/javascript' }
116
- headers << context.script(args) {
117
- package_paths = self.class::DOJO_REQUIRE.map { |req|
118
- "'#{req}'"
119
- }.join(',')
120
- package_names = self.class::DOJO_REQUIRE.map { |req|
121
- req.split('/').last
122
- }.join(',')
123
- if @dojo_onloads
124
- onloads = ''
125
- @dojo_onloads.each { |onload|
126
- onloads << "#{onload}\n"
127
- }
128
- script =
129
- "require([#{package_paths}], function(#{package_names}) {" \
130
- "ready(function() {" \
131
- "#{onloads}" \
132
- "});" \
133
- "});"
109
+ { 'text/css' => File.join(File.dirname(dojo_path), "/resources/dojo.css"),
110
+ 'text/javascript' => dojo_path,
111
+ }.each do |type, path|
112
+ if (content = get_inline(path))
113
+ headers << context.style(:type =>type) { content }
134
114
  else
135
- script = "require([#{package_paths}]);"
115
+ headers << context.style(:type =>type, :src => path) { "@import \"#{path}\";" }
136
116
  end
137
- script
138
- }
139
- dojo_dir = File.dirname(dojo_path)
140
- headers << context.style(:type => "text/css") { <<-EOS
141
- @import "#{File.join(dojo_dir, "/resources/dojo.css")}";
142
- @import "#{File.join(dojo_dir, "../dijit/themes/tundra/tundra.css")}";
143
- EOS
144
- }
117
+ end
145
118
  headers
146
119
  end
147
120
  def dojo_parse_on_load
@@ -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
@@ -35,13 +35,29 @@ module HtmlGrid
35
35
  LEGACY_INTERFACE = true
36
36
  CSS_FILES = []
37
37
  JAVASCRIPTS = []
38
+ @@local_doc_dir = File.join(Dir.pwd, 'doc')
39
+ def get_inline(ressource)
40
+ local_file = File.join(@@local_doc_dir, URI(ressource).path)
41
+ if File.exist?(local_file)
42
+ # puts "Reading #{ressource} #{local_file} #{File.size(local_file)}"
43
+ File.read(local_file)
44
+ else
45
+ nil
46
+ end
47
+ end
38
48
  def css_link(context, path=@lookandfeel.resource(:css))
39
49
  properties = {
40
50
  "rel" => "stylesheet",
41
51
  "type" => "text/css",
42
- "href" => path,
52
+ "async" => "true",
53
+ 'href' => path,
43
54
  }
44
- context.link(properties)
55
+ if (content = get_inline(path))
56
+ properties.delete('href')
57
+ context.style(properties) { content }
58
+ else
59
+ context.link(properties)
60
+ end
45
61
  end
46
62
  def css_links(context, path=@lookandfeel.resource(:css))
47
63
  links = self.class.const_get(:CSS_FILES).collect { |key|
@@ -71,8 +87,8 @@ module HtmlGrid
71
87
  context.head {
72
88
  if(block_given?)
73
89
  block.call
74
- end.to_s <<
75
- title(context) <<
90
+ end
91
+ context.head << title(context) <<
76
92
  meta_tags(context) <<
77
93
  other_html_headers(context) <<
78
94
  css_links(context) <<
@@ -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.5'
5
5
  end
@@ -30,6 +30,7 @@ require 'stub/cgi'
30
30
  require 'htmlgrid/dojotoolkit'
31
31
  require 'test_helper'
32
32
  require 'flexmock/minitest'
33
+ require 'sbsm/lookandfeel'
33
34
 
34
35
  class TestDojotoolkit < Minitest::Test
35
36
  class StubAttributeComponent < HtmlGrid::Component
@@ -72,3 +73,60 @@ class TestDojotoolkit < Minitest::Test
72
73
  assert(/href="my_tooltip"/.match(result))
73
74
  end
74
75
  end
76
+ class StubTemplateLookandfeel < SBSM::Lookandfeel
77
+ RESOURCES = {
78
+ :css => "test.css"
79
+ }
80
+ DICTIONARIES = {
81
+ "de" => {
82
+ :html_title => "Test",
83
+ }
84
+ }
85
+ def lookandfeel
86
+ self
87
+ end
88
+ end
89
+ class StubTemplateSession
90
+ def flavor
91
+ "gcc"
92
+ end
93
+ def language
94
+ "de"
95
+ end
96
+ def http_protocol
97
+ 'http'
98
+ end
99
+ def server_name
100
+ "testserver.com"
101
+ end
102
+ def server_port
103
+ '80'
104
+ end
105
+ alias :default_language :language
106
+ end
107
+ class PublicTemplate < HtmlGrid::Template
108
+ include HtmlGrid::DojoToolkit::DojoTemplate
109
+ COMPONENTS = {}
110
+ def dynamic_html_headers(context)
111
+ headers = super
112
+ end
113
+ end
114
+
115
+ class TestTemplate < Minitest::Test
116
+ def setup
117
+ lookandfeel = StubTemplateLookandfeel.new(StubTemplateSession.new)
118
+ @template = PublicTemplate.new(nil, lookandfeel, nil)
119
+ end
120
+ def test_dynamic_html_headers
121
+ @cgi = CGI.new
122
+ result = @template.to_html(@cgi)
123
+ @session = flexmock('session')
124
+ comp = HtmlGrid::Component.new("foo", @session)
125
+ comp.dojo_tooltip = 'my_tooltip'
126
+ assert_equal("foo", comp.model)
127
+ assert_equal(false, comp.label?)
128
+ result= comp.to_html(@cgi)
129
+ skip 'tooltip test does not work'
130
+ assert(/href="my_tooltip"/.match(result))
131
+ end
132
+ 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.5
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-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sbsm
@@ -244,8 +244,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
244
244
  - !ruby/object:Gem::Version
245
245
  version: '0'
246
246
  requirements: []
247
- rubyforge_project:
248
- rubygems_version: 2.6.8
247
+ rubygems_version: 3.1.2
249
248
  signing_key:
250
249
  specification_version: 4
251
250
  summary: HtmlGrid is a Html-ToolKit for Ruby Webframeworks.