first step of switch to opal

This commit is contained in:
Torsten Ruger 2015-07-14 14:08:28 +03:00
parent 758ab419d5
commit 9af1937a71
9 changed files with 47 additions and 169 deletions

24
Gemfile
View File

@ -1,19 +1,7 @@
source 'https://rubygems.org' source 'https://rubygems.org'
gem 'volt', :path => "../volt"
# volt uses mongo as the default data store. gem 'opal-browser'
gem 'volt-mongo', '~> 0.1.0'
# The following gem's are optional for themeing
# Twitter bootstrap
gem 'volt-bootstrap', '~> 0.0.10'
# Asset compilation gems, they will be required when needed.
gem 'csso-rails', '~> 0.3.4', require: false
gem 'uglifier', '>= 2.4.0', require: false
gem 'opal-pixi' , :path => "../opal-pixi"
#gem "salama" , "0.2" , :path => "../salama" #gem "salama" , "0.2" , :path => "../salama"
@ -32,13 +20,3 @@ group :test do
gem 'chromedriver2-helper', '~> 0.0.8' gem 'chromedriver2-helper', '~> 0.0.8'
gem 'poltergeist', '~> 1.5.0' gem 'poltergeist', '~> 1.5.0'
end end
# Server for MRI
platform :mri, :mingw do
# The implementation of ReadWriteLock in Volt uses concurrent ruby and ext helps performance.
gem 'concurrent-ruby-ext', '~> 0.8.0'
# Thin is the default volt server, Puma is also supported
gem 'thin', '~> 1.6.0'
gem 'bson_ext', '~> 1.9.0'
end

View File

@ -1,9 +1,3 @@
PATH
remote: ../opal-pixi
specs:
opal-pixi (0.1.0)
opal (~> 0.7.0)
PATH PATH
remote: ../parslet remote: ../parslet
specs: specs:
@ -27,30 +21,9 @@ PATH
salama-reader (0.2.0) salama-reader (0.2.0)
parslet (~> 1.7.0) parslet (~> 1.7.0)
PATH
remote: ../volt
specs:
volt (0.9.4)
bcrypt (~> 3.1.9)
bundler (>= 1.5)
concurrent-ruby (= 0.8.0)
configurations (~> 2.0.0.pre)
faye-websocket (~> 0.9.2)
listen (~> 3.0.1)
opal (~> 0.7.2)
pry (~> 0.10.1)
rack (~> 1.5.0)
sass (~> 3.2.5)
sprockets-sass (~> 1.0.0)
thor (~> 0.19.0)
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
bcrypt (3.1.10)
bson (1.9.2)
bson_ext (1.9.2)
bson (~> 1.9.2)
capybara (2.4.4) capybara (2.4.4)
mime-types (>= 1.16) mime-types (>= 1.16)
nokogiri (>= 1.3.3) nokogiri (>= 1.3.3)
@ -62,58 +35,33 @@ GEM
chromedriver2-helper (0.0.8) chromedriver2-helper (0.0.8)
nokogiri nokogiri
cliver (0.3.2) cliver (0.3.2)
coderay (1.1.0)
concurrent-ruby (0.8.0)
ref (~> 1.0, >= 1.0.5)
concurrent-ruby-ext (0.8.0)
concurrent-ruby (~> 0.8.0)
configurations (2.0.0)
csso-rails (0.3.4)
execjs (>= 1)
daemons (1.2.3)
diff-lcs (1.2.5) diff-lcs (1.2.5)
eventmachine (1.0.7)
execjs (2.5.2)
faye-websocket (0.9.2)
eventmachine (>= 0.12.0)
websocket-driver (>= 0.5.1)
ffi (1.9.10) ffi (1.9.10)
hike (1.2.3) hike (1.2.3)
json (1.8.3)
listen (3.0.2)
rb-fsevent (>= 0.9.3)
rb-inotify (>= 0.9)
method_source (0.8.2)
mime-types (2.6.1) mime-types (2.6.1)
mini_portile (0.6.2) mini_portile (0.6.2)
mongo (1.9.2)
bson (~> 1.9.2)
multi_json (1.11.2) multi_json (1.11.2)
nokogiri (1.6.6.2) nokogiri (1.6.6.2)
mini_portile (~> 0.6.0) mini_portile (~> 0.6.0)
opal (0.7.2) opal (0.8.0.rc3)
hike (~> 1.2) hike (~> 1.2)
sourcemap (~> 0.1.0) sourcemap (~> 0.1.0)
sprockets (>= 2.2.3, < 3.0.0) sprockets (~> 3.1)
tilt (~> 1.4) tilt (>= 1.4)
opal-browser (0.1.0.beta1)
opal (>= 0.5.5)
paggio
opal-rspec (0.4.3) opal-rspec (0.4.3)
opal (>= 0.7.0, < 0.9) opal (>= 0.7.0, < 0.9)
paggio (0.2.4)
poltergeist (1.5.1) poltergeist (1.5.1)
capybara (~> 2.1) capybara (~> 2.1)
cliver (~> 0.3.1) cliver (~> 0.3.1)
multi_json (~> 1.0) multi_json (~> 1.0)
websocket-driver (>= 0.2.0) websocket-driver (>= 0.2.0)
pry (0.10.1) rack (1.6.4)
coderay (~> 1.1.0)
method_source (~> 0.8.1)
slop (~> 3.4)
rack (1.5.5)
rack-test (0.6.3) rack-test (0.6.3)
rack (>= 1.0) rack (>= 1.0)
rb-fsevent (0.9.5)
rb-inotify (0.9.5)
ffi (>= 0.5.0)
ref (1.0.5)
rspec (3.2.0) rspec (3.2.0)
rspec-core (~> 3.2.0) rspec-core (~> 3.2.0)
rspec-expectations (~> 3.2.0) rspec-expectations (~> 3.2.0)
@ -128,34 +76,15 @@ GEM
rspec-support (~> 3.2.0) rspec-support (~> 3.2.0)
rspec-support (3.2.2) rspec-support (3.2.2)
rubyzip (1.1.7) rubyzip (1.1.7)
sass (3.2.19)
selenium-webdriver (2.43.0) selenium-webdriver (2.43.0)
childprocess (~> 0.5) childprocess (~> 0.5)
multi_json (~> 1.0) multi_json (~> 1.0)
rubyzip (~> 1.0) rubyzip (~> 1.0)
websocket (~> 1.0) websocket (~> 1.0)
slop (3.6.0)
sourcemap (0.1.1) sourcemap (0.1.1)
sprockets (2.12.4) sprockets (3.2.0)
hike (~> 1.2)
multi_json (~> 1.0)
rack (~> 1.0) rack (~> 1.0)
tilt (~> 1.1, != 1.3.0) tilt (2.0.1)
sprockets-sass (1.0.3)
sprockets (~> 2.0)
tilt (~> 1.1)
thin (1.6.3)
daemons (~> 1.0, >= 1.0.9)
eventmachine (~> 1.0)
rack (~> 1.0)
thor (0.19.1)
tilt (1.4.1)
uglifier (2.7.1)
execjs (>= 0.3.0)
json (>= 1.8.0)
volt-bootstrap (0.0.10)
volt-mongo (0.1.1)
mongo (~> 1.9.0)
websocket (1.2.2) websocket (1.2.2)
websocket-driver (0.5.4) websocket-driver (0.5.4)
websocket-extensions (>= 0.1.0) websocket-extensions (>= 0.1.0)
@ -167,12 +96,9 @@ PLATFORMS
ruby ruby
DEPENDENCIES DEPENDENCIES
bson_ext (~> 1.9.0)
capybara (~> 2.4.2) capybara (~> 2.4.2)
chromedriver2-helper (~> 0.0.8) chromedriver2-helper (~> 0.0.8)
concurrent-ruby-ext (~> 0.8.0) opal-browser
csso-rails (~> 0.3.4)
opal-pixi!
opal-rspec (~> 0.4.2) opal-rspec (~> 0.4.2)
parslet! parslet!
poltergeist (~> 1.5.0) poltergeist (~> 1.5.0)
@ -181,8 +107,3 @@ DEPENDENCIES
salama-object-file! salama-object-file!
salama-reader! salama-reader!
selenium-webdriver (~> 2.43.0) selenium-webdriver (~> 2.43.0)
thin (~> 1.6.0)
uglifier (>= 2.4.0)
volt!
volt-bootstrap (~> 0.0.10)
volt-mongo (~> 0.1.0)

View File

@ -1,36 +0,0 @@
# By default Volt generates this controller for your Main component
require "salama"
if RUBY_PLATFORM == 'opal'
require "main/lib/main_view"
end
Virtual::Machine.boot
module Main
class MainController < Volt::ModelController
def index
MainView.new()
end
def about
end
private
# The main template contains a #template binding that shows another
# template. This is the path to that template. It may change based
# on the params._component, params._controller, and params._action values.
def main_path
"#{params._component || 'main'}/#{params._controller || 'main'}/#{params._action || 'index'}"
end
# Determine if the current nav component is the active one by looking
# at the first part of the url against the href attribute.
def active_tab?
url.path.split('/')[1] == attrs.href.split('/')[1]
end
end
end

View File

@ -1,4 +1,11 @@
# Run via rack server require 'bundler'
require 'bundler/setup' Bundler.require
require 'volt/server'
run Volt::Server.new.app require "opal"
Opal.use_gem("salama")
run Opal::Server.new { |s|
s.main = 'debugger'
s.append_path 'lib'
s.debug = true
}

8
lib/debugger.rb Normal file
View File

@ -0,0 +1,8 @@
require "opal"
require "main_view"
Virtual::Machine.boot
MainView.new()

View File

@ -1,4 +1,4 @@
require 'opal/pixi' require 'browser'
require 'native' require 'native'
require "salama" require "salama"
@ -9,18 +9,18 @@ require_relative "space_view"
class MainView class MainView
def initialize def initialize
@container = PIXI::Container.new @canvas = Browser::Canvas.new
height = `window.innerHeight` height = `window.innerHeight`
width = `window.innerWidth` width = `window.innerWidth`
renderer = PIXI::WebGLRenderer.new( width - 100 , height - 100, {"backgroundColor" => 0xFFFFFF})
body = Native(`window.document.body`) body = Native(`window.document.body`)
# bit of a hack as it assumes index's structure # bit of a hack as it assumes index's structure
html_con = body.firstElementChild html_con = body.firstElementChild
html_con.insertBefore renderer.view , html_con.lastElementChild html_con.insertBefore renderer.view , html_con.lastElementChild
registers = RegisterView.new(height - 150) registers = RegisterView.new(height - 150)
@container.add_child registers @canvas.add_child registers
ParseTask.parse(1).then do |result| ParseTask.parse(1).then do |result|
is = Ast::Expression.from_basic(result) is = Ast::Expression.from_basic(result)

View File

@ -5,8 +5,8 @@ class ObjectView
def initialize o def initialize o
super() super()
self.text = PIXI::Text.new("no") self.text = Text.new("no")
self.text.position = PIXI::Point.new( rand(1000) , rand(550)) self.text.position = Point.new( rand(1000) , rand(550))
puts "NO O " unless o puts "NO O " unless o
self.object = o self.object = o
self.text.text = short self.text.text = short

View File

@ -1,5 +1,5 @@
class RegisterView < PIXI::Container class RegisterView
@@register_names = (0..8).collect {|i| "r#{i}"} @@register_names = (0..8).collect {|i| "r#{i}"}
@ -8,8 +8,8 @@ class RegisterView < PIXI::Container
@registers = {} @registers = {}
x = 0 x = 0
@@register_names.each do |name| @@register_names.each do |name|
reg = PIXI::Text.new( name ) reg = Text.new( name )
reg.position = PIXI::Point.new x , at_y reg.position = Point.new x , at_y
x += reg.width + 20 x += reg.width + 20
@registers[name] = reg @registers[name] = reg
self.add_child reg self.add_child reg

View File

@ -1,7 +1,7 @@
require "math" require "math"
PIXI::Point.class_eval do Point.class_eval do
alias_native :y= alias_native :y=
def add point def add point
@ -21,7 +21,7 @@ PIXI::Point.class_eval do
end end
end end
class SpaceView < PIXI::Graphics class SpaceView < Graphics
include Sof::Util include Sof::Util
def initialize def initialize
@ -77,7 +77,7 @@ class SpaceView < PIXI::Graphics
f = 0.01 if f < 0.01 f = 0.01 if f < 0.01
f = f / 100 f = f / 100
#puts "force #{f}" #puts "force #{f}"
PIXI::Point.new( dir_x / f , dir_y / f) Point.new( dir_x / f , dir_y / f)
end end
def update_positions def update_positions
@ -91,10 +91,10 @@ class SpaceView < PIXI::Graphics
view.position.add force( view.position , v.position ) view.position.add force( view.position , v.position )
end end
offset = 0.0 offset = 0.0
view.position.add force( view.position , PIXI::Point.new(view.position.x , -offset) ) view.position.add force( view.position , Point.new(view.position.x , -offset) )
view.position.add force( view.position , PIXI::Point.new(-offset , view.position.y) ) view.position.add force( view.position , Point.new(-offset , view.position.y) )
view.position.add force( view.position , PIXI::Point.new(view.position.x , 550 + offset) ) view.position.add force( view.position , Point.new(view.position.x , 550 + offset) )
view.position.add force( view.position , PIXI::Point.new(1000 + offset , view.position.y) ) view.position.add force( view.position , Point.new(1000 + offset , view.position.y) )
end end
end end