diff --git a/Gemfile b/Gemfile index 88c5540..88eb46c 100644 --- a/Gemfile +++ b/Gemfile @@ -9,6 +9,7 @@ gem "salama" , path: "../salama" gem "salama-reader" , path: "../salama-reader" gem "salama-arm" , path: "../salama-arm" gem "salama-object-file" , path: "../salama-object-file" +gem "susy" group :development do gem "minitest" diff --git a/Gemfile.lock b/Gemfile.lock index f2d95c1..e46bfe4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -50,9 +50,12 @@ GEM rack (1.6.4) react-source (0.13.3) rubygems-tasks (0.2.4) + sass (3.4.16) sourcemap (0.1.1) sprockets (3.2.0) rack (~> 1.0) + susy (2.2.5) + sass (>= 3.3.0, < 3.5) tilt (2.0.1) PLATFORMS @@ -69,6 +72,7 @@ DEPENDENCIES salama-arm! salama-object-file! salama-reader! + susy BUNDLED WITH 1.10.5 diff --git a/app/block_view.rb b/app/block_view.rb index bae7d4f..0d27c42 100644 --- a/app/block_view.rb +++ b/app/block_view.rb @@ -30,19 +30,14 @@ class BlockView def render return unless block - div.row do - div.col_md_5 do - SourceView :source => interpreter.instruction.source - end - div.col_md_5 do - h6 { "Block: #{block_name}"} - block.each do |code| - InstructionView :interpreter => interpreter , :instruction => code - end - end - div.col_md_2 do + div.block_view do + div do + h4 {"Block: #{block_name}"} button.btn.btn_default { "next" }.on(:click) { interpreter.tick } end + block.each do |code| + InstructionView :interpreter => interpreter , :instruction => code + end end end end diff --git a/app/class_view.rb b/app/class_view.rb index b596c8a..dd64bde 100644 --- a/app/class_view.rb +++ b/app/class_view.rb @@ -4,9 +4,10 @@ class ClassView required_param :classes, type: {} def render - div.row do + div.classes do + h4 { "Classes" } classes.each do |name , clas| - div.row do + div.one_class do clas.name end end diff --git a/app/debugger.rb b/app/debugger.rb index e0a3c93..9526659 100644 --- a/app/debugger.rb +++ b/app/debugger.rb @@ -17,27 +17,16 @@ class Debugger interpreter.start machine.init end def render - div.container do - div.row do - div.col_md_1 do - ClassView classes: machine.space.classes - end - div.col_md_11 do - div.row do - div.col_md_4 do - "Future one" - end - div.col_md_8 do - BlockView interpreter: interpreter - end - end - div.row do - interpreter.registers.each do |r , oid| - div.col_md_1 do - RegisterView interpreter: interpreter , register: r - end - end - end + div.debugger_view do + ClassView classes: machine.space.classes + div.file_view do + "Future Source code view" + end + SourceView :interpreter => interpreter + BlockView :interpreter => interpreter + div.registers_view do + interpreter.registers.each do |r , oid| + RegisterView interpreter: interpreter , register: r end end end diff --git a/app/instruction_view.rb b/app/instruction_view.rb index a9da7c8..5e056f6 100644 --- a/app/instruction_view.rb +++ b/app/instruction_view.rb @@ -13,7 +13,7 @@ class InstructionView end def check_active i - active! instruction == i ? "active" : "" + active! instruction == i ? "bright" : "" end def instruction_changed old , ins @@ -21,9 +21,8 @@ class InstructionView end def render - return unless instruction div :class => active do - instruction.to_s + instruction.to_s if instruction end end end diff --git a/app/register_view.rb b/app/register_view.rb index b3d0234..d5774a0 100644 --- a/app/register_view.rb +++ b/app/register_view.rb @@ -20,12 +20,12 @@ class RegisterView end def calc_fields - puts "My id #{objects_id} , #{objects_id.class}" + #puts "My id #{objects_id} , #{objects_id.class}" object = Virtual.machine.objects[objects_id] if object and ! object.is_a?(String) has_fields = [] clazz = object.class.name.split("::").last - puts "found #{clazz}" + #puts "found #{clazz}" has_fields << clazz object.get_instance_variables.each do |variable| f = object.get_instance_variable(variable) @@ -36,8 +36,8 @@ class RegisterView end def render - div.row do - div.col_md_12 do + div.register_view do + div do objects_id.to_s end fields.each do |attribute| diff --git a/app/source_view.rb b/app/source_view.rb index 8ec5fd4..b288ebe 100644 --- a/app/source_view.rb +++ b/app/source_view.rb @@ -2,26 +2,33 @@ class SourceView include React::Component - required_param :source + required_param :interpreter define_state :sources => [] - before_update do - text = source_text(source) + before_mount do + interpreter.register_event(:instruction_changed, self) + instruction_changed nil , interpreter.instruction + end + + def instruction_changed old , ins + text = source_text(ins.source) return if sources.last == text sources << text sources.shift if sources.length > 5 + sources! sources end + def render - div.row do - "Virtual Machine Instruction".br + div.source_view do + h4 {"Virtual Machine Instruction"} sources.each do |s| s.br end end end - def source_text + def source_text source if source.is_a? Virtual::Instruction return source.class.name else diff --git a/app/styles.scss b/app/styles.scss new file mode 100644 index 0000000..ea54392 --- /dev/null +++ b/app/styles.scss @@ -0,0 +1,30 @@ +@import "susy"; + +.debugger-view { @include container(80em); } + +.classes { @include span(2 of 12); } + +.file-view { @include span(3 of 12); } + +.source-view { @include span(3 of 12); } + +.block-view { + @include span(4 of 12 at 9); + height: 200px; +} + +.registers-view { + @include span(10 of 12 at 3); +} + +.register-view { + @include span(1 of 13); +} + +.half { + @include span(5 of 12); +} + +.bright { + background-color: orange ; +} diff --git a/config.ru b/config.ru index 0bf4e13..8392656 100644 --- a/config.ru +++ b/config.ru @@ -6,6 +6,7 @@ Opal.use_gem "salama" Opal.use_gem "salama-arm" require "tilt/erb" +require "susy" require "json" require "react/source" diff --git a/index.html.erb b/index.html.erb index 0157a71..45a3578 100644 --- a/index.html.erb +++ b/index.html.erb @@ -1,8 +1,7 @@ Salama Debugger - - + <%= javascript_include_tag 'main' %> diff --git a/static/main.css b/static/main.css deleted file mode 100644 index 7afefea..0000000 --- a/static/main.css +++ /dev/null @@ -1,3 +0,0 @@ -.active { - background-color: orange ; -}