├── README ├── css ├── .DS_Store ├── images │ ├── face-sad.gif │ ├── throbber.gif │ ├── bamboo1_tile.jpg │ ├── bamboo2_tile.jpg │ ├── bamboo3_tile.jpg │ ├── face-smiley.gif │ ├── light-page-bg.png │ ├── content-border.1.png │ ├── streak-meter-active.png │ ├── x-repeating-sprites.png │ ├── non-repeating-sprites.1.png │ ├── streak-meter-separator.png │ └── streak-meter-empty-challenge.png ├── ui.notify.css ├── layout.css └── application.css ├── deck ├── .DS_Store ├── Cups01.jpg ├── Cups02.jpg ├── Cups03.jpg ├── Cups04.jpg ├── Cups05.jpg ├── Cups06.jpg ├── Cups07.jpg ├── Cups08.jpg ├── Cups09.jpg ├── Cups10.jpg ├── Cups11.jpg ├── Cups12.jpg ├── Cups13.jpg ├── Cups14.jpg ├── Lovers1.jpg ├── Pents01.jpg ├── Pents02.jpg ├── Pents03.jpg ├── Pents04.jpg ├── Pents05.jpg ├── Pents06.jpg ├── Pents07.jpg ├── Pents08.jpg ├── Pents09.jpg ├── Pents10.jpg ├── Pents11.jpg ├── Pents12.jpg ├── Pents13.jpg ├── Pents14.jpg ├── Swords01.jpg ├── Swords02.jpg ├── Swords03.jpg ├── Swords04.jpg ├── Swords05.jpg ├── Swords06.jpg ├── Swords07.jpg ├── Swords08.jpg ├── Swords09.jpg ├── Swords10.jpg ├── Swords11.jpg ├── Swords12.jpg ├── Swords13.jpg ├── Swords14.jpg ├── Wands01.jpg ├── Wands02.jpg ├── Wands03.jpg ├── Wands04.jpg ├── Wands05.jpg ├── Wands06.jpg ├── Wands07.jpg ├── Wands08.jpg ├── Wands09.jpg ├── Wands10.jpg ├── Wands11.jpg ├── Wands12.jpg ├── Wands13.jpg ├── Wands14.jpg ├── RWS_Tarot_09_Hermit.jpg ├── RWS_Tarot_13_Death.jpg ├── RWS_Tarot_15_Devil.jpg ├── RWS_Tarot_16_Tower.jpg ├── RWS_Tarot_17_Star.jpg ├── RWS_Tarot_18_Moon.jpg ├── RWS_Tarot_21_World.jpg ├── RWS_Tarot_01_Magician.jpg ├── RWS_Tarot_03_Empress.jpg ├── RWS_Tarot_04_Emperor.jpg ├── RWS_Tarot_07_Chariot.jpg ├── RWS_Tarot_08_Strength.jpg ├── RWS_Tarot_11_Justice.jpg ├── 343px-RWS_Tarot_00_Fool.jpg ├── 347px-RWS_Tarot_19_Sun.jpg ├── RWS_Tarot_05_Hierophant.jpg ├── RWS_Tarot_12_Hanged_Man.jpg ├── RWS_Tarot_14_Temperance.jpg ├── RWS_Tarot_20_Judgement.jpg ├── RWS_Tarot_10_Wheel_of_Fortune.jpg └── 345px-RWS_Tarot_02_High_Priestess.jpg ├── icons ├── .DS_Store ├── 70-tv.png ├── 02-redo.png ├── 08-chat.png ├── 102-walk.png ├── 103-map.png ├── 11-clock.png ├── 110-bug.png ├── 111-user.png ├── 117-todo.png ├── 12-eye.png ├── 125-food.png ├── 126-moon.png ├── 127-sock.png ├── 128-bone.png ├── 129-golf.png ├── 130-dice.png ├── 133-ufo.png ├── 14-tag.png ├── 141-lamp.png ├── 15-tags.png ├── 171-sun.png ├── 174-imac.png ├── 176-ipad.png ├── 178-city.png ├── 19-gear.png ├── 190-bank.png ├── 20-gear2.png ├── 21-skull.png ├── 23-bird.png ├── 24-gift.png ├── 28-star.png ├── 29-heart.png ├── 30-key.png ├── 31-ipod.png ├── 40-inbox.png ├── 47-fuel.png ├── 53-house.png ├── 54-lock.png ├── 56-cloud.png ├── 59-flag.png ├── 64-zap.png ├── 65-note.png ├── 70-tv@2x.png ├── 72-pin.png ├── 73-radar.png ├── 75-phone.png ├── 76-baby.png ├── 77-ekg.png ├── 94-pill.png ├── 96-book.png ├── 01-refresh.png ├── 02-redo@2x.png ├── 05-shuffle.png ├── 06-magnify.png ├── 08-chat@2x.png ├── 09-chat-2.png ├── 10-medical.png ├── 100-coffee.png ├── 103-map@2x.png ├── 105-piano.png ├── 108-badge.png ├── 110-bug@2x.png ├── 112-group.png ├── 12-eye@2x.png ├── 122-stats.png ├── 13-target.png ├── 131-tower.png ├── 132-ghost.png ├── 133-ufo@2x.png ├── 134-viking.png ├── 138-scales.png ├── 139-flags.png ├── 14-tag@2x.png ├── 146-gavel.png ├── 15-tags@2x.png ├── 153-guitar.png ├── 155-bowtie.png ├── 157-wrench.png ├── 169-8ball.png ├── 171-sun@2x.png ├── 181-hammer.png ├── 186-ruler.png ├── 187-pencil.png ├── 189-plant.png ├── 19-gear@2x.png ├── 194-note-2.png ├── 23-bird@2x.png ├── 24-gift@2x.png ├── 25-weather.png ├── 26-bandaid.png ├── 27-planet.png ├── 28-star@2x.png ├── 30-key@2x.png ├── 31-ipod@2x.png ├── 32-iphone.png ├── 33-cabinet.png ├── 34-coffee.png ├── 36-toolbox.png ├── 42-photos.png ├── 44-shoebox.png ├── 45-movie-1.png ├── 46-movie-2.png ├── 47-fuel@2x.png ├── 49-battery.png ├── 50-beaker.png ├── 51-outlet.png ├── 54-lock@2x.png ├── 55-network.png ├── 59-flag@2x.png ├── 63-runner.png ├── 64-zap@2x.png ├── 65-note@2x.png ├── 67-tshirt.png ├── 69-display.png ├── 71-compass.png ├── 72-pin@2x.png ├── 76-baby@2x.png ├── 77-ekg@2x.png ├── 82-dog-paw.png ├── 85-trophy.png ├── 86-camera.png ├── 89-dumbell.png ├── 94-pill@2x.png ├── 96-book@2x.png ├── 97-puzzle.png ├── 98-palette.png ├── 01-refresh@2x.png ├── 03-loopback.png ├── 04-squiggle.png ├── 05-shuffle@2x.png ├── 06-magnify@2x.png ├── 07-map-marker.png ├── 09-chat-2@2x.png ├── 10-medical@2x.png ├── 100-coffee@2x.png ├── 101-gameplan.png ├── 102-walk@2x.png ├── 105-piano@2x.png ├── 106-sliders.png ├── 108-badge@2x.png ├── 109-chicken.png ├── 11-clock@2x.png ├── 111-user@2x.png ├── 112-group@2x.png ├── 114-balloon.png ├── 117-todo@2x.png ├── 121-landscape.png ├── 122-stats@2x.png ├── 123-id-card.png ├── 124-bullhorn.png ├── 125-food@2x.png ├── 126-moon@2x.png ├── 127-sock@2x.png ├── 128-bone@2x.png ├── 129-golf@2x.png ├── 13-target@2x.png ├── 130-dice@2x.png ├── 131-tower@2x.png ├── 132-ghost@2x.png ├── 134-viking@2x.png ├── 136-tractor.png ├── 138-scales@2x.png ├── 139-flags@2x.png ├── 140-gradhat.png ├── 141-lamp@2x.png ├── 144-martini.png ├── 145-persondot.png ├── 146-gavel@2x.png ├── 147-popsicle.png ├── 148-doghouse.png ├── 149-windmill.png ├── 150-sailboat.png ├── 151-telescope.png ├── 152-rolodex.png ├── 153-guitar@2x.png ├── 154-necktie.png ├── 155-bowtie@2x.png ├── 157-wrench@2x.png ├── 158-wrench-2.png ├── 159-voicemail.png ├── 16-line-chart.png ├── 162-receipt.png ├── 163-glasses-1.png ├── 164-glasses-2.png ├── 165-glasses-3.png ├── 166-newspaper.png ├── 169-8ball@2x.png ├── 17-bar-chart.png ├── 170-butterfly.png ├── 172-pricetag.png ├── 174-imac@2x.png ├── 175-macbook.png ├── 176-ipad@2x.png ├── 177-building.png ├── 178-city@2x.png ├── 179-notepad.png ├── 18-envelope.png ├── 181-hammer@2x.png ├── 184-warning.png ├── 185-printer.png ├── 186-ruler@2x.png ├── 187-pencil@2x.png ├── 189-plant@2x.png ├── 190-bank@2x.png ├── 194-note-2@2x.png ├── 195-barcode.png ├── 196-radiation.png ├── 20-gear2@2x.png ├── 21-skull@2x.png ├── 25-weather@2x.png ├── 26-bandaid@2x.png ├── 27-planet@2x.png ├── 29-heart@2x.png ├── 32-iphone@2x.png ├── 33-cabinet@2x.png ├── 34-coffee@2x.png ├── 35-shopping.png ├── 36-toolbox@2x.png ├── 37-suitcase.png ├── 38-airplane.png ├── 39-spraycan.png ├── 40-inbox@2x.png ├── 42-photos@2x.png ├── 43-film-roll.png ├── 44-shoebox@2x.png ├── 45-movie-1@2x.png ├── 46-movie-2@2x.png ├── 49-battery@2x.png ├── 50-beaker@2x.png ├── 51-outlet@2x.png ├── 52-pine-tree.png ├── 53-house@2x.png ├── 55-network@2x.png ├── 56-cloud@2x.png ├── 57-download.png ├── 58-bookmark.png ├── 60-signpost.png ├── 61-brightness.png ├── 62-contrast.png ├── 63-runner@2x.png ├── 66-microphone.png ├── 67-tshirt@2x.png ├── 68-paperclip.png ├── 69-display@2x.png ├── 71-compass@2x.png ├── 73-radar@2x.png ├── 74-location.png ├── 75-phone@2x.png ├── 78-stopwatch.png ├── 81-dashboard.png ├── 82-dog-paw@2x.png ├── 83-calendar.png ├── 84-lightbulb.png ├── 85-trophy@2x.png ├── 86-camera@2x.png ├── 87-wine-glass.png ├── 88-beer-mug.png ├── 89-dumbell@2x.png ├── 90-life-buoy.png ├── 91-beaker-2.png ├── 92-test-tube.png ├── 95-equalizer.png ├── 97-puzzle@2x.png ├── 98-palette@2x.png ├── 99-umbrella.png ├── 03-loopback@2x.png ├── 04-squiggle@2x.png ├── 101-gameplan@2x.png ├── 104-index-cards.png ├── 106-sliders@2x.png ├── 107-widescreen.png ├── 109-chicken@2x.png ├── 113-navigation.png ├── 114-balloon@2x.png ├── 116-controller.png ├── 118-coat-hanger.png ├── 119-piggy-bank.png ├── 120-headphones.png ├── 123-id-card@2x.png ├── 124-bullhorn@2x.png ├── 135-hockeymask.png ├── 136-tractor@2x.png ├── 140-gradhat@2x.png ├── 142-wine-bottle.png ├── 144-martini@2x.png ├── 147-popsicle@2x.png ├── 148-doghouse@2x.png ├── 149-windmill@2x.png ├── 150-sailboat@2x.png ├── 152-rolodex@2x.png ├── 154-necktie@2x.png ├── 156-controller.png ├── 158-wrench-2@2x.png ├── 160-voicemail-2.png ├── 161-calculator.png ├── 162-receipt@2x.png ├── 17-bar-chart@2x.png ├── 172-pricetag@2x.png ├── 173-eyedropper.png ├── 175-macbook@2x.png ├── 177-building@2x.png ├── 179-notepad@2x.png ├── 18-envelope@2x.png ├── 180-stickynote.png ├── 183-genie-lamp.png ├── 184-warning@2x.png ├── 185-printer@2x.png ├── 191-collection.png ├── 192-credit-card.png ├── 195-barcode@2x.png ├── 198-card-spades.png ├── 199-card-hearts.png ├── 200-card-clubs.png ├── 35-shopping@2x.png ├── 37-suitcase@2x.png ├── 38-airplane@2x.png ├── 39-spraycan@2x.png ├── 43-film-roll@2x.png ├── 52-pine-tree@2x.png ├── 57-download@2x.png ├── 58-bookmark@2x.png ├── 60-signpost@2x.png ├── 62-contrast@2x.png ├── 68-paperclip@2x.png ├── 74-location@2x.png ├── 78-stopwatch@2x.png ├── 79-medical-bag.png ├── 81-dashboard@2x.png ├── 83-calendar@2x.png ├── 84-lightbulb@2x.png ├── 88-beer-mug@2x.png ├── 90-life-buoy@2x.png ├── 91-beaker-2@2x.png ├── 92-test-tube@2x.png ├── 93-thermometer.png ├── 95-equalizer@2x.png ├── 99-umbrella@2x.png ├── 07-map-marker@2x.png ├── 104-index-cards@2x.png ├── 107-widescreen@2x.png ├── 113-navigation@2x.png ├── 115-bow-and-arrow.png ├── 116-controller@2x.png ├── 118-coat-hanger@2x.png ├── 119-piggy-bank@2x.png ├── 120-headphones@2x.png ├── 121-landscape@2x.png ├── 135-hockeymask@2x.png ├── 137-presentation.png ├── 142-wine-bottle@2x.png ├── 143-liquor-bottle.png ├── 145-persondot@2x.png ├── 151-telescope@2x.png ├── 156-controller@2x.png ├── 159-voicemail@2x.png ├── 16-line-chart@2x.png ├── 160-voicemail-2@2x.png ├── 161-calculator@2x.png ├── 163-glasses-1@2x.png ├── 164-glasses-2@2x.png ├── 165-glasses-3@2x.png ├── 166-newspaper@2x.png ├── 167-upload-photo.png ├── 168-upload-photo-2.png ├── 170-butterfly@2x.png ├── 173-eyedropper@2x.png ├── 180-stickynote@2x.png ├── 182-messenger-bag.png ├── 183-genie-lamp@2x.png ├── 188-paint-roller.png ├── 191-collection@2x.png ├── 192-credit-card@2x.png ├── 193-location-arrow.png ├── 196-radiation@2x.png ├── 197-card-diamonds.png ├── 198-card-spades@2x.png ├── 199-card-hearts@2x.png ├── 200-card-clubs@2x.png ├── 22-skull-n-bones.png ├── 41-picture-frame.png ├── 48-fork-and-knife.png ├── 61-brightness@2x.png ├── 66-microphone@2x.png ├── 79-medical-bag@2x.png ├── 80-shopping-cart.png ├── 87-wine-glass@2x.png ├── 93-thermometer@2x.png ├── 115-bow-and-arrow@2x.png ├── 137-presentation@2x.png ├── 143-liquor-bottle@2x.png ├── 167-upload-photo@2x.png ├── 182-messenger-bag@2x.png ├── 188-paint-roller@2x.png ├── 197-card-diamonds@2x.png ├── 22-skull-n-bones@2x.png ├── 41-picture-frame@2x.png ├── 48-fork-and-knife@2x.png ├── 80-shopping-cart@2x.png ├── 168-upload-photo-2@2x.png └── 193-location-arrow@2x.png ├── app ├── views │ ├── contacts.html │ ├── contact.html │ └── edit_contact.html ├── application.coffee ├── controllers │ ├── cards.coffee │ ├── cards.js │ ├── sidebar.coffee │ ├── sidebarcards.coffee │ ├── sidebar.js │ ├── sidebarcards.js │ ├── contacts.coffee │ └── contacts.js ├── util.coffee ├── application.js ├── utils.js ├── util.js └── models │ ├── contact.coffee │ └── contact.js ├── .project ├── lib ├── spine.model.local.js ├── spine.model.filter.js ├── spine.list.js ├── jquery.link.js ├── spine.model.ajax.js ├── spine.js └── json2.js ├── javascripts └── jquery.notify.min.js └── index.html /README: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /css/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/css/.DS_Store -------------------------------------------------------------------------------- /deck/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/.DS_Store -------------------------------------------------------------------------------- /deck/Cups01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Cups01.jpg -------------------------------------------------------------------------------- /deck/Cups02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Cups02.jpg -------------------------------------------------------------------------------- /deck/Cups03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Cups03.jpg -------------------------------------------------------------------------------- /deck/Cups04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Cups04.jpg -------------------------------------------------------------------------------- /deck/Cups05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Cups05.jpg -------------------------------------------------------------------------------- /deck/Cups06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Cups06.jpg -------------------------------------------------------------------------------- /deck/Cups07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Cups07.jpg -------------------------------------------------------------------------------- /deck/Cups08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Cups08.jpg -------------------------------------------------------------------------------- /deck/Cups09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Cups09.jpg -------------------------------------------------------------------------------- /deck/Cups10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Cups10.jpg -------------------------------------------------------------------------------- /deck/Cups11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Cups11.jpg -------------------------------------------------------------------------------- /deck/Cups12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Cups12.jpg -------------------------------------------------------------------------------- /deck/Cups13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Cups13.jpg -------------------------------------------------------------------------------- /deck/Cups14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Cups14.jpg -------------------------------------------------------------------------------- /icons/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/.DS_Store -------------------------------------------------------------------------------- /icons/70-tv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/70-tv.png -------------------------------------------------------------------------------- /deck/Lovers1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Lovers1.jpg -------------------------------------------------------------------------------- /deck/Pents01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Pents01.jpg -------------------------------------------------------------------------------- /deck/Pents02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Pents02.jpg -------------------------------------------------------------------------------- /deck/Pents03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Pents03.jpg -------------------------------------------------------------------------------- /deck/Pents04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Pents04.jpg -------------------------------------------------------------------------------- /deck/Pents05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Pents05.jpg -------------------------------------------------------------------------------- /deck/Pents06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Pents06.jpg -------------------------------------------------------------------------------- /deck/Pents07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Pents07.jpg -------------------------------------------------------------------------------- /deck/Pents08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Pents08.jpg -------------------------------------------------------------------------------- /deck/Pents09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Pents09.jpg -------------------------------------------------------------------------------- /deck/Pents10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Pents10.jpg -------------------------------------------------------------------------------- /deck/Pents11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Pents11.jpg -------------------------------------------------------------------------------- /deck/Pents12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Pents12.jpg -------------------------------------------------------------------------------- /deck/Pents13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Pents13.jpg -------------------------------------------------------------------------------- /deck/Pents14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Pents14.jpg -------------------------------------------------------------------------------- /deck/Swords01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Swords01.jpg -------------------------------------------------------------------------------- /deck/Swords02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Swords02.jpg -------------------------------------------------------------------------------- /deck/Swords03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Swords03.jpg -------------------------------------------------------------------------------- /deck/Swords04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Swords04.jpg -------------------------------------------------------------------------------- /deck/Swords05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Swords05.jpg -------------------------------------------------------------------------------- /deck/Swords06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Swords06.jpg -------------------------------------------------------------------------------- /deck/Swords07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Swords07.jpg -------------------------------------------------------------------------------- /deck/Swords08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Swords08.jpg -------------------------------------------------------------------------------- /deck/Swords09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Swords09.jpg -------------------------------------------------------------------------------- /deck/Swords10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Swords10.jpg -------------------------------------------------------------------------------- /deck/Swords11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Swords11.jpg -------------------------------------------------------------------------------- /deck/Swords12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Swords12.jpg -------------------------------------------------------------------------------- /deck/Swords13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Swords13.jpg -------------------------------------------------------------------------------- /deck/Swords14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Swords14.jpg -------------------------------------------------------------------------------- /deck/Wands01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Wands01.jpg -------------------------------------------------------------------------------- /deck/Wands02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Wands02.jpg -------------------------------------------------------------------------------- /deck/Wands03.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Wands03.jpg -------------------------------------------------------------------------------- /deck/Wands04.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Wands04.jpg -------------------------------------------------------------------------------- /deck/Wands05.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Wands05.jpg -------------------------------------------------------------------------------- /deck/Wands06.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Wands06.jpg -------------------------------------------------------------------------------- /deck/Wands07.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Wands07.jpg -------------------------------------------------------------------------------- /deck/Wands08.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Wands08.jpg -------------------------------------------------------------------------------- /deck/Wands09.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Wands09.jpg -------------------------------------------------------------------------------- /deck/Wands10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Wands10.jpg -------------------------------------------------------------------------------- /deck/Wands11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Wands11.jpg -------------------------------------------------------------------------------- /deck/Wands12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Wands12.jpg -------------------------------------------------------------------------------- /deck/Wands13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Wands13.jpg -------------------------------------------------------------------------------- /deck/Wands14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/Wands14.jpg -------------------------------------------------------------------------------- /icons/02-redo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/02-redo.png -------------------------------------------------------------------------------- /icons/08-chat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/08-chat.png -------------------------------------------------------------------------------- /icons/102-walk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/102-walk.png -------------------------------------------------------------------------------- /icons/103-map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/103-map.png -------------------------------------------------------------------------------- /icons/11-clock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/11-clock.png -------------------------------------------------------------------------------- /icons/110-bug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/110-bug.png -------------------------------------------------------------------------------- /icons/111-user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/111-user.png -------------------------------------------------------------------------------- /icons/117-todo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/117-todo.png -------------------------------------------------------------------------------- /icons/12-eye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/12-eye.png -------------------------------------------------------------------------------- /icons/125-food.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/125-food.png -------------------------------------------------------------------------------- /icons/126-moon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/126-moon.png -------------------------------------------------------------------------------- /icons/127-sock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/127-sock.png -------------------------------------------------------------------------------- /icons/128-bone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/128-bone.png -------------------------------------------------------------------------------- /icons/129-golf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/129-golf.png -------------------------------------------------------------------------------- /icons/130-dice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/130-dice.png -------------------------------------------------------------------------------- /icons/133-ufo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/133-ufo.png -------------------------------------------------------------------------------- /icons/14-tag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/14-tag.png -------------------------------------------------------------------------------- /icons/141-lamp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/141-lamp.png -------------------------------------------------------------------------------- /icons/15-tags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/15-tags.png -------------------------------------------------------------------------------- /icons/171-sun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/171-sun.png -------------------------------------------------------------------------------- /icons/174-imac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/174-imac.png -------------------------------------------------------------------------------- /icons/176-ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/176-ipad.png -------------------------------------------------------------------------------- /icons/178-city.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/178-city.png -------------------------------------------------------------------------------- /icons/19-gear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/19-gear.png -------------------------------------------------------------------------------- /icons/190-bank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/190-bank.png -------------------------------------------------------------------------------- /icons/20-gear2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/20-gear2.png -------------------------------------------------------------------------------- /icons/21-skull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/21-skull.png -------------------------------------------------------------------------------- /icons/23-bird.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/23-bird.png -------------------------------------------------------------------------------- /icons/24-gift.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/24-gift.png -------------------------------------------------------------------------------- /icons/28-star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/28-star.png -------------------------------------------------------------------------------- /icons/29-heart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/29-heart.png -------------------------------------------------------------------------------- /icons/30-key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/30-key.png -------------------------------------------------------------------------------- /icons/31-ipod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/31-ipod.png -------------------------------------------------------------------------------- /icons/40-inbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/40-inbox.png -------------------------------------------------------------------------------- /icons/47-fuel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/47-fuel.png -------------------------------------------------------------------------------- /icons/53-house.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/53-house.png -------------------------------------------------------------------------------- /icons/54-lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/54-lock.png -------------------------------------------------------------------------------- /icons/56-cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/56-cloud.png -------------------------------------------------------------------------------- /icons/59-flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/59-flag.png -------------------------------------------------------------------------------- /icons/64-zap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/64-zap.png -------------------------------------------------------------------------------- /icons/65-note.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/65-note.png -------------------------------------------------------------------------------- /icons/70-tv@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/70-tv@2x.png -------------------------------------------------------------------------------- /icons/72-pin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/72-pin.png -------------------------------------------------------------------------------- /icons/73-radar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/73-radar.png -------------------------------------------------------------------------------- /icons/75-phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/75-phone.png -------------------------------------------------------------------------------- /icons/76-baby.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/76-baby.png -------------------------------------------------------------------------------- /icons/77-ekg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/77-ekg.png -------------------------------------------------------------------------------- /icons/94-pill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/94-pill.png -------------------------------------------------------------------------------- /icons/96-book.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/96-book.png -------------------------------------------------------------------------------- /icons/01-refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/01-refresh.png -------------------------------------------------------------------------------- /icons/02-redo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/02-redo@2x.png -------------------------------------------------------------------------------- /icons/05-shuffle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/05-shuffle.png -------------------------------------------------------------------------------- /icons/06-magnify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/06-magnify.png -------------------------------------------------------------------------------- /icons/08-chat@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/08-chat@2x.png -------------------------------------------------------------------------------- /icons/09-chat-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/09-chat-2.png -------------------------------------------------------------------------------- /icons/10-medical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/10-medical.png -------------------------------------------------------------------------------- /icons/100-coffee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/100-coffee.png -------------------------------------------------------------------------------- /icons/103-map@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/103-map@2x.png -------------------------------------------------------------------------------- /icons/105-piano.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/105-piano.png -------------------------------------------------------------------------------- /icons/108-badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/108-badge.png -------------------------------------------------------------------------------- /icons/110-bug@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/110-bug@2x.png -------------------------------------------------------------------------------- /icons/112-group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/112-group.png -------------------------------------------------------------------------------- /icons/12-eye@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/12-eye@2x.png -------------------------------------------------------------------------------- /icons/122-stats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/122-stats.png -------------------------------------------------------------------------------- /icons/13-target.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/13-target.png -------------------------------------------------------------------------------- /icons/131-tower.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/131-tower.png -------------------------------------------------------------------------------- /icons/132-ghost.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/132-ghost.png -------------------------------------------------------------------------------- /icons/133-ufo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/133-ufo@2x.png -------------------------------------------------------------------------------- /icons/134-viking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/134-viking.png -------------------------------------------------------------------------------- /icons/138-scales.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/138-scales.png -------------------------------------------------------------------------------- /icons/139-flags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/139-flags.png -------------------------------------------------------------------------------- /icons/14-tag@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/14-tag@2x.png -------------------------------------------------------------------------------- /icons/146-gavel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/146-gavel.png -------------------------------------------------------------------------------- /icons/15-tags@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/15-tags@2x.png -------------------------------------------------------------------------------- /icons/153-guitar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/153-guitar.png -------------------------------------------------------------------------------- /icons/155-bowtie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/155-bowtie.png -------------------------------------------------------------------------------- /icons/157-wrench.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/157-wrench.png -------------------------------------------------------------------------------- /icons/169-8ball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/169-8ball.png -------------------------------------------------------------------------------- /icons/171-sun@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/171-sun@2x.png -------------------------------------------------------------------------------- /icons/181-hammer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/181-hammer.png -------------------------------------------------------------------------------- /icons/186-ruler.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/186-ruler.png -------------------------------------------------------------------------------- /icons/187-pencil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/187-pencil.png -------------------------------------------------------------------------------- /icons/189-plant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/189-plant.png -------------------------------------------------------------------------------- /icons/19-gear@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/19-gear@2x.png -------------------------------------------------------------------------------- /icons/194-note-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/194-note-2.png -------------------------------------------------------------------------------- /icons/23-bird@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/23-bird@2x.png -------------------------------------------------------------------------------- /icons/24-gift@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/24-gift@2x.png -------------------------------------------------------------------------------- /icons/25-weather.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/25-weather.png -------------------------------------------------------------------------------- /icons/26-bandaid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/26-bandaid.png -------------------------------------------------------------------------------- /icons/27-planet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/27-planet.png -------------------------------------------------------------------------------- /icons/28-star@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/28-star@2x.png -------------------------------------------------------------------------------- /icons/30-key@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/30-key@2x.png -------------------------------------------------------------------------------- /icons/31-ipod@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/31-ipod@2x.png -------------------------------------------------------------------------------- /icons/32-iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/32-iphone.png -------------------------------------------------------------------------------- /icons/33-cabinet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/33-cabinet.png -------------------------------------------------------------------------------- /icons/34-coffee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/34-coffee.png -------------------------------------------------------------------------------- /icons/36-toolbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/36-toolbox.png -------------------------------------------------------------------------------- /icons/42-photos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/42-photos.png -------------------------------------------------------------------------------- /icons/44-shoebox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/44-shoebox.png -------------------------------------------------------------------------------- /icons/45-movie-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/45-movie-1.png -------------------------------------------------------------------------------- /icons/46-movie-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/46-movie-2.png -------------------------------------------------------------------------------- /icons/47-fuel@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/47-fuel@2x.png -------------------------------------------------------------------------------- /icons/49-battery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/49-battery.png -------------------------------------------------------------------------------- /icons/50-beaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/50-beaker.png -------------------------------------------------------------------------------- /icons/51-outlet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/51-outlet.png -------------------------------------------------------------------------------- /icons/54-lock@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/54-lock@2x.png -------------------------------------------------------------------------------- /icons/55-network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/55-network.png -------------------------------------------------------------------------------- /icons/59-flag@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/59-flag@2x.png -------------------------------------------------------------------------------- /icons/63-runner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/63-runner.png -------------------------------------------------------------------------------- /icons/64-zap@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/64-zap@2x.png -------------------------------------------------------------------------------- /icons/65-note@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/65-note@2x.png -------------------------------------------------------------------------------- /icons/67-tshirt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/67-tshirt.png -------------------------------------------------------------------------------- /icons/69-display.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/69-display.png -------------------------------------------------------------------------------- /icons/71-compass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/71-compass.png -------------------------------------------------------------------------------- /icons/72-pin@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/72-pin@2x.png -------------------------------------------------------------------------------- /icons/76-baby@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/76-baby@2x.png -------------------------------------------------------------------------------- /icons/77-ekg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/77-ekg@2x.png -------------------------------------------------------------------------------- /icons/82-dog-paw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/82-dog-paw.png -------------------------------------------------------------------------------- /icons/85-trophy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/85-trophy.png -------------------------------------------------------------------------------- /icons/86-camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/86-camera.png -------------------------------------------------------------------------------- /icons/89-dumbell.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/89-dumbell.png -------------------------------------------------------------------------------- /icons/94-pill@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/94-pill@2x.png -------------------------------------------------------------------------------- /icons/96-book@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/96-book@2x.png -------------------------------------------------------------------------------- /icons/97-puzzle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/97-puzzle.png -------------------------------------------------------------------------------- /icons/98-palette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/98-palette.png -------------------------------------------------------------------------------- /css/images/face-sad.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/css/images/face-sad.gif -------------------------------------------------------------------------------- /css/images/throbber.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/css/images/throbber.gif -------------------------------------------------------------------------------- /icons/01-refresh@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/01-refresh@2x.png -------------------------------------------------------------------------------- /icons/03-loopback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/03-loopback.png -------------------------------------------------------------------------------- /icons/04-squiggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/04-squiggle.png -------------------------------------------------------------------------------- /icons/05-shuffle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/05-shuffle@2x.png -------------------------------------------------------------------------------- /icons/06-magnify@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/06-magnify@2x.png -------------------------------------------------------------------------------- /icons/07-map-marker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/07-map-marker.png -------------------------------------------------------------------------------- /icons/09-chat-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/09-chat-2@2x.png -------------------------------------------------------------------------------- /icons/10-medical@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/10-medical@2x.png -------------------------------------------------------------------------------- /icons/100-coffee@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/100-coffee@2x.png -------------------------------------------------------------------------------- /icons/101-gameplan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/101-gameplan.png -------------------------------------------------------------------------------- /icons/102-walk@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/102-walk@2x.png -------------------------------------------------------------------------------- /icons/105-piano@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/105-piano@2x.png -------------------------------------------------------------------------------- /icons/106-sliders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/106-sliders.png -------------------------------------------------------------------------------- /icons/108-badge@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/108-badge@2x.png -------------------------------------------------------------------------------- /icons/109-chicken.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/109-chicken.png -------------------------------------------------------------------------------- /icons/11-clock@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/11-clock@2x.png -------------------------------------------------------------------------------- /icons/111-user@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/111-user@2x.png -------------------------------------------------------------------------------- /icons/112-group@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/112-group@2x.png -------------------------------------------------------------------------------- /icons/114-balloon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/114-balloon.png -------------------------------------------------------------------------------- /icons/117-todo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/117-todo@2x.png -------------------------------------------------------------------------------- /icons/121-landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/121-landscape.png -------------------------------------------------------------------------------- /icons/122-stats@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/122-stats@2x.png -------------------------------------------------------------------------------- /icons/123-id-card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/123-id-card.png -------------------------------------------------------------------------------- /icons/124-bullhorn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/124-bullhorn.png -------------------------------------------------------------------------------- /icons/125-food@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/125-food@2x.png -------------------------------------------------------------------------------- /icons/126-moon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/126-moon@2x.png -------------------------------------------------------------------------------- /icons/127-sock@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/127-sock@2x.png -------------------------------------------------------------------------------- /icons/128-bone@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/128-bone@2x.png -------------------------------------------------------------------------------- /icons/129-golf@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/129-golf@2x.png -------------------------------------------------------------------------------- /icons/13-target@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/13-target@2x.png -------------------------------------------------------------------------------- /icons/130-dice@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/130-dice@2x.png -------------------------------------------------------------------------------- /icons/131-tower@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/131-tower@2x.png -------------------------------------------------------------------------------- /icons/132-ghost@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/132-ghost@2x.png -------------------------------------------------------------------------------- /icons/134-viking@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/134-viking@2x.png -------------------------------------------------------------------------------- /icons/136-tractor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/136-tractor.png -------------------------------------------------------------------------------- /icons/138-scales@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/138-scales@2x.png -------------------------------------------------------------------------------- /icons/139-flags@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/139-flags@2x.png -------------------------------------------------------------------------------- /icons/140-gradhat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/140-gradhat.png -------------------------------------------------------------------------------- /icons/141-lamp@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/141-lamp@2x.png -------------------------------------------------------------------------------- /icons/144-martini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/144-martini.png -------------------------------------------------------------------------------- /icons/145-persondot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/145-persondot.png -------------------------------------------------------------------------------- /icons/146-gavel@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/146-gavel@2x.png -------------------------------------------------------------------------------- /icons/147-popsicle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/147-popsicle.png -------------------------------------------------------------------------------- /icons/148-doghouse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/148-doghouse.png -------------------------------------------------------------------------------- /icons/149-windmill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/149-windmill.png -------------------------------------------------------------------------------- /icons/150-sailboat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/150-sailboat.png -------------------------------------------------------------------------------- /icons/151-telescope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/151-telescope.png -------------------------------------------------------------------------------- /icons/152-rolodex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/152-rolodex.png -------------------------------------------------------------------------------- /icons/153-guitar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/153-guitar@2x.png -------------------------------------------------------------------------------- /icons/154-necktie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/154-necktie.png -------------------------------------------------------------------------------- /icons/155-bowtie@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/155-bowtie@2x.png -------------------------------------------------------------------------------- /icons/157-wrench@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/157-wrench@2x.png -------------------------------------------------------------------------------- /icons/158-wrench-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/158-wrench-2.png -------------------------------------------------------------------------------- /icons/159-voicemail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/159-voicemail.png -------------------------------------------------------------------------------- /icons/16-line-chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/16-line-chart.png -------------------------------------------------------------------------------- /icons/162-receipt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/162-receipt.png -------------------------------------------------------------------------------- /icons/163-glasses-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/163-glasses-1.png -------------------------------------------------------------------------------- /icons/164-glasses-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/164-glasses-2.png -------------------------------------------------------------------------------- /icons/165-glasses-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/165-glasses-3.png -------------------------------------------------------------------------------- /icons/166-newspaper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/166-newspaper.png -------------------------------------------------------------------------------- /icons/169-8ball@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/169-8ball@2x.png -------------------------------------------------------------------------------- /icons/17-bar-chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/17-bar-chart.png -------------------------------------------------------------------------------- /icons/170-butterfly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/170-butterfly.png -------------------------------------------------------------------------------- /icons/172-pricetag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/172-pricetag.png -------------------------------------------------------------------------------- /icons/174-imac@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/174-imac@2x.png -------------------------------------------------------------------------------- /icons/175-macbook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/175-macbook.png -------------------------------------------------------------------------------- /icons/176-ipad@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/176-ipad@2x.png -------------------------------------------------------------------------------- /icons/177-building.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/177-building.png -------------------------------------------------------------------------------- /icons/178-city@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/178-city@2x.png -------------------------------------------------------------------------------- /icons/179-notepad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/179-notepad.png -------------------------------------------------------------------------------- /icons/18-envelope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/18-envelope.png -------------------------------------------------------------------------------- /icons/181-hammer@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/181-hammer@2x.png -------------------------------------------------------------------------------- /icons/184-warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/184-warning.png -------------------------------------------------------------------------------- /icons/185-printer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/185-printer.png -------------------------------------------------------------------------------- /icons/186-ruler@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/186-ruler@2x.png -------------------------------------------------------------------------------- /icons/187-pencil@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/187-pencil@2x.png -------------------------------------------------------------------------------- /icons/189-plant@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/189-plant@2x.png -------------------------------------------------------------------------------- /icons/190-bank@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/190-bank@2x.png -------------------------------------------------------------------------------- /icons/194-note-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/194-note-2@2x.png -------------------------------------------------------------------------------- /icons/195-barcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/195-barcode.png -------------------------------------------------------------------------------- /icons/196-radiation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/196-radiation.png -------------------------------------------------------------------------------- /icons/20-gear2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/20-gear2@2x.png -------------------------------------------------------------------------------- /icons/21-skull@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/21-skull@2x.png -------------------------------------------------------------------------------- /icons/25-weather@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/25-weather@2x.png -------------------------------------------------------------------------------- /icons/26-bandaid@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/26-bandaid@2x.png -------------------------------------------------------------------------------- /icons/27-planet@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/27-planet@2x.png -------------------------------------------------------------------------------- /icons/29-heart@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/29-heart@2x.png -------------------------------------------------------------------------------- /icons/32-iphone@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/32-iphone@2x.png -------------------------------------------------------------------------------- /icons/33-cabinet@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/33-cabinet@2x.png -------------------------------------------------------------------------------- /icons/34-coffee@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/34-coffee@2x.png -------------------------------------------------------------------------------- /icons/35-shopping.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/35-shopping.png -------------------------------------------------------------------------------- /icons/36-toolbox@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/36-toolbox@2x.png -------------------------------------------------------------------------------- /icons/37-suitcase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/37-suitcase.png -------------------------------------------------------------------------------- /icons/38-airplane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/38-airplane.png -------------------------------------------------------------------------------- /icons/39-spraycan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/39-spraycan.png -------------------------------------------------------------------------------- /icons/40-inbox@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/40-inbox@2x.png -------------------------------------------------------------------------------- /icons/42-photos@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/42-photos@2x.png -------------------------------------------------------------------------------- /icons/43-film-roll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/43-film-roll.png -------------------------------------------------------------------------------- /icons/44-shoebox@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/44-shoebox@2x.png -------------------------------------------------------------------------------- /icons/45-movie-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/45-movie-1@2x.png -------------------------------------------------------------------------------- /icons/46-movie-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/46-movie-2@2x.png -------------------------------------------------------------------------------- /icons/49-battery@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/49-battery@2x.png -------------------------------------------------------------------------------- /icons/50-beaker@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/50-beaker@2x.png -------------------------------------------------------------------------------- /icons/51-outlet@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/51-outlet@2x.png -------------------------------------------------------------------------------- /icons/52-pine-tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/52-pine-tree.png -------------------------------------------------------------------------------- /icons/53-house@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/53-house@2x.png -------------------------------------------------------------------------------- /icons/55-network@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/55-network@2x.png -------------------------------------------------------------------------------- /icons/56-cloud@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/56-cloud@2x.png -------------------------------------------------------------------------------- /icons/57-download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/57-download.png -------------------------------------------------------------------------------- /icons/58-bookmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/58-bookmark.png -------------------------------------------------------------------------------- /icons/60-signpost.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/60-signpost.png -------------------------------------------------------------------------------- /icons/61-brightness.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/61-brightness.png -------------------------------------------------------------------------------- /icons/62-contrast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/62-contrast.png -------------------------------------------------------------------------------- /icons/63-runner@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/63-runner@2x.png -------------------------------------------------------------------------------- /icons/66-microphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/66-microphone.png -------------------------------------------------------------------------------- /icons/67-tshirt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/67-tshirt@2x.png -------------------------------------------------------------------------------- /icons/68-paperclip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/68-paperclip.png -------------------------------------------------------------------------------- /icons/69-display@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/69-display@2x.png -------------------------------------------------------------------------------- /icons/71-compass@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/71-compass@2x.png -------------------------------------------------------------------------------- /icons/73-radar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/73-radar@2x.png -------------------------------------------------------------------------------- /icons/74-location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/74-location.png -------------------------------------------------------------------------------- /icons/75-phone@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/75-phone@2x.png -------------------------------------------------------------------------------- /icons/78-stopwatch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/78-stopwatch.png -------------------------------------------------------------------------------- /icons/81-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/81-dashboard.png -------------------------------------------------------------------------------- /icons/82-dog-paw@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/82-dog-paw@2x.png -------------------------------------------------------------------------------- /icons/83-calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/83-calendar.png -------------------------------------------------------------------------------- /icons/84-lightbulb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/84-lightbulb.png -------------------------------------------------------------------------------- /icons/85-trophy@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/85-trophy@2x.png -------------------------------------------------------------------------------- /icons/86-camera@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/86-camera@2x.png -------------------------------------------------------------------------------- /icons/87-wine-glass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/87-wine-glass.png -------------------------------------------------------------------------------- /icons/88-beer-mug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/88-beer-mug.png -------------------------------------------------------------------------------- /icons/89-dumbell@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/89-dumbell@2x.png -------------------------------------------------------------------------------- /icons/90-life-buoy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/90-life-buoy.png -------------------------------------------------------------------------------- /icons/91-beaker-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/91-beaker-2.png -------------------------------------------------------------------------------- /icons/92-test-tube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/92-test-tube.png -------------------------------------------------------------------------------- /icons/95-equalizer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/95-equalizer.png -------------------------------------------------------------------------------- /icons/97-puzzle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/97-puzzle@2x.png -------------------------------------------------------------------------------- /icons/98-palette@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/98-palette@2x.png -------------------------------------------------------------------------------- /icons/99-umbrella.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/99-umbrella.png -------------------------------------------------------------------------------- /icons/03-loopback@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/03-loopback@2x.png -------------------------------------------------------------------------------- /icons/04-squiggle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/04-squiggle@2x.png -------------------------------------------------------------------------------- /icons/101-gameplan@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/101-gameplan@2x.png -------------------------------------------------------------------------------- /icons/104-index-cards.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/104-index-cards.png -------------------------------------------------------------------------------- /icons/106-sliders@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/106-sliders@2x.png -------------------------------------------------------------------------------- /icons/107-widescreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/107-widescreen.png -------------------------------------------------------------------------------- /icons/109-chicken@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/109-chicken@2x.png -------------------------------------------------------------------------------- /icons/113-navigation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/113-navigation.png -------------------------------------------------------------------------------- /icons/114-balloon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/114-balloon@2x.png -------------------------------------------------------------------------------- /icons/116-controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/116-controller.png -------------------------------------------------------------------------------- /icons/118-coat-hanger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/118-coat-hanger.png -------------------------------------------------------------------------------- /icons/119-piggy-bank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/119-piggy-bank.png -------------------------------------------------------------------------------- /icons/120-headphones.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/120-headphones.png -------------------------------------------------------------------------------- /icons/123-id-card@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/123-id-card@2x.png -------------------------------------------------------------------------------- /icons/124-bullhorn@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/124-bullhorn@2x.png -------------------------------------------------------------------------------- /icons/135-hockeymask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/135-hockeymask.png -------------------------------------------------------------------------------- /icons/136-tractor@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/136-tractor@2x.png -------------------------------------------------------------------------------- /icons/140-gradhat@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/140-gradhat@2x.png -------------------------------------------------------------------------------- /icons/142-wine-bottle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/142-wine-bottle.png -------------------------------------------------------------------------------- /icons/144-martini@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/144-martini@2x.png -------------------------------------------------------------------------------- /icons/147-popsicle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/147-popsicle@2x.png -------------------------------------------------------------------------------- /icons/148-doghouse@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/148-doghouse@2x.png -------------------------------------------------------------------------------- /icons/149-windmill@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/149-windmill@2x.png -------------------------------------------------------------------------------- /icons/150-sailboat@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/150-sailboat@2x.png -------------------------------------------------------------------------------- /icons/152-rolodex@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/152-rolodex@2x.png -------------------------------------------------------------------------------- /icons/154-necktie@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/154-necktie@2x.png -------------------------------------------------------------------------------- /icons/156-controller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/156-controller.png -------------------------------------------------------------------------------- /icons/158-wrench-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/158-wrench-2@2x.png -------------------------------------------------------------------------------- /icons/160-voicemail-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/160-voicemail-2.png -------------------------------------------------------------------------------- /icons/161-calculator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/161-calculator.png -------------------------------------------------------------------------------- /icons/162-receipt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/162-receipt@2x.png -------------------------------------------------------------------------------- /icons/17-bar-chart@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/17-bar-chart@2x.png -------------------------------------------------------------------------------- /icons/172-pricetag@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/172-pricetag@2x.png -------------------------------------------------------------------------------- /icons/173-eyedropper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/173-eyedropper.png -------------------------------------------------------------------------------- /icons/175-macbook@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/175-macbook@2x.png -------------------------------------------------------------------------------- /icons/177-building@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/177-building@2x.png -------------------------------------------------------------------------------- /icons/179-notepad@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/179-notepad@2x.png -------------------------------------------------------------------------------- /icons/18-envelope@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/18-envelope@2x.png -------------------------------------------------------------------------------- /icons/180-stickynote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/180-stickynote.png -------------------------------------------------------------------------------- /icons/183-genie-lamp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/183-genie-lamp.png -------------------------------------------------------------------------------- /icons/184-warning@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/184-warning@2x.png -------------------------------------------------------------------------------- /icons/185-printer@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/185-printer@2x.png -------------------------------------------------------------------------------- /icons/191-collection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/191-collection.png -------------------------------------------------------------------------------- /icons/192-credit-card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/192-credit-card.png -------------------------------------------------------------------------------- /icons/195-barcode@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/195-barcode@2x.png -------------------------------------------------------------------------------- /icons/198-card-spades.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/198-card-spades.png -------------------------------------------------------------------------------- /icons/199-card-hearts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/199-card-hearts.png -------------------------------------------------------------------------------- /icons/200-card-clubs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/200-card-clubs.png -------------------------------------------------------------------------------- /icons/35-shopping@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/35-shopping@2x.png -------------------------------------------------------------------------------- /icons/37-suitcase@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/37-suitcase@2x.png -------------------------------------------------------------------------------- /icons/38-airplane@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/38-airplane@2x.png -------------------------------------------------------------------------------- /icons/39-spraycan@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/39-spraycan@2x.png -------------------------------------------------------------------------------- /icons/43-film-roll@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/43-film-roll@2x.png -------------------------------------------------------------------------------- /icons/52-pine-tree@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/52-pine-tree@2x.png -------------------------------------------------------------------------------- /icons/57-download@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/57-download@2x.png -------------------------------------------------------------------------------- /icons/58-bookmark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/58-bookmark@2x.png -------------------------------------------------------------------------------- /icons/60-signpost@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/60-signpost@2x.png -------------------------------------------------------------------------------- /icons/62-contrast@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/62-contrast@2x.png -------------------------------------------------------------------------------- /icons/68-paperclip@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/68-paperclip@2x.png -------------------------------------------------------------------------------- /icons/74-location@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/74-location@2x.png -------------------------------------------------------------------------------- /icons/78-stopwatch@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/78-stopwatch@2x.png -------------------------------------------------------------------------------- /icons/79-medical-bag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/79-medical-bag.png -------------------------------------------------------------------------------- /icons/81-dashboard@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/81-dashboard@2x.png -------------------------------------------------------------------------------- /icons/83-calendar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/83-calendar@2x.png -------------------------------------------------------------------------------- /icons/84-lightbulb@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/84-lightbulb@2x.png -------------------------------------------------------------------------------- /icons/88-beer-mug@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/88-beer-mug@2x.png -------------------------------------------------------------------------------- /icons/90-life-buoy@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/90-life-buoy@2x.png -------------------------------------------------------------------------------- /icons/91-beaker-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/91-beaker-2@2x.png -------------------------------------------------------------------------------- /icons/92-test-tube@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/92-test-tube@2x.png -------------------------------------------------------------------------------- /icons/93-thermometer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/93-thermometer.png -------------------------------------------------------------------------------- /icons/95-equalizer@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/95-equalizer@2x.png -------------------------------------------------------------------------------- /icons/99-umbrella@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/99-umbrella@2x.png -------------------------------------------------------------------------------- /css/images/bamboo1_tile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/css/images/bamboo1_tile.jpg -------------------------------------------------------------------------------- /css/images/bamboo2_tile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/css/images/bamboo2_tile.jpg -------------------------------------------------------------------------------- /css/images/bamboo3_tile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/css/images/bamboo3_tile.jpg -------------------------------------------------------------------------------- /css/images/face-smiley.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/css/images/face-smiley.gif -------------------------------------------------------------------------------- /css/images/light-page-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/css/images/light-page-bg.png -------------------------------------------------------------------------------- /deck/RWS_Tarot_09_Hermit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/RWS_Tarot_09_Hermit.jpg -------------------------------------------------------------------------------- /deck/RWS_Tarot_13_Death.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/RWS_Tarot_13_Death.jpg -------------------------------------------------------------------------------- /deck/RWS_Tarot_15_Devil.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/RWS_Tarot_15_Devil.jpg -------------------------------------------------------------------------------- /deck/RWS_Tarot_16_Tower.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/RWS_Tarot_16_Tower.jpg -------------------------------------------------------------------------------- /deck/RWS_Tarot_17_Star.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/RWS_Tarot_17_Star.jpg -------------------------------------------------------------------------------- /deck/RWS_Tarot_18_Moon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/RWS_Tarot_18_Moon.jpg -------------------------------------------------------------------------------- /deck/RWS_Tarot_21_World.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/RWS_Tarot_21_World.jpg -------------------------------------------------------------------------------- /icons/07-map-marker@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/07-map-marker@2x.png -------------------------------------------------------------------------------- /icons/104-index-cards@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/104-index-cards@2x.png -------------------------------------------------------------------------------- /icons/107-widescreen@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/107-widescreen@2x.png -------------------------------------------------------------------------------- /icons/113-navigation@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/113-navigation@2x.png -------------------------------------------------------------------------------- /icons/115-bow-and-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/115-bow-and-arrow.png -------------------------------------------------------------------------------- /icons/116-controller@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/116-controller@2x.png -------------------------------------------------------------------------------- /icons/118-coat-hanger@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/118-coat-hanger@2x.png -------------------------------------------------------------------------------- /icons/119-piggy-bank@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/119-piggy-bank@2x.png -------------------------------------------------------------------------------- /icons/120-headphones@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/120-headphones@2x.png -------------------------------------------------------------------------------- /icons/121-landscape@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/121-landscape@2x.png -------------------------------------------------------------------------------- /icons/135-hockeymask@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/135-hockeymask@2x.png -------------------------------------------------------------------------------- /icons/137-presentation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/137-presentation.png -------------------------------------------------------------------------------- /icons/142-wine-bottle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/142-wine-bottle@2x.png -------------------------------------------------------------------------------- /icons/143-liquor-bottle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/143-liquor-bottle.png -------------------------------------------------------------------------------- /icons/145-persondot@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/145-persondot@2x.png -------------------------------------------------------------------------------- /icons/151-telescope@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/151-telescope@2x.png -------------------------------------------------------------------------------- /icons/156-controller@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/156-controller@2x.png -------------------------------------------------------------------------------- /icons/159-voicemail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/159-voicemail@2x.png -------------------------------------------------------------------------------- /icons/16-line-chart@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/16-line-chart@2x.png -------------------------------------------------------------------------------- /icons/160-voicemail-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/160-voicemail-2@2x.png -------------------------------------------------------------------------------- /icons/161-calculator@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/161-calculator@2x.png -------------------------------------------------------------------------------- /icons/163-glasses-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/163-glasses-1@2x.png -------------------------------------------------------------------------------- /icons/164-glasses-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/164-glasses-2@2x.png -------------------------------------------------------------------------------- /icons/165-glasses-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/165-glasses-3@2x.png -------------------------------------------------------------------------------- /icons/166-newspaper@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/166-newspaper@2x.png -------------------------------------------------------------------------------- /icons/167-upload-photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/167-upload-photo.png -------------------------------------------------------------------------------- /icons/168-upload-photo-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/168-upload-photo-2.png -------------------------------------------------------------------------------- /icons/170-butterfly@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/170-butterfly@2x.png -------------------------------------------------------------------------------- /icons/173-eyedropper@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/173-eyedropper@2x.png -------------------------------------------------------------------------------- /icons/180-stickynote@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/180-stickynote@2x.png -------------------------------------------------------------------------------- /icons/182-messenger-bag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/182-messenger-bag.png -------------------------------------------------------------------------------- /icons/183-genie-lamp@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/183-genie-lamp@2x.png -------------------------------------------------------------------------------- /icons/188-paint-roller.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/188-paint-roller.png -------------------------------------------------------------------------------- /icons/191-collection@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/191-collection@2x.png -------------------------------------------------------------------------------- /icons/192-credit-card@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/192-credit-card@2x.png -------------------------------------------------------------------------------- /icons/193-location-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/193-location-arrow.png -------------------------------------------------------------------------------- /icons/196-radiation@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/196-radiation@2x.png -------------------------------------------------------------------------------- /icons/197-card-diamonds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/197-card-diamonds.png -------------------------------------------------------------------------------- /icons/198-card-spades@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/198-card-spades@2x.png -------------------------------------------------------------------------------- /icons/199-card-hearts@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/199-card-hearts@2x.png -------------------------------------------------------------------------------- /icons/200-card-clubs@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/200-card-clubs@2x.png -------------------------------------------------------------------------------- /icons/22-skull-n-bones.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/22-skull-n-bones.png -------------------------------------------------------------------------------- /icons/41-picture-frame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/41-picture-frame.png -------------------------------------------------------------------------------- /icons/48-fork-and-knife.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/48-fork-and-knife.png -------------------------------------------------------------------------------- /icons/61-brightness@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/61-brightness@2x.png -------------------------------------------------------------------------------- /icons/66-microphone@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/66-microphone@2x.png -------------------------------------------------------------------------------- /icons/79-medical-bag@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/79-medical-bag@2x.png -------------------------------------------------------------------------------- /icons/80-shopping-cart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/80-shopping-cart.png -------------------------------------------------------------------------------- /icons/87-wine-glass@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/87-wine-glass@2x.png -------------------------------------------------------------------------------- /icons/93-thermometer@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/93-thermometer@2x.png -------------------------------------------------------------------------------- /deck/RWS_Tarot_01_Magician.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/RWS_Tarot_01_Magician.jpg -------------------------------------------------------------------------------- /deck/RWS_Tarot_03_Empress.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/RWS_Tarot_03_Empress.jpg -------------------------------------------------------------------------------- /deck/RWS_Tarot_04_Emperor.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/RWS_Tarot_04_Emperor.jpg -------------------------------------------------------------------------------- /deck/RWS_Tarot_07_Chariot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/RWS_Tarot_07_Chariot.jpg -------------------------------------------------------------------------------- /deck/RWS_Tarot_08_Strength.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/RWS_Tarot_08_Strength.jpg -------------------------------------------------------------------------------- /deck/RWS_Tarot_11_Justice.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/RWS_Tarot_11_Justice.jpg -------------------------------------------------------------------------------- /icons/115-bow-and-arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/115-bow-and-arrow@2x.png -------------------------------------------------------------------------------- /icons/137-presentation@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/137-presentation@2x.png -------------------------------------------------------------------------------- /icons/143-liquor-bottle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/143-liquor-bottle@2x.png -------------------------------------------------------------------------------- /icons/167-upload-photo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/167-upload-photo@2x.png -------------------------------------------------------------------------------- /icons/182-messenger-bag@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/182-messenger-bag@2x.png -------------------------------------------------------------------------------- /icons/188-paint-roller@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/188-paint-roller@2x.png -------------------------------------------------------------------------------- /icons/197-card-diamonds@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/197-card-diamonds@2x.png -------------------------------------------------------------------------------- /icons/22-skull-n-bones@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/22-skull-n-bones@2x.png -------------------------------------------------------------------------------- /icons/41-picture-frame@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/41-picture-frame@2x.png -------------------------------------------------------------------------------- /icons/48-fork-and-knife@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/48-fork-and-knife@2x.png -------------------------------------------------------------------------------- /icons/80-shopping-cart@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/80-shopping-cart@2x.png -------------------------------------------------------------------------------- /css/images/content-border.1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/css/images/content-border.1.png -------------------------------------------------------------------------------- /deck/343px-RWS_Tarot_00_Fool.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/343px-RWS_Tarot_00_Fool.jpg -------------------------------------------------------------------------------- /deck/347px-RWS_Tarot_19_Sun.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/347px-RWS_Tarot_19_Sun.jpg -------------------------------------------------------------------------------- /deck/RWS_Tarot_05_Hierophant.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/RWS_Tarot_05_Hierophant.jpg -------------------------------------------------------------------------------- /deck/RWS_Tarot_12_Hanged_Man.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/RWS_Tarot_12_Hanged_Man.jpg -------------------------------------------------------------------------------- /deck/RWS_Tarot_14_Temperance.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/RWS_Tarot_14_Temperance.jpg -------------------------------------------------------------------------------- /deck/RWS_Tarot_20_Judgement.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/RWS_Tarot_20_Judgement.jpg -------------------------------------------------------------------------------- /icons/168-upload-photo-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/168-upload-photo-2@2x.png -------------------------------------------------------------------------------- /icons/193-location-arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/icons/193-location-arrow@2x.png -------------------------------------------------------------------------------- /css/images/streak-meter-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/css/images/streak-meter-active.png -------------------------------------------------------------------------------- /css/images/x-repeating-sprites.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/css/images/x-repeating-sprites.png -------------------------------------------------------------------------------- /css/images/non-repeating-sprites.1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/css/images/non-repeating-sprites.1.png -------------------------------------------------------------------------------- /css/images/streak-meter-separator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/css/images/streak-meter-separator.png -------------------------------------------------------------------------------- /deck/RWS_Tarot_10_Wheel_of_Fortune.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/RWS_Tarot_10_Wheel_of_Fortune.jpg -------------------------------------------------------------------------------- /css/images/streak-meter-empty-challenge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/css/images/streak-meter-empty-challenge.png -------------------------------------------------------------------------------- /deck/345px-RWS_Tarot_02_High_Priestess.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/winterlightning/Tarot/HEAD/deck/345px-RWS_Tarot_02_High_Priestess.jpg -------------------------------------------------------------------------------- /app/views/contacts.html: -------------------------------------------------------------------------------- 1 |
  • 2 | {{if fullName()}} 3 | ${fullName()} 4 | {{else}} 5 | No Name 6 | {{/if}} 7 | > 8 |
  • -------------------------------------------------------------------------------- /app/application.coffee: -------------------------------------------------------------------------------- 1 | jQuery ($) -> 2 | window.App = Spine.Controller.create( 3 | el: $("body") 4 | elements: 5 | "#sidebar": "sidebarEl" 6 | "#contacts": "contactsEl" 7 | 8 | init: -> 9 | @sidebar = Sidebarcards.init(el: @sidebarEl) 10 | @card = Cards.init(el: @contactsEl) 11 | Card.fetch() 12 | ).init() -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | Tarot 4 | 5 | 6 | 7 | 8 | 9 | com.aptana.ide.core.unifiedBuilder 10 | 11 | 12 | 13 | 14 | 15 | com.aptana.projects.webnature 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/controllers/cards.coffee: -------------------------------------------------------------------------------- 1 | jQuery ($) -> 2 | window.Cards = Spine.Controller.create( 3 | 4 | proxied: [ "render", "show", "changed"] 5 | init: -> 6 | Card.bind "change", @render 7 | @App.bind "show:cards", @show 8 | 9 | show: (item) -> 10 | @change item if item and item.model 11 | 12 | change: (item) -> 13 | @current = item 14 | @render() 15 | 16 | render: -> 17 | @el.html $("#cardTemplate").tmpl(@current) 18 | 19 | ) -------------------------------------------------------------------------------- /lib/spine.model.local.js: -------------------------------------------------------------------------------- 1 | Spine.Model.Local = { 2 | extended: function(){ 3 | this.sync(this.proxy(this.saveLocal)); 4 | this.fetch(this.proxy(this.loadLocal)); 5 | }, 6 | 7 | saveLocal: function(){ 8 | var result = JSON.stringify(this); 9 | localStorage[this.name] = result; 10 | }, 11 | 12 | loadLocal: function(){ 13 | var result = localStorage[this.name]; 14 | if ( !result ) return; 15 | var result = JSON.parse(result); 16 | this.refresh(result); 17 | } 18 | }; -------------------------------------------------------------------------------- /app/util.coffee: -------------------------------------------------------------------------------- 1 | (($) -> 2 | $.fn.item = -> 3 | item = $(this).tmplItem().data 4 | (if $.isFunction(item.reload) then item.reload() else null) 5 | 6 | $.fn.forItem = (item) -> 7 | @filter -> 8 | compare = $(this).tmplItem().data 9 | true if item.eql and item.eql(compare) or item == compare 10 | 11 | $.fn.serializeForm = -> 12 | result = {} 13 | $.each $(this).find("input,textarea").serializeArray(), (i, item) -> 14 | result[item.name] = item.value 15 | 16 | result 17 | ) jQuery -------------------------------------------------------------------------------- /app/application.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | jQuery(function($) { 3 | return window.App = Spine.Controller.create({ 4 | el: $("body"), 5 | elements: { 6 | "#sidebar": "sidebarEl", 7 | "#contacts": "contactsEl" 8 | }, 9 | init: function() { 10 | this.sidebar = Sidebarcards.init({ 11 | el: this.sidebarEl 12 | }); 13 | this.card = Cards.init({ 14 | el: this.contactsEl 15 | }); 16 | return Card.fetch(); 17 | } 18 | }).init(); 19 | }); 20 | }).call(this); 21 | -------------------------------------------------------------------------------- /app/utils.js: -------------------------------------------------------------------------------- 1 | (function($){ 2 | 3 | $.fn.item = function(){ 4 | var item = $(this).tmplItem().data; 5 | return($.isFunction(item.reload) ? item.reload() : null); 6 | }; 7 | 8 | $.fn.forItem = function(item){ 9 | return this.filter(function(){ 10 | var compare = $(this).tmplItem().data; 11 | if (item.eql && item.eql(compare) || item === compare) 12 | return true; 13 | }); 14 | }; 15 | 16 | $.fn.serializeForm = function(){ 17 | var result = {}; 18 | $.each($(this).find("input,textarea").serializeArray(), function(i, item){ 19 | result[item.name] = item.value; 20 | }); 21 | return result; 22 | }; 23 | 24 | })(jQuery); -------------------------------------------------------------------------------- /app/controllers/cards.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | jQuery(function($) { 3 | return window.Cards = Spine.Controller.create({ 4 | proxied: ["render", "show", "changed"], 5 | init: function() { 6 | Card.bind("change", this.render); 7 | return this.App.bind("show:cards", this.show); 8 | }, 9 | show: function(item) { 10 | if (item && item.model) { 11 | return this.change(item); 12 | } 13 | }, 14 | change: function(item) { 15 | this.current = item; 16 | return this.render(); 17 | }, 18 | render: function() { 19 | return this.el.html($("#cardTemplate").tmpl(this.current)); 20 | } 21 | }); 22 | }); 23 | }).call(this); 24 | -------------------------------------------------------------------------------- /app/views/contact.html: -------------------------------------------------------------------------------- 1 | 5 | 6 | 14 | 15 | {{if mobile}} 16 | 20 | {{/if}} 21 | 22 | {{if work}} 23 | 27 | {{/if}} 28 | 29 | {{if address}} 30 | 34 | {{/if}} 35 | 36 | -------------------------------------------------------------------------------- /app/controllers/sidebar.coffee: -------------------------------------------------------------------------------- 1 | jQuery ($) -> 2 | window.Sidebar = Spine.Controller.create( 3 | elements: 4 | ".items": "items" 5 | input: "input" 6 | 7 | events: 8 | "click button": "create" 9 | "keyup input": "filter" 10 | "click input": "filter" 11 | 12 | proxied: [ "render" ] 13 | template: (items) -> 14 | $("#contactsTemplate").tmpl items 15 | 16 | init: -> 17 | @list = Spine.List.init( 18 | el: @items 19 | template: @template 20 | ) 21 | 22 | filter: -> 23 | @query = @input.val() 24 | @render() 25 | 26 | render: -> 27 | items = Contact.filter(@query) 28 | items = items.sort(Contact.nameSort) 29 | @list.render items 30 | 31 | create: -> 32 | item = Cards.create() 33 | ) -------------------------------------------------------------------------------- /app/views/edit_contact.html: -------------------------------------------------------------------------------- 1 | 5 | 6 | 10 | 11 | 15 | 16 | 20 | 21 | 25 | 26 | 30 | 31 | -------------------------------------------------------------------------------- /lib/spine.model.filter.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | 3 | var extend = { 4 | filter: function(query){ 5 | if ( !query ) 6 | return this.all(); 7 | else 8 | return(this.select(function(item){ 9 | return item.select(query); 10 | })); 11 | } 12 | }; 13 | 14 | var include = { 15 | select: function(query){ 16 | query = query.toLowerCase(); 17 | var atts = (this.selectAttributes || this.attributes).apply(this); 18 | for(var key in atts) { 19 | var value = atts[key].toLowerCase(); 20 | if (value && value.indexOf(query) != -1) 21 | return true; 22 | } 23 | return false; 24 | } 25 | }; 26 | 27 | Spine.Model.Filter = { 28 | extended: function(){ 29 | this.extend(extend); 30 | this.include(include); 31 | } 32 | }; 33 | 34 | })(); -------------------------------------------------------------------------------- /app/util.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | (function($) { 3 | $.fn.item = function() { 4 | var item; 5 | item = $(this).tmplItem().data; 6 | if ($.isFunction(item.reload)) { 7 | return item.reload(); 8 | } else { 9 | return null; 10 | } 11 | }; 12 | $.fn.forItem = function(item) { 13 | return this.filter(function() { 14 | var compare; 15 | compare = $(this).tmplItem().data; 16 | if (item.eql && item.eql(compare) || item === compare) { 17 | return true; 18 | } 19 | }); 20 | }; 21 | return $.fn.serializeForm = function() { 22 | var result; 23 | result = {}; 24 | $.each($(this).find("input,textarea").serializeArray(), function(i, item) { 25 | return result[item.name] = item.value; 26 | }); 27 | return result; 28 | }; 29 | })(jQuery); 30 | }).call(this); 31 | -------------------------------------------------------------------------------- /app/models/contact.coffee: -------------------------------------------------------------------------------- 1 | Contact = Spine.Model.setup("Contact", [ "first_name", "last_name", "email", "mobile", "work", "address", "notes" ]) 2 | Contact.extend Spine.Model.Local 3 | Contact.extend Spine.Model.Filter 4 | Contact.selectAttributes = [ "first_name", "last_name", "email", "mobile", "work", "address" ] 5 | Contact.nameSort = (a, b) -> 6 | if a.first_name == b.first_name 7 | return 0 if a.first_name == b.first_name 8 | return (if (a.first_name < b.first_name) then -1 else 1) 9 | (if (a.first_name < b.first_name) then -1 else 1) 10 | 11 | Contact.include 12 | selectAttributes: -> 13 | result = {} 14 | i = 0 15 | 16 | while i < @parent.selectAttributes.length 17 | attr = @parent.selectAttributes[i] 18 | result[attr] = this[attr] 19 | i++ 20 | result 21 | 22 | fullName: -> 23 | return if not @first_name and not @last_name 24 | @first_name + " " + @last_name -------------------------------------------------------------------------------- /app/controllers/sidebarcards.coffee: -------------------------------------------------------------------------------- 1 | jQuery ($) -> 2 | window.Sidebarcards = Spine.Controller.create( 3 | elements: 4 | ".items": "items" 5 | "input": "input" 6 | 7 | events: 8 | "click button": "create" 9 | "keyup input": "filter" 10 | "click input": "filter" 11 | 12 | proxied: [ "render" ] 13 | template: (items) -> 14 | $("#cardsTemplate").tmpl items 15 | 16 | init: -> 17 | @list = Spine.List.init( 18 | el: @items 19 | template: @template 20 | ) 21 | @list.bind "change", @proxy((item) -> 22 | @App.trigger "show:cards", item 23 | ) 24 | Card.bind "refresh change", @render 25 | 26 | filter: -> 27 | @query = @input.val() 28 | @render() 29 | 30 | render: -> 31 | items = Card.filter(@query) 32 | @list.render items 33 | 34 | create: -> 35 | item = Cards.create() 36 | @App.trigger "edit:contact", item 37 | ) -------------------------------------------------------------------------------- /css/ui.notify.css: -------------------------------------------------------------------------------- 1 | .ui-notify { width:350px; position:fixed; top:10px; right:10px; } 2 | .ui-notify-message { padding:10px; margin-bottom:15px; -moz-border-radius:8px; -webkit-border-radius:8px; border-radius:8px } 3 | .ui-notify-message h1 { font-size:14px; margin:0; padding:0 } 4 | .ui-notify-message p { margin:3px 0; padding:0; line-height:18px } 5 | .ui-notify-message:last-child { margin-bottom:0 } 6 | .ui-notify-message-style { background:#000; -moz-box-shadow: 0 0 6px #000; -webkit-box-shadow: 0 0 6px #000; box-shadow: 0 0 6px #000; } 7 | .ui-notify-message-style h1 { color:#fff; font-weight:bold } 8 | .ui-notify-message-style p { color:#fff } 9 | .ui-notify-close { color:#fff; text-decoration:underline } 10 | .ui-notify-click { cursor:pointer } 11 | .ui-notify-cross { margin-top:-4px; float:right; cursor:pointer; text-decoration:none; font-size:12px; font-weight:bold; text-shadow:0 1px 1px #fff; padding:2px } 12 | .ui-notify-cross:hover { color:#ffffab } 13 | .ui-notify-cross:active { position:relative; top:1px } 14 | -------------------------------------------------------------------------------- /lib/spine.list.js: -------------------------------------------------------------------------------- 1 | (function(Spine, $){ 2 | 3 | Spine.List = Spine.Controller.create({ 4 | events: { 5 | "click .item": "click" 6 | }, 7 | 8 | proxied: ["change"], 9 | 10 | init: function(){ 11 | this.bind("change", this.change); 12 | }, 13 | 14 | template: function(){ return arguments[0] }, 15 | 16 | change: function(item){ 17 | if ( !item ) return; 18 | this.current = item; 19 | 20 | this.children().removeClass("current"); 21 | this.children().forItem(this.current).addClass("current"); 22 | }, 23 | 24 | render: function(items){ 25 | if (items) this.items = items; 26 | this.el.html(this.template(this.items)); 27 | this.change(this.current); 28 | if ( !this.children(".current").length || !this.current ) 29 | this.children(":first").click(); 30 | }, 31 | 32 | children: function(sel){ 33 | return this.el.children(sel); 34 | }, 35 | 36 | click: function(e){ 37 | var item = $(e.target).item(); 38 | this.trigger("change", item); 39 | } 40 | }); 41 | 42 | })(Spine, Spine.$); -------------------------------------------------------------------------------- /app/controllers/sidebar.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | jQuery(function($) { 3 | return window.Sidebar = Spine.Controller.create({ 4 | elements: { 5 | ".items": "items", 6 | input: "input" 7 | }, 8 | events: { 9 | "click button": "create", 10 | "keyup input": "filter", 11 | "click input": "filter" 12 | }, 13 | proxied: ["render"], 14 | template: function(items) { 15 | return $("#contactsTemplate").tmpl(items); 16 | }, 17 | init: function() { 18 | return this.list = Spine.List.init({ 19 | el: this.items, 20 | template: this.template 21 | }); 22 | }, 23 | filter: function() { 24 | this.query = this.input.val(); 25 | return this.render(); 26 | }, 27 | render: function() { 28 | var items; 29 | items = Contact.filter(this.query); 30 | items = items.sort(Contact.nameSort); 31 | return this.list.render(items); 32 | }, 33 | create: function() { 34 | var item; 35 | return item = Cards.create(); 36 | } 37 | }); 38 | }); 39 | }).call(this); 40 | -------------------------------------------------------------------------------- /app/models/contact.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var Contact; 3 | Contact = Spine.Model.setup("Contact", ["first_name", "last_name", "email", "mobile", "work", "address", "notes"]); 4 | Contact.extend(Spine.Model.Local); 5 | Contact.extend(Spine.Model.Filter); 6 | Contact.selectAttributes = ["first_name", "last_name", "email", "mobile", "work", "address"]; 7 | Contact.nameSort = function(a, b) { 8 | if (a.first_name === b.first_name) { 9 | if (a.first_name === b.first_name) { 10 | return 0; 11 | } 12 | if (a.first_name < b.first_name) { 13 | return -1; 14 | } else { 15 | return 1; 16 | } 17 | } 18 | if (a.first_name < b.first_name) { 19 | return -1; 20 | } else { 21 | return 1; 22 | } 23 | }; 24 | Contact.include({ 25 | selectAttributes: function() { 26 | var attr, i, result; 27 | result = {}; 28 | i = 0; 29 | while (i < this.parent.selectAttributes.length) { 30 | attr = this.parent.selectAttributes[i]; 31 | result[attr] = this[attr]; 32 | i++; 33 | } 34 | return result; 35 | }, 36 | fullName: function() { 37 | if (!this.first_name && !this.last_name) { 38 | return; 39 | } 40 | return this.first_name + " " + this.last_name; 41 | } 42 | }); 43 | }).call(this); 44 | -------------------------------------------------------------------------------- /app/controllers/sidebarcards.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | jQuery(function($) { 3 | return window.Sidebarcards = Spine.Controller.create({ 4 | elements: { 5 | ".items": "items", 6 | "input": "input" 7 | }, 8 | events: { 9 | "click button": "create", 10 | "keyup input": "filter", 11 | "click input": "filter" 12 | }, 13 | proxied: ["render"], 14 | template: function(items) { 15 | return $("#cardsTemplate").tmpl(items); 16 | }, 17 | init: function() { 18 | this.list = Spine.List.init({ 19 | el: this.items, 20 | template: this.template 21 | }); 22 | this.list.bind("change", this.proxy(function(item) { 23 | return this.App.trigger("show:cards", item); 24 | })); 25 | return Card.bind("refresh change", this.render); 26 | }, 27 | filter: function() { 28 | this.query = this.input.val(); 29 | return this.render(); 30 | }, 31 | render: function() { 32 | var items; 33 | items = Card.filter(this.query); 34 | return this.list.render(items); 35 | }, 36 | create: function() { 37 | var item; 38 | item = Cards.create(); 39 | return this.App.trigger("edit:contact", item); 40 | } 41 | }); 42 | }); 43 | }).call(this); 44 | -------------------------------------------------------------------------------- /app/controllers/contacts.coffee: -------------------------------------------------------------------------------- 1 | jQuery ($) -> 2 | window.Contacts = Spine.Controller.create( 3 | elements: 4 | ".show": "showEl" 5 | ".edit": "editEl" 6 | ".show .content": "showContent" 7 | ".edit .content": "editContent" 8 | 9 | events: 10 | "click .optEdit": "edit" 11 | "click .optEmail": "email" 12 | "click .optDestroy": "destroy" 13 | "click .optSave": "save" 14 | 15 | proxied: [ "render", "show", "edit" ] 16 | init: -> 17 | @editEl.hide() 18 | Contact.bind "change", @render 19 | @App.bind "show:contact", @show 20 | @App.bind "edit:contact", @edit 21 | 22 | change: (item) -> 23 | @current = item 24 | @render() 25 | 26 | render: -> 27 | @showContent.html $("#contactTemplate").tmpl(@current) 28 | @editContent.html $("#editContactTemplate").tmpl(@current) 29 | 30 | show: (item) -> 31 | @change item if item and item.model 32 | @showEl.show() 33 | @editEl.hide() 34 | 35 | edit: (item) -> 36 | @change item if item and item.model 37 | @showEl.hide() 38 | @editEl.show() 39 | 40 | destroy: -> 41 | @current.destroy() if confirm("Are you sure?") 42 | 43 | email: -> 44 | return unless @current.email 45 | window.location = "mailto:" + @current.email 46 | 47 | save: -> 48 | atts = @editEl.serializeForm() 49 | @current.updateAttributes atts 50 | @show() 51 | ) -------------------------------------------------------------------------------- /lib/jquery.link.js: -------------------------------------------------------------------------------- 1 | // 2 | // JLink does two things: 3 | // * adds a 'change' callback onto standard objects 4 | // * add a utility function to bind up jQuery elements and objects 5 | // 6 | // var object = { 7 | // name: "Test Name" 8 | // }; 9 | // 10 | // $("#user").link(object, function(e, data){ 11 | // $(this).empty(); 12 | // $(this).append($("#userTmpl").tmpl(data)); 13 | // }); 14 | // 15 | // object.change(); 16 | 17 | (function($){ 18 | 19 | var checkChange = function(ob){ 20 | if ("change" in ob && typeof ob.change != "function") 21 | throw("change is already defined in " + ob); 22 | return( !!ob.change ); 23 | } 24 | 25 | $.addChange = function(ob){ 26 | if (checkChange(ob)) return; 27 | 28 | ob.change = function(callback){ 29 | if (callback) { 30 | if ( !this._change ) this._change = []; 31 | this._change.push(callback); 32 | } else { 33 | if ( !this._change ) return; 34 | for (var i=0; i < this._change.length; i++) 35 | this._change[i].apply(this); 36 | } 37 | }; 38 | }; 39 | 40 | $.fn.link = $.fn.jlink = function(object, callback){ 41 | var element = $(this); 42 | 43 | if ( !object ) 44 | throw("You must provide an object") 45 | 46 | $.addChange(object); 47 | 48 | object.change(function(){ 49 | element.trigger("render", this); 50 | }); 51 | 52 | if ( callback ) 53 | element.bind("render", callback); 54 | 55 | return element; 56 | }; 57 | 58 | $.fn.render = function(callback) { 59 | callback ? this.bind("render", callback) : this.trigger("render"); 60 | }; 61 | 62 | $.fn.item = function(){ 63 | var item = $(this).tmplItem().data; 64 | if (typeof item.reload == "function") 65 | item = item.reload(); 66 | return item; 67 | }; 68 | })(jQuery); -------------------------------------------------------------------------------- /lib/spine.model.ajax.js: -------------------------------------------------------------------------------- 1 | (function($){ 2 | 3 | var getUrl = function(object){ 4 | if (!(object && object.url)) return null; 5 | return $.isFunction(object.url) ? object.url() : object.url; 6 | }; 7 | 8 | var methodMap = { 9 | "create": "POST", 10 | "update": "PUT", 11 | "destroy": "DELETE", 12 | "read": "GET" 13 | }; 14 | 15 | var urlError = function() { 16 | throw new Error("A 'url' property or function must be specified"); 17 | }; 18 | 19 | var ajaxSync = function(method, record){ 20 | 21 | var params = { 22 | type: methodMap[method], 23 | contentType: "application/json", 24 | dataType: "json", 25 | processData: false 26 | }; 27 | 28 | if (Spine.Model._noSync) return; 29 | 30 | params.url = getUrl(record); 31 | if (!params.url) throw("Invalid URL"); 32 | 33 | if (method == "create" || method == "update") 34 | params.data = JSON.stringify(record); 35 | 36 | if (method == "read") 37 | params.success = function(data){ 38 | (record.populate || record.load)(data); 39 | }; 40 | 41 | params.error = function(e){ 42 | record.trigger("error", e); 43 | }; 44 | 45 | $.ajax(params); 46 | }; 47 | 48 | Spine.Model.Ajax = { 49 | extended: function(){ 50 | this.sync(ajaxSync); 51 | this.fetch(this.proxy(function(){ 52 | ajaxSync("read", this); 53 | })); 54 | } 55 | }; 56 | 57 | Spine.Model.extend({ 58 | url: function() { 59 | return "/" + this.name.toLowerCase() + "s" 60 | }, 61 | 62 | noSync: function(callback){ 63 | Spine.Model._noSync = true; 64 | callback.apply(callback, arguments); 65 | Spine.Model._noSync = false; 66 | } 67 | }); 68 | 69 | Spine.Model.include({ 70 | url: function(){ 71 | var base = getUrl(this.parent); 72 | base += (base.charAt(base.length - 1) == "/" ? "" : "/"); 73 | base += encodeURIComponent(this.id); 74 | return base; 75 | } 76 | }); 77 | 78 | })(jQuery); -------------------------------------------------------------------------------- /app/controllers/contacts.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | jQuery(function($) { 3 | return window.Contacts = Spine.Controller.create({ 4 | elements: { 5 | ".show": "showEl", 6 | ".edit": "editEl", 7 | ".show .content": "showContent", 8 | ".edit .content": "editContent" 9 | }, 10 | events: { 11 | "click .optEdit": "edit", 12 | "click .optEmail": "email", 13 | "click .optDestroy": "destroy", 14 | "click .optSave": "save" 15 | }, 16 | proxied: ["render", "show", "edit"], 17 | init: function() { 18 | this.editEl.hide(); 19 | Contact.bind("change", this.render); 20 | this.App.bind("show:contact", this.show); 21 | return this.App.bind("edit:contact", this.edit); 22 | }, 23 | change: function(item) { 24 | this.current = item; 25 | return this.render(); 26 | }, 27 | render: function() { 28 | this.showContent.html($("#contactTemplate").tmpl(this.current)); 29 | return this.editContent.html($("#editContactTemplate").tmpl(this.current)); 30 | }, 31 | show: function(item) { 32 | if (item && item.model) { 33 | this.change(item); 34 | } 35 | this.showEl.show(); 36 | return this.editEl.hide(); 37 | }, 38 | edit: function(item) { 39 | if (item && item.model) { 40 | this.change(item); 41 | } 42 | this.showEl.hide(); 43 | return this.editEl.show(); 44 | }, 45 | destroy: function() { 46 | if (confirm("Are you sure?")) { 47 | return this.current.destroy(); 48 | } 49 | }, 50 | email: function() { 51 | if (!this.current.email) { 52 | return; 53 | } 54 | return window.location = "mailto:" + this.current.email; 55 | }, 56 | save: function() { 57 | var atts; 58 | atts = this.editEl.serializeForm(); 59 | this.current.updateAttributes(atts); 60 | return this.show(); 61 | } 62 | }); 63 | }); 64 | }).call(this); 65 | -------------------------------------------------------------------------------- /javascripts/jquery.notify.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery Notify UI Widget 1.4 3 | * Copyright (c) 2010 Eric Hynds 4 | * 5 | * http://www.erichynds.com/jquery/a-jquery-ui-growl-ubuntu-notification-widget/ 6 | * 7 | * Depends: 8 | * - jQuery 1.4 9 | * - jQuery UI 1.8 widget factory 10 | * 11 | * Dual licensed under the MIT and GPL licenses: 12 | * http://www.opensource.org/licenses/mit-license.php 13 | * http://www.gnu.org/licenses/gpl.html 14 | * 15 | */ 16 | (function(d){d.widget("ech.notify",{options:{speed:500,expires:5E3,stack:"below",custom:false},_create:function(){var a=this;this.templates={};this.keys=[];this.element.addClass("ui-notify").children().addClass("ui-notify-message ui-notify-message-style").each(function(b){b=this.id||b;a.keys.push(b);a.templates[b]=d(this).removeAttr("id").wrap("
    ").parent().html()}).end().empty().show()},create:function(a,b,c){if(typeof a==="object"){c=b;b=a;a=null}a=this.templates[a||this.keys[0]];if(c&&c.custom)a=d(a).removeClass("ui-notify-message-style").wrap("
    ").parent().html();return(new d.ech.notify.instance(this))._create(b,d.extend({},this.options,c),a)}});d.extend(d.ech.notify,{instance:function(a){this.parent=a;this.isOpen=false}});d.extend(d.ech.notify.instance.prototype,{_create:function(a,b,c){this.options=b;var e=this;c=c.replace(/#(?:\{|%7B)(.*?)(?:\}|%7D)/g,function(f,g){return g in a?a[g]:""});c=this.element=d(c);var h=c.find(".ui-notify-close");typeof this.options.click==="function"&&c.addClass("ui-notify-click").bind("click",function(f){e._trigger("click",f,e)});h.length&&h.bind("click",function(){e.close();return false});this.open();typeof b.expires==="number"&&window.setTimeout(function(){e.close()},b.expires);return this},close:function(){var a=this,b=this.options.speed;this.isOpen=false;this.element.fadeTo(b,0).slideUp(b,function(){a._trigger("close")});return this},open:function(){if(this.isOpen||this._trigger("beforeopen")===false)return this;var a=this;this.isOpen=true;this.element[this.options.stack==="above"?"prependTo":"appendTo"](this.parent.element).css({display:"none",opacity:""}).fadeIn(this.options.speed,function(){a._trigger("open")});return this},widget:function(){return this.element},_trigger:function(a,b,c){return this.parent._trigger.call(this,a,b,c)}})})(jQuery); 17 | -------------------------------------------------------------------------------- /css/layout.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Default Layout Theme 3 | * 4 | * Created for jquery.layout 5 | * 6 | * Copyright (c) 2010 7 | * Fabrizio Balliano (http://www.fabrizioballiano.net) 8 | * Kevin Dalman (http://allpro.net) 9 | * 10 | * Dual licensed under the GPL (http://www.gnu.org/licenses/gpl.html) 11 | * and MIT (http://www.opensource.org/licenses/mit-license.php) licenses. 12 | * 13 | * Last Updated: 2010-02-10 14 | * NOTE: For best code readability, view this with a fixed-space font and tabs equal to 4-chars 15 | */ 16 | 17 | /* 18 | * PANES & CONTENT-DIVs 19 | */ 20 | .ui-layout-pane { /* all 'panes' */ 21 | /* DO NOT add scrolling (or padding) to 'panes' that have a content-div, 22 | otherwise you may get double-scrollbars - on the pane AND on the content-div 23 | */ 24 | padding: 10px; 25 | overflow: auto; 26 | } 27 | /* (scrolling) content-div inside pane allows for fixed header(s) and/or footer(s) */ 28 | .ui-layout-content { 29 | padding: 10px; 30 | position: relative; /* contain floated or positioned elements */ 31 | overflow: auto; /* add scrolling to content-div */ 32 | } 33 | 34 | /* 35 | * RESIZER-BARS 36 | */ 37 | .ui-layout-resizer { /* all 'resizer-bars' */ 38 | background: #DDD; 39 | border: 1px solid #BBB; 40 | border-width: 0; 41 | } 42 | .ui-layout-resizer-drag { /* REAL resizer while resize in progress */ 43 | } 44 | .ui-layout-resizer-hover { /* affects both open and closed states */ 45 | } 46 | /* NOTE: It looks best when 'hover' and 'dragging' are set to the same color, 47 | otherwise color shifts while dragging when bar can't keep up with mouse */ 48 | .ui-layout-resizer-open-hover , /* hover-color to 'resize' */ 49 | .ui-layout-resizer-dragging { /* resizer beging 'dragging' */ 50 | background: #C4E1A4; 51 | } 52 | .ui-layout-resizer-dragging { /* CLONED resizer being dragged */ 53 | border-left: 1px solid #BBB; 54 | border-right: 1px solid #BBB; 55 | } 56 | /* NOTE: Add a 'dragging-limit' color to provide visual feedback when resizer hits min/max size limits */ 57 | .ui-layout-resizer-dragging-limit { /* CLONED resizer at min or max size-limit */ 58 | background: #E1A4A4; /* red */ 59 | } 60 | 61 | .ui-layout-resizer-closed-hover { /* hover-color to 'slide open' */ 62 | background: #EBD5AA; 63 | } 64 | .ui-layout-resizer-sliding { /* resizer when pane is 'slid open' */ 65 | opacity: .10; /* show only a slight shadow */ 66 | filter: alpha(opacity=10); 67 | } 68 | .ui-layout-resizer-sliding-hover { /* sliding resizer - hover */ 69 | opacity: 1.00; /* on-hover, show the resizer-bar normally */ 70 | filter: alpha(opacity=100); 71 | } 72 | /* sliding resizer - add 'outside-border' to resizer on-hover 73 | * this sample illustrates how to target specific panes and states */ 74 | .ui-layout-resizer-north-sliding-hover { border-bottom-width: 1px; } 75 | .ui-layout-resizer-south-sliding-hover { border-top-width: 1px; } 76 | .ui-layout-resizer-west-sliding-hover { border-right-width: 1px; } 77 | .ui-layout-resizer-east-sliding-hover { border-left-width: 1px; } 78 | 79 | /* 80 | * TOGGLER-BUTTONS 81 | */ 82 | .ui-layout-toggler { 83 | border: 1px solid #BBB; /* match pane-border */ 84 | background-color: #BBB; 85 | } 86 | .ui-layout-resizer-hover .ui-layout-toggler { 87 | opacity: .60; 88 | filter: alpha(opacity=60); 89 | } 90 | .ui-layout-toggler-hover , /* need when NOT resizable */ 91 | .ui-layout-resizer-hover .ui-layout-toggler-hover { /* need specificity when IS resizable */ 92 | background-color: #FC6; 93 | opacity: 1.00; 94 | filter: alpha(opacity=100); 95 | } 96 | .ui-layout-toggler-north , 97 | .ui-layout-toggler-south { 98 | border-width: 0 1px; /* left/right borders */ 99 | } 100 | .ui-layout-toggler-west , 101 | .ui-layout-toggler-east { 102 | border-width: 1px 0; /* top/bottom borders */ 103 | } 104 | /* hide the toggler-button when the pane is 'slid open' */ 105 | .ui-layout-resizer-sliding ui-layout-toggler { 106 | display: none; 107 | } 108 | /* 109 | * style the text we put INSIDE the togglers 110 | */ 111 | .ui-layout-toggler .content { 112 | color: #666; 113 | font-size: 12px; 114 | font-weight: bold; 115 | width: 100%; 116 | padding-bottom: 0.35ex; /* to 'vertically center' text inside text-span */ 117 | } 118 | 119 | /*my additions*/ 120 | /*.ui-layout-resizer { 121 | display: none !important; 122 | } 123 | */ 124 | .ui-layout-north, .ui-layout-south, .ui-layout-west, .ui-layout-center { 125 | padding: 0px; 126 | } 127 | 128 | #sidebar { 129 | height: 100%; 130 | } 131 | 132 | .ui-layout-toggler { 133 | display: none !important; 134 | } 135 | 136 | .ui-layout-resizer { 137 | width: 6px; 138 | border: 1px solid #C5C5C5; 139 | border-width: 0 1px 0 1px; 140 | border-right-color: rgba(0, 0, 0, 0.3); 141 | background: #F9F9F9; 142 | background: -webkit-gradient(linear, left top, right top, from(#F9F9F9), to(#DFE0E1)); 143 | background: -moz-linear-gradient(left, #F9F9F9, #DFE0E1); 144 | background: linear-gradient(left, #F9F9F9, #DFE0E1); 145 | } -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Tarot 7 | 8 | 9 | 10 | 11 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 86 | 87 | 99 | 100 | 101 | 102 |
    103 |
    104 |
    105 | 106 |
    107 |
    108 | 126 |
    127 | 128 | 129 | 157 | 158 |
    159 | 160 | -------------------------------------------------------------------------------- /css/application.css: -------------------------------------------------------------------------------- 1 | body, html { 2 | margin: 0; 3 | padding: 0; 4 | } 5 | 6 | a { 7 | color: #363636; 8 | cursor: pointer; 9 | text-decoration: underline; 10 | } 11 | 12 | pre { 13 | margin: 0; 14 | font-family: Helvetica, Arial, "MS Trebuchet", sans-serif; 15 | } 16 | 17 | header, footer { display: block; } 18 | 19 | button { 20 | border: 1px solid #bbbbbb; 21 | font-weight: bold; 22 | text-shadow: 0 1px 1px #ffffff; 23 | font-family: Helvetica, Arial, "MS Trebuchet", sans-serif; 24 | font-size: 14px; 25 | color: #363636; 26 | padding: 6px 10px; 27 | margin: 1px 1px 1px 0; 28 | outline: none; 29 | background: #f9f9f9; 30 | background: -webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#e3e3e3)); 31 | background: -moz-linear-gradient(top, #f9f9f9, #e3e3e3); 32 | background: linear-gradient(top, #f9f9f9, #e3e3e3); 33 | -moz-border-radius: 3px; 34 | -webkit-border-radius: 3px; 35 | border-radius: 3px; 36 | -moz-box-shadow: 0 1px 1px #ffffff; 37 | -webkit-box-shadow: 0 1px 1px #ffffff; 38 | box-shadow: 0 1px 1px #ffffff; 39 | } 40 | 41 | button:active { 42 | background: #e3e3e3; 43 | background: -webkit-gradient(linear, left top, left bottom, from(#e3e3e3), to(#f9f9f9)); 44 | background: -moz-linear-gradient(top, #e3e3e3, #f9f9f9); 45 | background: linear-gradient(top, #e3e3e3, #f9f9f9); 46 | } 47 | 48 | button.default { 49 | color: #ffffff; 50 | border: 1px solid #3f68a5; 51 | text-shadow: 0 -1px 1px #46677f; 52 | background: #7bb5db; 53 | background: -webkit-gradient(linear, left top, left bottom, from(#7bb5db), to(#4775b8)); 54 | background: -moz-linear-gradient(top, #7bb5db, #4775b8); 55 | background: linear-gradient(top, #7bb5db, #4775b8); 56 | } 57 | 58 | button.default:active { 59 | background: #4775b8; 60 | background: -webkit-gradient(linear, left top, left bottom, from(#4775b8), to(#7bb5db)); 61 | background: -moz-linear-gradient(top, #4775b8, #7bb5db); 62 | background: linear-gradient(top, #4775b8, #7bb5db); 63 | } 64 | 65 | button.default .active { 66 | background: #4775b8; 67 | background: -webkit-gradient(linear, left top, left bottom, from(#4775b8), to(#7bb5db)); 68 | background: -moz-linear-gradient(top, #4775b8, #7bb5db); 69 | background: linear-gradient(top, #4775b8, #7bb5db); 70 | } 71 | 72 | label { 73 | display: block; 74 | margin: 0 0 20px 0; 75 | overflow: visible; 76 | } 77 | 78 | label span { 79 | display: block; 80 | margin-bottom: 6px; 81 | margin-left: -3px; 82 | font-weight: bold; 83 | font-size: 13px; 84 | } 85 | 86 | label input { 87 | font-size: 14px; 88 | display: block; 89 | } 90 | 91 | label input[type="checkbox"] { 92 | width: 15px !important; 93 | margin-right: 7px; 94 | display: inline-block; 95 | } 96 | 97 | label input[type="checkbox"] + span { display: inline; } 98 | 99 | label input[type="text"] { 100 | width: 220px; 101 | margin: 0 2px 0 0; 102 | padding: 4px 8px; 103 | -webkit-box-sizing: border-box; 104 | -moz-box-sizing: border-box; 105 | box-sizing: border-box; 106 | } 107 | 108 | label input[type="password"] { 109 | width: 220px; 110 | margin: 0 2px 0 0; 111 | padding: 4px 8px; 112 | -webkit-box-sizing: border-box; 113 | -moz-box-sizing: border-box; 114 | box-sizing: border-box; 115 | } 116 | 117 | textarea { 118 | width: 220px; 119 | margin: 0 2px 0 0; 120 | padding: 4px 8px; 121 | -webkit-box-sizing: border-box; 122 | -moz-box-sizing: border-box; 123 | box-sizing: border-box; 124 | } 125 | 126 | textarea, input[type="text"], input[type="password"] { 127 | border: 1px solid #9e9fa2; 128 | color: #363636; 129 | text-shadow: 0 1px 1px #ffffff; 130 | font-size: 17px; 131 | outline: none; 132 | padding: 10px; 133 | -moz-border-radius: 20px; 134 | -webkit-border-radius: 20px; 135 | border-radius: 20px; 136 | background: #e6e6e7; 137 | background: -webkit-gradient(linear, left top, left bottom, from(#e6e6e7), to(#fafafa)); 138 | background: -moz-linear-gradient(top, #e6e6e7, #fafafa); 139 | background: linear-gradient(top, #e6e6e7, #fafafa); 140 | background: -webkit-gradient(linear, left top, left bottom, from(#e6e6e7), color-stop(0.3, #fafafa), to(#fafafa)); 141 | } 142 | 143 | textarea { 144 | -moz-border-radius: 10px; 145 | -webkit-border-radius: 10px; 146 | border-radius: 10px; 147 | height: 70px; 148 | } 149 | 150 | .vdivide { 151 | width: 6px; 152 | border: 1px solid #c5c5c5; 153 | border-width: 0 1px 0 1px; 154 | border-right-color: rgba(0, 0, 0, 0.3); 155 | background: #f9f9f9; 156 | background: -webkit-gradient(linear, left top, right top, from(#f9f9f9), to(#dfe0e1)); 157 | background: -moz-linear-gradient(left, #f9f9f9, #dfe0e1); 158 | background: linear-gradient(left, #f9f9f9, #dfe0e1); 159 | } 160 | 161 | #title { 162 | overflow: hidden; 163 | height: 50px; 164 | -webkit-box-sizing: border-box; 165 | -moz-box-sizing: border-box; 166 | box-sizing: border-box; 167 | -moz-box-shadow: inset 0px -1px 3px #1d1d1d; 168 | -webkit-box-shadow: inset 0px -1px 3px #1d1d1d; 169 | box-shadow: inset 0px -1px 3px #1d1d1d; 170 | background: #474747; 171 | background: -webkit-gradient(linear, left top, left bottom, from(#474747), to(#303030)); 172 | background: -moz-linear-gradient(top, #474747, #303030); 173 | background: linear-gradient(top, #474747, #303030); 174 | } 175 | 176 | #title h1 { 177 | line-height: 50px; 178 | float: left; 179 | padding: 0 20px; 180 | font-size: 18px; 181 | margin: 0; 182 | color: #FFF; 183 | border-right: 1px solid #181818; 184 | -moz-box-shadow: 1px 0px 1px #525252; 185 | -webkit-box-shadow: 1px 0px 1px #525252; 186 | box-shadow: 1px 0px 1px #525252; 187 | text-shadow: 0 -1px 1px black; 188 | font-weight: bold; 189 | } 190 | 191 | #wrapper { 192 | position: absolute; 193 | left: 0; 194 | top: 50px; 195 | right: 0; 196 | bottom: 0; 197 | 198 | display: -webkit-box; 199 | -webkit-box-orient: horizontal; 200 | -webkit-box-align: stretch; 201 | -webkit-box-pack: left; 202 | display: -moz-box; 203 | -moz-box-orient: horizontal; 204 | -moz-box-align: stretch; 205 | -moz-box-pack: left; 206 | } 207 | 208 | #sidebar { 209 | 210 | display: -webkit-box; 211 | -webkit-box-orient: vertical; 212 | -webkit-box-align: stretch; 213 | -webkit-box-pack: left; 214 | display: -moz-box; 215 | -moz-box-orient: vertical; 216 | -moz-box-align: stretch; 217 | -moz-box-pack: left; 218 | } 219 | 220 | #sidebar .items { 221 | -webkit-box-flex: 1; 222 | -moz-box-flex: 1; 223 | box-flex: 1; 224 | overflow: auto; 225 | } 226 | 227 | #sidebar ul { 228 | list-style: none; 229 | margin: 0; 230 | padding: 0; 231 | } 232 | 233 | #sidebar li { 234 | cursor: pointer; 235 | border-bottom: 1px solid #d2d2d1; 236 | position: relative; 237 | color: #333; 238 | text-overflow: ellipsis; 239 | overflow: hidden; 240 | white-space: nowrap; 241 | } 242 | 243 | #sidebar li.current { 244 | color: #ffffff; 245 | text-shadow: 0 -1px 1px #46677f; 246 | background: #7bb5db; 247 | background: -webkit-gradient(linear, left top, left bottom, from(#7bb5db), to(#4775b8)); 248 | background: -moz-linear-gradient(top, #7bb5db, #4775b8); 249 | background: linear-gradient(top, #7bb5db, #4775b8); 250 | border-bottom-color: #609fd0; 251 | -moz-box-shadow: inset 0 2px 2px #4775b8; 252 | -webkit-box-shadow: inset 0 2px 2px #4775b8; 253 | box-shadow: inset 0 2px 2px #4775b8; 254 | -webkit-box-shadow: inset 0 1px 1px #4775b8, inset 0 -1px 1px #3e67a3; 255 | } 256 | 257 | #sidebar li .cta { 258 | position: absolute; 259 | right: 10px; 260 | top: 12px; 261 | 262 | padding: 0px 6px; 263 | color: #ffffff; 264 | font-size: 12px; 265 | font-weight: bold; 266 | border: 2px solid #ffffff; 267 | -moz-border-radius: 30px; 268 | -webkit-border-radius: 30px; 269 | border-radius: 30px; 270 | -moz-box-shadow: 0 0 2px #7f7f7f; 271 | -webkit-box-shadow: 0 0 2px #7f7f7f; 272 | box-shadow: 0 0 2px #7f7f7f; 273 | text-shadow: 0 -1px 1px #7f7f7f; 274 | background: #58a7d5; 275 | background: -webkit-gradient(linear, left top, left bottom, from(#58a7d5), to(#3995cc)); 276 | background: -moz-linear-gradient(top, #58a7d5, #3995cc); 277 | background: linear-gradient(top, #58a7d5, #3995cc); 278 | background: -webkit-gradient(linear, left top, left bottom, from(#58a7d5), color-stop(0.5, #58a7d5), color-stop(0.5, #3995cc), to(#3995cc)) 279 | } 280 | 281 | #sidebar li img { 282 | float: left; 283 | width: 32px; 284 | height: 32px; 285 | margin: 8px; 286 | 287 | -moz-border-radius: 5px; 288 | -webkit-border-radius: 5px; 289 | border-radius: 5px; 290 | -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.3); 291 | -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.3); 292 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.3); 293 | } 294 | 295 | #sidebar .name { 296 | float: left; 297 | margin: 15px 8px 8px 5px; 298 | } 299 | 300 | #sidebar footer { 301 | padding: 6px; 302 | border-top: 1px solid #c5c5c5; 303 | background: #ffffff; 304 | background: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#dedfe0)); 305 | background: -moz-linear-gradient(top, #ffffff, #dedfe0); 306 | background: linear-gradient(top, #ffffff, #dedfe0); 307 | -moz-box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.1); 308 | -webkit-box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.1); 309 | box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.1); 310 | text-align: right; 311 | } 312 | 313 | #sidebar .search { 314 | padding: 6px 7px 5px 7px; 315 | border: 1px solid #c5c5c5; 316 | border-width: 1px 0 1px 0; 317 | background: #ffffff; 318 | background: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#dedfe0)); 319 | background: -moz-linear-gradient(top, #ffffff, #dedfe0); 320 | background: linear-gradient(top, #ffffff, #dedfe0); 321 | } 322 | 323 | #sidebar .search input { 324 | font-size: 30px; 325 | width: 100%; 326 | } 327 | 328 | #sidebar .empty { 329 | font-style: italic; 330 | } 331 | 332 | #contacts { 333 | -webkit-box-flex: 1; 334 | -moz-box-flex: 1; 335 | box-flex: 1; 336 | } 337 | 338 | #contacts .options { 339 | margin: 0; 340 | padding: 0; 341 | overflow: hidden; 342 | 343 | list-style: none; 344 | color: #333333; 345 | font-weight: bold; 346 | text-shadow: 0 1px 1px #ffffff; 347 | font-size: 14px; 348 | border-bottom: 1px solid rgba(0, 0, 0, 0.3); 349 | background: #ffffff; 350 | background: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#e0e0e1)); 351 | background: -moz-linear-gradient(top, #ffffff, #e0e0e1); 352 | background: linear-gradient(top, #ffffff, #e0e0e1); 353 | -moz-box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1); 354 | -webkit-box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1); 355 | box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1); 356 | -webkit-box-shadow: inset -1px -1px 3px #eeeeee, 1px 1px 2px rgba(0, 0, 0, 0.1); 357 | } 358 | 359 | #contacts .options li { 360 | float: left; 361 | line-height: 30px; 362 | height: 30px; 363 | padding: 0 20px; 364 | cursor: pointer; 365 | border-right: 1px solid rgba(0, 0, 0, 0.3); 366 | } 367 | 368 | #contacts .options li:active { 369 | background: #dadada; 370 | -moz-box-shadow: inset 0 0 10px #9c9c9c; 371 | -webkit-box-shadow: inset 0 0 10px #9c9c9c; 372 | box-shadow: inset 0 0 10px #9c9c9c; 373 | } 374 | 375 | #contacts .options li.default { 376 | color: #ffffff; 377 | text-shadow: 0 -1px 1px #46677f; 378 | background: #7bb5db; 379 | background: -webkit-gradient(linear, left top, left bottom, from(#7bb5db), to(#4775b8)); 380 | background: -moz-linear-gradient(top, #7bb5db, #4775b8); 381 | background: linear-gradient(top, #7bb5db, #4775b8); 382 | } 383 | 384 | #contacts .options li.default:active { 385 | border-left-color: #a8a8a8; 386 | background: #7bb5db; 387 | -moz-box-shadow: inset 0 0 10px #4775b8; 388 | -webkit-box-shadow: inset 0 0 10px #4775b8; 389 | box-shadow: inset 0 0 10px #4775b8; 390 | } 391 | 392 | #contacts .content { 393 | -moz-box-shadow: inset 1px 2px 2px rgba(0, 0, 0, 0.1); 394 | -webkit-box-shadow: inset 1px 2px 2px rgba(0, 0, 0, 0.1); 395 | box-shadow: inset 1px 2px 2px rgba(0, 0, 0, 0.1); 396 | padding: 20px; 397 | 398 | -webkit-user-select: text; 399 | } 400 | 401 | #contacts .content span { 402 | -webkit-user-select: none; 403 | } 404 | 405 | #contacts .empty { 406 | font-style: italic; 407 | } 408 | 409 | /*my additions*/ 410 | #sidebar li img { 411 | width: 80px; 412 | height: 120px; 413 | } -------------------------------------------------------------------------------- /lib/spine.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | 3 | var Spine; 4 | if (typeof exports !== "undefined") { 5 | Spine = exports; 6 | } else { 7 | Spine = this.Spine = {}; 8 | } 9 | 10 | Spine.version = "0.0.4"; 11 | 12 | var $ = Spine.$ = this.jQuery || this.Zepto || function(){ return arguments[0]; }; 13 | 14 | var makeArray = Spine.makeArray = function(args){ 15 | return Array.prototype.slice.call(args, 0); 16 | }; 17 | 18 | // Shim Array, as these functions aren't in IE 19 | if (typeof Array.prototype.indexOf === "undefined") 20 | Array.prototype.indexOf = function(value){ 21 | for ( var i = 0; i < this.length; i++ ) 22 | if ( this[ i ] === value ) 23 | return i; 24 | return -1; 25 | }; 26 | 27 | var Events = Spine.Events = { 28 | bind: function(ev, callback) { 29 | var evs = ev.split(" "); 30 | var calls = this._callbacks || (this._callbacks = {}); 31 | 32 | for (var i=0; i < evs.length; i++) 33 | (this._callbacks[evs[i]] || (this._callbacks[evs[i]] = [])).push(callback); 34 | 35 | return this; 36 | }, 37 | 38 | trigger: function() { 39 | var args = makeArray(arguments); 40 | var ev = args.shift(); 41 | 42 | var list, calls, i, l; 43 | if (!(calls = this._callbacks)) return false; 44 | if (!(list = this._callbacks[ev])) return false; 45 | 46 | for (i = 0, l = list.length; i < l; i++) 47 | if (list[i].apply(this, args) === false) 48 | break; 49 | 50 | return true; 51 | }, 52 | 53 | unbind: function(ev, callback){ 54 | if ( !ev ) { 55 | this._callbacks = {}; 56 | return this; 57 | } 58 | 59 | var list, calls, i, l; 60 | if (!(calls = this._callbacks)) return this; 61 | if (!(list = this._callbacks[ev])) return this; 62 | 63 | if ( !callback ) { 64 | delete this._callbacks[ev]; 65 | return this; 66 | } 67 | 68 | for (i = 0, l = list.length; i < l; i++) 69 | if (callback === list[i]) { 70 | list.splice(i, 1); 71 | break; 72 | } 73 | 74 | return this; 75 | } 76 | }; 77 | 78 | var Log = Spine.Log = { 79 | trace: true, 80 | 81 | logPrefix: "(App)", 82 | 83 | log: function(){ 84 | if ( !this.trace ) return; 85 | if (typeof console == "undefined") return; 86 | var args = makeArray(arguments); 87 | if (this.logPrefix) args.unshift(this.logPrefix); 88 | console.log.apply(console, args); 89 | return this; 90 | } 91 | }; 92 | 93 | // Classes (or prototypial inheritors) 94 | 95 | if (typeof Object.create !== "function") 96 | Object.create = function(o) { 97 | function F() {} 98 | F.prototype = o; 99 | return new F(); 100 | }; 101 | 102 | var moduleKeywords = ["included", "extended"]; 103 | 104 | var Class = Spine.Class = { 105 | inherited: function(){}, 106 | created: function(){}, 107 | 108 | prototype: { 109 | initialize: function(){}, 110 | init: function(){} 111 | }, 112 | 113 | create: function(include, extend){ 114 | var object = Object.create(this); 115 | object.parent = this; 116 | object.prototype = object.fn = Object.create(this.prototype); 117 | 118 | if (include) object.include(include); 119 | if (extend) object.extend(extend); 120 | 121 | object.created(); 122 | this.inherited(object); 123 | return object; 124 | }, 125 | 126 | init: function(){ 127 | var instance = Object.create(this.prototype); 128 | instance.parent = this; 129 | 130 | instance.initialize.apply(instance, arguments); 131 | instance.init.apply(instance, arguments); 132 | return instance; 133 | }, 134 | 135 | proxy: function(func){ 136 | var thisObject = this; 137 | return(function(){ 138 | return func.apply(thisObject, arguments); 139 | }); 140 | }, 141 | 142 | proxyAll: function(){ 143 | var functions = makeArray(arguments); 144 | for (var i=0; i < functions.length; i++) 145 | this[functions[i]] = this.proxy(this[functions[i]]); 146 | }, 147 | 148 | include: function(obj){ 149 | for(var key in obj) 150 | if (moduleKeywords.indexOf(key) == -1) 151 | this.fn[key] = obj[key]; 152 | 153 | var included = obj.included; 154 | if (included) included.apply(this); 155 | return this; 156 | }, 157 | 158 | extend: function(obj){ 159 | for(var key in obj) 160 | if (moduleKeywords.indexOf(key) == -1) 161 | this[key] = obj[key]; 162 | 163 | var extended = obj.extended; 164 | if (extended) extended.apply(this); 165 | return this; 166 | } 167 | }; 168 | 169 | Class.prototype.proxy = Class.proxy; 170 | Class.prototype.proxyAll = Class.proxyAll; 171 | Class.inst = Class.init; 172 | Class.sub = Class.create; 173 | 174 | // Models 175 | 176 | Spine.guid = function(){ 177 | return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { 178 | var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); 179 | return v.toString(16); 180 | }).toUpperCase(); 181 | }; 182 | 183 | var Model = Spine.Model = Class.create(); 184 | 185 | Model.extend(Events); 186 | 187 | Model.extend({ 188 | setup: function(name, atts){ 189 | var model = Model.sub(); 190 | if (name) model.name = name; 191 | if (atts) model.attributes = atts; 192 | return model; 193 | }, 194 | 195 | created: function(sub){ 196 | this.records = {}; 197 | this.attributes = this.attributes ? 198 | makeArray(this.attributes) : []; 199 | }, 200 | 201 | find: function(id){ 202 | var record = this.records[id]; 203 | if ( !record ) throw("Unknown record"); 204 | return record.clone(); 205 | }, 206 | 207 | exists: function(id){ 208 | try { 209 | return this.find(id); 210 | } catch (e) { 211 | return false; 212 | } 213 | }, 214 | 215 | refresh: function(values){ 216 | this.records = {}; 217 | 218 | for (var i=0, il = values.length; i < il; i++) { 219 | var record = this.init(values[i]); 220 | record.newRecord = false; 221 | this.records[record.id] = record; 222 | } 223 | 224 | this.trigger("refresh"); 225 | }, 226 | 227 | select: function(callback){ 228 | var result = []; 229 | 230 | for (var key in this.records) 231 | if (callback(this.records[key])) 232 | result.push(this.records[key]); 233 | 234 | return this.cloneArray(result); 235 | }, 236 | 237 | findByAttribute: function(name, value){ 238 | for (var key in this.records) 239 | if (this.records[key][name] == value) 240 | return this.records[key].clone(); 241 | }, 242 | 243 | findAllByAttribute: function(name, value){ 244 | return(this.select(function(item){ 245 | return(item[name] == value); 246 | })); 247 | }, 248 | 249 | each: function(callback){ 250 | for (var key in this.records) 251 | callback(this.records[key]); 252 | }, 253 | 254 | all: function(){ 255 | return this.cloneArray(this.recordsValues()); 256 | }, 257 | 258 | first: function(){ 259 | var record = this.recordsValues()[0]; 260 | return(record && record.clone()); 261 | }, 262 | 263 | last: function(){ 264 | var values = this.recordsValues() 265 | var record = values[values.length - 1]; 266 | return(record && record.clone()); 267 | }, 268 | 269 | count: function(){ 270 | return this.recordsValues().length; 271 | }, 272 | 273 | deleteAll: function(){ 274 | for (var key in this.records) 275 | delete this.records[key]; 276 | }, 277 | 278 | destroyAll: function(){ 279 | for (var key in this.records) 280 | this.records[key].destroy(); 281 | }, 282 | 283 | update: function(id, atts){ 284 | this.find(id).updateAttributes(atts); 285 | }, 286 | 287 | create: function(atts){ 288 | var record = this.init(atts); 289 | return record.save(); 290 | }, 291 | 292 | destroy: function(id){ 293 | this.find(id).destroy(); 294 | }, 295 | 296 | sync: function(callback){ 297 | this.bind("change", callback); 298 | }, 299 | 300 | fetch: function(callback){ 301 | callback ? this.bind("fetch", callback) : this.trigger("fetch"); 302 | }, 303 | 304 | toJSON: function(){ 305 | return this.recordsValues(); 306 | }, 307 | 308 | fromJSON: function(objects){ 309 | if ( !objects ) return; 310 | if (typeof objects == "string") 311 | objects = JSON.parse(objects) 312 | if (typeof objects.length == "number") { 313 | var results = []; 314 | for (var i=0; i < objects.length; i++) 315 | results.push(this.init(objects[i])); 316 | return results; 317 | } else { 318 | return this.init(objects); 319 | } 320 | }, 321 | 322 | // Private 323 | 324 | recordsValues: function(){ 325 | var result = []; 326 | for (var key in this.records) 327 | result.push(this.records[key]); 328 | return result; 329 | }, 330 | 331 | cloneArray: function(array){ 332 | var result = []; 333 | for (var i=0; i < array.length; i++) 334 | result.push(array[i].dup()); 335 | return result; 336 | } 337 | }); 338 | 339 | Model.include({ 340 | model: true, 341 | newRecord: true, 342 | 343 | init: function(atts){ 344 | if (atts) this.load(atts); 345 | }, 346 | 347 | isNew: function(){ 348 | return this.newRecord; 349 | }, 350 | 351 | isValid: function(){ 352 | return(!this.validate()); 353 | }, 354 | 355 | validate: function(){ }, 356 | 357 | load: function(atts){ 358 | for(var name in atts) 359 | this[name] = atts[name]; 360 | }, 361 | 362 | attributes: function(){ 363 | var result = {}; 364 | for (var i=0; i < this.parent.attributes.length; i++) { 365 | var attr = this.parent.attributes[i]; 366 | result[attr] = this[attr]; 367 | } 368 | result.id = this.id; 369 | return result; 370 | }, 371 | 372 | eql: function(rec){ 373 | return(rec && rec.id === this.id && 374 | rec.parent === this.parent); 375 | }, 376 | 377 | save: function(){ 378 | var error = this.validate(); 379 | if ( error ) { 380 | this.trigger("error", this, error) 381 | return false; 382 | } 383 | 384 | this.trigger("beforeSave", this); 385 | this.newRecord ? this.create() : this.update(); 386 | this.trigger("save", this); 387 | return this; 388 | }, 389 | 390 | updateAttribute: function(name, value){ 391 | this[name] = value; 392 | return this.save(); 393 | }, 394 | 395 | updateAttributes: function(atts){ 396 | this.load(atts); 397 | return this.save(); 398 | }, 399 | 400 | destroy: function(){ 401 | this.trigger("beforeDestroy", this); 402 | delete this.parent.records[this.id]; 403 | this.trigger("destroy", this); 404 | this.trigger("change", this, "destroy"); 405 | }, 406 | 407 | dup: function(){ 408 | var result = this.parent.init(this.attributes()); 409 | result.newRecord = this.newRecord; 410 | return result; 411 | }, 412 | 413 | clone: function(){ 414 | return Object.create(this); 415 | }, 416 | 417 | reload: function(){ 418 | if ( this.newRecord ) return this; 419 | var original = this.parent.find(this.id); 420 | this.load(original.attributes()); 421 | return original; 422 | }, 423 | 424 | toJSON: function(){ 425 | return(this.attributes()); 426 | }, 427 | 428 | exists: function(){ 429 | return(this.id && this.id in this.parent.records); 430 | }, 431 | 432 | // Private 433 | 434 | update: function(){ 435 | this.trigger("beforeUpdate", this); 436 | var records = this.parent.records; 437 | records[this.id].load(this.attributes()); 438 | var clone = records[this.id].clone(); 439 | this.trigger("update", clone); 440 | this.trigger("change", clone, "update"); 441 | }, 442 | 443 | create: function(){ 444 | this.trigger("beforeCreate", this); 445 | if ( !this.id ) this.id = Spine.guid(); 446 | this.newRecord = false; 447 | var records = this.parent.records; 448 | records[this.id] = this.dup(); 449 | var clone = records[this.id].clone(); 450 | this.trigger("create", clone); 451 | this.trigger("change", clone, "create"); 452 | }, 453 | 454 | bind: function(events, callback){ 455 | return this.parent.bind(events, this.proxy(function(record){ 456 | if ( record && this.eql(record) ) 457 | callback.apply(this, arguments); 458 | })); 459 | }, 460 | 461 | trigger: function(){ 462 | return this.parent.trigger.apply(this.parent, arguments); 463 | } 464 | }); 465 | 466 | // Controllers 467 | 468 | var eventSplitter = /^(\w+)\s*(.*)$/; 469 | 470 | var Controller = Spine.Controller = Class.create({ 471 | tag: "div", 472 | 473 | initialize: function(options){ 474 | this.options = options; 475 | 476 | for (var key in this.options) 477 | this[key] = this.options[key]; 478 | 479 | if (!this.el) this.el = document.createElement(this.tag); 480 | this.el = $(this.el); 481 | 482 | if ( !this.events ) this.events = this.parent.events; 483 | if ( !this.elements ) this.elements = this.parent.elements; 484 | 485 | if (this.events) this.delegateEvents(); 486 | if (this.elements) this.refreshElements(); 487 | if (this.proxied) this.proxyAll.apply(this, this.proxied); 488 | }, 489 | 490 | $: function(selector){ 491 | return $(selector, this.el); 492 | }, 493 | 494 | delegateEvents: function(){ 495 | for (var key in this.events) { 496 | var methodName = this.events[key]; 497 | var method = this.proxy(this[methodName]); 498 | 499 | var match = key.match(eventSplitter); 500 | var eventName = match[1], selector = match[2]; 501 | 502 | if (selector === '') { 503 | this.el.bind(eventName, method); 504 | } else { 505 | this.el.delegate(selector, eventName, method); 506 | } 507 | } 508 | }, 509 | 510 | refreshElements: function(){ 511 | for (var key in this.elements) { 512 | this[this.elements[key]] = this.$(key); 513 | } 514 | }, 515 | 516 | delay: function(func, timeout){ 517 | setTimeout(this.proxy(func), timeout || 0); 518 | } 519 | }); 520 | 521 | Controller.include(Events); 522 | Controller.include(Log); 523 | 524 | Spine.App = Class.create(); 525 | Spine.App.extend(Events) 526 | Controller.fn.App = Spine.App; 527 | })(); -------------------------------------------------------------------------------- /lib/json2.js: -------------------------------------------------------------------------------- 1 | /* 2 | http://www.JSON.org/json2.js 3 | 2009-09-29 4 | 5 | Public Domain. 6 | 7 | NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. 8 | 9 | See http://www.JSON.org/js.html 10 | 11 | 12 | This code should be minified before deployment. 13 | See http://javascript.crockford.com/jsmin.html 14 | 15 | USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO 16 | NOT CONTROL. 17 | 18 | 19 | This file creates a global JSON object containing two methods: stringify 20 | and parse. 21 | 22 | JSON.stringify(value, replacer, space) 23 | value any JavaScript value, usually an object or array. 24 | 25 | replacer an optional parameter that determines how object 26 | values are stringified for objects. It can be a 27 | function or an array of strings. 28 | 29 | space an optional parameter that specifies the indentation 30 | of nested structures. If it is omitted, the text will 31 | be packed without extra whitespace. If it is a number, 32 | it will specify the number of spaces to indent at each 33 | level. If it is a string (such as '\t' or ' '), 34 | it contains the characters used to indent at each level. 35 | 36 | This method produces a JSON text from a JavaScript value. 37 | 38 | When an object value is found, if the object contains a toJSON 39 | method, its toJSON method will be called and the result will be 40 | stringified. A toJSON method does not serialize: it returns the 41 | value represented by the name/value pair that should be serialized, 42 | or undefined if nothing should be serialized. The toJSON method 43 | will be passed the key associated with the value, and this will be 44 | bound to the value 45 | 46 | For example, this would serialize Dates as ISO strings. 47 | 48 | Date.prototype.toJSON = function (key) { 49 | function f(n) { 50 | // Format integers to have at least two digits. 51 | return n < 10 ? '0' + n : n; 52 | } 53 | 54 | return this.getUTCFullYear() + '-' + 55 | f(this.getUTCMonth() + 1) + '-' + 56 | f(this.getUTCDate()) + 'T' + 57 | f(this.getUTCHours()) + ':' + 58 | f(this.getUTCMinutes()) + ':' + 59 | f(this.getUTCSeconds()) + 'Z'; 60 | }; 61 | 62 | You can provide an optional replacer method. It will be passed the 63 | key and value of each member, with this bound to the containing 64 | object. The value that is returned from your method will be 65 | serialized. If your method returns undefined, then the member will 66 | be excluded from the serialization. 67 | 68 | If the replacer parameter is an array of strings, then it will be 69 | used to select the members to be serialized. It filters the results 70 | such that only members with keys listed in the replacer array are 71 | stringified. 72 | 73 | Values that do not have JSON representations, such as undefined or 74 | functions, will not be serialized. Such values in objects will be 75 | dropped; in arrays they will be replaced with null. You can use 76 | a replacer function to replace those with JSON values. 77 | JSON.stringify(undefined) returns undefined. 78 | 79 | The optional space parameter produces a stringification of the 80 | value that is filled with line breaks and indentation to make it 81 | easier to read. 82 | 83 | If the space parameter is a non-empty string, then that string will 84 | be used for indentation. If the space parameter is a number, then 85 | the indentation will be that many spaces. 86 | 87 | Example: 88 | 89 | text = JSON.stringify(['e', {pluribus: 'unum'}]); 90 | // text is '["e",{"pluribus":"unum"}]' 91 | 92 | 93 | text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); 94 | // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' 95 | 96 | text = JSON.stringify([new Date()], function (key, value) { 97 | return this[key] instanceof Date ? 98 | 'Date(' + this[key] + ')' : value; 99 | }); 100 | // text is '["Date(---current time---)"]' 101 | 102 | 103 | JSON.parse(text, reviver) 104 | This method parses a JSON text to produce an object or array. 105 | It can throw a SyntaxError exception. 106 | 107 | The optional reviver parameter is a function that can filter and 108 | transform the results. It receives each of the keys and values, 109 | and its return value is used instead of the original value. 110 | If it returns what it received, then the structure is not modified. 111 | If it returns undefined then the member is deleted. 112 | 113 | Example: 114 | 115 | // Parse the text. Values that look like ISO date strings will 116 | // be converted to Date objects. 117 | 118 | myData = JSON.parse(text, function (key, value) { 119 | var a; 120 | if (typeof value === 'string') { 121 | a = 122 | /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); 123 | if (a) { 124 | return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], 125 | +a[5], +a[6])); 126 | } 127 | } 128 | return value; 129 | }); 130 | 131 | myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { 132 | var d; 133 | if (typeof value === 'string' && 134 | value.slice(0, 5) === 'Date(' && 135 | value.slice(-1) === ')') { 136 | d = new Date(value.slice(5, -1)); 137 | if (d) { 138 | return d; 139 | } 140 | } 141 | return value; 142 | }); 143 | 144 | 145 | This is a reference implementation. You are free to copy, modify, or 146 | redistribute. 147 | */ 148 | 149 | /*jslint evil: true, strict: false */ 150 | 151 | /*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, 152 | call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, 153 | getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, 154 | lastIndex, length, parse, prototype, push, replace, slice, stringify, 155 | test, toJSON, toString, valueOf 156 | */ 157 | 158 | 159 | // Create a JSON object only if one does not already exist. We create the 160 | // methods in a closure to avoid creating global variables. 161 | 162 | if (!this.JSON) { 163 | this.JSON = {}; 164 | } 165 | 166 | (function () { 167 | 168 | function f(n) { 169 | // Format integers to have at least two digits. 170 | return n < 10 ? '0' + n : n; 171 | } 172 | 173 | if (typeof Date.prototype.toJSON !== 'function') { 174 | 175 | Date.prototype.toJSON = function (key) { 176 | 177 | return isFinite(this.valueOf()) ? 178 | this.getUTCFullYear() + '-' + 179 | f(this.getUTCMonth() + 1) + '-' + 180 | f(this.getUTCDate()) + 'T' + 181 | f(this.getUTCHours()) + ':' + 182 | f(this.getUTCMinutes()) + ':' + 183 | f(this.getUTCSeconds()) + 'Z' : null; 184 | }; 185 | 186 | String.prototype.toJSON = 187 | Number.prototype.toJSON = 188 | Boolean.prototype.toJSON = function (key) { 189 | return this.valueOf(); 190 | }; 191 | } 192 | 193 | var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, 194 | escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, 195 | gap, 196 | indent, 197 | meta = { // table of character substitutions 198 | '\b': '\\b', 199 | '\t': '\\t', 200 | '\n': '\\n', 201 | '\f': '\\f', 202 | '\r': '\\r', 203 | '"' : '\\"', 204 | '\\': '\\\\' 205 | }, 206 | rep; 207 | 208 | 209 | function quote(string) { 210 | 211 | // If the string contains no control characters, no quote characters, and no 212 | // backslash characters, then we can safely slap some quotes around it. 213 | // Otherwise we must also replace the offending characters with safe escape 214 | // sequences. 215 | 216 | escapable.lastIndex = 0; 217 | return escapable.test(string) ? 218 | '"' + string.replace(escapable, function (a) { 219 | var c = meta[a]; 220 | return typeof c === 'string' ? c : 221 | '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); 222 | }) + '"' : 223 | '"' + string + '"'; 224 | } 225 | 226 | 227 | function str(key, holder) { 228 | 229 | // Produce a string from holder[key]. 230 | 231 | var i, // The loop counter. 232 | k, // The member key. 233 | v, // The member value. 234 | length, 235 | mind = gap, 236 | partial, 237 | value = holder[key]; 238 | 239 | // If the value has a toJSON method, call it to obtain a replacement value. 240 | 241 | if (value && typeof value === 'object' && 242 | typeof value.toJSON === 'function') { 243 | value = value.toJSON(key); 244 | } 245 | 246 | // If we were called with a replacer function, then call the replacer to 247 | // obtain a replacement value. 248 | 249 | if (typeof rep === 'function') { 250 | value = rep.call(holder, key, value); 251 | } 252 | 253 | // What happens next depends on the value's type. 254 | 255 | switch (typeof value) { 256 | case 'string': 257 | return quote(value); 258 | 259 | case 'number': 260 | 261 | // JSON numbers must be finite. Encode non-finite numbers as null. 262 | 263 | return isFinite(value) ? String(value) : 'null'; 264 | 265 | case 'boolean': 266 | case 'null': 267 | 268 | // If the value is a boolean or null, convert it to a string. Note: 269 | // typeof null does not produce 'null'. The case is included here in 270 | // the remote chance that this gets fixed someday. 271 | 272 | return String(value); 273 | 274 | // If the type is 'object', we might be dealing with an object or an array or 275 | // null. 276 | 277 | case 'object': 278 | 279 | // Due to a specification blunder in ECMAScript, typeof null is 'object', 280 | // so watch out for that case. 281 | 282 | if (!value) { 283 | return 'null'; 284 | } 285 | 286 | // Make an array to hold the partial results of stringifying this object value. 287 | 288 | gap += indent; 289 | partial = []; 290 | 291 | // Is the value an array? 292 | 293 | if (Object.prototype.toString.apply(value) === '[object Array]') { 294 | 295 | // The value is an array. Stringify every element. Use null as a placeholder 296 | // for non-JSON values. 297 | 298 | length = value.length; 299 | for (i = 0; i < length; i += 1) { 300 | partial[i] = str(i, value) || 'null'; 301 | } 302 | 303 | // Join all of the elements together, separated with commas, and wrap them in 304 | // brackets. 305 | 306 | v = partial.length === 0 ? '[]' : 307 | gap ? '[\n' + gap + 308 | partial.join(',\n' + gap) + '\n' + 309 | mind + ']' : 310 | '[' + partial.join(',') + ']'; 311 | gap = mind; 312 | return v; 313 | } 314 | 315 | // If the replacer is an array, use it to select the members to be stringified. 316 | 317 | if (rep && typeof rep === 'object') { 318 | length = rep.length; 319 | for (i = 0; i < length; i += 1) { 320 | k = rep[i]; 321 | if (typeof k === 'string') { 322 | v = str(k, value); 323 | if (v) { 324 | partial.push(quote(k) + (gap ? ': ' : ':') + v); 325 | } 326 | } 327 | } 328 | } else { 329 | 330 | // Otherwise, iterate through all of the keys in the object. 331 | 332 | for (k in value) { 333 | if (Object.hasOwnProperty.call(value, k)) { 334 | v = str(k, value); 335 | if (v) { 336 | partial.push(quote(k) + (gap ? ': ' : ':') + v); 337 | } 338 | } 339 | } 340 | } 341 | 342 | // Join all of the member texts together, separated with commas, 343 | // and wrap them in braces. 344 | 345 | v = partial.length === 0 ? '{}' : 346 | gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + 347 | mind + '}' : '{' + partial.join(',') + '}'; 348 | gap = mind; 349 | return v; 350 | } 351 | } 352 | 353 | // If the JSON object does not yet have a stringify method, give it one. 354 | 355 | if (typeof JSON.stringify !== 'function') { 356 | JSON.stringify = function (value, replacer, space) { 357 | 358 | // The stringify method takes a value and an optional replacer, and an optional 359 | // space parameter, and returns a JSON text. The replacer can be a function 360 | // that can replace values, or an array of strings that will select the keys. 361 | // A default replacer method can be provided. Use of the space parameter can 362 | // produce text that is more easily readable. 363 | 364 | var i; 365 | gap = ''; 366 | indent = ''; 367 | 368 | // If the space parameter is a number, make an indent string containing that 369 | // many spaces. 370 | 371 | if (typeof space === 'number') { 372 | for (i = 0; i < space; i += 1) { 373 | indent += ' '; 374 | } 375 | 376 | // If the space parameter is a string, it will be used as the indent string. 377 | 378 | } else if (typeof space === 'string') { 379 | indent = space; 380 | } 381 | 382 | // If there is a replacer, it must be a function or an array. 383 | // Otherwise, throw an error. 384 | 385 | rep = replacer; 386 | if (replacer && typeof replacer !== 'function' && 387 | (typeof replacer !== 'object' || 388 | typeof replacer.length !== 'number')) { 389 | throw new Error('JSON.stringify'); 390 | } 391 | 392 | // Make a fake root object containing our value under the key of ''. 393 | // Return the result of stringifying the value. 394 | 395 | return str('', {'': value}); 396 | }; 397 | } 398 | 399 | 400 | // If the JSON object does not yet have a parse method, give it one. 401 | 402 | if (typeof JSON.parse !== 'function') { 403 | JSON.parse = function (text, reviver) { 404 | 405 | // The parse method takes a text and an optional reviver function, and returns 406 | // a JavaScript value if the text is a valid JSON text. 407 | 408 | var j; 409 | 410 | function walk(holder, key) { 411 | 412 | // The walk method is used to recursively walk the resulting structure so 413 | // that modifications can be made. 414 | 415 | var k, v, value = holder[key]; 416 | if (value && typeof value === 'object') { 417 | for (k in value) { 418 | if (Object.hasOwnProperty.call(value, k)) { 419 | v = walk(value, k); 420 | if (v !== undefined) { 421 | value[k] = v; 422 | } else { 423 | delete value[k]; 424 | } 425 | } 426 | } 427 | } 428 | return reviver.call(holder, key, value); 429 | } 430 | 431 | 432 | // Parsing happens in four stages. In the first stage, we replace certain 433 | // Unicode characters with escape sequences. JavaScript handles many characters 434 | // incorrectly, either silently deleting them, or treating them as line endings. 435 | 436 | cx.lastIndex = 0; 437 | if (cx.test(text)) { 438 | text = text.replace(cx, function (a) { 439 | return '\\u' + 440 | ('0000' + a.charCodeAt(0).toString(16)).slice(-4); 441 | }); 442 | } 443 | 444 | // In the second stage, we run the text against regular expressions that look 445 | // for non-JSON patterns. We are especially concerned with '()' and 'new' 446 | // because they can cause invocation, and '=' because it can cause mutation. 447 | // But just to be safe, we want to reject all unexpected forms. 448 | 449 | // We split the second stage into 4 regexp operations in order to work around 450 | // crippling inefficiencies in IE's and Safari's regexp engines. First we 451 | // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we 452 | // replace all simple value tokens with ']' characters. Third, we delete all 453 | // open brackets that follow a colon or comma or that begin the text. Finally, 454 | // we look to see that the remaining characters are only whitespace or ']' or 455 | // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. 456 | 457 | if (/^[\],:{}\s]*$/. 458 | test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'). 459 | replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'). 460 | replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { 461 | 462 | // In the third stage we use the eval function to compile the text into a 463 | // JavaScript structure. The '{' operator is subject to a syntactic ambiguity 464 | // in JavaScript: it can begin a block or an object literal. We wrap the text 465 | // in parens to eliminate the ambiguity. 466 | 467 | j = eval('(' + text + ')'); 468 | 469 | // In the optional fourth stage, we recursively walk the new structure, passing 470 | // each name/value pair to a reviver function for possible transformation. 471 | 472 | return typeof reviver === 'function' ? 473 | walk({'': j}, '') : j; 474 | } 475 | 476 | // If the text is not JSON parseable, then a SyntaxError is thrown. 477 | 478 | throw new SyntaxError('JSON.parse'); 479 | }; 480 | } 481 | }()); --------------------------------------------------------------------------------