diff options
-rw-r--r-- | Gemfile.lock | 14 | ||||
-rw-r--r-- | app/assets/javascripts/pokeviewer/application.js | 1 | ||||
-rw-r--r-- | app/assets/javascripts/pokeviewer/pokemon.js | 2 | ||||
-rw-r--r-- | app/assets/javascripts/pokeviewer/pokemon.js.coffee | 7 | ||||
-rw-r--r-- | app/assets/stylesheets/pokeviewer/pokemon.css.scss | 132 | ||||
-rw-r--r-- | app/controllers/pokeviewer/pokemon_controller.rb | 2 | ||||
-rw-r--r-- | app/models/pokeviewer/pokemon.rb | 19 | ||||
-rw-r--r-- | app/models/pokeviewer/trainer.rb | 27 | ||||
-rw-r--r-- | app/views/pokeviewer/pokemon/index.html.haml | 32 | ||||
-rw-r--r-- | lib/pokeviewer/engine.rb | 4 | ||||
-rw-r--r-- | pokeviewer.gemspec | 2 |
11 files changed, 228 insertions, 14 deletions
diff --git a/Gemfile.lock b/Gemfile.lock index c066b8e..3936e58 100644 --- a/Gemfile.lock +++ b/Gemfile.lock | |||
@@ -3,8 +3,10 @@ PATH | |||
3 | specs: | 3 | specs: |
4 | pokeviewer (0.1.0) | 4 | pokeviewer (0.1.0) |
5 | activerecord-diff | 5 | activerecord-diff |
6 | coffee-rails (~> 4.2) | ||
6 | enumerize | 7 | enumerize |
7 | haml | 8 | haml |
9 | jquery-rails | ||
8 | normalize-rails | 10 | normalize-rails |
9 | rails (~> 5.1.4) | 11 | rails (~> 5.1.4) |
10 | sass-rails (~> 5.0) | 12 | sass-rails (~> 5.0) |
@@ -53,10 +55,18 @@ GEM | |||
53 | tzinfo (~> 1.1) | 55 | tzinfo (~> 1.1) |
54 | arel (8.0.0) | 56 | arel (8.0.0) |
55 | builder (3.2.3) | 57 | builder (3.2.3) |
58 | coffee-rails (4.2.2) | ||
59 | coffee-script (>= 2.2.0) | ||
60 | railties (>= 4.0.0) | ||
61 | coffee-script (2.4.1) | ||
62 | coffee-script-source | ||
63 | execjs | ||
64 | coffee-script-source (1.12.2) | ||
56 | concurrent-ruby (1.0.5) | 65 | concurrent-ruby (1.0.5) |
57 | enumerize (2.1.2) | 66 | enumerize (2.1.2) |
58 | activesupport (>= 3.2) | 67 | activesupport (>= 3.2) |
59 | erubi (1.6.1) | 68 | erubi (1.6.1) |
69 | execjs (2.7.0) | ||
60 | ffi (1.9.18) | 70 | ffi (1.9.18) |
61 | globalid (0.4.0) | 71 | globalid (0.4.0) |
62 | activesupport (>= 4.2.0) | 72 | activesupport (>= 4.2.0) |
@@ -64,6 +74,10 @@ GEM | |||
64 | temple (>= 0.8.0) | 74 | temple (>= 0.8.0) |
65 | tilt | 75 | tilt |
66 | i18n (0.8.6) | 76 | i18n (0.8.6) |
77 | jquery-rails (4.3.1) | ||
78 | rails-dom-testing (>= 1, < 3) | ||
79 | railties (>= 4.2.0) | ||
80 | thor (>= 0.14, < 2.0) | ||
67 | loofah (2.0.3) | 81 | loofah (2.0.3) |
68 | nokogiri (>= 1.5.9) | 82 | nokogiri (>= 1.5.9) |
69 | mail (2.6.6) | 83 | mail (2.6.6) |
diff --git a/app/assets/javascripts/pokeviewer/application.js b/app/assets/javascripts/pokeviewer/application.js index e54c646..52d2214 100644 --- a/app/assets/javascripts/pokeviewer/application.js +++ b/app/assets/javascripts/pokeviewer/application.js | |||
@@ -10,4 +10,5 @@ | |||
10 | // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details | 10 | // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details |
11 | // about supported directives. | 11 | // about supported directives. |
12 | // | 12 | // |
13 | //= require jquery3 | ||
13 | //= require_tree . | 14 | //= require_tree . |
diff --git a/app/assets/javascripts/pokeviewer/pokemon.js b/app/assets/javascripts/pokeviewer/pokemon.js deleted file mode 100644 index dee720f..0000000 --- a/app/assets/javascripts/pokeviewer/pokemon.js +++ /dev/null | |||
@@ -1,2 +0,0 @@ | |||
1 | // Place all the behaviors and hooks related to the matching controller here. | ||
2 | // All this logic will automatically be available in application.js. | ||
diff --git a/app/assets/javascripts/pokeviewer/pokemon.js.coffee b/app/assets/javascripts/pokeviewer/pokemon.js.coffee new file mode 100644 index 0000000..f82f196 --- /dev/null +++ b/app/assets/javascripts/pokeviewer/pokemon.js.coffee | |||
@@ -0,0 +1,7 @@ | |||
1 | $ -> | ||
2 | $(".pc-pokemon").mouseover -> | ||
3 | $(this).children(".pc-data").show() | ||
4 | $(".pc-pokemon").mouseout -> | ||
5 | $(this).children(".pc-data").hide() | ||
6 | $(".pc-pokemon").mousemove (event) -> | ||
7 | $(this).children(".pc-data").offset({left: event.pageX + 16, top: event.pageY - 16}) | ||
diff --git a/app/assets/stylesheets/pokeviewer/pokemon.css.scss b/app/assets/stylesheets/pokeviewer/pokemon.css.scss index 1f4c068..6dbb6c8 100644 --- a/app/assets/stylesheets/pokeviewer/pokemon.css.scss +++ b/app/assets/stylesheets/pokeviewer/pokemon.css.scss | |||
@@ -3,6 +3,132 @@ | |||
3 | They will automatically be included in application.css. | 3 | They will automatically be included in application.css. |
4 | */ | 4 | */ |
5 | 5 | ||
6 | .trainer { | ||
7 | margin: 1em; | ||
8 | font-family: 'Power Green'; | ||
9 | width: 758px; | ||
10 | box-sizing: border-box; | ||
11 | background-color: #f7f7f7; | ||
12 | border: 1px solid #999; | ||
13 | -webkit-border-top-left-radius: 6px; | ||
14 | -webkit-border-top-right-radius: 6px; | ||
15 | -moz-border-radius-topleft: 6px; | ||
16 | -moz-border-radius-topright: 6px; | ||
17 | border-top-left-radius: 6px; | ||
18 | border-top-right-radius: 6px; | ||
19 | |||
20 | .trainer-info { | ||
21 | padding: .5em .75em .25em .75em; | ||
22 | -webkit-border-top-left-radius: 6px; | ||
23 | -webkit-border-top-right-radius: 6px; | ||
24 | -moz-border-radius-topleft: 6px; | ||
25 | -moz-border-radius-topright: 6px; | ||
26 | border-top-left-radius: 6px; | ||
27 | border-top-right-radius: 6px; | ||
28 | border-bottom: 1px solid #888; | ||
29 | |||
30 | &.ruby { | ||
31 | background-color: #D67873; | ||
32 | } | ||
33 | |||
34 | &.sapphire { | ||
35 | background-color: #445E9C; | ||
36 | } | ||
37 | |||
38 | &.firered { | ||
39 | background-color: #F5AC78; | ||
40 | } | ||
41 | |||
42 | &.leafgreen { | ||
43 | background-color: #A7DB8D; | ||
44 | } | ||
45 | |||
46 | &.emerald { | ||
47 | background-color: #4E8234; | ||
48 | } | ||
49 | |||
50 | h2 { | ||
51 | margin: 0; | ||
52 | display: inline-block; | ||
53 | font-size: 24px; | ||
54 | } | ||
55 | |||
56 | .tid { | ||
57 | display: inline-block; | ||
58 | font-size: 13px; | ||
59 | } | ||
60 | } | ||
61 | |||
62 | .pc-boxes { | ||
63 | display: flex; | ||
64 | flex-wrap: wrap; | ||
65 | |||
66 | .party { | ||
67 | margin: 0; | ||
68 | |||
69 | li { | ||
70 | display: block; | ||
71 | margin: -5px 0; | ||
72 | |||
73 | .party-icon { | ||
74 | display: inline-block; | ||
75 | vertical-align: middle; | ||
76 | } | ||
77 | |||
78 | .party-name { | ||
79 | vertical-align: sub; | ||
80 | display: inline-block; | ||
81 | margin-left: .25em; | ||
82 | } | ||
83 | |||
84 | a { | ||
85 | color: black; | ||
86 | text-decoration: none; | ||
87 | |||
88 | &:hover { | ||
89 | text-decoration: underline; | ||
90 | } | ||
91 | } | ||
92 | } | ||
93 | } | ||
94 | |||
95 | .pc-box { | ||
96 | margin: .5em; | ||
97 | padding: .5em; | ||
98 | border: 1px solid #ccc; | ||
99 | border-radius: 4px; | ||
100 | width: 236px; | ||
101 | box-sizing: border-box; | ||
102 | |||
103 | h3 { | ||
104 | margin: 0; | ||
105 | text-align: center; | ||
106 | } | ||
107 | |||
108 | .pc-contents { | ||
109 | margin: 0; | ||
110 | |||
111 | .pc-pokemon { | ||
112 | .pc-data { | ||
113 | display: none; | ||
114 | background-color: #111; | ||
115 | color: #fff; | ||
116 | z-index: 1; | ||
117 | padding: .5em; | ||
118 | box-shadow: 0px 0px 2px 1px #B3B3B3; | ||
119 | border-radius: 4px; | ||
120 | position: absolute; | ||
121 | |||
122 | .pc-data-name { | ||
123 | font-weight: bold; | ||
124 | } | ||
125 | } | ||
126 | } | ||
127 | } | ||
128 | } | ||
129 | } | ||
130 | } | ||
131 | |||
6 | .pokemon { | 132 | .pokemon { |
7 | font-family: 'Power Green'; | 133 | font-family: 'Power Green'; |
8 | display: flex; | 134 | display: flex; |
@@ -15,19 +141,19 @@ | |||
15 | .female { | 141 | .female { |
16 | color: red; | 142 | color: red; |
17 | } | 143 | } |
18 | 144 | ||
19 | .pokemon-name { | 145 | .pokemon-name { |
20 | font-weight: bold; | 146 | font-weight: bold; |
21 | } | 147 | } |
22 | 148 | ||
23 | .pokemon-ivs { | 149 | .pokemon-ivs { |
24 | margin: 0 1em; | 150 | margin: 0 1em; |
25 | 151 | ||
26 | th { | 152 | th { |
27 | text-align: center; | 153 | text-align: center; |
28 | padding-right: .5em; | 154 | padding-right: .5em; |
29 | } | 155 | } |
30 | 156 | ||
31 | td { | 157 | td { |
32 | text-align: right; | 158 | text-align: right; |
33 | } | 159 | } |
diff --git a/app/controllers/pokeviewer/pokemon_controller.rb b/app/controllers/pokeviewer/pokemon_controller.rb index aaf6586..ef421ac 100644 --- a/app/controllers/pokeviewer/pokemon_controller.rb +++ b/app/controllers/pokeviewer/pokemon_controller.rb | |||
@@ -3,7 +3,7 @@ require_dependency "pokeviewer/application_controller" | |||
3 | module Pokeviewer | 3 | module Pokeviewer |
4 | class PokemonController < ApplicationController | 4 | class PokemonController < ApplicationController |
5 | def index | 5 | def index |
6 | @pokemon = Pokemon.all | 6 | @trainers = Trainer.all |
7 | end | 7 | end |
8 | 8 | ||
9 | def show | 9 | def show |
diff --git a/app/models/pokeviewer/pokemon.rb b/app/models/pokeviewer/pokemon.rb index 3975550..d14ea87 100644 --- a/app/models/pokeviewer/pokemon.rb +++ b/app/models/pokeviewer/pokemon.rb | |||
@@ -36,7 +36,7 @@ module Pokeviewer | |||
36 | enumerize :unown_letter, in: [:a, :b, :c, :d, :e, :f, :g, :h, :i, :j, :k, | 36 | enumerize :unown_letter, in: [:a, :b, :c, :d, :e, :f, :g, :h, :i, :j, :k, |
37 | :l, :m, :n, :o, :p, :q, :r, :s, :t, :u, :v, :w, :x, :y, :z, | 37 | :l, :m, :n, :o, :p, :q, :r, :s, :t, :u, :v, :w, :x, :y, :z, |
38 | :question, :exclamation] | 38 | :question, :exclamation] |
39 | 39 | ||
40 | validates :slot, presence: true, | 40 | validates :slot, presence: true, |
41 | uniqueness: { scope: [:trainer_id, :box] }, | 41 | uniqueness: { scope: [:trainer_id, :box] }, |
42 | unless: Proc.new { |a| a.trainer.nil? } | 42 | unless: Proc.new { |a| a.trainer.nil? } |
@@ -46,7 +46,22 @@ module Pokeviewer | |||
46 | end | 46 | end |
47 | 47 | ||
48 | def icon_path | 48 | def icon_path |
49 | "pokeviewer/icons/#{species_id}.png" | 49 | form = "" |
50 | if species_id == 201 | ||
51 | # Handle Unown form | ||
52 | form = "-#{unown_letter}" | ||
53 | elsif species_id == 386 | ||
54 | # Handle Deoxys forms | ||
55 | if trainer.firered? | ||
56 | form = "-attack" | ||
57 | elsif trainer.leafgreen? | ||
58 | form = "-defense" | ||
59 | elsif trainer.emerald? | ||
60 | form = "-speed" | ||
61 | end | ||
62 | end | ||
63 | |||
64 | "pokeviewer/icons/#{species_id}#{form}.png" | ||
50 | end | 65 | end |
51 | 66 | ||
52 | def sprite_path | 67 | def sprite_path |
diff --git a/app/models/pokeviewer/trainer.rb b/app/models/pokeviewer/trainer.rb index edfbd25..d3a5b91 100644 --- a/app/models/pokeviewer/trainer.rb +++ b/app/models/pokeviewer/trainer.rb | |||
@@ -14,5 +14,32 @@ module Pokeviewer | |||
14 | validates :game, presence: true | 14 | validates :game, presence: true |
15 | enumerize :game, in: [:ruby, :sapphire, :firered, :leafgreen, :emerald], | 15 | enumerize :game, in: [:ruby, :sapphire, :firered, :leafgreen, :emerald], |
16 | predicates: true | 16 | predicates: true |
17 | |||
18 | def display_number | ||
19 | number.to_s.rjust(5, '0') | ||
20 | end | ||
21 | |||
22 | def party | ||
23 | pokemon.where(box: nil).order("slot ASC") | ||
24 | end | ||
25 | |||
26 | def boxes | ||
27 | (0..13).map { |i| box(i) } | ||
28 | end | ||
29 | |||
30 | def box(number) | ||
31 | pokes = pokemon.where(box: number).order("slot ASC").to_a | ||
32 | |||
33 | result = [] | ||
34 | (0..29).each do |i| | ||
35 | if pokes.empty? or (pokes.first.slot == i) | ||
36 | result << pokes.shift | ||
37 | else | ||
38 | result << nil | ||
39 | end | ||
40 | end | ||
41 | |||
42 | result | ||
43 | end | ||
17 | end | 44 | end |
18 | end | 45 | end |
diff --git a/app/views/pokeviewer/pokemon/index.html.haml b/app/views/pokeviewer/pokemon/index.html.haml index c613e70..69b6a68 100644 --- a/app/views/pokeviewer/pokemon/index.html.haml +++ b/app/views/pokeviewer/pokemon/index.html.haml | |||
@@ -1,5 +1,27 @@ | |||
1 | %ul | 1 | - @trainers.each do |trainer| |
2 | - @pokemon.each do |p| | 2 | .trainer |
3 | %li | 3 | .trainer-info{ class: trainer.game } |
4 | = link_to p.revisions.last.nickname, p | 4 | %h2= trainer.name |
5 | = image_tag p.icon_path | 5 | %span.tid= trainer.display_number |
6 | .pc-boxes | ||
7 | %ul.party.pc-box | ||
8 | %h3 Party | ||
9 | - trainer.party.each do |p| | ||
10 | %li | ||
11 | %span.party-icon= image_tag p.icon_path | ||
12 | %span.party-name= link_to p.revisions.last.nickname, p | ||
13 | - trainer.boxes.each_with_index do |box,bid| | ||
14 | .pc-box | ||
15 | %h3= "Box #{bid+1}" | ||
16 | %table.pc-contents | ||
17 | - box.each_slice(6) do |row| | ||
18 | %tr | ||
19 | - row.each do |p| | ||
20 | %td.pc-pokemon | ||
21 | - unless p.nil? | ||
22 | = link_to image_tag(p.icon_path), p | ||
23 | .pc-data | ||
24 | .pc-data-name= p.revisions.last.nickname | ||
25 | .pc-data-ot | ||
26 | OT/ | ||
27 | %span{ class: p.ot_gender }>= p.ot_name | ||
diff --git a/lib/pokeviewer/engine.rb b/lib/pokeviewer/engine.rb index 9733b43..06ac355 100644 --- a/lib/pokeviewer/engine.rb +++ b/lib/pokeviewer/engine.rb | |||
@@ -3,6 +3,7 @@ require "sequenced" | |||
3 | require "haml" | 3 | require "haml" |
4 | require "sass-rails" | 4 | require "sass-rails" |
5 | require "normalize-rails" | 5 | require "normalize-rails" |
6 | require "jquery-rails" | ||
6 | 7 | ||
7 | module Pokeviewer | 8 | module Pokeviewer |
8 | class Engine < ::Rails::Engine | 9 | class Engine < ::Rails::Engine |
@@ -17,7 +18,8 @@ module Pokeviewer | |||
17 | %w(pokeviewer/icons/*.png | 18 | %w(pokeviewer/icons/*.png |
18 | pokeviewer/sprites/**/*.png | 19 | pokeviewer/sprites/**/*.png |
19 | pokeviewer/sprites/**/*.gif | 20 | pokeviewer/sprites/**/*.gif |
20 | pokeviewer/types/**.gif) | 21 | pokeviewer/types/**.gif |
22 | pokeviewer/boxes/**.png) | ||
21 | end | 23 | end |
22 | end | 24 | end |
23 | end | 25 | end |
diff --git a/pokeviewer.gemspec b/pokeviewer.gemspec index 354ed05..b3408ec 100644 --- a/pokeviewer.gemspec +++ b/pokeviewer.gemspec | |||
@@ -23,6 +23,8 @@ Gem::Specification.new do |s| | |||
23 | s.add_dependency "haml" | 23 | s.add_dependency "haml" |
24 | s.add_dependency 'sass-rails', '~> 5.0' | 24 | s.add_dependency 'sass-rails', '~> 5.0' |
25 | s.add_dependency 'normalize-rails' | 25 | s.add_dependency 'normalize-rails' |
26 | s.add_dependency 'coffee-rails', '~> 4.2' | ||
27 | s.add_dependency 'jquery-rails' | ||
26 | 28 | ||
27 | s.add_development_dependency "sqlite3" | 29 | s.add_development_dependency "sqlite3" |
28 | end | 30 | end |