about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2017-09-29 18:36:57 -0400
committerKelly Rauchenberger <fefferburbia@gmail.com>2017-09-29 18:36:57 -0400
commit6dff23b065bd933ff2f571d2264c86902173d40b (patch)
tree1b7853fce373897068d244cd2ae1487bf49cef6e
parentdc4a4d2f9a338e3d3560c514b0c97cb8bfea36b1 (diff)
downloadpokeviewer-6dff23b065bd933ff2f571d2264c86902173d40b.tar.gz
pokeviewer-6dff23b065bd933ff2f571d2264c86902173d40b.tar.bz2
pokeviewer-6dff23b065bd933ff2f571d2264c86902173d40b.zip
Added ribbons
Gift ribbons currently partially work: the correct ribbon image and name
is shown, but the ribbon description is not yet extracted from the game
and thus is just blank.
-rw-r--r--app/assets/javascripts/pokeviewer/pokemon.js.coffee12
-rw-r--r--app/assets/stylesheets/pokeviewer/pokemon.css.scss46
-rw-r--r--app/jobs/pokeviewer/extract_save_data_job.rb18
-rw-r--r--app/models/pokeviewer/revision.rb298
-rw-r--r--app/views/pokeviewer/pokemon/index.html.haml8
-rw-r--r--app/views/pokeviewer/pokemon/show.html.haml13
-rw-r--r--db/migrate/20170929211529_add_ribbons_to_revision.rb24
-rw-r--r--lib/pokeviewer/engine.rb3
-rw-r--r--test/dummy/db/schema.rb19
9 files changed, 411 insertions, 30 deletions
diff --git a/app/assets/javascripts/pokeviewer/pokemon.js.coffee b/app/assets/javascripts/pokeviewer/pokemon.js.coffee index f82f196..28a1ec1 100644 --- a/app/assets/javascripts/pokeviewer/pokemon.js.coffee +++ b/app/assets/javascripts/pokeviewer/pokemon.js.coffee
@@ -1,7 +1,7 @@
1$ -> 1$ ->
2 $(".pc-pokemon").mouseover -> 2 $(".pkv-has-hover").mouseover ->
3 $(this).children(".pc-data").show() 3 $(this).children(".pkv-hover").show()
4 $(".pc-pokemon").mouseout -> 4 $(".pkv-has-hover").mouseout ->
5 $(this).children(".pc-data").hide() 5 $(this).children(".pkv-hover").hide()
6 $(".pc-pokemon").mousemove (event) -> 6 $(".pkv-has-hover").mousemove (event) ->
7 $(this).children(".pc-data").offset({left: event.pageX + 16, top: event.pageY - 16}) 7 $(this).children(".pkv-hover").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 2a75730..f44b499 100644 --- a/app/assets/stylesheets/pokeviewer/pokemon.css.scss +++ b/app/assets/stylesheets/pokeviewer/pokemon.css.scss
@@ -152,21 +152,19 @@ body {
152 } 152 }
153} 153}
154 154
155.pc-pokemon { 155.pkv-hover {
156 .pc-data { 156 display: none;
157 display: none; 157 background-color: #111;
158 background-color: #111; 158 color: #fff;
159 color: #fff; 159 z-index: 1;
160 z-index: 1; 160 padding: .5em;
161 padding: .5em; 161 box-shadow: 0px 0px 2px 1px #B3B3B3;
162 box-shadow: 0px 0px 2px 1px #B3B3B3; 162 border-radius: 4px;
163 border-radius: 4px; 163 position: absolute;
164 position: absolute; 164
165 165 .pc-data-name {
166 .pc-data-name { 166 font-weight: bold;
167 font-weight: bold; 167 white-space: pre;
168 white-space: pre;
169 }
170 } 168 }
171} 169}
172 170
@@ -203,7 +201,6 @@ body {
203 201
204 .pd-details { 202 .pd-details {
205 color: white; 203 color: white;
206 font-size: bold;
207 padding: .25em .5em; 204 padding: .25em .5em;
208 } 205 }
209 206
@@ -355,4 +352,21 @@ body {
355 stroke-linejoin: butt; 352 stroke-linejoin: butt;
356 } 353 }
357 } 354 }
355
356 .pokemon-ribbons {
357 .pd-details {
358 background-color: #ffc8c8;
359 }
360
361 ul {
362 display: flex;
363 flex-wrap: wrap;
364 padding: 0;
365 margin: 0.5em;
366
367 li {
368 display: block;
369 }
370 }
371 }
358} 372}
diff --git a/app/jobs/pokeviewer/extract_save_data_job.rb b/app/jobs/pokeviewer/extract_save_data_job.rb index be8f64d..f7b8f8f 100644 --- a/app/jobs/pokeviewer/extract_save_data_job.rb +++ b/app/jobs/pokeviewer/extract_save_data_job.rb
@@ -109,6 +109,24 @@ module Pokeviewer
109 rev.move_4_pp_bonuses = param["moves"][3]["ppBonuses"] 109 rev.move_4_pp_bonuses = param["moves"][3]["ppBonuses"]
110 end 110 end
111 111
112 rev.cool_ribbons = param["coolRibbons"]
113 rev.beauty_ribbons = param["beautyRibbons"]
114 rev.cute_ribbons = param["cuteRibbons"]
115 rev.smart_ribbons = param["smartRibbons"]
116 rev.tough_ribbons = param["toughRibbons"]
117 rev.champion_ribbon = param.fetch "championRibbon", false
118 rev.winning_ribbon = param.fetch "winningRibbon", false
119 rev.victory_ribbon = param.fetch "victoryRibbon", false
120 rev.artist_ribbon = param.fetch "artistRibbon", false
121 rev.effort_ribbon = param.fetch "effortRibbon", false
122 rev.marine_ribbon = param.fetch "marineRibbon", false
123 rev.land_ribbon = param.fetch "landRibbon", false
124 rev.sky_ribbon = param.fetch "skyRibbon", false
125 rev.country_ribbon = param.fetch "countryRibbon", false
126 rev.national_ribbon = param.fetch "nationalRibbon", false
127 rev.earth_ribbon = param.fetch "earthRibbon", false
128 rev.world_ribbon = param.fetch "worldRibbon", false
129
112 if pk.revisions.empty? or rev.diff?(pk.revisions.last) 130 if pk.revisions.empty? or rev.diff?(pk.revisions.last)
113 rev.save! 131 rev.save!
114 end 132 end
diff --git a/app/models/pokeviewer/revision.rb b/app/models/pokeviewer/revision.rb index 44388ca..4481bf0 100644 --- a/app/models/pokeviewer/revision.rb +++ b/app/models/pokeviewer/revision.rb
@@ -8,7 +8,11 @@ module Pokeviewer
8 :special_attack, :special_defense, :speed, :coolness, :beauty, :cuteness, 8 :special_attack, :special_defense, :speed, :coolness, :beauty, :cuteness,
9 :smartness, :toughness, :sheen, :hold_item, :move_1_id, :move_2_id, 9 :smartness, :toughness, :sheen, :hold_item, :move_1_id, :move_2_id,
10 :move_3_id, :move_4_id, :move_1_pp_bonuses, :move_2_pp_bonuses, 10 :move_3_id, :move_4_id, :move_1_pp_bonuses, :move_2_pp_bonuses,
11 :move_3_pp_bonuses, :move_4_pp_bonuses 11 :move_3_pp_bonuses, :move_4_pp_bonuses, :cool_ribbons, :beauty_ribbons,
12 :cute_ribbons, :smart_ribbons, :tough_ribbons, :champion_ribbon,
13 :winning_ribbon, :victory_ribbon, :artist_ribbon, :effort_ribbon,
14 :marine_ribbon, :land_ribbon, :sky_ribbon, :country_ribbon,
15 :national_ribbon, :earth_ribbon, :world_ribbon
12 16
13 belongs_to :pokemon 17 belongs_to :pokemon
14 acts_as_sequenced scope: :pokemon_id 18 acts_as_sequenced scope: :pokemon_id
@@ -103,5 +107,297 @@ module Pokeviewer
103 greater_than_or_equal_to: 0, 107 greater_than_or_equal_to: 0,
104 less_than_or_equal_to: 3, 108 less_than_or_equal_to: 3,
105 only_integer: true} 109 only_integer: true}
110
111 validates :cool_ribbons, presence: true,
112 numericality: {
113 greater_than_or_equal_to: 0,
114 less_than_or_equal_to: 4,
115 only_integer: true}
116
117 validates :beauty_ribbons, presence: true,
118 numericality: {
119 greater_than_or_equal_to: 0,
120 less_than_or_equal_to: 4,
121 only_integer: true}
122
123 validates :cute_ribbons, presence: true,
124 numericality: {
125 greater_than_or_equal_to: 0,
126 less_than_or_equal_to: 4,
127 only_integer: true}
128
129 validates :smart_ribbons, presence: true,
130 numericality: {
131 greater_than_or_equal_to: 0,
132 less_than_or_equal_to: 4,
133 only_integer: true}
134
135 validates :tough_ribbons, presence: true,
136 numericality: {
137 greater_than_or_equal_to: 0,
138 less_than_or_equal_to: 4,
139 only_integer: true}
140
141 def ribbons
142 result = []
143
144 if cool_ribbons >= 1
145 result << {
146 filename: "cool-ribbon.png",
147 name: "Cool Ribbon",
148 description: "Cool Contest Normal Rank Winner!"
149 }
150 end
151
152 if cool_ribbons >= 2
153 result << {
154 filename: "cool-ribbon-super.png",
155 name: "Cool Ribbon Super",
156 description: "Cool Contest Super Rank Winner!"
157 }
158 end
159
160 if cool_ribbons >= 3
161 result << {
162 filename: "cool-ribbon-hyper.png",
163 name: "Cool Ribbon Hyper",
164 description: "Cool Contest Hyper Rank Winner!"
165 }
166 end
167
168 if cool_ribbons == 4
169 result << {
170 filename: "cool-ribbon-master.png",
171 name: "Cool Ribbon Master",
172 description: "Cool Contest Master Rank Winner!"
173 }
174 end
175
176 if beauty_ribbons >= 1
177 result << {
178 filename: "beauty-ribbon.png",
179 name: "Beauty Ribbon",
180 description: "Beauty Contest Normal Rank Winner!"
181 }
182 end
183
184 if beauty_ribbons >= 2
185 result << {
186 filename: "beauty-ribbon-super.png",
187 name: "Beauty Ribbon Super",
188 description: "Beauty Contest Super Rank Winner!"
189 }
190 end
191
192 if beauty_ribbons >= 3
193 result << {
194 filename: "beauty-ribbon-hyper.png",
195 name: "Beauty Ribbon Hyper",
196 description: "Beauty Contest Hyper Rank Winner!"
197 }
198 end
199
200 if beauty_ribbons == 4
201 result << {
202 filename: "beauty-ribbon-master.png",
203 name: "Beauty Ribbon Master",
204 description: "Beauty Contest Master Rank Winner!"
205 }
206 end
207
208 if cute_ribbons >= 1
209 result << {
210 filename: "cute-ribbon.png",
211 name: "Cute Ribbon",
212 description: "Cute Contest Normal Rank Winner!"
213 }
214 end
215
216 if cute_ribbons >= 2
217 result << {
218 filename: "cute-ribbon-super.png",
219 name: "Cute Ribbon Super",
220 description: "Cute Contest Super Rank Winner!"
221 }
222 end
223
224 if cute_ribbons >= 3
225 result << {
226 filename: "cute-ribbon-hyper.png",
227 name: "Cute Ribbon Hyper",
228 description: "Cute Contest Hyper Rank Winner!"
229 }
230 end
231
232 if cute_ribbons == 4
233 result << {
234 filename: "cute-ribbon-master.png",
235 name: "Cute Ribbon Master",
236 description: "Cute Contest Master Rank Winner!"
237 }
238 end
239
240 if smart_ribbons >= 1
241 result << {
242 filename: "smart-ribbon.png",
243 name: "Smart Ribbon",
244 description: "Smart Contest Normal Rank Winner!"
245 }
246 end
247
248 if smart_ribbons >= 2
249 result << {
250 filename: "smart-ribbon-super.png",
251 name: "Smart Ribbon Super",
252 description: "Smart Contest Super Rank Winner!"
253 }
254 end
255
256 if smart_ribbons >= 3
257 result << {
258 filename: "smart-ribbon-hyper.png",
259 name: "Smart Ribbon Hyper",
260 description: "Smart Contest Hyper Rank Winner!"
261 }
262 end
263
264 if smart_ribbons == 4
265 result << {
266 filename: "smart-ribbon-master.png",
267 name: "Smart Ribbon Master",
268 description: "Smart Contest Master Rank Winner!"
269 }
270 end
271
272 if tough_ribbons >= 1
273 result << {
274 filename: "tough-ribbon.png",
275 name: "Tough Ribbon",
276 description: "Tough Contest Normal Rank Winner!"
277 }
278 end
279
280 if tough_ribbons >= 2
281 result << {
282 filename: "tough-ribbon-super.png",
283 name: "Tough Ribbon Super",
284 description: "Tough Contest Super Rank Winner!"
285 }
286 end
287
288 if tough_ribbons >= 3
289 result << {
290 filename: "tough-ribbon-hyper.png",
291 name: "Tough Ribbon Hyper",
292 description: "Tough Contest Hyper Rank Winner!"
293 }
294 end
295
296 if tough_ribbons == 4
297 result << {
298 filename: "tough-ribbon-master.png",
299 name: "Tough Ribbon Master",
300 description: "Tough Contest Master Rank Winner!"
301 }
302 end
303
304 if champion_ribbon
305 result << {
306 filename: "champion-ribbon.png",
307 name: "Champion Ribbon",
308 description: "Champion-beating, Hall of Fame Member Ribbon"
309 }
310 end
311
312 if winning_ribbon
313 result << {
314 filename: "winning-ribbon.png",
315 name: "Winning Ribbon",
316 description: "Ribbon for clearing LV50 at the Battle Tower."
317 }
318 end
319
320 if victory_ribbon
321 result << {
322 filename: "victory-ribbon.png",
323 name: "Victory Ribbon",
324 description: "Won for clearing LV100 at the Battle Tower."
325 }
326 end
327
328 if artist_ribbon
329 result << {
330 filename: "artist-ribbon.png",
331 name: "Artist Ribbon",
332 description: "Ribbon for being chosen as a super sketch model."
333 }
334 end
335
336 if effort_ribbon
337 result << {
338 filename: "effort-ribbon.png",
339 name: "Effort Ribbon",
340 description: "Ribbon awarded for being a hard worker."
341 }
342 end
343
344 if marine_ribbon
345 result << {
346 filename: "marine-ribbon.png",
347 name: "Marine Ribbon",
348 description: ""
349 }
350 end
351
352 if land_ribbon
353 result << {
354 filename: "land-ribbon.png",
355 name: "Land Ribbon",
356 description: ""
357 }
358 end
359
360 if sky_ribbon
361 result << {
362 filename: "sky-ribbon.png",
363 name: "Sky Ribbon",
364 description: ""
365 }
366 end
367
368 if country_ribbon
369 result << {
370 filename: "country-ribbon.png",
371 name: "Country Ribbon",
372 description: ""
373 }
374 end
375
376 if national_ribbon
377 result << {
378 filename: "national-ribbon.png",
379 name: "National Ribbon",
380 description: ""
381 }
382 end
383
384 if earth_ribbon
385 result << {
386 filename: "earth-ribbon.png",
387 name: "Earth Ribbon",
388 description: ""
389 }
390 end
391
392 if world_ribbon
393 result << {
394 filename: "world-ribbon.png",
395 name: "World Ribbon",
396 description: ""
397 }
398 end
399
400 result
401 end
106 end 402 end
107end 403end
diff --git a/app/views/pokeviewer/pokemon/index.html.haml b/app/views/pokeviewer/pokemon/index.html.haml index 7cee27a..f16f0bc 100644 --- a/app/views/pokeviewer/pokemon/index.html.haml +++ b/app/views/pokeviewer/pokemon/index.html.haml
@@ -17,12 +17,12 @@
17 - box.contents.each_slice(6) do |row| 17 - box.contents.each_slice(6) do |row|
18 %tr 18 %tr
19 - row.each do |p| 19 - row.each do |p|
20 %td.pc-pokemon 20 %td.pc-pokemon.pkv-has-hover
21 - if p.nil? 21 - if p.nil?
22 .spacer 22 .spacer
23 - else 23 - else
24 = link_to image_tag(p.icon_path), p 24 = link_to image_tag(p.icon_path), p
25 .pc-data 25 .pc-data.pkv-hover
26 .pc-data-name= p.revisions.last.nickname 26 .pc-data-name= p.revisions.last.nickname
27 .pc-data-ot 27 .pc-data-ot
28 OT/ 28 OT/
@@ -33,9 +33,9 @@
33 %h2 Pokémon Not In Any Game 33 %h2 Pokémon Not In Any Game
34 %ul.pokemon-list 34 %ul.pokemon-list
35 - @unaccounted.each do |p| 35 - @unaccounted.each do |p|
36 %li.pc-pokemon 36 %li.pc-pokemon.pkv-has-hover
37 = link_to image_tag(p.icon_path), p 37 = link_to image_tag(p.icon_path), p
38 .pc-data 38 .pc-data.pkv-hover
39 .pc-data-name= p.revisions.last.nickname 39 .pc-data-name= p.revisions.last.nickname
40 .pc-data-ot 40 .pc-data-ot
41 OT/ 41 OT/
diff --git a/app/views/pokeviewer/pokemon/show.html.haml b/app/views/pokeviewer/pokemon/show.html.haml index 3a04914..e90148e 100644 --- a/app/views/pokeviewer/pokemon/show.html.haml +++ b/app/views/pokeviewer/pokemon/show.html.haml
@@ -76,4 +76,15 @@
76 %span.pokemon-nature<= @pokemon.nature.titlecase 76 %span.pokemon-nature<= @pokemon.nature.titlecase
77 nature. 77 nature.
78 %p= @pokemon.display_met 78 %p= @pokemon.display_met
79 = condition_diagram @pokemon.revisions.last 79 .pokemon-contest
80 .pd-details Contest Condition
81 = condition_diagram @pokemon.revisions.last
82 .pokemon-ribbons
83 .pd-details Ribbons
84 %ul
85 - @pokemon.revisions.last.ribbons.each do |ribbon|
86 %li.pkv-has-hover
87 = image_tag("pokeviewer/ribbons/#{ribbon[:filename]}")
88 .pkv-hover
89 .pc-data-name= ribbon[:name]
90 = ribbon[:description]
diff --git a/db/migrate/20170929211529_add_ribbons_to_revision.rb b/db/migrate/20170929211529_add_ribbons_to_revision.rb new file mode 100644 index 0000000..1dc93c1 --- /dev/null +++ b/db/migrate/20170929211529_add_ribbons_to_revision.rb
@@ -0,0 +1,24 @@
1class AddRibbonsToRevision < ActiveRecord::Migration[5.1]
2 def change
3 change_table :pokeviewer_revisions do |t|
4 t.integer :cool_ribbons, null: false, default: 0
5 t.integer :beauty_ribbons, null: false, default: 0
6 t.integer :cute_ribbons, null: false, default: 0
7 t.integer :smart_ribbons, null: false, default: 0
8 t.integer :tough_ribbons, null: false, default: 0
9
10 t.boolean :champion_ribbon, default: false
11 t.boolean :winning_ribbon, default: false
12 t.boolean :victory_ribbon, default: false
13 t.boolean :artist_ribbon, default: false
14 t.boolean :effort_ribbon, default: false
15 t.boolean :marine_ribbon, default: false
16 t.boolean :land_ribbon, default: false
17 t.boolean :sky_ribbon, default: false
18 t.boolean :country_ribbon, default: false
19 t.boolean :national_ribbon, default: false
20 t.boolean :earth_ribbon, default: false
21 t.boolean :world_ribbon, default: false
22 end
23 end
24end
diff --git a/lib/pokeviewer/engine.rb b/lib/pokeviewer/engine.rb index 06ac355..ab04db5 100644 --- a/lib/pokeviewer/engine.rb +++ b/lib/pokeviewer/engine.rb
@@ -19,7 +19,8 @@ module Pokeviewer
19 pokeviewer/sprites/**/*.png 19 pokeviewer/sprites/**/*.png
20 pokeviewer/sprites/**/*.gif 20 pokeviewer/sprites/**/*.gif
21 pokeviewer/types/**.gif 21 pokeviewer/types/**.gif
22 pokeviewer/boxes/**.png) 22 pokeviewer/boxes/**.png
23 pokeviewer/ribbons/**.png)
23 end 24 end
24 end 25 end
25end 26end
diff --git a/test/dummy/db/schema.rb b/test/dummy/db/schema.rb index fa3b3f7..1dfb59a 100644 --- a/test/dummy/db/schema.rb +++ b/test/dummy/db/schema.rb
@@ -10,7 +10,7 @@
10# 10#
11# It's strongly recommended that you check this file into your version control system. 11# It's strongly recommended that you check this file into your version control system.
12 12
13ActiveRecord::Schema.define(version: 20170925013807) do 13ActiveRecord::Schema.define(version: 20170929211529) do
14 14
15 create_table "pokeviewer_boxes", force: :cascade do |t| 15 create_table "pokeviewer_boxes", force: :cascade do |t|
16 t.integer "trainer_id", null: false 16 t.integer "trainer_id", null: false
@@ -91,6 +91,23 @@ ActiveRecord::Schema.define(version: 20170925013807) do
91 t.integer "move_4_pp_bonuses", default: 0, null: false 91 t.integer "move_4_pp_bonuses", default: 0, null: false
92 t.datetime "created_at", null: false 92 t.datetime "created_at", null: false
93 t.datetime "updated_at", null: false 93 t.datetime "updated_at", null: false
94 t.integer "cool_ribbons", default: 0, null: false
95 t.integer "beauty_ribbons", default: 0, null: false
96 t.integer "cute_ribbons", default: 0, null: false
97 t.integer "smart_ribbons", default: 0, null: false
98 t.integer "tough_ribbons", default: 0, null: false
99 t.boolean "champion_ribbon", default: false
100 t.boolean "winning_ribbon", default: false
101 t.boolean "victory_ribbon", default: false
102 t.boolean "artist_ribbon", default: false
103 t.boolean "effort_ribbon", default: false
104 t.boolean "marine_ribbon", default: false
105 t.boolean "land_ribbon", default: false
106 t.boolean "sky_ribbon", default: false
107 t.boolean "country_ribbon", default: false
108 t.boolean "national_ribbon", default: false
109 t.boolean "earth_ribbon", default: false
110 t.boolean "world_ribbon", default: false
94 t.index ["move_1_id"], name: "index_pokeviewer_revisions_on_move_1_id" 111 t.index ["move_1_id"], name: "index_pokeviewer_revisions_on_move_1_id"
95 t.index ["move_2_id"], name: "index_pokeviewer_revisions_on_move_2_id" 112 t.index ["move_2_id"], name: "index_pokeviewer_revisions_on_move_2_id"
96 t.index ["move_3_id"], name: "index_pokeviewer_revisions_on_move_3_id" 113 t.index ["move_3_id"], name: "index_pokeviewer_revisions_on_move_3_id"