hyaslide 0.5.1 → 0.6.0
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 +4 -4
- data/lib/hyaslide/render_hyaslide.rb +152 -137
- data/lib/hyaslide/slide_loader.rb +30 -8
- data/lib/hyaslide/version.rb +1 -1
- data/template/app.rb +8 -4
- data/template/project/app/slide.rb +14 -6
- data/template/project/data/sample/script.md +7 -0
- data/template/project/server.rb +31 -3
- data/template/project/views/index.haml +1 -1
- data/template/project/views/script.haml +10 -0
- data/template/script.rb +24 -0
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d773246c1bf2e1e2ab74c42db9ed6dde47d41bae
|
4
|
+
data.tar.gz: 84554225d647e2cad5f9ad5b16705465cc4ad216
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e5bee3218504024156e104a044b653e9fb01af1d82b878dc8a5c100e10c368ce5967c908e5ac0e62510d435cf01c7ee4f5f5528610d23131cdb6c5d8b99a803f
|
7
|
+
data.tar.gz: 4eccfe9359b02fdd5309d57a04161a07a92b1007c0bc3c38c43ea3d71f02f26dc2734db1b6b5cf9efa39522c3e0e91913df482775fc902c48dc9593dec3c82ff
|
@@ -18,201 +18,216 @@ class String
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
module
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
@page_count = 0
|
29
|
-
clear_list_state
|
30
|
-
end
|
21
|
+
module Hyaslide
|
22
|
+
class Renderer < Redcarpet::Render::Base
|
23
|
+
def self.create(name)
|
24
|
+
Class.new(Renderer) do
|
25
|
+
def self.page_name
|
26
|
+
@page_name
|
27
|
+
end
|
31
28
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
end
|
29
|
+
def self.page_name=(name)
|
30
|
+
@page_name = name
|
31
|
+
end
|
36
32
|
|
37
|
-
|
38
|
-
|
39
|
-
|
33
|
+
def page_name
|
34
|
+
self.class.page_name
|
35
|
+
end
|
36
|
+
end.tap{|c| c.page_name = name }
|
37
|
+
end
|
40
38
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
39
|
+
def initialize
|
40
|
+
super
|
41
|
+
@enter_title_page = false
|
42
|
+
@enter_page = false
|
43
|
+
@page_count = 0
|
44
|
+
clear_list_state
|
45
|
+
end
|
46
46
|
|
47
|
-
|
48
|
-
|
47
|
+
def clear_list_state
|
48
|
+
@enter_list = false
|
49
|
+
@list_depth = 0
|
50
|
+
end
|
49
51
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
52
|
+
[
|
53
|
+
# block-level calls
|
54
|
+
:block_quote,
|
55
|
+
|
56
|
+
# span-level calls
|
57
|
+
:autolink,
|
58
|
+
:underline, :raw_html,
|
59
|
+
:triple_emphasis, :strikethrough,
|
60
|
+
:superscript, :highlight,
|
61
|
+
|
62
|
+
# footnotes
|
63
|
+
:footnotes, :footnote_def, :footnote_ref,
|
64
|
+
|
65
|
+
# low level rendering
|
66
|
+
#:entity, :normal_text
|
67
|
+
].each do |method|
|
68
|
+
define_method method do |*args|
|
69
|
+
"#{method} #{args.first}"
|
56
70
|
end
|
71
|
+
end
|
57
72
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
73
|
+
def hrule
|
74
|
+
clear_list_state
|
75
|
+
"".tap do |result|
|
76
|
+
if @enter_title_page || @enter_page
|
77
|
+
result <<
|
63
78
|
<<EOD
|
64
|
-
end
|
65
79
|
end
|
66
80
|
end
|
81
|
+
end
|
67
82
|
|
68
83
|
EOD
|
69
|
-
|
70
|
-
|
84
|
+
@enter_title_page = @enter_page = false
|
85
|
+
end
|
71
86
|
|
72
|
-
|
87
|
+
result << <<EOD
|
73
88
|
class Hyaslide::Page#{@page_count} < Hyaslide::PageBase
|
74
|
-
|
75
|
-
|
89
|
+
def content
|
90
|
+
[].tap do |children|
|
76
91
|
EOD
|
77
92
|
|
78
|
-
|
79
|
-
|
80
|
-
end
|
93
|
+
@enter_page = true
|
94
|
+
@page_count += 1
|
81
95
|
end
|
96
|
+
end
|
82
97
|
|
83
|
-
|
84
|
-
|
98
|
+
def header(text, header_level)
|
99
|
+
clear_list_state
|
85
100
|
|
86
|
-
|
87
|
-
|
88
|
-
|
101
|
+
if header_level > 3
|
102
|
+
return " children << h#{header_level}(nil, #{text.escape})\n"
|
103
|
+
end
|
89
104
|
|
90
|
-
|
91
|
-
|
92
|
-
|
105
|
+
"".tap do |result|
|
106
|
+
if @enter_title_page || @enter_page
|
107
|
+
result <<
|
93
108
|
<<EOD
|
94
|
-
end
|
95
109
|
end
|
96
110
|
end
|
111
|
+
end
|
97
112
|
|
98
113
|
EOD
|
99
|
-
|
100
|
-
|
114
|
+
@enter_title_page = @enter_page = false
|
115
|
+
end
|
101
116
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
117
|
+
if header_level == 1
|
118
|
+
@enter_title_page = true
|
119
|
+
@title = text.escape
|
120
|
+
else
|
121
|
+
@enter_page = true
|
122
|
+
end
|
108
123
|
|
109
124
|
|
110
|
-
|
125
|
+
result <<
|
111
126
|
<<EOD
|
112
127
|
class Hyaslide::Page#{@page_count} < Hyaslide::PageBase
|
113
|
-
|
114
|
-
|
115
|
-
|
128
|
+
def header
|
129
|
+
h#{header_level}(nil, #{text.escape})
|
130
|
+
end
|
116
131
|
|
117
|
-
|
118
|
-
|
132
|
+
def content
|
133
|
+
[].tap do |children|
|
119
134
|
EOD
|
120
135
|
|
121
|
-
|
122
|
-
end
|
136
|
+
@page_count += 1
|
123
137
|
end
|
138
|
+
end
|
124
139
|
|
125
|
-
|
140
|
+
def doc_footer(*args)
|
126
141
|
<<EOD
|
127
|
-
end
|
128
142
|
end
|
129
143
|
end
|
144
|
+
end
|
130
145
|
|
131
146
|
Hyaslide.page_count = #{@page_count}
|
132
147
|
Hyaslide.title = #{@title}
|
133
148
|
EOD
|
134
|
-
|
135
|
-
|
136
|
-
def list_item(item, orderd)
|
137
|
-
"".tap do |result|
|
138
|
-
if item =~ /.*\n +children << /
|
139
|
-
result << item.sub(/(.*)\n +children << /) { " li(nil, #{$1.strip.escape}),\n " }.rstrip
|
140
|
-
result << ",\n"
|
141
|
-
@enter_list = false
|
142
|
-
else
|
143
|
-
result << " li(nil, #{item.strip.escape}),\n"
|
144
|
-
end
|
145
|
-
end
|
146
|
-
end
|
149
|
+
end
|
147
150
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
result <<
|
152
|
-
result << "
|
151
|
+
def list_item(item, orderd)
|
152
|
+
"".tap do |result|
|
153
|
+
if item =~ /.*\n +children << /
|
154
|
+
result << item.sub(/(.*)\n +children << /) { " li(nil, #{$1.strip.escape}),\n " }.rstrip
|
155
|
+
result << ",\n"
|
153
156
|
@enter_list = false
|
157
|
+
else
|
158
|
+
result << " li(nil, #{item.strip.escape}),\n"
|
154
159
|
end
|
155
160
|
end
|
161
|
+
end
|
156
162
|
|
157
|
-
|
158
|
-
|
163
|
+
def list(text, ordered)
|
164
|
+
"".tap do |result|
|
165
|
+
result << " children << ul(nil,\n"
|
166
|
+
result << text.sub(/,\n\z/, "\n")
|
167
|
+
result << " )\n"
|
168
|
+
@enter_list = false
|
159
169
|
end
|
170
|
+
end
|
160
171
|
|
161
|
-
|
162
|
-
|
163
|
-
|
172
|
+
def link(link, title, content)
|
173
|
+
"<a>{href: #{link.escape}, target: \"_blank\"}, #{content.escape}</a>"
|
174
|
+
end
|
164
175
|
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
lexer = case language
|
170
|
-
when 'ruby'
|
171
|
-
Rouge::Lexers::Ruby.new
|
172
|
-
when 'javascript'
|
173
|
-
Rouge::Lexers::Javascript.new
|
174
|
-
else
|
175
|
-
Rouge::Lexers::PlainText.new
|
176
|
-
end
|
177
|
-
highlight = formatter.format(lexer.lex(code))
|
178
|
-
" children << code({ dangerouslySetInnerHTML: { __html: %q{#{highlight}} } })\n"
|
179
|
-
end
|
176
|
+
def image(link, title, alt_text)
|
177
|
+
href = "assets/#{page_name}/images/#{link}"
|
178
|
+
"<img>{className: \"#{alt_text}\", src: #{href.escape}}</img>"
|
179
|
+
end
|
180
180
|
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
181
|
+
def block_code(code, language)
|
182
|
+
clear_list_state
|
183
|
+
|
184
|
+
formatter = Rouge::Formatters::HTML.new(css_class: 'highlight', line_numbers: true)
|
185
|
+
lexer = case language
|
186
|
+
when 'ruby'
|
187
|
+
Rouge::Lexers::Ruby.new
|
188
|
+
when 'javascript'
|
189
|
+
Rouge::Lexers::Javascript.new
|
190
|
+
else
|
191
|
+
Rouge::Lexers::PlainText.new
|
192
|
+
end
|
193
|
+
highlight = formatter.format(lexer.lex(code))
|
194
|
+
" children << code({ dangerouslySetInnerHTML: { __html: %q{#{highlight}} } })\n"
|
195
|
+
end
|
185
196
|
|
186
|
-
|
187
|
-
|
188
|
-
|
197
|
+
def block_html(html)
|
198
|
+
clear_list_state
|
199
|
+
" children << code({ dangerouslySetInnerHTML: { __html: %q{#{html}} } })\n"
|
200
|
+
end
|
189
201
|
|
190
|
-
|
191
|
-
|
192
|
-
|
202
|
+
def emphasis(*args)
|
203
|
+
"# #{args}"
|
204
|
+
end
|
193
205
|
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
class_name = text[1...text.index(':')]
|
198
|
-
lines[0] = lines.first[(lines.first.index(':') + 1)...lines.first.length].lstrip
|
199
|
-
" children << p({className:\"#{class_name}\"}, #{lines.map{|l| l.escape}.join(',Hyalite.create_element(\'br\'),')})\n"
|
200
|
-
else
|
201
|
-
" children << p(nil, #{lines.map{|l| l.escape}.join(',Hyalite.create_element(\'br\'),')})\n"
|
202
|
-
end
|
203
|
-
end
|
206
|
+
def double_emphasis(*args)
|
207
|
+
"<strong>#{args.first}</strong>"
|
208
|
+
end
|
204
209
|
|
205
|
-
|
206
|
-
|
210
|
+
def paragraph(text)
|
211
|
+
lines = text.split(/ $/)
|
212
|
+
if text[0] == '%'
|
213
|
+
class_name = text[1...text.index(':')]
|
214
|
+
lines[0] = lines.first[(lines.first.index(':') + 1)...lines.first.length].lstrip
|
215
|
+
" children << p({className:\"#{class_name}\"}, #{lines.map{|l| l.escape}.join(',Hyalite.create_element(\'br\'),')})\n"
|
216
|
+
else
|
217
|
+
" children << p(nil, #{lines.map{|l| l.escape}.join(',Hyalite.create_element(\'br\'),')})\n"
|
207
218
|
end
|
219
|
+
end
|
208
220
|
|
209
|
-
|
210
|
-
|
211
|
-
|
221
|
+
def table(header, body)
|
222
|
+
"#{header}#{body}"
|
223
|
+
end
|
212
224
|
|
213
|
-
|
214
|
-
|
215
|
-
|
225
|
+
def table_row(content)
|
226
|
+
content + "\n"
|
227
|
+
end
|
228
|
+
|
229
|
+
def table_cell(content, alignment)
|
230
|
+
content + "\t"
|
216
231
|
end
|
217
232
|
end
|
218
233
|
end
|
@@ -7,7 +7,6 @@ require_relative './render_hyaslide'
|
|
7
7
|
|
8
8
|
module Hyaslide
|
9
9
|
class SlideLoader
|
10
|
-
MARKDOWN = Redcarpet::Markdown.new(Redcarpet::Render::Hyaslide, fenced_code_blocks: true)
|
11
10
|
|
12
11
|
attr_reader :slides
|
13
12
|
|
@@ -15,9 +14,11 @@ module Hyaslide
|
|
15
14
|
@slides = []
|
16
15
|
end
|
17
16
|
|
18
|
-
def
|
17
|
+
def init_slide(name)
|
19
18
|
Dir.mkdir('app/slides') unless Dir.exist?('app/slides')
|
20
|
-
Dir.mkdir(
|
19
|
+
Dir.mkdir('app/scripts') unless Dir.exist?('app/scripts')
|
20
|
+
Dir.mkdir(SlideLoader.src_path(name)) unless Dir.exist?(SlideLoader.src_path(name))
|
21
|
+
Dir.mkdir(SlideLoader.script_path(name)) unless Dir.exist?(SlideLoader.script_path(name))
|
21
22
|
|
22
23
|
File.foreach("data/#{name}/slide.md") do |line|
|
23
24
|
if line =~ /\A# (.+)/
|
@@ -26,26 +27,47 @@ module Hyaslide
|
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
30
|
+
SlideLoader.load_slide(name)
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.load_slide(name)
|
29
34
|
File.open("#{src_path(name)}/pages.rb", "w+") do |f|
|
30
35
|
data = File.read("data/#{name}/slide.md")
|
31
|
-
|
36
|
+
markdown = Redcarpet::Markdown.new(Hyaslide::Renderer.create(name), fenced_code_blocks: true)
|
37
|
+
f.write markdown.render(data)
|
38
|
+
end
|
39
|
+
|
40
|
+
if File.exist?("data/#{name}/script.md")
|
41
|
+
File.open("#{script_path(name)}/script.html", "w+") do |f|
|
42
|
+
script = File.read("data/#{name}/script.md")
|
43
|
+
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(hard_wrap: true), autolink: true, fenced_code_blocks: true)
|
44
|
+
f.write markdown.render(script)
|
45
|
+
end
|
32
46
|
end
|
33
47
|
|
34
48
|
File.open("#{src_path(name)}/app.rb", "w+") do |f|
|
35
49
|
f.write Tilt::StringTemplate.new(File.expand_path('../../../template/app.rb', __FILE__)).render(Object.new, name: name)
|
36
50
|
end
|
51
|
+
|
52
|
+
File.open("#{src_path(name)}/script.rb", "w+") do |f|
|
53
|
+
f.write Tilt::StringTemplate.new(File.expand_path('../../../template/script.rb', __FILE__)).render(Object.new, name: name)
|
54
|
+
end
|
37
55
|
end
|
38
56
|
|
39
|
-
def src_path(name)
|
57
|
+
def self.src_path(name)
|
40
58
|
"app/slides/#{name}"
|
41
59
|
end
|
42
60
|
|
61
|
+
def self.script_path(name)
|
62
|
+
"app/scripts/#{name}"
|
63
|
+
end
|
64
|
+
|
43
65
|
def add_slide(name)
|
44
|
-
|
66
|
+
init_slide(name)
|
45
67
|
|
46
68
|
EM.defer do
|
47
|
-
FSSM.monitor("data/#{
|
48
|
-
update {|base, relative| SlideLoader.load_slide(
|
69
|
+
FSSM.monitor("data/#{name}", %w(slide.md script.md)) do
|
70
|
+
update {|base, relative| Hyaslide::SlideLoader.load_slide(name) }
|
49
71
|
delete {|base, relative|}
|
50
72
|
create {|base, relative|}
|
51
73
|
end
|
data/lib/hyaslide/version.rb
CHANGED
data/template/app.rb
CHANGED
@@ -1,19 +1,23 @@
|
|
1
1
|
require 'slide'
|
2
2
|
require 'page_base'
|
3
3
|
require 'slides/#{name}/pages'
|
4
|
+
require 'browser/socket'
|
5
|
+
require 'browser/location'
|
4
6
|
|
5
7
|
Hyaslide.slide_name = '#{name}'
|
6
8
|
|
7
9
|
module App
|
8
|
-
def self.render
|
9
|
-
Hyalite.render(Hyalite.create_element(Hyaslide::Slide,
|
10
|
+
def self.render(ws)
|
11
|
+
Hyalite.render(Hyalite.create_element(Hyaslide::Slide, {ws:ws}), $document['.hyaslide'])
|
10
12
|
end
|
11
13
|
end
|
12
14
|
|
13
15
|
$document.ready do
|
16
|
+
ws = Browser::Socket.new("ws://\#{$window.location.host}/push_notification/start/slide/#{name}")
|
17
|
+
|
14
18
|
$window.on(:resize) do
|
15
|
-
App.render
|
19
|
+
App.render(ws)
|
16
20
|
end
|
17
21
|
|
18
|
-
App.render
|
22
|
+
App.render(ws)
|
19
23
|
end
|
@@ -51,7 +51,7 @@ module Hyaslide
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def initial_state
|
54
|
-
page_num = $window.location.uri.sub(
|
54
|
+
page_num = $window.location.uri.sub(/.*#([0-9]+)/, '\1').to_i
|
55
55
|
|
56
56
|
{
|
57
57
|
page_number: page_num,
|
@@ -63,7 +63,15 @@ module Hyaslide
|
|
63
63
|
|
64
64
|
def component_did_mount
|
65
65
|
$window.on(:keydown) do |evt|
|
66
|
-
handle_key_down(evt)
|
66
|
+
handle_key_down(evt.code)
|
67
|
+
end
|
68
|
+
|
69
|
+
@props[:ws].on(:message) do |msg|
|
70
|
+
(event, value) = msg.data.split(':')
|
71
|
+
case event
|
72
|
+
when 'keydown'
|
73
|
+
handle_key_down(value.to_i)
|
74
|
+
end
|
67
75
|
end
|
68
76
|
|
69
77
|
router = Router.new
|
@@ -75,8 +83,8 @@ module Hyaslide
|
|
75
83
|
$window.location.assign("/#{Hyaslide.slide_name}##{num}")
|
76
84
|
end
|
77
85
|
|
78
|
-
def handle_key_down(
|
79
|
-
case
|
86
|
+
def handle_key_down(keycode)
|
87
|
+
case keycode
|
80
88
|
when 39
|
81
89
|
page_to(@state[:page_number] + 1) if @state[:page_number] < Hyaslide.page_count
|
82
90
|
when 37
|
@@ -96,7 +104,7 @@ module Hyaslide
|
|
96
104
|
when 70
|
97
105
|
set_state(footer_visible: !@state[:footer_visible])
|
98
106
|
else
|
99
|
-
puts "keycode = #{
|
107
|
+
puts "keycode = #{keycode}"
|
100
108
|
end
|
101
109
|
end
|
102
110
|
|
@@ -119,7 +127,7 @@ module Hyaslide
|
|
119
127
|
div({
|
120
128
|
className: 'slide',
|
121
129
|
style: {zoom: zoom, top: "#{top}px", left: "#{left}px"},
|
122
|
-
onKeyDown: -> (evt) { handle_key_down(evt) }
|
130
|
+
onKeyDown: -> (evt) { handle_key_down(evt.code) }
|
123
131
|
},
|
124
132
|
pages(SLIDE_HEIGHT * zoom)
|
125
133
|
),
|
data/template/project/server.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'sinatra'
|
2
|
+
require 'sinatra-websocket'
|
2
3
|
require 'opal'
|
3
4
|
require 'opal/sprockets'
|
4
5
|
|
@@ -28,6 +29,8 @@ class Server < Sinatra::Base
|
|
28
29
|
end
|
29
30
|
|
30
31
|
set :opal, opal
|
32
|
+
set :sockets, []
|
33
|
+
set :slide_sockets, {}
|
31
34
|
enable :sessions
|
32
35
|
end
|
33
36
|
|
@@ -36,13 +39,38 @@ class Server < Sinatra::Base
|
|
36
39
|
haml :index
|
37
40
|
end
|
38
41
|
|
42
|
+
get "/favicon.ico" do
|
43
|
+
end
|
44
|
+
|
39
45
|
get '/:slide_name' do
|
40
46
|
@slide_name = params['slide_name']
|
41
47
|
haml :slide
|
42
48
|
end
|
43
49
|
|
44
|
-
get
|
50
|
+
get '/script/:slide_name' do
|
51
|
+
@slide_name = params['slide_name']
|
52
|
+
@script_html = "<h1>Test</h1>"
|
53
|
+
haml :script
|
45
54
|
end
|
46
|
-
end
|
47
|
-
|
48
55
|
|
56
|
+
get '/push_notification/start/:page/:slide_name' do
|
57
|
+
request.websocket do |ws|
|
58
|
+
ws.onopen do
|
59
|
+
if params['page'] == 'slide'
|
60
|
+
slide_name = params['slide_name']
|
61
|
+
(settings.slide_sockets[slide_name] ||= []) << ws
|
62
|
+
end
|
63
|
+
settings.sockets << ws
|
64
|
+
end
|
65
|
+
ws.onmessage do |msg|
|
66
|
+
(slide_name, evt, value) = msg.split(':')
|
67
|
+
EM.next_tick do
|
68
|
+
settings.slide_sockets[slide_name].each{|s| s.send("#{evt}:#{value}") }
|
69
|
+
end
|
70
|
+
end
|
71
|
+
ws.onclose do
|
72
|
+
settings.sockets.delete(ws)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
!!!
|
2
|
+
%html(lang="en" data-framework="hyalite")
|
3
|
+
%head
|
4
|
+
%meta{charset:"utf-8"}
|
5
|
+
%title= "Script of #{@slide_name}"
|
6
|
+
|
7
|
+
%body
|
8
|
+
%section.script
|
9
|
+
|
10
|
+
= ::Opal::Sprockets.javascript_include_tag("slides/#{@slide_name}/script", sprockets: settings.opal.sprockets, prefix: '/assets', debug: true)
|
data/template/script.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'hyalite'
|
2
|
+
require 'browser/http'
|
3
|
+
require 'browser/socket'
|
4
|
+
require 'browser/location'
|
5
|
+
|
6
|
+
class Script
|
7
|
+
include Hyalite::Component
|
8
|
+
include Hyalite::Component::ShortHand
|
9
|
+
|
10
|
+
def render
|
11
|
+
div({dangerouslySetInnerHTML: { __html: @props[:script_html]}})
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
$document.ready do
|
16
|
+
ws = Browser::Socket.new("ws://\#{$window.location.host}/push_notification/start/script/#{name}")
|
17
|
+
$window.on('keydown') do |evt|
|
18
|
+
ws.write("#{name}:keydown:\#{evt.code}")
|
19
|
+
end
|
20
|
+
|
21
|
+
response = Browser::HTTP.get!('/assets/scripts/#{name}/script.html')
|
22
|
+
Hyalite.render(Hyalite.create_element(Script, script_html: response.text), $document['.script'])
|
23
|
+
end
|
24
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hyaslide
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- youchan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: sinatra-websocket
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: thin
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -249,10 +263,13 @@ files:
|
|
249
263
|
- template/project/assets/images/turtle.png
|
250
264
|
- template/project/config.ru
|
251
265
|
- template/project/data/sample/css/custom.css
|
266
|
+
- template/project/data/sample/script.md
|
252
267
|
- template/project/data/sample/slide.md
|
253
268
|
- template/project/server.rb
|
254
269
|
- template/project/views/index.haml
|
270
|
+
- template/project/views/script.haml
|
255
271
|
- template/project/views/slide.haml
|
272
|
+
- template/script.rb
|
256
273
|
homepage: https://github.com/youchan/hyalide
|
257
274
|
licenses:
|
258
275
|
- MIT
|