nebula-webclient 8.0.10286
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.
- data/lib/nebula/webclient/setting.rb +127 -0
- data/lib/nebula/webclient/viewer.rb +95 -0
- data/lib/nebula/webclient.rb +4 -0
- data/lib/nebula-webclient.rb +2 -0
- metadata +48 -0
@@ -0,0 +1,127 @@
|
|
1
|
+
|
2
|
+
require 'erb'
|
3
|
+
|
4
|
+
module Nebula
|
5
|
+
module WebClient
|
6
|
+
|
7
|
+
class Encoder
|
8
|
+
|
9
|
+
def self.str(s)
|
10
|
+
s.to_s
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.url(s)
|
14
|
+
ERB::Util.u(s)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.js(s)
|
18
|
+
return 'null' if s.nil?
|
19
|
+
s = s.to_s
|
20
|
+
s = s.gsub("\\", '\\\\')
|
21
|
+
s = s.gsub("\'", '\\\'')
|
22
|
+
s = s.gsub("\"", '\"')
|
23
|
+
s = s.gsub("\t", '\t')
|
24
|
+
s = s.gsub("\r", '\r')
|
25
|
+
s = s.gsub("\n", '\n')
|
26
|
+
'"' << s << '"'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class Border
|
31
|
+
def initialize(s = 'solid', w = 0, c = '#000')
|
32
|
+
@style = s
|
33
|
+
@width = w
|
34
|
+
@color = c
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_s
|
38
|
+
'' << style.to_s << ' ' << width.to_s << 'px ' << color.to_s
|
39
|
+
end
|
40
|
+
|
41
|
+
attr(:style, true)
|
42
|
+
attr(:width, true)
|
43
|
+
attr(:color, true)
|
44
|
+
end
|
45
|
+
|
46
|
+
class Setting
|
47
|
+
def initialize
|
48
|
+
@width = 640
|
49
|
+
@height = 480
|
50
|
+
@border = Border.new
|
51
|
+
@menu_docking = :bottom
|
52
|
+
@render_mode = :default
|
53
|
+
@language = :english
|
54
|
+
end
|
55
|
+
|
56
|
+
def parameters(uri)
|
57
|
+
s = ''
|
58
|
+
s << '?w=' << Encoder.str(width)
|
59
|
+
s << '&h=' << Encoder.str(height)
|
60
|
+
s << '&b=' << Encoder.url(border) if border.width > 0
|
61
|
+
s << '&m=' << Encoder.str(menu_docking) if menu_docking != :bottom
|
62
|
+
s << '&r=' << Encoder.str(render_mode) if render_mode != :default
|
63
|
+
s << '&l=' << Encoder.str(Languages[language]) if language != :english
|
64
|
+
s << '&u=' << Encoder.url(uri) if uri
|
65
|
+
s
|
66
|
+
end
|
67
|
+
|
68
|
+
def json(uri)
|
69
|
+
s = ''
|
70
|
+
s << '{width:' << Encoder.str(width)
|
71
|
+
s << ',height:' << Encoder.str(height)
|
72
|
+
s << ',border:' << Encoder.str(border) if border.width > 0
|
73
|
+
s << ',menuDocking:' << Encoder.str(menu_docking) if menu_docking != :bottom
|
74
|
+
s << ',renderMode:' << Encoder.str(render_mode) if render_mode != :default
|
75
|
+
s << ',language:' << Encoder.str(Languages[language]) if language != :english
|
76
|
+
s << ',uri' << Encoder.js(uri) if uri
|
77
|
+
s << '}'
|
78
|
+
s
|
79
|
+
end
|
80
|
+
|
81
|
+
attr(:width, true)
|
82
|
+
attr(:height, true)
|
83
|
+
attr(:border, true)
|
84
|
+
attr(:menu_docking, true)
|
85
|
+
attr(:render_mode, true)
|
86
|
+
attr(:language, true)
|
87
|
+
|
88
|
+
Languages = {:english => 'en-us',
|
89
|
+
:french => 'fr',
|
90
|
+
:simplified_chinese => 'zh-cn',
|
91
|
+
:traditional_chinese => 'zh-tw',
|
92
|
+
:japanese => 'jp'
|
93
|
+
}
|
94
|
+
end
|
95
|
+
|
96
|
+
class RenderSetting
|
97
|
+
def initialize(w, h, mode = :default, set = '', view = '', version = '1.0')
|
98
|
+
@width = w
|
99
|
+
@height = h
|
100
|
+
@render_mode = mode
|
101
|
+
@selection_set = set
|
102
|
+
@sectional_view = view
|
103
|
+
@version = version
|
104
|
+
end
|
105
|
+
|
106
|
+
def json
|
107
|
+
s = ''
|
108
|
+
s << '{screenWidth:' << Encoder.str(width)
|
109
|
+
s << ',screenHeight:' << Encoder.str(height)
|
110
|
+
s << ',renderMode:' << Encoder.str(render_mode)
|
111
|
+
s << ',selectionSet:' << Encoder.str(selection_set) if !selection_set.blank?
|
112
|
+
s << ',sectionalView:' << Encoder.str(sectional_view) if !sectional_view.blank?
|
113
|
+
s << ',version:' << Encoder.str(version)
|
114
|
+
s << '}'
|
115
|
+
end
|
116
|
+
|
117
|
+
attr(:width, true)
|
118
|
+
attr(:height, true)
|
119
|
+
attr(:render_mode, true)
|
120
|
+
attr(:selection_set, true)
|
121
|
+
attr(:sectional_view, true)
|
122
|
+
attr(:version, true)
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
@@ -0,0 +1,95 @@
|
|
1
|
+
|
2
|
+
module Nebula
|
3
|
+
module WebClient
|
4
|
+
|
5
|
+
class Viewer
|
6
|
+
ServiceHostAddress = 'http://nebula.gems8.com/__nebulaviewerv100__'
|
7
|
+
|
8
|
+
def self.html(args)
|
9
|
+
uri = args[:uri]
|
10
|
+
id, klass = selector(args)
|
11
|
+
setting = setting(args)
|
12
|
+
|
13
|
+
s = ''
|
14
|
+
s << '<iframe src="' << ServiceHostAddress << '/EmbeddedViewer'
|
15
|
+
s << setting.parameters(uri)
|
16
|
+
s << '" width="' << Encoder.str(setting.width)
|
17
|
+
s << '" height="' << Encoder.str(setting.height)
|
18
|
+
s << '" class="' << Encoder.str(klass) if !klass.blank?
|
19
|
+
s << '" id=' << Encoder.str(id) if !id.blank?
|
20
|
+
s << '" scrolling="no" frameBorder="0"></iframe>'
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.javascript(args)
|
24
|
+
uri = args[:uri]
|
25
|
+
selector = args[:selector]
|
26
|
+
|
27
|
+
s = ''
|
28
|
+
s << 'new NebulaViewer('
|
29
|
+
s << Encoder.js(selector)
|
30
|
+
s << ','
|
31
|
+
s << setting(args).json(uri)
|
32
|
+
s << ');'
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.jssection(args)
|
36
|
+
'<script type="text/javascript">' << javascript(args) << '</script>'
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.thumbnail(args)
|
40
|
+
uri = args[:uri]
|
41
|
+
id, klass = selector(args)
|
42
|
+
width = args[:width]
|
43
|
+
height = args[:height]
|
44
|
+
|
45
|
+
s = ''
|
46
|
+
s << '<img src="' << thumbnail_url(args)
|
47
|
+
s << '" width="' << Encoder.str(width)
|
48
|
+
s << '" height="' << Encoder.str(height)
|
49
|
+
s << '" id="' << Encoder.str(id) if !id.blank?
|
50
|
+
s << '" class="' << Encoder.str(klass) if !klass.blank?
|
51
|
+
s << '" />'
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.thumbnail_url(args)
|
55
|
+
uri = args[:uri]
|
56
|
+
id, klass = selector(args)
|
57
|
+
render = RenderSetting.new(args[:width], args[:height])
|
58
|
+
|
59
|
+
uri = 'image/jpeg@' << uri if !uri.index('@')
|
60
|
+
|
61
|
+
s = ''
|
62
|
+
s << ServiceHostAddress
|
63
|
+
s << '/Render?u=' << Encoder.url(uri)
|
64
|
+
s << '&c=d'
|
65
|
+
s << '&s=' << Encoder.url(render.json)
|
66
|
+
s << '×tamp=thumbnail'
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.setting(args)
|
70
|
+
setting = args[:setting] || Setting.new
|
71
|
+
setting.width = args[:width] if args[:width]
|
72
|
+
setting.height = args[:height] if args[:height]
|
73
|
+
setting
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.selector(args)
|
77
|
+
selector = args[:selecor]
|
78
|
+
if selector.blank?
|
79
|
+
return args[:id], args[:klass]
|
80
|
+
else
|
81
|
+
selector.strip!
|
82
|
+
if selector.start_with?('#')
|
83
|
+
return selector[1..-1].strip, nil
|
84
|
+
elsif selector.start_with?('.')
|
85
|
+
return nil, selector[1..-1].strip
|
86
|
+
else
|
87
|
+
return selector, nil
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
metadata
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nebula-webclient
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 8.0.10286
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Nebula Visualization Technology
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-05-13 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: The library of Nebula Viewer web client.
|
15
|
+
email: nebula@gems8.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/nebula/webclient/setting.rb
|
21
|
+
- lib/nebula/webclient/viewer.rb
|
22
|
+
- lib/nebula/webclient.rb
|
23
|
+
- lib/nebula-webclient.rb
|
24
|
+
homepage: http://nebula.gems8.com
|
25
|
+
licenses: []
|
26
|
+
post_install_message:
|
27
|
+
rdoc_options: []
|
28
|
+
require_paths:
|
29
|
+
- lib
|
30
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ! '>='
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ! '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
requirements: []
|
43
|
+
rubyforge_project:
|
44
|
+
rubygems_version: 1.8.25
|
45
|
+
signing_key:
|
46
|
+
specification_version: 3
|
47
|
+
summary: The library of Nebula Viewer web client.
|
48
|
+
test_files: []
|