diamonds 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +36 -0
- data/lib/diamonds.rb +74 -0
- data/lib/diamonds/Gemfile +28 -0
- data/lib/diamonds/README.md +254 -0
- data/lib/diamonds/Rakefile +5 -0
- data/lib/diamonds/apps/application.rb +15 -0
- data/lib/diamonds/apps/library.rb +321 -0
- data/lib/diamonds/apps/user_app.rb +5 -0
- data/lib/diamonds/config.ru +98 -0
- data/lib/diamonds/db/mysiteDB Back.sqlite3 +0 -0
- data/lib/diamonds/db/mysiteDB.sqlite3 +0 -0
- data/lib/diamonds/gems/auto_launch_browser.rb +22 -0
- data/lib/diamonds/gems/io.rb +146 -0
- data/lib/diamonds/gems/ruby_to_js.rb +173 -0
- data/lib/diamonds/gems/server_utils.rb +96 -0
- data/lib/diamonds/lib/opal-browser.rb +1 -0
- data/lib/diamonds/lib/opal/browser.rb +4 -0
- data/lib/diamonds/opal-browser.gemspec +21 -0
- data/lib/diamonds/opal/browser.rb +11 -0
- data/lib/diamonds/opal/browser/animation_frame.rb +111 -0
- data/lib/diamonds/opal/browser/canvas.rb +321 -0
- data/lib/diamonds/opal/browser/canvas/data.rb +63 -0
- data/lib/diamonds/opal/browser/canvas/gradient.rb +27 -0
- data/lib/diamonds/opal/browser/canvas/style.rb +113 -0
- data/lib/diamonds/opal/browser/canvas/text.rb +45 -0
- data/lib/diamonds/opal/browser/console.rb +103 -0
- data/lib/diamonds/opal/browser/cookies.rb +133 -0
- data/lib/diamonds/opal/browser/css.rb +24 -0
- data/lib/diamonds/opal/browser/css/declaration.rb +83 -0
- data/lib/diamonds/opal/browser/css/rule.rb +48 -0
- data/lib/diamonds/opal/browser/css/rule/style.rb +16 -0
- data/lib/diamonds/opal/browser/css/style_sheet.rb +83 -0
- data/lib/diamonds/opal/browser/css/unit.rb +188 -0
- data/lib/diamonds/opal/browser/database/sql.rb +194 -0
- data/lib/diamonds/opal/browser/delay.rb +78 -0
- data/lib/diamonds/opal/browser/dom.rb +84 -0
- data/lib/diamonds/opal/browser/dom/attribute.rb +26 -0
- data/lib/diamonds/opal/browser/dom/builder.rb +88 -0
- data/lib/diamonds/opal/browser/dom/cdata.rb +9 -0
- data/lib/diamonds/opal/browser/dom/character_data.rb +73 -0
- data/lib/diamonds/opal/browser/dom/comment.rb +9 -0
- data/lib/diamonds/opal/browser/dom/document.rb +149 -0
- data/lib/diamonds/opal/browser/dom/document_fragment.rb +7 -0
- data/lib/diamonds/opal/browser/dom/element.rb +474 -0
- data/lib/diamonds/opal/browser/dom/element/attributes.rb +87 -0
- data/lib/diamonds/opal/browser/dom/element/data.rb +67 -0
- data/lib/diamonds/opal/browser/dom/element/image.rb +23 -0
- data/lib/diamonds/opal/browser/dom/element/input.rb +28 -0
- data/lib/diamonds/opal/browser/dom/element/offset.rb +89 -0
- data/lib/diamonds/opal/browser/dom/element/position.rb +46 -0
- data/lib/diamonds/opal/browser/dom/element/scroll.rb +136 -0
- data/lib/diamonds/opal/browser/dom/element/select.rb +36 -0
- data/lib/diamonds/opal/browser/dom/element/size.rb +34 -0
- data/lib/diamonds/opal/browser/dom/element/template.rb +9 -0
- data/lib/diamonds/opal/browser/dom/element/textarea.rb +24 -0
- data/lib/diamonds/opal/browser/dom/mutation_observer.rb +178 -0
- data/lib/diamonds/opal/browser/dom/node.rb +464 -0
- data/lib/diamonds/opal/browser/dom/node_set.rb +110 -0
- data/lib/diamonds/opal/browser/dom/text.rb +36 -0
- data/lib/diamonds/opal/browser/effects.rb +50 -0
- data/lib/diamonds/opal/browser/event.rb +253 -0
- data/lib/diamonds/opal/browser/event/animation.rb +38 -0
- data/lib/diamonds/opal/browser/event/audio_processing.rb +33 -0
- data/lib/diamonds/opal/browser/event/base.rb +430 -0
- data/lib/diamonds/opal/browser/event/before_unload.rb +15 -0
- data/lib/diamonds/opal/browser/event/clipboard.rb +28 -0
- data/lib/diamonds/opal/browser/event/close.rb +47 -0
- data/lib/diamonds/opal/browser/event/composition.rb +50 -0
- data/lib/diamonds/opal/browser/event/custom.rb +65 -0
- data/lib/diamonds/opal/browser/event/device_light.rb +23 -0
- data/lib/diamonds/opal/browser/event/device_motion.rb +51 -0
- data/lib/diamonds/opal/browser/event/device_orientation.rb +48 -0
- data/lib/diamonds/opal/browser/event/device_proximity.rb +33 -0
- data/lib/diamonds/opal/browser/event/drag.rb +119 -0
- data/lib/diamonds/opal/browser/event/focus.rb +39 -0
- data/lib/diamonds/opal/browser/event/gamepad.rb +60 -0
- data/lib/diamonds/opal/browser/event/hash_change.rb +28 -0
- data/lib/diamonds/opal/browser/event/keyboard.rb +115 -0
- data/lib/diamonds/opal/browser/event/message.rb +70 -0
- data/lib/diamonds/opal/browser/event/mouse.rb +254 -0
- data/lib/diamonds/opal/browser/event/page_transition.rb +23 -0
- data/lib/diamonds/opal/browser/event/pop_state.rb +33 -0
- data/lib/diamonds/opal/browser/event/progress.rb +43 -0
- data/lib/diamonds/opal/browser/event/sensor.rb +15 -0
- data/lib/diamonds/opal/browser/event/storage.rb +43 -0
- data/lib/diamonds/opal/browser/event/touch.rb +60 -0
- data/lib/diamonds/opal/browser/event/ui.rb +38 -0
- data/lib/diamonds/opal/browser/event/wheel.rb +49 -0
- data/lib/diamonds/opal/browser/event_source.rb +70 -0
- data/lib/diamonds/opal/browser/history.rb +90 -0
- data/lib/diamonds/opal/browser/http.rb +169 -0
- data/lib/diamonds/opal/browser/http/binary.rb +58 -0
- data/lib/diamonds/opal/browser/http/headers.rb +109 -0
- data/lib/diamonds/opal/browser/http/request.rb +344 -0
- data/lib/diamonds/opal/browser/http/response.rb +115 -0
- data/lib/diamonds/opal/browser/immediate.rb +163 -0
- data/lib/diamonds/opal/browser/interval.rb +111 -0
- data/lib/diamonds/opal/browser/location.rb +87 -0
- data/lib/diamonds/opal/browser/navigator.rb +173 -0
- data/lib/diamonds/opal/browser/screen.rb +66 -0
- data/lib/diamonds/opal/browser/socket.rb +123 -0
- data/lib/diamonds/opal/browser/storage.rb +252 -0
- data/lib/diamonds/opal/browser/support.rb +287 -0
- data/lib/diamonds/opal/browser/utils.rb +74 -0
- data/lib/diamonds/opal/browser/version.rb +3 -0
- data/lib/diamonds/opal/browser/window.rb +120 -0
- data/lib/diamonds/opal/browser/window/scroll.rb +59 -0
- data/lib/diamonds/opal/browser/window/size.rb +59 -0
- data/lib/diamonds/opal/browser/window/view.rb +36 -0
- data/lib/diamonds/opal/opal-browser.rb +1 -0
- data/lib/diamonds/public/__OPAL_SOURCE_MAPS__/application.map +0 -0
- data/lib/diamonds/public/javascripts/font-awesome/HELP-US-OUT.txt +7 -0
- data/lib/diamonds/public/javascripts/font-awesome/css/font-awesome.css +2026 -0
- data/lib/diamonds/public/javascripts/font-awesome/css/font-awesome.min.css +1 -0
- data/lib/diamonds/public/javascripts/font-awesome/fonts/FontAwesome.otf +0 -0
- data/lib/diamonds/public/javascripts/font-awesome/fonts/fontawesome-webfont.eot +0 -0
- data/lib/diamonds/public/javascripts/font-awesome/fonts/fontawesome-webfont.svg +640 -0
- data/lib/diamonds/public/javascripts/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
- data/lib/diamonds/public/javascripts/font-awesome/fonts/fontawesome-webfont.woff +0 -0
- data/lib/diamonds/public/javascripts/font-awesome/fonts/fontawesome-webfont.woff2 +0 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/animated.less +34 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/bordered-pulled.less +25 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/core.less +12 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/fixed-width.less +6 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/font-awesome.less +17 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/icons.less +677 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/larger.less +13 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/list.less +19 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/mixins.less +26 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/path.less +15 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/rotated-flipped.less +20 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/stacked.less +20 -0
- data/lib/diamonds/public/javascripts/font-awesome/less/variables.less +688 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_animated.scss +34 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_bordered-pulled.scss +25 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_core.scss +12 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_fixed-width.scss +6 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_icons.scss +677 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_larger.scss +13 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_list.scss +19 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_mixins.scss +26 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_path.scss +15 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_rotated-flipped.scss +20 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_stacked.scss +20 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/_variables.scss +688 -0
- data/lib/diamonds/public/javascripts/font-awesome/scss/font-awesome.scss +17 -0
- data/lib/diamonds/public/javascripts/jquery-2.1.4.min.js +4 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_flat_10_000000_40x100.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-icons_222222_256x240.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-icons_228ef1_256x240.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-icons_ef8c08_256x240.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-icons_ffd27a_256x240.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/images/ui-icons_ffffff_256x240.png +0 -0
- data/lib/diamonds/public/javascripts/jquery-ui/jquery-ui.min.css +7 -0
- data/lib/diamonds/public/javascripts/jquery-ui/jquery-ui.min.js +13 -0
- data/lib/diamonds/public/javascripts/jquery-ui/jquery-ui.structure.min.css +5 -0
- data/lib/diamonds/public/javascripts/jquery-ui/jquery-ui.theme.min.css +5 -0
- data/lib/diamonds/public/javascripts/jquery.js +4 -0
- data/lib/diamonds/public/javascripts/jquery.ui.touch-punch.min.js +11 -0
- data/lib/diamonds/public/javascripts/ne pas utiliser version en retard jeezs_editor.js b/data/lib/diamonds/public/javascripts/ne pas utiliser version en retard → jeezs_editor.js +0 -0
- data/lib/diamonds/public/javascripts/standalone.js +2316 -0
- data/lib/diamonds/public/javascripts/standalone.min.js +1 -0
- data/lib/diamonds/public/javascripts/wysiwyg-editor.min.css +1 -0
- data/lib/diamonds/public/javascripts/wysiwyg-editor.min.js +1 -0
- data/lib/diamonds/public/javascripts/wysiwyg.min.js +1 -0
- data/lib/diamonds/user_app/main.rb +45 -0
- data/lib/diamonds/version.rb +3 -0
- data/lib/diamonds/views/index.erb +35 -0
- data/lib/diamonds/views/javascripts/jeezs_editor.js.erb +365 -0
- data/lib/diamonds/views/stylesheets/main.css.erb +244 -0
- metadata +490 -0
@@ -0,0 +1,96 @@
|
|
1
|
+
def time
|
2
|
+
time= Time.now
|
3
|
+
return "#{time.year}_#{time.month}_#{time.day}_#{time.hour}_#{time.min}_#{time.sec}"
|
4
|
+
|
5
|
+
end
|
6
|
+
|
7
|
+
def read_ppage (fluxToSend, current_page)
|
8
|
+
@fluxToSend=fluxToSend
|
9
|
+
get_page= read_page(:pages, :title => current_page)
|
10
|
+
if get_page.nil?
|
11
|
+
pagecontent="default message to user, when empty page found"
|
12
|
+
else
|
13
|
+
pagecontent= get_page[:content]
|
14
|
+
end
|
15
|
+
|
16
|
+
# ------ read modules need on page # ------
|
17
|
+
requested_module_name=read_modules_on_page(:pages, :title => current_page)
|
18
|
+
if !requested_module_name.nil?
|
19
|
+
module_to_insert_on_page=requested_module_name.split(",")
|
20
|
+
else
|
21
|
+
module_to_insert_on_page=["vide"]
|
22
|
+
end
|
23
|
+
modules_content=""
|
24
|
+
module_to_insert_on_page.each do |module_to_get|
|
25
|
+
modules_content=get_modules_content(:modules, :title => module_to_get)+modules_content
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
pagecontent=pagecontent+modules_content
|
30
|
+
|
31
|
+
set_page pagecontent, "page_content", "editablecontent"
|
32
|
+
end
|
33
|
+
|
34
|
+
def set_page content, id=time, css_class="standard_object"
|
35
|
+
content=(content).to_json
|
36
|
+
@fluxToSend.send content
|
37
|
+
end
|
38
|
+
|
39
|
+
def machinize(fluxToSend, current_page, message)
|
40
|
+
msg_received=case message[:action]
|
41
|
+
when "save"
|
42
|
+
content= message[:pagecontent]
|
43
|
+
pagename= message[:currentpage]
|
44
|
+
save(:pages, :title => current_page, :content => content)
|
45
|
+
when "save_list_of_modules_on_page"
|
46
|
+
content= message[:pagecontent]
|
47
|
+
pagename= message[:currentpage]
|
48
|
+
save(:pages, :title => current_page, :modules_on_page => content.join(","))
|
49
|
+
when "save_menus_on_page"
|
50
|
+
content= message[:pagecontent]
|
51
|
+
pagename= message[:currentpage]
|
52
|
+
save(:pages, :title => current_page, :menus_on_page => content)
|
53
|
+
when "save_module"
|
54
|
+
content= message[:pagecontent]
|
55
|
+
pagename= message[:currentpage]
|
56
|
+
save(:modules, :title => pagename, :content => content)
|
57
|
+
when "get_module"
|
58
|
+
content= message[:pagecontent]
|
59
|
+
module_found=get_modules_content(:modules, :title => content)
|
60
|
+
module_found="<script>$('#master_items').append('#{module_found}');$('.modules').draggable()</script>"
|
61
|
+
module_found=(module_found).to_json
|
62
|
+
@fluxToSend.send module_found
|
63
|
+
when "read_modules_list"
|
64
|
+
module_found= read_modules_list
|
65
|
+
module_found= module_found.join("</li><li class=\\'module_available\\'>")
|
66
|
+
module_found="<ul><li class=\\'module_available\\'>#{module_found}</li></ul>"
|
67
|
+
module_found="<script>$('#module_infos').html('#{module_found}')</script>"
|
68
|
+
module_found=(module_found).to_json
|
69
|
+
@fluxToSend.send module_found
|
70
|
+
when "list_modules_number"
|
71
|
+
number_found= read_modules_list.length.to_s
|
72
|
+
number_found="<script>$('#module_utils').attr('number_of_modules','#{number_found}')</script>"
|
73
|
+
number_found=(number_found).to_json
|
74
|
+
@fluxToSend.send number_found
|
75
|
+
when "read_modules_on_page"
|
76
|
+
pagename= message[:currentpage]
|
77
|
+
module_requested=read_modules_on_page(:pages, :title => pagename)
|
78
|
+
if !module_requested.nil?
|
79
|
+
module_requested=module_requested.split(",")
|
80
|
+
module_requested= module_requested.join("</li><li class=\\'module_on_page\\'>")
|
81
|
+
module_requested="<ul><li class=\\'module_on_page\\'>#{module_requested}</li></ul>"
|
82
|
+
module_requested="<script>$('#module_infos').html('#{module_requested}')</script>"
|
83
|
+
module_requested=(module_requested).to_json
|
84
|
+
@fluxToSend.send module_requested
|
85
|
+
end
|
86
|
+
else
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'opal/browser'
|
@@ -0,0 +1,21 @@
|
|
1
|
+
$LOAD_PATH << File.expand_path('../opal', __FILE__)
|
2
|
+
require 'browser/version'
|
3
|
+
|
4
|
+
Gem::Specification.new {|s|
|
5
|
+
s.name = 'opal-browser'
|
6
|
+
s.version = Browser::VERSION
|
7
|
+
s.author = 'meh.'
|
8
|
+
s.email = 'meh@schizofreni.co'
|
9
|
+
s.homepage = 'http://github.com/opal/opal-browser'
|
10
|
+
s.platform = Gem::Platform::RUBY
|
11
|
+
s.summary = 'Browser support for Opal.'
|
12
|
+
s.license = 'MIT'
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
s.require_paths = ['lib']
|
18
|
+
|
19
|
+
s.add_dependency 'opal'
|
20
|
+
s.add_dependency 'paggio'
|
21
|
+
}
|
@@ -0,0 +1,111 @@
|
|
1
|
+
module Browser
|
2
|
+
|
3
|
+
# Allows you to wrap a block to use in an animation rendering cycle.
|
4
|
+
#
|
5
|
+
# @see https://developer.mozilla.org/en/docs/Web/API/window.requestAnimationFrame
|
6
|
+
class AnimationFrame
|
7
|
+
def self.supported?
|
8
|
+
['Animation.request',
|
9
|
+
'Animation.request (Chrome)',
|
10
|
+
'Animation.request (Firefox)',
|
11
|
+
'Animation.request (Opera)',
|
12
|
+
'Animation.request (Internet Explorer)'].any? {|feature|
|
13
|
+
Browser.supports? feature
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
# Execute the block to update an animation before the next repaint.
|
18
|
+
#
|
19
|
+
# @param window [Window] the window to request the frame on
|
20
|
+
def initialize(window, &block)
|
21
|
+
@window = window
|
22
|
+
@native = window.to_n
|
23
|
+
@id = request(block)
|
24
|
+
end
|
25
|
+
|
26
|
+
if Browser.supports? 'Animation.request'
|
27
|
+
def request(block)
|
28
|
+
`#@native.requestAnimationFrame(#{block.to_n})`
|
29
|
+
end
|
30
|
+
elsif Browser.supports? 'Animation.request (Chrome)'
|
31
|
+
def request(block)
|
32
|
+
`#@native.webkitRequestAnimationFrame(#{block.to_n})`
|
33
|
+
end
|
34
|
+
elsif Browser.supports? 'Animation.request (Firefox)'
|
35
|
+
def request(block)
|
36
|
+
`#@native.mozRequestAnimationFrame(#{block.to_n})`
|
37
|
+
end
|
38
|
+
elsif Browser.supports? 'Animation.request (Opera)'
|
39
|
+
def request(block)
|
40
|
+
`#@native.oRequestAnimationFrame(#{block.to_n})`
|
41
|
+
end
|
42
|
+
elsif Browser.supports? 'Animation.request (Internet Explorer)'
|
43
|
+
def request(block)
|
44
|
+
`#@native.msRequestAnimationFrame(#{block.to_n})`
|
45
|
+
end
|
46
|
+
else
|
47
|
+
# Request the animation frame.
|
48
|
+
def request
|
49
|
+
raise NotImplementedError, 'window requestAnimationFrame unsupported'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
if Browser.supports? 'Animation.cancel'
|
54
|
+
def cancel
|
55
|
+
`#@native.cancelAnimationFrame(#@id)`
|
56
|
+
end
|
57
|
+
elsif Browser.supports? 'Animation.cancel (Chrome)'
|
58
|
+
def cancel
|
59
|
+
`#@native.webkitCancelAnimationFrame(#@id)`
|
60
|
+
end
|
61
|
+
elsif Browser.supports? 'Animation.cancelRequest (Chrome)'
|
62
|
+
def cancel
|
63
|
+
`#@native.webkitCancelRequestAnimationFrame(#@id)`
|
64
|
+
end
|
65
|
+
elsif Browser.supports? 'Animation.cancel (Firefox)'
|
66
|
+
def cancel
|
67
|
+
`#@native.mozCancelAnimationFrame(#@id)`
|
68
|
+
end
|
69
|
+
elsif Browser.supports? 'Animation.cancelRequest (Firefox)'
|
70
|
+
def cancel
|
71
|
+
`#@native.mozCancelRequestAnimationFrame(#@id)`
|
72
|
+
end
|
73
|
+
elsif Browser.supports? 'Animation.cancel (Opera)'
|
74
|
+
def cancel
|
75
|
+
`#@native.oCancelAnimationFrame(#@id)`
|
76
|
+
end
|
77
|
+
elsif Browser.supports? 'Animation.cancelRequest (Opera)'
|
78
|
+
def cancel
|
79
|
+
`#@native.oCancelRequestAnimationFrame(#@id)`
|
80
|
+
end
|
81
|
+
elsif Browser.supports? 'Animation.cancel (Internet Explorer)'
|
82
|
+
def cancel
|
83
|
+
`#@native.msCancelAnimationFrame(#@id)`
|
84
|
+
end
|
85
|
+
elsif Browser.supports? 'Animation.cancelRequest (Internet Explorer)'
|
86
|
+
def cancel
|
87
|
+
`#@native.msCancelRequestAnimationFrame(#@id)`
|
88
|
+
end
|
89
|
+
else
|
90
|
+
# Cancel the animation frame request.
|
91
|
+
def cancel
|
92
|
+
raise NotImplementedError, 'window cancelAnimationFrame unsupported'
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
module Kernel
|
100
|
+
# (see Browser::AnimationFrame.new)
|
101
|
+
def animation_frame(&block)
|
102
|
+
Browser::AnimationFrame.new($window, &block)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
class Proc
|
107
|
+
# (see Browser::AnimationFrame.new)
|
108
|
+
def animation_frame
|
109
|
+
Browser::AnimationFrame.new($window, &self)
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,321 @@
|
|
1
|
+
require 'promise'
|
2
|
+
|
3
|
+
require 'browser/canvas/style'
|
4
|
+
require 'browser/canvas/text'
|
5
|
+
require 'browser/canvas/data'
|
6
|
+
require 'browser/canvas/gradient'
|
7
|
+
|
8
|
+
module Browser
|
9
|
+
|
10
|
+
class Canvas
|
11
|
+
include Native
|
12
|
+
|
13
|
+
attr_reader :element, :style, :text
|
14
|
+
|
15
|
+
def initialize(*args)
|
16
|
+
if DOM::Element === args.first
|
17
|
+
element = args.shift
|
18
|
+
|
19
|
+
if DOM::Element::Image === element
|
20
|
+
@image = element
|
21
|
+
else
|
22
|
+
@element = element
|
23
|
+
end
|
24
|
+
elsif Canvas === args.first
|
25
|
+
@image = args.first
|
26
|
+
end
|
27
|
+
|
28
|
+
unless @element
|
29
|
+
@element = $document.create_element('canvas')
|
30
|
+
|
31
|
+
if @image
|
32
|
+
@element[:width] = @image.width
|
33
|
+
@element[:height] = @image.height
|
34
|
+
else
|
35
|
+
@element[:width] = args.shift
|
36
|
+
@element[:height] = args.shift
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
if @element.node_name != 'CANVAS'
|
41
|
+
raise ArgumentError, "the element isn't a <canvas> element"
|
42
|
+
end
|
43
|
+
|
44
|
+
super(`#{@element.to_n}.getContext('2d')`)
|
45
|
+
|
46
|
+
@style = Style.new(self)
|
47
|
+
@text = Text.new(self)
|
48
|
+
|
49
|
+
if @image
|
50
|
+
draw_image(@image)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def width
|
55
|
+
@element[:width].to_i
|
56
|
+
end
|
57
|
+
|
58
|
+
def height
|
59
|
+
@element[:height].to_i
|
60
|
+
end
|
61
|
+
|
62
|
+
def append_to(parent)
|
63
|
+
@element.append_to(parent)
|
64
|
+
end
|
65
|
+
|
66
|
+
def load(path)
|
67
|
+
promise = Promise.new
|
68
|
+
image = $document.create_element('img')
|
69
|
+
|
70
|
+
image.on :load do
|
71
|
+
promise.resolve(image)
|
72
|
+
end
|
73
|
+
|
74
|
+
image[:src] = path
|
75
|
+
|
76
|
+
promise
|
77
|
+
end
|
78
|
+
|
79
|
+
def data(x = nil, y = nil, width = nil, height = nil)
|
80
|
+
x ||= 0
|
81
|
+
y ||= 0
|
82
|
+
width ||= self.width
|
83
|
+
height ||= self.height
|
84
|
+
|
85
|
+
Data.new(self, x, y, width, height)
|
86
|
+
end
|
87
|
+
|
88
|
+
def pattern(image, type = :repeat)
|
89
|
+
`#@native.createPattern(#{DOM(image).to_n}, type)`
|
90
|
+
end
|
91
|
+
|
92
|
+
def gradient(*args, &block)
|
93
|
+
Gradient.new(self, *args, &block)
|
94
|
+
end
|
95
|
+
|
96
|
+
def clear(x = nil, y = nil, width = nil, height = nil)
|
97
|
+
x ||= 0
|
98
|
+
y ||= 0
|
99
|
+
width ||= self.width
|
100
|
+
height ||= self.height
|
101
|
+
|
102
|
+
`#@native.clearRect(x, y, width, height)`
|
103
|
+
end
|
104
|
+
|
105
|
+
def begin
|
106
|
+
`#@native.beginPath()`
|
107
|
+
|
108
|
+
self
|
109
|
+
end
|
110
|
+
|
111
|
+
def close
|
112
|
+
`#@native.closePath()`
|
113
|
+
|
114
|
+
self
|
115
|
+
end
|
116
|
+
|
117
|
+
def save
|
118
|
+
`#@native.save()`
|
119
|
+
|
120
|
+
self
|
121
|
+
end
|
122
|
+
|
123
|
+
def restore
|
124
|
+
`#@native.restore()`
|
125
|
+
|
126
|
+
self
|
127
|
+
end
|
128
|
+
|
129
|
+
def move_to(x, y)
|
130
|
+
`#@native.moveTo(x, y)`
|
131
|
+
|
132
|
+
self
|
133
|
+
end
|
134
|
+
|
135
|
+
alias move move_to
|
136
|
+
|
137
|
+
def line_to(x, y)
|
138
|
+
`#@native.lineTo(x, y)`
|
139
|
+
|
140
|
+
self
|
141
|
+
end
|
142
|
+
|
143
|
+
def line(x1, y1, x2, y2)
|
144
|
+
move_to x1, y1
|
145
|
+
line_to x2, y2
|
146
|
+
end
|
147
|
+
|
148
|
+
def rect(x, y, width, height)
|
149
|
+
`#@native.rect(x, y, width, height)`
|
150
|
+
|
151
|
+
self
|
152
|
+
end
|
153
|
+
|
154
|
+
def arc(x, y, radius, angle, clockwise = false)
|
155
|
+
`#@native.arc(x, y, radius, #{angle[:start]}, #{angle[:end]}, !clockwise)`
|
156
|
+
|
157
|
+
self
|
158
|
+
end
|
159
|
+
|
160
|
+
def quadratic_curve_to(cp1x, cp1y, x, y)
|
161
|
+
`#@native.quadraticCurveTo(cp1x, cp1y, x, y)`
|
162
|
+
|
163
|
+
self
|
164
|
+
end
|
165
|
+
|
166
|
+
def bezier_curve_to(cp1x, cp1y, cp2x, cp2y, x, y)
|
167
|
+
`#@native.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)`
|
168
|
+
|
169
|
+
self
|
170
|
+
end
|
171
|
+
|
172
|
+
def curve_to(*args)
|
173
|
+
case args.length
|
174
|
+
when 4 then quadratic_curve_to(*args)
|
175
|
+
when 6 then bezier_curve_to(*args)
|
176
|
+
|
177
|
+
else raise ArgumentError, "don't know where to dispatch"
|
178
|
+
end
|
179
|
+
|
180
|
+
self
|
181
|
+
end
|
182
|
+
|
183
|
+
def draw_image(image, *args)
|
184
|
+
if Canvas === image
|
185
|
+
image = image.element
|
186
|
+
else
|
187
|
+
image = DOM(image)
|
188
|
+
end
|
189
|
+
|
190
|
+
if args.first.is_a?(Hash)
|
191
|
+
source, destination = args
|
192
|
+
|
193
|
+
`#@native.drawImage(#{image.to_n}, #{source[:x]}, #{source[:y]}, #{source[:width]}, #{source[:height]}, #{destination[:x]}, #{destination[:y]}, #{destination[:width]}, #{destination[:height]})`
|
194
|
+
else
|
195
|
+
case args.length
|
196
|
+
when 0
|
197
|
+
`#@native.drawImage(#{image.to_n}, 0, 0)`
|
198
|
+
|
199
|
+
when 2
|
200
|
+
`#@native.drawImage(#{image.to_n}, #{args[0]}, #{args[1]})`
|
201
|
+
|
202
|
+
when 4
|
203
|
+
`#@native.drawImage(#{image.to_n}, #{args[0]}, #{args[1]}, #{args[2]}, #{args[3]})`
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
self
|
208
|
+
end
|
209
|
+
|
210
|
+
def translate(x, y, &block)
|
211
|
+
if block
|
212
|
+
save
|
213
|
+
|
214
|
+
`#@native.translate(x, y)`
|
215
|
+
|
216
|
+
instance_eval(&block)
|
217
|
+
|
218
|
+
restore
|
219
|
+
else
|
220
|
+
`#@native.translate(x, y)`
|
221
|
+
end
|
222
|
+
|
223
|
+
self
|
224
|
+
end
|
225
|
+
|
226
|
+
def rotate(angle, &block)
|
227
|
+
if block
|
228
|
+
save
|
229
|
+
|
230
|
+
`#@native.rotate(angle)`
|
231
|
+
|
232
|
+
instance_eval(&block)
|
233
|
+
|
234
|
+
restore
|
235
|
+
else
|
236
|
+
`#@native.rotate(angle)`
|
237
|
+
end
|
238
|
+
|
239
|
+
self
|
240
|
+
end
|
241
|
+
|
242
|
+
def scale(x, y, &block)
|
243
|
+
if block
|
244
|
+
save
|
245
|
+
|
246
|
+
`#@native.scale(x, y)`
|
247
|
+
|
248
|
+
instance_eval(&block)
|
249
|
+
|
250
|
+
restore
|
251
|
+
else
|
252
|
+
`#@native.scale(x, y)`
|
253
|
+
end
|
254
|
+
|
255
|
+
self
|
256
|
+
end
|
257
|
+
|
258
|
+
def transform(m11, m12, m21, m22, dx, dy, &block)
|
259
|
+
if block
|
260
|
+
save
|
261
|
+
|
262
|
+
`#@native.transform(m11, m12, m21, m22, dx, dy)`
|
263
|
+
|
264
|
+
instance_eval(&block)
|
265
|
+
|
266
|
+
restore
|
267
|
+
else
|
268
|
+
`#@native.transform(m11, m12, m21, m22, dx, dy)`
|
269
|
+
end
|
270
|
+
|
271
|
+
self
|
272
|
+
end
|
273
|
+
|
274
|
+
def path(&block)
|
275
|
+
`#@native.beginPath()`
|
276
|
+
|
277
|
+
instance_eval(&block)
|
278
|
+
|
279
|
+
`#@native.closePath()`
|
280
|
+
|
281
|
+
self
|
282
|
+
end
|
283
|
+
|
284
|
+
def fill(&block)
|
285
|
+
path(&block) if block
|
286
|
+
|
287
|
+
`#@native.fill()`
|
288
|
+
|
289
|
+
self
|
290
|
+
end
|
291
|
+
|
292
|
+
def stroke(&block)
|
293
|
+
path(&block) if block
|
294
|
+
|
295
|
+
`#@native.stroke()`
|
296
|
+
|
297
|
+
self
|
298
|
+
end
|
299
|
+
|
300
|
+
def clip(&block)
|
301
|
+
path(&block) if block
|
302
|
+
|
303
|
+
`#@native.clip()`
|
304
|
+
|
305
|
+
self
|
306
|
+
end
|
307
|
+
|
308
|
+
def point_in_path?(x, y)
|
309
|
+
`#@native.isPointInPath(x, y)`
|
310
|
+
end
|
311
|
+
|
312
|
+
def to_data(type = undefined)
|
313
|
+
`#{@element.to_n}.toDataUrl(type)`
|
314
|
+
end
|
315
|
+
end
|
316
|
+
|
317
|
+
Browser::DOM::Builder.for Canvas do |b, item|
|
318
|
+
item.element
|
319
|
+
end
|
320
|
+
|
321
|
+
end
|