Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
Moecube Store
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
Moecube Store
Commits
0cbac7fa
Commit
0cbac7fa
authored
Dec 14, 2012
by
神楽坂玲奈
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
drop upload
parent
4b0eb0c4
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
583 additions
and
522 deletions
+583
-522
assets/javascripts/decks.coffee
assets/javascripts/decks.coffee
+186
-170
assets/javascripts/decks.js
assets/javascripts/decks.js
+396
-351
decks/new/index.html
decks/new/index.html
+1
-1
No files found.
assets/javascripts/decks.coffee
View file @
0cbac7fa
...
...
@@ -45,7 +45,7 @@ class Card extends Spine.Model
@
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
=
[]
cards_id
=
[]
for
lang
in
langs
...
...
@@ -54,7 +54,7 @@ class Card extends Spine.Model
catch
e
cards_id
.
push
lang
.
_id
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
for
card
in
cards
result
.
push
Card
.
find
card
.
_id
...
...
@@ -65,7 +65,7 @@ class Card extends Spine.Model
@
fetch_by_id
:
(
cards_id
,
callback
)
->
cards_id
=
(
card_id
for
card_id
in
cards_id
when
!
Card
.
exists
(
card_id
))
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
])
callback
()
else
...
...
@@ -84,15 +84,58 @@ class Deck extends Spine.Model
@
key
:
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789*-="
encode
:
->
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
for
i
in
[
4
..
0
]
result
+=
@
key
.
charAt
((
c
>>
i
*
6
)
&
0x3F
)
result
+=
Deck
.
key
.
charAt
((
c
>>
i
*
6
)
&
0x3F
)
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
)
->
card_usages
=
[]
result
=
new
Deck
(
name
:
name
)
result
.
save
()
card_usages
=
[]
for
i
in
[
0
...
str
.
length
]
by
5
decoded
=
0
for
char
in
str
.
substr
(
i
,
5
)
...
...
@@ -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
}
result
.
card_usages
card_usages
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
events
:
'mouseover .card_search_result'
:
'show'
,
'click .card_search_result'
:
'add'
,
'contextmenu .card_search_result'
:
'minus'
add
:
(
e
)
->
Deck
.
current
.
add_card
(
$
(
this
).
tmplItem
().
data
)
minus
:
(
e
)
->
Deck
.
current
.
minus_card
(
$
(
this
).
tmplItem
().
data
)
show
:
(
e
)
->
Deck
.
current
.
show_card
(
$
(
this
).
tmplItem
().
data
)
search
:
(
name
)
->
Card
.
fetch_by_name
name
,
(
cards
)
=>
@
html
$
(
'#cards_search_result_template'
).
tmpl
cards
location
:
->
"/decks/new?name=
#{
@
name
}
&cards=
#{
@
encode
()
}
"
location_ydk
:
->
"/decks/new.ydk?name=
#{
@
name
}
&cards=
#{
@
encode
()
}
"
url
:
->
"http://my-card.in"
+
@
location
()
url_ydk
:
->
"http://my-card.in"
+
@
location_ydk
()
add
:
(
card_usage
)
->
if
!
card_usage
.
card_id
#card
card_usage
=
@
card_usages
().
findByAttribute
(
'card_id'
,
card
.
id
)
||
new
CardUsage
(
card_id
:
card
.
id
,
deck_id
:
deck
.
id
,
main
:
true
,
count
:
0
)
count
=
0
for
c
in
@
card_usages
().
findAllByAttribute
(
'card_id'
,
card_usage
.
card_id
)
#TODO: alias
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
events
:
'mouseover .card_usage'
:
'show'
,
'click .card_usage'
:
'add'
,
...
...
@@ -130,56 +212,21 @@ class DecksController extends Spine.Controller
deck
:
(
deck
)
->
if
deck
@
_deck
=
deck
@
_deck
.
bind
(
'change'
,
@
refresh
)
@
refresh
(
deck
)
CardUsage
.
bind
(
'change refresh'
,
@
refresh
)
@
refresh
()
$
(
'#name'
).
html
deck
.
name
@
_deck
#constructor: ->
# super
# CardUsage.bind("refresh change", @refresh)
refresh
:
(
deck
)
=>
Card
.
fetch_by_id
(
card_usage
.
card_id
for
card_usage
in
deck
.
card_usages
().
all
()),
=>
refresh
:
=>
Card
.
fetch_by_id
(
card_usage
.
card_id
for
card_usage
in
@
deck
().
card_usages
().
all
()),
=>
@
render
()
render
:
=>
@
main
=
[]
@
side
=
[]
@
extra
=
[]
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
()
@
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
()})
@
set_history
()
@
set_download
()
###
$( ".deck_part" ).sortable(
connectWith: ".deck_part"
stop: =>
...
...
@@ -188,7 +235,6 @@ class DecksController extends Spine.Controller
for el in $('.card_usage')
card_id = $(el).tmplItem().data.card_id
side = $(el).parent().hasClass('side')
if last_item
if last_item.card_id == card_id and last_item.side == side
last_item.count++
...
...
@@ -198,9 +244,10 @@ class DecksController extends Spine.Controller
else
last_item = {card_id: card_id, side: side, count: 1}
card_usages.push last_item
@
refresh
card_usages
@
set_history
()
@deck().card_usages card_usages, clear: true
).disableSelection();
###
if
$
(
'.operate_area'
).
hasClass
(
'text'
)
#文字版
@
el
.
jscroll
({
W
:
"12px"
,
Btn
:
...
...
@@ -209,29 +256,53 @@ class DecksController extends Spine.Controller
deck_width
=
$
(
'.deck_part'
).
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 .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 .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 .card_usage'
).
css
{
'margin-left'
:
extra_margin
,
'margin-right'
:
extra_margin
}
location
:
->
"/decks/new?name=
#{
@
deck_name
}
&cards=
#{
@
encode
()
}
"
location_ydk
:
->
"/decks/new.ydk?name=
#{
@
deck_name
}
&cards=
#{
@
encode
()
}
"
url
:
->
"http://my-card.in"
+
@
location
()
url_ydk
:
->
"http://my-card.in"
+
@
location_ydk
()
upload
:
(
files
)
->
file
=
files
[
0
]
reader
=
new
FileReader
()
$
(
'#deck_load'
).
attr
'disabled'
,
true
if
file
reader
.
onload
=
(
ev
)
->
$
(
'#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
:
->
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
:
->
$
(
".bottom_area div"
).
click
->
...
...
@@ -254,86 +325,55 @@ class DecksController extends Spine.Controller
$
(
'.bottom_area div'
).
eq
(
active_page_index
).
addClass
(
'bottom_button_active'
).
removeClass
(
"bottom_button"
)
DecksController
.
tab_control
()
add
:
(
e
)
->
card_usage
=
$
(
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
()
@
deck
().
add
$
(
e
.
target
).
tmplItem
().
data
minus
:
(
e
)
->
e
.
preventDefault
()
card_usage
=
$
(
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
()
@
deck
().
minus
$
(
e
.
target
).
tmplItem
().
data
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
->
$
(
'#name'
).
html
$
.
url
().
param
(
'name'
)
$
(
"#deck_share_dialog"
).
dialog
modal
:
true
autoOpen
:
false
addthis
.
init
()
$
.
i18n
.
properties
name
:
'card'
path
:
'/locales/'
mode
:
'map'
cache
:
true
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
->
cards
_search
.
search
$
(
'.search_input'
).
val
()
cards
.
search
$
(
'.search_input'
).
val
()
return
false
#share
$
(
'#deck_share'
).
click
->
$
(
"#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
(
deck
s
.
deck
()
.
url
())
$
(
"#deck_share_dialog"
).
dialog
(
'open'
)
$
(
'#deck_url_shorten'
).
click
->
$
(
'#deck_url_shorten'
).
attr
"disabled"
,
true
$
.
ajax
url
:
'https://www.googleapis.com/urlshortener/v1/url'
type
:
'POST'
data
:
JSON
.
stringify
{
longUrl
:
deck
.
url
()}
data
:
JSON
.
stringify
{
longUrl
:
deck
s
.
deck
()
.
url
()}
contentType
:
'application/json; charset=utf-8'
success
:
(
data
)
->
$
(
"#deck_url"
).
val
data
.
id
...
...
@@ -341,46 +381,22 @@ $(document).ready ->
#upload
$
(
'#deck_load'
).
change
->
file
=
@
files
[
0
]
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
)
decks
.
upload
(
@
files
)
window
.
addEventListener
'popstate'
,
(
ev
)
->
if
ev
.
state
deck
.
refresh
ev
.
state
,
false
$
(
'.main_div'
).
bind
'drop'
,
(
ev
)
->
decks
.
upload
event
.
dataTransfer
.
files
false
$
(
".rename_ope"
).
click
->
$
(
".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
assets/javascripts/decks.js
View file @
0cbac7fa
// Generated by CoffeeScript 1.4.0
(
function
()
{
var
Card
,
CardUsage
,
CardsController
,
CardsSearchController
,
Deck
,
DecksController
,
locale
,
var
Card
,
CardUsage
,
CardsController
,
Deck
,
DecksController
,
cards
,
decks
,
locale
,
__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
;
},
__
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
'
;
...
...
@@ -102,7 +102,7 @@
Card
.
fetch_by_name
=
function
(
name
,
callback
)
{
var
_this
=
this
;
return
$
.
getJSON
(
""
+
this
.
locale_url
+
"
&
q=
"
+
(
JSON
.
stringify
({
return
$
.
getJSON
(
""
+
this
.
locale_url
+
"
?
q=
"
+
(
JSON
.
stringify
({
name
:
{
$regex
:
name
.
replace
(
/
([
.?*+^$[
\]\\
(){}|-
])
/g
,
'
\\
$1
'
),
$options
:
'
i
'
...
...
@@ -120,7 +120,7 @@
}
}
if
(
cards_id
.
length
)
{
return
$
.
getJSON
(
""
+
_this
.
url
+
"
&
q=
"
+
(
JSON
.
stringify
({
return
$
.
getJSON
(
""
+
_this
.
url
+
"
?
q=
"
+
(
JSON
.
stringify
({
_id
:
{
$in
:
cards_id
}
...
...
@@ -154,11 +154,11 @@
return
_results
;
})();
if
(
cards_id
.
length
)
{
return
$
.
when
(
$
.
getJSON
(
""
+
this
.
url
+
"
&
q=
"
+
(
JSON
.
stringify
({
return
$
.
when
(
$
.
getJSON
(
""
+
this
.
url
+
"
?
q=
"
+
(
JSON
.
stringify
({
_id
:
{
$in
:
cards_id
}
}))),
$
.
getJSON
(
""
+
this
.
locale_url
+
"
&
q=
"
+
(
JSON
.
stringify
({
}))),
$
.
getJSON
(
""
+
this
.
locale_url
+
"
?
q=
"
+
(
JSON
.
stringify
({
_id
:
{
$in
:
cards_id
}
...
...
@@ -210,24 +210,129 @@
Deck
.
prototype
.
encode
=
function
()
{
var
c
,
card_usage
,
i
,
result
,
_i
,
_j
,
_len
,
_ref
;
result
=
''
;
_ref
=
this
.
main
.
concat
(
this
.
extra
,
this
.
side
);
_ref
=
this
.
card_usages
().
all
(
);
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
card_usage
=
_ref
[
_i
];
c
=
card_usage
.
side
<<
29
|
card_usage
.
count
<<
27
|
card_usage
.
card_id
;
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
;
};
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
)
{
var
card_id
,
card_usages
,
char
,
count
,
decoded
,
i
,
result
,
side
,
_i
,
_j
,
_len
,
_ref
,
_ref1
;
card_usages
=
[];
result
=
new
Deck
({
name
:
name
});
result
.
save
();
card_usages
=
[];
for
(
i
=
_i
=
0
,
_ref
=
str
.
length
;
_i
<
_ref
;
i
=
_i
+=
5
)
{
decoded
=
0
;
_ref1
=
str
.
substr
(
i
,
5
);
...
...
@@ -249,46 +354,121 @@
return
result
;
};
return
Deck
;
})(
Spine
.
Model
);
CardsController
=
(
function
(
_super
)
{
__extends
(
CardsController
,
_super
);
function
CardsController
()
{
return
CardsController
.
__super__
.
constructor
.
apply
(
this
,
arguments
);
Deck
.
load
=
function
(
str
,
name
)
{
var
card_id
,
card_usages
,
count
,
last_id
,
line
,
lines
,
result
,
side
,
_i
,
_len
;
result
=
new
Deck
({
name
:
name
});
result
.
save
();
card_usages
=
[];
lines
=
str
.
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
)
{
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
=
{
'
mouseover .card_search_result
'
:
'
show
'
,
'
click .card_search_result
'
:
'
add
'
,
'
contextmenu .card_search_result
'
:
'
minus
'
Deck
.
prototype
.
location
=
function
()
{
return
"
/decks/new?name=
"
+
this
.
name
+
"
&cards=
"
+
(
this
.
encode
());
};
CardsController
.
prototype
.
add
=
function
(
e
)
{
return
Deck
.
current
.
add_card
(
$
(
this
).
tmplItem
().
data
);
Deck
.
prototype
.
location_ydk
=
function
(
)
{
return
"
/decks/new.ydk?name=
"
+
this
.
name
+
"
&cards=
"
+
(
this
.
encode
()
);
};
CardsController
.
prototype
.
minus
=
function
(
e
)
{
return
Deck
.
current
.
minus_card
(
$
(
this
).
tmplItem
().
data
);
Deck
.
prototype
.
url
=
function
(
)
{
return
"
http://my-card.in
"
+
this
.
location
(
);
};
CardsController
.
prototype
.
show
=
function
(
e
)
{
return
Deck
.
current
.
show_card
(
$
(
this
).
tmplItem
().
data
);
Deck
.
prototype
.
url_ydk
=
function
(
)
{
return
"
http://my-card.in
"
+
this
.
location_ydk
(
);
};
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
));
Deck
.
prototype
.
add
=
function
(
card_usage
)
{
var
c
,
count
,
_i
,
_len
,
_ref
;
if
(
!
card_usage
.
card_id
)
{
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
)
{
...
...
@@ -310,183 +490,65 @@
DecksController
.
prototype
.
deck
=
function
(
deck
)
{
if
(
deck
)
{
this
.
_deck
=
deck
;
this
.
_deck
.
bind
(
'
change
'
,
this
.
refresh
);
this
.
refresh
(
deck
);
CardUsage
.
bind
(
'
change refresh
'
,
this
.
refresh
);
this
.
refresh
();
$
(
'
#name
'
).
html
(
deck
.
name
);
}
return
this
.
_deck
;
};
DecksController
.
prototype
.
refresh
=
function
(
deck
)
{
DecksController
.
prototype
.
refresh
=
function
()
{
var
card_usage
,
_this
=
this
;
return
Card
.
fetch_by_id
((
function
()
{
var
_i
,
_len
,
_ref
,
_results
;
_ref
=
deck
.
card_usages
().
all
();
_ref
=
this
.
deck
()
.
card_usages
().
all
();
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
card_usage
=
_ref
[
_i
];
_results
.
push
(
card_usage
.
card_id
);
}
return
_results
;
})
(
),
function
()
{
})
.
call
(
this
),
function
()
{
return
_this
.
render
();
});
};
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
,
_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
;
}
}
var
card_width
,
deck_width
,
extra_margin
,
main_margin
,
side_margin
;
this
.
html
(
$
(
'
#deck_template
'
).
tmpl
({
main
:
this
.
main
,
side
:
this
.
side
,
extra
:
this
.
extra
,
main_count
:
main_count
,
side_count
:
side_count
,
extra_count
:
extra_count
,
category_count
:
category_count
main
:
this
.
deck
().
main
()
,
side
:
this
.
deck
().
side
()
,
extra
:
this
.
deck
().
extra
()
,
main_count
:
this
.
deck
().
main_count
()
,
side_count
:
this
.
deck
().
side_count
()
,
extra_count
:
this
.
deck
().
extra_count
()
,
category_count
:
this
.
deck
().
category_count
()
}));
$
(
'
#search_card
'
).
html
(
$
(
'
#search_card_template
'
).
tmpl
({
test
:
'
test
'
}));
if
(
$
.
browser
.
chrome
)
{
$
(
'
#deck_url_ydk
'
).
attr
(
'
download
'
,
this
.
deck_name
+
'
.ydk
'
);
$
(
'
#deck_url_ydk
'
).
attr
(
'
href
'
,
'
data:application/x-ygopro-deck,
'
+
encodeURI
([
"
#generated by mycard/web
"
].
concat
((
function
()
{
var
_k
,
_len2
,
_ref2
,
_results
;
_ref2
=
this
.
main
;
_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
),
(
function
()
{
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
();
this
.
set_history
();
this
.
set_download
();
/*
$( ".deck_part" ).sortable(
connectWith: ".deck_part"
stop: =>
card_usages = []
last_item = null
for el in $('.card_usage')
card_id = $(el).tmplItem().data.card_id
side = $(el).parent().hasClass('side')
if last_item
if last_item.card_id == card_id and 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
@deck().card_usages card_usages, clear: true
).disableSelection();
*/
if
(
$
(
'
.operate_area
'
).
hasClass
(
'
text
'
))
{
return
this
.
el
.
jscroll
({
W
:
"
12px
"
,
...
...
@@ -497,7 +559,7 @@
}
else
{
deck_width
=
$
(
'
.deck_part
'
).
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
({
'
margin-left
'
:
-
main_margin
,
'
margin-right
'
:
-
main_margin
...
...
@@ -506,7 +568,7 @@
'
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
(
this
.
deck
().
side_count
(),
10
))
/
(
Math
.
max
(
this
.
deck
().
side_count
()
,
10
)
-
1
)
/
2
);
$
(
'
.deck_part.side
'
).
css
({
'
margin-left
'
:
-
side_margin
,
'
padding-right
'
:
-
side_margin
...
...
@@ -515,7 +577,7 @@
'
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
(
this
.
deck
().
extra_count
(),
10
))
/
(
Math
.
max
(
this
.
deck
().
extra_count
()
,
10
)
-
1
)
/
2
);
$
(
'
.deck_part.extra
'
).
css
({
'
margin-left
'
:
-
extra_margin
,
'
padding-right
'
:
-
extra_margin
...
...
@@ -527,24 +589,94 @@
}
};
DecksController
.
prototype
.
location
=
function
()
{
return
"
/decks/new?name=
"
+
this
.
deck_name
+
"
&cards=
"
+
(
this
.
encode
());
DecksController
.
prototype
.
upload
=
function
(
files
)
{
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
);
}
};
DecksController
.
prototype
.
location_ydk
=
function
()
{
return
"
/decks/new.ydk?name=
"
+
this
.
deck_name
+
"
&cards=
"
+
(
this
.
encode
());
return
reader
.
readAsText
(
file
);
};
DecksController
.
prototype
.
url
=
function
()
{
return
"
http://my-card.in
"
+
this
.
location
();
DecksController
.
prototype
.
load_from_url
=
function
(
url
)
{
try
{
return
decks
.
deck
(
Deck
.
decode
(
$
.
url
(
url
).
param
(
'
cards
'
),
$
.
url
().
param
(
'
name
'
)));
}
catch
(
error
)
{
return
alert
(
error
);
}
};
DecksController
.
prototype
.
url_ydk
=
function
()
{
return
"
http://my-card.in
"
+
this
.
location_ydk
();
DecksController
.
prototype
.
set_history
=
function
()
{
if
(
this
.
deck
().
location
()
!==
$
.
url
().
attr
(
'
relative
'
))
{
return
history
.
pushState
(
CardUsage
.
toJSON
(),
this
.
deck
().
name
,
this
.
deck
().
location
());
}
};
DecksController
.
prototype
.
set_history
=
function
()
{
return
history
.
pushState
(
CardUsage
.
toJSON
(),
this
.
deck_name
,
this
.
location
());
DecksController
.
prototype
.
set_download
=
function
()
{
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
()
{
...
...
@@ -582,113 +714,78 @@
};
DecksController
.
prototype
.
add
=
function
(
e
)
{
var
c
,
card_usage
,
count
,
_i
,
_len
,
_ref
;
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
();
return
this
.
deck
().
add
(
$
(
e
.
target
).
tmplItem
().
data
);
};
DecksController
.
prototype
.
minus
=
function
(
e
)
{
var
card_usage
;
e
.
preventDefault
();
card_usage
=
$
(
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
this
.
deck
().
minus
(
$
(
e
.
target
).
tmplItem
().
data
);
};
return
DecksController
;
})(
Spine
.
Controller
);
Cards
Search
Controller
=
(
function
(
_super
)
{
CardsController
=
(
function
(
_super
)
{
__extends
(
Cards
Search
Controller
,
_super
);
__extends
(
CardsController
,
_super
);
function
Cards
Search
Controller
()
{
return
Cards
Search
Controller
.
__super__
.
constructor
.
apply
(
this
,
arguments
);
function
CardsController
()
{
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
);
$
(
document
).
ready
(
function
()
{
$
(
'
#name
'
).
html
(
$
.
url
().
param
(
'
name
'
));
$
(
"
#deck_share_dialog
"
).
dialog
({
modal
:
true
,
autoOpen
:
false
decks
=
new
DecksController
({
el
:
$
(
"
#deck
"
)
});
addthis
.
init
();
return
$
.
i18n
.
properties
({
cards
=
new
CardsController
({
el
:
$
(
"
#cards_search
"
)
});
$
(
document
).
ready
(
function
()
{
$
.
i18n
.
properties
({
name
:
'
card
'
,
path
:
'
/locales/
'
,
mode
:
'
map
'
,
cache
:
true
,
callback
:
function
()
{
this
.
decks
=
new
DecksController
({
el
:
$
(
"
#deck
"
)
});
this
.
cards_search
=
new
CardsSearchController
({
el
:
$
(
"
#cards_search
"
)
});
this
.
decks
.
deck
(
Deck
.
decode
(
$
.
url
().
param
(
'
cards
'
),
$
.
url
().
param
(
'
name
'
)));
decks
.
load_from_url
();
$
(
'
#search
'
).
submit
(
function
()
{
cards
_search
.
search
(
$
(
'
.search_input
'
).
val
());
cards
.
search
(
$
(
'
.search_input
'
).
val
());
return
false
;
});
$
(
'
#deck_share
'
).
click
(
function
()
{
$
(
"
#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
(
deck
s
.
deck
()
.
url
()));
return
$
(
"
#deck_share_dialog
"
).
dialog
(
'
open
'
);
});
$
(
'
#deck_url_shorten
'
).
click
(
function
()
{
...
...
@@ -697,7 +794,7 @@
url
:
'
https://www.googleapis.com/urlshortener/v1/url
'
,
type
:
'
POST
'
,
data
:
JSON
.
stringify
({
longUrl
:
deck
.
url
()
longUrl
:
deck
s
.
deck
()
.
url
()
}),
contentType
:
'
application/json; charset=utf-8
'
,
success
:
function
(
data
)
{
...
...
@@ -707,80 +804,28 @@
});
});
$
(
'
#deck_load
'
).
change
(
function
()
{
var
file
,
reader
;
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
);
return
decks
.
upload
(
this
.
files
);
});
window
.
addEventListener
(
'
popstate
'
,
function
(
ev
)
{
if
(
ev
.
state
)
{
return
deck
.
refresh
(
ev
.
state
,
false
);
}
});
$
(
'
.main_div
'
).
bind
(
'
drop
'
,
function
(
ev
)
{
decks
.
upload
(
event
.
dataTransfer
.
files
);
return
false
;
});
return
$
(
"
.rename_ope
"
).
click
(
function
()
{
$
(
"
.text,.graphic
"
).
toggleClass
(
"
graphic text
"
);
return
deck
.
render
();
return
deck
s
.
render
();
});
}
});
$
(
"
#deck_share_dialog
"
).
dialog
({
modal
:
true
,
autoOpen
:
false
});
return
addthis
.
init
();
});
}).
call
(
this
);
decks/new/index.html
View file @
0cbac7fa
...
...
@@ -27,7 +27,7 @@
<script
src=
"/vendor/javascripts/less-1.3.1.min.js"
></script>
<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
"
>
<
img
id
=
"
card_image
"
height
=
"
187px
"
width
=
"
130px
"
src
=
"
http://my-card.in/images/cards/ygocore/${id}.jpg
"
alt
=
"
card_name
"
/>
<
/div>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment