Commit 0cbac7fa authored by 神楽坂玲奈's avatar 神楽坂玲奈

drop upload

parent 4b0eb0c4
...@@ -45,7 +45,7 @@ class Card extends Spine.Model ...@@ -45,7 +45,7 @@ class Card extends Spine.Model
@fetch_by_name: (name, callback)-> @fetch_by_name: (name, callback)->
$.getJSON "#{@locale_url}&q=#{JSON.stringify {name: {$regex: name.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1'), $options: 'i'}}}", (langs) => $.getJSON "#{@locale_url}?q=#{JSON.stringify {name: {$regex: name.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1'), $options: 'i'}}}", (langs) =>
result = [] result = []
cards_id = [] cards_id = []
for lang in langs for lang in langs
...@@ -54,7 +54,7 @@ class Card extends Spine.Model ...@@ -54,7 +54,7 @@ class Card extends Spine.Model
catch e catch e
cards_id.push lang._id cards_id.push lang._id
if cards_id.length if cards_id.length
$.getJSON "#{@url}&q=#{JSON.stringify({_id:{ $in: cards_id}})}", (cards) => $.getJSON "#{@url}?q=#{JSON.stringify({_id:{ $in: cards_id}})}", (cards) =>
@load cards, langs @load cards, langs
for card in cards for card in cards
result.push Card.find card._id result.push Card.find card._id
...@@ -65,7 +65,7 @@ class Card extends Spine.Model ...@@ -65,7 +65,7 @@ class Card extends Spine.Model
@fetch_by_id: (cards_id, callback)-> @fetch_by_id: (cards_id, callback)->
cards_id = (card_id for card_id in cards_id when !Card.exists(card_id)) cards_id = (card_id for card_id in cards_id when !Card.exists(card_id))
if cards_id.length if cards_id.length
$.when($.getJSON("#{@url}&q=#{JSON.stringify({_id: {$in: cards_id}})}"), $.getJSON("#{@locale_url}&q=#{JSON.stringify({_id:{ $in: cards_id}})}")).done (cards, langs)=> $.when($.getJSON("#{@url}?q=#{JSON.stringify({_id: {$in: cards_id}})}"), $.getJSON("#{@locale_url}?q=#{JSON.stringify({_id:{ $in: cards_id}})}")).done (cards, langs)=>
@load(cards[0], langs[0]) @load(cards[0], langs[0])
callback() callback()
else else
...@@ -84,15 +84,58 @@ class Deck extends Spine.Model ...@@ -84,15 +84,58 @@ class Deck extends Spine.Model
@key: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789*-=" @key: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789*-="
encode: -> encode: ->
result = '' result = ''
for card_usage in @main.concat @extra, @side for card_usage in @card_usages().all()
c = card_usage.side << 29 | card_usage.count << 27 | card_usage.card_id c = card_usage.side << 29 | card_usage.count << 27 | card_usage.card_id
for i in [4..0] for i in [4..0]
result += @key.charAt((c >> i * 6) & 0x3F) result += Deck.key.charAt((c >> i * 6) & 0x3F)
result result
sort: ->
@_main = []
@_side = []
@_extra = []
@_main_count = 0
@_side_count = 0
@_extra_count = 0
@_category_count = {}
for category in Card.categories
@_category_count[category] = 0
for card_usage in @card_usages().all()
card = card_usage.card()
if card_usage.side
@_side.push card_usage
@_side_count += card_usage.count
else if (card_type for card_type in card.card_type when card_type in Card.card_types_extra).length
@_extra.push card_usage
@_extra_count += card_usage.count
else
@_main.push card_usage
@_main_count += card_usage.count
@_category_count[(category for category in card.card_type when category in Card.categories).pop()] += card_usage.count
main: ->
@sort() if !@_main?
@_main
side: ->
@sort() if !@_side?
@_side
extra: ->
@sort() if !@_extra?
@_extra
main_count: ->
@sort() if !@_main_count?
@_main_count
side_count: ->
@sort() if !@_side_count
@_side_count
extra_count: ->
@sort() if !@_extra_count
@_extra_count
category_count: ->
@sort() if !@_category_count?
@_category_count
@decode: (str, name)-> @decode: (str, name)->
card_usages = []
result = new Deck(name: name) result = new Deck(name: name)
result.save() result.save()
card_usages = []
for i in [0...str.length] by 5 for i in [0...str.length] by 5
decoded = 0 decoded = 0
for char in str.substr(i, 5) for char in str.substr(i, 5)
...@@ -103,25 +146,64 @@ class Deck extends Spine.Model ...@@ -103,25 +146,64 @@ class Deck extends Spine.Model
card_usages.push {id: "#{result.cid}_#{side}_#{card_id}", card_id: card_id, side: side, count: count} card_usages.push {id: "#{result.cid}_#{side}_#{card_id}", card_id: card_id, side: side, count: count}
result.card_usages card_usages result.card_usages card_usages
result result
@load: (str, name)->
result = new Deck(name: name)
result.save()
card_usages = []
lines = str.split("\n")
side = false
last_id = 0
count = 0
for line in lines
if !line or line.charAt(0) == '#'
continue
else if line.substr(0,5) == '!side'
card_usages.push {card_id: last_id, side: side, count: count} if last_id
side = true
last_id = null
else
card_id = parseInt(line)
if card_id
if card_id == last_id
count++
else
card_usages.push {id: "#{result.cid}_#{side}_#{card_id}", card_id: last_id, side: side, count: count} if last_id
last_id = card_id
count = 1
else
throw '无效卡组'
card_usages.push {id: "#{result.cid}_#{side}_#{card_id}", card_id: last_id, side: side, count: count} if last_id
result.card_usages card_usages
result
class CardsController extends Spine.Controller location: ->
events: "/decks/new?name=#{@name}&cards=#{@encode()}"
'mouseover .card_search_result': 'show', location_ydk: ->
'click .card_search_result': 'add', "/decks/new.ydk?name=#{@name}&cards=#{@encode()}"
'contextmenu .card_search_result': 'minus' url: ->
add: (e)-> "http://my-card.in" + @location()
Deck.current.add_card($(this).tmplItem().data) url_ydk: ->
minus: (e)-> "http://my-card.in" + @location_ydk()
Deck.current.minus_card($(this).tmplItem().data) add: (card_usage)->
show: (e)-> if !card_usage.card_id #card
Deck.current.show_card($(this).tmplItem().data) card_usage = @card_usages().findByAttribute('card_id', card.id) || new CardUsage(card_id: card.id, deck_id: deck.id, main: true, count: 0)
search: (name)-> count = 0
Card.fetch_by_name name, (cards)=> for c in @card_usages().findAllByAttribute('card_id', card_usage.card_id) #TODO: alias
@html $('#cards_search_result_template').tmpl cards count += c.count
if count < 3 #TODO: lflist
card_usage.count++
card_usage.save()
minus: (card_usage)->
if !card_usage.card_id #card
card_usage = @card_usages().findByAttribute('card_id', card.id)
return if !card_usage
card_usage.count--
if card_usage.count
card_usage.save()
else
card_usage.destroy()
class DecksController extends Spine.Controller class DecksController extends Spine.Controller
events: events:
'mouseover .card_usage': 'show', 'mouseover .card_usage': 'show',
'click .card_usage': 'add', 'click .card_usage': 'add',
...@@ -130,56 +212,21 @@ class DecksController extends Spine.Controller ...@@ -130,56 +212,21 @@ class DecksController extends Spine.Controller
deck: (deck) -> deck: (deck) ->
if deck if deck
@_deck = deck @_deck = deck
@_deck.bind('change', @refresh) CardUsage.bind('change refresh', @refresh)
@refresh(deck) @refresh()
$('#name').html deck.name
@_deck @_deck
#constructor: -> refresh: =>
# super Card.fetch_by_id (card_usage.card_id for card_usage in @deck().card_usages().all()), =>
# CardUsage.bind("refresh change", @refresh)
refresh: (deck)=>
Card.fetch_by_id (card_usage.card_id for card_usage in deck.card_usages().all()), =>
@render() @render()
render: => render: =>
@main = [] @html $('#deck_template').tmpl({main: @deck().main(), side: @deck().side(), extra: @deck().extra(), main_count: @deck().main_count(), side_count: @deck().side_count(), extra_count: @deck().extra_count(), category_count: @deck().category_count()})
@side = [] @set_history()
@extra = [] @set_download()
main_count = 0
side_count = 0
extra_count = 0
category_count = {}
for category in Card.categories
category_count[category] = 0
#alert @deck().card_usages()
for card_usage in @deck().card_usages().all()
card = card_usage.card()
if card_usage.side
@side.push card_usage
side_count += card_usage.count
else if (card_type for card_type in card.card_type when card_type in Card.card_types_extra).length
@extra.push card_usage
extra_count += card_usage.count
else
@main.push card_usage
main_count += card_usage.count
category_count[(category for category in card.card_type when category in Card.categories).pop()] += card_usage.count
@html $('#deck_template').tmpl({main: @main, side: @side, extra: @extra, main_count: main_count, side_count: side_count, extra_count: extra_count, category_count: category_count})
$('#search_card').html $('#search_card_template').tmpl({test: 'test'})
if $.browser.chrome
$('#deck_url_ydk').attr 'download', @deck_name + '.ydk'
$('#deck_url_ydk').attr 'href', 'data:application/x-ygopro-deck,' + encodeURI ["#generated by mycard/web"].concat(
(card_usage.card_id for i in [0...card_usage.count]).join("\r\n") for card_usage in @main,
(card_usage.card_id for i in [0...card_usage.count]).join("\r\n") for card_usage in @extra,
["!side"],
(card_usage.card_id for i in [0...card_usage.count]).join("\r\n") for card_usage in @side
).join("\r\n")
else
$('#deck_url_ydk').attr 'href', @url_ydk()
###
$( ".deck_part" ).sortable( $( ".deck_part" ).sortable(
connectWith: ".deck_part" connectWith: ".deck_part"
stop: => stop: =>
...@@ -188,7 +235,6 @@ class DecksController extends Spine.Controller ...@@ -188,7 +235,6 @@ class DecksController extends Spine.Controller
for el in $('.card_usage') for el in $('.card_usage')
card_id = $(el).tmplItem().data.card_id card_id = $(el).tmplItem().data.card_id
side = $(el).parent().hasClass('side') side = $(el).parent().hasClass('side')
if last_item if last_item
if last_item.card_id == card_id and last_item.side == side if last_item.card_id == card_id and last_item.side == side
last_item.count++ last_item.count++
...@@ -198,9 +244,10 @@ class DecksController extends Spine.Controller ...@@ -198,9 +244,10 @@ class DecksController extends Spine.Controller
else else
last_item = {card_id: card_id, side: side, count: 1} last_item = {card_id: card_id, side: side, count: 1}
card_usages.push last_item card_usages.push last_item
@refresh card_usages @deck().card_usages card_usages, clear: true
@set_history()
).disableSelection(); ).disableSelection();
###
if $('.operate_area').hasClass('text') if $('.operate_area').hasClass('text')
#文字版 #文字版
@el.jscroll({W: "12px", Btn: @el.jscroll({W: "12px", Btn:
...@@ -209,29 +256,53 @@ class DecksController extends Spine.Controller ...@@ -209,29 +256,53 @@ class DecksController extends Spine.Controller
deck_width = $('.deck_part').width() deck_width = $('.deck_part').width()
card_width = $('.card_usage').width() card_width = $('.card_usage').width()
main_margin = Math.floor((deck_width - card_width * Math.max(Math.ceil(main_count/4),10)) / (Math.max(Math.ceil(main_count/4),10)-1) / 2) main_margin = Math.floor((deck_width - card_width * Math.max(Math.ceil(@deck().main_count() / 4),10)) / (Math.max(Math.ceil(@deck().main_count() / 4),10)-1) / 2)
$('.deck_part.main').css {'margin-left': -main_margin, 'margin-right': -main_margin} $('.deck_part.main').css {'margin-left': -main_margin, 'margin-right': -main_margin}
$('.deck_part.main .card_usage').css {'margin-left': main_margin, 'margin-right': main_margin} $('.deck_part.main .card_usage').css {'margin-left': main_margin, 'margin-right': main_margin}
side_margin = Math.floor((deck_width - card_width * Math.max(side_count,10)) / (Math.max(side_count,10)-1) / 2) side_margin = Math.floor((deck_width - card_width * Math.max(@deck().side_count(),10)) / (Math.max(@deck().side_count(),10)-1) / 2)
$('.deck_part.side').css {'margin-left': -side_margin, 'padding-right': -side_margin} $('.deck_part.side').css {'margin-left': -side_margin, 'padding-right': -side_margin}
$('.deck_part.side .card_usage').css {'margin-left': side_margin, 'margin-right': side_margin} $('.deck_part.side .card_usage').css {'margin-left': side_margin, 'margin-right': side_margin}
extra_margin = Math.floor((deck_width - card_width * Math.max(extra_count,10)) / (Math.max(extra_count,10)-1) / 2) extra_margin = Math.floor((deck_width - card_width * Math.max(@deck().extra_count(),10)) / (Math.max(@deck().extra_count(),10)-1) / 2)
$('.deck_part.extra').css {'margin-left': -extra_margin, 'padding-right': -extra_margin} $('.deck_part.extra').css {'margin-left': -extra_margin, 'padding-right': -extra_margin}
$('.deck_part.extra .card_usage').css {'margin-left': extra_margin, 'margin-right': extra_margin} $('.deck_part.extra .card_usage').css {'margin-left': extra_margin, 'margin-right': extra_margin}
location: ->
"/decks/new?name=#{@deck_name}&cards=#{@encode()}"
location_ydk: -> upload: (files)->
"/decks/new.ydk?name=#{@deck_name}&cards=#{@encode()}" file = files[0]
url: -> reader = new FileReader()
"http://my-card.in" + @location() $('#deck_load').attr 'disabled', true if file
url_ydk: -> reader.onload = (ev)->
"http://my-card.in" + @location_ydk() $('#deck_load').attr 'disabled', false
try
decks.deck Deck.load(ev.target.result, file.name.split('.')[0])
catch error
alert error
reader.readAsText(file)
load_from_url: (url)->
try
decks.deck Deck.decode $.url(url).param('cards'), $.url().param('name')
catch error
alert error
set_history: -> set_history: ->
history.pushState(CardUsage.toJSON(), @deck_name, @location()) history.pushState(CardUsage.toJSON(), @deck().name, @deck().location()) unless @deck().location() == $.url().attr('relative')
set_download: ->
if $.browser.chrome
$('#deck_url_ydk').attr 'download', @deck().name + '.ydk'
$('#deck_url_ydk').attr 'href', 'data:application/x-ygopro-deck,' + encodeURI ["#generated by mycard/web"].concat(
(card_usage.card_id for i in [0...card_usage.count]).join("\r\n") for card_usage in @deck().main(),
(card_usage.card_id for i in [0...card_usage.count]).join("\r\n") for card_usage in @deck().extra(),
["!side"],
(card_usage.card_id for i in [0...card_usage.count]).join("\r\n") for card_usage in @deck().side()
).join("\r\n")
else
$('#deck_url_ydk').attr 'href', @url_ydk()
@tab_control: -> @tab_control: ->
$(".bottom_area div").click -> $(".bottom_area div").click ->
...@@ -254,86 +325,55 @@ class DecksController extends Spine.Controller ...@@ -254,86 +325,55 @@ class DecksController extends Spine.Controller
$('.bottom_area div').eq(active_page_index).addClass('bottom_button_active').removeClass("bottom_button") $('.bottom_area div').eq(active_page_index).addClass('bottom_button_active').removeClass("bottom_button")
DecksController.tab_control() DecksController.tab_control()
add: (e)-> add: (e)->
card_usage = $(e.target).tmplItem().data @deck().add $(e.target).tmplItem().data
count = 0
for c in CardUsage.findAllByAttribute('card_id', card_usage.card_id) #TODO: alias
count += c.count
if count < 3 #TODO: lflist
card_usage.count++
card_usage.save()
@set_history()
add_card: (card)->
card_usage = CardUsage.findByAttribute('card_id', card.id) || new CardUsage(card_id: card.id, main: true, count: 0)
count = 0
for c in CardUsage.findAllByAttribute('card_id', card_usage.card_id) #TODO: alias
count += c.count
if count < 3 #TODO: lflist
card_usage.count++
card_usage.save()
@set_history()
minus: (e)-> minus: (e)->
e.preventDefault() e.preventDefault()
card_usage = $(e.target).tmplItem().data @deck().minus $(e.target).tmplItem().data
card_usage.count--
if card_usage.count
card_usage.save()
else
card_usage.destroy()
@set_history()
minus_card: (card)->
e.preventDefault()
card_usage = CardUsage.findByAttribute('card_id', card.id)
return unless card_usage
card_usage.count--
if card_usage.count
card_usage.save()
else
card_usage.destroy()
@set_history()
class CardsController extends Spine.Controller
events:
'mouseover .card_search_result': 'show',
'click .card_search_result': 'add',
'contextmenu .card_search_result': 'minus'
add: (e)->
decks.deck().add($(this).tmplItem().data)
minus: (e)->
decks.deck().minus($(this).tmplItem().data)
show: (e)->
decks.show_card($(this).tmplItem().data)
search: (name)->
Card.fetch_by_name name, (cards)=>
@html $('#cards_search_result_template').tmpl cards
class CardsSearchController extends Spine.Controller
decks = new DecksController(el: $("#deck"))
cards = new CardsController(el: $("#cards_search"))
$(document).ready -> $(document).ready ->
$('#name').html $.url().param('name')
$("#deck_share_dialog").dialog
modal: true
autoOpen: false
addthis.init()
$.i18n.properties $.i18n.properties
name: 'card' name: 'card'
path: '/locales/' path: '/locales/'
mode: 'map' mode: 'map'
cache: true cache: true
callback: -> callback: ->
decks.load_from_url()
@decks = new DecksController(el: $("#deck"))
#@decks.tab_control()
@cards_search = new CardsSearchController(el: $("#cards_search"))
@decks.deck Deck.decode $.url().param('cards'), $.url().param('name')
#search
$('#search').submit -> $('#search').submit ->
cards_search.search $('.search_input').val() cards.search $('.search_input').val()
return false return false
#share #share
$('#deck_share').click -> $('#deck_share').click ->
$("#deck_url").val deck.url() $("#deck_url").val deck.url()
$("#deck_url_qrcode").attr 'src', 'https://chart.googleapis.com/chart?chs=200x200&cht=qr&chld=|0&chl=' + encodeURIComponent(deck.url()) $("#deck_url_qrcode").attr 'src', 'https://chart.googleapis.com/chart?chs=200x200&cht=qr&chld=|0&chl=' + encodeURIComponent(decks.deck().url())
$("#deck_share_dialog").dialog('open') $("#deck_share_dialog").dialog('open')
$('#deck_url_shorten').click -> $('#deck_url_shorten').click ->
$('#deck_url_shorten').attr "disabled",true $('#deck_url_shorten').attr "disabled",true
$.ajax $.ajax
url: 'https://www.googleapis.com/urlshortener/v1/url' url: 'https://www.googleapis.com/urlshortener/v1/url'
type: 'POST' type: 'POST'
data: JSON.stringify {longUrl: deck.url()} data: JSON.stringify {longUrl: decks.deck().url()}
contentType: 'application/json; charset=utf-8' contentType: 'application/json; charset=utf-8'
success: (data)-> success: (data)->
$("#deck_url").val data.id $("#deck_url").val data.id
...@@ -341,46 +381,22 @@ $(document).ready -> ...@@ -341,46 +381,22 @@ $(document).ready ->
#upload #upload
$('#deck_load').change -> $('#deck_load').change ->
file = @files[0] decks.upload(@files)
reader = new FileReader()
$('#deck_load').attr 'disabled', true if file
reader.onload = (ev)->
$('#deck_load').attr 'disabled', false
result = []
lines = ev.target.result.split("\n")
side = false
last_id = 0
count = 0
for line in lines
if !line or line.charAt(0) == '#'
continue
else if line.substr(0,5) == '!side'
result.push {card_id: last_id, side: side, count: count} if last_id
side = true
last_id = null
else
card_id = parseInt(line)
if card_id
if card_id == last_id
count++
else
result.push {card_id: last_id, side: side, count: count} if last_id
last_id = card_id
count = 1
else
alert('无效卡组')
return
result.push {card_id: last_id, side: side, count: count} if last_id
$('#name').html deck.deck_name = file.name.split('.')[0]
deck.refresh result
deck.set_history()
reader.readAsText(file)
window.addEventListener 'popstate', (ev)-> window.addEventListener 'popstate', (ev)->
if ev.state if ev.state
deck.refresh ev.state, false deck.refresh ev.state, false
$('.main_div').bind 'drop', (ev)->
decks.upload event.dataTransfer.files
false
$(".rename_ope").click -> $(".rename_ope").click ->
$(".text,.graphic").toggleClass("graphic text") $(".text,.graphic").toggleClass("graphic text")
deck.render() decks.render()
$("#deck_share_dialog").dialog
modal: true
autoOpen: false
addthis.init()
\ No newline at end of file
// Generated by CoffeeScript 1.4.0 // Generated by CoffeeScript 1.4.0
(function() { (function() {
var Card, CardUsage, CardsController, CardsSearchController, Deck, DecksController, locale, var Card, CardUsage, CardsController, Deck, DecksController, cards, decks, locale,
__hasProp = {}.hasOwnProperty, __hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
locale = 'zh'; locale = 'zh';
...@@ -102,7 +102,7 @@ ...@@ -102,7 +102,7 @@
Card.fetch_by_name = function(name, callback) { Card.fetch_by_name = function(name, callback) {
var _this = this; var _this = this;
return $.getJSON("" + this.locale_url + "&q=" + (JSON.stringify({ return $.getJSON("" + this.locale_url + "?q=" + (JSON.stringify({
name: { name: {
$regex: name.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1'), $regex: name.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1'),
$options: 'i' $options: 'i'
...@@ -120,7 +120,7 @@ ...@@ -120,7 +120,7 @@
} }
} }
if (cards_id.length) { if (cards_id.length) {
return $.getJSON("" + _this.url + "&q=" + (JSON.stringify({ return $.getJSON("" + _this.url + "?q=" + (JSON.stringify({
_id: { _id: {
$in: cards_id $in: cards_id
} }
...@@ -154,11 +154,11 @@ ...@@ -154,11 +154,11 @@
return _results; return _results;
})(); })();
if (cards_id.length) { if (cards_id.length) {
return $.when($.getJSON("" + this.url + "&q=" + (JSON.stringify({ return $.when($.getJSON("" + this.url + "?q=" + (JSON.stringify({
_id: { _id: {
$in: cards_id $in: cards_id
} }
}))), $.getJSON("" + this.locale_url + "&q=" + (JSON.stringify({ }))), $.getJSON("" + this.locale_url + "?q=" + (JSON.stringify({
_id: { _id: {
$in: cards_id $in: cards_id
} }
...@@ -210,24 +210,129 @@ ...@@ -210,24 +210,129 @@
Deck.prototype.encode = function() { Deck.prototype.encode = function() {
var c, card_usage, i, result, _i, _j, _len, _ref; var c, card_usage, i, result, _i, _j, _len, _ref;
result = ''; result = '';
_ref = this.main.concat(this.extra, this.side); _ref = this.card_usages().all();
for (_i = 0, _len = _ref.length; _i < _len; _i++) { for (_i = 0, _len = _ref.length; _i < _len; _i++) {
card_usage = _ref[_i]; card_usage = _ref[_i];
c = card_usage.side << 29 | card_usage.count << 27 | card_usage.card_id; c = card_usage.side << 29 | card_usage.count << 27 | card_usage.card_id;
for (i = _j = 4; _j >= 0; i = --_j) { for (i = _j = 4; _j >= 0; i = --_j) {
result += this.key.charAt((c >> i * 6) & 0x3F); result += Deck.key.charAt((c >> i * 6) & 0x3F);
} }
} }
return result; return result;
}; };
Deck.prototype.sort = function() {
var card, card_type, card_usage, category, _i, _j, _len, _len1, _ref, _ref1, _results;
this._main = [];
this._side = [];
this._extra = [];
this._main_count = 0;
this._side_count = 0;
this._extra_count = 0;
this._category_count = {};
_ref = Card.categories;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
category = _ref[_i];
this._category_count[category] = 0;
}
_ref1 = this.card_usages().all();
_results = [];
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
card_usage = _ref1[_j];
card = card_usage.card();
if (card_usage.side) {
this._side.push(card_usage);
_results.push(this._side_count += card_usage.count);
} else if (((function() {
var _k, _len2, _ref2, _results1;
_ref2 = card.card_type;
_results1 = [];
for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
card_type = _ref2[_k];
if (__indexOf.call(Card.card_types_extra, card_type) >= 0) {
_results1.push(card_type);
}
}
return _results1;
})()).length) {
this._extra.push(card_usage);
_results.push(this._extra_count += card_usage.count);
} else {
this._main.push(card_usage);
this._main_count += card_usage.count;
_results.push(this._category_count[((function() {
var _k, _len2, _ref2, _results1;
_ref2 = card.card_type;
_results1 = [];
for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
category = _ref2[_k];
if (__indexOf.call(Card.categories, category) >= 0) {
_results1.push(category);
}
}
return _results1;
})()).pop()] += card_usage.count);
}
}
return _results;
};
Deck.prototype.main = function() {
if (!(this._main != null)) {
this.sort();
}
return this._main;
};
Deck.prototype.side = function() {
if (!(this._side != null)) {
this.sort();
}
return this._side;
};
Deck.prototype.extra = function() {
if (!(this._extra != null)) {
this.sort();
}
return this._extra;
};
Deck.prototype.main_count = function() {
if (!(this._main_count != null)) {
this.sort();
}
return this._main_count;
};
Deck.prototype.side_count = function() {
if (!this._side_count) {
this.sort();
}
return this._side_count;
};
Deck.prototype.extra_count = function() {
if (!this._extra_count) {
this.sort();
}
return this._extra_count;
};
Deck.prototype.category_count = function() {
if (!(this._category_count != null)) {
this.sort();
}
return this._category_count;
};
Deck.decode = function(str, name) { Deck.decode = function(str, name) {
var card_id, card_usages, char, count, decoded, i, result, side, _i, _j, _len, _ref, _ref1; var card_id, card_usages, char, count, decoded, i, result, side, _i, _j, _len, _ref, _ref1;
card_usages = [];
result = new Deck({ result = new Deck({
name: name name: name
}); });
result.save(); result.save();
card_usages = [];
for (i = _i = 0, _ref = str.length; _i < _ref; i = _i += 5) { for (i = _i = 0, _ref = str.length; _i < _ref; i = _i += 5) {
decoded = 0; decoded = 0;
_ref1 = str.substr(i, 5); _ref1 = str.substr(i, 5);
...@@ -249,46 +354,121 @@ ...@@ -249,46 +354,121 @@
return result; return result;
}; };
return Deck; Deck.load = function(str, name) {
var card_id, card_usages, count, last_id, line, lines, result, side, _i, _len;
})(Spine.Model); result = new Deck({
name: name
CardsController = (function(_super) { });
result.save();
__extends(CardsController, _super); card_usages = [];
lines = str.split("\n");
function CardsController() { side = false;
return CardsController.__super__.constructor.apply(this, arguments); last_id = 0;
count = 0;
for (_i = 0, _len = lines.length; _i < _len; _i++) {
line = lines[_i];
if (!line || line.charAt(0) === '#') {
continue;
} else if (line.substr(0, 5) === '!side') {
if (last_id) {
card_usages.push({
card_id: last_id,
side: side,
count: count
});
}
side = true;
last_id = null;
} else {
card_id = parseInt(line);
if (card_id) {
if (card_id === last_id) {
count++;
} else {
if (last_id) {
card_usages.push({
id: "" + result.cid + "_" + side + "_" + card_id,
card_id: last_id,
side: side,
count: count
});
}
last_id = card_id;
count = 1;
}
} else {
throw '无效卡组';
}
}
}
if (last_id) {
card_usages.push({
id: "" + result.cid + "_" + side + "_" + card_id,
card_id: last_id,
side: side,
count: count
});
} }
result.card_usages(card_usages);
return result;
};
CardsController.prototype.events = { Deck.prototype.location = function() {
'mouseover .card_search_result': 'show', return "/decks/new?name=" + this.name + "&cards=" + (this.encode());
'click .card_search_result': 'add',
'contextmenu .card_search_result': 'minus'
}; };
CardsController.prototype.add = function(e) { Deck.prototype.location_ydk = function() {
return Deck.current.add_card($(this).tmplItem().data); return "/decks/new.ydk?name=" + this.name + "&cards=" + (this.encode());
}; };
CardsController.prototype.minus = function(e) { Deck.prototype.url = function() {
return Deck.current.minus_card($(this).tmplItem().data); return "http://my-card.in" + this.location();
}; };
CardsController.prototype.show = function(e) { Deck.prototype.url_ydk = function() {
return Deck.current.show_card($(this).tmplItem().data); return "http://my-card.in" + this.location_ydk();
}; };
CardsController.prototype.search = function(name) { Deck.prototype.add = function(card_usage) {
var _this = this; var c, count, _i, _len, _ref;
return Card.fetch_by_name(name, function(cards) { if (!card_usage.card_id) {
return _this.html($('#cards_search_result_template').tmpl(cards)); card_usage = this.card_usages().findByAttribute('card_id', card.id) || new CardUsage({
card_id: card.id,
deck_id: deck.id,
main: true,
count: 0
}); });
}
count = 0;
_ref = this.card_usages().findAllByAttribute('card_id', card_usage.card_id);
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
c = _ref[_i];
count += c.count;
}
if (count < 3) {
card_usage.count++;
return card_usage.save();
}
}; };
return CardsController; Deck.prototype.minus = function(card_usage) {
if (!card_usage.card_id) {
card_usage = this.card_usages().findByAttribute('card_id', card.id);
}
if (!card_usage) {
return;
}
card_usage.count--;
if (card_usage.count) {
return card_usage.save();
} else {
return card_usage.destroy();
}
};
})(Spine.Controller); return Deck;
})(Spine.Model);
DecksController = (function(_super) { DecksController = (function(_super) {
...@@ -310,183 +490,65 @@ ...@@ -310,183 +490,65 @@
DecksController.prototype.deck = function(deck) { DecksController.prototype.deck = function(deck) {
if (deck) { if (deck) {
this._deck = deck; this._deck = deck;
this._deck.bind('change', this.refresh); CardUsage.bind('change refresh', this.refresh);
this.refresh(deck); this.refresh();
$('#name').html(deck.name);
} }
return this._deck; return this._deck;
}; };
DecksController.prototype.refresh = function(deck) { DecksController.prototype.refresh = function() {
var card_usage, var card_usage,
_this = this; _this = this;
return Card.fetch_by_id((function() { return Card.fetch_by_id((function() {
var _i, _len, _ref, _results; var _i, _len, _ref, _results;
_ref = deck.card_usages().all(); _ref = this.deck().card_usages().all();
_results = []; _results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) { for (_i = 0, _len = _ref.length; _i < _len; _i++) {
card_usage = _ref[_i]; card_usage = _ref[_i];
_results.push(card_usage.card_id); _results.push(card_usage.card_id);
} }
return _results; return _results;
})(), function() { }).call(this), function() {
return _this.render(); return _this.render();
}); });
}; };
DecksController.prototype.render = function() { DecksController.prototype.render = function() {
var card, card_type, card_usage, card_width, category, category_count, deck_width, extra_count, extra_margin, i, main_count, main_margin, side_count, side_margin, _i, _j, _len, _len1, _ref, _ref1, var card_width, deck_width, extra_margin, main_margin, side_margin;
_this = this;
this.main = [];
this.side = [];
this.extra = [];
main_count = 0;
side_count = 0;
extra_count = 0;
category_count = {};
_ref = Card.categories;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
category = _ref[_i];
category_count[category] = 0;
}
_ref1 = this.deck().card_usages().all();
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
card_usage = _ref1[_j];
card = card_usage.card();
if (card_usage.side) {
this.side.push(card_usage);
side_count += card_usage.count;
} else if (((function() {
var _k, _len2, _ref2, _results;
_ref2 = card.card_type;
_results = [];
for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
card_type = _ref2[_k];
if (__indexOf.call(Card.card_types_extra, card_type) >= 0) {
_results.push(card_type);
}
}
return _results;
})()).length) {
this.extra.push(card_usage);
extra_count += card_usage.count;
} else {
this.main.push(card_usage);
main_count += card_usage.count;
category_count[((function() {
var _k, _len2, _ref2, _results;
_ref2 = card.card_type;
_results = [];
for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
category = _ref2[_k];
if (__indexOf.call(Card.categories, category) >= 0) {
_results.push(category);
}
}
return _results;
})()).pop()] += card_usage.count;
}
}
this.html($('#deck_template').tmpl({ this.html($('#deck_template').tmpl({
main: this.main, main: this.deck().main(),
side: this.side, side: this.deck().side(),
extra: this.extra, extra: this.deck().extra(),
main_count: main_count, main_count: this.deck().main_count(),
side_count: side_count, side_count: this.deck().side_count(),
extra_count: extra_count, extra_count: this.deck().extra_count(),
category_count: category_count category_count: this.deck().category_count()
})); }));
$('#search_card').html($('#search_card_template').tmpl({ this.set_history();
test: 'test' this.set_download();
})); /*
if ($.browser.chrome) { $( ".deck_part" ).sortable(
$('#deck_url_ydk').attr('download', this.deck_name + '.ydk'); connectWith: ".deck_part"
$('#deck_url_ydk').attr('href', 'data:application/x-ygopro-deck,' + encodeURI(["#generated by mycard/web"].concat((function() { stop: =>
var _k, _len2, _ref2, _results; card_usages = []
_ref2 = this.main; last_item = null
_results = []; for el in $('.card_usage')
for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) { card_id = $(el).tmplItem().data.card_id
card_usage = _ref2[_k]; side = $(el).parent().hasClass('side')
_results.push(((function() { if last_item
var _l, _ref3, _results1; if last_item.card_id == card_id and last_item.side == side
_results1 = []; last_item.count++
for (i = _l = 0, _ref3 = card_usage.count; 0 <= _ref3 ? _l < _ref3 : _l > _ref3; i = 0 <= _ref3 ? ++_l : --_l) { else
_results1.push(card_usage.card_id); card_usages.push last_item
} last_item = {card_id: card_id, side: side, count: 1}
return _results1; else
})()).join("\r\n")); last_item = {card_id: card_id, side: side, count: 1}
} card_usages.push last_item
return _results; @deck().card_usages card_usages, clear: true
}).call(this), (function() { ).disableSelection();
var _k, _len2, _ref2, _results; */
_ref2 = this.extra;
_results = [];
for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
card_usage = _ref2[_k];
_results.push(((function() {
var _l, _ref3, _results1;
_results1 = [];
for (i = _l = 0, _ref3 = card_usage.count; 0 <= _ref3 ? _l < _ref3 : _l > _ref3; i = 0 <= _ref3 ? ++_l : --_l) {
_results1.push(card_usage.card_id);
}
return _results1;
})()).join("\r\n"));
}
return _results;
}).call(this), ["!side"], (function() {
var _k, _len2, _ref2, _results;
_ref2 = this.side;
_results = [];
for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
card_usage = _ref2[_k];
_results.push(((function() {
var _l, _ref3, _results1;
_results1 = [];
for (i = _l = 0, _ref3 = card_usage.count; 0 <= _ref3 ? _l < _ref3 : _l > _ref3; i = 0 <= _ref3 ? ++_l : --_l) {
_results1.push(card_usage.card_id);
}
return _results1;
})()).join("\r\n"));
}
return _results;
}).call(this)).join("\r\n")));
} else {
$('#deck_url_ydk').attr('href', this.url_ydk());
}
$(".deck_part").sortable({
connectWith: ".deck_part",
stop: function() {
var card_id, card_usages, el, last_item, side, _k, _len2, _ref2;
card_usages = [];
last_item = null;
_ref2 = $('.card_usage');
for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
el = _ref2[_k];
card_id = $(el).tmplItem().data.card_id;
side = $(el).parent().hasClass('side');
if (last_item) {
if (last_item.card_id === card_id && last_item.side === side) {
last_item.count++;
} else {
card_usages.push(last_item);
last_item = {
card_id: card_id,
side: side,
count: 1
};
}
} else {
last_item = {
card_id: card_id,
side: side,
count: 1
};
}
}
card_usages.push(last_item);
_this.refresh(card_usages);
return _this.set_history();
}
}).disableSelection();
if ($('.operate_area').hasClass('text')) { if ($('.operate_area').hasClass('text')) {
return this.el.jscroll({ return this.el.jscroll({
W: "12px", W: "12px",
...@@ -497,7 +559,7 @@ ...@@ -497,7 +559,7 @@
} else { } else {
deck_width = $('.deck_part').width(); deck_width = $('.deck_part').width();
card_width = $('.card_usage').width(); card_width = $('.card_usage').width();
main_margin = Math.floor((deck_width - card_width * Math.max(Math.ceil(main_count / 4), 10)) / (Math.max(Math.ceil(main_count / 4), 10) - 1) / 2); main_margin = Math.floor((deck_width - card_width * Math.max(Math.ceil(this.deck().main_count() / 4), 10)) / (Math.max(Math.ceil(this.deck().main_count() / 4), 10) - 1) / 2);
$('.deck_part.main').css({ $('.deck_part.main').css({
'margin-left': -main_margin, 'margin-left': -main_margin,
'margin-right': -main_margin 'margin-right': -main_margin
...@@ -506,7 +568,7 @@ ...@@ -506,7 +568,7 @@
'margin-left': main_margin, 'margin-left': main_margin,
'margin-right': main_margin 'margin-right': main_margin
}); });
side_margin = Math.floor((deck_width - card_width * Math.max(side_count, 10)) / (Math.max(side_count, 10) - 1) / 2); side_margin = Math.floor((deck_width - card_width * Math.max(this.deck().side_count(), 10)) / (Math.max(this.deck().side_count(), 10) - 1) / 2);
$('.deck_part.side').css({ $('.deck_part.side').css({
'margin-left': -side_margin, 'margin-left': -side_margin,
'padding-right': -side_margin 'padding-right': -side_margin
...@@ -515,7 +577,7 @@ ...@@ -515,7 +577,7 @@
'margin-left': side_margin, 'margin-left': side_margin,
'margin-right': side_margin 'margin-right': side_margin
}); });
extra_margin = Math.floor((deck_width - card_width * Math.max(extra_count, 10)) / (Math.max(extra_count, 10) - 1) / 2); extra_margin = Math.floor((deck_width - card_width * Math.max(this.deck().extra_count(), 10)) / (Math.max(this.deck().extra_count(), 10) - 1) / 2);
$('.deck_part.extra').css({ $('.deck_part.extra').css({
'margin-left': -extra_margin, 'margin-left': -extra_margin,
'padding-right': -extra_margin 'padding-right': -extra_margin
...@@ -527,24 +589,94 @@ ...@@ -527,24 +589,94 @@
} }
}; };
DecksController.prototype.location = function() { DecksController.prototype.upload = function(files) {
return "/decks/new?name=" + this.deck_name + "&cards=" + (this.encode()); var file, reader;
file = files[0];
reader = new FileReader();
if (file) {
$('#deck_load').attr('disabled', true);
}
reader.onload = function(ev) {
$('#deck_load').attr('disabled', false);
try {
return decks.deck(Deck.load(ev.target.result, file.name.split('.')[0]));
} catch (error) {
return alert(error);
}
}; };
return reader.readAsText(file);
DecksController.prototype.location_ydk = function() {
return "/decks/new.ydk?name=" + this.deck_name + "&cards=" + (this.encode());
}; };
DecksController.prototype.url = function() { DecksController.prototype.load_from_url = function(url) {
return "http://my-card.in" + this.location(); try {
return decks.deck(Deck.decode($.url(url).param('cards'), $.url().param('name')));
} catch (error) {
return alert(error);
}
}; };
DecksController.prototype.url_ydk = function() { DecksController.prototype.set_history = function() {
return "http://my-card.in" + this.location_ydk(); if (this.deck().location() !== $.url().attr('relative')) {
return history.pushState(CardUsage.toJSON(), this.deck().name, this.deck().location());
}
}; };
DecksController.prototype.set_history = function() { DecksController.prototype.set_download = function() {
return history.pushState(CardUsage.toJSON(), this.deck_name, this.location()); var card_usage, i;
if ($.browser.chrome) {
$('#deck_url_ydk').attr('download', this.deck().name + '.ydk');
return $('#deck_url_ydk').attr('href', 'data:application/x-ygopro-deck,' + encodeURI(["#generated by mycard/web"].concat((function() {
var _i, _len, _ref, _results;
_ref = this.deck().main();
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
card_usage = _ref[_i];
_results.push(((function() {
var _j, _ref1, _results1;
_results1 = [];
for (i = _j = 0, _ref1 = card_usage.count; 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) {
_results1.push(card_usage.card_id);
}
return _results1;
})()).join("\r\n"));
}
return _results;
}).call(this), (function() {
var _i, _len, _ref, _results;
_ref = this.deck().extra();
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
card_usage = _ref[_i];
_results.push(((function() {
var _j, _ref1, _results1;
_results1 = [];
for (i = _j = 0, _ref1 = card_usage.count; 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) {
_results1.push(card_usage.card_id);
}
return _results1;
})()).join("\r\n"));
}
return _results;
}).call(this), ["!side"], (function() {
var _i, _len, _ref, _results;
_ref = this.deck().side();
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
card_usage = _ref[_i];
_results.push(((function() {
var _j, _ref1, _results1;
_results1 = [];
for (i = _j = 0, _ref1 = card_usage.count; 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j) {
_results1.push(card_usage.card_id);
}
return _results1;
})()).join("\r\n"));
}
return _results;
}).call(this)).join("\r\n")));
} else {
return $('#deck_url_ydk').attr('href', this.url_ydk());
}
}; };
DecksController.tab_control = function() { DecksController.tab_control = function() {
...@@ -582,113 +714,78 @@ ...@@ -582,113 +714,78 @@
}; };
DecksController.prototype.add = function(e) { DecksController.prototype.add = function(e) {
var c, card_usage, count, _i, _len, _ref; return this.deck().add($(e.target).tmplItem().data);
card_usage = $(e.target).tmplItem().data;
count = 0;
_ref = CardUsage.findAllByAttribute('card_id', card_usage.card_id);
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
c = _ref[_i];
count += c.count;
}
if (count < 3) {
card_usage.count++;
card_usage.save();
}
return this.set_history();
};
DecksController.prototype.add_card = function(card) {
var c, card_usage, count, _i, _len, _ref;
card_usage = CardUsage.findByAttribute('card_id', card.id) || new CardUsage({
card_id: card.id,
main: true,
count: 0
});
count = 0;
_ref = CardUsage.findAllByAttribute('card_id', card_usage.card_id);
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
c = _ref[_i];
count += c.count;
}
if (count < 3) {
card_usage.count++;
card_usage.save();
}
return this.set_history();
}; };
DecksController.prototype.minus = function(e) { DecksController.prototype.minus = function(e) {
var card_usage;
e.preventDefault(); e.preventDefault();
card_usage = $(e.target).tmplItem().data; return this.deck().minus($(e.target).tmplItem().data);
card_usage.count--;
if (card_usage.count) {
card_usage.save();
} else {
card_usage.destroy();
}
return this.set_history();
};
DecksController.prototype.minus_card = function(card) {
var card_usage;
e.preventDefault();
card_usage = CardUsage.findByAttribute('card_id', card.id);
if (!card_usage) {
return;
}
card_usage.count--;
if (card_usage.count) {
card_usage.save();
} else {
card_usage.destroy();
}
return this.set_history();
}; };
return DecksController; return DecksController;
})(Spine.Controller); })(Spine.Controller);
CardsSearchController = (function(_super) { CardsController = (function(_super) {
__extends(CardsSearchController, _super); __extends(CardsController, _super);
function CardsSearchController() { function CardsController() {
return CardsSearchController.__super__.constructor.apply(this, arguments); return CardsController.__super__.constructor.apply(this, arguments);
} }
return CardsSearchController; CardsController.prototype.events = {
'mouseover .card_search_result': 'show',
'click .card_search_result': 'add',
'contextmenu .card_search_result': 'minus'
};
CardsController.prototype.add = function(e) {
return decks.deck().add($(this).tmplItem().data);
};
CardsController.prototype.minus = function(e) {
return decks.deck().minus($(this).tmplItem().data);
};
CardsController.prototype.show = function(e) {
return decks.show_card($(this).tmplItem().data);
};
CardsController.prototype.search = function(name) {
var _this = this;
return Card.fetch_by_name(name, function(cards) {
return _this.html($('#cards_search_result_template').tmpl(cards));
});
};
return CardsController;
})(Spine.Controller); })(Spine.Controller);
$(document).ready(function() { decks = new DecksController({
$('#name').html($.url().param('name')); el: $("#deck")
$("#deck_share_dialog").dialog({
modal: true,
autoOpen: false
}); });
addthis.init();
return $.i18n.properties({ cards = new CardsController({
el: $("#cards_search")
});
$(document).ready(function() {
$.i18n.properties({
name: 'card', name: 'card',
path: '/locales/', path: '/locales/',
mode: 'map', mode: 'map',
cache: true, cache: true,
callback: function() { callback: function() {
this.decks = new DecksController({ decks.load_from_url();
el: $("#deck")
});
this.cards_search = new CardsSearchController({
el: $("#cards_search")
});
this.decks.deck(Deck.decode($.url().param('cards'), $.url().param('name')));
$('#search').submit(function() { $('#search').submit(function() {
cards_search.search($('.search_input').val()); cards.search($('.search_input').val());
return false; return false;
}); });
$('#deck_share').click(function() { $('#deck_share').click(function() {
$("#deck_url").val(deck.url()); $("#deck_url").val(deck.url());
$("#deck_url_qrcode").attr('src', 'https://chart.googleapis.com/chart?chs=200x200&cht=qr&chld=|0&chl=' + encodeURIComponent(deck.url())); $("#deck_url_qrcode").attr('src', 'https://chart.googleapis.com/chart?chs=200x200&cht=qr&chld=|0&chl=' + encodeURIComponent(decks.deck().url()));
return $("#deck_share_dialog").dialog('open'); return $("#deck_share_dialog").dialog('open');
}); });
$('#deck_url_shorten').click(function() { $('#deck_url_shorten').click(function() {
...@@ -697,7 +794,7 @@ ...@@ -697,7 +794,7 @@
url: 'https://www.googleapis.com/urlshortener/v1/url', url: 'https://www.googleapis.com/urlshortener/v1/url',
type: 'POST', type: 'POST',
data: JSON.stringify({ data: JSON.stringify({
longUrl: deck.url() longUrl: decks.deck().url()
}), }),
contentType: 'application/json; charset=utf-8', contentType: 'application/json; charset=utf-8',
success: function(data) { success: function(data) {
...@@ -707,80 +804,28 @@ ...@@ -707,80 +804,28 @@
}); });
}); });
$('#deck_load').change(function() { $('#deck_load').change(function() {
var file, reader; return decks.upload(this.files);
file = this.files[0];
reader = new FileReader();
if (file) {
$('#deck_load').attr('disabled', true);
}
reader.onload = function(ev) {
var card_id, count, last_id, line, lines, result, side, _i, _len;
$('#deck_load').attr('disabled', false);
result = [];
lines = ev.target.result.split("\n");
side = false;
last_id = 0;
count = 0;
for (_i = 0, _len = lines.length; _i < _len; _i++) {
line = lines[_i];
if (!line || line.charAt(0) === '#') {
continue;
} else if (line.substr(0, 5) === '!side') {
if (last_id) {
result.push({
card_id: last_id,
side: side,
count: count
});
}
side = true;
last_id = null;
} else {
card_id = parseInt(line);
if (card_id) {
if (card_id === last_id) {
count++;
} else {
if (last_id) {
result.push({
card_id: last_id,
side: side,
count: count
});
}
last_id = card_id;
count = 1;
}
} else {
alert('无效卡组');
return;
}
}
}
if (last_id) {
result.push({
card_id: last_id,
side: side,
count: count
});
}
$('#name').html(deck.deck_name = file.name.split('.')[0]);
deck.refresh(result);
return deck.set_history();
};
return reader.readAsText(file);
}); });
window.addEventListener('popstate', function(ev) { window.addEventListener('popstate', function(ev) {
if (ev.state) { if (ev.state) {
return deck.refresh(ev.state, false); return deck.refresh(ev.state, false);
} }
}); });
$('.main_div').bind('drop', function(ev) {
decks.upload(event.dataTransfer.files);
return false;
});
return $(".rename_ope").click(function() { return $(".rename_ope").click(function() {
$(".text,.graphic").toggleClass("graphic text"); $(".text,.graphic").toggleClass("graphic text");
return deck.render(); return decks.render();
}); });
} }
}); });
$("#deck_share_dialog").dialog({
modal: true,
autoOpen: false
});
return addthis.init();
}); });
}).call(this); }).call(this);
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
<script src="/vendor/javascripts/less-1.3.1.min.js"></script> <script src="/vendor/javascripts/less-1.3.1.min.js"></script>
<script id="card_template" type="text/x-jquery-tmpl"> <script id="card_template" type="text/x-jquery-tmpl">
<div id="card_name" class="card_name">${name}</div> <div id="card_name" class="card_name"><a href="http://www.ourocg.cn/S.aspx?key=${name}">${name}</a></div>
<div class="card_img line floatleft"> <div class="card_img line floatleft">
<img id="card_image" height="187px" width="130px" src="http://my-card.in/images/cards/ygocore/${id}.jpg" alt="card_name"/> <img id="card_image" height="187px" width="130px" src="http://my-card.in/images/cards/ygocore/${id}.jpg" alt="card_name"/>
</div> </div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment