summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEinar Egilsson <einar@einaregilsson.com>2012-05-16 23:53:18 +0200
committerEinar Egilsson <einar@einaregilsson.com>2012-05-16 23:53:18 +0200
commitd686ce6aa8c714fec88c6aa72e4d031454e351bd (patch)
treeab5076d1f86fdc39652b7d51612ddce986f8fbd5
parent6462d02c4355adb8f7c963efb1bb89ca88c3d3b8 (diff)
Better demo
-rw-r--r--cards.js58
-rw-r--r--demo.html33
2 files changed, 78 insertions, 13 deletions
diff --git a/cards.js b/cards.js
index 8fe93a3..160b07a 100644
--- a/cards.js
+++ b/cards.js
@@ -73,7 +73,7 @@ var cards = (function() {
"background-image":'url(img/cards.png)',
position:'absolute',
cursor:'pointer'
- }).addClass('card').appendTo($(table));
+ }).addClass('card').data('card', this).appendTo($(table));
this.showCard();
this.moveToFront();
},
@@ -197,11 +197,29 @@ var cards = (function() {
}
}
Container.prototype.extend({
+ addCard : function(card) {
+ this.addCards([card]);
+ },
+
addCards : function(cards) {
for (var i = 0; i < cards.length;i++) {
- this.push(cards[i]);
- cards[i].container = this;
+ var card = cards[i];
+ if (card.container) {
+ card.container.removeCard(card);
+ }
+ this.push(card);
+ card.container = this;
+ }
+ },
+
+ removeCard : function(card) {
+ for (var i=0; i< this.length;i++) {
+ if (this[i] == card) {
+ this.splice(i, 1);
+ return true;
+ }
}
+ return false;
},
init : function(options) {
@@ -211,6 +229,25 @@ var cards = (function() {
this.faceUp = options.faceUp;
},
+ click : function(func, context) {
+ if (!this._click) {
+ this._click = [];
+ var me = this;
+ $('.card').click(function() {
+ var card = $(this).data('card');
+ alert(card.container);
+ if (card.container === me) {
+ alert(1);
+ for (var i = 0; i < me._click; i++) {
+ var obj = me._click[i];
+ obj.func.call(obj.context||window, card);
+ }
+ }
+ });
+ }
+ this._click.push({callback:func, context:context});
+ },
+
render : function(options) {
options = options || {};
var speed = options.speed || ANIMATION_SPEED;
@@ -284,10 +321,19 @@ var cards = (function() {
return 'Deck';
},
- deal : function(count, hands) {
- if (!this.dealCounter) {
- this.dealCounter = count * hands.length;
+ deal : function(count, hands, speed) {
+ var me = this;
+ var i = 0;
+ var totalCount = count*hands.length;
+ function dealOne() {
+ if (me.length == 0 || i > totalCount) {
+ return;
+ }
+ hands[i%hands.length].addCard(me.topCard());
+ i++;
+ hands[i%hands.length].render({callback:dealOne, speed:speed});
}
+ dealOne();
}
});
diff --git a/demo.html b/demo.html
index b78e668..d939922 100644
--- a/demo.html
+++ b/demo.html
@@ -22,6 +22,7 @@
height:150px;
white-space:pre;
padding:4px;
+ display:none;
}
#card-table {
@@ -41,19 +42,19 @@
<script src="jquery-1.7.min.js"></script>
<script src="cards.js"></script>
<script>
+ var exampleCounter = 1;
function execute() {
- var code = $('code').text();
+ var code = $('code#ex' + exampleCounter).text();
eval(code);
+ $('code#ex' + exampleCounter).hide();
+ exampleCounter++;
+ $('code#ex' + exampleCounter).css('display', 'block');
}
</script>
</head>
<body>
<h1>Cards.js</h1>
- <div style="border:solid 1px black; width:90px; height:140px" >
- <embed src="svg/c6.svg" type="image/svg+xml" />
- <embed src="svg/bluecardback.svg" type="image/svg+xml" />
- <div>
- <code>
+ <code id="ex1" style="display:block">
//Start by initalizing the library
cards.init({table:'#card-table'});
//Create a new deck of cards
@@ -61,7 +62,25 @@ deck = new cards.Deck();
//cards.all contains all cards, put them all in the deck
deck.addCards(cards.all);
//No animation here, just get the deck onto the table.
-deck.render({immediate:true});
+deck.render({immediate:true});
+ </code>
+ <code id="ex2">
+//Now lets create a couple of hands, one face down, one face up.
+upperhand = new cards.Hand({faceUp:false, y:50});
+lowerhand = new cards.Hand({faceUp:true, y:350});
+//Deck has a built in method to deal to hands.
+deck.deal(5, [upperhand, lowerhand], 50)
+ </code>
+ <code id="ex3">
+ lowerhand.click(function(card) {
+ alert(card);
+ });
+ deck.click(function(card){
+ if (card === deck.topCard()) {
+ lowerhand.addCard(deck.topCard());
+ lowerhand.render();
+ }
+ });
</code>
<button onclick="execute()">Execute</button>
<div id="card-table">