├── snapchap ├── AwsConfig.json ├── Procfile ├── .bowerrc ├── www │ ├── app │ │ ├── components │ │ │ ├── signUp │ │ │ │ ├── signUp-name │ │ │ │ │ ├── signUp-name.css │ │ │ │ │ ├── signUp-name.html │ │ │ │ │ └── signUp-nameCtrl.js │ │ │ │ ├── signUp-email │ │ │ │ │ ├── signUp-email.css │ │ │ │ │ ├── signUp-email.html │ │ │ │ │ └── signUp-emailCtrl.js │ │ │ │ ├── signUp-password │ │ │ │ │ ├── signUp-password.css │ │ │ │ │ ├── signUp-passwordCtrl.js │ │ │ │ │ └── signUp-password.html │ │ │ │ ├── signUp-username │ │ │ │ │ ├── signUp-username.css │ │ │ │ │ ├── signUp-usernameCtrl.js │ │ │ │ │ └── signUp-username.html │ │ │ │ ├── signUpCtrl.js │ │ │ │ ├── signUp.html │ │ │ │ └── signUp.css │ │ │ ├── birthday │ │ │ │ ├── birthdayCtrl.js │ │ │ │ ├── birthday.html │ │ │ │ └── birthday.css │ │ │ ├── watchMessages │ │ │ │ ├── watchMessages.html │ │ │ │ └── watchMessagesCtrl.js │ │ │ ├── nav │ │ │ │ ├── navCtrl.js │ │ │ │ ├── nav.html │ │ │ │ └── nav.css │ │ │ ├── logInSignUp │ │ │ │ ├── logInSignUpCtrl.js │ │ │ │ ├── logInSignUp.html │ │ │ │ └── logInSignUp.css │ │ │ ├── addFriends │ │ │ │ ├── addFriendsCtrl.js │ │ │ │ ├── addFriends.html │ │ │ │ └── addFriends.css │ │ │ ├── myFriends │ │ │ │ ├── myFriendsCtrl.js │ │ │ │ ├── myFriends.html │ │ │ │ └── myFriends.css │ │ │ ├── settings │ │ │ │ ├── settingsCtrl.js │ │ │ │ ├── settings.css │ │ │ │ └── settings.html │ │ │ ├── password │ │ │ │ ├── passwordCtrl.js │ │ │ │ ├── password.html │ │ │ │ └── password.css │ │ │ ├── email │ │ │ │ ├── email.html │ │ │ │ ├── emailCtrl.js │ │ │ │ └── email.css │ │ │ ├── profile │ │ │ │ ├── profileCtrl.js │ │ │ │ ├── profile.html │ │ │ │ └── profile.css │ │ │ ├── confirmPassword │ │ │ │ ├── confirmPassword.html │ │ │ │ ├── confirmPasswordCtrl.js │ │ │ │ └── confirmPassword.css │ │ │ ├── addedMe │ │ │ │ ├── addedMeCtrl.js │ │ │ │ ├── addedMe.html │ │ │ │ └── addedMe.css │ │ │ ├── name │ │ │ │ ├── name.html │ │ │ │ ├── nameCtrl.js │ │ │ │ └── name.css │ │ │ ├── addUsername │ │ │ │ ├── addUsernameCtrl.js │ │ │ │ ├── addUsername.html │ │ │ │ └── addUsername.css │ │ │ ├── camera │ │ │ │ ├── camera.css │ │ │ │ └── camera.html │ │ │ ├── logIn │ │ │ │ ├── logInCtrl.js │ │ │ │ ├── logIn.html │ │ │ │ └── logIn.css │ │ │ ├── newPassword │ │ │ │ ├── newPassword.html │ │ │ │ ├── newPasswordCtrl.js │ │ │ │ └── newPassword.css │ │ │ ├── chat │ │ │ │ ├── chatCtrl.js │ │ │ │ ├── chat.html │ │ │ │ └── chat.css │ │ │ └── sendTo │ │ │ │ ├── sendTo.html │ │ │ │ └── sendToCtrl.js │ │ ├── services │ │ │ └── tempService.js │ │ └── directives │ │ │ ├── animateChattyNav.js │ │ │ └── animateProfileNav.js │ ├── lib │ │ ├── angular │ │ │ ├── index.js │ │ │ ├── angular.min.js.gzip │ │ │ ├── bower.json │ │ │ ├── angular-csp.css │ │ │ ├── .bower.json │ │ │ ├── package.json │ │ │ └── README.md │ │ ├── angular-animate │ │ │ ├── index.js │ │ │ ├── bower.json │ │ │ ├── .bower.json │ │ │ ├── package.json │ │ │ └── README.md │ │ ├── angular-sanitize │ │ │ ├── index.js │ │ │ ├── bower.json │ │ │ ├── .bower.json │ │ │ ├── package.json │ │ │ └── README.md │ │ ├── ionic │ │ │ ├── fonts │ │ │ │ ├── ionicons.eot │ │ │ │ ├── ionicons.ttf │ │ │ │ └── ionicons.woff │ │ │ ├── version.json │ │ │ └── scss │ │ │ │ ├── _progress.scss │ │ │ │ ├── _backdrop.scss │ │ │ │ ├── ionicons │ │ │ │ ├── ionicons.scss │ │ │ │ └── _ionicons-font.scss │ │ │ │ ├── ionic.scss │ │ │ │ ├── _loading.scss │ │ │ │ ├── _radio.scss │ │ │ │ ├── _animations.scss │ │ │ │ ├── _slide-box.scss │ │ │ │ ├── _menu.scss │ │ │ │ ├── _badge.scss │ │ │ │ ├── _button-bar.scss │ │ │ │ ├── _platform.scss │ │ │ │ ├── _spinner.scss │ │ │ │ ├── _popup.scss │ │ │ │ ├── _modal.scss │ │ │ │ ├── _list.scss │ │ │ │ ├── _refresher.scss │ │ │ │ ├── _select.scss │ │ │ │ ├── _action-sheet.scss │ │ │ │ ├── _type.scss │ │ │ │ ├── _grid.scss │ │ │ │ └── _popover.scss │ │ ├── ngCordova │ │ │ ├── CHANGELOG.md │ │ │ ├── bower.json │ │ │ ├── LICENSE │ │ │ ├── package.json │ │ │ └── .bower.json │ │ └── angular-ui-router │ │ │ ├── bower.json │ │ │ ├── .bower.json │ │ │ ├── LICENSE │ │ │ └── src │ │ │ ├── stateFilters.js │ │ │ ├── viewScroll.js │ │ │ └── view.js │ ├── img │ │ ├── 9000.png │ │ ├── rr.jpg │ │ ├── icon │ │ │ ├── x.png │ │ │ ├── pen.png │ │ │ ├── save.png │ │ │ ├── undo.png │ │ │ ├── arrow.png │ │ │ ├── ghost.png │ │ │ ├── rewind.png │ │ │ ├── timer.png │ │ │ ├── chat-gray.png │ │ │ ├── dots-gray.png │ │ │ ├── ghost-big.png │ │ │ ├── wifi-gray.png │ │ │ ├── arrow-blue.png │ │ │ ├── chat-white.png │ │ │ ├── dots-white.png │ │ │ ├── flash-white.png │ │ │ ├── plus-white.png │ │ │ ├── search-gray.png │ │ │ ├── share-gray.png │ │ │ ├── share-white.png │ │ │ ├── snapchat-bw.gif │ │ │ ├── snapchat-bw.png │ │ │ ├── camera-white.png │ │ │ ├── circle-white.png │ │ │ ├── contacts-gray.png │ │ │ ├── search-white.png │ │ │ ├── settings-white.png │ │ │ ├── snapchat-gray.png │ │ │ ├── snapchat-white.png │ │ │ ├── trophy-white.png │ │ │ ├── white-gradient.png │ │ │ ├── circle-gray-big.png │ │ │ ├── circle-white-big.png │ │ │ ├── snapchap-signin.gif │ │ │ ├── rear-camera-white.png │ │ │ ├── snapchap-signin-big.gif │ │ │ ├── snapchat-box-gray.png │ │ │ ├── snapchap-signin-loop.gif │ │ │ └── snapchat-filled-white.png │ │ ├── invis1.png │ │ ├── snap1.png │ │ ├── 9000300.png │ │ ├── mustache200.png │ │ ├── snapchap230.png │ │ ├── snapchap240.png │ │ ├── snap-confetti.png │ │ ├── screenshot │ │ │ ├── chat1.png │ │ │ ├── chat2.png │ │ │ ├── snap1.png │ │ │ ├── snap2.png │ │ │ ├── snap3.png │ │ │ ├── snap4.png │ │ │ ├── snap5.png │ │ │ ├── doodle1.png │ │ │ ├── doodle2.png │ │ │ ├── login1.png │ │ │ ├── login2.png │ │ │ ├── sendto.png │ │ │ └── settings.png │ │ ├── snapchap-doodle.png │ │ ├── thanksgiving270.png │ │ ├── thanksgiving300.png │ │ ├── snapchap-doodle270.png │ │ └── snapchap-doodle300.png │ ├── service-worker.js │ └── manifest.json ├── db │ ├── delete_friendship.sql │ ├── delete_message.sql │ ├── update_last_name.sql │ ├── update_email.sql │ ├── update_first_name.sql │ ├── update_birthday.sql │ ├── compare_password.sql │ ├── update_name.sql │ ├── update_password.sql │ ├── get_user_info.sql │ ├── send_request.sql │ ├── accept_friendship.sql │ ├── upload_message.sql │ ├── create_user.sql │ ├── upload_picture_message.sql │ ├── get_message.sql │ ├── get_message_ids.sql │ ├── get_pending_friend_requests.sql │ ├── search_users.sql │ ├── get_user_friends.sql │ └── update_requests.sql ├── ionic.config.json ├── .io-config.json ├── resources │ ├── icon.png │ ├── splash.png │ ├── ios │ │ ├── icon │ │ │ ├── icon.png │ │ │ ├── icon-40.png │ │ │ ├── icon-50.png │ │ │ ├── icon-60.png │ │ │ ├── icon-72.png │ │ │ ├── icon-76.png │ │ │ ├── icon@2x.png │ │ │ ├── icon-40@2x.png │ │ │ ├── icon-50@2x.png │ │ │ ├── icon-60@2x.png │ │ │ ├── icon-60@3x.png │ │ │ ├── icon-72@2x.png │ │ │ ├── icon-76@2x.png │ │ │ ├── icon-small.png │ │ │ ├── icon-small@2x.png │ │ │ └── icon-small@3x.png │ │ └── splash │ │ │ ├── Default-667h.png │ │ │ ├── Default-736h.png │ │ │ ├── Default~iphone.png │ │ │ ├── Default@2x~iphone.png │ │ │ ├── Default-Portrait~ipad.png │ │ │ ├── Default-568h@2x~iphone.png │ │ │ ├── Default-Landscape-736h.png │ │ │ ├── Default-Landscape~ipad.png │ │ │ ├── Default-Landscape@2x~ipad.png │ │ │ └── Default-Portrait@2x~ipad.png │ └── android │ │ ├── icon │ │ ├── drawable-hdpi-icon.png │ │ ├── drawable-ldpi-icon.png │ │ ├── drawable-mdpi-icon.png │ │ ├── drawable-xhdpi-icon.png │ │ ├── drawable-xxhdpi-icon.png │ │ └── drawable-xxxhdpi-icon.png │ │ └── splash │ │ ├── drawable-land-hdpi-screen.png │ │ ├── drawable-land-ldpi-screen.png │ │ ├── drawable-land-mdpi-screen.png │ │ ├── drawable-land-xhdpi-screen.png │ │ ├── drawable-land-xxhdpi-screen.png │ │ ├── drawable-port-hdpi-screen.png │ │ ├── drawable-port-ldpi-screen.png │ │ ├── drawable-port-mdpi-screen.png │ │ ├── drawable-port-xhdpi-screen.png │ │ ├── drawable-port-xxhdpi-screen.png │ │ ├── drawable-land-xxxhdpi-screen.png │ │ └── drawable-port-xxxhdpi-screen.png ├── .gitignore ├── bower.json ├── .editorconfig ├── scss │ └── ionic.app.scss ├── package.json ├── gulpfile.js └── hooks │ ├── after_prepare │ └── 010_add_platform_class.js │ └── README.md ├── .gitignore ├── package.json └── README.md /snapchap/AwsConfig.json: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /snapchap/Procfile: -------------------------------------------------------------------------------- 1 | web: node server.js 2 | -------------------------------------------------------------------------------- /snapchap/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "www/lib" 3 | } 4 | -------------------------------------------------------------------------------- /snapchap/www/app/components/signUp/signUp-name/signUp-name.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /snapchap/www/app/components/signUp/signUp-name/signUp-name.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /snapchap/www/app/components/signUp/signUp-email/signUp-email.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /snapchap/www/app/components/signUp/signUp-name/signUp-nameCtrl.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /snapchap/www/app/components/signUp/signUp-password/signUp-password.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /snapchap/www/app/components/signUp/signUp-username/signUp-username.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /snapchap/db/delete_friendship.sql: -------------------------------------------------------------------------------- 1 | DELETE FROM friendships WHERE id = $1; 2 | -------------------------------------------------------------------------------- /snapchap/db/delete_message.sql: -------------------------------------------------------------------------------- 1 | DELETE FROM pending_messages WHERE id = $1; 2 | -------------------------------------------------------------------------------- /snapchap/db/update_last_name.sql: -------------------------------------------------------------------------------- 1 | update users set last_name = $2 where id = $1; 2 | -------------------------------------------------------------------------------- /snapchap/db/update_email.sql: -------------------------------------------------------------------------------- 1 | update users 2 | set email = $2 3 | where id = $1 4 | -------------------------------------------------------------------------------- /snapchap/db/update_first_name.sql: -------------------------------------------------------------------------------- 1 | update users set first_name = $2 where id = $1; 2 | -------------------------------------------------------------------------------- /snapchap/db/update_birthday.sql: -------------------------------------------------------------------------------- 1 | update users 2 | set email = $2 3 | where id = $1 4 | -------------------------------------------------------------------------------- /snapchap/ionic.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "snapchat", 3 | "app_id": "dd5854a9" 4 | } 5 | -------------------------------------------------------------------------------- /snapchap/www/lib/angular/index.js: -------------------------------------------------------------------------------- 1 | require('./angular'); 2 | module.exports = angular; 3 | -------------------------------------------------------------------------------- /snapchap/db/compare_password.sql: -------------------------------------------------------------------------------- 1 | SELECT password = crypt($1, password) from users where id = $2; 2 | -------------------------------------------------------------------------------- /snapchap/.io-config.json: -------------------------------------------------------------------------------- 1 | {"app_id":"dd5854a9","api_key":"4a8ab35d2bc07d432428bd3b62528cde2e1cdf340185fee9"} -------------------------------------------------------------------------------- /snapchap/www/img/9000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/9000.png -------------------------------------------------------------------------------- /snapchap/www/img/rr.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/rr.jpg -------------------------------------------------------------------------------- /snapchap/resources/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/icon.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/x.png -------------------------------------------------------------------------------- /snapchap/www/img/invis1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/invis1.png -------------------------------------------------------------------------------- /snapchap/www/img/snap1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/snap1.png -------------------------------------------------------------------------------- /snapchap/www/lib/angular-animate/index.js: -------------------------------------------------------------------------------- 1 | require('./angular-animate'); 2 | module.exports = 'ngAnimate'; 3 | -------------------------------------------------------------------------------- /snapchap/www/lib/angular-sanitize/index.js: -------------------------------------------------------------------------------- 1 | require('./angular-sanitize'); 2 | module.exports = 'ngSanitize'; 3 | -------------------------------------------------------------------------------- /snapchap/db/update_name.sql: -------------------------------------------------------------------------------- 1 | update users 2 | set first_name = $2, 3 | last_name = $3 4 | where id = $1 5 | -------------------------------------------------------------------------------- /snapchap/db/update_password.sql: -------------------------------------------------------------------------------- 1 | update users 2 | set password = crypt($2, gen_salt('bf')) 3 | where id = $1 4 | -------------------------------------------------------------------------------- /snapchap/resources/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/splash.png -------------------------------------------------------------------------------- /snapchap/www/img/9000300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/9000300.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/pen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/pen.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/save.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/undo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/undo.png -------------------------------------------------------------------------------- /snapchap/db/get_user_info.sql: -------------------------------------------------------------------------------- 1 | SELECT id, email, username, first_name, last_name, password from users where id = $1; 2 | -------------------------------------------------------------------------------- /snapchap/db/send_request.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO friendships (initiator, acceptor, valid_friendship) VALUES ($1, $2, FALSE) 2 | -------------------------------------------------------------------------------- /snapchap/www/img/icon/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/arrow.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/ghost.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/ghost.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/rewind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/rewind.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/timer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/timer.png -------------------------------------------------------------------------------- /snapchap/www/img/mustache200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/mustache200.png -------------------------------------------------------------------------------- /snapchap/www/img/snapchap230.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/snapchap230.png -------------------------------------------------------------------------------- /snapchap/www/img/snapchap240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/snapchap240.png -------------------------------------------------------------------------------- /snapchap/db/accept_friendship.sql: -------------------------------------------------------------------------------- 1 | UPDATE friendships SET valid_friendship = TRUE where initiator = $1 AND acceptor = $2; 2 | -------------------------------------------------------------------------------- /snapchap/db/upload_message.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO pending_messages (sender, recipient, message) VALUES ($1, $2, $3) 2 | RETURNING id; -------------------------------------------------------------------------------- /snapchap/www/img/icon/chat-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/chat-gray.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/dots-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/dots-gray.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/ghost-big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/ghost-big.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/wifi-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/wifi-gray.png -------------------------------------------------------------------------------- /snapchap/www/img/snap-confetti.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/snap-confetti.png -------------------------------------------------------------------------------- /snapchap/db/create_user.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO users (first_name, last_name, username, password, email) VALUES ($1, $2, $3, $4, $5); 2 | -------------------------------------------------------------------------------- /snapchap/db/upload_picture_message.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO pending_messages (sender, recipient, picture_message) VALUES ($1, $2, $3); 2 | -------------------------------------------------------------------------------- /snapchap/resources/ios/icon/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/icon/icon.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/arrow-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/arrow-blue.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/chat-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/chat-white.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/dots-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/dots-white.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/flash-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/flash-white.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/plus-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/plus-white.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/search-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/search-gray.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/share-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/share-gray.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/share-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/share-white.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/snapchat-bw.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/snapchat-bw.gif -------------------------------------------------------------------------------- /snapchap/www/img/icon/snapchat-bw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/snapchat-bw.png -------------------------------------------------------------------------------- /snapchap/www/img/screenshot/chat1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/screenshot/chat1.png -------------------------------------------------------------------------------- /snapchap/www/img/screenshot/chat2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/screenshot/chat2.png -------------------------------------------------------------------------------- /snapchap/www/img/screenshot/snap1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/screenshot/snap1.png -------------------------------------------------------------------------------- /snapchap/www/img/screenshot/snap2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/screenshot/snap2.png -------------------------------------------------------------------------------- /snapchap/www/img/screenshot/snap3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/screenshot/snap3.png -------------------------------------------------------------------------------- /snapchap/www/img/screenshot/snap4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/screenshot/snap4.png -------------------------------------------------------------------------------- /snapchap/www/img/screenshot/snap5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/screenshot/snap5.png -------------------------------------------------------------------------------- /snapchap/www/img/snapchap-doodle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/snapchap-doodle.png -------------------------------------------------------------------------------- /snapchap/www/img/thanksgiving270.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/thanksgiving270.png -------------------------------------------------------------------------------- /snapchap/www/img/thanksgiving300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/thanksgiving300.png -------------------------------------------------------------------------------- /snapchap/resources/ios/icon/icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/icon/icon-40.png -------------------------------------------------------------------------------- /snapchap/resources/ios/icon/icon-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/icon/icon-50.png -------------------------------------------------------------------------------- /snapchap/resources/ios/icon/icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/icon/icon-60.png -------------------------------------------------------------------------------- /snapchap/resources/ios/icon/icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/icon/icon-72.png -------------------------------------------------------------------------------- /snapchap/resources/ios/icon/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/icon/icon-76.png -------------------------------------------------------------------------------- /snapchap/resources/ios/icon/icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/icon/icon@2x.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/camera-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/camera-white.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/circle-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/circle-white.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/contacts-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/contacts-gray.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/search-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/search-white.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/settings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/settings-white.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/snapchat-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/snapchat-gray.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/snapchat-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/snapchat-white.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/trophy-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/trophy-white.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/white-gradient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/white-gradient.png -------------------------------------------------------------------------------- /snapchap/www/img/screenshot/doodle1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/screenshot/doodle1.png -------------------------------------------------------------------------------- /snapchap/www/img/screenshot/doodle2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/screenshot/doodle2.png -------------------------------------------------------------------------------- /snapchap/www/img/screenshot/login1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/screenshot/login1.png -------------------------------------------------------------------------------- /snapchap/www/img/screenshot/login2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/screenshot/login2.png -------------------------------------------------------------------------------- /snapchap/www/img/screenshot/sendto.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/screenshot/sendto.png -------------------------------------------------------------------------------- /snapchap/www/img/screenshot/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/screenshot/settings.png -------------------------------------------------------------------------------- /snapchap/www/img/snapchap-doodle270.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/snapchap-doodle270.png -------------------------------------------------------------------------------- /snapchap/www/img/snapchap-doodle300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/snapchap-doodle300.png -------------------------------------------------------------------------------- /snapchap/resources/ios/icon/icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/icon/icon-40@2x.png -------------------------------------------------------------------------------- /snapchap/resources/ios/icon/icon-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/icon/icon-50@2x.png -------------------------------------------------------------------------------- /snapchap/resources/ios/icon/icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/icon/icon-60@2x.png -------------------------------------------------------------------------------- /snapchap/resources/ios/icon/icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/icon/icon-60@3x.png -------------------------------------------------------------------------------- /snapchap/resources/ios/icon/icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/icon/icon-72@2x.png -------------------------------------------------------------------------------- /snapchap/resources/ios/icon/icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/icon/icon-76@2x.png -------------------------------------------------------------------------------- /snapchap/resources/ios/icon/icon-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/icon/icon-small.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/circle-gray-big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/circle-gray-big.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/circle-white-big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/circle-white-big.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/snapchap-signin.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/snapchap-signin.gif -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/fonts/ionicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/lib/ionic/fonts/ionicons.eot -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/fonts/ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/lib/ionic/fonts/ionicons.ttf -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/fonts/ionicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/lib/ionic/fonts/ionicons.woff -------------------------------------------------------------------------------- /snapchap/resources/ios/icon/icon-small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/icon/icon-small@2x.png -------------------------------------------------------------------------------- /snapchap/resources/ios/icon/icon-small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/icon/icon-small@3x.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/rear-camera-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/rear-camera-white.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/snapchap-signin-big.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/snapchap-signin-big.gif -------------------------------------------------------------------------------- /snapchap/www/img/icon/snapchat-box-gray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/snapchat-box-gray.png -------------------------------------------------------------------------------- /snapchap/www/lib/angular/angular.min.js.gzip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/lib/angular/angular.min.js.gzip -------------------------------------------------------------------------------- /snapchap/resources/ios/splash/Default-667h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/splash/Default-667h.png -------------------------------------------------------------------------------- /snapchap/resources/ios/splash/Default-736h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/splash/Default-736h.png -------------------------------------------------------------------------------- /snapchap/www/img/icon/snapchap-signin-loop.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/snapchap-signin-loop.gif -------------------------------------------------------------------------------- /snapchap/www/img/icon/snapchat-filled-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/www/img/icon/snapchat-filled-white.png -------------------------------------------------------------------------------- /snapchap/resources/ios/splash/Default~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/splash/Default~iphone.png -------------------------------------------------------------------------------- /snapchap/www/app/services/tempService.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').service('tempService', function() { 2 | 3 | this.createUser = { 4 | 5 | } 6 | }); 7 | -------------------------------------------------------------------------------- /snapchap/resources/ios/splash/Default@2x~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/splash/Default@2x~iphone.png -------------------------------------------------------------------------------- /snapchap/www/app/components/birthday/birthdayCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('birthdayCtrl', function ($scope, $stateParams) { 2 | 3 | 4 | }); 5 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/version.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.3.1", 3 | "codename": "el salvador", 4 | "date": "2016-05-12", 5 | "time": "18:21:10" 6 | } 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | node_modules/ 3 | sockets/ 4 | config.js 5 | 6 | platforms/ 7 | plugins/ 8 | lib/ 9 | 10 | */.DS_Store 11 | ../.DS_Store 12 | .DS_Store 13 | -------------------------------------------------------------------------------- /snapchap/resources/android/icon/drawable-hdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/android/icon/drawable-hdpi-icon.png -------------------------------------------------------------------------------- /snapchap/resources/android/icon/drawable-ldpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/android/icon/drawable-ldpi-icon.png -------------------------------------------------------------------------------- /snapchap/resources/android/icon/drawable-mdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/android/icon/drawable-mdpi-icon.png -------------------------------------------------------------------------------- /snapchap/resources/android/icon/drawable-xhdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/android/icon/drawable-xhdpi-icon.png -------------------------------------------------------------------------------- /snapchap/resources/ios/splash/Default-Portrait~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/splash/Default-Portrait~ipad.png -------------------------------------------------------------------------------- /snapchap/resources/android/icon/drawable-xxhdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/android/icon/drawable-xxhdpi-icon.png -------------------------------------------------------------------------------- /snapchap/resources/android/icon/drawable-xxxhdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/android/icon/drawable-xxxhdpi-icon.png -------------------------------------------------------------------------------- /snapchap/resources/ios/splash/Default-568h@2x~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/splash/Default-568h@2x~iphone.png -------------------------------------------------------------------------------- /snapchap/resources/ios/splash/Default-Landscape-736h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/splash/Default-Landscape-736h.png -------------------------------------------------------------------------------- /snapchap/resources/ios/splash/Default-Landscape~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/splash/Default-Landscape~ipad.png -------------------------------------------------------------------------------- /snapchap/resources/ios/splash/Default-Landscape@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/splash/Default-Landscape@2x~ipad.png -------------------------------------------------------------------------------- /snapchap/resources/ios/splash/Default-Portrait@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/ios/splash/Default-Portrait@2x~ipad.png -------------------------------------------------------------------------------- /snapchap/.gitignore: -------------------------------------------------------------------------------- 1 | # Specifies intentionally untracked files to ignore when using Git 2 | # http://git-scm.com/docs/gitignore 3 | 4 | config.js 5 | credentials.js 6 | AWS.config.js 7 | -------------------------------------------------------------------------------- /snapchap/resources/android/splash/drawable-land-hdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/android/splash/drawable-land-hdpi-screen.png -------------------------------------------------------------------------------- /snapchap/resources/android/splash/drawable-land-ldpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/android/splash/drawable-land-ldpi-screen.png -------------------------------------------------------------------------------- /snapchap/resources/android/splash/drawable-land-mdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/android/splash/drawable-land-mdpi-screen.png -------------------------------------------------------------------------------- /snapchap/resources/android/splash/drawable-land-xhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/android/splash/drawable-land-xhdpi-screen.png -------------------------------------------------------------------------------- /snapchap/resources/android/splash/drawable-land-xxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/android/splash/drawable-land-xxhdpi-screen.png -------------------------------------------------------------------------------- /snapchap/resources/android/splash/drawable-port-hdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/android/splash/drawable-port-hdpi-screen.png -------------------------------------------------------------------------------- /snapchap/resources/android/splash/drawable-port-ldpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/android/splash/drawable-port-ldpi-screen.png -------------------------------------------------------------------------------- /snapchap/resources/android/splash/drawable-port-mdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/android/splash/drawable-port-mdpi-screen.png -------------------------------------------------------------------------------- /snapchap/resources/android/splash/drawable-port-xhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/android/splash/drawable-port-xhdpi-screen.png -------------------------------------------------------------------------------- /snapchap/resources/android/splash/drawable-port-xxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/android/splash/drawable-port-xxhdpi-screen.png -------------------------------------------------------------------------------- /snapchap/resources/android/splash/drawable-land-xxxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/android/splash/drawable-land-xxxhdpi-screen.png -------------------------------------------------------------------------------- /snapchap/resources/android/splash/drawable-port-xxxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Team-Snapchat/Snapchap/HEAD/snapchap/resources/android/splash/drawable-port-xxxhdpi-screen.png -------------------------------------------------------------------------------- /snapchap/www/app/components/watchMessages/watchMessages.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /snapchap/www/app/components/nav/navCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('navCtrl', function ($scope, $stateParams, mainService) { 2 | 3 | mainService.showMenu(); 4 | 5 | 6 | }); 7 | -------------------------------------------------------------------------------- /snapchap/db/get_message.sql: -------------------------------------------------------------------------------- 1 | SELECT pending_messages.message, users.first_name, users.last_name 2 | FROM pending_messages 3 | JOIN users ON pending_messages.sender = users.id 4 | WHERE pending_messages.id = $1; 5 | -------------------------------------------------------------------------------- /snapchap/www/app/components/logInSignUp/logInSignUpCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('logInSignUpCtrl', function ($scope, $stateParams, mainService) { 2 | 3 | mainService.hideMenu(); 4 | 5 | }); 6 | -------------------------------------------------------------------------------- /snapchap/www/lib/angular/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.5.3", 4 | "license": "MIT", 5 | "main": "./angular.js", 6 | "ignore": [], 7 | "dependencies": { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /snapchap/db/get_message_ids.sql: -------------------------------------------------------------------------------- 1 | SELECT pending_messages.id, users.first_name, users.last_name 2 | FROM pending_messages 3 | JOIN users ON pending_messages.sender = users.id 4 | WHERE pending_messages.recipient = $1; 5 | -------------------------------------------------------------------------------- /snapchap/www/app/components/watchMessages/watchMessagesCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('watchMessagesCtrl', function ($scope, $stateParams, mainService) { 2 | 3 | mainService.hideMenu(); 4 | 5 | }); 6 | -------------------------------------------------------------------------------- /snapchap/db/get_pending_friend_requests.sql: -------------------------------------------------------------------------------- 1 | SELECT users.id, users.first_name, users.last_name, users.username 2 | FROM friendships 3 | JOIN users ON users.id = friendships.initiator 4 | WHERE friendships.acceptor = $1 AND valid_friendship = false -------------------------------------------------------------------------------- /snapchap/www/service-worker.js: -------------------------------------------------------------------------------- 1 | self.addEventListener('activate', function (event) { 2 | 3 | }); 4 | 5 | self.addEventListener('fetch', function (event) { 6 | 7 | }); 8 | 9 | self.addEventListener('push', function (event) { 10 | 11 | }); -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/_progress.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Progress 4 | * -------------------------------------------------- 5 | */ 6 | 7 | progress { 8 | display: block; 9 | margin: $progress-margin; 10 | width: $progress-width; 11 | } 12 | -------------------------------------------------------------------------------- /snapchap/www/lib/ngCordova/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ### 0.1.27-alpha (2016-07-06) 2 | 3 | 4 | ### 0.1.27-alpha (2016-07-06) 5 | 6 | 7 | Please refer to the [Github ngCordova Releases file](https://github.com/driftyco/ng-cordova/releases) for detailed information. 8 | -------------------------------------------------------------------------------- /snapchap/www/lib/angular-animate/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-animate", 3 | "version": "1.5.3", 4 | "license": "MIT", 5 | "main": "./angular-animate.js", 6 | "ignore": [], 7 | "dependencies": { 8 | "angular": "1.5.3" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /snapchap/www/lib/angular-sanitize/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-sanitize", 3 | "version": "1.5.3", 4 | "license": "MIT", 5 | "main": "./angular-sanitize.js", 6 | "ignore": [], 7 | "dependencies": { 8 | "angular": "1.5.3" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /snapchap/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "HelloIonic", 3 | "private": "true", 4 | "devDependencies": { 5 | "ionic": "driftyco/ionic-bower#1.3.1" 6 | }, 7 | "dependencies": { 8 | "ngCordova": "^0.1.27-alpha", 9 | "signature_pad": "^1.5.3" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /snapchap/www/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "My Ionic App", 3 | "short_name": "My Ionic App", 4 | "start_url": "index.html", 5 | "display": "standalone", 6 | "icons": [{ 7 | "src": "icon.png", 8 | "sizes": "512x512", 9 | "type": "image/png" 10 | }] 11 | } -------------------------------------------------------------------------------- /snapchap/db/search_users.sql: -------------------------------------------------------------------------------- 1 | SELECT id, username, first_name, last_name from users 2 | WHERE username LIKE $1 3 | AND id != $2 4 | AND id not in ( 5 | select initiator as friend from friendships where acceptor = $2 union 6 | select acceptor as friend from friendships where initiator = $2 7 | ) 8 | -------------------------------------------------------------------------------- /snapchap/www/app/components/addFriends/addFriendsCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('addFriendsCtrl', function ($scope, $stateParams, mainService) { 2 | 3 | mainService.hideMenu(); 4 | 5 | $scope.showMenu = function() { 6 | mainService.showMenu(); 7 | }; 8 | 9 | }); 10 | -------------------------------------------------------------------------------- /snapchap/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | end_of_line = lf 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | [*.md] 13 | insert_final_newline = false 14 | trim_trailing_whitespace = false -------------------------------------------------------------------------------- /snapchap/db/get_user_friends.sql: -------------------------------------------------------------------------------- 1 | select users.id, username, initiator, acceptor, first_name, last_name 2 | from users 3 | join friendships 4 | on users.id = friendships.initiator or users.id = friendships.acceptor 5 | where users.id != $1 and (initiator = $1 or acceptor = $1) and valid_friendship = true 6 | order by username 7 | -------------------------------------------------------------------------------- /snapchap/db/update_requests.sql: -------------------------------------------------------------------------------- 1 | select users.id, username, initiator, acceptor, first_name, last_name 2 | from users 3 | join friendships 4 | on users.id = friendships.initiator or users.id = friendships.acceptor 5 | where users.id != $1 and (initiator = $1 or acceptor = $1) and valid_friendship = false 6 | order by username 7 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "snapchap", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "express": "^4.14.0", 13 | "socket.io": "^1.5.1" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /snapchap/www/app/components/signUp/signUp-password/signUp-passwordCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('signUp-passwordCtrl', function($scope, $state, tempService){ 2 | 3 | $scope.createUser = tempService.createUser; 4 | 5 | $scope.createPassword = function(password){ 6 | $scope.createUser.password = password; 7 | console.log(tempService.createUser); 8 | $state.go('signUp-email'); 9 | } 10 | }) 11 | -------------------------------------------------------------------------------- /snapchap/www/app/components/signUp/signUp-username/signUp-usernameCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('signUp-usernameCtrl', function($scope, tempService, $state){ 2 | 3 | $scope.createUser = tempService.createUser; 4 | 5 | $scope.createUsername = function(username){ 6 | $scope.createUser.username = username.toLowerCase(); 7 | console.log(tempService.createUser); 8 | $state.go('signUp-password'); 9 | } 10 | 11 | }) 12 | -------------------------------------------------------------------------------- /snapchap/www/lib/angular/angular-csp.css: -------------------------------------------------------------------------------- 1 | /* Include this file in your html if you are using the CSP mode. */ 2 | 3 | @charset "UTF-8"; 4 | 5 | [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], 6 | .ng-cloak, .x-ng-cloak, 7 | .ng-hide:not(.ng-hide-animate) { 8 | display: none !important; 9 | } 10 | 11 | ng\:form { 12 | display: block; 13 | } 14 | 15 | .ng-animate-shim { 16 | visibility:hidden; 17 | } 18 | 19 | .ng-anchor { 20 | position:absolute; 21 | } 22 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/_backdrop.scss: -------------------------------------------------------------------------------- 1 | 2 | .backdrop { 3 | position: fixed; 4 | top: 0; 5 | left: 0; 6 | z-index: $z-index-backdrop; 7 | 8 | width: 100%; 9 | height: 100%; 10 | 11 | background-color: $loading-backdrop-bg-color; 12 | 13 | visibility: hidden; 14 | opacity: 0; 15 | 16 | &.visible { 17 | visibility: visible; 18 | } 19 | &.active { 20 | opacity: 1; 21 | } 22 | 23 | @include transition($loading-backdrop-fadein-duration opacity linear); 24 | } 25 | -------------------------------------------------------------------------------- /snapchap/www/lib/angular-ui-router/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-ui-router", 3 | "version": "0.2.13", 4 | "main": "./release/angular-ui-router.js", 5 | "dependencies": { 6 | "angular": ">= 1.0.8" 7 | }, 8 | "ignore": [ 9 | "**/.*", 10 | "node_modules", 11 | "bower_components", 12 | "component.json", 13 | "package.json", 14 | "lib", 15 | "config", 16 | "sample", 17 | "test", 18 | "tests", 19 | "ngdoc_assets", 20 | "Gruntfile.js", 21 | "files.js" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /snapchap/www/lib/angular/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.5.3", 4 | "license": "MIT", 5 | "main": "./angular.js", 6 | "ignore": [], 7 | "dependencies": {}, 8 | "homepage": "https://github.com/angular/bower-angular", 9 | "_release": "1.5.3", 10 | "_resolution": { 11 | "type": "version", 12 | "tag": "v1.5.3", 13 | "commit": "5a07c5107b4d24f41744a02b07717d55bad88e70" 14 | }, 15 | "_source": "https://github.com/angular/bower-angular.git", 16 | "_target": "1.5.3", 17 | "_originalSource": "angular" 18 | } -------------------------------------------------------------------------------- /snapchap/www/app/components/logInSignUp/logInSignUp.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 |
6 |
7 | 8 | 9 |
10 |
11 |
12 | -------------------------------------------------------------------------------- /snapchap/www/app/components/nav/nav.html: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /snapchap/www/app/directives/animateChattyNav.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat') 2 | .directive('animateChattyNav', function() { 3 | return { 4 | 5 | restrict: 'AE', 6 | 7 | controller: function($scope, $state) { 8 | 9 | var navBtns = $('#index-html__chat-btn, #index-html__take-photo-btn, #index-html__dots-btn'); 10 | 11 | $scope.addChattyNav = function() { 12 | navBtns.addClass('chatty-nav'); 13 | } 14 | $scope.removeChattyNav = function() { 15 | navBtns.removeClass('chatty-nav'); 16 | } 17 | 18 | 19 | } 20 | 21 | }; 22 | }); 23 | -------------------------------------------------------------------------------- /snapchap/www/app/directives/animateProfileNav.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat') 2 | .directive('animateProfileNav', function() { 3 | return { 4 | 5 | restrict: 'AE', 6 | 7 | controller: function($scope, $state) { 8 | 9 | var navBtns = $('#index-html__chat-btn, #index-html__take-photo-btn, #index-html__dots-btn'); 10 | 11 | $scope.addProfileNav = function() { 12 | navBtns.addClass('profile-nav'); 13 | } 14 | $scope.removeProfileNav = function() { 15 | navBtns.removeClass('profile-nav'); 16 | } 17 | 18 | 19 | } 20 | 21 | }; 22 | }); 23 | -------------------------------------------------------------------------------- /snapchap/www/app/components/signUp/signUpCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('signUpCtrl', function ($scope, $stateParams, mainService, tempService, $state) { 2 | 3 | mainService.hideMenu(); 4 | 5 | $scope.showMenu = function() { 6 | mainService.showMenu(); 7 | }; 8 | 9 | $scope.createUser = tempService.createUser; 10 | 11 | 12 | $scope.createName = function(firstName, lastName){ 13 | $scope.createUser.first_name = firstName; 14 | $scope.createUser.last_name = lastName; 15 | console.log(tempService.createUser); 16 | $state.go('signUp-username') 17 | } 18 | 19 | }); 20 | -------------------------------------------------------------------------------- /snapchap/www/app/components/myFriends/myFriendsCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('myFriendsCtrl', function ($scope, $stateParams, mainService, $rootScope) { 2 | 3 | 4 | mainService.hideMenu(); 5 | 6 | $scope.showMenu = function() { 7 | mainService.showMenu(); 8 | }; 9 | 10 | $scope.getUserFriends = function(userId) { 11 | mainService.getUserFriends(userId).then(function(response) { 12 | console.log('response', response); 13 | $scope.friends = response; 14 | $scope.userId = userId; 15 | }) 16 | } 17 | $scope.getUserFriends($rootScope.userInfo.id); 18 | 19 | }); 20 | -------------------------------------------------------------------------------- /snapchap/www/app/components/settings/settingsCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('settingsCtrl', function ($scope, $rootScope, $stateParams, mainService, $auth, $state) { 2 | 3 | mainService.hideMenu(); 4 | 5 | $scope.showMenu = function() { 6 | mainService.showMenu(); 7 | }; 8 | 9 | $scope.logout = function(){ 10 | // $rootScope.disconnect() 11 | $auth.logout() 12 | .then(function() { 13 | console.log('You have been logged out'); 14 | $state.go('logInSignUp'); 15 | }); 16 | 17 | $scope.goToView = function(view) { 18 | $state.go(view); 19 | }; 20 | } 21 | 22 | }); 23 | -------------------------------------------------------------------------------- /snapchap/www/lib/angular-animate/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-animate", 3 | "version": "1.5.3", 4 | "license": "MIT", 5 | "main": "./angular-animate.js", 6 | "ignore": [], 7 | "dependencies": { 8 | "angular": "1.5.3" 9 | }, 10 | "homepage": "https://github.com/angular/bower-angular-animate", 11 | "_release": "1.5.3", 12 | "_resolution": { 13 | "type": "version", 14 | "tag": "v1.5.3", 15 | "commit": "671c738980fb0509b2b494716ccd8c004c39f368" 16 | }, 17 | "_source": "https://github.com/angular/bower-angular-animate.git", 18 | "_target": "1.5.3", 19 | "_originalSource": "angular-animate" 20 | } -------------------------------------------------------------------------------- /snapchap/www/lib/angular-sanitize/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-sanitize", 3 | "version": "1.5.3", 4 | "license": "MIT", 5 | "main": "./angular-sanitize.js", 6 | "ignore": [], 7 | "dependencies": { 8 | "angular": "1.5.3" 9 | }, 10 | "homepage": "https://github.com/angular/bower-angular-sanitize", 11 | "_release": "1.5.3", 12 | "_resolution": { 13 | "type": "version", 14 | "tag": "v1.5.3", 15 | "commit": "d62a5eecedc71828f6f935fbde6c07217a95988a" 16 | }, 17 | "_source": "https://github.com/angular/bower-angular-sanitize.git", 18 | "_target": "1.5.3", 19 | "_originalSource": "angular-sanitize" 20 | } -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/ionicons/ionicons.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | @import "ionicons-variables"; 3 | /*! 4 | Ionicons, v2.0.1 5 | Created by Ben Sperry for the Ionic Framework, http://ionicons.com/ 6 | https://twitter.com/benjsperry https://twitter.com/ionicframework 7 | MIT License: https://github.com/driftyco/ionicons 8 | 9 | Android-style icons originally built by Google’s 10 | Material Design Icons: https://github.com/google/material-design-icons 11 | used under CC BY http://creativecommons.org/licenses/by/4.0/ 12 | Modified icons to fit ionicon’s grid from original. 13 | */ 14 | 15 | @import "ionicons-font"; 16 | @import "ionicons-icons"; 17 | -------------------------------------------------------------------------------- /snapchap/www/app/components/password/passwordCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('passwordCtrl', function ($scope, $stateParams, mainService, $rootScope, $state) { 2 | 3 | mainService.hideMenu(); 4 | 5 | $scope.continueButton = false; 6 | $scope.showContinueButton = function(password){ 7 | if(password !== ''){ 8 | $scope.continueButton = true 9 | } else $scope.continueButton = false 10 | } 11 | 12 | $scope.verifyPassword = function(password){ 13 | mainService.comparePassword($rootScope.userInfo.id, password).then(function(response){ 14 | if(response.data){ 15 | $state.go('newPassword') 16 | } 17 | }) 18 | } 19 | 20 | }); 21 | -------------------------------------------------------------------------------- /snapchap/www/lib/angular/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.5.3", 4 | "description": "HTML enhanced for web apps", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "client-side" 18 | ], 19 | "author": "Angular Core Team ", 20 | "license": "MIT", 21 | "bugs": { 22 | "url": "https://github.com/angular/angular.js/issues" 23 | }, 24 | "homepage": "http://angularjs.org" 25 | } 26 | -------------------------------------------------------------------------------- /snapchap/www/app/components/email/email.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 |
9 | Your email address is user to log in to
Snapchap
and for password recovery. 10 |
11 | 12 | 13 | 14 | 15 |
16 |
17 | -------------------------------------------------------------------------------- /snapchap/www/app/components/signUp/signUp-email/signUp-email.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 |
9 |

What's your email?

10 |
11 |

EMAIL

12 | 13 |
14 | 15 | 16 |
17 | 18 |
19 | 20 |
21 |
22 | -------------------------------------------------------------------------------- /snapchap/www/lib/angular-animate/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-animate", 3 | "version": "1.5.3", 4 | "description": "AngularJS module for animations", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "animation", 18 | "client-side" 19 | ], 20 | "author": "Angular Core Team ", 21 | "license": "MIT", 22 | "bugs": { 23 | "url": "https://github.com/angular/angular.js/issues" 24 | }, 25 | "homepage": "http://angularjs.org" 26 | } 27 | -------------------------------------------------------------------------------- /snapchap/www/lib/angular-sanitize/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-sanitize", 3 | "version": "1.5.3", 4 | "description": "AngularJS module for sanitizing HTML", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "html", 18 | "client-side" 19 | ], 20 | "author": "Angular Core Team ", 21 | "license": "MIT", 22 | "bugs": { 23 | "url": "https://github.com/angular/angular.js/issues" 24 | }, 25 | "homepage": "http://angularjs.org" 26 | } 27 | -------------------------------------------------------------------------------- /snapchap/www/app/components/signUp/signUp-username/signUp-username.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 |
9 |

What's your username?

10 |
11 |

USERNAME

12 | 13 |
14 | 15 | 16 | 17 |
18 | 19 |
20 | 21 |
22 |
23 | -------------------------------------------------------------------------------- /snapchap/www/app/components/profile/profileCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('profileCtrl', function ($scope,$rootScope, $stateParams, mainService, $state) { 2 | 3 | $scope.hideMenu = function() { 4 | document.getElementById('index-html__nav-bottom').style.display = 'none'; 5 | }; 6 | 7 | 8 | mainService.showMenu(); 9 | $('#index-html__chat-btn, #index-html__take-photo-btn, #index-html__dots-btn').addClass('profile-nav'); 10 | 11 | $scope.getAddedme = function(){ 12 | mainService.getPendingFriendRequests($rootScope.userInfo.id).then(function(response){ 13 | $rootScope.pendingFriendRequests = response.data; 14 | }) 15 | } 16 | 17 | $scope.goToView = function(view) { 18 | $state.go(view); 19 | } 20 | 21 | 22 | 23 | 24 | }); 25 | -------------------------------------------------------------------------------- /snapchap/www/app/components/signUp/signUp-password/signUp-password.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 |
9 |

What's your password?

10 |
11 |

PASSWORD

12 | 13 |
14 | 15 | 16 |
17 | 18 |
19 | 20 |
21 |
22 | -------------------------------------------------------------------------------- /snapchap/www/app/components/email/emailCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('emailCtrl', function ($scope, $stateParams, mainService, $rootScope, $state) { 2 | 3 | mainService.hideMenu(); 4 | $scope.email = '' 5 | 6 | $scope.currentEmail = $rootScope.userInfo.email; 7 | $rootScope.updateEmail = undefined; 8 | 9 | $scope.continueButton = false; 10 | $scope.stuff = function(email){ 11 | if(email.length > 0){ 12 | $scope.continueButton = true 13 | } 14 | else $scope.continueButton = false 15 | } 16 | 17 | $scope.addEmail = function(email){ 18 | $rootScope.updateEmail = {id: $rootScope.userInfo.id, email: email} 19 | console.log($rootScope.updateEmail); 20 | $scope.email = '' 21 | $state.go('confirmPassword') 22 | 23 | } 24 | 25 | }); 26 | -------------------------------------------------------------------------------- /snapchap/www/app/components/confirmPassword/confirmPassword.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 |
9 | Your email address is user to log in to
Snapchap
and for password recovery. 10 |
11 | 12 | 13 | 14 | 15 |
16 |
17 | -------------------------------------------------------------------------------- /snapchap/www/app/components/password/password.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 |
9 | To set a new password, please enter your
current password first. 10 |
11 | 12 | 13 |
14 | 15 | 16 | 17 |
18 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/ionic.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | @import 4 | // Ionicons 5 | "ionicons/ionicons.scss", 6 | 7 | // Variables 8 | "mixins", 9 | "variables", 10 | 11 | // Base 12 | "reset", 13 | "scaffolding", 14 | "type", 15 | 16 | // Components 17 | "action-sheet", 18 | "backdrop", 19 | "bar", 20 | "tabs", 21 | "menu", 22 | "modal", 23 | "popover", 24 | "popup", 25 | "loading", 26 | "items", 27 | "list", 28 | "badge", 29 | "slide-box", 30 | "slides", 31 | "refresher", 32 | "spinner", 33 | 34 | // Forms 35 | "form", 36 | "checkbox", 37 | "toggle", 38 | "radio", 39 | "range", 40 | "select", 41 | "progress", 42 | 43 | // Buttons 44 | "button", 45 | "button-bar", 46 | 47 | // Util 48 | "grid", 49 | "util", 50 | "platform", 51 | 52 | // Animations 53 | "animations", 54 | "transitions"; 55 | -------------------------------------------------------------------------------- /snapchap/www/app/components/addedMe/addedMeCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('addedMeCtrl', function ($scope, $rootScope, $stateParams, mainService) { 2 | 3 | mainService.hideMenu(); 4 | 5 | $scope.showMenu = function() { 6 | mainService.showMenu(); 7 | }; 8 | mainService.getPendingFriendRequests($rootScope.userInfo.id).then(function(response){ 9 | $rootScope.pendingFriendRequests = response.data; 10 | }); 11 | $scope.respondToFriendRequest = function(initiatorId){ 12 | mainService.replyToFriendRequest({initiatorId: initiatorId, acceptorId: $rootScope.userInfo.id}).then(function(response){ 13 | 14 | if(response.data){ 15 | mainService.getPendingFriendRequests($rootScope.userInfo.id).then(function(response){ 16 | $rootScope.pendingFriendRequests = response.data; 17 | }) 18 | } 19 | 20 | }) 21 | } 22 | 23 | }); 24 | -------------------------------------------------------------------------------- /snapchap/www/lib/angular-ui-router/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-ui-router", 3 | "version": "0.2.13", 4 | "main": "./release/angular-ui-router.js", 5 | "dependencies": { 6 | "angular": ">= 1.0.8" 7 | }, 8 | "ignore": [ 9 | "**/.*", 10 | "node_modules", 11 | "bower_components", 12 | "component.json", 13 | "package.json", 14 | "lib", 15 | "config", 16 | "sample", 17 | "test", 18 | "tests", 19 | "ngdoc_assets", 20 | "Gruntfile.js", 21 | "files.js" 22 | ], 23 | "homepage": "https://github.com/angular-ui/angular-ui-router-bower", 24 | "_release": "0.2.13", 25 | "_resolution": { 26 | "type": "version", 27 | "tag": "0.2.13", 28 | "commit": "2e580f271defdec34f464aab0cca519e41d1ee33" 29 | }, 30 | "_source": "https://github.com/angular-ui/angular-ui-router-bower.git", 31 | "_target": "0.2.13", 32 | "_originalSource": "angular-ui-router" 33 | } -------------------------------------------------------------------------------- /snapchap/www/app/components/logInSignUp/logInSignUp.css: -------------------------------------------------------------------------------- 1 | #log-in-sign-up-view__main { 2 | width: 100vw; 3 | height: 75vh; 4 | background-color: yellow; 5 | display: flex; 6 | justify-content: center; 7 | align-items: center; 8 | } 9 | #log-in-sign-up-view__ghost { 10 | position: relative; 11 | /*background-color: green;*/ 12 | bottom: 17px; 13 | height: 125px; 14 | width: 125px; 15 | background-image: url('../../../img/icon/snapchap-signin-loop.gif'); 16 | background-position: center center; 17 | background-repeat: no-repeat; 18 | -webkit-background-size: 100px; 19 | background-size: 100px; 20 | } 21 | 22 | .log-in-sign-up-view__btn { 23 | width: 100%; 24 | height: 12.5vh; 25 | width: 100vw; 26 | font-size: 1.64em; 27 | } 28 | 29 | #log-in-btn { 30 | background-color: RGBA(233, 39, 84, 1.00); 31 | } 32 | 33 | #sign-up-btn { 34 | background-color: RGBA(60, 178, 226, 1.00); 35 | } 36 | -------------------------------------------------------------------------------- /snapchap/scss/ionic.app.scss: -------------------------------------------------------------------------------- 1 | /* 2 | To customize the look and feel of Ionic, you can override the variables 3 | in ionic's _variables.scss file. 4 | 5 | For example, you might change some of the default colors: 6 | 7 | $light: #fff !default; 8 | $stable: #f8f8f8 !default; 9 | $positive: #387ef5 !default; 10 | $calm: #11c1f3 !default; 11 | $balanced: #33cd5f !default; 12 | $energized: #ffc900 !default; 13 | $assertive: #ef473a !default; 14 | $royal: #886aea !default; 15 | $dark: #444 !default; 16 | */ 17 | 18 | // The path for our ionicons font files, relative to the built CSS in www/css 19 | $ionicons-font-path: "../lib/ionic/fonts" !default; 20 | 21 | // Include all of Ionic 22 | @import "www/lib/ionic/scss/ionic"; 23 | -------------------------------------------------------------------------------- /snapchap/www/app/components/confirmPassword/confirmPasswordCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('confirmPasswordCtrl', function($scope, $rootScope, mainService, $state){ 2 | 3 | $scope.continueButton = false; 4 | $scope.stuff = function(password){ 5 | if(password !== ''){ 6 | $scope.continueButton = true 7 | } else $scope.continueButton = false 8 | } 9 | 10 | $scope.confirmPassword = function(password){ 11 | id = $rootScope.userInfo.id; 12 | mainService.comparePassword(id, password) 13 | .then(function(response){ 14 | if(response.data){ 15 | mainService.updateEmail($rootScope.updateEmail) 16 | .then(function(response){ 17 | mainService.getCurrentUser().then(function(userInfo){ 18 | $rootScope.userInfo = userInfo; 19 | $rootScope.updateEmail = '' 20 | $state.go('settings') 21 | }) 22 | }) 23 | } 24 | }) 25 | } 26 | }) 27 | -------------------------------------------------------------------------------- /snapchap/www/app/components/addedMe/addedMe.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 |
    11 |
  • 12 |

    {{item.first_name}} {{item.last_name}}

    13 |

    {{item.username}}

    14 | 15 |
  • 16 |
17 | 21 | 22 |
23 | 24 |
25 | -------------------------------------------------------------------------------- /snapchap/www/app/components/name/name.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 |
9 | This is how you appear on Snapchat, so pick a name your friends know you by. 10 |
11 | 12 | 13 | 14 | 15 |
16 |
17 | -------------------------------------------------------------------------------- /snapchap/www/app/components/settings/settings.css: -------------------------------------------------------------------------------- 1 | #settings-view .nav-top-heading { 2 | color: #00A686; 3 | text-align: center; 4 | padding: 18px; 5 | border-bottom: thin solid rgba(150, 150, 150, 0.3); 6 | margin-top: 10px; 7 | position: relative; 8 | } 9 | #settings-view .heading { 10 | display: flex; 11 | align-items: center; 12 | background-color: rgba(244, 244, 244, 1); 13 | padding-left: 14px; 14 | width: 100vw; 15 | height: 34px; 16 | border-bottom: thin solid rgba(150, 150, 150, 0.3); 17 | /*font-size: 0.85rem;*/ 18 | color: #00A686; 19 | margin-left: 0px; 20 | } 21 | #settings-view ul { 22 | font-size: 1.1rem; 23 | } 24 | #settings-view li { 25 | color: black; 26 | border-bottom: thin solid rgba(150, 150, 150, 0.3); 27 | padding: 13px 14px; 28 | } 29 | 30 | #settings-view__back-btn { 31 | z-index: 1; 32 | color: #00A686; 33 | position: absolute; 34 | top: 9px; 35 | left: 17px; 36 | } 37 | #settings-view .forward-btn { 38 | color: gray; 39 | } 40 | -------------------------------------------------------------------------------- /snapchap/www/app/components/addUsername/addUsernameCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('addUsernameCtrl', function ($scope, $rootScope, $stateParams, mainService) { 2 | $scope.flag = false; 3 | mainService.hideMenu(); 4 | $scope.users = []; 5 | 6 | $scope.getSearchResults = function(searchText){ 7 | $scope.hideExplanation = true; 8 | if(searchText){ 9 | $scope.hideExplanation = true; 10 | var query = "%"+searchText+"%" 11 | mainService.getUsername(query, $rootScope.userInfo.id).then(function(results){ 12 | console.log(results.data) 13 | $scope.users = results.data; 14 | }) 15 | } 16 | else { 17 | $scope.users = [] 18 | $scope.hideExplanation = false; 19 | } 20 | } 21 | $scope.sendFriendRequest = function(acceptor){ 22 | 23 | mainService.sendFriendRequest({initiatorId :$rootScope.userInfo.id, acceptorId: acceptor}).then(function(flag){ 24 | $scope.flag = flag; 25 | $scope.getSearchResults($scope.searchText) 26 | }) 27 | } 28 | }); 29 | -------------------------------------------------------------------------------- /snapchap/www/app/components/birthday/birthday.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 |
12 | Choose carefully — you can only change your birthday a limited number of times. 13 |
14 |
15 | January 1, 1991 16 |
17 |
18 | 19 | Birthday Party 20 |
21 | Adds a 🎂  next to your name on your
birthday, allows your friends to send you
Birthday Snaps, and some other fun
surprises. This does not reveal your age to
other Snapchatters. 22 |
23 |
24 | 25 |
26 | 27 | 28 |
29 | 30 | 31 |
32 | -------------------------------------------------------------------------------- /snapchap/www/app/components/camera/camera.css: -------------------------------------------------------------------------------- 1 | #camera-view { 2 | height: 100%; 3 | background-color: black; 4 | } 5 | 6 | #camera-view__flash-btn { 7 | background-image: url('../../../img/icon/flash-white.png'); 8 | } 9 | #camera-view__profile-btn { 10 | background-image: url('../../../img/icon/snapchat-filled-white.png'); 11 | } 12 | #camera-view__rear-camera-btn { 13 | background-image: url('../../../img/icon/rear-camera-white.png'); 14 | } 15 | 16 | 17 | /*#camera-view__nav-bottom { 18 | top: calc(100vh - 60px); 19 | } 20 | #camera-view__nav-bottom .icon-btn { 21 | position: relative; 22 | bottom: 7px; 23 | } 24 | 25 | #camera-view__chat-btn { 26 | background-image: url('../../../img/icon/chat-white.png'); 27 | } 28 | #camera-view__take-photo-btn { 29 | background-image: url('../../../img/icon/circle-white-big.png'); 30 | width: 70px; 31 | height: 70px; 32 | -webkit-background-size: 70px; 33 | background-size: 70px; 34 | } 35 | #camera-view__dots-btn { 36 | background-image: url('../../../img/icon/dots-white.png'); 37 | }*/ 38 | -------------------------------------------------------------------------------- /snapchap/www/app/components/logIn/logInCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('logInCtrl', function ($scope, $rootScope, $stateParams, mainService, $auth, $state) { 2 | 3 | mainService.hideMenu(); 4 | 5 | $scope.showMenu = function() { 6 | mainService.showMenu(); 7 | }; 8 | 9 | //login w/jsonwebtokens 10 | $scope.login = function(email, password) { 11 | console.log(email, password); 12 | $auth.login({ 13 | email: email, 14 | password: password, 15 | }).then(function (response) { 16 | console.log("signUpCtrl:", response); 17 | if(response.status === 200){ 18 | $auth.setToken(response) 19 | mainService.getCurrentUser().then(function(userInfo){ 20 | $rootScope.userInfo = userInfo; 21 | $rootScope.connect(); //dont move this 22 | }) 23 | 24 | $state.go('camera'); 25 | } 26 | }).catch(function (response) { 27 | console.log("signUpCtrl Error:", response); 28 | $scope.response = response.data.message; 29 | }); 30 | }; 31 | 32 | 33 | }); 34 | -------------------------------------------------------------------------------- /snapchap/www/app/components/logIn/logIn.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 |
10 |

Log In

11 |
12 |

USERNAME OR EMAIL

13 | 14 |
15 |
16 |

PASSWORD

17 | 18 |
19 |

20 | {{response}} 21 |

22 | 25 | 26 |
27 | 28 |
29 | 30 |
31 |
32 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/_loading.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Loading 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .loading-container { 8 | position: absolute; 9 | left: 0; 10 | top: 0; 11 | right: 0; 12 | bottom: 0; 13 | 14 | z-index: $z-index-loading; 15 | 16 | @include display-flex(); 17 | @include justify-content(center); 18 | @include align-items(center); 19 | 20 | @include transition(0.2s opacity linear); 21 | visibility: hidden; 22 | opacity: 0; 23 | 24 | &:not(.visible) .icon, 25 | &:not(.visible) .spinner{ 26 | display: none; 27 | } 28 | &.visible { 29 | visibility: visible; 30 | } 31 | &.active { 32 | opacity: 1; 33 | } 34 | 35 | .loading { 36 | padding: $loading-padding; 37 | 38 | border-radius: $loading-border-radius; 39 | background-color: $loading-bg-color; 40 | 41 | color: $loading-text-color; 42 | 43 | text-align: center; 44 | text-overflow: ellipsis; 45 | font-size: $loading-font-size; 46 | 47 | h1, h2, h3, h4, h5, h6 { 48 | color: $loading-text-color; 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/ionicons/_ionicons-font.scss: -------------------------------------------------------------------------------- 1 | // Ionicons Font Path 2 | // -------------------------- 3 | 4 | @font-face { 5 | font-family: $ionicons-font-family; 6 | src:url("#{$ionicons-font-path}/ionicons.eot?v=#{$ionicons-version}"); 7 | src:url("#{$ionicons-font-path}/ionicons.eot?v=#{$ionicons-version}#iefix") format("embedded-opentype"), 8 | url("#{$ionicons-font-path}/ionicons.ttf?v=#{$ionicons-version}") format("truetype"), 9 | url("#{$ionicons-font-path}/ionicons.woff?v=#{$ionicons-version}") format("woff"), 10 | url("#{$ionicons-font-path}/ionicons.woff") format("woff"), /* for WP8 */ 11 | url("#{$ionicons-font-path}/ionicons.svg?v=#{$ionicons-version}#Ionicons") format("svg"); 12 | font-weight: normal; 13 | font-style: normal; 14 | } 15 | 16 | .ion { 17 | display: inline-block; 18 | font-family: $ionicons-font-family; 19 | speak: none; 20 | font-style: normal; 21 | font-weight: normal; 22 | font-variant: normal; 23 | text-transform: none; 24 | text-rendering: auto; 25 | line-height: 1; 26 | -webkit-font-smoothing: antialiased; 27 | -moz-osx-font-smoothing: grayscale; 28 | } 29 | -------------------------------------------------------------------------------- /snapchap/www/app/components/addFriends/addFriends.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 |
    11 |
  • 12 |

    Add by Username

    13 |
  • 14 |
  • 15 |

    Add from Contacts

    16 |
  • 17 |
  • 18 |

    Add by Snapcode

    19 |
  • 20 |
  • 21 |

    Add Nearby

    22 |
  • 23 |
  • 24 |

    Share Username

    25 |
  • 26 | 27 |
28 | 29 |
30 | 31 |
32 | -------------------------------------------------------------------------------- /snapchap/www/app/components/myFriends/myFriends.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 |
11 | 12 | 13 |
14 | 15 | 27 | 28 |

MY FRIENDS

29 | 30 |
    31 |
  • 32 | {{friend.username}} 33 |
  • 34 |
35 | 36 |
37 | 38 |
39 | -------------------------------------------------------------------------------- /snapchap/www/app/components/signUp/signUp.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 |
9 |

What's your name?

10 |
11 |

FIRST NAME

12 | 13 |
14 |
15 |

LAST NAME

16 | 17 |
18 |

19 | By tapping Sign Up & Accept, you agree to the Terms of Service and Privacy Policy. 20 |

21 | 22 |
23 | 24 |
25 | 26 |
27 |
28 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/_radio.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Radio Button Inputs 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .item-radio { 8 | padding: 0; 9 | 10 | &:hover { 11 | cursor: pointer; 12 | } 13 | } 14 | 15 | .item-radio .item-content { 16 | /* give some room to the right for the checkmark icon */ 17 | padding-right: $item-padding * 4; 18 | } 19 | 20 | .item-radio .radio-icon { 21 | /* checkmark icon will be hidden by default */ 22 | position: absolute; 23 | top: 0; 24 | right: 0; 25 | z-index: $z-index-item-radio; 26 | visibility: hidden; 27 | padding: $item-padding - 2; 28 | height: 100%; 29 | font-size: 24px; 30 | } 31 | 32 | .item-radio input { 33 | /* hide any radio button inputs elements (the ugly circles) */ 34 | position: absolute; 35 | left: -9999px; 36 | 37 | &:checked + .radio-content .item-content { 38 | /* style the item content when its checked */ 39 | background: #f7f7f7; 40 | } 41 | 42 | &:checked + .radio-content .radio-icon { 43 | /* show the checkmark icon when its checked */ 44 | visibility: visible; 45 | } 46 | } 47 | 48 | -------------------------------------------------------------------------------- /snapchap/www/lib/ngCordova/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ngCordova", 3 | "version": "0.1.27-alpha", 4 | "homepage": "http://ngCordova.com/", 5 | "authors": [ 6 | "Max Lynch ", 7 | "Paolo Bernasconi ", 8 | "Chad Campbell " 9 | ], 10 | "description": "AngularJS Cordova wrappers for common Cordova plugins.", 11 | "main": [ 12 | "./dist/ng-cordova.js" 13 | ], 14 | "ignore": [ 15 | "**/.*", 16 | "gulpfile.js", 17 | "test", 18 | "src", 19 | "config", 20 | "demo", 21 | "CONTRIBUTING.md", 22 | "CODE_OF_CONDUCT.md" 23 | ], 24 | "dependencies": { 25 | "angular": ">= 1.2.23" 26 | }, 27 | "keywords": [ 28 | "ngCordova", 29 | "ng-cordova", 30 | "ngcordova", 31 | "ng cordova", 32 | "cordova", 33 | "phonegap", 34 | "angular", 35 | "angularjs", 36 | "ionic", 37 | "cordova plugin" 38 | ], 39 | "license": "MIT", 40 | "private": false, 41 | "devDependencies": { 42 | "angular": ">= 1.2.23", 43 | "angular-mocks": ">= 1.2.23", 44 | "jquery": "~2.1.1" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /snapchap/www/lib/ngCordova/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Drifty 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /snapchap/www/lib/angular-ui-router/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2014 The AngularUI Team, Karsten Sperling 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /snapchap/www/lib/angular-ui-router/src/stateFilters.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @ngdoc filter 3 | * @name ui.router.state.filter:isState 4 | * 5 | * @requires ui.router.state.$state 6 | * 7 | * @description 8 | * Translates to {@link ui.router.state.$state#methods_is $state.is("stateName")}. 9 | */ 10 | $IsStateFilter.$inject = ['$state']; 11 | function $IsStateFilter($state) { 12 | var isFilter = function (state) { 13 | return $state.is(state); 14 | }; 15 | isFilter.$stateful = true; 16 | return isFilter; 17 | } 18 | 19 | /** 20 | * @ngdoc filter 21 | * @name ui.router.state.filter:includedByState 22 | * 23 | * @requires ui.router.state.$state 24 | * 25 | * @description 26 | * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}. 27 | */ 28 | $IncludedByStateFilter.$inject = ['$state']; 29 | function $IncludedByStateFilter($state) { 30 | var includesFilter = function (state) { 31 | return $state.includes(state); 32 | }; 33 | includesFilter.$stateful = true; 34 | return includesFilter; 35 | } 36 | 37 | angular.module('ui.router.state') 38 | .filter('isState', $IsStateFilter) 39 | .filter('includedByState', $IncludedByStateFilter); 40 | -------------------------------------------------------------------------------- /snapchap/www/app/components/signUp/signUp.css: -------------------------------------------------------------------------------- 1 | #sign-up-view-back-btn { 2 | color: #9A3497; 3 | } 4 | 5 | #sign-up-view h3 { 6 | font-size: 1.4rem; 7 | margin: 7vh 0 0 0; 8 | } 9 | #sign-up-view__form div { 10 | position: relative; 11 | } 12 | 13 | #sign-up-view .heading { 14 | color: gray; 15 | display: flex; 16 | justify-content: flex-start; 17 | position: absolute; 18 | left: -3vw; 19 | bottom: 27px; 20 | font-size: 0.7rem; 21 | } 22 | 23 | #sign-up-view__form { 24 | width: 100vw; 25 | height: 67vh; 26 | background-color: white: ; 27 | display: flex; 28 | flex-direction: column; 29 | justify-content: flex-start; 30 | align-items: center; 31 | } 32 | 33 | #sign-up-view input { 34 | margin-top: 8vh; 35 | width: 90vw; 36 | } 37 | 38 | #sign-up-view__terms { 39 | margin-top: 2vh; 40 | padding: 0 5vw; 41 | } 42 | 43 | #sign-up-view__sign-up-btn { 44 | background-color: darkgray; 45 | font-size: 1.1rem; 46 | margin-top: 3vh; 47 | } 48 | 49 | #sign-up-view__form .valid{ 50 | background-color: #9A3497; 51 | } 52 | 53 | #sign-up-view__keyboard { 54 | width: 100vw; 55 | height: 33vh; 56 | background-color: lightgray; 57 | /*position: absolute;*/ 58 | /*top: calc(100vh - 180px);*/ 59 | } 60 | -------------------------------------------------------------------------------- /snapchap/www/app/components/name/nameCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('nameCtrl', function($scope, mainService, $state, $rootScope){ 2 | 3 | mainService.hideMenu(); 4 | 5 | $scope.saveButton = false; 6 | $scope.showSaveButton = function(firstName, lastName){ 7 | if(firstName !== '' || lastName !== ''){ 8 | $scope.saveButton = true 9 | } else $scope.saveButton = false 10 | } 11 | 12 | $scope.saveFirstName = function(firstName){ 13 | if (firstName) { 14 | mainService.updateFirstName($rootScope.userInfo.id, firstName).then(function(response){ 15 | if (response.data) { 16 | mainService.getCurrentUser().then(function(userInfo){ 17 | $rootScope.userInfo = userInfo; 18 | $state.go('settings') 19 | }) 20 | } 21 | }) 22 | } 23 | } 24 | 25 | $scope.saveLastName = function(lastName){ 26 | if (lastName) { 27 | mainService.updateLastName($rootScope.userInfo.id, lastName).then(function(response){ 28 | if (response.data) { 29 | mainService.getCurrentUser().then(function(userInfo){ 30 | $rootScope.userInfo = userInfo; 31 | $state.go('settings') 32 | }) 33 | } 34 | }) 35 | } 36 | } 37 | }) 38 | -------------------------------------------------------------------------------- /snapchap/www/app/components/name/name.css: -------------------------------------------------------------------------------- 1 | #name-view .nav-top-heading { 2 | color: #00A686; 3 | text-align: center; 4 | padding: 18px; 5 | border-bottom: thin solid rgba(150, 150, 150, 0.3); 6 | background-color: white; 7 | } 8 | #name-view .heading { 9 | display: flex; 10 | align-items: center; 11 | background-color: rgba(244, 244, 244, 1); 12 | padding-left: 14px; 13 | width: 100vw; 14 | height: 34px; 15 | border-bottom: thin solid rgba(150, 150, 150, 0.3); 16 | color: #00A686; 17 | margin-left: 0px; 18 | } 19 | #name-view__back-btn { 20 | z-index: 1; 21 | color: #00A686; 22 | } 23 | #name-text { 24 | color: rgba(150, 150, 150, 1); 25 | margin: 10px 0px; 26 | font-size: 0.7rem; 27 | line-height: 0.9rem; 28 | background-color: white; 29 | width: 100%; 30 | } 31 | #name-warning { 32 | text-align: center; 33 | color: rgba(150, 150, 150, 1); 34 | margin: 18px 10vw; 35 | font-size: 0.7rem; 36 | line-height: 0.9rem; 37 | } 38 | 39 | #name-view { 40 | background-color: rgba(240, 240, 240, 1); 41 | } 42 | 43 | #name-input { 44 | background-color: white; 45 | height: 50px; 46 | width: 100%; 47 | font-size: 1.2rem; 48 | color: rgba(50, 50, 50, 1); 49 | padding-left: 15px; 50 | display: flex; 51 | align-items: center; 52 | } 53 | -------------------------------------------------------------------------------- /snapchap/www/lib/ngCordova/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ng-cordova", 3 | "private": false, 4 | "main": "dist/ng-cordova", 5 | "version": "0.1.27-alpha", 6 | "repository": { 7 | "url": "git://github.com/driftyco/ng-cordova.git" 8 | }, 9 | "devDependencies": { 10 | "gulp": "^3.7.0", 11 | "gulp-concat": "^2.2.0", 12 | "gulp-footer": "^1.0.4", 13 | "gulp-header": "^1.0.2", 14 | "gulp-jscs": "^1.6.0", 15 | "gulp-jshint": "^1.6.1", 16 | "gulp-prettify": "^0.3.0", 17 | "gulp-rename": "^1.2.0", 18 | "gulp-shell": "^0.2.10", 19 | "gulp-uglify": "^0.2.1", 20 | "jasmine-core": "^2.4.1", 21 | "jshint-stylish": "^0.4.0", 22 | "karma": "^0.13.21", 23 | "karma-chrome-launcher": "~0.2.2", 24 | "karma-coverage": "~0.5.3", 25 | "karma-jasmine": "~0.3.7", 26 | "karma-phantomjs-launcher": "~1.0.0", 27 | "minimist": "^0.1.0", 28 | "phantomjs-prebuilt": "^2.1.4" 29 | }, 30 | "licenses": [ 31 | { 32 | "type": "MIT" 33 | } 34 | ], 35 | "scripts": { 36 | "test": "gulp lint && gulp karma --browsers=PhantomJS --reporters=progress" 37 | }, 38 | "dependencies": { 39 | "conventional-changelog": "0.0.11", 40 | "fs": "0.0.2", 41 | "gulp-git": "^1.2.4", 42 | "q": "^1.1.2" 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /snapchap/www/app/components/birthday/birthday.css: -------------------------------------------------------------------------------- 1 | #birthday-view .nav-top-heading { 2 | color: #00A686; 3 | text-align: center; 4 | padding: 18px; 5 | border-bottom: thin solid rgba(150, 150, 150, 0.3); 6 | background-color: white; 7 | } 8 | #birthday-view .heading { 9 | display: flex; 10 | align-items: center; 11 | background-color: rgba(244, 244, 244, 1); 12 | padding-left: 14px; 13 | width: 100vw; 14 | height: 34px; 15 | border-bottom: thin solid rgba(150, 150, 150, 0.3); 16 | color: #00A686; 17 | margin-left: 0px; 18 | } 19 | #birthday-view__back-btn { 20 | z-index: 1; 21 | color: #00A686; 22 | } 23 | #birthday-text { 24 | color: rgba(150, 150, 150, 1); 25 | margin: 10px 0px; 26 | font-size: 0.7rem; 27 | line-height: 0.9rem; 28 | background-color: white; 29 | width: 100%; 30 | } 31 | #birthday-warning { 32 | text-align: center; 33 | color: rgba(150, 150, 150, 1); 34 | margin: 18px 10vw; 35 | font-size: 0.7rem; 36 | line-height: 0.9rem; 37 | } 38 | 39 | #birthday-view { 40 | background-color: rgba(240, 240, 240, 1); 41 | } 42 | 43 | #birth-date { 44 | background-color: white; 45 | height: 50px; 46 | width: 100%; 47 | font-size: 1.2rem; 48 | color: rgba(50, 50, 50, 1); 49 | padding-left: 15px; 50 | display: flex; 51 | align-items: center; 52 | } 53 | -------------------------------------------------------------------------------- /snapchap/www/app/components/logIn/logIn.css: -------------------------------------------------------------------------------- 1 | #log-in-view-back-btn { 2 | color: #9A3497; 3 | } 4 | 5 | #log-in-view h3 { 6 | font-size: 1.4rem; 7 | margin: 12vh 0 0 0; 8 | } 9 | 10 | #log-in-view__form div { 11 | position: relative; 12 | } 13 | 14 | #log-in-view .heading { 15 | color: gray; 16 | display: flex; 17 | justify-content: flex-start; 18 | position: absolute; 19 | left: -3vw; 20 | bottom: 27px; 21 | font-size: 0.7rem; 22 | } 23 | 24 | #log-in-view__form { 25 | width: 100vw; 26 | height: 67vh; 27 | background-color: white: ; 28 | display: flex; 29 | flex-direction: column; 30 | justify-content: flex-start; 31 | align-items: center; 32 | } 33 | 34 | #log-in-view input { 35 | margin-top: 8vh; 36 | width: 90vw; 37 | } 38 | 39 | #incorrect-information-message { 40 | color: red; 41 | } 42 | 43 | #forgot-your-password { 44 | margin-top: 2vh; 45 | padding: 0 5vw; 46 | } 47 | 48 | #log-in-view__log-in-btn { 49 | background-color: darkgray; 50 | font-size: 1.1rem; 51 | margin-top: 3vh; 52 | padding-left: 70px; 53 | padding-right: 70px; 54 | } 55 | 56 | #log-in-view__form .valid{ 57 | background-color: #9A3497; 58 | } 59 | 60 | #log-in-view__keyboard { 61 | width: 100vw; 62 | height: 33vh; 63 | background-color: lightgray; 64 | /*position: absolute;*/ 65 | /*top: calc(100vh - 180px);*/ 66 | } 67 | -------------------------------------------------------------------------------- /snapchap/www/app/components/email/email.css: -------------------------------------------------------------------------------- 1 | #email-view .nav-top-heading { 2 | color: #00A686; 3 | text-align: center; 4 | padding: 18px; 5 | border-bottom: thin solid rgba(150, 150, 150, 0.3); 6 | background-color: white; 7 | } 8 | #email-view .heading { 9 | display: flex; 10 | align-items: center; 11 | background-color: rgba(244, 244, 244, 1); 12 | padding-left: 14px; 13 | width: 100vw; 14 | height: 34px; 15 | border-bottom: thin solid rgba(150, 150, 150, 0.3); 16 | color: #00A686; 17 | margin-left: 0px; 18 | } 19 | #email-view__back-btn { 20 | z-index: 1; 21 | color: #00A686; 22 | } 23 | #email-text { 24 | color: rgba(150, 150, 150, 1); 25 | margin: 10px 0px; 26 | font-size: 0.7rem; 27 | line-height: 0.9rem; 28 | background-color: white; 29 | width: 100%; 30 | } 31 | #email-warning { 32 | text-align: center; 33 | color: rgba(150, 150, 150, 1); 34 | margin: 18px 10vw; 35 | font-size: 0.7rem; 36 | line-height: 0.9rem; 37 | } 38 | 39 | #email-view { 40 | background-color: rgba(240, 240, 240, 1); 41 | } 42 | 43 | #email-input { 44 | background-color: white; 45 | height: 50px; 46 | width: 100%; 47 | font-size: 1.2rem; 48 | color: rgba(50, 50, 50, 1); 49 | padding-left: 15px; 50 | display: flex; 51 | align-items: center; 52 | } 53 | 54 | #email-continue-button { 55 | position: relative; 56 | left: 0 57 | } 58 | -------------------------------------------------------------------------------- /snapchap/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "snapchat", 3 | "version": "1.1.1", 4 | "description": "snapchat: An Ionic project", 5 | "scripts": { 6 | "start": "node server.js", 7 | "postinstall": "bower install && npm i && gulp" 8 | }, 9 | "engine": { 10 | "node": "6.8.0" 11 | }, 12 | "dependencies": { 13 | "aws-sdk": "^2.6.12", 14 | "body-parser": "^1.15.2", 15 | "bower": "^1.7.9", 16 | "cordova": "^6.3.1", 17 | "cors": "^2.8.1", 18 | "express": "^4.14.0", 19 | "gulp": "^3.5.6", 20 | "gulp-concat": "^2.2.0", 21 | "gulp-minify-css": "^0.3.0", 22 | "gulp-rename": "^1.2.0", 23 | "gulp-sass": "^2.0.4", 24 | "jwt-simple": "^0.5.0", 25 | "massive": "^2.5.0", 26 | "moment": "^2.15.2", 27 | "pg": "6.1.0", 28 | "s3fs": "git+https://github.com/RiptideElements/s3fs.git", 29 | "socket.io": "^1.5.1", 30 | "bower": "^1.3.3", 31 | "gulp-util": "^2.2.14", 32 | "shelljs": "^0.3.0" 33 | }, 34 | "cordovaPlugins": [ 35 | "cordova-plugin-device", 36 | "cordova-plugin-console", 37 | "cordova-plugin-whitelist", 38 | "cordova-plugin-splashscreen", 39 | "cordova-plugin-statusbar", 40 | "ionic-plugin-keyboard" 41 | ], 42 | "cordovaPlatforms": [ 43 | "ios", 44 | { 45 | "platform": "ios", 46 | "version": "", 47 | "locator": "ios" 48 | } 49 | ] 50 | } 51 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/_animations.scss: -------------------------------------------------------------------------------- 1 | 2 | // Slide up from the bottom, used for modals 3 | // ------------------------------- 4 | 5 | .slide-in-up { 6 | @include translate3d(0, 100%, 0); 7 | } 8 | .slide-in-up.ng-enter, 9 | .slide-in-up > .ng-enter { 10 | @include transition(all cubic-bezier(.1, .7, .1, 1) 400ms); 11 | } 12 | .slide-in-up.ng-enter-active, 13 | .slide-in-up > .ng-enter-active { 14 | @include translate3d(0, 0, 0); 15 | } 16 | 17 | .slide-in-up.ng-leave, 18 | .slide-in-up > .ng-leave { 19 | @include transition(all ease-in-out 250ms); 20 | } 21 | 22 | 23 | // Scale Out 24 | // Scale from hero (1 in this case) to zero 25 | // ------------------------------- 26 | 27 | @-webkit-keyframes scaleOut { 28 | from { -webkit-transform: scale(1); opacity: 1; } 29 | to { -webkit-transform: scale(0.8); opacity: 0; } 30 | } 31 | @keyframes scaleOut { 32 | from { transform: scale(1); opacity: 1; } 33 | to { transform: scale(0.8); opacity: 0; } 34 | } 35 | 36 | 37 | // Super Scale In 38 | // Scale from super (1.x) to duper (1 in this case) 39 | // ------------------------------- 40 | 41 | @-webkit-keyframes superScaleIn { 42 | from { -webkit-transform: scale(1.2); opacity: 0; } 43 | to { -webkit-transform: scale(1); opacity: 1 } 44 | } 45 | @keyframes superScaleIn { 46 | from { transform: scale(1.2); opacity: 0; } 47 | to { transform: scale(1); opacity: 1; } 48 | } 49 | -------------------------------------------------------------------------------- /snapchap/www/app/components/addUsername/addUsername.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 |
11 | 12 | 13 |
14 | 15 |
    16 |
  • 17 |

    {{user.first_name}} {{user.last_name}}

    18 |

    {{user.username}}

    19 | 20 |
  • 21 |
22 |
23 |
24 |

{{userInfo.username}}

25 |

is your username

26 |
27 | 28 |
29 |

{{userInfo.first_name}} {{userInfo.last_name}}

30 |

is how you appear on Snapchat

31 |
32 |
33 | 34 | 35 |
36 | 37 |
38 | -------------------------------------------------------------------------------- /snapchap/www/app/components/signUp/signUp-email/signUp-emailCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('signUp-emailCtrl', function($scope, $state, tempService, $auth, mainService, $rootScope){ 2 | 3 | $scope.createUser = tempService.createUser; 4 | 5 | var password = $scope.createUser.password; 6 | 7 | $scope.createEmail = function(email){ 8 | $scope.createUser.email = email; 9 | console.log(tempService.createUser); 10 | $auth.signup(tempService.createUser).then(function (response) { 11 | console.log("signUpCtrl:", response); 12 | setTimeout(function() { 13 | $scope.login(email, password); 14 | }, 500); 15 | }).catch(function (response) { 16 | console.log("signUpCtrl Error:", response); 17 | }); 18 | }; 19 | 20 | 21 | $scope.login = function(email, password) { 22 | console.log(email, password); 23 | $auth.login({ 24 | email: email, 25 | password: password, 26 | }).then(function (response) { 27 | console.log("signUpCtrl:", response); 28 | if(response.status === 200){ 29 | $auth.setToken(response) 30 | mainService.getCurrentUser().then(function(userInfo){ 31 | $rootScope.userInfo = userInfo; 32 | $rootScope.connect(); //dont move this 33 | }) 34 | $state.go('camera'); 35 | } 36 | }).catch(function (response) { 37 | console.log("signUpCtrl Error:", response); 38 | }); 39 | }; 40 | 41 | }) 42 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/_slide-box.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Slide Box 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .slider { 8 | position: relative; 9 | visibility: hidden; 10 | // Make sure items don't scroll over ever 11 | overflow: hidden; 12 | } 13 | 14 | .slider-slides { 15 | position: relative; 16 | height: 100%; 17 | } 18 | 19 | .slider-slide { 20 | position: relative; 21 | display: block; 22 | float: left; 23 | width: 100%; 24 | height: 100%; 25 | vertical-align: top; 26 | } 27 | 28 | .slider-slide-image { 29 | > img { 30 | width: 100%; 31 | } 32 | } 33 | 34 | .slider-pager { 35 | position: absolute; 36 | bottom: 20px; 37 | z-index: $z-index-slider-pager; 38 | width: 100%; 39 | height: 15px; 40 | text-align: center; 41 | 42 | .slider-pager-page { 43 | display: inline-block; 44 | margin: 0px 3px; 45 | width: 15px; 46 | color: #000; 47 | text-decoration: none; 48 | 49 | opacity: 0.3; 50 | 51 | &.active { 52 | @include transition(opacity 0.4s ease-in); 53 | opacity: 1; 54 | } 55 | } 56 | } 57 | 58 | //Disable animate service animations 59 | .slider-slide, 60 | .slider-pager-page { 61 | &.ng-enter, 62 | &.ng-leave, 63 | &.ng-animate { 64 | -webkit-transition: none !important; 65 | transition: none !important; 66 | } 67 | &.ng-animate { 68 | -webkit-animation: none 0s; 69 | animation: none 0s; 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /snapchap/www/app/components/confirmPassword/confirmPassword.css: -------------------------------------------------------------------------------- 1 | #confirm-password-view .nav-top-heading { 2 | color: #00A686; 3 | text-align: center; 4 | padding: 18px; 5 | border-bottom: thin solid rgba(150, 150, 150, 0.3); 6 | background-color: white; 7 | } 8 | #confirm-password-view .heading { 9 | display: flex; 10 | align-items: center; 11 | background-color: rgba(244, 244, 244, 1); 12 | padding-left: 14px; 13 | width: 100vw; 14 | height: 34px; 15 | border-bottom: thin solid rgba(150, 150, 150, 0.3); 16 | color: #00A686; 17 | margin-left: 0px; 18 | } 19 | #confirm-password-view__back-btn { 20 | z-index: 1; 21 | color: #00A686; 22 | } 23 | #confirm-password-text { 24 | color: rgba(150, 150, 150, 1); 25 | margin: 10px 0px; 26 | font-size: 0.7rem; 27 | line-height: 0.9rem; 28 | background-color: white; 29 | width: 100%; 30 | } 31 | #confirm-password-warning { 32 | text-align: center; 33 | color: rgba(150, 150, 150, 1); 34 | margin: 18px 10vw; 35 | font-size: 0.7rem; 36 | line-height: 0.9rem; 37 | } 38 | 39 | #confirm-password-view { 40 | background-color: rgba(240, 240, 240, 1); 41 | } 42 | 43 | #confirm-password-input { 44 | background-color: white; 45 | height: 50px; 46 | width: 100%; 47 | font-size: 1.2rem; 48 | color: rgba(50, 50, 50, 1); 49 | padding-left: 15px; 50 | display: flex; 51 | align-items: center; 52 | } 53 | 54 | #confirm-password-continue-button { 55 | position: relative; 56 | left: 0; 57 | } 58 | -------------------------------------------------------------------------------- /snapchap/www/lib/ngCordova/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ngCordova", 3 | "version": "0.1.27-alpha", 4 | "homepage": "http://ngCordova.com/", 5 | "authors": [ 6 | "Max Lynch ", 7 | "Paolo Bernasconi ", 8 | "Chad Campbell " 9 | ], 10 | "description": "AngularJS Cordova wrappers for common Cordova plugins.", 11 | "main": [ 12 | "./dist/ng-cordova.js" 13 | ], 14 | "ignore": [ 15 | "**/.*", 16 | "gulpfile.js", 17 | "test", 18 | "src", 19 | "config", 20 | "demo", 21 | "CONTRIBUTING.md", 22 | "CODE_OF_CONDUCT.md" 23 | ], 24 | "dependencies": { 25 | "angular": ">= 1.2.23" 26 | }, 27 | "keywords": [ 28 | "ngCordova", 29 | "ng-cordova", 30 | "ngcordova", 31 | "ng cordova", 32 | "cordova", 33 | "phonegap", 34 | "angular", 35 | "angularjs", 36 | "ionic", 37 | "cordova plugin" 38 | ], 39 | "license": "MIT", 40 | "private": false, 41 | "devDependencies": { 42 | "angular": ">= 1.2.23", 43 | "angular-mocks": ">= 1.2.23", 44 | "jquery": "~2.1.1" 45 | }, 46 | "_release": "0.1.27-alpha", 47 | "_resolution": { 48 | "type": "version", 49 | "tag": "v0.1.27-alpha", 50 | "commit": "5d0450d887275c70ec227ef9b30e3e3f15646cb9" 51 | }, 52 | "_source": "https://github.com/driftyco/ng-cordova.git", 53 | "_target": "^0.1.27-alpha", 54 | "_originalSource": "ngCordova", 55 | "_direct": true 56 | } -------------------------------------------------------------------------------- /snapchap/www/app/components/newPassword/newPassword.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 |
9 | Please choose a new password. Strong
passwords use a combination of lowercase
and uppercase letters, numbers, and symbols. 10 |
11 | 12 | 13 |
14 |
15 | weak 16 | 17 |
18 |
19 | ok 20 | 21 |
22 |
23 | strong 24 | 25 |
26 |
27 | 28 | 29 | 30 | 31 |
32 |
33 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/_menu.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Menus 4 | * -------------------------------------------------- 5 | * Side panel structure 6 | */ 7 | 8 | .menu { 9 | position: absolute; 10 | top: 0; 11 | bottom: 0; 12 | z-index: $z-index-menu; 13 | overflow: hidden; 14 | 15 | min-height: 100%; 16 | max-height: 100%; 17 | width: $menu-width; 18 | 19 | background-color: $menu-bg; 20 | 21 | .scroll-content { 22 | z-index: $z-index-menu-scroll-content; 23 | } 24 | 25 | .bar-header { 26 | z-index: $z-index-menu-bar-header; 27 | } 28 | } 29 | 30 | .menu-content { 31 | @include transform(none); 32 | box-shadow: $menu-side-shadow; 33 | } 34 | 35 | .menu-open .menu-content .pane, 36 | .menu-open .menu-content .scroll-content { 37 | pointer-events: none; 38 | } 39 | .menu-open .menu-content .scroll-content .scroll { 40 | pointer-events: none; 41 | } 42 | .menu-open .menu-content .scroll-content:not(.overflow-scroll) { 43 | overflow: hidden; 44 | } 45 | 46 | .grade-b .menu-content, 47 | .grade-c .menu-content { 48 | @include box-sizing(content-box); 49 | right: -1px; 50 | left: -1px; 51 | border-right: 1px solid #ccc; 52 | border-left: 1px solid #ccc; 53 | box-shadow: none; 54 | } 55 | 56 | .menu-left { 57 | left: 0; 58 | } 59 | 60 | .menu-right { 61 | right: 0; 62 | } 63 | 64 | .aside-open.aside-resizing .menu-right { 65 | display: none; 66 | } 67 | 68 | .menu-animated { 69 | @include transition-transform($menu-animation-speed ease); 70 | } 71 | -------------------------------------------------------------------------------- /snapchap/www/app/components/profile/profile.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 |
10 |
11 |

{{userInfo.first_name}} {{userInfo.last_name}}

12 |

username: {{userInfo.username}}

13 | 14 |
Added Me
15 |
Add Friends
16 |
My Friends
17 | 18 |
19 | 20 |
21 |
22 | -------------------------------------------------------------------------------- /snapchap/www/app/components/myFriends/myFriends.css: -------------------------------------------------------------------------------- 1 | #my-friends-view nav { 2 | color: #9A3497; 3 | font-size: 1.4rem; 4 | /*font-size: 0.7rem;*/ 5 | text-align: center; 6 | padding: 18px; 7 | margin-top: 10px; 8 | background-color: #fff; 9 | } 10 | #my-friends-view .heading { 11 | display: flex; 12 | align-items: center; 13 | padding-left: 10px; 14 | width: 100vw; 15 | height: 40px; 16 | color: #9A3497; 17 | margin-bottom: -5px; 18 | } 19 | #my-friends-view ul { 20 | font-size: 1rem; 21 | } 22 | #my-friends-view li { 23 | color: black; 24 | padding: 17px 0; 25 | border-bottom: thin solid rgba(150, 150, 150, 0.5); 26 | position: relative; 27 | } 28 | #my-friends-view ul>li>span { 29 | position: relative; 30 | left: 70px; 31 | } 32 | #my-friends-view ul>li>span:before { 33 | content: ''; 34 | height: 40px; 35 | width: 40px; 36 | position: absolute; 37 | left: -55px; 38 | top: -12px; 39 | background-image: url('../../../img/icon/snapchat-bw.png'); 40 | -webkit-background-size: 40px; 41 | background-size: 40px; 42 | } 43 | #my-friends-view_back-btn { 44 | font-size: 1.7rem; 45 | color: #9A3497; 46 | left: 15px; 47 | top: 8px; 48 | } 49 | 50 | 51 | #my-friends-view__form { 52 | position: relative; 53 | border-top: thin solid rgba(150, 150, 150, 0.5); 54 | border-bottom: thin solid rgba(150, 150, 150, 0.5); 55 | display: flex; 56 | justify-content: center; 57 | align-items: center; 58 | } 59 | 60 | #my-friends-view input { 61 | position: relative; 62 | width: 100vw; 63 | left: 39px; 64 | font-size: 1.2em; 65 | padding: 22px 0; 66 | } 67 | -------------------------------------------------------------------------------- /snapchap/gulpfile.js: -------------------------------------------------------------------------------- 1 | var gulp = require('gulp'); 2 | var gutil = require('gulp-util'); 3 | var bower = require('bower'); 4 | var concat = require('gulp-concat'); 5 | var sass = require('gulp-sass'); 6 | var minifyCss = require('gulp-minify-css'); 7 | var rename = require('gulp-rename'); 8 | var sh = require('shelljs'); 9 | 10 | var paths = { 11 | sass: ['./scss/**/*.scss'] 12 | // sass: ['./**/main.css'] 13 | }; 14 | 15 | gulp.task('default', ['sass']); 16 | 17 | gulp.task('sass', function(done) { 18 | gulp.src('./scss/ionic.app.scss') 19 | .pipe(sass()) 20 | .on('error', sass.logError) 21 | .pipe(gulp.dest('./www/css/')) 22 | .pipe(minifyCss({ 23 | keepSpecialComments: 0 24 | })) 25 | .pipe(rename({ extname: '.min.css' })) 26 | .pipe(gulp.dest('./www/css/')) 27 | .on('end', done); 28 | }); 29 | 30 | gulp.task('watch', function() { 31 | gulp.watch(paths.sass, ['sass']); 32 | }); 33 | 34 | gulp.task('install', ['git-check'], function() { 35 | return bower.commands.install() 36 | .on('log', function(data) { 37 | gutil.log('bower', gutil.colors.cyan(data.id), data.message); 38 | }); 39 | }); 40 | 41 | gulp.task('git-check', function(done) { 42 | if (!sh.which('git')) { 43 | console.log( 44 | ' ' + gutil.colors.red('Git is not installed.'), 45 | '\n Git, the version control system, is required to download Ionic.', 46 | '\n Download git here:', gutil.colors.cyan('http://git-scm.com/downloads') + '.', 47 | '\n Once git is installed, run \'' + gutil.colors.cyan('gulp install') + '\' again.' 48 | ); 49 | process.exit(1); 50 | } 51 | done(); 52 | }); 53 | -------------------------------------------------------------------------------- /snapchap/www/app/components/newPassword/newPasswordCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('newPasswordCtrl', function($scope, mainService, $state, $rootScope){ 2 | 3 | mainService.hideMenu(); 4 | 5 | $scope.saveButton = false; 6 | $scope.weak = false; 7 | $scope.ok = false; 8 | $scope.strong = false; 9 | 10 | 11 | $scope.verifyPasswordStrength = function(newPassword){ 12 | if(/\d/g.test(newPassword) && newPassword.length > 8){ 13 | $scope.weak = false; 14 | $scope.ok = false; 15 | $scope.strong = true; 16 | } 17 | if(!(/\d/g.test(newPassword)) && newPassword.length > 12) { 18 | $scope.weak = false; 19 | $scope.ok = true; 20 | $scope.strong = false; 21 | } 22 | if (!(/\d/g.test(newPassword)) && newPassword.length < 12 && newPassword.length !== 0) { 23 | $scope.weak = true; 24 | $scope.ok = false; 25 | $scope.strong = false; 26 | } 27 | else if (newPassword === '') { 28 | $scope.weak = false; 29 | $scope.ok = false; 30 | $scope.strong = false; 31 | } 32 | } 33 | 34 | $scope.verifyPasswordsMatch = function(newPassword, confirmPassword){ 35 | if (newPassword === confirmPassword) $scope.saveButton = true; 36 | else $scope.saveButton = false; 37 | } 38 | 39 | $scope.saveNewPassword = function(confirmPassword){ 40 | mainService.updatePassword($rootScope.userInfo.id, confirmPassword).then(function(response){ 41 | console.log(response); 42 | if (response.data) { 43 | mainService.getCurrentUser().then(function(userInfo){ 44 | $rootScope.userInfo = userInfo; 45 | $state.go('settings') 46 | }) 47 | } 48 | }) 49 | } 50 | 51 | }) 52 | -------------------------------------------------------------------------------- /snapchap/www/lib/angular-ui-router/src/viewScroll.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @ngdoc object 3 | * @name ui.router.state.$uiViewScrollProvider 4 | * 5 | * @description 6 | * Provider that returns the {@link ui.router.state.$uiViewScroll} service function. 7 | */ 8 | function $ViewScrollProvider() { 9 | 10 | var useAnchorScroll = false; 11 | 12 | /** 13 | * @ngdoc function 14 | * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll 15 | * @methodOf ui.router.state.$uiViewScrollProvider 16 | * 17 | * @description 18 | * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for 19 | * scrolling based on the url anchor. 20 | */ 21 | this.useAnchorScroll = function () { 22 | useAnchorScroll = true; 23 | }; 24 | 25 | /** 26 | * @ngdoc object 27 | * @name ui.router.state.$uiViewScroll 28 | * 29 | * @requires $anchorScroll 30 | * @requires $timeout 31 | * 32 | * @description 33 | * When called with a jqLite element, it scrolls the element into view (after a 34 | * `$timeout` so the DOM has time to refresh). 35 | * 36 | * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor, 37 | * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}. 38 | */ 39 | this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) { 40 | if (useAnchorScroll) { 41 | return $anchorScroll; 42 | } 43 | 44 | return function ($element) { 45 | $timeout(function () { 46 | $element[0].scrollIntoView(); 47 | }, 0, false); 48 | }; 49 | }]; 50 | } 51 | 52 | angular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider); 53 | -------------------------------------------------------------------------------- /snapchap/www/app/components/camera/camera.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/_badge.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Badges 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .badge { 8 | @include badge-style($badge-default-bg, $badge-default-text); 9 | z-index: $z-index-badge; 10 | display: inline-block; 11 | padding: 3px 8px; 12 | min-width: 10px; 13 | border-radius: $badge-border-radius; 14 | vertical-align: baseline; 15 | text-align: center; 16 | white-space: nowrap; 17 | font-weight: $badge-font-weight; 18 | font-size: $badge-font-size; 19 | line-height: $badge-line-height; 20 | 21 | &:empty { 22 | display: none; 23 | } 24 | } 25 | 26 | //Be sure to override specificity of rule that 'badge color matches tab color by default' 27 | .tabs .tab-item .badge, 28 | .badge { 29 | &.badge-light { 30 | @include badge-style($badge-light-bg, $badge-light-text); 31 | } 32 | &.badge-stable { 33 | @include badge-style($badge-stable-bg, $badge-stable-text); 34 | } 35 | &.badge-positive { 36 | @include badge-style($badge-positive-bg, $badge-positive-text); 37 | } 38 | &.badge-calm { 39 | @include badge-style($badge-calm-bg, $badge-calm-text); 40 | } 41 | &.badge-assertive { 42 | @include badge-style($badge-assertive-bg, $badge-assertive-text); 43 | } 44 | &.badge-balanced { 45 | @include badge-style($badge-balanced-bg, $badge-balanced-text); 46 | } 47 | &.badge-energized { 48 | @include badge-style($badge-energized-bg, $badge-energized-text); 49 | } 50 | &.badge-royal { 51 | @include badge-style($badge-royal-bg, $badge-royal-text); 52 | } 53 | &.badge-dark { 54 | @include badge-style($badge-dark-bg, $badge-dark-text); 55 | } 56 | } 57 | 58 | // Quick fix for labels/badges in buttons 59 | .button .badge { 60 | position: relative; 61 | top: -1px; 62 | } 63 | -------------------------------------------------------------------------------- /snapchap/www/app/components/profile/profile.css: -------------------------------------------------------------------------------- 1 | #profile-view__main-content { 2 | height: 100vh; 3 | } 4 | 5 | #profile-view { 6 | height: 100%; 7 | background-color: rgb(20, 20, 20); 8 | color: white; 9 | } 10 | 11 | #profile-view__main-content { 12 | display: flex; 13 | flex-direction: column; 14 | justify-content: flex-start; 15 | align-items: center; 16 | position: relative; 17 | top: 87px; 18 | } 19 | 20 | #snap-confetti { 21 | /*margin-top: 10vh;*/ 22 | height: 50vw; 23 | width: 50vw; 24 | position: relative; 25 | } 26 | 27 | #snap-confetti span { 28 | background-image: url('../../../img/snapchap-doodle300.png'); 29 | -webkit-background-size: 50vw; 30 | background-size: 50vw; 31 | background-repeat: no-repeat;; 32 | height: 60vw; 33 | width: 50vw; 34 | position: absolute; 35 | top: -20px; 36 | } 37 | 38 | #profile-view__share-btn { 39 | background-image: url('../../../img/icon/share-white.png'); 40 | cursor: pointer; 41 | 42 | } 43 | #profile-view__trophy-btn { 44 | background-image: url('../../../img/icon/trophy-white.png'); 45 | cursor: pointer; 46 | 47 | } 48 | #profile-view__settings-btn { 49 | background-image: url('../../../img/icon/settings-white.png'); 50 | cursor: pointer; 51 | 52 | } 53 | 54 | .profile-view__display-name { 55 | font-size: 1.05rem; 56 | margin-top: 1vh; 57 | } 58 | 59 | .profile-view__username { 60 | font-size: .85rem; 61 | margin-top: -10px; 62 | } 63 | 64 | .profile-view__main-content-btn { 65 | font-size: 1.4rem; 66 | margin-top: 5vh; 67 | } 68 | 69 | #profile-view__camera-btn { 70 | background-image: url('../../../img/icon/circle-white-big.png'); 71 | width: 64px; 72 | height: 64px; 73 | margin-top: 5vh; 74 | -webkit-background-size: 64px; 75 | background-size: 64px; 76 | cursor: pointer; 77 | } 78 | -------------------------------------------------------------------------------- /snapchap/www/app/components/newPassword/newPassword.css: -------------------------------------------------------------------------------- 1 | #newPassword-view .nav-top-heading { 2 | color: #00A686; 3 | text-align: center; 4 | padding: 18px; 5 | border-bottom: thin solid rgba(150, 150, 150, 0.3); 6 | background-color: white; 7 | } 8 | #newPassword-view .heading { 9 | display: flex; 10 | align-items: center; 11 | background-color: rgba(244, 244, 244, 1); 12 | padding-left: 14px; 13 | width: 100vw; 14 | height: 34px; 15 | border-bottom: thin solid rgba(150, 150, 150, 0.3); 16 | color: #00A686; 17 | margin-left: 0px; 18 | } 19 | #newPassword-view__back-btn { 20 | z-index: 1; 21 | color: #00A686; 22 | } 23 | #newPassword-text { 24 | color: rgba(150, 150, 150, 1); 25 | margin: 10px 0px; 26 | font-size: 0.7rem; 27 | line-height: 0.9rem; 28 | background-color: white; 29 | width: 100%; 30 | } 31 | #newPassword-warning { 32 | text-align: center; 33 | color: rgba(150, 150, 150, 1); 34 | margin: 18px 10vw; 35 | font-size: 0.7rem; 36 | line-height: 0.9rem; 37 | } 38 | 39 | #newPassword-view { 40 | background-color: rgba(240, 240, 240, 1); 41 | } 42 | 43 | #newPassword-input { 44 | background-color: white; 45 | height: 50px; 46 | width: 100%; 47 | font-size: 1.2rem; 48 | color: rgba(50, 50, 50, 1); 49 | padding-left: 15px; 50 | display: flex; 51 | align-items: center; 52 | margin-bottom: 1px; 53 | } 54 | 55 | #newPassword-button { 56 | position: relative; 57 | left: 31%; 58 | margin-top: 20px; 59 | color: blue; 60 | outline: none; 61 | } 62 | 63 | #weak-emoji { 64 | position: relative; 65 | top: -87px; 66 | left: 79vw; 67 | color: red; 68 | } 69 | 70 | #ok-emoji { 71 | position: relative; 72 | top: -87px; 73 | left: 85vw; 74 | color: orange; 75 | } 76 | 77 | #strong-emoji { 78 | position: relative; 79 | top: -87px; 80 | left: 79vw; 81 | color: green; 82 | } 83 | -------------------------------------------------------------------------------- /snapchap/www/app/components/addFriends/addFriends.css: -------------------------------------------------------------------------------- 1 | #add-friends-view nav { 2 | color: rgba(154, 52, 151, 1); 3 | font-size: 1.4rem; 4 | text-align: center; 5 | padding: 18px; 6 | margin-top: 10px; 7 | background-color: #fff; 8 | border-bottom: thin solid lightgray; 9 | } 10 | #add-friends-view .heading { 11 | display: flex; 12 | align-items: center; 13 | padding-left: 10px; 14 | width: 100vw; 15 | height: 40px; 16 | color: rgba(154, 52, 151, 1); 17 | } 18 | #add-friends-view__back-btn { 19 | font-size: 1.7rem; 20 | color: rgba(154, 52, 151, 1); 21 | left: 15px; 22 | top: 8px; 23 | } 24 | 25 | #add-friends-view li { 26 | padding: 13px 9px; 27 | border-bottom: thin solid lightgray; 28 | position: relative; 29 | line-height: 1em; 30 | } 31 | 32 | .add-friends-view__add-option { 33 | padding: 13px 0 0 9px; 34 | font-size: 1.1rem; 35 | position: relative; 36 | left: 30px; 37 | } 38 | .add-friends-view__add-option:before { 39 | content: ''; 40 | height: 27px; 41 | width: 27px; 42 | position: absolute; 43 | left: -25px; 44 | top: 7px; 45 | color: black; 46 | background-image: url('../../../img/icon/ghost.png'); 47 | -webkit-background-size: 27px; 48 | background-size: 27px; 49 | } 50 | 51 | #add-by-username:before { 52 | background-image: url('../../../img/icon/search-gray.png'); 53 | } 54 | #add-from-contacts:before { 55 | background-image: url('../../../img/icon/contacts-gray.png'); 56 | } 57 | #add-by-snapcode:before { 58 | background-image: url('../../../img/icon/snapchat-box-gray.png'); 59 | } 60 | #add-nearby:before { 61 | background-image: url('../../../img/icon/wifi-gray.png'); 62 | } 63 | #share-username:before { 64 | background-image: url('../../../img/icon/share-gray.png'); 65 | } 66 | 67 | #add-friends-view .forward-btn { 68 | color: gray; 69 | right: 30px; 70 | top: 4px; 71 | font-size: 1.3rem; 72 | } 73 | -------------------------------------------------------------------------------- /snapchap/www/app/components/addedMe/addedMe.css: -------------------------------------------------------------------------------- 1 | #added-me-view nav { 2 | color: rgba(154, 52, 151, 1); 3 | font-size: 1.4rem; 4 | text-align: center; 5 | padding: 18px; 6 | margin-top: 10px; 7 | background-color: #fff; 8 | border-bottom: thin solid lightgray; 9 | } 10 | #added-me-view .heading { 11 | display: flex; 12 | align-items: center; 13 | padding-left: 10px; 14 | width: 100vw; 15 | height: 40px; 16 | color: rgba(154, 52, 151, 1); 17 | } 18 | #added-me-view_back-btn { 19 | font-size: 1.7rem; 20 | color: rgba(154, 52, 151, 1); 21 | left: 15px; 22 | top: 8px; 23 | } 24 | 25 | #added-me-view li { 26 | padding: 13px 9px; 27 | border-bottom: thin solid lightgray; 28 | position: relative; 29 | line-height: 1em; 30 | } 31 | 32 | .added-me-view__display-name, 33 | .added-me-view__username { 34 | padding: 13px 0 0 9px; 35 | font-size: 1rem; 36 | position: relative; 37 | left: 50px; 38 | } 39 | .added-me-view__display-name:before { 40 | content: ''; 41 | height: 50px; 42 | width: 50px; 43 | position: absolute; 44 | left: -45px; 45 | top: 5px; 46 | color: black; 47 | background-image: url('../../../img/icon/snapchat-gray.png'); 48 | -webkit-background-size: 50px; 49 | background-size: 50px; 50 | } 51 | .added-me-view__username { 52 | padding: 0 0 0 9px; 53 | color: gray; 54 | font-size: 0.7rem; 55 | } 56 | 57 | #added-me-view .added-me-view__add-btn { 58 | position: absolute; 59 | padding: 7px 17px 7px 35px; 60 | top: 50%; 61 | transform: translateY(-50%); 62 | right: 20px; 63 | color: rgba(154, 52, 151, 1); 64 | border: thin solid rgba(154, 52, 151, 0.5); 65 | font-size: 1rem; 66 | font-weight: bold; 67 | background-color: rgba(255, 255, 255, 0); 68 | } 69 | 70 | .added-me-view__add-btn__plus:before { 71 | content: '+'; 72 | position: absolute; 73 | font-size: 1.7rem; 74 | left: 10px; 75 | bottom: -1px; 76 | } 77 | -------------------------------------------------------------------------------- /snapchap/www/app/components/password/password.css: -------------------------------------------------------------------------------- 1 | #password-view .nav-top-heading { 2 | color: #00A686; 3 | text-align: center; 4 | padding: 18px; 5 | border-bottom: thin solid rgba(150, 150, 150, 0.3); 6 | background-color: white; 7 | } 8 | #password-view .heading { 9 | display: flex; 10 | align-items: center; 11 | background-color: rgba(244, 244, 244, 1); 12 | padding-left: 14px; 13 | width: 100vw; 14 | height: 34px; 15 | border-bottom: thin solid rgba(150, 150, 150, 0.3); 16 | color: #00A686; 17 | margin-left: 0px; 18 | } 19 | #password-view__back-btn { 20 | z-index: 1; 21 | color: #00A686; 22 | } 23 | #password-text { 24 | color: rgba(150, 150, 150, 1); 25 | margin: 10px 0px; 26 | font-size: 0.7rem; 27 | line-height: 0.9rem; 28 | background-color: white; 29 | width: 100%; 30 | } 31 | #password-warning { 32 | text-align: center; 33 | color: rgba(150, 150, 150, 1); 34 | margin: 18px 10vw; 35 | font-size: 0.7rem; 36 | line-height: 0.9rem; 37 | } 38 | 39 | #password-view { 40 | background-color: rgba(240, 240, 240, 1); 41 | } 42 | 43 | #password-input { 44 | background-color: white; 45 | height: 50px; 46 | width: 100%; 47 | font-size: 1.2rem; 48 | color: rgba(50, 50, 50, 1); 49 | padding-left: 15px; 50 | display: flex; 51 | align-items: center; 52 | 53 | } 54 | 55 | #password-view ion-content { 56 | display: flex; 57 | justify-content: center; 58 | } 59 | 60 | #password-button { 61 | position: absolute; 62 | left: 50%; 63 | transform: translate(-50%, 0); 64 | width: 100vw; 65 | margin-top: 20px; 66 | color: RGBA(60, 178, 226, 1.00); 67 | border: none; 68 | outline: none; 69 | outline: none; 70 | background-color: RGBA(60, 178, 226, 0); 71 | } 72 | 73 | #continue-button { 74 | position: absolute; 75 | left: 0%; 76 | bottom: 40%; 77 | width: 100vw; 78 | height: 50px; 79 | color: white; 80 | background-color: #00A686; 81 | border: none; 82 | } 83 | -------------------------------------------------------------------------------- /snapchap/www/app/components/chat/chatCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('chatCtrl', function ($scope, $stateParams, mainService, $rootScope, $state) { 2 | 3 | mainService.showMenu(); 4 | 5 | $('#index-html__chat-btn, #index-html__take-photo-btn, #index-html__dots-btn').addClass('chatty-nav'); 6 | 7 | 8 | mainService.getPendingMessageIds($rootScope.userInfo.id).then(function(response) { 9 | $rootScope.pendingMessages = response.data; 10 | }); 11 | 12 | 13 | var canvas = document.getElementById('message-canvas'); 14 | var context = canvas.getContext('2d'); 15 | var image = new Image(); 16 | 17 | var messageCanvasContainer = $('#message-canvas-container'); 18 | var messageCanvas = $('#message-canvas'); 19 | 20 | // canvas.width = messageCanvasContainer.width(); 21 | // canvas.height = messageCanvasContainer.height(); 22 | 23 | $scope.getMessage = function(messageId) { 24 | mainService.getMessage(messageId).then(function(response) { 25 | setTimeout(function() { 26 | context.clearRect(0, 0, canvas.width, canvas.height); 27 | messageCanvasContainer.removeClass('active'); 28 | mainService.showMenu(); 29 | mainService.deleteMessage(messageId).then(function(response) { 30 | mainService.getPendingMessageIds($rootScope.userInfo.id).then(function(response) { 31 | $rootScope.pendingMessages = response.data; 32 | }); 33 | }); 34 | }, 10000); 35 | messageCanvasContainer.addClass('active'); 36 | mainService.hideMenu(); 37 | image.src = response.data[0].message; 38 | image.onload = function() { 39 | canvas.width = image.width; 40 | canvas.height = canvas.width * image.height / image.width; 41 | messageCanvas.width(canvas.width); 42 | messageCanvas.height(canvas.height); 43 | // $('#message-canvas').css('top', 'calc(50% - ' + image.height / 2 + 'px'); 44 | context.drawImage(image, 0, 0); 45 | } 46 | }); 47 | } 48 | 49 | 50 | $scope.goToView = function(view) { 51 | $state.go(view); 52 | } 53 | 54 | 55 | }); 56 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/_button-bar.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Button Bar 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .button-bar { 8 | @include display-flex(); 9 | @include flex(1); 10 | width: 100%; 11 | 12 | &.button-bar-inline { 13 | display: block; 14 | width: auto; 15 | 16 | @include clearfix(); 17 | 18 | > .button { 19 | width: auto; 20 | display: inline-block; 21 | float: left; 22 | } 23 | } 24 | 25 | &.bar-light > .button { 26 | border-color: $button-light-border; 27 | } 28 | &.bar-stable > .button { 29 | border-color: $button-stable-border; 30 | } 31 | &.bar-positive > .button { 32 | border-color: $button-positive-border; 33 | } 34 | &.bar-calm > .button { 35 | border-color: $button-calm-border; 36 | } 37 | &.bar-assertive > .button { 38 | border-color: $button-assertive-border; 39 | } 40 | &.bar-balanced > .button { 41 | border-color: $button-balanced-border; 42 | } 43 | &.bar-energized > .button { 44 | border-color: $button-energized-border; 45 | } 46 | &.bar-royal > .button { 47 | border-color: $button-royal-border; 48 | } 49 | &.bar-dark > .button { 50 | border-color: $button-dark-border; 51 | } 52 | } 53 | 54 | .button-bar > .button { 55 | @include flex(1); 56 | display: block; 57 | 58 | overflow: hidden; 59 | 60 | padding: 0 16px; 61 | 62 | width: 0; 63 | 64 | border-width: 1px 0px 1px 1px; 65 | border-radius: 0; 66 | text-align: center; 67 | text-overflow: ellipsis; 68 | white-space: nowrap; 69 | 70 | &:before, 71 | .icon:before { 72 | line-height: 44px; 73 | } 74 | 75 | &:first-child { 76 | border-radius: $button-border-radius 0px 0px $button-border-radius; 77 | } 78 | &:last-child { 79 | border-right-width: 1px; 80 | border-radius: 0px $button-border-radius $button-border-radius 0px; 81 | } 82 | &:only-child { 83 | border-radius: $button-border-radius; 84 | } 85 | } 86 | 87 | .button-bar > .button-small { 88 | &:before, 89 | .icon:before { 90 | line-height: 28px; 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /snapchap/www/app/components/sendTo/sendTo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 |
11 | 12 | 13 |
14 | 15 |
16 | 17 | 18 | 26 | 27 |
28 |

FRIENDS

29 |

Send a Snap directly to friends.

30 |
    31 |
  • 32 | 33 |
  • 34 |
35 |
36 | 37 |
38 | 39 | 40 | 41 |
42 | 43 | 44 |
45 |
46 | {{recipient}} 47 |
48 | 49 |
50 | 51 |
52 |
53 | -------------------------------------------------------------------------------- /snapchap/www/lib/angular/README.md: -------------------------------------------------------------------------------- 1 | # packaged angular 2 | 3 | This repo is for distribution on `npm` and `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | You can install this package either with `npm` or with `bower`. 10 | 11 | ### npm 12 | 13 | ```shell 14 | npm install angular 15 | ``` 16 | 17 | Then add a ` 21 | ``` 22 | 23 | Or `require('angular')` from your code. 24 | 25 | ### bower 26 | 27 | ```shell 28 | bower install angular 29 | ``` 30 | 31 | Then add a ` 35 | ``` 36 | 37 | ## Documentation 38 | 39 | Documentation is available on the 40 | [AngularJS docs site](http://docs.angularjs.org/). 41 | 42 | ## License 43 | 44 | The MIT License 45 | 46 | Copyright (c) 2010-2015 Google, Inc. http://angularjs.org 47 | 48 | Permission is hereby granted, free of charge, to any person obtaining a copy 49 | of this software and associated documentation files (the "Software"), to deal 50 | in the Software without restriction, including without limitation the rights 51 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 52 | copies of the Software, and to permit persons to whom the Software is 53 | furnished to do so, subject to the following conditions: 54 | 55 | The above copyright notice and this permission notice shall be included in 56 | all copies or substantial portions of the Software. 57 | 58 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 59 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 60 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 61 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 62 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 63 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 64 | THE SOFTWARE. 65 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/_platform.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Platform 4 | * -------------------------------------------------- 5 | * Platform specific tweaks 6 | */ 7 | 8 | .platform-ios.platform-cordova { 9 | // iOS has a status bar which sits on top of the header. 10 | // Bump down everything to make room for it. However, if 11 | // if its in Cordova, and set to fullscreen, then disregard the bump. 12 | &:not(.fullscreen) { 13 | .bar-header:not(.bar-subheader) { 14 | height: $bar-height + $ios-statusbar-height; 15 | 16 | &.item-input-inset .item-input-wrapper { 17 | margin-top: 19px !important; 18 | } 19 | 20 | > * { 21 | margin-top: $ios-statusbar-height; 22 | } 23 | } 24 | .tabs-top > .tabs, 25 | .tabs.tabs-top { 26 | top: $bar-height + $ios-statusbar-height; 27 | } 28 | 29 | .has-header, 30 | .bar-subheader { 31 | top: $bar-height + $ios-statusbar-height; 32 | } 33 | .has-subheader { 34 | top: $bar-height + $bar-subheader-height + $ios-statusbar-height; 35 | } 36 | .has-header.has-tabs-top { 37 | top: $bar-height + $tabs-height + $ios-statusbar-height; 38 | } 39 | .has-header.has-subheader.has-tabs-top { 40 | top: $bar-height + $bar-subheader-height + $tabs-height + $ios-statusbar-height; 41 | } 42 | } 43 | .popover{ 44 | .bar-header:not(.bar-subheader) { 45 | height: $bar-height; 46 | &.item-input-inset .item-input-wrapper { 47 | margin-top: -1px; 48 | } 49 | > * { 50 | margin-top: 0; 51 | } 52 | } 53 | .has-header, 54 | .bar-subheader { 55 | top: $bar-height; 56 | } 57 | .has-subheader { 58 | top: $bar-height + $bar-subheader-height; 59 | } 60 | } 61 | &.status-bar-hide { 62 | // Cordova doesn't adjust the body height correctly, this makes up for it 63 | margin-bottom: 20px; 64 | } 65 | } 66 | 67 | @media (orientation:landscape) { 68 | .platform-ios.platform-browser.platform-ipad { 69 | position: fixed; // required for iPad 7 Safari 70 | } 71 | } 72 | 73 | .platform-c:not(.enable-transitions) * { 74 | // disable transitions on grade-c devices (Android 2) 75 | -webkit-transition: none !important; 76 | transition: none !important; 77 | } 78 | -------------------------------------------------------------------------------- /snapchap/www/lib/angular-animate/README.md: -------------------------------------------------------------------------------- 1 | # packaged angular-animate 2 | 3 | This repo is for distribution on `npm` and `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngAnimate). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | You can install this package either with `npm` or with `bower`. 10 | 11 | ### npm 12 | 13 | ```shell 14 | npm install angular-animate 15 | ``` 16 | 17 | Then add `ngAnimate` as a dependency for your app: 18 | 19 | ```javascript 20 | angular.module('myApp', [require('angular-animate')]); 21 | ``` 22 | 23 | ### bower 24 | 25 | ```shell 26 | bower install angular-animate 27 | ``` 28 | 29 | Then add a ` 33 | ``` 34 | 35 | Then add `ngAnimate` as a dependency for your app: 36 | 37 | ```javascript 38 | angular.module('myApp', ['ngAnimate']); 39 | ``` 40 | 41 | ## Documentation 42 | 43 | Documentation is available on the 44 | [AngularJS docs site](http://docs.angularjs.org/api/ngAnimate). 45 | 46 | ## License 47 | 48 | The MIT License 49 | 50 | Copyright (c) 2010-2015 Google, Inc. http://angularjs.org 51 | 52 | Permission is hereby granted, free of charge, to any person obtaining a copy 53 | of this software and associated documentation files (the "Software"), to deal 54 | in the Software without restriction, including without limitation the rights 55 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 56 | copies of the Software, and to permit persons to whom the Software is 57 | furnished to do so, subject to the following conditions: 58 | 59 | The above copyright notice and this permission notice shall be included in 60 | all copies or substantial portions of the Software. 61 | 62 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 63 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 64 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 65 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 66 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 67 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 68 | THE SOFTWARE. 69 | -------------------------------------------------------------------------------- /snapchap/www/lib/angular-sanitize/README.md: -------------------------------------------------------------------------------- 1 | # packaged angular-sanitize 2 | 3 | This repo is for distribution on `npm` and `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngSanitize). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | You can install this package either with `npm` or with `bower`. 10 | 11 | ### npm 12 | 13 | ```shell 14 | npm install angular-sanitize 15 | ``` 16 | 17 | Then add `ngSanitize` as a dependency for your app: 18 | 19 | ```javascript 20 | angular.module('myApp', [require('angular-sanitize')]); 21 | ``` 22 | 23 | ### bower 24 | 25 | ```shell 26 | bower install angular-sanitize 27 | ``` 28 | 29 | Add a ` 33 | ``` 34 | 35 | Then add `ngSanitize` as a dependency for your app: 36 | 37 | ```javascript 38 | angular.module('myApp', ['ngSanitize']); 39 | ``` 40 | 41 | ## Documentation 42 | 43 | Documentation is available on the 44 | [AngularJS docs site](http://docs.angularjs.org/api/ngSanitize). 45 | 46 | ## License 47 | 48 | The MIT License 49 | 50 | Copyright (c) 2010-2015 Google, Inc. http://angularjs.org 51 | 52 | Permission is hereby granted, free of charge, to any person obtaining a copy 53 | of this software and associated documentation files (the "Software"), to deal 54 | in the Software without restriction, including without limitation the rights 55 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 56 | copies of the Software, and to permit persons to whom the Software is 57 | furnished to do so, subject to the following conditions: 58 | 59 | The above copyright notice and this permission notice shall be included in 60 | all copies or substantial portions of the Software. 61 | 62 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 63 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 64 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 65 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 66 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 67 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 68 | THE SOFTWARE. 69 | -------------------------------------------------------------------------------- /snapchap/www/app/components/settings/settings.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | MY ACCOUNT 12 |
    13 |
  • Name
  • 14 |
  • Username
  • 15 |
  • Birthday
  • 16 |
  • Mobile Number
  • 17 |
  • Email
  • 18 |
  • Bitmoji
  • 19 |
  • Password
  • 20 |
  • Login Verification
  • 21 |
  • Notifications
  • 22 |
  • Snapcash
  • 23 |
  • Memories
  • 24 |
25 | 26 | ADDITIONAL SERVICES 27 |
    28 |
  • Manage Preferences
  • 29 |
30 | 31 | WHO CAN… 32 |
    33 |
  • Contact Me
  • 34 |
  • View My Story
  • 35 |
  • See Me in Quick Add
  • 36 |
37 | 38 | MORE INFORMATION 39 |
    40 |
  • Support
  • 41 |
  • Privacy Policy
  • 42 |
  • Terms of Service
  • 43 |
  • Licenses
  • 44 |
45 | 46 | ACCOUNT ACTIONS 47 |
    48 |
  • Clear Cache
  • 49 |
  • Clear Conversations
  • 50 |
  • Restore Purchases
  • 51 |
  • Blocked
  • 52 |
  • Log Out
  • 53 |
54 |
55 |
56 | -------------------------------------------------------------------------------- /snapchap/www/lib/angular-ui-router/src/view.js: -------------------------------------------------------------------------------- 1 | 2 | $ViewProvider.$inject = []; 3 | function $ViewProvider() { 4 | 5 | this.$get = $get; 6 | /** 7 | * @ngdoc object 8 | * @name ui.router.state.$view 9 | * 10 | * @requires ui.router.util.$templateFactory 11 | * @requires $rootScope 12 | * 13 | * @description 14 | * 15 | */ 16 | $get.$inject = ['$rootScope', '$templateFactory']; 17 | function $get( $rootScope, $templateFactory) { 18 | return { 19 | // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... }) 20 | /** 21 | * @ngdoc function 22 | * @name ui.router.state.$view#load 23 | * @methodOf ui.router.state.$view 24 | * 25 | * @description 26 | * 27 | * @param {string} name name 28 | * @param {object} options option object. 29 | */ 30 | load: function load(name, options) { 31 | var result, defaults = { 32 | template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {} 33 | }; 34 | options = extend(defaults, options); 35 | 36 | if (options.view) { 37 | result = $templateFactory.fromConfig(options.view, options.params, options.locals); 38 | } 39 | if (result && options.notify) { 40 | /** 41 | * @ngdoc event 42 | * @name ui.router.state.$state#$viewContentLoading 43 | * @eventOf ui.router.state.$view 44 | * @eventType broadcast on root scope 45 | * @description 46 | * 47 | * Fired once the view **begins loading**, *before* the DOM is rendered. 48 | * 49 | * @param {Object} event Event object. 50 | * @param {Object} viewConfig The view config properties (template, controller, etc). 51 | * 52 | * @example 53 | * 54 | *
55 |          * $scope.$on('$viewContentLoading',
56 |          * function(event, viewConfig){
57 |          *     // Access to all the view config properties.
58 |          *     // and one special property 'targetView'
59 |          *     // viewConfig.targetView
60 |          * });
61 |          * 
62 | */ 63 | $rootScope.$broadcast('$viewContentLoading', options); 64 | } 65 | return result; 66 | } 67 | }; 68 | } 69 | } 70 | 71 | angular.module('ui.router.state').provider('$view', $ViewProvider); 72 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/_spinner.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Spinners 3 | * -------------------------------------------------- 4 | */ 5 | 6 | .spinner { 7 | svg { 8 | width: $spinner-width; 9 | height: $spinner-height; 10 | } 11 | 12 | stroke: $spinner-default-stroke; 13 | fill: $spinner-default-fill; 14 | 15 | &.spinner-light { 16 | stroke: $spinner-light-stroke; 17 | fill: $spinner-light-fill; 18 | } 19 | &.spinner-stable { 20 | stroke: $spinner-stable-stroke; 21 | fill: $spinner-stable-fill; 22 | } 23 | &.spinner-positive { 24 | stroke: $spinner-positive-stroke; 25 | fill: $spinner-positive-fill; 26 | } 27 | &.spinner-calm { 28 | stroke: $spinner-calm-stroke; 29 | fill: $spinner-calm-fill; 30 | } 31 | &.spinner-balanced { 32 | stroke: $spinner-balanced-stroke; 33 | fill: $spinner-balanced-fill; 34 | } 35 | &.spinner-assertive { 36 | stroke: $spinner-assertive-stroke; 37 | fill: $spinner-assertive-fill; 38 | } 39 | &.spinner-energized { 40 | stroke: $spinner-energized-stroke; 41 | fill: $spinner-energized-fill; 42 | } 43 | &.spinner-royal { 44 | stroke: $spinner-royal-stroke; 45 | fill: $spinner-royal-fill; 46 | } 47 | &.spinner-dark { 48 | stroke: $spinner-dark-stroke; 49 | fill: $spinner-dark-fill; 50 | } 51 | } 52 | 53 | .spinner-android { 54 | stroke: #4b8bf4; 55 | } 56 | 57 | .spinner-ios, 58 | .spinner-ios-small { 59 | stroke: #69717d; 60 | } 61 | 62 | .spinner-spiral { 63 | .stop1 { 64 | stop-color: $spinner-light-fill; 65 | stop-opacity: 0; 66 | } 67 | 68 | &.spinner-light { 69 | .stop1 { 70 | stop-color: $spinner-default-fill; 71 | } 72 | .stop2 { 73 | stop-color: $spinner-light-fill; 74 | } 75 | } 76 | &.spinner-stable .stop2 { 77 | stop-color: $spinner-stable-fill; 78 | } 79 | &.spinner-positive .stop2 { 80 | stop-color: $spinner-positive-fill; 81 | } 82 | &.spinner-calm .stop2 { 83 | stop-color: $spinner-calm-fill; 84 | } 85 | &.spinner-balanced .stop2 { 86 | stop-color: $spinner-balanced-fill; 87 | } 88 | &.spinner-assertive .stop2 { 89 | stop-color: $spinner-assertive-fill; 90 | } 91 | &.spinner-energized .stop2 { 92 | stop-color: $spinner-energized-fill; 93 | } 94 | &.spinner-royal .stop2 { 95 | stop-color: $spinner-royal-fill; 96 | } 97 | &.spinner-dark .stop2 { 98 | stop-color: $spinner-dark-fill; 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /snapchap/www/app/components/chat/chat.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 16 | 17 | 21 |
22 |
23 | 24 | 27 |
28 | 29 |
    30 |
  • 31 |
    {{pendingMessage.first_name}} {{pendingMessage.last_name}}
    32 |
    Tap to view
    33 |
  • 34 |
35 | 36 |
37 | 38 |
39 | 40 | 41 | 42 | 43 | 46 | 51 | 53 | 54 |
55 | 56 |
57 | 58 |
59 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/_popup.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Popups 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .popup-container { 8 | position: absolute; 9 | top: 0; 10 | left: 0; 11 | bottom: 0; 12 | right: 0; 13 | background: rgba(0,0,0,0); 14 | 15 | @include display-flex(); 16 | @include justify-content(center); 17 | @include align-items(center); 18 | 19 | z-index: $z-index-popup; 20 | 21 | // Start hidden 22 | visibility: hidden; 23 | &.popup-showing { 24 | visibility: visible; 25 | } 26 | 27 | &.popup-hidden .popup { 28 | @include animation-name(scaleOut); 29 | @include animation-duration($popup-leave-animation-duration); 30 | @include animation-timing-function(ease-in-out); 31 | @include animation-fill-mode(both); 32 | } 33 | 34 | &.active .popup { 35 | @include animation-name(superScaleIn); 36 | @include animation-duration($popup-enter-animation-duration); 37 | @include animation-timing-function(ease-in-out); 38 | @include animation-fill-mode(both); 39 | } 40 | 41 | .popup { 42 | width: $popup-width; 43 | max-width: 100%; 44 | max-height: 90%; 45 | 46 | border-radius: $popup-border-radius; 47 | background-color: $popup-background-color; 48 | 49 | @include display-flex(); 50 | @include flex-direction(column); 51 | } 52 | 53 | input, 54 | textarea { 55 | width: 100%; 56 | } 57 | } 58 | 59 | .popup-head { 60 | padding: 15px 10px; 61 | border-bottom: 1px solid #eee; 62 | text-align: center; 63 | } 64 | .popup-title { 65 | margin: 0; 66 | padding: 0; 67 | font-size: 15px; 68 | } 69 | .popup-sub-title { 70 | margin: 5px 0 0 0; 71 | padding: 0; 72 | font-weight: normal; 73 | font-size: 11px; 74 | } 75 | .popup-body { 76 | padding: 10px; 77 | overflow: auto; 78 | } 79 | 80 | .popup-buttons { 81 | @include display-flex(); 82 | @include flex-direction(row); 83 | padding: 10px; 84 | min-height: $popup-button-min-height + 20; 85 | 86 | .button { 87 | @include flex(1); 88 | display: block; 89 | min-height: $popup-button-min-height; 90 | border-radius: $popup-button-border-radius; 91 | line-height: $popup-button-line-height; 92 | 93 | margin-right: 5px; 94 | &:last-child { 95 | margin-right: 0px; 96 | } 97 | } 98 | } 99 | 100 | .popup-open { 101 | pointer-events: none; 102 | 103 | &.modal-open .modal { 104 | pointer-events: none; 105 | } 106 | 107 | .popup-backdrop, .popup { 108 | pointer-events: auto; 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/_modal.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Modals 4 | * -------------------------------------------------- 5 | * Modals are independent windows that slide in from off-screen. 6 | */ 7 | 8 | .modal-backdrop, 9 | .modal-backdrop-bg { 10 | position: fixed; 11 | top: 0; 12 | left: 0; 13 | z-index: $z-index-modal; 14 | width: 100%; 15 | height: 100%; 16 | } 17 | 18 | .modal-backdrop-bg { 19 | pointer-events: none; 20 | } 21 | 22 | .modal { 23 | display: block; 24 | position: absolute; 25 | top: 0; 26 | z-index: $z-index-modal; 27 | overflow: hidden; 28 | min-height: 100%; 29 | width: 100%; 30 | background-color: $modal-bg-color; 31 | } 32 | 33 | @media (min-width: $modal-inset-mode-break-point) { 34 | // inset mode is when the modal doesn't fill the entire 35 | // display but instead is centered within a large display 36 | .modal { 37 | top: $modal-inset-mode-top; 38 | right: $modal-inset-mode-right; 39 | bottom: $modal-inset-mode-bottom; 40 | left: $modal-inset-mode-left; 41 | min-height: $modal-inset-mode-min-height; 42 | width: (100% - $modal-inset-mode-left - $modal-inset-mode-right); 43 | } 44 | 45 | .modal.ng-leave-active { 46 | bottom: 0; 47 | } 48 | 49 | // remove ios header padding from inset header 50 | .platform-ios.platform-cordova .modal-wrapper .modal { 51 | .bar-header:not(.bar-subheader) { 52 | height: $bar-height; 53 | > * { 54 | margin-top: 0; 55 | } 56 | } 57 | .tabs-top > .tabs, 58 | .tabs.tabs-top { 59 | top: $bar-height; 60 | } 61 | .has-header, 62 | .bar-subheader { 63 | top: $bar-height; 64 | } 65 | .has-subheader { 66 | top: $bar-height + $bar-subheader-height; 67 | } 68 | .has-header.has-tabs-top { 69 | top: $bar-height + $tabs-height; 70 | } 71 | .has-header.has-subheader.has-tabs-top { 72 | top: $bar-height + $bar-subheader-height + $tabs-height; 73 | } 74 | } 75 | 76 | .modal-backdrop-bg { 77 | @include transition(opacity 300ms ease-in-out); 78 | background-color: $modal-backdrop-bg-active; 79 | opacity: 0; 80 | } 81 | 82 | .active .modal-backdrop-bg { 83 | opacity: 0.5; 84 | } 85 | } 86 | 87 | // disable clicks on all but the modal 88 | .modal-open { 89 | pointer-events: none; 90 | 91 | .modal, 92 | .modal-backdrop { 93 | pointer-events: auto; 94 | } 95 | // prevent clicks on modal when loading overlay is active though 96 | &.loading-active { 97 | .modal, 98 | .modal-backdrop { 99 | pointer-events: none; 100 | } 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /snapchap/www/app/components/nav/nav.css: -------------------------------------------------------------------------------- 1 | /*#index-html__nav-bottom { 2 | display: flex; 3 | background-color: red; 4 | align-items: flex-end; 5 | justify-content: center; 6 | position: absolute; 7 | top: calc(100vh - 60px); 8 | height: 60px; 9 | width: 100vw; 10 | padding: 22px 11px 11px 11px; 11 | z-index: 4; 12 | transition: justify-content 0.3s; 13 | } 14 | 15 | #index-html__nav-bottom .icon-btn { 16 | position: absolute; 17 | bottom: 4vh; 18 | z-index: 4; 19 | } 20 | 21 | 22 | #index-html__chat-btn { 23 | background-image: url('../../../img/icon/chat-white.png'); 24 | left: 7vw; 25 | opacity: 1; 26 | transition: left 0.3s, opacity 0.3s; 27 | z-index: 4; 28 | } 29 | #index-html__chat-btn.chatty-nav { 30 | background-image: url('../../../img/icon/chat-gray.png'); 31 | left: 24vw; 32 | z-index: 4; 33 | } 34 | #index-html__chat-btn.chatty-nav:after { 35 | content: ''; 36 | height: 5px; 37 | width: 40px; 38 | position: absolute; 39 | left: 50%; 40 | transform: translateX(-50%); 41 | bottom: -10px; 42 | background-color: rgba(200, 200, 200, 1); 43 | border-radius: 5px; 44 | z-index: 4; 45 | } 46 | #index-html__chat-btn.profile-nav { 47 | opacity: 0; 48 | z-index: 4; 49 | } 50 | 51 | 52 | #index-html__take-photo-btn { 53 | background-image: url('../../../img/icon/circle-white-big.png'); 54 | width: 80px; 55 | height: 80px; 56 | /*margin: 0 40px;*/ 57 | -webkit-background-size: 80px; 58 | background-size: 80px; 59 | transition: -webkit-background-size 0.3s, background-size 0.3s, width 0.3s, height 0.3s, background-image 0.3s; 60 | z-index: 4; 61 | } 62 | #index-html__take-photo-btn.chatty-nav, 63 | #index-html__take-photo-btn.profile-nav { 64 | background-image: url('../../../img/icon/circle-gray-big.png'); 65 | width: 58px; 66 | height: 58px; 67 | -webkit-background-size: 58px; 68 | background-size: 58px; 69 | z-index: 4; 70 | } 71 | #index-html__take-photo-btn.profile-nav { 72 | background-image: url('../../../img/icon/circle-white-big.png'); 73 | z-index: 4; 74 | } 75 | 76 | 77 | #index-html__dots-btn { 78 | background-image: url('../../../img/icon/dots-white.png'); 79 | right: 7vw; 80 | opacity: 1; 81 | transition: right 0.3s, opacity 0.3s; 82 | z-index: 4; 83 | } 84 | #index-html__dots-btn.chatty-nav { 85 | background-image: url('../../../img/icon/dots-gray.png'); 86 | right: 24vw; 87 | z-index: 4; 88 | } 89 | #index-html__dots-btn.profile-nav { 90 | opacity: 0; 91 | z-index: 4; 92 | } 93 | 94 | 95 | .unicorn { 96 | z-index: 100; 97 | position: absolute; 98 | top: 50%; 99 | left: 50%; 100 | transform: translateX(-50%); 101 | color: white; 102 | }*/ 103 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/_list.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Lists 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .list { 8 | position: relative; 9 | padding-top: $item-border-width; 10 | padding-bottom: $item-border-width; 11 | padding-left: 0; // reset padding because ul and ol 12 | margin-bottom: 20px; 13 | } 14 | .list:last-child { 15 | margin-bottom: 0px; 16 | &.card{ 17 | margin-bottom:40px; 18 | } 19 | } 20 | 21 | 22 | /** 23 | * List Header 24 | * -------------------------------------------------- 25 | */ 26 | 27 | .list-header { 28 | margin-top: $list-header-margin-top; 29 | padding: $list-header-padding; 30 | background-color: $list-header-bg; 31 | color: $list-header-color; 32 | font-weight: bold; 33 | } 34 | 35 | // when its a card make sure it doesn't duplicate top and bottom borders 36 | .card.list .list-item { 37 | padding-right: 1px; 38 | padding-left: 1px; 39 | } 40 | 41 | 42 | /** 43 | * Cards and Inset Lists 44 | * -------------------------------------------------- 45 | * A card and list-inset are close to the same thing, except a card as a box shadow. 46 | */ 47 | 48 | .card, 49 | .list-inset { 50 | overflow: hidden; 51 | margin: ($content-padding * 2) $content-padding; 52 | border-radius: $card-border-radius; 53 | background-color: $card-body-bg; 54 | } 55 | 56 | .card { 57 | padding-top: $item-border-width; 58 | padding-bottom: $item-border-width; 59 | box-shadow: $card-box-shadow; 60 | 61 | .item { 62 | border-left: 0; 63 | border-right: 0; 64 | } 65 | .item:first-child { 66 | border-top: 0; 67 | } 68 | .item:last-child { 69 | border-bottom: 0; 70 | } 71 | } 72 | 73 | .padding { 74 | .card, .list-inset { 75 | margin-left: 0; 76 | margin-right: 0; 77 | } 78 | } 79 | 80 | .card .item, 81 | .list-inset .item, 82 | .padding > .list .item 83 | { 84 | &:first-child { 85 | border-top-left-radius: $card-border-radius; 86 | border-top-right-radius: $card-border-radius; 87 | 88 | .item-content { 89 | border-top-left-radius: $card-border-radius; 90 | border-top-right-radius: $card-border-radius; 91 | } 92 | } 93 | &:last-child { 94 | border-bottom-right-radius: $card-border-radius; 95 | border-bottom-left-radius: $card-border-radius; 96 | 97 | .item-content { 98 | border-bottom-right-radius: $card-border-radius; 99 | border-bottom-left-radius: $card-border-radius; 100 | } 101 | } 102 | } 103 | 104 | .card .item:last-child, 105 | .list-inset .item:last-child { 106 | margin-bottom: $item-border-width * -1; 107 | } 108 | 109 | .card .item, 110 | .list-inset .item, 111 | .padding > .list .item, 112 | .padding-horizontal > .list .item { 113 | margin-right: 0; 114 | margin-left: 0; 115 | 116 | &.item-input input { 117 | padding-right: 44px; 118 | } 119 | } 120 | .padding-left > .list .item { 121 | margin-left: 0; 122 | } 123 | .padding-right > .list .item { 124 | margin-right: 0; 125 | } 126 | -------------------------------------------------------------------------------- /snapchap/hooks/after_prepare/010_add_platform_class.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // Add Platform Class 4 | // v1.0 5 | // Automatically adds the platform class to the body tag 6 | // after the `prepare` command. By placing the platform CSS classes 7 | // directly in the HTML built for the platform, it speeds up 8 | // rendering the correct layout/style for the specific platform 9 | // instead of waiting for the JS to figure out the correct classes. 10 | 11 | var fs = require('fs'); 12 | var path = require('path'); 13 | 14 | var rootdir = process.argv[2]; 15 | 16 | function addPlatformBodyTag(indexPath, platform) { 17 | // add the platform class to the body tag 18 | try { 19 | var platformClass = 'platform-' + platform; 20 | var cordovaClass = 'platform-cordova platform-webview'; 21 | 22 | var html = fs.readFileSync(indexPath, 'utf8'); 23 | 24 | var bodyTag = findBodyTag(html); 25 | if(!bodyTag) return; // no opening body tag, something's wrong 26 | 27 | if(bodyTag.indexOf(platformClass) > -1) return; // already added 28 | 29 | var newBodyTag = bodyTag; 30 | 31 | var classAttr = findClassAttr(bodyTag); 32 | if(classAttr) { 33 | // body tag has existing class attribute, add the classname 34 | var endingQuote = classAttr.substring(classAttr.length-1); 35 | var newClassAttr = classAttr.substring(0, classAttr.length-1); 36 | newClassAttr += ' ' + platformClass + ' ' + cordovaClass + endingQuote; 37 | newBodyTag = bodyTag.replace(classAttr, newClassAttr); 38 | 39 | } else { 40 | // add class attribute to the body tag 41 | newBodyTag = bodyTag.replace('>', ' class="' + platformClass + ' ' + cordovaClass + '">'); 42 | } 43 | 44 | html = html.replace(bodyTag, newBodyTag); 45 | 46 | fs.writeFileSync(indexPath, html, 'utf8'); 47 | 48 | process.stdout.write('add to body class: ' + platformClass + '\n'); 49 | } catch(e) { 50 | process.stdout.write(e); 51 | } 52 | } 53 | 54 | function findBodyTag(html) { 55 | // get the body tag 56 | try{ 57 | return html.match(/])(.*?)>/gi)[0]; 58 | }catch(e){} 59 | } 60 | 61 | function findClassAttr(bodyTag) { 62 | // get the body tag's class attribute 63 | try{ 64 | return bodyTag.match(/ class=["|'](.*?)["|']/gi)[0]; 65 | }catch(e){} 66 | } 67 | 68 | if (rootdir) { 69 | 70 | // go through each of the platform directories that have been prepared 71 | var platforms = (process.env.CORDOVA_PLATFORMS ? process.env.CORDOVA_PLATFORMS.split(',') : []); 72 | 73 | for(var x=0; x .scroll{ 83 | &.overscroll{ 84 | position:fixed; 85 | right: 0; 86 | left: 0; 87 | } 88 | -webkit-overflow-scrolling:touch; 89 | width:100%; 90 | } 91 | 92 | .overflow-scroll.padding > .scroll.overscroll{ 93 | padding: 10px; 94 | } 95 | @-webkit-keyframes refresh-spin { 96 | 0% { -webkit-transform: translate3d(0,0,0) rotate(0); } 97 | 100% { -webkit-transform: translate3d(0,0,0) rotate(180deg); } 98 | } 99 | 100 | @keyframes refresh-spin { 101 | 0% { transform: translate3d(0,0,0) rotate(0); } 102 | 100% { transform: translate3d(0,0,0) rotate(180deg); } 103 | } 104 | 105 | @-webkit-keyframes refresh-spin-back { 106 | 0% { -webkit-transform: translate3d(0,0,0) rotate(180deg); } 107 | 100% { -webkit-transform: translate3d(0,0,0) rotate(0); } 108 | } 109 | 110 | @keyframes refresh-spin-back { 111 | 0% { transform: translate3d(0,0,0) rotate(180deg); } 112 | 100% { transform: translate3d(0,0,0) rotate(0); } 113 | } 114 | -------------------------------------------------------------------------------- /snapchap/hooks/README.md: -------------------------------------------------------------------------------- 1 | 21 | # Cordova Hooks 22 | 23 | This directory may contain scripts used to customize cordova commands. This 24 | directory used to exist at `.cordova/hooks`, but has now been moved to the 25 | project root. Any scripts you add to these directories will be executed before 26 | and after the commands corresponding to the directory name. Useful for 27 | integrating your own build systems or integrating with version control systems. 28 | 29 | __Remember__: Make your scripts executable. 30 | 31 | ## Hook Directories 32 | The following subdirectories will be used for hooks: 33 | 34 | after_build/ 35 | after_compile/ 36 | after_docs/ 37 | after_emulate/ 38 | after_platform_add/ 39 | after_platform_rm/ 40 | after_platform_ls/ 41 | after_plugin_add/ 42 | after_plugin_ls/ 43 | after_plugin_rm/ 44 | after_plugin_search/ 45 | after_prepare/ 46 | after_run/ 47 | after_serve/ 48 | before_build/ 49 | before_compile/ 50 | before_docs/ 51 | before_emulate/ 52 | before_platform_add/ 53 | before_platform_rm/ 54 | before_platform_ls/ 55 | before_plugin_add/ 56 | before_plugin_ls/ 57 | before_plugin_rm/ 58 | before_plugin_search/ 59 | before_prepare/ 60 | before_run/ 61 | before_serve/ 62 | pre_package/ <-- Windows 8 and Windows Phone only. 63 | 64 | ## Script Interface 65 | 66 | All scripts are run from the project's root directory and have the root directory passes as the first argument. All other options are passed to the script using environment variables: 67 | 68 | * CORDOVA_VERSION - The version of the Cordova-CLI. 69 | * CORDOVA_PLATFORMS - Comma separated list of platforms that the command applies to (e.g.: android, ios). 70 | * CORDOVA_PLUGINS - Comma separated list of plugin IDs that the command applies to (e.g.: org.apache.cordova.file, org.apache.cordova.file-transfer) 71 | * CORDOVA_HOOK - Path to the hook that is being executed. 72 | * CORDOVA_CMDLINE - The exact command-line arguments passed to cordova (e.g.: cordova run ios --emulate) 73 | 74 | If a script returns a non-zero exit code, then the parent cordova command will be aborted. 75 | 76 | 77 | ## Writing hooks 78 | 79 | We highly recommend writting your hooks using Node.js so that they are 80 | cross-platform. Some good examples are shown here: 81 | 82 | [http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/](http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/) 83 | 84 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/_select.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Select 4 | * -------------------------------------------------- 5 | */ 6 | 7 | .item-select { 8 | position: relative; 9 | 10 | select { 11 | @include appearance(none); 12 | position: absolute; 13 | top: 0; 14 | bottom: 0; 15 | right: 0; 16 | padding: 0 ($item-padding * 3) 0 $item-padding; 17 | max-width: 65%; 18 | 19 | border: none; 20 | background: $item-default-bg; 21 | color: #333; 22 | 23 | // hack to hide default dropdown arrow in FF 24 | text-indent: .01px; 25 | text-overflow: ''; 26 | 27 | white-space: nowrap; 28 | font-size: $font-size-base; 29 | 30 | cursor: pointer; 31 | direction: rtl; // right align the select text 32 | } 33 | 34 | select::-ms-expand { 35 | // hide default dropdown arrow in IE 36 | display: none; 37 | } 38 | 39 | option { 40 | direction: ltr; 41 | } 42 | 43 | &:after { 44 | position: absolute; 45 | top: 50%; 46 | right: $item-padding; 47 | margin-top: -3px; 48 | width: 0; 49 | height: 0; 50 | border-top: 5px solid; 51 | border-right: 5px solid rgba(0, 0, 0, 0); 52 | border-left: 5px solid rgba(0, 0, 0, 0); 53 | color: #999; 54 | content: ""; 55 | pointer-events: none; 56 | } 57 | &.item-light { 58 | select{ 59 | background:$item-light-bg; 60 | color:$item-light-text; 61 | } 62 | } 63 | &.item-stable { 64 | select{ 65 | background:$item-stable-bg; 66 | color:$item-stable-text; 67 | } 68 | &:after, .input-label{ 69 | color:darken($item-stable-border,30%); 70 | } 71 | } 72 | &.item-positive { 73 | select{ 74 | background:$item-positive-bg; 75 | color:$item-positive-text; 76 | } 77 | &:after, .input-label{ 78 | color:$item-positive-text; 79 | } 80 | } 81 | &.item-calm { 82 | select{ 83 | background:$item-calm-bg; 84 | color:$item-calm-text; 85 | } 86 | &:after, .input-label{ 87 | color:$item-calm-text; 88 | } 89 | } 90 | &.item-assertive { 91 | select{ 92 | background:$item-assertive-bg; 93 | color:$item-assertive-text; 94 | } 95 | &:after, .input-label{ 96 | color:$item-assertive-text; 97 | } 98 | } 99 | &.item-balanced { 100 | select{ 101 | background:$item-balanced-bg; 102 | color:$item-balanced-text; 103 | } 104 | &:after, .input-label{ 105 | color:$item-balanced-text; 106 | } 107 | } 108 | &.item-energized { 109 | select{ 110 | background:$item-energized-bg; 111 | color:$item-energized-text; 112 | } 113 | &:after, .input-label{ 114 | color:$item-energized-text; 115 | } 116 | } 117 | &.item-royal { 118 | select{ 119 | background:$item-royal-bg; 120 | color:$item-royal-text; 121 | } 122 | &:after, .input-label{ 123 | color:$item-royal-text; 124 | } 125 | } 126 | &.item-dark { 127 | select{ 128 | background:$item-dark-bg; 129 | color:$item-dark-text; 130 | } 131 | &:after, .input-label{ 132 | color:$item-dark-text; 133 | } 134 | } 135 | } 136 | 137 | select { 138 | &[multiple], 139 | &[size] { 140 | height: auto; 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /snapchap/www/app/components/addUsername/addUsername.css: -------------------------------------------------------------------------------- 1 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* 2 | TOP NAV 3 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 4 | #add-username-view nav { 5 | color: rgba(154, 52, 151, 1); 6 | font-size: 1.4rem; 7 | text-align: center; 8 | padding: 18px; 9 | margin-top: 10px; 10 | background-color: #fff; 11 | border-bottom: thin solid lightgray; 12 | } 13 | #add-username-view .heading { 14 | display: flex; 15 | align-items: center; 16 | padding-left: 10px; 17 | width: 100vw; 18 | height: 40px; 19 | color: rgba(154, 52, 151, 1); 20 | } 21 | #add-username-view_back-btn { 22 | font-size: 1.7rem; 23 | color: rgba(154, 52, 151, 1); 24 | left: 15px; 25 | top: 8px; 26 | } 27 | 28 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* 29 | FORM 30 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 31 | #add-username-view__form { 32 | border-bottom: thin solid lightgray; 33 | position: relative; 34 | padding: 5px 0; 35 | } 36 | #add-username-view__form .magnifying-glass { 37 | top: 15px; 38 | } 39 | #add-username-view input { 40 | width: 100vw; 41 | position: relative; 42 | left: 37px; 43 | font-size: 1.2em; 44 | padding: 22px 0; 45 | } 46 | 47 | 48 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* 49 | USERNAME EXPLANATION TEXT 50 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 51 | .add-username-view__explanation { 52 | margin: 24px 0; 53 | line-height: 1em; 54 | } 55 | .add-username-view__explanation p { 56 | color: rgba(170, 170, 170, 1);; 57 | text-align: center; 58 | } 59 | 60 | 61 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* 62 | MY FRIENDS 63 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 64 | #add-username-view li { 65 | padding: 13px 11px; 66 | border-bottom: thin solid lightgray; 67 | position: relative; 68 | line-height: 1em; 69 | } 70 | .add-username-view__display-name, 71 | .add-username-view__username { 72 | padding: 13px 0 0 9px; 73 | font-size: 0.9rem; 74 | position: relative; 75 | left: 50px; 76 | } 77 | .add-username-view__display-name:before { 78 | content: ''; 79 | height: 50px; 80 | width: 50px; 81 | position: absolute; 82 | left: -50px; 83 | top: 5px; 84 | color: black; 85 | background-image: url('../../../img/icon/snapchat-gray.png'); 86 | -webkit-background-size: 50px; 87 | background-size: 50px; 88 | } 89 | .add-username-view__username { 90 | padding: 0 0 0 9px; 91 | color: gray; 92 | font-size: 0.7rem; 93 | } 94 | 95 | 96 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* 97 | ADD BUTTON 98 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 99 | #add-username-view .add-username-view__add-btn { 100 | position: absolute; 101 | padding: 4px 14px 7px 30px; 102 | top: 50%; 103 | transform: translateY(-50%); 104 | right: 20px; 105 | color: rgba(154, 52, 151, 1); 106 | border: thin solid rgba(154, 52, 151, 0.5); 107 | font-size: 0.9rem; 108 | font-weight: bold; 109 | background-color: rgba(255, 255, 255, 0); 110 | } 111 | .add-username-view__add-btn__plus:before { 112 | content: '+'; 113 | position: absolute; 114 | font-size: 1.1rem; 115 | left: 10px; 116 | bottom: 6px; 117 | } 118 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/_action-sheet.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Action Sheets 3 | * -------------------------------------------------- 4 | */ 5 | 6 | .action-sheet-backdrop { 7 | @include transition(background-color 150ms ease-in-out); 8 | position: fixed; 9 | top: 0; 10 | left: 0; 11 | z-index: $z-index-action-sheet; 12 | width: 100%; 13 | height: 100%; 14 | background-color: rgba(0,0,0,0); 15 | 16 | &.active { 17 | background-color: rgba(0,0,0,0.4); 18 | } 19 | } 20 | 21 | .action-sheet-wrapper { 22 | @include translate3d(0, 100%, 0); 23 | @include transition(all cubic-bezier(.36, .66, .04, 1) 500ms); 24 | position: absolute; 25 | bottom: 0; 26 | left: 0; 27 | right: 0; 28 | width: 100%; 29 | max-width: 500px; 30 | margin: auto; 31 | } 32 | 33 | .action-sheet-up { 34 | @include translate3d(0, 0, 0); 35 | } 36 | 37 | .action-sheet { 38 | margin-left: $sheet-margin; 39 | margin-right: $sheet-margin; 40 | width: auto; 41 | z-index: $z-index-action-sheet; 42 | overflow: hidden; 43 | 44 | .button { 45 | display: block; 46 | padding: 1px; 47 | width: 100%; 48 | border-radius: 0; 49 | border-color: $sheet-options-border-color; 50 | background-color: transparent; 51 | 52 | color: $sheet-options-text-color; 53 | font-size: 21px; 54 | 55 | &:hover { 56 | color: $sheet-options-text-color; 57 | } 58 | &.destructive { 59 | color: #ff3b30; 60 | &:hover { 61 | color: #ff3b30; 62 | } 63 | } 64 | } 65 | 66 | .button.active, .button.activated { 67 | box-shadow: none; 68 | border-color: $sheet-options-border-color; 69 | color: $sheet-options-text-color; 70 | background: $sheet-options-bg-active-color; 71 | } 72 | } 73 | 74 | .action-sheet-has-icons .icon { 75 | position: absolute; 76 | left: 16px; 77 | } 78 | 79 | .action-sheet-title { 80 | padding: $sheet-margin * 2; 81 | color: #8f8f8f; 82 | text-align: center; 83 | font-size: 13px; 84 | } 85 | 86 | .action-sheet-group { 87 | margin-bottom: $sheet-margin; 88 | border-radius: $sheet-border-radius; 89 | background-color: #fff; 90 | overflow: hidden; 91 | 92 | .button { 93 | border-width: 1px 0px 0px 0px; 94 | } 95 | .button:first-child:last-child { 96 | border-width: 0; 97 | } 98 | } 99 | 100 | .action-sheet-options { 101 | background: $sheet-options-bg-color; 102 | } 103 | 104 | .action-sheet-cancel { 105 | .button { 106 | font-weight: 500; 107 | } 108 | } 109 | 110 | .action-sheet-open { 111 | pointer-events: none; 112 | 113 | &.modal-open .modal { 114 | pointer-events: none; 115 | } 116 | 117 | .action-sheet-backdrop { 118 | pointer-events: auto; 119 | } 120 | } 121 | 122 | 123 | .platform-android { 124 | 125 | .action-sheet-backdrop.active { 126 | background-color: rgba(0,0,0,0.2); 127 | } 128 | 129 | .action-sheet { 130 | margin: 0; 131 | 132 | .action-sheet-title, 133 | .button { 134 | text-align: left; 135 | border-color: transparent; 136 | font-size: 16px; 137 | color: inherit; 138 | } 139 | 140 | .action-sheet-title { 141 | font-size: 14px; 142 | padding: 16px; 143 | color: #666; 144 | } 145 | 146 | .button.active, 147 | .button.activated { 148 | background: #e8e8e8; 149 | } 150 | } 151 | 152 | .action-sheet-group { 153 | margin: 0; 154 | border-radius: 0; 155 | background-color: #fafafa; 156 | } 157 | 158 | .action-sheet-cancel { 159 | display: none; 160 | } 161 | 162 | .action-sheet-has-icons { 163 | 164 | .button { 165 | padding-left: 56px; 166 | } 167 | 168 | } 169 | 170 | } 171 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/_type.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Typography 4 | * -------------------------------------------------- 5 | */ 6 | 7 | 8 | // Body text 9 | // ------------------------- 10 | 11 | p { 12 | margin: 0 0 ($line-height-computed / 2); 13 | } 14 | 15 | 16 | // Emphasis & misc 17 | // ------------------------- 18 | 19 | small { font-size: 85%; } 20 | cite { font-style: normal; } 21 | 22 | 23 | // Alignment 24 | // ------------------------- 25 | 26 | .text-left { text-align: left; } 27 | .text-right { text-align: right; } 28 | .text-center { text-align: center; } 29 | 30 | 31 | // Headings 32 | // ------------------------- 33 | 34 | h1, h2, h3, h4, h5, h6, 35 | .h1, .h2, .h3, .h4, .h5, .h6 { 36 | color: $base-color; 37 | font-weight: $headings-font-weight; 38 | font-family: $headings-font-family; 39 | line-height: $headings-line-height; 40 | 41 | small { 42 | font-weight: normal; 43 | line-height: 1; 44 | } 45 | } 46 | 47 | h1, .h1, 48 | h2, .h2, 49 | h3, .h3 { 50 | margin-top: $line-height-computed; 51 | margin-bottom: ($line-height-computed / 2); 52 | 53 | &:first-child { 54 | margin-top: 0; 55 | } 56 | 57 | + h1, + .h1, 58 | + h2, + .h2, 59 | + h3, + .h3 { 60 | margin-top: ($line-height-computed / 2); 61 | } 62 | } 63 | 64 | h4, .h4, 65 | h5, .h5, 66 | h6, .h6 { 67 | margin-top: ($line-height-computed / 2); 68 | margin-bottom: ($line-height-computed / 2); 69 | } 70 | 71 | h1, .h1 { font-size: floor($font-size-base * 2.60); } // ~36px 72 | h2, .h2 { font-size: floor($font-size-base * 2.15); } // ~30px 73 | h3, .h3 { font-size: ceil($font-size-base * 1.70); } // ~24px 74 | h4, .h4 { font-size: ceil($font-size-base * 1.25); } // ~18px 75 | h5, .h5 { font-size: $font-size-base; } 76 | h6, .h6 { font-size: ceil($font-size-base * 0.85); } // ~12px 77 | 78 | h1 small, .h1 small { font-size: ceil($font-size-base * 1.70); } // ~24px 79 | h2 small, .h2 small { font-size: ceil($font-size-base * 1.25); } // ~18px 80 | h3 small, .h3 small, 81 | h4 small, .h4 small { font-size: $font-size-base; } 82 | 83 | 84 | // Description Lists 85 | // ------------------------- 86 | 87 | dl { 88 | margin-bottom: $line-height-computed; 89 | } 90 | dt, 91 | dd { 92 | line-height: $line-height-base; 93 | } 94 | dt { 95 | font-weight: bold; 96 | } 97 | 98 | 99 | // Blockquotes 100 | // ------------------------- 101 | 102 | blockquote { 103 | margin: 0 0 $line-height-computed; 104 | padding: ($line-height-computed / 2) $line-height-computed; 105 | border-left: 5px solid gray; 106 | 107 | p { 108 | font-weight: 300; 109 | font-size: ($font-size-base * 1.25); 110 | line-height: 1.25; 111 | } 112 | 113 | p:last-child { 114 | margin-bottom: 0; 115 | } 116 | 117 | small { 118 | display: block; 119 | line-height: $line-height-base; 120 | &:before { 121 | content: '\2014 \00A0';// EM DASH, NBSP; 122 | } 123 | } 124 | } 125 | 126 | 127 | // Quotes 128 | // ------------------------- 129 | 130 | q:before, 131 | q:after, 132 | blockquote:before, 133 | blockquote:after { 134 | content: ""; 135 | } 136 | 137 | 138 | // Addresses 139 | // ------------------------- 140 | 141 | address { 142 | display: block; 143 | margin-bottom: $line-height-computed; 144 | font-style: normal; 145 | line-height: $line-height-base; 146 | } 147 | 148 | 149 | // Links 150 | // ------------------------- 151 | a { 152 | color: $link-color; 153 | } 154 | 155 | a.subdued { 156 | padding-right: 10px; 157 | color: #888; 158 | text-decoration: none; 159 | 160 | &:hover { 161 | text-decoration: none; 162 | } 163 | &:last-child { 164 | padding-right: 0; 165 | } 166 | } 167 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/_grid.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Grid 3 | * -------------------------------------------------- 4 | * Using flexbox for the grid, inspired by Philip Walton: 5 | * http://philipwalton.github.io/solved-by-flexbox/demos/grids/ 6 | * By default each .col within a .row will evenly take up 7 | * available width, and the height of each .col with take 8 | * up the height of the tallest .col in the same .row. 9 | */ 10 | 11 | .row { 12 | @include display-flex(); 13 | padding: ($grid-padding-width / 2); 14 | width: 100%; 15 | } 16 | 17 | .row-wrap { 18 | @include flex-wrap(wrap); 19 | } 20 | 21 | .row-no-padding { 22 | padding: 0; 23 | 24 | > .col { 25 | padding: 0; 26 | } 27 | } 28 | 29 | .row + .row { 30 | margin-top: ($grid-padding-width / 2) * -1; 31 | padding-top: 0; 32 | } 33 | 34 | .col { 35 | @include flex(1); 36 | display: block; 37 | padding: ($grid-padding-width / 2); 38 | width: 100%; 39 | } 40 | 41 | 42 | /* Vertically Align Columns */ 43 | /* .row-* vertically aligns every .col in the .row */ 44 | .row-top { 45 | @include align-items(flex-start); 46 | } 47 | .row-bottom { 48 | @include align-items(flex-end); 49 | } 50 | .row-center { 51 | @include align-items(center); 52 | } 53 | .row-stretch { 54 | @include align-items(stretch); 55 | } 56 | .row-baseline { 57 | @include align-items(baseline); 58 | } 59 | 60 | /* .col-* vertically aligns an individual .col */ 61 | .col-top { 62 | @include align-self(flex-start); 63 | } 64 | .col-bottom { 65 | @include align-self(flex-end); 66 | } 67 | .col-center { 68 | @include align-self(center); 69 | } 70 | 71 | /* Column Offsets */ 72 | .col-offset-10 { 73 | margin-left: 10%; 74 | } 75 | .col-offset-20 { 76 | margin-left: 20%; 77 | } 78 | .col-offset-25 { 79 | margin-left: 25%; 80 | } 81 | .col-offset-33, .col-offset-34 { 82 | margin-left: 33.3333%; 83 | } 84 | .col-offset-50 { 85 | margin-left: 50%; 86 | } 87 | .col-offset-66, .col-offset-67 { 88 | margin-left: 66.6666%; 89 | } 90 | .col-offset-75 { 91 | margin-left: 75%; 92 | } 93 | .col-offset-80 { 94 | margin-left: 80%; 95 | } 96 | .col-offset-90 { 97 | margin-left: 90%; 98 | } 99 | 100 | 101 | /* Explicit Column Percent Sizes */ 102 | /* By default each grid column will evenly distribute */ 103 | /* across the grid. However, you can specify individual */ 104 | /* columns to take up a certain size of the available area */ 105 | .col-10 { 106 | @include flex(0, 0, 10%); 107 | max-width: 10%; 108 | } 109 | .col-20 { 110 | @include flex(0, 0, 20%); 111 | max-width: 20%; 112 | } 113 | .col-25 { 114 | @include flex(0, 0, 25%); 115 | max-width: 25%; 116 | } 117 | .col-33, .col-34 { 118 | @include flex(0, 0, 33.3333%); 119 | max-width: 33.3333%; 120 | } 121 | .col-40 { 122 | @include flex(0, 0, 40%); 123 | max-width: 40%; 124 | } 125 | .col-50 { 126 | @include flex(0, 0, 50%); 127 | max-width: 50%; 128 | } 129 | .col-60 { 130 | @include flex(0, 0, 60%); 131 | max-width: 60%; 132 | } 133 | .col-66, .col-67 { 134 | @include flex(0, 0, 66.6666%); 135 | max-width: 66.6666%; 136 | } 137 | .col-75 { 138 | @include flex(0, 0, 75%); 139 | max-width: 75%; 140 | } 141 | .col-80 { 142 | @include flex(0, 0, 80%); 143 | max-width: 80%; 144 | } 145 | .col-90 { 146 | @include flex(0, 0, 90%); 147 | max-width: 90%; 148 | } 149 | 150 | 151 | /* Responsive Grid Classes */ 152 | /* Adding a class of responsive-X to a row */ 153 | /* will trigger the flex-direction to */ 154 | /* change to column and add some margin */ 155 | /* to any columns in the row for clearity */ 156 | 157 | @include responsive-grid-break('.responsive-sm', $grid-responsive-sm-break); 158 | @include responsive-grid-break('.responsive-md', $grid-responsive-md-break); 159 | @include responsive-grid-break('.responsive-lg', $grid-responsive-lg-break); 160 | -------------------------------------------------------------------------------- /snapchap/www/lib/ionic/scss/_popover.scss: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Popovers 4 | * -------------------------------------------------- 5 | * Popovers are independent views which float over content 6 | */ 7 | 8 | .popover-backdrop { 9 | position: fixed; 10 | top: 0; 11 | left: 0; 12 | z-index: $z-index-popover; 13 | width: 100%; 14 | height: 100%; 15 | background-color: $popover-backdrop-bg-inactive; 16 | 17 | &.active { 18 | background-color: $popover-backdrop-bg-active; 19 | } 20 | } 21 | 22 | .popover { 23 | position: absolute; 24 | top: 25%; 25 | left: 50%; 26 | z-index: $z-index-popover; 27 | display: block; 28 | margin-top: 12px; 29 | margin-left: -$popover-width / 2; 30 | height: $popover-height; 31 | width: $popover-width; 32 | background-color: $popover-bg-color; 33 | box-shadow: $popover-box-shadow; 34 | opacity: 0; 35 | 36 | .item:first-child { 37 | border-top: 0; 38 | } 39 | 40 | .item:last-child { 41 | border-bottom: 0; 42 | } 43 | 44 | &.popover-bottom { 45 | margin-top: -12px; 46 | } 47 | } 48 | 49 | 50 | // Set popover border-radius 51 | .popover, 52 | .popover .bar-header { 53 | border-radius: $popover-border-radius; 54 | } 55 | .popover .scroll-content { 56 | z-index: 1; 57 | margin: 2px 0; 58 | } 59 | .popover .bar-header { 60 | border-bottom-right-radius: 0; 61 | border-bottom-left-radius: 0; 62 | } 63 | .popover .has-header { 64 | border-top-right-radius: 0; 65 | border-top-left-radius: 0; 66 | } 67 | .popover-arrow { 68 | display: none; 69 | } 70 | 71 | 72 | // iOS Popover 73 | .platform-ios { 74 | 75 | .popover { 76 | box-shadow: $popover-box-shadow-ios; 77 | border-radius: $popover-border-radius-ios; 78 | } 79 | .popover .bar-header { 80 | @include border-top-radius($popover-border-radius-ios); 81 | } 82 | .popover .scroll-content { 83 | margin: 8px 0; 84 | border-radius: $popover-border-radius-ios; 85 | } 86 | .popover .scroll-content.has-header { 87 | margin-top: 0; 88 | } 89 | .popover-arrow { 90 | position: absolute; 91 | display: block; 92 | top: -17px; 93 | width: 30px; 94 | height: 19px; 95 | overflow: hidden; 96 | 97 | &:after { 98 | position: absolute; 99 | top: 12px; 100 | left: 5px; 101 | width: 20px; 102 | height: 20px; 103 | background-color: $popover-bg-color; 104 | border-radius: 3px; 105 | content: ''; 106 | @include rotate(-45deg); 107 | } 108 | } 109 | .popover-bottom .popover-arrow { 110 | top: auto; 111 | bottom: -10px; 112 | &:after { 113 | top: -6px; 114 | } 115 | } 116 | } 117 | 118 | 119 | // Android Popover 120 | .platform-android { 121 | 122 | .popover { 123 | margin-top: -32px; 124 | background-color: $popover-bg-color-android; 125 | box-shadow: $popover-box-shadow-android; 126 | 127 | .item { 128 | border-color: $popover-bg-color-android; 129 | background-color: $popover-bg-color-android; 130 | color: #4d4d4d; 131 | } 132 | &.popover-bottom { 133 | margin-top: 32px; 134 | } 135 | } 136 | 137 | .popover-backdrop, 138 | .popover-backdrop.active { 139 | background-color: transparent; 140 | } 141 | } 142 | 143 | 144 | // disable clicks on all but the popover 145 | .popover-open { 146 | pointer-events: none; 147 | 148 | .popover, 149 | .popover-backdrop { 150 | pointer-events: auto; 151 | } 152 | // prevent clicks on popover when loading overlay is active though 153 | &.loading-active { 154 | .popover, 155 | .popover-backdrop { 156 | pointer-events: none; 157 | } 158 | } 159 | } 160 | 161 | 162 | // wider popover on larger viewports 163 | @media (min-width: $popover-large-break-point) { 164 | .popover { 165 | width: $popover-large-width; 166 | margin-left: -$popover-large-width / 2; 167 | } 168 | } 169 | -------------------------------------------------------------------------------- /snapchap/www/app/components/sendTo/sendToCtrl.js: -------------------------------------------------------------------------------- 1 | angular.module('snapchat').controller('sendToCtrl', function ($scope, $stateParams, $state, mainService, $rootScope, $ionicHistory) { 2 | 3 | 4 | $scope.getUserFriends = function(userId) { 5 | mainService.getUserFriends(userId).then(function(response) { 6 | // console.log('response', response); 7 | $scope.friends = response; 8 | }) 9 | } 10 | $scope.getUserFriends($rootScope.userInfo.id); 11 | 12 | 13 | 14 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* 15 | Ticking a checkmark makes the Send Bar appear 16 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 17 | $scope.showSendBar = function() { 18 | $('.blue-checkbox').each(function() { 19 | if ($(this).is(':checked')) { 20 | fontWeight = 'bold'; 21 | bgColor = 'rgba(230, 230, 230, 0.7)' 22 | } 23 | else { 24 | fontWeight = 'normal'; 25 | bgColor = 'inherit'; 26 | } 27 | $(this).closest('label').css('font-weight', fontWeight); 28 | $(this).closest('li').css('background-color', bgColor); 29 | }); 30 | // var fontWeight = $(this).is(':checked') ? 'bold' : 'normal'; 31 | // $(this).closest('label').css('font-weight', fontWeight); 32 | // $(this).closest('li').css('background-color', 'lightgray'); 33 | 34 | var friendsChecked = $('.blue-checkbox').is(':checked') ? true : false; 35 | if (friendsChecked) { 36 | $('#send-to-view__send-bar').addClass('bar-is-visible'); 37 | } else $('#send-to-view__send-bar').removeClass('bar-is-visible'); 38 | }; 39 | 40 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* 41 | Clicking a friend puts selected friends into an array (and displays in Send Bar) 42 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 43 | var recipients = [], recipientIds = []; 44 | 45 | $scope.selectRecipients = function(recipientId, recipientUsername) { 46 | if (recipientIds.indexOf(recipientId) === -1) { 47 | recipientIds.push(recipientId); 48 | recipients.push(recipientUsername); 49 | } else { 50 | recipientIds.splice(recipients.indexOf(recipientId), 1); 51 | recipients.splice(recipients.indexOf(recipientUsername), 1); 52 | } 53 | 54 | setTimeout(function() { 55 | // console.log($(window).width() - $('#recipient-list').width()); 56 | if ($(window).width() - $('#recipient-list').width() < 65) { 57 | $('#recipient-list').css('right', '65px'); 58 | } else $('#recipient-list').css('right', 'auto'); 59 | }, 10); 60 | 61 | $scope.recipients = recipients; 62 | } 63 | 64 | // $('.blue-checkbox').each(function() { 65 | // recipients.push($(this).closest('li').find('.friend-name').html()); 66 | // }); 67 | 68 | 69 | 70 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* 71 | Send Button 72 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 73 | $scope.send = function() { 74 | // console.log('sendTo view: recipients:', $scope.recipients); 75 | // console.log('sendTo view: $rootScope.URI:', $rootScope.imgURI); 76 | // console.log('sendTo view: $rootScope.URI:', $rootScope.userInfo.id); 77 | mainService.sendMessage($rootScope.userInfo.id, recipientIds, $rootScope.imgURI); 78 | $ionicHistory.clearCache(); 79 | $ionicHistory.clearHistory(); 80 | mainService.showMenu(); 81 | $state.go('chat'); 82 | } 83 | 84 | 85 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* 86 | Hard-coded arrays for testing 87 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 88 | // $scope.besties = ['Brian', 'James', 'Abbie', 'Lucy', 'Morty'] 89 | $scope.besties = ['Brian', 'Fred', 'Arthur', 'Jo', 'Molly', 'James', 'Abbie', 'Lucy', 'Morty', 'Bucky', 'George', 'Charlie', 'Nicholas', 'Ricky', 'Kathleen', 'Lee', 'Mal'] 90 | 91 | }); 92 | -------------------------------------------------------------------------------- /snapchap/www/app/components/chat/chat.css: -------------------------------------------------------------------------------- 1 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* 2 | TOP NAV 3 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 4 | #chat-view__nav-top { 5 | background-color: RGBA(60, 178, 226, 1.00); 6 | } 7 | 8 | /* Flash button */ 9 | #chat-view__flash-btn { 10 | background-image: url('../../../img/icon/chat-white.png'); 11 | } 12 | /* Profile button */ 13 | #chat-view__profile-btn { 14 | background-image: url('../../../img/icon/snapchat-white.png'); 15 | } 16 | /* Camera view button */ 17 | #chat-view__camera-btn { 18 | background-image: url('../../../img/icon/camera-white.png'); 19 | } 20 | 21 | 22 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* 23 | MAIN CONTENT 24 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 25 | #chat-view__main-content { 26 | height: calc(100vh - 60px); 27 | position: relative; 28 | top: 60px; 29 | } 30 | #chat-view__input { 31 | width: 100%; 32 | position: relative; 33 | left: 37px; 34 | font-size: 1.2em; 35 | padding: 22px 0; 36 | } 37 | 38 | #chat-view ul>li { 39 | padding: 10px; 40 | font-weight: bold; 41 | position: relative; 42 | } 43 | #chat-view ul>li>.tap-to-view { 44 | font-weight: normal; 45 | color: gray; 46 | font-size: 0.8rem; 47 | } 48 | #chat-view ul>li>* { 49 | position: relative; 50 | left: 34px; 51 | } 52 | #chat-view ul>li>*:nth-child(1):after { 53 | content: ''; 54 | position: absolute; 55 | left: -30px; 56 | top: 10px; 57 | height: 20px; 58 | width: 20px; 59 | background-color: red; 60 | border-radius: 3px; 61 | } 62 | 63 | #pending-messages { 64 | margin-bottom: 100px; 65 | } 66 | 67 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* 68 | MESSAGE CANVAS 69 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 70 | #message-canvas-container { 71 | width: 100vw; 72 | height: 100vh; 73 | background-color: black; 74 | z-index: -1; 75 | position: fixed; 76 | bottom: 0px; 77 | padding: 0px; 78 | margin: 0px; 79 | left: 200%; 80 | top: 50%; 81 | transform: translate(-50%, -50%); 82 | } 83 | #message-canvas-container.active { 84 | z-index: 10; 85 | left: 50%; 86 | top: 50%; 87 | transform: translate(-50%, -50%); 88 | } 89 | #message-canvas { 90 | width: 100%; 91 | height: 100%; 92 | position: fixed; 93 | left: 0px; 94 | padding: 0px; 95 | background-color: yellow; 96 | /*The following two lines aren't working. Vertical position is set in getMessage fn in chatCtrl*/ 97 | left: 50%; 98 | top: 50%; 99 | transform: translate(-50%, -50%); 100 | } 101 | 102 | 103 | 104 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* 105 | BOTTOM NAV (now resides in mainCtrl and main.css) 106 | /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 107 | #chat-view .nav-bottom { 108 | /*background-color: white;*/ 109 | background-image: url('../../../img/icon/white-gradient.png'); 110 | background-repeat: repeat-x; 111 | -webkit-background-size: auto 80px; 112 | background-size: auto 80px; 113 | position: fixed; 114 | width: 100%; 115 | height: 80px; 116 | left: 0px; 117 | top: calc(100% - 80px); 118 | 119 | z-index: 1; 120 | padding: 0px; 121 | margin: 0px; 122 | } 123 | 124 | /*#chat-view__nav-bottom { 125 | top: calc(100vh - 60px); 126 | display: flex; 127 | justify-content: center; 128 | align-items: flex-end; 129 | } 130 | 131 | #chat-view__chat-btn { 132 | background-image: url('../../../img/icon/chat-gray.png'); 133 | position: relative; 134 | } 135 | #chat-view__take-photo-btn { 136 | background-image: url('../../../img/icon/circle-gray-big.png'); 137 | width: 50px; 138 | height: 50px; 139 | position: relative; 140 | margin: 0 31px; 141 | -webkit-background-size: 50px; 142 | background-size: 50px; 143 | } 144 | #chat-view__dots-btn { 145 | background-image: url('../../../img/icon/dots-gray.png'); 146 | position: relative; 147 | }*/ 148 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Snapchap 2 | ![Snapchap doodle](/snapchap/www/img/snapchap-doodle300.png?raw=true "Profile view image") 3 | 4 | OVERVIEW 5 | 6 | Snapchap is a Snapchat clone. This dev team built Snapchap as a vehicle to strengthen core skills in the SEAN stack (SQL, Express, Angular, Node) and to learn new technologies like Ionic and HTML5. 7 | 8 | Snapchap allows users to sign up and add friends and then send photo messages to those friends. Users can edit photos before sending them, adding text and filters or drawing artwork directly on the photo. Users can view photos sent to them and can edit user information and password. 9 | 10 | 11 | 12 | MAJOR TECHNOLOGIES 13 | - Ionic 14 | - Angular 15 | - HTML5 16 | - JSON Web Tokens 17 | 18 | 19 | LOG IN / SIGN UP (AND AUTHENTICATION) 20 | 21 | From this screen, users can log in with valid credentials or can sign up as a new user. New users are automatically logged in after signing up. Credentials are validated through JSON Web Tokens. 22 | 23 | ![Snapchap icon](/snapchap/www/img/screenshot/login2.png?raw=true "LogInSignUp view icon") 24 | 25 | 26 | FRIENDS 27 | 28 | Users can search for friends using their username. When a username is found, the user can click to request to add the friend. The friend can then see friend requests on their Added Me screen, which is reached through the Profile screen. There, they can accept the request, after which the two friends can send messages to each other. 29 | 30 | ![Profile screen](/snapchap/www/img/screenshot/doodle2.png?raw=true "Profile view") 31 | 32 | 33 | CAMERA 34 | 35 | For the camera, we used the Cordova plugin to access the mobile phone's built-in camera. Cordova saves the photo data to a variable which we placed on the $rootScope to make it accessible elsewhere. 36 | 37 | ![Photo1](/snapchap/www/img/screenshot/snap1.png?raw=true "Snap1") 38 | 39 | 40 | 41 | 42 | PHOTO EDITING 43 | 44 | The photo editing view relies heavily on HTML5's canvas for each of its major features (text overlay, drawing, and filters). For each feature, the artwork is saved to the canvas and the canvas data is then saved to the $rootScope image variable when the user presses the Send To button. 45 | 46 | ![Photo2](/snapchap/www/img/screenshot/snap2.png?raw=true "Snap2") 47 | 48 | ![Photo3](/snapchap/www/img/screenshot/snap3.png?raw=true "Snap3") 49 | 50 | ![Photo4](/snapchap/www/img/screenshot/snap4.png?raw=true "Snap4") 51 | 52 | 53 | SENDING PHOTOS 54 | 55 | After selecting which friends are to receive the photo message, the user presses the Send button to send the photo to the database. 56 | 57 | ![Send To screen](/snapchap/www/img/screenshot/sendto.png?raw=true "Send To view") 58 | 59 | 60 | VIEWING PHOTOS 61 | 62 | After a photo is sent, each recipient can find a pending message on their Chat screen. When a message is clicked, it is displayed for 10 seconds and then deleted from the database. 63 | 64 | ![Chat2](/snapchap/www/img/screenshot/chat2.png?raw=true "Chat2") 65 | 66 | ![Photo5](/snapchap/www/img/screenshot/snap5.png?raw=true "Snap5") 67 | 68 | 69 | SETTINGS 70 | 71 | Users can visit the Settings screen to change user information or log out. 72 | 73 | ![Settings screen](/snapchap/www/img/screenshot/settings.png?raw=true "Settings view") 74 | 75 | 76 | DATABASE 77 | 78 | The database stores: 79 | - user information, including login information 80 | - friend information, including pending and valid friendships, and 81 | - photo messages that have been sent but not viewed yet by the recipient 82 | 83 | Photos can be viewed for 10 seconds, after which they are deleted from the database. 84 | 85 | 86 | DISCLAIMER 87 | 88 | Snapchap is a non-commercial student project meant to mimic some of Snapchat's functionality and look. The project was a tool for new developers to learn to recreate a familiar app interface. Snapchap is not affiliated with Snapchat or Snap, Inc. and claims no rights or ownership of any of Snap, Inc.'s trademarks or copyrighted works. 89 | 90 | Official Snapchat site: https://www.snapchat.com/ 91 | Official Snap, Inc. site: https://www.snap.com/en-US/ 92 | --------------------------------------------------------------------------------