├── build.sh ├── coffeescript_for_framerjs.tar.gz ├── epub.sh ├── images ├── img1.png ├── img10.png ├── img11.png ├── img12.png ├── img2.png ├── img3.png ├── img4.png ├── img5.png ├── img6.png ├── img7.png ├── img8.png └── img9.png ├── pdf.sh ├── pkg ├── assets │ ├── framer │ │ ├── cards.framer │ │ │ ├── .gitignore │ │ │ ├── app.coffee │ │ │ ├── framer │ │ │ │ ├── backups │ │ │ │ │ ├── backup-1426979838.coffee │ │ │ │ │ └── backup-1427239449.coffee │ │ │ │ ├── coffee-script.js │ │ │ │ ├── config.json │ │ │ │ ├── framer.generated.js │ │ │ │ ├── framer.init.js │ │ │ │ ├── framer.js │ │ │ │ ├── framer.js.map │ │ │ │ ├── framer.modules.js │ │ │ │ ├── images │ │ │ │ │ ├── background.png │ │ │ │ │ ├── cursor.png │ │ │ │ │ ├── cursor@2x.png │ │ │ │ │ ├── icon-120.png │ │ │ │ │ ├── icon-152.png │ │ │ │ │ ├── icon-180.png │ │ │ │ │ ├── icon-192.png │ │ │ │ │ ├── icon-76.png │ │ │ │ │ ├── icon-arrow.png │ │ │ │ │ ├── icon-arrow@2x.png │ │ │ │ │ ├── icon-close.png │ │ │ │ │ ├── icon-close@2x.png │ │ │ │ │ ├── icon-framer.png │ │ │ │ │ ├── icon-framer@2x.png │ │ │ │ │ ├── icon-share.png │ │ │ │ │ └── icon-share@2x.png │ │ │ │ ├── mirror.css │ │ │ │ ├── style.css │ │ │ │ └── version │ │ │ ├── images │ │ │ │ └── framer-icon.png │ │ │ ├── imported │ │ │ │ └── Camera Roll │ │ │ │ │ ├── framerps.log │ │ │ │ │ ├── images │ │ │ │ │ ├── img1.png │ │ │ │ │ ├── img2.png │ │ │ │ │ ├── img3.png │ │ │ │ │ └── img4.png │ │ │ │ │ ├── layers.json │ │ │ │ │ └── layers.json.js │ │ │ ├── index.html │ │ │ └── modules │ │ │ │ └── myModule.coffee │ │ ├── dropdown.framer │ │ │ ├── .temp.html │ │ │ ├── app.coffee │ │ │ ├── framer │ │ │ │ ├── backups │ │ │ │ │ └── backup-1427673752.coffee │ │ │ │ ├── coffee-script.js │ │ │ │ ├── config.json │ │ │ │ ├── framer.generated.js │ │ │ │ ├── framer.init.js │ │ │ │ ├── framer.js │ │ │ │ ├── framer.js.map │ │ │ │ ├── framer.modules.js │ │ │ │ ├── images │ │ │ │ │ ├── background.png │ │ │ │ │ ├── cursor.png │ │ │ │ │ ├── cursor@2x.png │ │ │ │ │ ├── icon-120.png │ │ │ │ │ ├── icon-152.png │ │ │ │ │ ├── icon-76.png │ │ │ │ │ ├── icon-arrow.png │ │ │ │ │ ├── icon-arrow@2x.png │ │ │ │ │ ├── icon-close.png │ │ │ │ │ ├── icon-close@2x.png │ │ │ │ │ ├── icon-framer.png │ │ │ │ │ ├── icon-framer@2x.png │ │ │ │ │ ├── icon-share.png │ │ │ │ │ └── icon-share@2x.png │ │ │ │ ├── mirror.css │ │ │ │ ├── style.css │ │ │ │ └── version │ │ │ ├── images │ │ │ │ └── framer-icon.png │ │ │ ├── imported │ │ │ │ ├── dropdown │ │ │ │ │ ├── framerps.log │ │ │ │ │ ├── images │ │ │ │ │ │ ├── Top_bar.png │ │ │ │ │ │ ├── bg.png │ │ │ │ │ │ ├── dividers.png │ │ │ │ │ │ ├── menuContent.png │ │ │ │ │ │ ├── menuIcon.png │ │ │ │ │ │ └── text.png │ │ │ │ │ ├── layers.json │ │ │ │ │ └── layers.json.js │ │ │ │ └── example2_dropdown │ │ │ │ │ ├── images │ │ │ │ │ ├── menu_content-F690BFCA-B7DF-4F9B-9338-31D759DE120B.png │ │ │ │ │ ├── menu_icon-2A7FE607-FA78-4433-9B34-0C8F0F5F0DD3.png │ │ │ │ │ └── top_bar-4ADEAF2E-859C-4DAC-A1C2-31E6EA30D173.png │ │ │ │ │ ├── layers.json │ │ │ │ │ └── layers.json.js │ │ │ └── index.html │ │ ├── popup.framer │ │ │ ├── .gitignore │ │ │ ├── app.coffee │ │ │ ├── framer │ │ │ │ ├── backups │ │ │ │ │ ├── backup-1427673752.coffee │ │ │ │ │ └── backup-1428264184.coffee │ │ │ │ ├── coffee-script.js │ │ │ │ ├── config.json │ │ │ │ ├── framer.generated.js │ │ │ │ ├── framer.init.js │ │ │ │ ├── framer.js │ │ │ │ ├── framer.js.map │ │ │ │ ├── framer.modules.js │ │ │ │ ├── images │ │ │ │ │ ├── background.png │ │ │ │ │ ├── cursor.png │ │ │ │ │ ├── cursor@2x.png │ │ │ │ │ ├── icon-120.png │ │ │ │ │ ├── icon-152.png │ │ │ │ │ ├── icon-180.png │ │ │ │ │ ├── icon-192.png │ │ │ │ │ ├── icon-76.png │ │ │ │ │ ├── icon-arrow.png │ │ │ │ │ ├── icon-arrow@2x.png │ │ │ │ │ ├── icon-close.png │ │ │ │ │ ├── icon-close@2x.png │ │ │ │ │ ├── icon-framer.png │ │ │ │ │ ├── icon-framer@2x.png │ │ │ │ │ ├── icon-share.png │ │ │ │ │ └── icon-share@2x.png │ │ │ │ ├── mirror.css │ │ │ │ ├── style.css │ │ │ │ └── version │ │ │ ├── images │ │ │ │ └── framer-icon.png │ │ │ ├── imported │ │ │ │ ├── example1_popup │ │ │ │ │ ├── framerps.log │ │ │ │ │ ├── images │ │ │ │ │ │ ├── Achievement_Icon-BCEA5EB2-97CB-4926-8828-0B85CFD92CD1.png │ │ │ │ │ │ ├── Mustache.png │ │ │ │ │ │ ├── Popup.png │ │ │ │ │ │ ├── badge.png │ │ │ │ │ │ ├── bg-467D259F-657A-4BEC-B60C-B8649B3A5542.png │ │ │ │ │ │ ├── bg.png │ │ │ │ │ │ ├── circle__teh_moustache-810CF4A7-B56C-4B9D-AD49-D09F2DBC003F.png │ │ │ │ │ │ ├── close-3BE91730-52E7-410C-ABCF-BEFE252C156C.png │ │ │ │ │ │ ├── close.png │ │ │ │ │ │ └── popup-C8C4A3B3-B9F7-4579-89AD-7E65563620BF.png │ │ │ │ │ ├── layers.json │ │ │ │ │ └── layers.json.js │ │ │ │ ├── example1_popup2 │ │ │ │ │ ├── images │ │ │ │ │ │ ├── Achievement_Icon-BCEA5EB2-97CB-4926-8828-0B85CFD92CD1.png │ │ │ │ │ │ ├── bg-467D259F-657A-4BEC-B60C-B8649B3A5542.png │ │ │ │ │ │ └── popup-C8C4A3B3-B9F7-4579-89AD-7E65563620BF.png │ │ │ │ │ ├── layers.json │ │ │ │ │ └── layers.json.js │ │ │ │ └── iPhone 6 Template │ │ │ │ │ ├── images │ │ │ │ │ ├── iconAlbums-5E358598-E973-4248-B288-BE3F2F2C02C1.png │ │ │ │ │ ├── iconPhotos-F79F21BE-BF0C-42B6-99E2-9DAB0FA42D53.png │ │ │ │ │ ├── iconShared-63CB48BD-ED6A-4CF2-809E-50E593D17396.png │ │ │ │ │ ├── navBar-EA2E254D-4F05-45F5-B120-33C145CE7923.png │ │ │ │ │ ├── screen-467D259F-657A-4BEC-B60C-B8649B3A5542.png │ │ │ │ │ ├── statusBar-A86820BD-4D5F-44EF-AEBB-21FEEF30391A.png │ │ │ │ │ └── tabBar-C7F707CA-04FE-4EE4-995E-06B68173F067.png │ │ │ │ │ ├── layers.json │ │ │ │ │ └── layers.json.js │ │ │ ├── index.html │ │ │ └── modules │ │ │ │ └── myModule.coffee │ │ ├── swipe.framer │ │ │ ├── .temp.html │ │ │ ├── app.coffee │ │ │ ├── framer │ │ │ │ ├── backups │ │ │ │ │ ├── backup-1427673752.coffee │ │ │ │ │ └── backup-1428264184.coffee │ │ │ │ ├── coffee-script.js │ │ │ │ ├── config.json │ │ │ │ ├── framer.generated.js │ │ │ │ ├── framer.init.js │ │ │ │ ├── framer.js │ │ │ │ ├── framer.js.map │ │ │ │ ├── framer.modules.js │ │ │ │ ├── images │ │ │ │ │ ├── background.png │ │ │ │ │ ├── cursor.png │ │ │ │ │ ├── cursor@2x.png │ │ │ │ │ ├── icon-120.png │ │ │ │ │ ├── icon-152.png │ │ │ │ │ ├── icon-76.png │ │ │ │ │ ├── icon-arrow.png │ │ │ │ │ ├── icon-arrow@2x.png │ │ │ │ │ ├── icon-close.png │ │ │ │ │ ├── icon-close@2x.png │ │ │ │ │ ├── icon-framer.png │ │ │ │ │ ├── icon-framer@2x.png │ │ │ │ │ ├── icon-share.png │ │ │ │ │ └── icon-share@2x.png │ │ │ │ ├── mirror.css │ │ │ │ ├── style.css │ │ │ │ └── version │ │ │ ├── images │ │ │ │ └── framer-icon.png │ │ │ ├── imported │ │ │ │ ├── example3_swipe │ │ │ │ │ ├── images │ │ │ │ │ │ ├── bg-467D259F-657A-4BEC-B60C-B8649B3A5542.png │ │ │ │ │ │ ├── delete-798508F9-2530-4983-865D-078792D52551.png │ │ │ │ │ │ ├── message-C98AA120-6BD4-4158-8C00-3AE9675BED77.png │ │ │ │ │ │ └── top_nav-56441F68-B18C-4BEC-AC43-57EBA8202E03.png │ │ │ │ │ ├── layers.json │ │ │ │ │ └── layers.json.js │ │ │ │ ├── example3_swipe2 │ │ │ │ │ ├── framerps.log │ │ │ │ │ ├── images │ │ │ │ │ │ ├── Navigation_Bar.png │ │ │ │ │ │ ├── bg.png │ │ │ │ │ │ ├── delete.png │ │ │ │ │ │ └── message.png │ │ │ │ │ ├── layers.json │ │ │ │ │ └── layers.json.js │ │ │ │ ├── slider │ │ │ │ │ ├── framerps.log │ │ │ │ │ ├── images │ │ │ │ │ │ ├── Bg.png │ │ │ │ │ │ ├── Card.png │ │ │ │ │ │ ├── Paginator.png │ │ │ │ │ │ ├── card1.png │ │ │ │ │ │ ├── card2.png │ │ │ │ │ │ └── card3.png │ │ │ │ │ ├── layers.json │ │ │ │ │ └── layers.json.js │ │ │ │ └── swipe │ │ │ │ │ ├── framerps.log │ │ │ │ │ ├── images │ │ │ │ │ ├── Navigation_Bar.png │ │ │ │ │ ├── bg.png │ │ │ │ │ ├── delete.png │ │ │ │ │ └── message.png │ │ │ │ │ ├── layers.json │ │ │ │ │ └── layers.json.js │ │ │ └── index.html │ │ └── watch.framer │ │ │ ├── .temp.html │ │ │ ├── app.coffee │ │ │ ├── framer │ │ │ ├── backups │ │ │ │ └── backup-1427673752.coffee │ │ │ ├── coffee-script.js │ │ │ ├── config.json │ │ │ ├── framer.generated.js │ │ │ ├── framer.init.js │ │ │ ├── framer.js │ │ │ ├── framer.js.map │ │ │ ├── framer.modules.js │ │ │ ├── images │ │ │ │ ├── background.png │ │ │ │ ├── cursor.png │ │ │ │ ├── cursor@2x.png │ │ │ │ ├── icon-120.png │ │ │ │ ├── icon-152.png │ │ │ │ ├── icon-76.png │ │ │ │ ├── icon-arrow.png │ │ │ │ ├── icon-arrow@2x.png │ │ │ │ ├── icon-close.png │ │ │ │ ├── icon-close@2x.png │ │ │ │ ├── icon-framer.png │ │ │ │ ├── icon-framer@2x.png │ │ │ │ ├── icon-share.png │ │ │ │ └── icon-share@2x.png │ │ │ ├── mirror.css │ │ │ ├── style.css │ │ │ └── version │ │ │ ├── images │ │ │ ├── example4_bg.png │ │ │ ├── example4_icon.png │ │ │ └── framer-icon.png │ │ │ ├── imported │ │ │ ├── bg │ │ │ │ ├── framerps.log │ │ │ │ ├── images │ │ │ │ │ └── bg.png │ │ │ │ ├── layers.json │ │ │ │ └── layers.json.js │ │ │ ├── example4_watch │ │ │ │ ├── images │ │ │ │ │ ├── button-A20C5081-0F6C-42FD-9F86-9D9AC72FE6B5.png │ │ │ │ │ └── content-E4135DDC-AD25-4EA6-93E8-F1B8774F93AD.png │ │ │ │ ├── layers.json │ │ │ │ └── layers.json.js │ │ │ ├── icon │ │ │ │ ├── framerps.log │ │ │ │ ├── images │ │ │ │ │ └── icon.png │ │ │ │ ├── layers.json │ │ │ │ └── layers.json.js │ │ │ └── watchapp │ │ │ │ ├── framerps.log │ │ │ │ ├── images │ │ │ │ ├── content-2.png │ │ │ │ ├── content.png │ │ │ │ └── head.png │ │ │ │ ├── layers.json │ │ │ │ └── layers.json.js │ │ │ └── index.html │ ├── pngs │ │ ├── example4_bg.png │ │ └── example4_icon.png │ ├── psds │ │ ├── example1_popup.psd │ │ ├── example2_dropdown.psd │ │ ├── example3_swipe.psd │ │ ├── example4_icon.psd │ │ └── example4_watch.psd │ └── sketch │ │ ├── example1_popup.sketch │ │ ├── example2_dropdown.sketch │ │ ├── example3_swipe.sketch │ │ └── example4_watch.sketch ├── book.epub └── book.pdf └── src ├── book.md ├── cover.jpg ├── cover.pdf ├── cover.psd ├── epub.css └── layout.latex /build.sh: -------------------------------------------------------------------------------- 1 | ./epub.sh 2 | ./pdf.sh 3 | tar -zcvf coffeescript_for_framerjs.tar.gz pkg -------------------------------------------------------------------------------- /coffeescript_for_framerjs.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/coffeescript_for_framerjs.tar.gz -------------------------------------------------------------------------------- /epub.sh: -------------------------------------------------------------------------------- 1 | pandoc src/book.md -o pkg/book.epub --epub-cover-image="src/cover.jpg" --epub-stylesheet="src/epub.css" --toc -------------------------------------------------------------------------------- /images/img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/images/img1.png -------------------------------------------------------------------------------- /images/img10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/images/img10.png -------------------------------------------------------------------------------- /images/img11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/images/img11.png -------------------------------------------------------------------------------- /images/img12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/images/img12.png -------------------------------------------------------------------------------- /images/img2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/images/img2.png -------------------------------------------------------------------------------- /images/img3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/images/img3.png -------------------------------------------------------------------------------- /images/img4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/images/img4.png -------------------------------------------------------------------------------- /images/img5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/images/img5.png -------------------------------------------------------------------------------- /images/img6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/images/img6.png -------------------------------------------------------------------------------- /images/img7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/images/img7.png -------------------------------------------------------------------------------- /images/img8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/images/img8.png -------------------------------------------------------------------------------- /images/img9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/images/img9.png -------------------------------------------------------------------------------- /pdf.sh: -------------------------------------------------------------------------------- 1 | pandoc src/book.md --toc --listings -o src/book.tmp.latex 2 | pandoc src/book.tmp.latex -o src/book.tmp.pdf --template="src/layout.latex" --listings --toc 3 | pdftk src/cover.pdf src/book.tmp.pdf cat output pkg/book.pdf 4 | rm src/book.tmp.pdf src/book.tmp.latex 5 | -------------------------------------------------------------------------------- /pkg/assets/framer/cards.framer/.gitignore: -------------------------------------------------------------------------------- 1 | # Default Framer gitignore file 2 | 3 | # Mac specific 4 | .DS_Store 5 | .AppleDouble 6 | .LSOverride 7 | 8 | # Icon must end with two \r 9 | Icon 10 | 11 | # Thumbnails 12 | ._* 13 | 14 | # Files that might appear on external disk 15 | .Spotlight-V100 16 | .Trashes 17 | 18 | # Directories potentially created on remote AFP share 19 | .AppleDB 20 | .AppleDesktop 21 | Network Trash Folder 22 | Temporary Items 23 | .apdisk 24 | 25 | # Framer specific 26 | .temp.html 27 | framer/*.old.* 28 | framer/backup.coffee 29 | framer/backup/* 30 | framer/.*.hash -------------------------------------------------------------------------------- /pkg/assets/framer/cards.framer/app.coffee: -------------------------------------------------------------------------------- 1 | colors = ["#f1c40f", "#2ecc71", "#1abc9c", "#3498db", "#9b59b6"] 2 | 3 | w = Framer.Device.screen.width 4 | h = Framer.Device.screen.height 5 | 6 | for i in [0..4] 7 | layer = new Layer 8 | width: Framer.Device.screen.width 9 | height: Framer.Device.screen.height 10 | y: 100 * i + Framer.Device.screen.height 11 | borderRadius: 50 12 | backgroundColor: colors[i] 13 | layer.animate 14 | properties: 15 | y: 100 * i 16 | delay: i * 0.2 17 | time: .2 18 | curve:"spring(200,30)" 19 | 20 | -------------------------------------------------------------------------------- /pkg/assets/framer/cards.framer/framer/backups/backup-1426979838.coffee: -------------------------------------------------------------------------------- 1 | colors = ["#f1c40f", "#2ecc71", "#1abc9c", "#3498db", "#9b59b6"] 2 | 3 | w = Framer.Device.screen.width 4 | h = Framer.Device.screen.height 5 | 6 | for i in [0..4] 7 | layer = new Layer 8 | width: Framer.Device.screen.width 9 | height: Framer.Device.screen.height 10 | y: 100 * i + Framer.Device.screen.height 11 | borderRadius: 50 12 | backgroundColor: colors[i] 13 | 14 | layer.animate 15 | properties: 16 | y: 100 * i 17 | delay: i * 0.2 18 | time: .2 19 | curve:"spring(200,30)" -------------------------------------------------------------------------------- /pkg/assets/framer/cards.framer/framer/backups/backup-1427239449.coffee: -------------------------------------------------------------------------------- 1 | colors = ["#f1c40f", "#2ecc71", "#1abc9c", "#3498db", "#9b59b6"] 2 | 3 | w = Framer.Device.screen.width 4 | h = Framer.Device.screen.height 5 | 6 | for i in [0..4] 7 | layer = new Layer 8 | width: Framer.Device.screen.width 9 | height: Framer.Device.screen.height 10 | y: 100 * i + Framer.Device.screen.height 11 | borderRadius: 50 12 | backgroundColor: colors[i] 13 | layer.animate 14 | properties: 15 | y: 100 * i 16 | delay: i * 0.2 17 | time: .2 18 | curve:"spring(200,30)" 19 | 20 | -------------------------------------------------------------------------------- /pkg/assets/framer/cards.framer/framer/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "device" : "iPhone 5S Space Gray", 3 | "sharedPrototype" : 1, 4 | "deviceOrientation" : 0, 5 | "contentScale" : 1, 6 | "deviceType" : "iphone-6-silver", 7 | "updateDelay" : 0.3, 8 | "deviceScale" : -1, 9 | "delay" : 0.3 10 | } -------------------------------------------------------------------------------- /pkg/assets/framer/cards.framer/framer/framer.init.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 3 | function isFileLoadingAllowed() { 4 | return (window.location.protocol.indexOf("file") == -1) 5 | } 6 | 7 | function isHomeScreened() { 8 | return ("standalone" in window.navigator) && window.navigator.standalone == true 9 | } 10 | 11 | function isCompatibleBrowser() { 12 | return Utils.isWebKit() 13 | } 14 | 15 | var alertNode; 16 | 17 | function dismissAlert() { 18 | alertNode.parentElement.removeChild(alertNode) 19 | loadProject() 20 | } 21 | 22 | function showAlert(html) { 23 | 24 | alertNode = document.createElement("div") 25 | 26 | alertNode.classList.add("framerAlertBackground") 27 | alertNode.innerHTML = html 28 | 29 | document.addEventListener("DOMContentLoaded", function(event) { 30 | document.body.appendChild(alertNode) 31 | }) 32 | 33 | window.dismissAlert = dismissAlert; 34 | } 35 | 36 | function showBrowserAlert() { 37 | var html = "" 38 | html += "
" 39 | html += "Error: Not A WebKit Browser" 40 | html += "Your browser is not supported.
Please use Safari or Chrome.
" 41 | html += "Try anyway" 42 | html += "
" 43 | 44 | showAlert(html) 45 | } 46 | 47 | function showFileLoadingAlert() { 48 | var html = "" 49 | html += "
" 50 | html += "Error: Local File Restrictions" 51 | html += "Preview this prototype with Framer Mirror or learn more about " 52 | html += "file restrictions.
" 53 | html += "Try anyway" 54 | html += "
" 55 | 56 | showAlert(html) 57 | } 58 | 59 | function showHomeScreenAlert() { 60 | 61 | link = document.createElement("link"); 62 | link.href = "framer/mirror.css" 63 | link.type = "text/css" 64 | link.rel = "stylesheet" 65 | link.media = "screen" 66 | 67 | document.addEventListener("DOMContentLoaded", function(event) { 68 | document.getElementsByTagName("head")[0].appendChild(link) 69 | }) 70 | 71 | var html = "" 72 | html += "
" 73 | html += "
" 74 | html += "

Install Prototype

" 75 | html += "

Tap

Share
, then choose 'Add to Home Screen'

" 76 | html += "
" 77 | html += "
" 78 | 79 | showAlert(html) 80 | } 81 | 82 | function loadProject() { 83 | CoffeeScript.load("app.coffee") 84 | } 85 | 86 | function setDefaultPageTitle() { 87 | // If no title was set we set it to the project folder name so 88 | // you get a nice name on iOS if you bookmark to desktop. 89 | document.addEventListener("DOMContentLoaded", function() { 90 | if (document.title == "") { 91 | if (window.FramerStudioInfo && window.FramerStudioInfo.documentTitle) { 92 | document.title = window.FramerStudioInfo.documentTitle 93 | } else { 94 | document.title = window.location.pathname.replace(/\//g, "") 95 | } 96 | } 97 | }) 98 | } 99 | 100 | function init() { 101 | 102 | if (Utils.isFramerStudio()) { 103 | return 104 | } 105 | 106 | setDefaultPageTitle() 107 | 108 | if (!isCompatibleBrowser()) { 109 | return showBrowserAlert() 110 | } 111 | 112 | if (!isFileLoadingAllowed()) { 113 | return showFileLoadingAlert() 114 | } 115 | 116 | // if (Utils.isMobile() && !isHomeScreened()) { 117 | // return showHomeScreenAlert() 118 | // } 119 | 120 | loadProject() 121 | 122 | } 123 | 124 | init() 125 | 126 | })() 127 | -------------------------------------------------------------------------------- /pkg/assets/framer/cards.framer/framer/framer.modules.js: -------------------------------------------------------------------------------- 1 | require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /pkg/assets/framer/cards.framer/modules/myModule.coffee: -------------------------------------------------------------------------------- 1 | # Add the folowing line to your project in Framer Studio. 2 | # module = require "module" 3 | # Reference the contents by name, like module.myFunc() or module.myVar 4 | 5 | exports.myVar = "myVariable" 6 | 7 | exports.myFunction = -> 8 | print "myFunction is running" 9 | 10 | exports.myArray = [1, 2, 3] -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/.temp.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/app.coffee: -------------------------------------------------------------------------------- 1 | # This imports all the layers for "example2_dropdown" into example2_dropdownLayers1 2 | file = Framer.Importer.load "imported/example2_dropdown" 3 | 4 | original_width = file.menu_content.width 5 | original_height = file.menu_content.height 6 | 7 | file.menu_content.width = 0 8 | file.menu_content.height = 0 9 | 10 | file.menu_content.states.add 11 | open: 12 | width: original_width 13 | height: original_height 14 | closed: 15 | width: 0 16 | height: 0 17 | 18 | file.menu_content.states.animationOptions = 19 | time: 0.2 20 | curve: "ease-out" 21 | 22 | file.menu_icon.on Events.Click, -> 23 | file.menu_content.states.next() -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/backups/backup-1427673752.coffee: -------------------------------------------------------------------------------- 1 | # This imports all the layers for "example2_dropdown" into example2_dropdownLayers1 2 | file = Framer.Importer.load "imported/example2_dropdown" 3 | 4 | original_width = file.menu_content.width 5 | original_height = file.menu_content.height 6 | 7 | file.menu_content.width = 0 8 | file.menu_content.height = 0 9 | 10 | file.menu_content.states.add 11 | open: 12 | width: original_width 13 | height: original_height 14 | closed: 15 | width: 0 16 | height: 0 17 | 18 | file.menu_content.states.animationOptions = 19 | time: 0.2 20 | curve: "ease-out" 21 | 22 | file.menu_icon.on Events.Click, -> 23 | file.menu_content.states.next() -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "device" : "iPhone 5S Space Gray", 3 | "sharedPrototype" : 1, 4 | "deviceOrientation" : 0, 5 | "contentScale" : 1, 6 | "deviceType" : "iphone-6-gold-hand", 7 | "updateDelay" : 0.3, 8 | "deviceScale" : -1, 9 | "delay" : 0.3 10 | } -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/framer.init.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 3 | function isFileLoadingAllowed() { 4 | return (window.location.protocol.indexOf("file") == -1) 5 | } 6 | 7 | function isHomeScreened() { 8 | return ("standalone" in window.navigator) && window.navigator.standalone == true 9 | } 10 | 11 | function isCompatibleBrowser() { 12 | return Utils.isWebKit() 13 | } 14 | 15 | var alertNode; 16 | 17 | function dismissAlert() { 18 | alertNode.parentElement.removeChild(alertNode) 19 | loadProject() 20 | } 21 | 22 | function showAlert(html) { 23 | 24 | alertNode = document.createElement("div") 25 | 26 | alertNode.classList.add("framerAlertBackground") 27 | alertNode.innerHTML = html 28 | 29 | document.addEventListener("DOMContentLoaded", function(event) { 30 | document.body.appendChild(alertNode) 31 | }) 32 | 33 | window.dismissAlert = dismissAlert; 34 | } 35 | 36 | function showBrowserAlert() { 37 | var html = "" 38 | html += "
" 39 | html += "Error: Not A WebKit Browser" 40 | html += "Your browser is not supported.
Please use Safari or Chrome.
" 41 | html += "Try anyway" 42 | html += "
" 43 | 44 | showAlert(html) 45 | } 46 | 47 | function showFileLoadingAlert() { 48 | var html = "" 49 | html += "
" 50 | html += "Error: Local File Restrictions" 51 | html += "Preview this prototype with Framer Mirror or learn more about " 52 | html += "file restrictions.
" 53 | html += "Try anyway" 54 | html += "
" 55 | 56 | showAlert(html) 57 | } 58 | 59 | function showHomeScreenAlert() { 60 | 61 | link = document.createElement("link"); 62 | link.href = "framer/mirror.css" 63 | link.type = "text/css" 64 | link.rel = "stylesheet" 65 | link.media = "screen" 66 | 67 | document.addEventListener("DOMContentLoaded", function(event) { 68 | document.getElementsByTagName("head")[0].appendChild(link) 69 | }) 70 | 71 | var html = "" 72 | html += "
" 73 | html += "
" 74 | html += "

Install Prototype

" 75 | html += "

Tap

, then choose 'Add to Home Screen'

" 76 | html += "
" 77 | html += "
" 78 | 79 | showAlert(html) 80 | } 81 | 82 | function loadProject() { 83 | CoffeeScript.load("app.coffee") 84 | } 85 | 86 | function setDefaultPageTitle() { 87 | // If no title was set we set it to the project folder name so 88 | // you get a nice name on iOS if you bookmark to desktop. 89 | document.addEventListener("DOMContentLoaded", function() { 90 | if (document.title == "") { 91 | if (window.FramerStudioInfo && window.FramerStudioInfo.documentTitle) { 92 | document.title = window.FramerStudioInfo.documentTitle 93 | } else { 94 | document.title = window.location.pathname.replace(/\//g, "") 95 | } 96 | } 97 | }) 98 | } 99 | 100 | function init() { 101 | 102 | if (Utils.isFramerStudio()) { 103 | return 104 | } 105 | 106 | setDefaultPageTitle() 107 | 108 | if (!isCompatibleBrowser()) { 109 | return showBrowserAlert() 110 | } 111 | 112 | if (!isFileLoadingAllowed()) { 113 | return showFileLoadingAlert() 114 | } 115 | 116 | // if (Utils.isMobile() && !isHomeScreened()) { 117 | // return showHomeScreenAlert() 118 | // } 119 | 120 | loadProject() 121 | 122 | } 123 | 124 | init() 125 | 126 | })() 127 | -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/framer.modules.js: -------------------------------------------------------------------------------- 1 | // This file will contain generated modules from the project/modules directory -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/images/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/framer/images/background.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/images/cursor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/framer/images/cursor.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/images/cursor@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/framer/images/cursor@2x.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/images/icon-120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/framer/images/icon-120.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/images/icon-152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/framer/images/icon-152.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/images/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/framer/images/icon-76.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/images/icon-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/framer/images/icon-arrow.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/images/icon-arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/framer/images/icon-arrow@2x.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/images/icon-close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/framer/images/icon-close.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/images/icon-close@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/framer/images/icon-close@2x.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/images/icon-framer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/framer/images/icon-framer.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/images/icon-framer@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/framer/images/icon-framer@2x.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/images/icon-share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/framer/images/icon-share.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/images/icon-share@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/framer/images/icon-share@2x.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/mirror.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | border: none; 5 | -webkit-user-select: none; 6 | -webkit-tap-highlight-color: rgba(0,0,0,0); 7 | } 8 | html, body, .wrapper { 9 | height: 100%; 10 | } 11 | body { 12 | background: #fff; 13 | font: 300 20px "Helvetica Neue", Helvetica, sans-serif; 14 | overflow: hidden; 15 | cursor: url('images/cursor.png') 39 39, auto; 16 | text-align: center; 17 | position: relative; 18 | -webkit-font-smoothing: antialiased; 19 | text-rendering: optimizeLegibility; 20 | color: #333740; 21 | } 22 | a { 23 | color: gray; 24 | } 25 | .framerAlert { 26 | font: 12px/1.6em Menlo; 27 | margin: 10px; 28 | color: gray; 29 | } 30 | ::-webkit-scrollbar { 31 | display: none; 32 | } 33 | .wrapper { 34 | width:100%; 35 | max-width: 240px; 36 | margin: 0 auto; 37 | padding-top: 38%; 38 | position: relative; 39 | } 40 | /* Text */ 41 | h1 { 42 | font-size: 22px; 43 | font-weight: 400; 44 | margin-top: 0px; 45 | line-height: 1.5; 46 | color: black; 47 | 48 | margin-bottom: 8px; 49 | margin-top: 16px; 50 | } 51 | h2 { 52 | font-size: 14px; 53 | font-weight: 400; 54 | color: #788594; 55 | } 56 | hr { 57 | border: none; width: 100%; 58 | border-bottom: 1px solid #EFF1F3; 59 | display: block; 60 | margin: 40px auto 32px auto; 61 | } 62 | p { 63 | display: inline-block; 64 | line-height: 1.5; 65 | } 66 | figure { 67 | display: inline-block; 68 | } 69 | .share { 70 | color: #007AFF; 71 | display: inline-block; 72 | margin-left: 8px; 73 | } 74 | .icon-share { 75 | margin-right: 0px; 76 | position: relative; 77 | top:0.5px; 78 | } 79 | .arrow { 80 | position: absolute; 81 | max-width: 240px; 82 | width: 100%; 83 | left:50%; margin-left:-120px; 84 | bottom: 24%; 85 | } 86 | .arrow figure { 87 | -webkit-animation: bounce 1.25s ease infinite; 88 | -moz-animation: bounce 1.25s ease infinite; 89 | -o-animation: bounce 1.25s ease infinite; 90 | animation: bounce 1.25s ease infinite; 91 | -webkit-transform-origin: center bottom; 92 | -ms-transform-origin: center bottom; 93 | transform-origin: center bottom; 94 | } 95 | /* Arrow animation */ 96 | @-webkit-keyframes bounce { 97 | 0%, 100% { 98 | -webkit-transform: translate3d(0,0,0); 99 | transform: translate3d(0,0,0); 100 | } 101 | 50% { 102 | -webkit-transform: translate3d(0, -16px, 0); 103 | transform: translate3d(0, -16px, 0); 104 | } 105 | } 106 | @keyframes bounce { 107 | 0%, 100% { 108 | -webkit-transform: translate3d(0,0,0); 109 | transform: translate3d(0,0,0); 110 | } 111 | 50% { 112 | -webkit-transform: translate3d(0, -16px, 0); 113 | transform: translate3d(0, -16px, 0); 114 | } 115 | } 116 | /* Icons */ 117 | .icon-close, 118 | .icon-framer, 119 | .icon-share, 120 | .icon-arrow { 121 | background-size: cover; 122 | } 123 | .icon-close { 124 | background-image: url("images/icon-close.png"); 125 | position: absolute; 126 | top:16px; 127 | right:16px; 128 | cursor: pointer; 129 | cursor: hand; 130 | width: 18px; 131 | height: 18px; 132 | } 133 | .icon-framer { 134 | background-image: url("images/icon-framer.png"); 135 | width: 60px; 136 | height: 60px; 137 | } 138 | .icon-share { 139 | background-image: url("images/icon-share.png"); 140 | width: 11px; 141 | height: 18px; 142 | } 143 | .icon-arrow { 144 | background-image: url("images/icon-arrow.png"); 145 | width: 18px; 146 | height: 30px; 147 | } 148 | /* Retina Icons */ 149 | @media screen and (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { 150 | .icon-close { 151 | background-image: url("images/icon-close@2x.png"); 152 | } 153 | .icon-framer { 154 | background-image: url("images/icon-framer@2x.png"); 155 | } 156 | .icon-share { 157 | background-image: url("images/icon-share@2x.png"); 158 | } 159 | .icon-arrow { 160 | background-image: url("images/icon-arrow@2x.png"); 161 | } 162 | } 163 | /* Avoid overflow scrolling when viewing in Portrait */ 164 | @media screen and (orientation:portrait) { 165 | html, body, .wrapper { 166 | overflow: hidden; 167 | } 168 | } 169 | /* iPad share icon is positioned in the navigation bar */ 170 | @media screen and (min-width: 576px){ 171 | .arrow { 172 | display: none; 173 | } 174 | .wrapper { 175 | padding-bottom: 25%; 176 | } 177 | } 178 | /* When it landscape, hide arrow and adjust spacing */ 179 | @media screen and (orientation:landscape) { 180 | .arrow { 181 | display: none; 182 | } 183 | .wrapper { 184 | padding-top: 10%; 185 | padding-bottom: 0; 186 | } 187 | } 188 | /* iPhone 6 Portrait */ 189 | @media screen and (min-device-width:375px) and (max-device-width:667px) and (-webkit-min-device-pixel-ratio:2) and (orientation:portrait) { 190 | .wrapper { 191 | padding-top: 48%; 192 | } 193 | .arrow { 194 | bottom: 27%; 195 | } 196 | } -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/style.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | border: none; 5 | -webkit-user-select: none; 6 | -webkit-tap-highlight-color: rgba(0,0,0,0); 7 | } 8 | 9 | body { 10 | background-color: #fff; 11 | font: 28px/1em "Helvetica"; 12 | color: #FFF; 13 | overflow: hidden; 14 | cursor: url('images/cursor.png') 39 39, auto; 15 | } 16 | 17 | a { 18 | color: gray; 19 | } 20 | 21 | .framerAlertBackground { 22 | position: absolute; top:0px; left:0px; right:0px; bottom:0px; 23 | z-index: 1000; 24 | background-color: #fff; 25 | } 26 | 27 | .framerAlert { 28 | font:400 14px/1.4 "Helvetica Neue", Helvetica, Arial, sans-serif; 29 | -webkit-font-smoothing:antialiased; 30 | color:#616367; text-align:center; 31 | position: absolute; top:40%; left:50%; width:260px; margin-left:-130px; 32 | } 33 | .framerAlert strong { font-weight:500; color:#000; margin-bottom:8px; display:block; } 34 | .framerAlert a { color:#28AFFA; } 35 | .framerAlert .btn { 36 | font-weight:500; text-decoration:none; line-height:1; 37 | display:inline-block; padding:6px 12px 7px 12px; 38 | border-radius:3px; margin-top:12px; 39 | background:#28AFFA; color:#fff; 40 | } 41 | 42 | ::-webkit-scrollbar { 43 | display: none; 44 | } -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/framer/version: -------------------------------------------------------------------------------- 1 | 1 -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/images/framer-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/images/framer-icon.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/imported/dropdown/framerps.log: -------------------------------------------------------------------------------- 1 | Could not read previous export (for caching), doing full export. 2 | Top_bar: Exporting image 3 | menuIcon: Exporting image 4 | menuContent: Exporting image 5 | 4 views changed 6 | Success: /Users/tessathornton/Code/dropdown.framer/imported/dropdown 7 | -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/imported/dropdown/images/Top_bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/imported/dropdown/images/Top_bar.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/imported/dropdown/images/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/imported/dropdown/images/bg.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/imported/dropdown/images/dividers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/imported/dropdown/images/dividers.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/imported/dropdown/images/menuContent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/imported/dropdown/images/menuContent.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/imported/dropdown/images/menuIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/imported/dropdown/images/menuIcon.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/imported/dropdown/images/text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/imported/dropdown/images/text.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/imported/dropdown/layers.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 19, 4 | "name": "Dropdown", 5 | "layerFrame": { 6 | "x": 0, 7 | "y": 0, 8 | "width": 641, 9 | "height": 609 10 | }, 11 | "maskFrame": null, 12 | "image": null, 13 | "imageType": null, 14 | "children": [ 15 | { 16 | "id": 18, 17 | "name": "Top_bar", 18 | "layerFrame": { 19 | "x": 0, 20 | "y": 0, 21 | "width": 641, 22 | "height": 609 23 | }, 24 | "maskFrame": null, 25 | "image": { 26 | "path": "images/Top_bar.png", 27 | "frame": { 28 | "x": 0, 29 | "y": 0, 30 | "width": 641, 31 | "height": 129 32 | } 33 | }, 34 | "imageType": "png", 35 | "children": [ 36 | { 37 | "id": 20, 38 | "name": "menuIcon", 39 | "layerFrame": { 40 | "x": 0, 41 | "y": 0, 42 | "width": 641, 43 | "height": 609 44 | }, 45 | "maskFrame": null, 46 | "image": { 47 | "path": "images/menuIcon.png", 48 | "frame": { 49 | "x": 11, 50 | "y": 49, 51 | "width": 66, 52 | "height": 66 53 | } 54 | }, 55 | "imageType": "png", 56 | "children": [ 57 | 58 | ], 59 | "modification": "220070460" 60 | } 61 | ], 62 | "modification": "803375416" 63 | }, 64 | { 65 | "id": 22, 66 | "name": "menuContent", 67 | "layerFrame": { 68 | "x": 0, 69 | "y": 0, 70 | "width": 641, 71 | "height": 609 72 | }, 73 | "maskFrame": null, 74 | "image": { 75 | "path": "images/menuContent.png", 76 | "frame": { 77 | "x": 0, 78 | "y": 128, 79 | "width": 640, 80 | "height": 481 81 | } 82 | }, 83 | "imageType": "png", 84 | "children": [ 85 | 86 | ], 87 | "modification": "106206454" 88 | } 89 | ], 90 | "modification": "1231201625" 91 | } 92 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/imported/dropdown/layers.json.js: -------------------------------------------------------------------------------- 1 | window.__imported__ = window.__imported__ || {}; 2 | window.__imported__["dropdown/layers.json.js"] = [ 3 | { 4 | "id": 19, 5 | "name": "Dropdown", 6 | "layerFrame": { 7 | "x": 0, 8 | "y": 0, 9 | "width": 641, 10 | "height": 609 11 | }, 12 | "maskFrame": null, 13 | "image": null, 14 | "imageType": null, 15 | "children": [ 16 | { 17 | "id": 18, 18 | "name": "Top_bar", 19 | "layerFrame": { 20 | "x": 0, 21 | "y": 0, 22 | "width": 641, 23 | "height": 609 24 | }, 25 | "maskFrame": null, 26 | "image": { 27 | "path": "images/Top_bar.png", 28 | "frame": { 29 | "x": 0, 30 | "y": 0, 31 | "width": 641, 32 | "height": 129 33 | } 34 | }, 35 | "imageType": "png", 36 | "children": [ 37 | { 38 | "id": 20, 39 | "name": "menuIcon", 40 | "layerFrame": { 41 | "x": 0, 42 | "y": 0, 43 | "width": 641, 44 | "height": 609 45 | }, 46 | "maskFrame": null, 47 | "image": { 48 | "path": "images/menuIcon.png", 49 | "frame": { 50 | "x": 11, 51 | "y": 49, 52 | "width": 66, 53 | "height": 66 54 | } 55 | }, 56 | "imageType": "png", 57 | "children": [ 58 | 59 | ], 60 | "modification": "220070460" 61 | } 62 | ], 63 | "modification": "803375416" 64 | }, 65 | { 66 | "id": 22, 67 | "name": "menuContent", 68 | "layerFrame": { 69 | "x": 0, 70 | "y": 0, 71 | "width": 641, 72 | "height": 609 73 | }, 74 | "maskFrame": null, 75 | "image": { 76 | "path": "images/menuContent.png", 77 | "frame": { 78 | "x": 0, 79 | "y": 128, 80 | "width": 640, 81 | "height": 481 82 | } 83 | }, 84 | "imageType": "png", 85 | "children": [ 86 | 87 | ], 88 | "modification": "106206454" 89 | } 90 | ], 91 | "modification": "1231201625" 92 | } 93 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/imported/example2_dropdown/images/menu_content-F690BFCA-B7DF-4F9B-9338-31D759DE120B.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/imported/example2_dropdown/images/menu_content-F690BFCA-B7DF-4F9B-9338-31D759DE120B.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/imported/example2_dropdown/images/menu_icon-2A7FE607-FA78-4433-9B34-0C8F0F5F0DD3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/imported/example2_dropdown/images/menu_icon-2A7FE607-FA78-4433-9B34-0C8F0F5F0DD3.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/imported/example2_dropdown/images/top_bar-4ADEAF2E-859C-4DAC-A1C2-31E6EA30D173.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/dropdown.framer/imported/example2_dropdown/images/top_bar-4ADEAF2E-859C-4DAC-A1C2-31E6EA30D173.png -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/imported/example2_dropdown/layers.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "maskFrame" : null, 4 | "id" : "9834C19A-78C7-4FFD-8344-CB55DC1C0834", 5 | "visible" : true, 6 | "children" : [ 7 | { 8 | "maskFrame" : null, 9 | "id" : "4ADEAF2E-859C-4DAC-A1C2-31E6EA30D173", 10 | "visible" : true, 11 | "children" : [ 12 | { 13 | "maskFrame" : null, 14 | "id" : "2A7FE607-FA78-4433-9B34-0C8F0F5F0DD3", 15 | "visible" : true, 16 | "children" : [ 17 | 18 | ], 19 | "image" : { 20 | "path" : "images\/menu_icon-2A7FE607-FA78-4433-9B34-0C8F0F5F0DD3.png", 21 | "frame" : { 22 | "y" : 66, 23 | "x" : 29, 24 | "width" : 39, 25 | "height" : 29 26 | } 27 | }, 28 | "imageType" : "png", 29 | "layerFrame" : { 30 | "y" : 66, 31 | "x" : 29, 32 | "width" : 39, 33 | "height" : 29 34 | }, 35 | "name" : "menu_icon" 36 | } 37 | ], 38 | "image" : { 39 | "path" : "images\/top_bar-4ADEAF2E-859C-4DAC-A1C2-31E6EA30D173.png", 40 | "frame" : { 41 | "y" : -1, 42 | "x" : 0, 43 | "width" : 752, 44 | "height" : 129 45 | } 46 | }, 47 | "imageType" : "png", 48 | "layerFrame" : { 49 | "y" : -1, 50 | "x" : 0, 51 | "width" : 752, 52 | "height" : 129 53 | }, 54 | "name" : "top_bar" 55 | }, 56 | { 57 | "maskFrame" : null, 58 | "id" : "F690BFCA-B7DF-4F9B-9338-31D759DE120B", 59 | "visible" : true, 60 | "children" : [ 61 | 62 | ], 63 | "image" : { 64 | "path" : "images\/menu_content-F690BFCA-B7DF-4F9B-9338-31D759DE120B.png", 65 | "frame" : { 66 | "y" : 128, 67 | "x" : 0, 68 | "width" : 753, 69 | "height" : 481 70 | } 71 | }, 72 | "imageType" : "png", 73 | "layerFrame" : { 74 | "y" : 128, 75 | "x" : 0, 76 | "width" : 753, 77 | "height" : 481 78 | }, 79 | "name" : "menu_content" 80 | } 81 | ], 82 | "image" : { 83 | "path" : "images\/dropdown-9834C19A-78C7-4FFD-8344-CB55DC1C0834.png", 84 | "frame" : { 85 | "y" : -1, 86 | "x" : 0, 87 | "width" : 753, 88 | "height" : 610 89 | } 90 | }, 91 | "imageType" : "png", 92 | "layerFrame" : { 93 | "y" : -1, 94 | "x" : 0, 95 | "width" : 753, 96 | "height" : 610 97 | }, 98 | "name" : "dropdown" 99 | } 100 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/imported/example2_dropdown/layers.json.js: -------------------------------------------------------------------------------- 1 | window.__imported__ = window.__imported__ || {}; 2 | window.__imported__["example2_dropdown/layers.json.js"] = [ 3 | { 4 | "maskFrame" : null, 5 | "id" : "9834C19A-78C7-4FFD-8344-CB55DC1C0834", 6 | "visible" : true, 7 | "children" : [ 8 | { 9 | "maskFrame" : null, 10 | "id" : "4ADEAF2E-859C-4DAC-A1C2-31E6EA30D173", 11 | "visible" : true, 12 | "children" : [ 13 | { 14 | "maskFrame" : null, 15 | "id" : "2A7FE607-FA78-4433-9B34-0C8F0F5F0DD3", 16 | "visible" : true, 17 | "children" : [ 18 | 19 | ], 20 | "image" : { 21 | "path" : "images\/menu_icon-2A7FE607-FA78-4433-9B34-0C8F0F5F0DD3.png", 22 | "frame" : { 23 | "y" : 66, 24 | "x" : 29, 25 | "width" : 39, 26 | "height" : 29 27 | } 28 | }, 29 | "imageType" : "png", 30 | "layerFrame" : { 31 | "y" : 66, 32 | "x" : 29, 33 | "width" : 39, 34 | "height" : 29 35 | }, 36 | "name" : "menu_icon" 37 | } 38 | ], 39 | "image" : { 40 | "path" : "images\/top_bar-4ADEAF2E-859C-4DAC-A1C2-31E6EA30D173.png", 41 | "frame" : { 42 | "y" : -1, 43 | "x" : 0, 44 | "width" : 752, 45 | "height" : 129 46 | } 47 | }, 48 | "imageType" : "png", 49 | "layerFrame" : { 50 | "y" : -1, 51 | "x" : 0, 52 | "width" : 752, 53 | "height" : 129 54 | }, 55 | "name" : "top_bar" 56 | }, 57 | { 58 | "maskFrame" : null, 59 | "id" : "F690BFCA-B7DF-4F9B-9338-31D759DE120B", 60 | "visible" : true, 61 | "children" : [ 62 | 63 | ], 64 | "image" : { 65 | "path" : "images\/menu_content-F690BFCA-B7DF-4F9B-9338-31D759DE120B.png", 66 | "frame" : { 67 | "y" : 128, 68 | "x" : 0, 69 | "width" : 753, 70 | "height" : 481 71 | } 72 | }, 73 | "imageType" : "png", 74 | "layerFrame" : { 75 | "y" : 128, 76 | "x" : 0, 77 | "width" : 753, 78 | "height" : 481 79 | }, 80 | "name" : "menu_content" 81 | } 82 | ], 83 | "image" : { 84 | "path" : "images\/dropdown-9834C19A-78C7-4FFD-8344-CB55DC1C0834.png", 85 | "frame" : { 86 | "y" : -1, 87 | "x" : 0, 88 | "width" : 753, 89 | "height" : 610 90 | } 91 | }, 92 | "imageType" : "png", 93 | "layerFrame" : { 94 | "y" : -1, 95 | "x" : 0, 96 | "width" : 753, 97 | "height" : 610 98 | }, 99 | "name" : "dropdown" 100 | } 101 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/dropdown.framer/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /pkg/assets/framer/popup.framer/.gitignore: -------------------------------------------------------------------------------- 1 | # Default Framer gitignore file 2 | 3 | # Mac specific 4 | .DS_Store 5 | .AppleDouble 6 | .LSOverride 7 | 8 | # Icon must end with two \r 9 | Icon 10 | 11 | # Thumbnails 12 | ._* 13 | 14 | # Files that might appear on external disk 15 | .Spotlight-V100 16 | .Trashes 17 | 18 | # Directories potentially created on remote AFP share 19 | .AppleDB 20 | .AppleDesktop 21 | Network Trash Folder 22 | Temporary Items 23 | .apdisk 24 | 25 | # Framer specific 26 | .temp.html 27 | framer/*.old.* 28 | framer/backup.coffee 29 | framer/backup/* 30 | framer/.*.hash -------------------------------------------------------------------------------- /pkg/assets/framer/popup.framer/app.coffee: -------------------------------------------------------------------------------- 1 | # This imports all the layers for "example1_popup" into example1_popupLayers7 2 | file = Framer.Importer.load "imported/example1_popup" 3 | 4 | height = file.popup.height 5 | 6 | file.mustache.scale = 0 7 | 8 | file.close.on Events.Click, -> 9 | file.popup.animate 10 | properties: 11 | opacity: 0 12 | y: 0 - height 13 | time: 0.3 14 | curve: "ease-in" 15 | 16 | file.popup.on Events.AnimationEnd, -> 17 | file.mustache.animate 18 | properties: 19 | scale: 1 20 | curve:"spring(200,15,0)" 21 | 22 | -------------------------------------------------------------------------------- /pkg/assets/framer/popup.framer/framer/backups/backup-1427673752.coffee: -------------------------------------------------------------------------------- 1 | # This imports all the layers for "example1_popup" into example1_popupLayers7 2 | file = Framer.Importer.load "imported/example1_popup" 3 | 4 | height = file.popup.height 5 | 6 | file.mustache.scale = 0 7 | 8 | file.close.on Events.Click, -> 9 | file.popup.animate 10 | properties: 11 | opacity: 0 12 | y: 0 - height 13 | time: 0.3 14 | curve: "ease-in" 15 | 16 | file.popup.on Events.AnimationEnd, -> 17 | file.mustache.animate 18 | properties: 19 | scale: 1 20 | curve:"spring(200,15,0)" 21 | 22 | -------------------------------------------------------------------------------- /pkg/assets/framer/popup.framer/framer/backups/backup-1428264184.coffee: -------------------------------------------------------------------------------- 1 | # This imports all the layers for "example1_popup" into example1_popupLayers7 2 | file = Framer.Importer.load "imported/example1_popup" 3 | 4 | height = file.popup.height 5 | 6 | file.mustache.scale = 0 7 | 8 | file.close.on Events.Click, -> 9 | file.popup.animate 10 | properties: 11 | opacity: 0 12 | y: 0 - height 13 | time: 0.3 14 | curve: "ease-in" 15 | 16 | file.popup.on Events.AnimationEnd, -> 17 | file.mustache.animate 18 | properties: 19 | scale: 1 20 | curve:"spring(200,15,0)" 21 | 22 | -------------------------------------------------------------------------------- /pkg/assets/framer/popup.framer/framer/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "device" : "iPhone 5S Space Gray", 3 | "sharedPrototype" : 1, 4 | "deviceOrientation" : 0, 5 | "contentScale" : 1, 6 | "deviceType" : "iphone-6-gold", 7 | "updateDelay" : 0.3, 8 | "deviceScale" : -1, 9 | "delay" : 0.3 10 | } -------------------------------------------------------------------------------- /pkg/assets/framer/popup.framer/framer/framer.init.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 3 | function isFileLoadingAllowed() { 4 | return (window.location.protocol.indexOf("file") == -1) 5 | } 6 | 7 | function isHomeScreened() { 8 | return ("standalone" in window.navigator) && window.navigator.standalone == true 9 | } 10 | 11 | function isCompatibleBrowser() { 12 | return Utils.isWebKit() 13 | } 14 | 15 | var alertNode; 16 | 17 | function dismissAlert() { 18 | alertNode.parentElement.removeChild(alertNode) 19 | loadProject() 20 | } 21 | 22 | function showAlert(html) { 23 | 24 | alertNode = document.createElement("div") 25 | 26 | alertNode.classList.add("framerAlertBackground") 27 | alertNode.innerHTML = html 28 | 29 | document.addEventListener("DOMContentLoaded", function(event) { 30 | document.body.appendChild(alertNode) 31 | }) 32 | 33 | window.dismissAlert = dismissAlert; 34 | } 35 | 36 | function showBrowserAlert() { 37 | var html = "" 38 | html += "
" 39 | html += "Error: Not A WebKit Browser" 40 | html += "Your browser is not supported.
Please use Safari or Chrome.
" 41 | html += "Try anyway" 42 | html += "
" 43 | 44 | showAlert(html) 45 | } 46 | 47 | function showFileLoadingAlert() { 48 | var html = "" 49 | html += "
" 50 | html += "Error: Local File Restrictions" 51 | html += "Preview this prototype with Framer Mirror or learn more about " 52 | html += "file restrictions.
" 53 | html += "Try anyway" 54 | html += "
" 55 | 56 | showAlert(html) 57 | } 58 | 59 | function showHomeScreenAlert() { 60 | 61 | link = document.createElement("link"); 62 | link.href = "framer/mirror.css" 63 | link.type = "text/css" 64 | link.rel = "stylesheet" 65 | link.media = "screen" 66 | 67 | document.addEventListener("DOMContentLoaded", function(event) { 68 | document.getElementsByTagName("head")[0].appendChild(link) 69 | }) 70 | 71 | var html = "" 72 | html += "
" 73 | html += "
" 74 | html += "

Install Prototype

" 75 | html += "

Tap

, then choose 'Add to Home Screen'

" 76 | html += "
" 77 | html += "
" 78 | 79 | showAlert(html) 80 | } 81 | 82 | function loadProject() { 83 | CoffeeScript.load("app.coffee") 84 | } 85 | 86 | function setDefaultPageTitle() { 87 | // If no title was set we set it to the project folder name so 88 | // you get a nice name on iOS if you bookmark to desktop. 89 | document.addEventListener("DOMContentLoaded", function() { 90 | if (document.title == "") { 91 | if (window.FramerStudioInfo && window.FramerStudioInfo.documentTitle) { 92 | document.title = window.FramerStudioInfo.documentTitle 93 | } else { 94 | document.title = window.location.pathname.replace(/\//g, "") 95 | } 96 | } 97 | }) 98 | } 99 | 100 | function init() { 101 | 102 | if (Utils.isFramerStudio()) { 103 | return 104 | } 105 | 106 | setDefaultPageTitle() 107 | 108 | if (!isCompatibleBrowser()) { 109 | return showBrowserAlert() 110 | } 111 | 112 | if (!isFileLoadingAllowed()) { 113 | return showFileLoadingAlert() 114 | } 115 | 116 | // if (Utils.isMobile() && !isHomeScreened()) { 117 | // return showHomeScreenAlert() 118 | // } 119 | 120 | loadProject() 121 | 122 | } 123 | 124 | init() 125 | 126 | })() 127 | -------------------------------------------------------------------------------- /pkg/assets/framer/popup.framer/framer/framer.modules.js: -------------------------------------------------------------------------------- 1 | require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /pkg/assets/framer/popup.framer/modules/myModule.coffee: -------------------------------------------------------------------------------- 1 | # Add the folowing line to your project in Framer Studio. 2 | # module = require "module" 3 | # Reference the contents by name, like module.myFunc() or module.myVar 4 | 5 | exports.myVar = "myVariable" 6 | 7 | exports.myFunction = -> 8 | print "myFunction is running" 9 | 10 | exports.myArray = [1, 2, 3] -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/.temp.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/app.coffee: -------------------------------------------------------------------------------- 1 | # This imports all the layers for "example3_swipe" into example3_swipeLayers1 2 | file = Framer.Importer.load "imported/example3_swipe" 3 | 4 | w = Framer.Device.screen.width 5 | 6 | file.message.draggable.enabled = true 7 | 8 | file.message.draggable.speedY = 0 9 | 10 | file.message.on Events.DragEnd, -> 11 | if file.message.midX < 0 12 | file.message.animate 13 | properties: 14 | x: 0 - w 15 | time: 0.1 16 | curve: "ease-in" 17 | else 18 | file.message.animate 19 | properties: 20 | x: 0 21 | time: 0.2 22 | 23 | file.message.on Events.AnimationEnd, -> 24 | if file.message.midX < 0 25 | file.delete.animate 26 | properties: 27 | scale: .8 28 | opacity: 0 29 | time: 0.2 30 | curve: "ease-in" -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/backups/backup-1427673752.coffee: -------------------------------------------------------------------------------- 1 | # This imports all the layers for "example3_swipe" into example3_swipeLayers1 2 | file = Framer.Importer.load "imported/example3_swipe" 3 | 4 | w = Framer.Device.screen.width 5 | 6 | file.message.draggable.enabled = true 7 | 8 | file.message.draggable.speedY = 0 9 | 10 | file.message.on Events.DragEnd, -> 11 | if file.message.midX < 0 12 | file.message.animate 13 | properties: 14 | x: 0 - w 15 | time: 0.1 16 | curve: "ease-in" 17 | else 18 | file.message.animate 19 | properties: 20 | x: 0 21 | time: 0.2 22 | 23 | file.message.on Events.AnimationEnd, -> 24 | if file.message.midX < 0 25 | file.delete.animate 26 | properties: 27 | scale: .8 28 | opacity: 0 29 | time: 0.2 30 | curve: "ease-in" -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/backups/backup-1428264184.coffee: -------------------------------------------------------------------------------- 1 | # This imports all the layers for "example3_swipe" into example3_swipeLayers1 2 | file = Framer.Importer.load "imported/example3_swipe" 3 | 4 | w = Framer.Device.screen.width 5 | 6 | file.message.draggable.enabled = true 7 | 8 | file.message.draggable.speedY = 0 9 | 10 | file.message.on Events.DragEnd, -> 11 | if file.message.midX < 0 12 | file.message.animate 13 | properties: 14 | x: 0 - w 15 | time: 0.1 16 | curve: "ease-in" 17 | else 18 | file.message.animate 19 | properties: 20 | x: 0 21 | time: 0.2 22 | 23 | file.message.on Events.AnimationEnd, -> 24 | if file.message.midX < 0 25 | file.delete.animate 26 | properties: 27 | scale: .8 28 | opacity: 0 29 | time: 0.2 30 | curve: "ease-in" -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "device" : "iPhone 5S Space Gray", 3 | "sharedPrototype" : 1, 4 | "deviceOrientation" : 0, 5 | "contentScale" : 1, 6 | "deviceType" : "iphone-6-spacegray", 7 | "updateDelay" : 0.3, 8 | "deviceScale" : -1, 9 | "delay" : 0.3 10 | } -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/framer.init.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 3 | function isFileLoadingAllowed() { 4 | return (window.location.protocol.indexOf("file") == -1) 5 | } 6 | 7 | function isHomeScreened() { 8 | return ("standalone" in window.navigator) && window.navigator.standalone == true 9 | } 10 | 11 | function isCompatibleBrowser() { 12 | return Utils.isWebKit() 13 | } 14 | 15 | var alertNode; 16 | 17 | function dismissAlert() { 18 | alertNode.parentElement.removeChild(alertNode) 19 | loadProject() 20 | } 21 | 22 | function showAlert(html) { 23 | 24 | alertNode = document.createElement("div") 25 | 26 | alertNode.classList.add("framerAlertBackground") 27 | alertNode.innerHTML = html 28 | 29 | document.addEventListener("DOMContentLoaded", function(event) { 30 | document.body.appendChild(alertNode) 31 | }) 32 | 33 | window.dismissAlert = dismissAlert; 34 | } 35 | 36 | function showBrowserAlert() { 37 | var html = "" 38 | html += "
" 39 | html += "Error: Not A WebKit Browser" 40 | html += "Your browser is not supported.
Please use Safari or Chrome.
" 41 | html += "Try anyway" 42 | html += "
" 43 | 44 | showAlert(html) 45 | } 46 | 47 | function showFileLoadingAlert() { 48 | var html = "" 49 | html += "
" 50 | html += "Error: Local File Restrictions" 51 | html += "Preview this prototype with Framer Mirror or learn more about " 52 | html += "file restrictions.
" 53 | html += "Try anyway" 54 | html += "
" 55 | 56 | showAlert(html) 57 | } 58 | 59 | function showHomeScreenAlert() { 60 | 61 | link = document.createElement("link"); 62 | link.href = "framer/mirror.css" 63 | link.type = "text/css" 64 | link.rel = "stylesheet" 65 | link.media = "screen" 66 | 67 | document.addEventListener("DOMContentLoaded", function(event) { 68 | document.getElementsByTagName("head")[0].appendChild(link) 69 | }) 70 | 71 | var html = "" 72 | html += "
" 73 | html += "
" 74 | html += "

Install Prototype

" 75 | html += "

Tap

, then choose 'Add to Home Screen'

" 76 | html += "
" 77 | html += "
" 78 | 79 | showAlert(html) 80 | } 81 | 82 | function loadProject() { 83 | CoffeeScript.load("app.coffee") 84 | } 85 | 86 | function setDefaultPageTitle() { 87 | // If no title was set we set it to the project folder name so 88 | // you get a nice name on iOS if you bookmark to desktop. 89 | document.addEventListener("DOMContentLoaded", function() { 90 | if (document.title == "") { 91 | if (window.FramerStudioInfo && window.FramerStudioInfo.documentTitle) { 92 | document.title = window.FramerStudioInfo.documentTitle 93 | } else { 94 | document.title = window.location.pathname.replace(/\//g, "") 95 | } 96 | } 97 | }) 98 | } 99 | 100 | function init() { 101 | 102 | if (Utils.isFramerStudio()) { 103 | return 104 | } 105 | 106 | setDefaultPageTitle() 107 | 108 | if (!isCompatibleBrowser()) { 109 | return showBrowserAlert() 110 | } 111 | 112 | if (!isFileLoadingAllowed()) { 113 | return showFileLoadingAlert() 114 | } 115 | 116 | // if (Utils.isMobile() && !isHomeScreened()) { 117 | // return showHomeScreenAlert() 118 | // } 119 | 120 | loadProject() 121 | 122 | } 123 | 124 | init() 125 | 126 | })() 127 | -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/framer.modules.js: -------------------------------------------------------------------------------- 1 | // This file will contain generated modules from the project/modules directory -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/images/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/framer/images/background.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/images/cursor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/framer/images/cursor.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/images/cursor@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/framer/images/cursor@2x.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/images/icon-120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/framer/images/icon-120.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/images/icon-152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/framer/images/icon-152.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/images/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/framer/images/icon-76.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/images/icon-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/framer/images/icon-arrow.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/images/icon-arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/framer/images/icon-arrow@2x.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/images/icon-close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/framer/images/icon-close.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/images/icon-close@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/framer/images/icon-close@2x.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/images/icon-framer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/framer/images/icon-framer.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/images/icon-framer@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/framer/images/icon-framer@2x.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/images/icon-share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/framer/images/icon-share.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/images/icon-share@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/framer/images/icon-share@2x.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/mirror.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | border: none; 5 | -webkit-user-select: none; 6 | -webkit-tap-highlight-color: rgba(0,0,0,0); 7 | } 8 | html, body, .wrapper { 9 | height: 100%; 10 | } 11 | body { 12 | background: #fff; 13 | font: 300 20px "Helvetica Neue", Helvetica, sans-serif; 14 | overflow: hidden; 15 | cursor: url('images/cursor.png') 39 39, auto; 16 | text-align: center; 17 | position: relative; 18 | -webkit-font-smoothing: antialiased; 19 | text-rendering: optimizeLegibility; 20 | color: #333740; 21 | } 22 | a { 23 | color: gray; 24 | } 25 | .framerAlert { 26 | font: 12px/1.6em Menlo; 27 | margin: 10px; 28 | color: gray; 29 | } 30 | ::-webkit-scrollbar { 31 | display: none; 32 | } 33 | .wrapper { 34 | width:100%; 35 | max-width: 240px; 36 | margin: 0 auto; 37 | padding-top: 38%; 38 | position: relative; 39 | } 40 | /* Text */ 41 | h1 { 42 | font-size: 22px; 43 | font-weight: 400; 44 | margin-top: 0px; 45 | line-height: 1.5; 46 | color: black; 47 | 48 | margin-bottom: 8px; 49 | margin-top: 16px; 50 | } 51 | h2 { 52 | font-size: 14px; 53 | font-weight: 400; 54 | color: #788594; 55 | } 56 | hr { 57 | border: none; width: 100%; 58 | border-bottom: 1px solid #EFF1F3; 59 | display: block; 60 | margin: 40px auto 32px auto; 61 | } 62 | p { 63 | display: inline-block; 64 | line-height: 1.5; 65 | } 66 | figure { 67 | display: inline-block; 68 | } 69 | .share { 70 | color: #007AFF; 71 | display: inline-block; 72 | margin-left: 8px; 73 | } 74 | .icon-share { 75 | margin-right: 0px; 76 | position: relative; 77 | top:0.5px; 78 | } 79 | .arrow { 80 | position: absolute; 81 | max-width: 240px; 82 | width: 100%; 83 | left:50%; margin-left:-120px; 84 | bottom: 24%; 85 | } 86 | .arrow figure { 87 | -webkit-animation: bounce 1.25s ease infinite; 88 | -moz-animation: bounce 1.25s ease infinite; 89 | -o-animation: bounce 1.25s ease infinite; 90 | animation: bounce 1.25s ease infinite; 91 | -webkit-transform-origin: center bottom; 92 | -ms-transform-origin: center bottom; 93 | transform-origin: center bottom; 94 | } 95 | /* Arrow animation */ 96 | @-webkit-keyframes bounce { 97 | 0%, 100% { 98 | -webkit-transform: translate3d(0,0,0); 99 | transform: translate3d(0,0,0); 100 | } 101 | 50% { 102 | -webkit-transform: translate3d(0, -16px, 0); 103 | transform: translate3d(0, -16px, 0); 104 | } 105 | } 106 | @keyframes bounce { 107 | 0%, 100% { 108 | -webkit-transform: translate3d(0,0,0); 109 | transform: translate3d(0,0,0); 110 | } 111 | 50% { 112 | -webkit-transform: translate3d(0, -16px, 0); 113 | transform: translate3d(0, -16px, 0); 114 | } 115 | } 116 | /* Icons */ 117 | .icon-close, 118 | .icon-framer, 119 | .icon-share, 120 | .icon-arrow { 121 | background-size: cover; 122 | } 123 | .icon-close { 124 | background-image: url("images/icon-close.png"); 125 | position: absolute; 126 | top:16px; 127 | right:16px; 128 | cursor: pointer; 129 | cursor: hand; 130 | width: 18px; 131 | height: 18px; 132 | } 133 | .icon-framer { 134 | background-image: url("images/icon-framer.png"); 135 | width: 60px; 136 | height: 60px; 137 | } 138 | .icon-share { 139 | background-image: url("images/icon-share.png"); 140 | width: 11px; 141 | height: 18px; 142 | } 143 | .icon-arrow { 144 | background-image: url("images/icon-arrow.png"); 145 | width: 18px; 146 | height: 30px; 147 | } 148 | /* Retina Icons */ 149 | @media screen and (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { 150 | .icon-close { 151 | background-image: url("images/icon-close@2x.png"); 152 | } 153 | .icon-framer { 154 | background-image: url("images/icon-framer@2x.png"); 155 | } 156 | .icon-share { 157 | background-image: url("images/icon-share@2x.png"); 158 | } 159 | .icon-arrow { 160 | background-image: url("images/icon-arrow@2x.png"); 161 | } 162 | } 163 | /* Avoid overflow scrolling when viewing in Portrait */ 164 | @media screen and (orientation:portrait) { 165 | html, body, .wrapper { 166 | overflow: hidden; 167 | } 168 | } 169 | /* iPad share icon is positioned in the navigation bar */ 170 | @media screen and (min-width: 576px){ 171 | .arrow { 172 | display: none; 173 | } 174 | .wrapper { 175 | padding-bottom: 25%; 176 | } 177 | } 178 | /* When it landscape, hide arrow and adjust spacing */ 179 | @media screen and (orientation:landscape) { 180 | .arrow { 181 | display: none; 182 | } 183 | .wrapper { 184 | padding-top: 10%; 185 | padding-bottom: 0; 186 | } 187 | } 188 | /* iPhone 6 Portrait */ 189 | @media screen and (min-device-width:375px) and (max-device-width:667px) and (-webkit-min-device-pixel-ratio:2) and (orientation:portrait) { 190 | .wrapper { 191 | padding-top: 48%; 192 | } 193 | .arrow { 194 | bottom: 27%; 195 | } 196 | } -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/style.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | border: none; 5 | -webkit-user-select: none; 6 | -webkit-tap-highlight-color: rgba(0,0,0,0); 7 | } 8 | 9 | body { 10 | background-color: #fff; 11 | font: 28px/1em "Helvetica"; 12 | color: #FFF; 13 | overflow: hidden; 14 | cursor: url('images/cursor.png') 39 39, auto; 15 | } 16 | 17 | a { 18 | color: gray; 19 | } 20 | 21 | .framerAlertBackground { 22 | position: absolute; top:0px; left:0px; right:0px; bottom:0px; 23 | z-index: 1000; 24 | background-color: #fff; 25 | } 26 | 27 | .framerAlert { 28 | font:400 14px/1.4 "Helvetica Neue", Helvetica, Arial, sans-serif; 29 | -webkit-font-smoothing:antialiased; 30 | color:#616367; text-align:center; 31 | position: absolute; top:40%; left:50%; width:260px; margin-left:-130px; 32 | } 33 | .framerAlert strong { font-weight:500; color:#000; margin-bottom:8px; display:block; } 34 | .framerAlert a { color:#28AFFA; } 35 | .framerAlert .btn { 36 | font-weight:500; text-decoration:none; line-height:1; 37 | display:inline-block; padding:6px 12px 7px 12px; 38 | border-radius:3px; margin-top:12px; 39 | background:#28AFFA; color:#fff; 40 | } 41 | 42 | ::-webkit-scrollbar { 43 | display: none; 44 | } -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/framer/version: -------------------------------------------------------------------------------- 1 | 1 -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/images/framer-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/images/framer-icon.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/example3_swipe/images/bg-467D259F-657A-4BEC-B60C-B8649B3A5542.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/imported/example3_swipe/images/bg-467D259F-657A-4BEC-B60C-B8649B3A5542.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/example3_swipe/images/delete-798508F9-2530-4983-865D-078792D52551.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/imported/example3_swipe/images/delete-798508F9-2530-4983-865D-078792D52551.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/example3_swipe/images/message-C98AA120-6BD4-4158-8C00-3AE9675BED77.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/imported/example3_swipe/images/message-C98AA120-6BD4-4158-8C00-3AE9675BED77.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/example3_swipe/images/top_nav-56441F68-B18C-4BEC-AC43-57EBA8202E03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/imported/example3_swipe/images/top_nav-56441F68-B18C-4BEC-AC43-57EBA8202E03.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/example3_swipe/layers.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "maskFrame" : { 4 | "y" : 0, 5 | "x" : 0, 6 | "width" : 750, 7 | "height" : 1334 8 | }, 9 | "id" : "467D259F-657A-4BEC-B60C-B8649B3A5542", 10 | "visible" : true, 11 | "children" : [ 12 | 13 | ], 14 | "image" : { 15 | "path" : "images\/bg-467D259F-657A-4BEC-B60C-B8649B3A5542.png", 16 | "frame" : { 17 | "y" : 0, 18 | "x" : 0, 19 | "width" : 750, 20 | "height" : 1334 21 | } 22 | }, 23 | "imageType" : "png", 24 | "layerFrame" : { 25 | "y" : 0, 26 | "x" : 0, 27 | "width" : 750, 28 | "height" : 1334 29 | }, 30 | "name" : "bg" 31 | }, 32 | { 33 | "maskFrame" : null, 34 | "id" : "798508F9-2530-4983-865D-078792D52551", 35 | "visible" : true, 36 | "children" : [ 37 | 38 | ], 39 | "image" : { 40 | "path" : "images\/delete-798508F9-2530-4983-865D-078792D52551.png", 41 | "frame" : { 42 | "y" : 127, 43 | "x" : 2, 44 | "width" : 748, 45 | "height" : 151 46 | } 47 | }, 48 | "imageType" : "png", 49 | "layerFrame" : { 50 | "y" : 127, 51 | "x" : 2, 52 | "width" : 748, 53 | "height" : 151 54 | }, 55 | "name" : "delete" 56 | }, 57 | { 58 | "maskFrame" : null, 59 | "id" : "C98AA120-6BD4-4158-8C00-3AE9675BED77", 60 | "visible" : true, 61 | "children" : [ 62 | 63 | ], 64 | "image" : { 65 | "path" : "images\/message-C98AA120-6BD4-4158-8C00-3AE9675BED77.png", 66 | "frame" : { 67 | "y" : 127, 68 | "x" : 0, 69 | "width" : 750, 70 | "height" : 153 71 | } 72 | }, 73 | "imageType" : "png", 74 | "layerFrame" : { 75 | "y" : 127, 76 | "x" : 0, 77 | "width" : 750, 78 | "height" : 153 79 | }, 80 | "name" : "message" 81 | }, 82 | { 83 | "maskFrame" : null, 84 | "id" : "56441F68-B18C-4BEC-AC43-57EBA8202E03", 85 | "visible" : true, 86 | "children" : [ 87 | 88 | ], 89 | "image" : { 90 | "path" : "images\/top_nav-56441F68-B18C-4BEC-AC43-57EBA8202E03.png", 91 | "frame" : { 92 | "y" : 0, 93 | "x" : 0, 94 | "width" : 750, 95 | "height" : 127 96 | } 97 | }, 98 | "imageType" : "png", 99 | "layerFrame" : { 100 | "y" : 0, 101 | "x" : 0, 102 | "width" : 750, 103 | "height" : 127 104 | }, 105 | "name" : "top_nav" 106 | } 107 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/example3_swipe/layers.json.js: -------------------------------------------------------------------------------- 1 | window.__imported__ = window.__imported__ || {}; 2 | window.__imported__["example3_swipe/layers.json.js"] = [ 3 | { 4 | "maskFrame" : { 5 | "y" : 0, 6 | "x" : 0, 7 | "width" : 750, 8 | "height" : 1334 9 | }, 10 | "id" : "467D259F-657A-4BEC-B60C-B8649B3A5542", 11 | "visible" : true, 12 | "children" : [ 13 | 14 | ], 15 | "image" : { 16 | "path" : "images\/bg-467D259F-657A-4BEC-B60C-B8649B3A5542.png", 17 | "frame" : { 18 | "y" : 0, 19 | "x" : 0, 20 | "width" : 750, 21 | "height" : 1334 22 | } 23 | }, 24 | "imageType" : "png", 25 | "layerFrame" : { 26 | "y" : 0, 27 | "x" : 0, 28 | "width" : 750, 29 | "height" : 1334 30 | }, 31 | "name" : "bg" 32 | }, 33 | { 34 | "maskFrame" : null, 35 | "id" : "798508F9-2530-4983-865D-078792D52551", 36 | "visible" : true, 37 | "children" : [ 38 | 39 | ], 40 | "image" : { 41 | "path" : "images\/delete-798508F9-2530-4983-865D-078792D52551.png", 42 | "frame" : { 43 | "y" : 127, 44 | "x" : 2, 45 | "width" : 748, 46 | "height" : 151 47 | } 48 | }, 49 | "imageType" : "png", 50 | "layerFrame" : { 51 | "y" : 127, 52 | "x" : 2, 53 | "width" : 748, 54 | "height" : 151 55 | }, 56 | "name" : "delete" 57 | }, 58 | { 59 | "maskFrame" : null, 60 | "id" : "C98AA120-6BD4-4158-8C00-3AE9675BED77", 61 | "visible" : true, 62 | "children" : [ 63 | 64 | ], 65 | "image" : { 66 | "path" : "images\/message-C98AA120-6BD4-4158-8C00-3AE9675BED77.png", 67 | "frame" : { 68 | "y" : 127, 69 | "x" : 0, 70 | "width" : 750, 71 | "height" : 153 72 | } 73 | }, 74 | "imageType" : "png", 75 | "layerFrame" : { 76 | "y" : 127, 77 | "x" : 0, 78 | "width" : 750, 79 | "height" : 153 80 | }, 81 | "name" : "message" 82 | }, 83 | { 84 | "maskFrame" : null, 85 | "id" : "56441F68-B18C-4BEC-AC43-57EBA8202E03", 86 | "visible" : true, 87 | "children" : [ 88 | 89 | ], 90 | "image" : { 91 | "path" : "images\/top_nav-56441F68-B18C-4BEC-AC43-57EBA8202E03.png", 92 | "frame" : { 93 | "y" : 0, 94 | "x" : 0, 95 | "width" : 750, 96 | "height" : 127 97 | } 98 | }, 99 | "imageType" : "png", 100 | "layerFrame" : { 101 | "y" : 0, 102 | "x" : 0, 103 | "width" : 750, 104 | "height" : 127 105 | }, 106 | "name" : "top_nav" 107 | } 108 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/example3_swipe2/framerps.log: -------------------------------------------------------------------------------- 1 | Could not read previous export (for caching), doing full export. 2 | Renaming bg -> bg-2 3 | Navigation_Bar: Exporting image 4 | message: Exporting image 5 | delete: Exporting image 6 | bg: Exporting image 7 | 5 views changed 8 | Success: /Users/tessathornton/Code/slider.framer/imported/example3_swipe2 9 | -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/example3_swipe2/images/Navigation_Bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/imported/example3_swipe2/images/Navigation_Bar.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/example3_swipe2/images/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/imported/example3_swipe2/images/bg.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/example3_swipe2/images/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/imported/example3_swipe2/images/delete.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/example3_swipe2/images/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/imported/example3_swipe2/images/message.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/example3_swipe2/layers.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 5, 4 | "name": "bg", 5 | "layerFrame": { 6 | "x": 0, 7 | "y": 0, 8 | "width": 750, 9 | "height": 1334 10 | }, 11 | "maskFrame": null, 12 | "image": null, 13 | "imageType": null, 14 | "children": [ 15 | { 16 | "id": 52, 17 | "name": "Navigation_Bar", 18 | "layerFrame": { 19 | "x": 0, 20 | "y": 0, 21 | "width": 750, 22 | "height": 1334 23 | }, 24 | "maskFrame": null, 25 | "image": { 26 | "path": "images/Navigation_Bar.png", 27 | "frame": { 28 | "x": 0, 29 | "y": 0, 30 | "width": 750, 31 | "height": 129 32 | } 33 | }, 34 | "imageType": "png", 35 | "children": [ 36 | 37 | ], 38 | "modification": "158714615" 39 | }, 40 | { 41 | "id": 46, 42 | "name": "message", 43 | "layerFrame": { 44 | "x": 0, 45 | "y": 0, 46 | "width": 750, 47 | "height": 1334 48 | }, 49 | "maskFrame": null, 50 | "image": { 51 | "path": "images/message.png", 52 | "frame": { 53 | "x": 0, 54 | "y": 127, 55 | "width": 750, 56 | "height": 151 57 | } 58 | }, 59 | "imageType": "png", 60 | "children": [ 61 | 62 | ], 63 | "modification": "2075231165" 64 | }, 65 | { 66 | "id": 38, 67 | "name": "delete", 68 | "layerFrame": { 69 | "x": 0, 70 | "y": 0, 71 | "width": 750, 72 | "height": 1334 73 | }, 74 | "maskFrame": null, 75 | "image": { 76 | "path": "images/delete.png", 77 | "frame": { 78 | "x": 0, 79 | "y": 125, 80 | "width": 750, 81 | "height": 151 82 | } 83 | }, 84 | "imageType": "png", 85 | "children": [ 86 | 87 | ], 88 | "modification": "117909762" 89 | }, 90 | { 91 | "id": 34, 92 | "name": "bg", 93 | "layerFrame": { 94 | "x": 0, 95 | "y": 0, 96 | "width": 750, 97 | "height": 1334 98 | }, 99 | "maskFrame": null, 100 | "image": { 101 | "path": "images/bg.png", 102 | "frame": { 103 | "x": 0, 104 | "y": 0, 105 | "width": 750, 106 | "height": 1334 107 | } 108 | }, 109 | "imageType": "png", 110 | "children": [ 111 | 112 | ], 113 | "modification": "57585629" 114 | } 115 | ], 116 | "modification": "503784321" 117 | } 118 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/example3_swipe2/layers.json.js: -------------------------------------------------------------------------------- 1 | window.__imported__ = window.__imported__ || {}; 2 | window.__imported__["example3_swipe2/layers.json.js"] = [ 3 | { 4 | "id": 5, 5 | "name": "bg", 6 | "layerFrame": { 7 | "x": 0, 8 | "y": 0, 9 | "width": 750, 10 | "height": 1334 11 | }, 12 | "maskFrame": null, 13 | "image": null, 14 | "imageType": null, 15 | "children": [ 16 | { 17 | "id": 52, 18 | "name": "Navigation_Bar", 19 | "layerFrame": { 20 | "x": 0, 21 | "y": 0, 22 | "width": 750, 23 | "height": 1334 24 | }, 25 | "maskFrame": null, 26 | "image": { 27 | "path": "images/Navigation_Bar.png", 28 | "frame": { 29 | "x": 0, 30 | "y": 0, 31 | "width": 750, 32 | "height": 129 33 | } 34 | }, 35 | "imageType": "png", 36 | "children": [ 37 | 38 | ], 39 | "modification": "158714615" 40 | }, 41 | { 42 | "id": 46, 43 | "name": "message", 44 | "layerFrame": { 45 | "x": 0, 46 | "y": 0, 47 | "width": 750, 48 | "height": 1334 49 | }, 50 | "maskFrame": null, 51 | "image": { 52 | "path": "images/message.png", 53 | "frame": { 54 | "x": 0, 55 | "y": 127, 56 | "width": 750, 57 | "height": 151 58 | } 59 | }, 60 | "imageType": "png", 61 | "children": [ 62 | 63 | ], 64 | "modification": "2075231165" 65 | }, 66 | { 67 | "id": 38, 68 | "name": "delete", 69 | "layerFrame": { 70 | "x": 0, 71 | "y": 0, 72 | "width": 750, 73 | "height": 1334 74 | }, 75 | "maskFrame": null, 76 | "image": { 77 | "path": "images/delete.png", 78 | "frame": { 79 | "x": 0, 80 | "y": 125, 81 | "width": 750, 82 | "height": 151 83 | } 84 | }, 85 | "imageType": "png", 86 | "children": [ 87 | 88 | ], 89 | "modification": "117909762" 90 | }, 91 | { 92 | "id": 34, 93 | "name": "bg", 94 | "layerFrame": { 95 | "x": 0, 96 | "y": 0, 97 | "width": 750, 98 | "height": 1334 99 | }, 100 | "maskFrame": null, 101 | "image": { 102 | "path": "images/bg.png", 103 | "frame": { 104 | "x": 0, 105 | "y": 0, 106 | "width": 750, 107 | "height": 1334 108 | } 109 | }, 110 | "imageType": "png", 111 | "children": [ 112 | 113 | ], 114 | "modification": "57585629" 115 | } 116 | ], 117 | "modification": "503784321" 118 | } 119 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/slider/framerps.log: -------------------------------------------------------------------------------- 1 | Could not read previous export (for caching), doing full export. 2 | Bg: Exporting image 3 | card1: Exporting image 4 | card2: Exporting image 5 | card3: Exporting image 6 | 5 views changed 7 | Success: /var/folders/l9/607s07lj58n6w3kn9zdhr87r0000gn/T/114D097F-8FDF-404F-B8D5-D506362512AD-47272-000146ECD244E614/Untitled.framer/imported/slider 8 | -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/slider/images/Bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/imported/slider/images/Bg.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/slider/images/Card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/imported/slider/images/Card.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/slider/images/Paginator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/imported/slider/images/Paginator.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/slider/images/card1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/imported/slider/images/card1.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/slider/images/card2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/imported/slider/images/card2.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/slider/images/card3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/imported/slider/images/card3.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/slider/layers.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 5640, 4 | "name": "Bg", 5 | "layerFrame": { 6 | "x": 0, 7 | "y": 0, 8 | "width": 1920, 9 | "height": 1136 10 | }, 11 | "maskFrame": null, 12 | "image": { 13 | "path": "images/Bg.png", 14 | "frame": { 15 | "x": 0, 16 | "y": 0, 17 | "width": 1920, 18 | "height": 1136 19 | } 20 | }, 21 | "imageType": "png", 22 | "children": [ 23 | 24 | ], 25 | "modification": "1988695100" 26 | }, 27 | { 28 | "id": 5693, 29 | "name": "cards", 30 | "layerFrame": { 31 | "x": 0, 32 | "y": 0, 33 | "width": 1920, 34 | "height": 1136 35 | }, 36 | "maskFrame": null, 37 | "image": null, 38 | "imageType": null, 39 | "children": [ 40 | { 41 | "id": 5692, 42 | "name": "card1", 43 | "layerFrame": { 44 | "x": 0, 45 | "y": 0, 46 | "width": 1920, 47 | "height": 1136 48 | }, 49 | "maskFrame": null, 50 | "image": { 51 | "path": "images/card1.png", 52 | "frame": { 53 | "x": 25, 54 | "y": 28, 55 | "width": 580, 56 | "height": 897 57 | } 58 | }, 59 | "imageType": "png", 60 | "children": [ 61 | 62 | ], 63 | "modification": "990146907" 64 | }, 65 | { 66 | "id": 5660, 67 | "name": "card2", 68 | "layerFrame": { 69 | "x": 0, 70 | "y": 0, 71 | "width": 1920, 72 | "height": 1136 73 | }, 74 | "maskFrame": null, 75 | "image": { 76 | "path": "images/card2.png", 77 | "frame": { 78 | "x": 669, 79 | "y": 30, 80 | "width": 580, 81 | "height": 897 82 | } 83 | }, 84 | "imageType": "png", 85 | "children": [ 86 | 87 | ], 88 | "modification": "1312609480" 89 | }, 90 | { 91 | "id": 5685, 92 | "name": "card3", 93 | "layerFrame": { 94 | "x": 0, 95 | "y": 0, 96 | "width": 1920, 97 | "height": 1136 98 | }, 99 | "maskFrame": null, 100 | "image": { 101 | "path": "images/card3.png", 102 | "frame": { 103 | "x": 1310, 104 | "y": 30, 105 | "width": 580, 106 | "height": 897 107 | } 108 | }, 109 | "imageType": "png", 110 | "children": [ 111 | 112 | ], 113 | "modification": "2077050872" 114 | } 115 | ], 116 | "modification": "1284472079" 117 | } 118 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/slider/layers.json.js: -------------------------------------------------------------------------------- 1 | window.__imported__ = window.__imported__ || {}; 2 | window.__imported__["slider/layers.json.js"] = [ 3 | { 4 | "id": 5640, 5 | "name": "Bg", 6 | "layerFrame": { 7 | "x": 0, 8 | "y": 0, 9 | "width": 1920, 10 | "height": 1136 11 | }, 12 | "maskFrame": null, 13 | "image": { 14 | "path": "images/Bg.png", 15 | "frame": { 16 | "x": 0, 17 | "y": 0, 18 | "width": 1920, 19 | "height": 1136 20 | } 21 | }, 22 | "imageType": "png", 23 | "children": [ 24 | 25 | ], 26 | "modification": "1988695100" 27 | }, 28 | { 29 | "id": 5693, 30 | "name": "cards", 31 | "layerFrame": { 32 | "x": 0, 33 | "y": 0, 34 | "width": 1920, 35 | "height": 1136 36 | }, 37 | "maskFrame": null, 38 | "image": null, 39 | "imageType": null, 40 | "children": [ 41 | { 42 | "id": 5692, 43 | "name": "card1", 44 | "layerFrame": { 45 | "x": 0, 46 | "y": 0, 47 | "width": 1920, 48 | "height": 1136 49 | }, 50 | "maskFrame": null, 51 | "image": { 52 | "path": "images/card1.png", 53 | "frame": { 54 | "x": 25, 55 | "y": 28, 56 | "width": 580, 57 | "height": 897 58 | } 59 | }, 60 | "imageType": "png", 61 | "children": [ 62 | 63 | ], 64 | "modification": "990146907" 65 | }, 66 | { 67 | "id": 5660, 68 | "name": "card2", 69 | "layerFrame": { 70 | "x": 0, 71 | "y": 0, 72 | "width": 1920, 73 | "height": 1136 74 | }, 75 | "maskFrame": null, 76 | "image": { 77 | "path": "images/card2.png", 78 | "frame": { 79 | "x": 669, 80 | "y": 30, 81 | "width": 580, 82 | "height": 897 83 | } 84 | }, 85 | "imageType": "png", 86 | "children": [ 87 | 88 | ], 89 | "modification": "1312609480" 90 | }, 91 | { 92 | "id": 5685, 93 | "name": "card3", 94 | "layerFrame": { 95 | "x": 0, 96 | "y": 0, 97 | "width": 1920, 98 | "height": 1136 99 | }, 100 | "maskFrame": null, 101 | "image": { 102 | "path": "images/card3.png", 103 | "frame": { 104 | "x": 1310, 105 | "y": 30, 106 | "width": 580, 107 | "height": 897 108 | } 109 | }, 110 | "imageType": "png", 111 | "children": [ 112 | 113 | ], 114 | "modification": "2077050872" 115 | } 116 | ], 117 | "modification": "1284472079" 118 | } 119 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/swipe/framerps.log: -------------------------------------------------------------------------------- 1 | Could not read previous export (for caching), doing full export. 2 | bg: Exporting image 3 | delete: Exporting image 4 | message: Exporting image 5 | Navigation_Bar: Exporting image 6 | 4 views changed 7 | Success: /Users/tessathornton/Code/slider.framer/imported/swipe 8 | -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/swipe/images/Navigation_Bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/imported/swipe/images/Navigation_Bar.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/swipe/images/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/imported/swipe/images/bg.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/swipe/images/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/imported/swipe/images/delete.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/swipe/images/message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/swipe.framer/imported/swipe/images/message.png -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/swipe/layers.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 1840, 4 | "name": "bg", 5 | "layerFrame": { 6 | "x": 0, 7 | "y": 0, 8 | "width": 640, 9 | "height": 1136 10 | }, 11 | "maskFrame": null, 12 | "image": { 13 | "path": "images/bg.png", 14 | "frame": { 15 | "x": 0, 16 | "y": 40, 17 | "width": 640, 18 | "height": 1096 19 | } 20 | }, 21 | "imageType": "png", 22 | "children": [ 23 | 24 | ], 25 | "modification": "863442307" 26 | }, 27 | { 28 | "id": 1739, 29 | "name": "delete", 30 | "layerFrame": { 31 | "x": 0, 32 | "y": 0, 33 | "width": 640, 34 | "height": 1136 35 | }, 36 | "maskFrame": null, 37 | "image": { 38 | "path": "images/delete.png", 39 | "frame": { 40 | "x": 0, 41 | "y": 125, 42 | "width": 640, 43 | "height": 151 44 | } 45 | }, 46 | "imageType": "png", 47 | "children": [ 48 | 49 | ], 50 | "modification": "1800021914" 51 | }, 52 | { 53 | "id": 1708, 54 | "name": "message", 55 | "layerFrame": { 56 | "x": 0, 57 | "y": 0, 58 | "width": 640, 59 | "height": 1136 60 | }, 61 | "maskFrame": null, 62 | "image": { 63 | "path": "images/message.png", 64 | "frame": { 65 | "x": 0, 66 | "y": 127, 67 | "width": 640, 68 | "height": 151 69 | } 70 | }, 71 | "imageType": "png", 72 | "children": [ 73 | 74 | ], 75 | "modification": "733022571" 76 | }, 77 | { 78 | "id": 1753, 79 | "name": "Navigation_Bar", 80 | "layerFrame": { 81 | "x": 0, 82 | "y": 0, 83 | "width": 640, 84 | "height": 1136 85 | }, 86 | "maskFrame": null, 87 | "image": { 88 | "path": "images/Navigation_Bar.png", 89 | "frame": { 90 | "x": 0, 91 | "y": 0, 92 | "width": 640, 93 | "height": 129 94 | } 95 | }, 96 | "imageType": "png", 97 | "children": [ 98 | 99 | ], 100 | "modification": "727677044" 101 | } 102 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/imported/swipe/layers.json.js: -------------------------------------------------------------------------------- 1 | window.__imported__ = window.__imported__ || {}; 2 | window.__imported__["swipe/layers.json.js"] = [ 3 | { 4 | "id": 1840, 5 | "name": "bg", 6 | "layerFrame": { 7 | "x": 0, 8 | "y": 0, 9 | "width": 640, 10 | "height": 1136 11 | }, 12 | "maskFrame": null, 13 | "image": { 14 | "path": "images/bg.png", 15 | "frame": { 16 | "x": 0, 17 | "y": 40, 18 | "width": 640, 19 | "height": 1096 20 | } 21 | }, 22 | "imageType": "png", 23 | "children": [ 24 | 25 | ], 26 | "modification": "863442307" 27 | }, 28 | { 29 | "id": 1739, 30 | "name": "delete", 31 | "layerFrame": { 32 | "x": 0, 33 | "y": 0, 34 | "width": 640, 35 | "height": 1136 36 | }, 37 | "maskFrame": null, 38 | "image": { 39 | "path": "images/delete.png", 40 | "frame": { 41 | "x": 0, 42 | "y": 125, 43 | "width": 640, 44 | "height": 151 45 | } 46 | }, 47 | "imageType": "png", 48 | "children": [ 49 | 50 | ], 51 | "modification": "1800021914" 52 | }, 53 | { 54 | "id": 1708, 55 | "name": "message", 56 | "layerFrame": { 57 | "x": 0, 58 | "y": 0, 59 | "width": 640, 60 | "height": 1136 61 | }, 62 | "maskFrame": null, 63 | "image": { 64 | "path": "images/message.png", 65 | "frame": { 66 | "x": 0, 67 | "y": 127, 68 | "width": 640, 69 | "height": 151 70 | } 71 | }, 72 | "imageType": "png", 73 | "children": [ 74 | 75 | ], 76 | "modification": "733022571" 77 | }, 78 | { 79 | "id": 1753, 80 | "name": "Navigation_Bar", 81 | "layerFrame": { 82 | "x": 0, 83 | "y": 0, 84 | "width": 640, 85 | "height": 1136 86 | }, 87 | "maskFrame": null, 88 | "image": { 89 | "path": "images/Navigation_Bar.png", 90 | "frame": { 91 | "x": 0, 92 | "y": 0, 93 | "width": 640, 94 | "height": 129 95 | } 96 | }, 97 | "imageType": "png", 98 | "children": [ 99 | 100 | ], 101 | "modification": "727677044" 102 | } 103 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/swipe.framer/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/.temp.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/app.coffee: -------------------------------------------------------------------------------- 1 | h = Framer.Device.screen.height 2 | 3 | bg = new Layer 4 | x:0, y:0, width:312, height:366, image:"images/example4_bg.png" 5 | 6 | watch_file = Framer.Importer.load "imported/example4_watch" 7 | 8 | icon = new Layer 9 | x:0, y:0, width:196, height:196, image:"images/example4_icon.png" 10 | 11 | notification = watch_file.notification 12 | 13 | icon.centerX() 14 | icon.y = h 15 | 16 | notification.y = h 17 | 18 | icon.animate 19 | properties: 20 | midY: h / 2 21 | time: .4 22 | curve: "spring(120,18,0)" 23 | 24 | bg.animate 25 | properties: 26 | blur: 15 27 | opacity: .5 28 | time: .4 29 | 30 | icon.on Events.AnimationEnd, -> 31 | icon.animate 32 | properties: 33 | scale: .5 34 | x: -29 35 | y: -49 36 | time: .3 37 | curve: "spring(320,26,0)" 38 | notification.animate 39 | properties: 40 | y: 49 41 | time: .3 42 | curve: "spring(320,26,0)" 43 | 44 | button = watch_file.button 45 | 46 | button.on Events.Click, -> 47 | notification.animate 48 | properties: 49 | opacity: 0 50 | time: .3 51 | icon.animate 52 | properties: 53 | opacity: 0 54 | time: .3 55 | bg.animate 56 | properties: 57 | opacity: 1 58 | blur: 0 59 | time: .3 60 | -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/backups/backup-1427673752.coffee: -------------------------------------------------------------------------------- 1 | h = Framer.Device.screen.height 2 | 3 | bg = new Layer 4 | x:0, y:0, width:312, height:366, image:"images/example4_bg.png" 5 | 6 | watch_file = Framer.Importer.load "imported/example4_watch" 7 | 8 | icon = new Layer 9 | x:0, y:0, width:196, height:196, image:"images/example4_icon.png" 10 | 11 | notification = watch_file.notification 12 | 13 | icon.centerX() 14 | icon.y = h 15 | 16 | notification.y = h 17 | 18 | icon.animate 19 | properties: 20 | midY: h / 2 21 | time: .4 22 | curve: "spring(120,18,0)" 23 | 24 | bg.animate 25 | properties: 26 | blur: 15 27 | opacity: .5 28 | time: .4 29 | 30 | icon.on Events.AnimationEnd, -> 31 | icon.animate 32 | properties: 33 | scale: .5 34 | x: -29 35 | y: -49 36 | time: .3 37 | curve: "spring(320,26,0)" 38 | notification.animate 39 | properties: 40 | y: 49 41 | time: .3 42 | curve: "spring(320,26,0)" 43 | 44 | button = watch_file.button 45 | 46 | button.on Events.Click, -> 47 | notification.animate 48 | properties: 49 | opacity: 0 50 | time: .3 51 | icon.animate 52 | properties: 53 | opacity: 0 54 | time: .3 55 | bg.animate 56 | properties: 57 | opacity: 1 58 | blur: 0 59 | time: .3 60 | -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "device" : "iPhone 5S Space Gray", 3 | "sharedPrototype" : 0, 4 | "deviceOrientation" : 0, 5 | "contentScale" : 1, 6 | "deviceType" : "applewatchsport-42-aluminum-sportband-green", 7 | "updateDelay" : 0.3, 8 | "deviceScale" : -1, 9 | "delay" : 0.3 10 | } -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/framer.init.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 3 | function isFileLoadingAllowed() { 4 | return (window.location.protocol.indexOf("file") == -1) 5 | } 6 | 7 | function isHomeScreened() { 8 | return ("standalone" in window.navigator) && window.navigator.standalone == true 9 | } 10 | 11 | function isCompatibleBrowser() { 12 | return Utils.isWebKit() 13 | } 14 | 15 | var alertNode; 16 | 17 | function dismissAlert() { 18 | alertNode.parentElement.removeChild(alertNode) 19 | loadProject() 20 | } 21 | 22 | function showAlert(html) { 23 | 24 | alertNode = document.createElement("div") 25 | 26 | alertNode.classList.add("framerAlertBackground") 27 | alertNode.innerHTML = html 28 | 29 | document.addEventListener("DOMContentLoaded", function(event) { 30 | document.body.appendChild(alertNode) 31 | }) 32 | 33 | window.dismissAlert = dismissAlert; 34 | } 35 | 36 | function showBrowserAlert() { 37 | var html = "" 38 | html += "
" 39 | html += "Error: Not A WebKit Browser" 40 | html += "Your browser is not supported.
Please use Safari or Chrome.
" 41 | html += "Try anyway" 42 | html += "
" 43 | 44 | showAlert(html) 45 | } 46 | 47 | function showFileLoadingAlert() { 48 | var html = "" 49 | html += "
" 50 | html += "Error: Local File Restrictions" 51 | html += "Preview this prototype with Framer Mirror or learn more about " 52 | html += "file restrictions.
" 53 | html += "Try anyway" 54 | html += "
" 55 | 56 | showAlert(html) 57 | } 58 | 59 | function showHomeScreenAlert() { 60 | 61 | link = document.createElement("link"); 62 | link.href = "framer/mirror.css" 63 | link.type = "text/css" 64 | link.rel = "stylesheet" 65 | link.media = "screen" 66 | 67 | document.addEventListener("DOMContentLoaded", function(event) { 68 | document.getElementsByTagName("head")[0].appendChild(link) 69 | }) 70 | 71 | var html = "" 72 | html += "
" 73 | html += "
" 74 | html += "

Install Prototype

" 75 | html += "

Tap

, then choose 'Add to Home Screen'

" 76 | html += "
" 77 | html += "
" 78 | 79 | showAlert(html) 80 | } 81 | 82 | function loadProject() { 83 | CoffeeScript.load("app.coffee") 84 | } 85 | 86 | function setDefaultPageTitle() { 87 | // If no title was set we set it to the project folder name so 88 | // you get a nice name on iOS if you bookmark to desktop. 89 | document.addEventListener("DOMContentLoaded", function() { 90 | if (document.title == "") { 91 | if (window.FramerStudioInfo && window.FramerStudioInfo.documentTitle) { 92 | document.title = window.FramerStudioInfo.documentTitle 93 | } else { 94 | document.title = window.location.pathname.replace(/\//g, "") 95 | } 96 | } 97 | }) 98 | } 99 | 100 | function init() { 101 | 102 | if (Utils.isFramerStudio()) { 103 | return 104 | } 105 | 106 | setDefaultPageTitle() 107 | 108 | if (!isCompatibleBrowser()) { 109 | return showBrowserAlert() 110 | } 111 | 112 | if (!isFileLoadingAllowed()) { 113 | return showFileLoadingAlert() 114 | } 115 | 116 | // if (Utils.isMobile() && !isHomeScreened()) { 117 | // return showHomeScreenAlert() 118 | // } 119 | 120 | loadProject() 121 | 122 | } 123 | 124 | init() 125 | 126 | })() 127 | -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/framer.modules.js: -------------------------------------------------------------------------------- 1 | // This file will contain generated modules from the project/modules directory -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/images/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/framer/images/background.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/images/cursor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/framer/images/cursor.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/images/cursor@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/framer/images/cursor@2x.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/images/icon-120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/framer/images/icon-120.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/images/icon-152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/framer/images/icon-152.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/images/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/framer/images/icon-76.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/images/icon-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/framer/images/icon-arrow.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/images/icon-arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/framer/images/icon-arrow@2x.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/images/icon-close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/framer/images/icon-close.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/images/icon-close@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/framer/images/icon-close@2x.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/images/icon-framer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/framer/images/icon-framer.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/images/icon-framer@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/framer/images/icon-framer@2x.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/images/icon-share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/framer/images/icon-share.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/images/icon-share@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/framer/images/icon-share@2x.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/mirror.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | border: none; 5 | -webkit-user-select: none; 6 | -webkit-tap-highlight-color: rgba(0,0,0,0); 7 | } 8 | html, body, .wrapper { 9 | height: 100%; 10 | } 11 | body { 12 | background: #fff; 13 | font: 300 20px "Helvetica Neue", Helvetica, sans-serif; 14 | overflow: hidden; 15 | cursor: url('images/cursor.png') 39 39, auto; 16 | text-align: center; 17 | position: relative; 18 | -webkit-font-smoothing: antialiased; 19 | text-rendering: optimizeLegibility; 20 | color: #333740; 21 | } 22 | a { 23 | color: gray; 24 | } 25 | .framerAlert { 26 | font: 12px/1.6em Menlo; 27 | margin: 10px; 28 | color: gray; 29 | } 30 | ::-webkit-scrollbar { 31 | display: none; 32 | } 33 | .wrapper { 34 | width:100%; 35 | max-width: 240px; 36 | margin: 0 auto; 37 | padding-top: 38%; 38 | position: relative; 39 | } 40 | /* Text */ 41 | h1 { 42 | font-size: 22px; 43 | font-weight: 400; 44 | margin-top: 0px; 45 | line-height: 1.5; 46 | color: black; 47 | 48 | margin-bottom: 8px; 49 | margin-top: 16px; 50 | } 51 | h2 { 52 | font-size: 14px; 53 | font-weight: 400; 54 | color: #788594; 55 | } 56 | hr { 57 | border: none; width: 100%; 58 | border-bottom: 1px solid #EFF1F3; 59 | display: block; 60 | margin: 40px auto 32px auto; 61 | } 62 | p { 63 | display: inline-block; 64 | line-height: 1.5; 65 | } 66 | figure { 67 | display: inline-block; 68 | } 69 | .share { 70 | color: #007AFF; 71 | display: inline-block; 72 | margin-left: 8px; 73 | } 74 | .icon-share { 75 | margin-right: 0px; 76 | position: relative; 77 | top:0.5px; 78 | } 79 | .arrow { 80 | position: absolute; 81 | max-width: 240px; 82 | width: 100%; 83 | left:50%; margin-left:-120px; 84 | bottom: 24%; 85 | } 86 | .arrow figure { 87 | -webkit-animation: bounce 1.25s ease infinite; 88 | -moz-animation: bounce 1.25s ease infinite; 89 | -o-animation: bounce 1.25s ease infinite; 90 | animation: bounce 1.25s ease infinite; 91 | -webkit-transform-origin: center bottom; 92 | -ms-transform-origin: center bottom; 93 | transform-origin: center bottom; 94 | } 95 | /* Arrow animation */ 96 | @-webkit-keyframes bounce { 97 | 0%, 100% { 98 | -webkit-transform: translate3d(0,0,0); 99 | transform: translate3d(0,0,0); 100 | } 101 | 50% { 102 | -webkit-transform: translate3d(0, -16px, 0); 103 | transform: translate3d(0, -16px, 0); 104 | } 105 | } 106 | @keyframes bounce { 107 | 0%, 100% { 108 | -webkit-transform: translate3d(0,0,0); 109 | transform: translate3d(0,0,0); 110 | } 111 | 50% { 112 | -webkit-transform: translate3d(0, -16px, 0); 113 | transform: translate3d(0, -16px, 0); 114 | } 115 | } 116 | /* Icons */ 117 | .icon-close, 118 | .icon-framer, 119 | .icon-share, 120 | .icon-arrow { 121 | background-size: cover; 122 | } 123 | .icon-close { 124 | background-image: url("images/icon-close.png"); 125 | position: absolute; 126 | top:16px; 127 | right:16px; 128 | cursor: pointer; 129 | cursor: hand; 130 | width: 18px; 131 | height: 18px; 132 | } 133 | .icon-framer { 134 | background-image: url("images/icon-framer.png"); 135 | width: 60px; 136 | height: 60px; 137 | } 138 | .icon-share { 139 | background-image: url("images/icon-share.png"); 140 | width: 11px; 141 | height: 18px; 142 | } 143 | .icon-arrow { 144 | background-image: url("images/icon-arrow.png"); 145 | width: 18px; 146 | height: 30px; 147 | } 148 | /* Retina Icons */ 149 | @media screen and (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) { 150 | .icon-close { 151 | background-image: url("images/icon-close@2x.png"); 152 | } 153 | .icon-framer { 154 | background-image: url("images/icon-framer@2x.png"); 155 | } 156 | .icon-share { 157 | background-image: url("images/icon-share@2x.png"); 158 | } 159 | .icon-arrow { 160 | background-image: url("images/icon-arrow@2x.png"); 161 | } 162 | } 163 | /* Avoid overflow scrolling when viewing in Portrait */ 164 | @media screen and (orientation:portrait) { 165 | html, body, .wrapper { 166 | overflow: hidden; 167 | } 168 | } 169 | /* iPad share icon is positioned in the navigation bar */ 170 | @media screen and (min-width: 576px){ 171 | .arrow { 172 | display: none; 173 | } 174 | .wrapper { 175 | padding-bottom: 25%; 176 | } 177 | } 178 | /* When it landscape, hide arrow and adjust spacing */ 179 | @media screen and (orientation:landscape) { 180 | .arrow { 181 | display: none; 182 | } 183 | .wrapper { 184 | padding-top: 10%; 185 | padding-bottom: 0; 186 | } 187 | } 188 | /* iPhone 6 Portrait */ 189 | @media screen and (min-device-width:375px) and (max-device-width:667px) and (-webkit-min-device-pixel-ratio:2) and (orientation:portrait) { 190 | .wrapper { 191 | padding-top: 48%; 192 | } 193 | .arrow { 194 | bottom: 27%; 195 | } 196 | } -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/style.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | border: none; 5 | -webkit-user-select: none; 6 | -webkit-tap-highlight-color: rgba(0,0,0,0); 7 | } 8 | 9 | body { 10 | background-color: #fff; 11 | font: 28px/1em "Helvetica"; 12 | color: #FFF; 13 | overflow: hidden; 14 | cursor: url('images/cursor.png') 39 39, auto; 15 | } 16 | 17 | a { 18 | color: gray; 19 | } 20 | 21 | .framerAlertBackground { 22 | position: absolute; top:0px; left:0px; right:0px; bottom:0px; 23 | z-index: 1000; 24 | background-color: #fff; 25 | } 26 | 27 | .framerAlert { 28 | font:400 14px/1.4 "Helvetica Neue", Helvetica, Arial, sans-serif; 29 | -webkit-font-smoothing:antialiased; 30 | color:#616367; text-align:center; 31 | position: absolute; top:40%; left:50%; width:260px; margin-left:-130px; 32 | } 33 | .framerAlert strong { font-weight:500; color:#000; margin-bottom:8px; display:block; } 34 | .framerAlert a { color:#28AFFA; } 35 | .framerAlert .btn { 36 | font-weight:500; text-decoration:none; line-height:1; 37 | display:inline-block; padding:6px 12px 7px 12px; 38 | border-radius:3px; margin-top:12px; 39 | background:#28AFFA; color:#fff; 40 | } 41 | 42 | ::-webkit-scrollbar { 43 | display: none; 44 | } -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/framer/version: -------------------------------------------------------------------------------- 1 | 1 -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/images/example4_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/images/example4_bg.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/images/example4_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/images/example4_icon.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/images/framer-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/images/framer-icon.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/imported/bg/framerps.log: -------------------------------------------------------------------------------- 1 | Could not read previous export (for caching), doing full export. 2 | bg: Exporting image 3 | 1 views changed 4 | Success: /var/folders/l9/607s07lj58n6w3kn9zdhr87r0000gn/T/C471B79F-130A-40D9-BD61-A904F0D6E58F-71997-0001D8BDF6023F5E/Untitled.framer/imported/bg 5 | -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/imported/bg/images/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/imported/bg/images/bg.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/imported/bg/layers.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 1205, 4 | "name": "bg", 5 | "layerFrame": { 6 | "x": 0, 7 | "y": 0, 8 | "width": 312, 9 | "height": 366 10 | }, 11 | "maskFrame": null, 12 | "image": { 13 | "path": "images/bg.png", 14 | "frame": { 15 | "x": 0, 16 | "y": 0, 17 | "width": 312, 18 | "height": 366 19 | } 20 | }, 21 | "imageType": "png", 22 | "children": [ 23 | 24 | ], 25 | "modification": "859061246" 26 | } 27 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/imported/bg/layers.json.js: -------------------------------------------------------------------------------- 1 | window.__imported__ = window.__imported__ || {}; 2 | window.__imported__["bg/layers.json.js"] = [ 3 | { 4 | "id": 1205, 5 | "name": "bg", 6 | "layerFrame": { 7 | "x": 0, 8 | "y": 0, 9 | "width": 312, 10 | "height": 366 11 | }, 12 | "maskFrame": null, 13 | "image": { 14 | "path": "images/bg.png", 15 | "frame": { 16 | "x": 0, 17 | "y": 0, 18 | "width": 312, 19 | "height": 366 20 | } 21 | }, 22 | "imageType": "png", 23 | "children": [ 24 | 25 | ], 26 | "modification": "859061246" 27 | } 28 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/imported/example4_watch/images/button-A20C5081-0F6C-42FD-9F86-9D9AC72FE6B5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/imported/example4_watch/images/button-A20C5081-0F6C-42FD-9F86-9D9AC72FE6B5.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/imported/example4_watch/images/content-E4135DDC-AD25-4EA6-93E8-F1B8774F93AD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/imported/example4_watch/images/content-E4135DDC-AD25-4EA6-93E8-F1B8774F93AD.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/imported/example4_watch/layers.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "maskFrame" : null, 4 | "id" : "86130C6F-1365-4F69-B62D-95D94D9B0477", 5 | "visible" : true, 6 | "children" : [ 7 | { 8 | "maskFrame" : null, 9 | "id" : "A20C5081-0F6C-42FD-9F86-9D9AC72FE6B5", 10 | "visible" : true, 11 | "children" : [ 12 | 13 | ], 14 | "image" : { 15 | "path" : "images\/button-A20C5081-0F6C-42FD-9F86-9D9AC72FE6B5.png", 16 | "frame" : { 17 | "y" : 224, 18 | "x" : 0, 19 | "width" : 312, 20 | "height" : 68 21 | } 22 | }, 23 | "imageType" : "png", 24 | "layerFrame" : { 25 | "y" : 224, 26 | "x" : 0, 27 | "width" : 312, 28 | "height" : 68 29 | }, 30 | "name" : "button" 31 | }, 32 | { 33 | "maskFrame" : null, 34 | "id" : "E4135DDC-AD25-4EA6-93E8-F1B8774F93AD", 35 | "visible" : true, 36 | "children" : [ 37 | 38 | ], 39 | "image" : { 40 | "path" : "images\/content-E4135DDC-AD25-4EA6-93E8-F1B8774F93AD.png", 41 | "frame" : { 42 | "y" : 0, 43 | "x" : 0, 44 | "width" : 312, 45 | "height" : 206 46 | } 47 | }, 48 | "imageType" : "png", 49 | "layerFrame" : { 50 | "y" : 0, 51 | "x" : 0, 52 | "width" : 312, 53 | "height" : 206 54 | }, 55 | "name" : "content" 56 | } 57 | ], 58 | "image" : { 59 | "path" : "images\/notification-86130C6F-1365-4F69-B62D-95D94D9B0477.png", 60 | "frame" : { 61 | "y" : 0, 62 | "x" : 0, 63 | "width" : 312, 64 | "height" : 292 65 | } 66 | }, 67 | "imageType" : "png", 68 | "layerFrame" : { 69 | "y" : 0, 70 | "x" : 0, 71 | "width" : 312, 72 | "height" : 292 73 | }, 74 | "name" : "notification" 75 | } 76 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/imported/example4_watch/layers.json.js: -------------------------------------------------------------------------------- 1 | window.__imported__ = window.__imported__ || {}; 2 | window.__imported__["example4_watch/layers.json.js"] = [ 3 | { 4 | "maskFrame" : null, 5 | "id" : "86130C6F-1365-4F69-B62D-95D94D9B0477", 6 | "visible" : true, 7 | "children" : [ 8 | { 9 | "maskFrame" : null, 10 | "id" : "A20C5081-0F6C-42FD-9F86-9D9AC72FE6B5", 11 | "visible" : true, 12 | "children" : [ 13 | 14 | ], 15 | "image" : { 16 | "path" : "images\/button-A20C5081-0F6C-42FD-9F86-9D9AC72FE6B5.png", 17 | "frame" : { 18 | "y" : 224, 19 | "x" : 0, 20 | "width" : 312, 21 | "height" : 68 22 | } 23 | }, 24 | "imageType" : "png", 25 | "layerFrame" : { 26 | "y" : 224, 27 | "x" : 0, 28 | "width" : 312, 29 | "height" : 68 30 | }, 31 | "name" : "button" 32 | }, 33 | { 34 | "maskFrame" : null, 35 | "id" : "E4135DDC-AD25-4EA6-93E8-F1B8774F93AD", 36 | "visible" : true, 37 | "children" : [ 38 | 39 | ], 40 | "image" : { 41 | "path" : "images\/content-E4135DDC-AD25-4EA6-93E8-F1B8774F93AD.png", 42 | "frame" : { 43 | "y" : 0, 44 | "x" : 0, 45 | "width" : 312, 46 | "height" : 206 47 | } 48 | }, 49 | "imageType" : "png", 50 | "layerFrame" : { 51 | "y" : 0, 52 | "x" : 0, 53 | "width" : 312, 54 | "height" : 206 55 | }, 56 | "name" : "content" 57 | } 58 | ], 59 | "image" : { 60 | "path" : "images\/notification-86130C6F-1365-4F69-B62D-95D94D9B0477.png", 61 | "frame" : { 62 | "y" : 0, 63 | "x" : 0, 64 | "width" : 312, 65 | "height" : 292 66 | } 67 | }, 68 | "imageType" : "png", 69 | "layerFrame" : { 70 | "y" : 0, 71 | "x" : 0, 72 | "width" : 312, 73 | "height" : 292 74 | }, 75 | "name" : "notification" 76 | } 77 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/imported/icon/framerps.log: -------------------------------------------------------------------------------- 1 | Could not read previous export (for caching), doing full export. 2 | icon: Exporting image 3 | 1 views changed 4 | Success: /var/folders/l9/607s07lj58n6w3kn9zdhr87r0000gn/T/C471B79F-130A-40D9-BD61-A904F0D6E58F-71997-0001D8BDF6023F5E/Untitled.framer/imported/icon 5 | -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/imported/icon/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/imported/icon/images/icon.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/imported/icon/layers.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 6, 4 | "name": "icon", 5 | "layerFrame": { 6 | "x": 0, 7 | "y": 0, 8 | "width": 196, 9 | "height": 196 10 | }, 11 | "maskFrame": null, 12 | "image": { 13 | "path": "images/icon.png", 14 | "frame": { 15 | "x": 0, 16 | "y": 0, 17 | "width": 196, 18 | "height": 196 19 | } 20 | }, 21 | "imageType": "png", 22 | "children": [ 23 | 24 | ], 25 | "modification": "525900364" 26 | } 27 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/imported/icon/layers.json.js: -------------------------------------------------------------------------------- 1 | window.__imported__ = window.__imported__ || {}; 2 | window.__imported__["icon/layers.json.js"] = [ 3 | { 4 | "id": 6, 5 | "name": "icon", 6 | "layerFrame": { 7 | "x": 0, 8 | "y": 0, 9 | "width": 196, 10 | "height": 196 11 | }, 12 | "maskFrame": null, 13 | "image": { 14 | "path": "images/icon.png", 15 | "frame": { 16 | "x": 0, 17 | "y": 0, 18 | "width": 196, 19 | "height": 196 20 | } 21 | }, 22 | "imageType": "png", 23 | "children": [ 24 | 25 | ], 26 | "modification": "525900364" 27 | } 28 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/imported/watchapp/framerps.log: -------------------------------------------------------------------------------- 1 | Could not read previous export (for caching), doing full export. 2 | Renaming content -> content-3 3 | head: Exporting image 4 | content: Exporting image 5 | content-2: Exporting image 6 | 8 views changed 7 | Success: /Users/tessathornton/Code/watch2.framer/imported/watchapp 8 | -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/imported/watchapp/images/content-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/imported/watchapp/images/content-2.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/imported/watchapp/images/content.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/imported/watchapp/images/content.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/imported/watchapp/images/head.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/framer/watch.framer/imported/watchapp/images/head.png -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/imported/watchapp/layers.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 31, 4 | "name": "notification", 5 | "layerFrame": { 6 | "x": 0, 7 | "y": 0, 8 | "width": 313, 9 | "height": 292 10 | }, 11 | "maskFrame": null, 12 | "image": null, 13 | "imageType": null, 14 | "children": [ 15 | { 16 | "id": 24, 17 | "name": "content", 18 | "layerFrame": { 19 | "x": 0, 20 | "y": 0, 21 | "width": 313, 22 | "height": 292 23 | }, 24 | "maskFrame": null, 25 | "image": null, 26 | "imageType": null, 27 | "children": [ 28 | { 29 | "id": 25, 30 | "name": "screen", 31 | "layerFrame": { 32 | "x": 0, 33 | "y": 0, 34 | "width": 313, 35 | "height": 292 36 | }, 37 | "maskFrame": null, 38 | "image": null, 39 | "imageType": null, 40 | "children": [ 41 | { 42 | "id": 15, 43 | "name": "head", 44 | "layerFrame": { 45 | "x": 0, 46 | "y": 0, 47 | "width": 313, 48 | "height": 292 49 | }, 50 | "maskFrame": null, 51 | "image": { 52 | "path": "images/head.png", 53 | "frame": { 54 | "x": 1, 55 | "y": 0, 56 | "width": 312, 57 | "height": 62 58 | } 59 | }, 60 | "imageType": "png", 61 | "children": [ 62 | 63 | ], 64 | "modification": "874705090" 65 | }, 66 | { 67 | "id": 11, 68 | "name": "content", 69 | "layerFrame": { 70 | "x": 0, 71 | "y": 0, 72 | "width": 313, 73 | "height": 292 74 | }, 75 | "maskFrame": null, 76 | "image": { 77 | "path": "images/content.png", 78 | "frame": { 79 | "x": 1, 80 | "y": 0, 81 | "width": 312, 82 | "height": 207 83 | } 84 | }, 85 | "imageType": "png", 86 | "children": [ 87 | 88 | ], 89 | "modification": "1700663144" 90 | } 91 | ], 92 | "modification": "674658564" 93 | } 94 | ], 95 | "modification": "228351138" 96 | }, 97 | { 98 | "id": 49, 99 | "name": "button", 100 | "layerFrame": { 101 | "x": 0, 102 | "y": 0, 103 | "width": 313, 104 | "height": 292 105 | }, 106 | "maskFrame": null, 107 | "image": null, 108 | "imageType": null, 109 | "children": [ 110 | { 111 | "id": 48, 112 | "name": "screen-2", 113 | "layerFrame": { 114 | "x": 0, 115 | "y": 0, 116 | "width": 313, 117 | "height": 292 118 | }, 119 | "maskFrame": null, 120 | "image": null, 121 | "imageType": null, 122 | "children": [ 123 | { 124 | "id": 43, 125 | "name": "content-2", 126 | "layerFrame": { 127 | "x": 0, 128 | "y": 0, 129 | "width": 313, 130 | "height": 292 131 | }, 132 | "maskFrame": null, 133 | "image": { 134 | "path": "images/content-2.png", 135 | "frame": { 136 | "x": 1, 137 | "y": 222, 138 | "width": 312, 139 | "height": 70 140 | } 141 | }, 142 | "imageType": "png", 143 | "children": [ 144 | 145 | ], 146 | "modification": "1544674745" 147 | } 148 | ], 149 | "modification": "319815240" 150 | } 151 | ], 152 | "modification": "487146435" 153 | } 154 | ], 155 | "modification": "653315505" 156 | } 157 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/imported/watchapp/layers.json.js: -------------------------------------------------------------------------------- 1 | window.__imported__ = window.__imported__ || {}; 2 | window.__imported__["watchapp/layers.json.js"] = [ 3 | { 4 | "id": 31, 5 | "name": "notification", 6 | "layerFrame": { 7 | "x": 0, 8 | "y": 0, 9 | "width": 313, 10 | "height": 292 11 | }, 12 | "maskFrame": null, 13 | "image": null, 14 | "imageType": null, 15 | "children": [ 16 | { 17 | "id": 24, 18 | "name": "content", 19 | "layerFrame": { 20 | "x": 0, 21 | "y": 0, 22 | "width": 313, 23 | "height": 292 24 | }, 25 | "maskFrame": null, 26 | "image": null, 27 | "imageType": null, 28 | "children": [ 29 | { 30 | "id": 25, 31 | "name": "screen", 32 | "layerFrame": { 33 | "x": 0, 34 | "y": 0, 35 | "width": 313, 36 | "height": 292 37 | }, 38 | "maskFrame": null, 39 | "image": null, 40 | "imageType": null, 41 | "children": [ 42 | { 43 | "id": 15, 44 | "name": "head", 45 | "layerFrame": { 46 | "x": 0, 47 | "y": 0, 48 | "width": 313, 49 | "height": 292 50 | }, 51 | "maskFrame": null, 52 | "image": { 53 | "path": "images/head.png", 54 | "frame": { 55 | "x": 1, 56 | "y": 0, 57 | "width": 312, 58 | "height": 62 59 | } 60 | }, 61 | "imageType": "png", 62 | "children": [ 63 | 64 | ], 65 | "modification": "874705090" 66 | }, 67 | { 68 | "id": 11, 69 | "name": "content", 70 | "layerFrame": { 71 | "x": 0, 72 | "y": 0, 73 | "width": 313, 74 | "height": 292 75 | }, 76 | "maskFrame": null, 77 | "image": { 78 | "path": "images/content.png", 79 | "frame": { 80 | "x": 1, 81 | "y": 0, 82 | "width": 312, 83 | "height": 207 84 | } 85 | }, 86 | "imageType": "png", 87 | "children": [ 88 | 89 | ], 90 | "modification": "1700663144" 91 | } 92 | ], 93 | "modification": "674658564" 94 | } 95 | ], 96 | "modification": "228351138" 97 | }, 98 | { 99 | "id": 49, 100 | "name": "button", 101 | "layerFrame": { 102 | "x": 0, 103 | "y": 0, 104 | "width": 313, 105 | "height": 292 106 | }, 107 | "maskFrame": null, 108 | "image": null, 109 | "imageType": null, 110 | "children": [ 111 | { 112 | "id": 48, 113 | "name": "screen-2", 114 | "layerFrame": { 115 | "x": 0, 116 | "y": 0, 117 | "width": 313, 118 | "height": 292 119 | }, 120 | "maskFrame": null, 121 | "image": null, 122 | "imageType": null, 123 | "children": [ 124 | { 125 | "id": 43, 126 | "name": "content-2", 127 | "layerFrame": { 128 | "x": 0, 129 | "y": 0, 130 | "width": 313, 131 | "height": 292 132 | }, 133 | "maskFrame": null, 134 | "image": { 135 | "path": "images/content-2.png", 136 | "frame": { 137 | "x": 1, 138 | "y": 222, 139 | "width": 312, 140 | "height": 70 141 | } 142 | }, 143 | "imageType": "png", 144 | "children": [ 145 | 146 | ], 147 | "modification": "1544674745" 148 | } 149 | ], 150 | "modification": "319815240" 151 | } 152 | ], 153 | "modification": "487146435" 154 | } 155 | ], 156 | "modification": "653315505" 157 | } 158 | ] -------------------------------------------------------------------------------- /pkg/assets/framer/watch.framer/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /pkg/assets/pngs/example4_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/pngs/example4_bg.png -------------------------------------------------------------------------------- /pkg/assets/pngs/example4_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/pngs/example4_icon.png -------------------------------------------------------------------------------- /pkg/assets/psds/example1_popup.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/psds/example1_popup.psd -------------------------------------------------------------------------------- /pkg/assets/psds/example2_dropdown.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/psds/example2_dropdown.psd -------------------------------------------------------------------------------- /pkg/assets/psds/example3_swipe.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/psds/example3_swipe.psd -------------------------------------------------------------------------------- /pkg/assets/psds/example4_icon.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/psds/example4_icon.psd -------------------------------------------------------------------------------- /pkg/assets/psds/example4_watch.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/psds/example4_watch.psd -------------------------------------------------------------------------------- /pkg/assets/sketch/example1_popup.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/sketch/example1_popup.sketch -------------------------------------------------------------------------------- /pkg/assets/sketch/example2_dropdown.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/sketch/example2_dropdown.sketch -------------------------------------------------------------------------------- /pkg/assets/sketch/example3_swipe.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/sketch/example3_swipe.sketch -------------------------------------------------------------------------------- /pkg/assets/sketch/example4_watch.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/assets/sketch/example4_watch.sketch -------------------------------------------------------------------------------- /pkg/book.epub: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/book.epub -------------------------------------------------------------------------------- /pkg/book.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/pkg/book.pdf -------------------------------------------------------------------------------- /src/cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/src/cover.jpg -------------------------------------------------------------------------------- /src/cover.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/src/cover.pdf -------------------------------------------------------------------------------- /src/cover.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tessalt/coffeescriptbook/7a3a0b09c933194d3716e02e47d97b2ad62a2f30/src/cover.psd -------------------------------------------------------------------------------- /src/layout.latex: -------------------------------------------------------------------------------- 1 | \documentclass[12pt]{$documentclass$} 2 | \usepackage{mathpazo} 3 | \usepackage{setspace} 4 | \setstretch{1.2} 5 | \usepackage{amssymb,amsmath} 6 | \usepackage{ifxetex,ifluatex} 7 | \usepackage{fixltx2e} % provides \textsubscript 8 | 9 | \usepackage{pdfpages} 10 | 11 | \usepackage{listings} 12 | \usepackage{color} 13 | 14 | \definecolor{codegray}{rgb}{.95,.95,.95} 15 | 16 | \lstdefinestyle{mystyle}{ 17 | backgroundcolor=\color{codegray}, 18 | basicstyle=\small\ttfamily, 19 | breakatwhitespace=false, 20 | breaklines=true, 21 | captionpos=b, 22 | keepspaces=true, 23 | tabsize=2 24 | } 25 | 26 | \lstset{style=mystyle} 27 | \usepackage{fancyhdr} 28 | \pagestyle{fancy} 29 | \usepackage{titlesec} 30 | \usepackage[scaled=.90]{helvet} 31 | 32 | 33 | \titleformat*{\section}{\LARGE\bfseries\sffamily} 34 | \titleformat*{\subsection}{\fontsize{15}{15}\bfseries\sffamily} 35 | \titleformat*{\subsubsection}{\normalsize\bfseries\sffamily} 36 | \titleformat*{\paragraph}{\large\bfseries\sffamily} 37 | \titleformat*{\subparagraph}{\large\bfseries\sffamily} 38 | 39 | 40 | \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex 41 | \usepackage[T1]{fontenc} 42 | \usepackage[utf8]{inputenc} 43 | $if(euro)$ 44 | \usepackage{eurosym} 45 | $endif$ 46 | \else % if luatex or xelatex 47 | \ifxetex 48 | \usepackage{mathspec} 49 | \usepackage{xltxtra,xunicode} 50 | \else 51 | \usepackage{fontspec} 52 | \fi 53 | \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase} 54 | \newcommand{\euro}{€} 55 | $if(mainfont)$ 56 | \setmainfont{$mainfont$} 57 | $endif$ 58 | $if(sansfont)$ 59 | \setsansfont{$sansfont$} 60 | $endif$ 61 | $if(monofont)$ 62 | \setmonofont[Mapping=tex-ansi]{$monofont$} 63 | $endif$ 64 | $if(mathfont)$ 65 | \setmathfont(Digits,Latin,Greek){$mathfont$} 66 | $endif$ 67 | \fi 68 | % use upquote if available, for straight quotes in verbatim environments 69 | \IfFileExists{upquote.sty}{\usepackage{upquote}}{} 70 | % use microtype if available 71 | \IfFileExists{microtype.sty}{% 72 | \usepackage{microtype} 73 | \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts 74 | }{} 75 | \usepackage[margin=1.5in]{geometry} 76 | $if(lang)$ 77 | \ifxetex 78 | \usepackage{polyglossia} 79 | \setmainlanguage{$mainlang$} 80 | \else 81 | \usepackage[shorthands=off,$lang$]{babel} 82 | \fi 83 | $endif$ 84 | $if(natbib)$ 85 | \usepackage{natbib} 86 | \bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} 87 | $endif$ 88 | $if(biblatex)$ 89 | \usepackage{biblatex} 90 | $if(biblio-files)$ 91 | \bibliography{$biblio-files$} 92 | $endif$ 93 | $endif$ 94 | \usepackage{inconsolata} 95 | 96 | $if(highlighting-macros)$ 97 | $highlighting-macros$ 98 | $endif$ 99 | $if(verbatim-in-note)$ 100 | \usepackage{fancyvrb} 101 | \VerbatimFootnotes 102 | $endif$ 103 | $if(tables)$ 104 | \usepackage{longtable,booktabs} 105 | $endif$ 106 | $if(graphics)$ 107 | \usepackage{graphicx} 108 | \makeatletter 109 | \def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} 110 | \def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} 111 | \makeatother 112 | % Scale images if necessary, so that they will not overflow the page 113 | % margins by default, and it is still possible to overwrite the defaults 114 | % using explicit options in \includegraphics[width, height, ...]{} 115 | \setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} 116 | $endif$ 117 | \ifxetex 118 | \usepackage[setpagesize=false, % page size defined by xetex 119 | unicode=false, % unicode breaks when used with xetex 120 | xetex]{hyperref} 121 | \else 122 | \usepackage[unicode=true]{hyperref} 123 | \fi 124 | \hypersetup{breaklinks=true, 125 | bookmarks=true, 126 | pdfauthor={$author-meta$}, 127 | pdftitle={$title-meta$}, 128 | colorlinks=true, 129 | citecolor=$if(citecolor)$$citecolor$$else$blue$endif$, 130 | urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$, 131 | linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$, 132 | pdfborder={0 0 0}} 133 | \urlstyle{same} % don't use monospace font for urls 134 | $if(links-as-notes)$ 135 | % Make links footnotes instead of hotlinks: 136 | \renewcommand{\href}[2]{#2\footnote{\url{#1}}} 137 | $endif$ 138 | $if(strikeout)$ 139 | \usepackage[normalem]{ulem} 140 | % avoid problems with \sout in headers with hyperref: 141 | \pdfstringdefDisableCommands{\renewcommand{\sout}{}} 142 | $endif$ 143 | \setlength{\parindent}{0pt} 144 | \setlength{\parskip}{6pt plus 2pt minus 1pt} 145 | \setlength{\emergencystretch}{3em} % prevent overfull lines 146 | $if(numbersections)$ 147 | \setcounter{secnumdepth}{5} 148 | $else$ 149 | \setcounter{secnumdepth}{0} 150 | $endif$ 151 | $if(verbatim-in-note)$ 152 | \VerbatimFootnotes % allows verbatim text in footnotes 153 | $endif$ 154 | 155 | $if(title)$ 156 | \title{$title$$if(subtitle)$\\\vspace{0.5em}{\large $subtitle$}$endif$} 157 | $endif$ 158 | $if(author)$ 159 | \author{$for(author)$$author$$sep$ \and $endfor$} 160 | $endif$ 161 | \date{$date$} 162 | $for(header-includes)$ 163 | $header-includes$ 164 | $endfor$ 165 | 166 | \begin{document} 167 | 168 | $if(title)$ 169 | \maketitle 170 | $endif$ 171 | $if(abstract)$ 172 | \begin{abstract} 173 | $abstract$ 174 | \end{abstract} 175 | $endif$ 176 | 177 | $for(include-before)$ 178 | $include-before$ 179 | 180 | $endfor$ 181 | $if(toc)$ 182 | { 183 | \hypersetup{linkcolor=black} 184 | \setcounter{tocdepth}{$toc-depth$} 185 | \tableofcontents 186 | } 187 | $endif$ 188 | $if(lot)$ 189 | \listoftables 190 | $endif$ 191 | $if(lof)$ 192 | \listoffigures 193 | $endif$ 194 | $body$ 195 | 196 | $if(natbib)$ 197 | $if(biblio-files)$ 198 | $if(biblio-title)$ 199 | $if(book-class)$ 200 | \renewcommand\bibname{$biblio-title$} 201 | $else$ 202 | \renewcommand\refname{$biblio-title$} 203 | $endif$ 204 | $endif$ 205 | \bibliography{$biblio-files$} 206 | 207 | $endif$ 208 | $endif$ 209 | $if(biblatex)$ 210 | \printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ 211 | 212 | $endif$ 213 | $for(include-after)$ 214 | $include-after$ 215 | 216 | $endfor$ 217 | \end{document} --------------------------------------------------------------------------------