1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
// Deck class represents multiple cards.
// Can be arranged in multiple ways.
function Deck (options = {}){
this.cards = [];
// View mode
// infdraw - infinite draw. always appears as if there are multiple cards
// stack - stack mode
// strip
// horizontal
// left (strip-hl)
// right (strip-hr)
// vertical
// top (strip-vt)
// bottom (strip-vb)
this.mode = options.mode;
// Select mode
// above
// below
// around
// one
// all
this.smode = options.smode;
// Select count (-1 = all available)
// above - controls number of cards above clicked are selected
// below - controls number of cards below clicked are selected
// around
// number - number above and below selected
// array - [first number: number above selected] [second number: number below selected]
// one - no effect
// all - no effect
this.sct = options.sct;
// Position
// array of where the deck is centered
this.x = options.pos[0];
this.y = options.pos[1];
this.e = document.createElement("deck");
}
Deck.prototype = {
// Add a card to the front of the deck
appendCard: function(card) {
this.cards.push(card);
this.e.appendChild(card.e);
},
// Add a card to the back of the deck
prependCard: function(card) {
this.cards.unshift(card);
this.e.prepend(card.e);
},
// Add a card at the index specified
addCardAt: function(card, index) {
if(index < 0 || index > this.cards.length)
return
if(index == 0) {
this.prependCard(card);
} else if (index == this.cards.length) {
this.appendCard(card);
} else {
let temp = this.cards.slice(0, index);
temp[temp.length - 1].e.after(card.e);
temp.push(card);
this.cards.unshift(...temp);
}
},
// Swap the cards at the specified indexes
swapCard: function(index1, index2) {
if(index1 < 0 || index1 >= this.cards.length || index2 < 0 || index2 >= this.cards.length)
return
var temp = this.cards[index1]
this.cards[index1] = this.cards[index2];
this.cards[index2] = temp;
this.cards[index1 - 1].e.after(this.cards[index1]);
this.cards[index2 - 1].e.after(this.cards[index2]);
},
// Remove the card at the front of the deck (index length - 1), returns the card removed (if any)
removeFront: function() {
return this.removeCard(this.cards.length - 1);
},
// Remove the card at the back of the deck (index 0), returns the card removed (if any)
removeBack: function() {
return this.removeCard(0);
},
// Remove a card from the deck, returning the card element
removeCard: function(index) {
if(index < 0 || index >= this.cards.length)
return
this.e.removeChild(this.cards[index].e);
return this.cards.splice(index, 1)[0];
}
};
|