From ef0ee37930f5d72358820b13b74b67cf197c9185 Mon Sep 17 00:00:00 2001 From: Andy Y Date: Mon, 23 Feb 2015 16:27:18 -0800 Subject: [PATCH 01/43] Front end time --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d3ec394..e6005ee 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ # decluttter -App to declutter your life. +App to declutter your life and then stuff. From 295c46cdc85bb3533adf373ead28fe4582a21f5f Mon Sep 17 00:00:00 2001 From: Andy Y Date: Wed, 25 Feb 2015 01:05:41 -0800 Subject: [PATCH 02/43] Authentication is working, need to add in rest of the views --- .DS_Store | Bin 0 -> 6148 bytes appuser/migrations/0001_initial.py | 10 +- .../migrations/0002_stream_deleted_status.py | 20 -- appuser/models.py | 9 +- appuser/views.py | 5 +- authentication/__init__.py | 0 authentication/admin.py | 3 + authentication/app_settings.py | 42 ++++ authentication/migrations/__init__.py | 0 authentication/models.py | 3 + authentication/register/__init__.py | 1 + authentication/register/views.py | 85 +++++++ authentication/tests.py | 3 + authentication/urls.py | 20 ++ authentication/utils.py | 13 ++ authentication/views.py | 169 ++++++++++++++ declutter/settings.py | 24 +- declutter/urls.py | 4 + declutter_db.sqlite3 | Bin 167936 -> 262144 bytes items/migrations/0001_initial.py | 32 +++ requirements.txt | 7 + static/app/index.html | 6 + static/app/scripts/app.js | 20 +- static/app/scripts/controllers/about.js | 2 + static/app/scripts/controllers/login.js | 21 ++ static/app/scripts/services/djangoAuth.js | 208 ++++++++++++++++++ static/app/scripts/services/validate.js | 50 +++++ static/app/views/login.html | 17 ++ static/test/karma.conf.js | 2 + 29 files changed, 736 insertions(+), 40 deletions(-) create mode 100644 .DS_Store delete mode 100644 appuser/migrations/0002_stream_deleted_status.py create mode 100644 authentication/__init__.py create mode 100644 authentication/admin.py create mode 100644 authentication/app_settings.py create mode 100644 authentication/migrations/__init__.py create mode 100644 authentication/models.py create mode 100644 authentication/register/__init__.py create mode 100644 authentication/register/views.py create mode 100644 authentication/tests.py create mode 100644 authentication/urls.py create mode 100644 authentication/utils.py create mode 100644 authentication/views.py create mode 100644 items/migrations/0001_initial.py create mode 100644 static/app/scripts/controllers/login.js create mode 100755 static/app/scripts/services/djangoAuth.js create mode 100755 static/app/scripts/services/validate.js create mode 100644 static/app/views/login.html diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 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 + @@ -71,7 +72,9 @@ + + @@ -83,8 +86,11 @@ + + + diff --git a/static/app/scripts/app.js b/static/app/scripts/app.js index 074c099..d281806 100644 --- a/static/app/scripts/app.js +++ b/static/app/scripts/app.js @@ -28,43 +28,43 @@ angular controller: 'AboutCtrl' }) .when('/login', { - templateURL: 'views/login.html', + templateUrl: 'views/login.html', controller: 'LoginCtrl' }) .when('/logout', { - templateURL: 'views/logout.html', + templateUrl: 'views/logout.html', controller: 'LogoutCtrl' }) .when('/register', { - templateURL: 'views/register.html', + templateUrl: 'views/register.html', controller: 'RegisterCtrl' }) .when('/friendscrap', { - templateURL: 'views/friendscrap.html', + templateUrl: 'views/friendscrap.html', controller: 'FriendscrapCtrl' }) .when('/mycrap', { - templateURL: 'views/mycrap.html', + templateUrl: 'views/mycrap.html', controller: 'MycrapCtrl' }) .when('/mycrap/myclaimed', { - templateURL: 'views/myclaimed.html', + templateUrl: 'views/myclaimed.html', controller: 'MycrapCtrl' }) .when('/mycrap/postitem', { - templateURL: 'views/postitem.html', + templateUrl: 'views/postitem.html', controller: 'MycrapCtrl' }) .when('/mycrap/:item', { - templateURL: 'views/edititem.html', + templateUrl: 'views/edititem.html', controller: 'MycrapCtrl' }) .when('/myfriends', { - templateURL: 'views/myfriends.html', + templateUrl: 'views/myfriends.html', controller: 'MyfriendsCtrl' }) .when('/myfriends/addfriend', { - templateURL: 'views/addfriend.html', + templateUrl: 'views/addfriend.html', controller: 'MyfriendsCtrl' }) .otherwise({ diff --git a/static/app/scripts/controllers/about.js b/static/app/scripts/controllers/about.js index 1159518..2a72572 100644 --- a/static/app/scripts/controllers/about.js +++ b/static/app/scripts/controllers/about.js @@ -14,4 +14,6 @@ angular.module('declutterApp') 'AngularJS', 'Karma' ]; + + console.log('AboutCtrl loaded'); }); diff --git a/static/app/scripts/controllers/login.js b/static/app/scripts/controllers/login.js new file mode 100644 index 0000000..17fd207 --- /dev/null +++ b/static/app/scripts/controllers/login.js @@ -0,0 +1,21 @@ +'use strict'; + +angular.module('declutterApp') + .controller('LoginCtrl', function ($scope, $location, djangoAuth, Validate) { + $scope.model = {'username':'','password':''}; + $scope.complete = false; + $scope.login = function(formData){ + $scope.errors = []; + Validate.form_validation(formData,$scope.errors); + if(!formData.$invalid){ + djangoAuth.login($scope.model.username, $scope.model.password) + .then(function(data){ + // success case + $location.path("/"); + },function(data){ + // error case + $scope.errors = data; + }); + } + } + }); diff --git a/static/app/scripts/services/djangoAuth.js b/static/app/scripts/services/djangoAuth.js new file mode 100755 index 0000000..a4fa8a6 --- /dev/null +++ b/static/app/scripts/services/djangoAuth.js @@ -0,0 +1,208 @@ +'use strict'; + +angular.module('declutterApp') + .service('djangoAuth', function djangoAuth($q, $http, $cookies, $rootScope) { + // AngularJS will instantiate a singleton by calling "new" on this function + var service = { + /* START CUSTOMIZATION HERE */ + // Change this to point to your Django REST Auth API + // e.g. /api/rest-auth (DO NOT INCLUDE ENDING SLASH) + 'API_URL': '/api/rest-auth', + // Set use_session to true to use Django sessions to store security token. + // Set use_session to false to store the security token locally and transmit it as a custom header. + 'use_session': true, + /* END OF CUSTOMIZATION */ + 'authenticated': null, + 'authPromise': null, + 'request': function(args) { + // Let's retrieve the token from the cookie, if available + if($cookies.token){ + $http.defaults.headers.common.Authorization = 'Token ' + $cookies.token; + } + // Continue + params = args.params || {} + args = args || {}; + var deferred = $q.defer(), + url = this.API_URL + args.url, + method = args.method || "GET", + params = params, + data = args.data || {}; + // Fire the request, as configured. + $http({ + url: url, + withCredentials: this.use_session, + method: method.toUpperCase(), + headers: {'X-CSRFToken': $cookies['csrftoken']}, + params: params, + data: data + }) + .success(angular.bind(this,function(data, status, headers, config) { + deferred.resolve(data, status); + })) + .error(angular.bind(this,function(data, status, headers, config) { + console.log("error syncing with: " + url); + // Set request status + if(data){ + data.status = status; + } + if(status == 0){ + if(data == ""){ + data = {}; + data['status'] = 0; + data['non_field_errors'] = ["Could not connect. Please try again."]; + } + // or if the data is null, then there was a timeout. + if(data == null){ + // Inject a non field error alerting the user + // that there's been a timeout error. + data = {}; + data['status'] = 0; + data['non_field_errors'] = ["Server timed out. Please try again."]; + } + } + deferred.reject(data, status, headers, config); + })); + return deferred.promise; + }, + 'register': function(username,password1,password2,email,more){ + var data = { + 'username':username, + 'password1':password1, + 'password2':password2, + 'email':email + } + data = angular.extend(data,more); + return this.request({ + 'method': "POST", + 'url': "/registration/", + 'data' :data + }); + }, + 'login': function(username,password){ + var djangoAuth = this; + return this.request({ + 'method': "POST", + 'url': "/login/", + 'data':{ + 'username':username, + 'password':password + } + }).then(function(data){ + if(!djangoAuth.use_session){ + $http.defaults.headers.common.Authorization = 'Token ' + data.key; + $cookies.token = data.key; + } + djangoAuth.authenticated = true; + $rootScope.$broadcast("djangoAuth.logged_in", data); + }); + }, + 'logout': function(){ + var djangoAuth = this; + return this.request({ + 'method': "POST", + 'url': "/logout/" + }).then(function(data){ + delete $http.defaults.headers.common.Authorization; + delete $cookies.token; + djangoAuth.authenticated = false; + $rootScope.$broadcast("djangoAuth.logged_out"); + }); + }, + 'changePassword': function(password1,password2){ + return this.request({ + 'method': "POST", + 'url': "/password/change/", + 'data':{ + 'new_password1':password1, + 'new_password2':password2 + } + }); + }, + 'resetPassword': function(email){ + return this.request({ + 'method': "POST", + 'url': "/password/reset/", + 'data':{ + 'email':email + } + }); + }, + 'profile': function(){ + return this.request({ + 'method': "GET", + 'url': "/user/" + }); + }, + 'updateProfile': function(data){ + return this.request({ + 'method': "PATCH", + 'url': "/user/", + 'data':data + }); + }, + 'verify': function(key){ + return this.request({ + 'method': "POST", + 'url': "/registration/verify-email/", + 'data': {'key': key} + }); + }, + 'confirmReset': function(uid,token,password1,password2){ + return this.request({ + 'method': "POST", + 'url': "/password/reset/confirm/", + 'data':{ + 'uid': uid, + 'token': token, + 'new_password1':password1, + 'new_password2':password2 + } + }); + }, + 'authenticationStatus': function(restrict, force){ + // Set restrict to true to reject the promise if not logged in + // Set to false or omit to resolve when status is known + // Set force to true to ignore stored value and query API + restrict = restrict || false; + force = force || false; + if(this.authPromise == null || force){ + this.authPromise = this.request({ + 'method': "GET", + 'url': "/user/" + }) + } + var da = this; + var getAuthStatus = $q.defer(); + if(this.authenticated != null && !force){ + // We have a stored value which means we can pass it back right away. + if(this.authenticated == false && restrict){ + getAuthStatus.reject("User is not logged in."); + }else{ + getAuthStatus.resolve(); + } + }else{ + // There isn't a stored value, or we're forcing a request back to + // the API to get the authentication status. + this.authPromise.then(function(){ + da.authenticated = true; + getAuthStatus.resolve(); + },function(){ + da.authenticated = false; + if(restrict){ + getAuthStatus.reject("User is not logged in."); + }else{ + getAuthStatus.resolve(); + } + }); + } + return getAuthStatus.promise; + }, + 'initialize': function(url, sessions){ + this.API_URL = url; + this.use_session = sessions; + return this.authenticationStatus(); + } + + } + return service; + }); diff --git a/static/app/scripts/services/validate.js b/static/app/scripts/services/validate.js new file mode 100755 index 0000000..1d18842 --- /dev/null +++ b/static/app/scripts/services/validate.js @@ -0,0 +1,50 @@ +'use strict'; + +angular.module('declutterApp') + .service('Validate', function Validate() { + return { + 'message': { + 'minlength': 'This value is not long enough.', + 'maxlength': 'This value is too long.', + 'email': 'A properly formatted email address is required.', + 'required': 'This field is required.' + }, + 'more_messages': { + 'demo': { + 'required': 'Here is a sample alternative required message.' + } + }, + 'check_more_messages': function(name,error){ + return (this.more_messages[name] || [])[error] || null; + }, + validation_messages: function(field,form,error_bin){ + var messages = []; + for(var e in form[field].$error){ + if(form[field].$error[e]){ + var special_message = this.check_more_messages(field,e); + if(special_message){ + messages.push(special_message); + }else if(this.message[e]){ + messages.push(this.message[e]); + }else{ + messages.push("Error: " + e) + } + } + } + var deduped_messages = []; + angular.forEach(messages, function(el, i){ + if(deduped_messages.indexOf(el) === -1) deduped_messages.push(el); + }); + if(error_bin){ + error_bin[field] = deduped_messages; + } + }, + 'form_validation': function(form,error_bin){ + for(var field in form){ + if(field.substr(0,1) != "$"){ + this.validation_messages(field,form,error_bin); + } + } + } + } +}); \ No newline at end of file diff --git a/static/app/views/login.html b/static/app/views/login.html new file mode 100644 index 0000000..13febf8 --- /dev/null +++ b/static/app/views/login.html @@ -0,0 +1,17 @@ +
+
+
+ + +
+
{{error}}
+
+ + +
+
{{error}}
+
{{error}}
+
{{error}}
+ +
+
diff --git a/static/test/karma.conf.js b/static/test/karma.conf.js index 7483b46..9d99a1d 100644 --- a/static/test/karma.conf.js +++ b/static/test/karma.conf.js @@ -19,7 +19,9 @@ module.exports = function(config) { // list of files / patterns to load in the browser files: [ // bower:js + 'bower_components/jquery/dist/jquery.js', 'bower_components/angular/angular.js', + 'bower_components/bootstrap/dist/js/bootstrap.js', 'bower_components/angular-animate/angular-animate.js', 'bower_components/angular-cookies/angular-cookies.js', 'bower_components/angular-resource/angular-resource.js', From 296e2172fefa80c5a17efee8c01a665847c53b45 Mon Sep 17 00:00:00 2001 From: Andy Y Date: Wed, 25 Feb 2015 09:52:49 -0800 Subject: [PATCH 03/43] Registration, login, logout implemented on both front and backend --- declutter_db.sqlite3 | Bin 262144 -> 262144 bytes static/app/index.html | 1 + static/app/scripts/controllers/logout.js | 6 ++++ static/app/scripts/controllers/register.js | 22 +++++++++++++++ static/app/views/logout.html | 3 ++ static/app/views/register.html | 31 +++++++++++++++++++++ 6 files changed, 63 insertions(+) create mode 100755 static/app/scripts/controllers/logout.js create mode 100644 static/app/scripts/controllers/register.js create mode 100755 static/app/views/logout.html create mode 100644 static/app/views/register.html diff --git a/declutter_db.sqlite3 b/declutter_db.sqlite3 index e3ee6b855cf4d8dc3cb90c0eca8404ee16b89cf2..1807312a98d17937181bb9a6bd5f3dc2041f7450 100644 GIT binary patch delta 6396 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 + diff --git a/static/app/scripts/controllers/logout.js b/static/app/scripts/controllers/logout.js new file mode 100755 index 0000000..1d0e326 --- /dev/null +++ b/static/app/scripts/controllers/logout.js @@ -0,0 +1,6 @@ +'use strict'; + +angular.module('declutterApp') + .controller('LogoutCtrl', function ($scope, $location, djangoAuth) { + djangoAuth.logout(); + }); diff --git a/static/app/scripts/controllers/register.js b/static/app/scripts/controllers/register.js new file mode 100644 index 0000000..e9530a8 --- /dev/null +++ b/static/app/scripts/controllers/register.js @@ -0,0 +1,22 @@ +'use strict'; + +angular.module('declutterApp') + .controller('RegisterCtrl', function ($scope, $location, djangoAuth, Validate) { + $scope.model = {'username':'','password':'','email':''}; + $scope.complete = false; + $scope.register = function(formData){ + $scope.errors = []; + Validate.form_validation(formData,$scope.errors); + if(!formData.$invalid){ + djangoAuth.register($scope.model.username,$scope.model.password1,$scope.model.password2,$scope.model.email) + .then(function(data){ + // success case + $scope.complete = true; + $location.path("/"); + },function(data){ + // error case + $scope.errors = data; + }); + } + } + }); diff --git a/static/app/views/logout.html b/static/app/views/logout.html new file mode 100755 index 0000000..d1d8689 --- /dev/null +++ b/static/app/views/logout.html @@ -0,0 +1,3 @@ +
+
You have logged out.
+
\ No newline at end of file diff --git a/static/app/views/register.html b/static/app/views/register.html new file mode 100644 index 0000000..c77d0b2 --- /dev/null +++ b/static/app/views/register.html @@ -0,0 +1,31 @@ +
+
+
+
+ + +
+
{{error}}
+
+ + +
+
{{error}}
+
+ + +
+
{{error}}
+
+ + +
+
{{error}}
+ +
+

You are already logged in! You don't need to register.

+
+
+
Great! You've just registered. You should receive an email shortly with instructions on how to activate your account.
+
+
\ No newline at end of file From b54ca17e535092fba348b4a429294cf7e4019eec Mon Sep 17 00:00:00 2001 From: Shanarae Goodwin Date: Wed, 25 Feb 2015 09:54:36 -0800 Subject: [PATCH 04/43] model updates, front end set up --- .DS_Store | Bin 0 -> 6148 bytes declutter_db.sqlite3 | Bin 167936 -> 48128 bytes items/api/serializers.py | 11 ++- items/api/urls.py | 5 +- items/api/views.py | 24 +++++-- items/migrations/0001_initial.py | 34 ++++++++++ items/migrations/0002_auto_20150225_0129.py | 24 +++++++ items/models.py | 5 +- static/.tmp/styles/main.css | 6 +- static/app/images/noun_28242_cc.png | Bin 0 -> 33861 bytes static/app/index.html | 16 ++++- static/app/scripts/app.js | 32 ++++----- static/app/scripts/controllers/mycrap.js | 71 ++++++++++++++++++++ static/app/scripts/controllers/myfriends.js | 10 +++ static/app/styles/main.css | 4 ++ static/app/views/addfriend.html | 14 ++++ static/app/views/main.html | 18 ++--- static/app/views/myclaimed.html | 10 +++ static/app/views/mycrap.html | 43 ++++++++++++ static/app/views/myfriends.html | 32 +++++++++ static/app/views/postitem.html | 28 ++++++++ static/test/karma.conf.js | 2 + 22 files changed, 345 insertions(+), 44 deletions(-) create mode 100644 .DS_Store create mode 100644 items/migrations/0001_initial.py create mode 100644 items/migrations/0002_auto_20150225_0129.py create mode 100644 static/app/images/noun_28242_cc.png create mode 100644 static/app/scripts/controllers/mycrap.js create mode 100644 static/app/scripts/controllers/myfriends.js create mode 100644 static/app/views/addfriend.html create mode 100644 static/app/views/myclaimed.html create mode 100644 static/app/views/mycrap.html create mode 100644 static/app/views/myfriends.html create mode 100644 static/app/views/postitem.html diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 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 literal 167936 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\d+)/$', ItemGenericRetrieveUpdateAPIView.as_view(), name="item-generic-single"), + url(r'^poster/(?P\d+)/$', ItemListCreateAPIView.as_view()), + url(r'^claimer/(?P\d+)/$', ClaimItemListCreateAPIView.as_view()), ) \ No newline at end of file diff --git a/items/api/views.py b/items/api/views.py index 5a9cd6e..d405946 100644 --- a/items/api/views.py +++ b/items/api/views.py @@ -1,6 +1,6 @@ from rest_framework.views import APIView, Response from rest_framework import status -from rest_framework.generics import CreateAPIView, ListAPIView, RetrieveUpdateAPIView +from rest_framework.generics import CreateAPIView, ListAPIView, RetrieveUpdateAPIView, ListCreateAPIView from items.api.serializers import ItemSerializer from items.models import Item @@ -32,7 +32,7 @@ def put(self, request, item_id, *args): serializer = ItemSerializer(data=request.data) if serializer.is_valid(): - serializer.save() + serializer.save(poster=request.user) return Response(serializer.data, status.HTTP_202_ACCEPTED) else: @@ -46,7 +46,7 @@ def create(self, request, *args): serializer = ItemSerializer(data=request.data) if serializer.is_valid(): - serializer.save() + serializer.save(poster=request.user) return Response(serializer.data, status.HTTP_201_CREATED) else: @@ -67,4 +67,20 @@ class ItemGenericRetrieveUpdateAPIView(RetrieveUpdateAPIView): lookup_field = 'id' def get_queryset(self): - return Item.objects.all() \ No newline at end of file + return Item.objects.all() + + +class ItemListCreateAPIView(ListCreateAPIView): + serializer_class = ItemSerializer + + def get_queryset(self): + user = self.request.user + return Item.objects.filter(poster=user) + + +class ClaimItemListCreateAPIView(ListCreateAPIView): + serializer_class = ItemSerializer + + def get_queryset(self): + user = self.request.user + return Item.Objects.filter(claimer=user) \ No newline at end of file diff --git a/items/migrations/0001_initial.py b/items/migrations/0001_initial.py new file mode 100644 index 0000000..3deb5bb --- /dev/null +++ b/items/migrations/0001_initial.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Item', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('item_name', models.CharField(max_length=100)), + ('description', models.TextField(max_length=500)), + ('created', models.DateField(auto_now_add=True)), + ('image', models.CharField(max_length=100, null=True, blank=True)), + ('availability', models.BooleanField(default=True)), + ('category', models.CharField(max_length=50, choices=[(b'BOOKS', b'Books'), (b'ENTERTAINMENT', b'Movies, Music, and Games'), (b'ELECTRONICS', b'Electronics and Computers'), (b'HOME', b'Home'), (b'GARDEN', b'Garden and Tools'), (b'BEAUTY', b'Beauty and Health'), (b'TOYS', b'Toys, Kids and Baby'), (b'CLOTHING', b'Clothing, Shoes and Jewelry'), (b'SPORTS', b'Sports and Outdoors'), (b'AUTOMOTIVE', b'Automotive')])), + ('claimer_id', models.ForeignKey(related_name='claimed_items', blank=True, to=settings.AUTH_USER_MODEL, null=True)), + ('poster_id', models.ForeignKey(related_name='posted_items', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'Item', + 'verbose_name_plural': 'Items', + }, + bases=(models.Model,), + ), + ] diff --git a/items/migrations/0002_auto_20150225_0129.py b/items/migrations/0002_auto_20150225_0129.py new file mode 100644 index 0000000..81d7a33 --- /dev/null +++ b/items/migrations/0002_auto_20150225_0129.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('items', '0001_initial'), + ] + + operations = [ + migrations.RenameField( + model_name='item', + old_name='claimer_id', + new_name='claimer', + ), + migrations.RenameField( + model_name='item', + old_name='poster_id', + new_name='poster', + ), + ] diff --git a/items/models.py b/items/models.py index a384dd2..1c6106d 100644 --- a/items/models.py +++ b/items/models.py @@ -1,3 +1,4 @@ +from django.contrib.auth.models import User from django.db import models # Create your models here. @@ -20,8 +21,8 @@ class Meta: ('AUTOMOTIVE', 'Automotive'), ) - poster_id = models.IntegerField() - claimer_id = models.IntegerField() + poster = models.ForeignKey(User, related_name="posted_items") + claimer = models.ForeignKey(User, null=True, blank=True, related_name="claimed_items") item_name = models.CharField(max_length=100) description = models.TextField(max_length=500) created = models.DateField(auto_now_add=True) diff --git a/static/.tmp/styles/main.css b/static/.tmp/styles/main.css index af74efc..bfaf811 100644 --- a/static/.tmp/styles/main.css +++ b/static/.tmp/styles/main.css @@ -80,6 +80,8 @@ body { .jumbotron { border-bottom: 0; } -} -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsaUJBQWdCO0VBQ2hCLGtCQUFpQjtFQUNqQixhQUFZO0VBQ1osa0JBQWlCO0VBQ2xCOztBQUVEO0VBQ0UsWUFBVztFQUNaOztBQUVELDRFQUEyRTtBQUMzRTs7O0VBR0Usb0JBQW1CO0VBQ25CLHFCQUFvQjtFQUNyQjs7QUFFRCx5QkFBd0I7QUFDeEI7RUFDRSxrQ0FBaUM7RUFDakMscUJBQW9CO0VBQ3JCO0FBQ0Qsa0VBQWlFO0FBQ2pFO0VBQ0UsZUFBYztFQUNkLGtCQUFpQjtFQUNqQixtQkFBa0I7RUFDbEIsc0JBQXFCO0VBQ3RCOztBQUVELHlCQUF3QjtBQUN4QjtFQUNFLG1CQUFrQjtFQUNsQixhQUFZO0VBQ1osK0JBQThCO0VBQy9COztBQUVEO0VBQ0UsZ0JBQWU7RUFDaEI7O0FBRUQsZ0RBQStDO0FBQy9DO0VBQ0Usb0JBQW1CO0VBQ25CLGtDQUFpQztFQUNsQztBQUNEO0VBQ0UsaUJBQWdCO0VBQ2hCLG9CQUFtQjtFQUNwQjs7QUFFRCxtQ0FBa0M7QUFDbEM7RUFDRSxnQkFBZTtFQUNoQjtBQUNEO0VBQ0Usa0JBQWlCO0VBQ2xCOztBQUVELDBDQUF5QztBQUN6QztFQUNFO0lBQ0Usa0JBQWlCO0lBQ2xCOztFQUVELHdDQUF1QztFQUN2Qzs7O0lBR0UsaUJBQWdCO0lBQ2hCLGtCQUFpQjtJQUNsQjtFQUNELDZCQUE0QjtFQUM1QjtJQUNFLHFCQUFvQjtJQUNyQjtFQUNELGtFQUFpRTtFQUNqRTtJQUNFLGtCQUFpQjtJQUNsQjtFQUNGIiwiZmlsZSI6Im1haW4uY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmJyb3dzZWhhcHB5IHtcbiAgbWFyZ2luOiAwLjJlbSAwO1xuICBiYWNrZ3JvdW5kOiAjY2NjO1xuICBjb2xvcjogIzAwMDtcbiAgcGFkZGluZzogMC4yZW0gMDtcbn1cblxuYm9keSB7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi8qIEV2ZXJ5dGhpbmcgYnV0IHRoZSBqdW1ib3Ryb24gZ2V0cyBzaWRlIHNwYWNpbmcgZm9yIG1vYmlsZSBmaXJzdCB2aWV3cyAqL1xuLmhlYWRlcixcbi5tYXJrZXRpbmcsXG4uZm9vdGVyIHtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xufVxuXG4vKiBDdXN0b20gcGFnZSBoZWFkZXIgKi9cbi5oZWFkZXIge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cbi8qIE1ha2UgdGhlIG1hc3RoZWFkIGhlYWRpbmcgdGhlIHNhbWUgaGVpZ2h0IGFzIHRoZSBuYXZpZ2F0aW9uICovXG4uaGVhZGVyIGgzIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxOXB4O1xufVxuXG4vKiBDdXN0b20gcGFnZSBmb290ZXIgKi9cbi5mb290ZXIge1xuICBwYWRkaW5nLXRvcDogMTlweDtcbiAgY29sb3I6ICM3Nzc7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1O1xufVxuXG4uY29udGFpbmVyLW5hcnJvdyA+IGhyIHtcbiAgbWFyZ2luOiAzMHB4IDA7XG59XG5cbi8qIE1haW4gbWFya2V0aW5nIG1lc3NhZ2UgYW5kIHNpZ24gdXAgYnV0dG9uICovXG4uanVtYm90cm9uIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbn1cbi5qdW1ib3Ryb24gLmJ0biB7XG4gIGZvbnQtc2l6ZTogMjFweDtcbiAgcGFkZGluZzogMTRweCAyNHB4O1xufVxuXG4vKiBTdXBwb3J0aW5nIG1hcmtldGluZyBjb250ZW50ICovXG4ubWFya2V0aW5nIHtcbiAgbWFyZ2luOiA0MHB4IDA7XG59XG4ubWFya2V0aW5nIHAgKyBoNCB7XG4gIG1hcmdpbi10b3A6IDI4cHg7XG59XG5cbi8qIFJlc3BvbnNpdmU6IFBvcnRyYWl0IHRhYmxldHMgYW5kIHVwICovXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDczMHB4O1xuICB9XG5cbiAgLyogUmVtb3ZlIHRoZSBwYWRkaW5nIHdlIHNldCBlYXJsaWVyICovXG4gIC5oZWFkZXIsXG4gIC5tYXJrZXRpbmcsXG4gIC5mb290ZXIge1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB9XG4gIC8qIFNwYWNlIG91dCB0aGUgbWFzdGhlYWQgKi9cbiAgLmhlYWRlciB7XG4gICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgfVxuICAvKiBSZW1vdmUgdGhlIGJvdHRvbSBib3JkZXIgb24gdGhlIGp1bWJvdHJvbiBmb3IgdmlzdWFsIGVmZmVjdCAqL1xuICAuanVtYm90cm9uIHtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICB9XG59XG4iXX0= */ \ No newline at end of file + .other-color{ + background: #f0ac1d; + } +} \ No newline at end of file diff --git a/static/app/images/noun_28242_cc.png b/static/app/images/noun_28242_cc.png new file mode 100644 index 0000000000000000000000000000000000000000..396a4ebc485ef568b567f2fe48f323f1832c183d GIT binary patch literal 33861 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 literal 0 HcmV?d00001 diff --git a/static/app/index.html b/static/app/index.html index 4f80e08..935a68a 100644 --- a/static/app/index.html +++ b/static/app/index.html @@ -8,6 +8,7 @@ + @@ -30,18 +31,22 @@ + declutter + @@ -53,7 +58,8 @@ @@ -71,7 +77,9 @@ + + @@ -85,6 +93,8 @@ + + diff --git a/static/app/scripts/app.js b/static/app/scripts/app.js index 074c099..e6dc3df 100644 --- a/static/app/scripts/app.js +++ b/static/app/scripts/app.js @@ -1,13 +1,5 @@ 'use strict'; -/** - * @ngdoc overview - * @name declutterApp - * @description - * # declutterApp - * - * Main module of the application. - */ angular .module('declutterApp', [ 'ngAnimate', @@ -20,51 +12,51 @@ angular .config(function ($routeProvider) { $routeProvider .when('/', { - templateUrl: 'views/main.html', + templateUrl: '/views/main.html', controller: 'MainCtrl' }) .when('/about', { - templateUrl: 'views/about.html', + templateUrl: '/views/about.html', controller: 'AboutCtrl' }) .when('/login', { - templateURL: 'views/login.html', + templateUrl: 'views/login.html', controller: 'LoginCtrl' }) .when('/logout', { - templateURL: 'views/logout.html', + templateUrl: 'views/logout.html', controller: 'LogoutCtrl' }) .when('/register', { - templateURL: 'views/register.html', + templateUrl: 'views/register.html', controller: 'RegisterCtrl' }) .when('/friendscrap', { - templateURL: 'views/friendscrap.html', + templateUrl: 'views/friendscrap.html', controller: 'FriendscrapCtrl' }) .when('/mycrap', { - templateURL: 'views/mycrap.html', + templateUrl: '/views/mycrap.html', controller: 'MycrapCtrl' }) .when('/mycrap/myclaimed', { - templateURL: 'views/myclaimed.html', + templateUrl: 'views/myclaimed.html', controller: 'MycrapCtrl' }) .when('/mycrap/postitem', { - templateURL: 'views/postitem.html', + templateUrl: 'views/postitem.html', controller: 'MycrapCtrl' }) .when('/mycrap/:item', { - templateURL: 'views/edititem.html', + templateUrl: 'views/edititem.html', controller: 'MycrapCtrl' }) .when('/myfriends', { - templateURL: 'views/myfriends.html', + templateUrl: 'views/myfriends.html', controller: 'MyfriendsCtrl' }) .when('/myfriends/addfriend', { - templateURL: 'views/addfriend.html', + templateUrl: 'views/addfriend.html', controller: 'MyfriendsCtrl' }) .otherwise({ diff --git a/static/app/scripts/controllers/mycrap.js b/static/app/scripts/controllers/mycrap.js new file mode 100644 index 0000000..dbaf157 --- /dev/null +++ b/static/app/scripts/controllers/mycrap.js @@ -0,0 +1,71 @@ +'use strict'; + +angular.module('declutterApp') + + .controller('MycrapCtrl', function ($scope, $http, $cookies, $location) { + $http.defaults.headers.post['X-CSRFToken'] = $cookies.csrftoken; + + $scope.itemCategories = [ + {category:'BOOKS', name:'Books'}, + {category:'ENTERTAINMENT', name:'Movies, Music, and Games'}, + {category:'ELECTRONICS', name:'Electronics and Computers'}, + {category:'HOME', name:'Home'}, + {category:'GARDEN', name:'Garden and Tools'}, + {category:'BEAUTY', name:'Beauty and Health'}, + {category:'TOYS', name:'Toys, Kids and Baby'}, + {category:'CLOTHING', name:'Clothing, Shoes and Jewelry'}, + {category:'SPORTS', name:'Sports and Outdoors'}, + {category:'AUTOMOTIVE', name:'Automotive'} + ]; + + var items_request = $http.get('/api/items/'); + items_request.success(function(data){ + console.log("success" + data); + $scope.items=data; + }); + items_request.error(function(data){ + $scope.error = ["Error with items"]; + console.log("error" + data); + }); + + $scope.getTotalItems = function(){ + return $scope.items ? $scope.items.length : 0; + }; + + $scope.addItem = function(){ + var data = { + "item_name":$scope.formItemName, + "description":$scope.formItemDescription, + "category":$scope.formItemCategory + }; + + $http.post('/api/items/create/', data). + success(function(data){ + $scope.items.push({item_name:data.item_name, description:data.description, category:data.category}); + $scope.formItemName = ''; + $scope.formItemDescription = ''; + $scope.formItemCategory = ''; + $location.path('/mycrap'); + alert("Your new item has been posted!"); + }). + + error(function(data){ + $scope.error = ["Error adding new item"]; + console.log("error" + data.error); + }); + }; + + $scope.removeItem = function(item){ + $http.delete('api/items/item/' + item.id). + success(function(data){ + $scope.items.splice( + $scope.items.indexOf(item), + 1 + ); + }). + error(function(data){ + $scope.error = ["Error deleting item"]; + }); + }; + + }); diff --git a/static/app/scripts/controllers/myfriends.js b/static/app/scripts/controllers/myfriends.js new file mode 100644 index 0000000..a220aa6 --- /dev/null +++ b/static/app/scripts/controllers/myfriends.js @@ -0,0 +1,10 @@ +'use strict'; + +angular.module('declutterApp') + .controller('MyfriendsCtrl', function ($scope) { + $scope.awesomeThings = [ + 'HTML5 Boilerplate', + 'AngularJS', + 'Karma' + ]; + }); diff --git a/static/app/styles/main.css b/static/app/styles/main.css index b2e953f..9197e2a 100644 --- a/static/app/styles/main.css +++ b/static/app/styles/main.css @@ -80,4 +80,8 @@ body { .jumbotron { border-bottom: 0; } + + .other-color{ + background: #f0ac1d; + } } diff --git a/static/app/views/addfriend.html b/static/app/views/addfriend.html new file mode 100644 index 0000000..d609498 --- /dev/null +++ b/static/app/views/addfriend.html @@ -0,0 +1,14 @@ + +
+
+
+

Find and Connect with More Friends +

+

Email:

+ +
+

+
\ No newline at end of file diff --git a/static/app/views/main.html b/static/app/views/main.html index 787f33e..d8d1a27 100644 --- a/static/app/views/main.html +++ b/static/app/views/main.html @@ -1,23 +1,19 @@ -
-

'Allo, 'Allo!

+
+

It's time to decrapify your life!

- I'm Yeoman
- Always a pleasure scaffolding your apps. + Get rid of your unused stuff.
And feel good it's not headed to landfill.

-

Splendid!

+

Get Started!

-

HTML5 Boilerplate

- HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites. + Getting rid of your stuff can be difficult.

-

Angular

- AngularJS is a toolset for building the framework most suited to your application development. + Things have value to you, whether you have formed a personal attachment to your stuff or you believe you have a practical use for it... someday. Most of the time, "personal value" means guilt or "someday" never comes.

-

Karma

-

Spectacular Test Runner for JavaScript.

+

How about giving it to your friends and family who need them?

diff --git a/static/app/views/myclaimed.html b/static/app/views/myclaimed.html new file mode 100644 index 0000000..66b8e24 --- /dev/null +++ b/static/app/views/myclaimed.html @@ -0,0 +1,10 @@ + +
+
+
+

Stuff I'm Taking From My Friends

+

{{ }} items claimed.

diff --git a/static/app/views/mycrap.html b/static/app/views/mycrap.html new file mode 100644 index 0000000..ba3aba1 --- /dev/null +++ b/static/app/views/mycrap.html @@ -0,0 +1,43 @@ + +
+
+
+

Stuff I'm Currently Trying to Give Away

+

{{ getTotalItems() }} items posted.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Item IdItemDescriptionCategoryDate PostedOwnerClaimed ByAvailabilityDelete
{{ item.id }}{{ item.item_name }}{{ item.description }}{{ item.category }}{{ item.created }}{{ item.poster.username }}{{ item.claimer }}{{ item.availability }}Delete
+
+
diff --git a/static/app/views/myfriends.html b/static/app/views/myfriends.html new file mode 100644 index 0000000..6c3ae68 --- /dev/null +++ b/static/app/views/myfriends.html @@ -0,0 +1,32 @@ + +
+
+
+

My Friends

+
+ + + + + + + + + + + + + + + + + + + + +
UsernameEmailFirst NameLast NameDelete
{{ user.username }}{{ user.email }}{{ user.first_name }}{{ user.last_name }}Delete
+
+
diff --git a/static/app/views/postitem.html b/static/app/views/postitem.html new file mode 100644 index 0000000..044368d --- /dev/null +++ b/static/app/views/postitem.html @@ -0,0 +1,28 @@ + +
+
+
+

Post a New Item +

+

Item Name:

+

Description:

+

Category:

+ +
+

+
diff --git a/static/test/karma.conf.js b/static/test/karma.conf.js index 7483b46..9d99a1d 100644 --- a/static/test/karma.conf.js +++ b/static/test/karma.conf.js @@ -19,7 +19,9 @@ module.exports = function(config) { // list of files / patterns to load in the browser files: [ // bower:js + 'bower_components/jquery/dist/jquery.js', 'bower_components/angular/angular.js', + 'bower_components/bootstrap/dist/js/bootstrap.js', 'bower_components/angular-animate/angular-animate.js', 'bower_components/angular-cookies/angular-cookies.js', 'bower_components/angular-resource/angular-resource.js', From 3ac01c0b55fbc7ee4eecbca74a95db5ae31c703d Mon Sep 17 00:00:00 2001 From: skumo Date: Wed, 25 Feb 2015 09:56:26 -0800 Subject: [PATCH 05/43] suman commit 1 frontend --- static/.tmp/styles/main.css | 4 +- static/app/.DS_Store | Bin 0 -> 6148 bytes static/app/index.html | 7 ++- static/app/scripts/app.js | 20 +++--- static/app/scripts/controllers/friendscrap.js | 14 +++++ static/app/views/about.html | 1 - static/app/views/friendscrap.html | 59 ++++++++++++++++++ static/app/views/main.html | 3 +- static/test/karma.conf.js | 2 + 9 files changed, 92 insertions(+), 18 deletions(-) create mode 100644 static/app/.DS_Store create mode 100644 static/app/scripts/controllers/friendscrap.js delete mode 100644 static/app/views/about.html create mode 100644 static/app/views/friendscrap.html diff --git a/static/.tmp/styles/main.css b/static/.tmp/styles/main.css index af74efc..358f6e1 100644 --- a/static/.tmp/styles/main.css +++ b/static/.tmp/styles/main.css @@ -80,6 +80,4 @@ body { .jumbotron { border-bottom: 0; } -} - -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsaUJBQWdCO0VBQ2hCLGtCQUFpQjtFQUNqQixhQUFZO0VBQ1osa0JBQWlCO0VBQ2xCOztBQUVEO0VBQ0UsWUFBVztFQUNaOztBQUVELDRFQUEyRTtBQUMzRTs7O0VBR0Usb0JBQW1CO0VBQ25CLHFCQUFvQjtFQUNyQjs7QUFFRCx5QkFBd0I7QUFDeEI7RUFDRSxrQ0FBaUM7RUFDakMscUJBQW9CO0VBQ3JCO0FBQ0Qsa0VBQWlFO0FBQ2pFO0VBQ0UsZUFBYztFQUNkLGtCQUFpQjtFQUNqQixtQkFBa0I7RUFDbEIsc0JBQXFCO0VBQ3RCOztBQUVELHlCQUF3QjtBQUN4QjtFQUNFLG1CQUFrQjtFQUNsQixhQUFZO0VBQ1osK0JBQThCO0VBQy9COztBQUVEO0VBQ0UsZ0JBQWU7RUFDaEI7O0FBRUQsZ0RBQStDO0FBQy9DO0VBQ0Usb0JBQW1CO0VBQ25CLGtDQUFpQztFQUNsQztBQUNEO0VBQ0UsaUJBQWdCO0VBQ2hCLG9CQUFtQjtFQUNwQjs7QUFFRCxtQ0FBa0M7QUFDbEM7RUFDRSxnQkFBZTtFQUNoQjtBQUNEO0VBQ0Usa0JBQWlCO0VBQ2xCOztBQUVELDBDQUF5QztBQUN6QztFQUNFO0lBQ0Usa0JBQWlCO0lBQ2xCOztFQUVELHdDQUF1QztFQUN2Qzs7O0lBR0UsaUJBQWdCO0lBQ2hCLGtCQUFpQjtJQUNsQjtFQUNELDZCQUE0QjtFQUM1QjtJQUNFLHFCQUFvQjtJQUNyQjtFQUNELGtFQUFpRTtFQUNqRTtJQUNFLGtCQUFpQjtJQUNsQjtFQUNGIiwiZmlsZSI6Im1haW4uY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmJyb3dzZWhhcHB5IHtcbiAgbWFyZ2luOiAwLjJlbSAwO1xuICBiYWNrZ3JvdW5kOiAjY2NjO1xuICBjb2xvcjogIzAwMDtcbiAgcGFkZGluZzogMC4yZW0gMDtcbn1cblxuYm9keSB7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi8qIEV2ZXJ5dGhpbmcgYnV0IHRoZSBqdW1ib3Ryb24gZ2V0cyBzaWRlIHNwYWNpbmcgZm9yIG1vYmlsZSBmaXJzdCB2aWV3cyAqL1xuLmhlYWRlcixcbi5tYXJrZXRpbmcsXG4uZm9vdGVyIHtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xufVxuXG4vKiBDdXN0b20gcGFnZSBoZWFkZXIgKi9cbi5oZWFkZXIge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cbi8qIE1ha2UgdGhlIG1hc3RoZWFkIGhlYWRpbmcgdGhlIHNhbWUgaGVpZ2h0IGFzIHRoZSBuYXZpZ2F0aW9uICovXG4uaGVhZGVyIGgzIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxOXB4O1xufVxuXG4vKiBDdXN0b20gcGFnZSBmb290ZXIgKi9cbi5mb290ZXIge1xuICBwYWRkaW5nLXRvcDogMTlweDtcbiAgY29sb3I6ICM3Nzc7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1O1xufVxuXG4uY29udGFpbmVyLW5hcnJvdyA+IGhyIHtcbiAgbWFyZ2luOiAzMHB4IDA7XG59XG5cbi8qIE1haW4gbWFya2V0aW5nIG1lc3NhZ2UgYW5kIHNpZ24gdXAgYnV0dG9uICovXG4uanVtYm90cm9uIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbn1cbi5qdW1ib3Ryb24gLmJ0biB7XG4gIGZvbnQtc2l6ZTogMjFweDtcbiAgcGFkZGluZzogMTRweCAyNHB4O1xufVxuXG4vKiBTdXBwb3J0aW5nIG1hcmtldGluZyBjb250ZW50ICovXG4ubWFya2V0aW5nIHtcbiAgbWFyZ2luOiA0MHB4IDA7XG59XG4ubWFya2V0aW5nIHAgKyBoNCB7XG4gIG1hcmdpbi10b3A6IDI4cHg7XG59XG5cbi8qIFJlc3BvbnNpdmU6IFBvcnRyYWl0IHRhYmxldHMgYW5kIHVwICovXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDczMHB4O1xuICB9XG5cbiAgLyogUmVtb3ZlIHRoZSBwYWRkaW5nIHdlIHNldCBlYXJsaWVyICovXG4gIC5oZWFkZXIsXG4gIC5tYXJrZXRpbmcsXG4gIC5mb290ZXIge1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB9XG4gIC8qIFNwYWNlIG91dCB0aGUgbWFzdGhlYWQgKi9cbiAgLmhlYWRlciB7XG4gICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgfVxuICAvKiBSZW1vdmUgdGhlIGJvdHRvbSBib3JkZXIgb24gdGhlIGp1bWJvdHJvbiBmb3IgdmlzdWFsIGVmZmVjdCAqL1xuICAuanVtYm90cm9uIHtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICB9XG59XG4iXX0= */ \ No newline at end of file +} \ No newline at end of file diff --git a/static/app/.DS_Store b/static/app/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b4b06a82c344f7a0554ad81def038ce658b66c52 GIT binary patch literal 6148 zcmeHKOHRW;47E!UrQNiwkl4(Qb#E}L!U=i-qyzyHQ6k#Hc5cAgxDn4|w@OG6JA}ZN zJTLKQoV-MFOhmleRZF5d5lx_iqjM}rMEs%y8JR_#ocCyHOPi zG)#*5(}5+A0KhTKS#T_~gyaOnXqXh?fv~0mHI;3|U`>ZTSX?wrikePr!v|Yswh4uE zb?hH0J8%&DZmPKgrLW0cYS(F~H+uU950R)>{WRC%ra6Z=oU* mmlO{vILNISvC@h!p;=%LasZ5mNf8!^{|ICnd~pVTlz|V#B|=C5 literal 0 HcmV?d00001 diff --git a/static/app/index.html b/static/app/index.html index 4f80e08..c5eb8a9 100644 --- a/static/app/index.html +++ b/static/app/index.html @@ -8,6 +8,7 @@ + @@ -39,8 +40,7 @@
@@ -71,7 +71,9 @@ + + @@ -85,6 +87,7 @@ + diff --git a/static/app/scripts/app.js b/static/app/scripts/app.js index 074c099..d281806 100644 --- a/static/app/scripts/app.js +++ b/static/app/scripts/app.js @@ -28,43 +28,43 @@ angular controller: 'AboutCtrl' }) .when('/login', { - templateURL: 'views/login.html', + templateUrl: 'views/login.html', controller: 'LoginCtrl' }) .when('/logout', { - templateURL: 'views/logout.html', + templateUrl: 'views/logout.html', controller: 'LogoutCtrl' }) .when('/register', { - templateURL: 'views/register.html', + templateUrl: 'views/register.html', controller: 'RegisterCtrl' }) .when('/friendscrap', { - templateURL: 'views/friendscrap.html', + templateUrl: 'views/friendscrap.html', controller: 'FriendscrapCtrl' }) .when('/mycrap', { - templateURL: 'views/mycrap.html', + templateUrl: 'views/mycrap.html', controller: 'MycrapCtrl' }) .when('/mycrap/myclaimed', { - templateURL: 'views/myclaimed.html', + templateUrl: 'views/myclaimed.html', controller: 'MycrapCtrl' }) .when('/mycrap/postitem', { - templateURL: 'views/postitem.html', + templateUrl: 'views/postitem.html', controller: 'MycrapCtrl' }) .when('/mycrap/:item', { - templateURL: 'views/edititem.html', + templateUrl: 'views/edititem.html', controller: 'MycrapCtrl' }) .when('/myfriends', { - templateURL: 'views/myfriends.html', + templateUrl: 'views/myfriends.html', controller: 'MyfriendsCtrl' }) .when('/myfriends/addfriend', { - templateURL: 'views/addfriend.html', + templateUrl: 'views/addfriend.html', controller: 'MyfriendsCtrl' }) .otherwise({ diff --git a/static/app/scripts/controllers/friendscrap.js b/static/app/scripts/controllers/friendscrap.js new file mode 100644 index 0000000..6fa4fcf --- /dev/null +++ b/static/app/scripts/controllers/friendscrap.js @@ -0,0 +1,14 @@ +/** + * Created by skumo on 23/02/15. + */ + +'use strict'; + +angular.module('declutterApp') + .controller('FriendscrapCtrl', function ($scope, $http) { + $http.get('/api/items/').success(function(data) { + $scope.items = data; + }). + error(function(data, status, headers, config) { + }); + }); diff --git a/static/app/views/about.html b/static/app/views/about.html deleted file mode 100644 index d21bf89..0000000 --- a/static/app/views/about.html +++ /dev/null @@ -1 +0,0 @@ -

This is the about view.

diff --git a/static/app/views/friendscrap.html b/static/app/views/friendscrap.html new file mode 100644 index 0000000..09aade1 --- /dev/null +++ b/static/app/views/friendscrap.html @@ -0,0 +1,59 @@ + + + + +
+
+
+

My Friends Items +

+ + + + + + + + + + + + + + + + + + + +
CategoryItem NameDescriptionClaim This
{{ item.category }}{{ item.item_name }}{{ item.description }}Claim this Item
+
+
diff --git a/static/app/views/main.html b/static/app/views/main.html index 787f33e..aa53635 100644 --- a/static/app/views/main.html +++ b/static/app/views/main.html @@ -1,7 +1,6 @@ -
+

'Allo, 'Allo!

- I'm Yeoman
Always a pleasure scaffolding your apps.

Splendid!

diff --git a/static/test/karma.conf.js b/static/test/karma.conf.js index 7483b46..9d99a1d 100644 --- a/static/test/karma.conf.js +++ b/static/test/karma.conf.js @@ -19,7 +19,9 @@ module.exports = function(config) { // list of files / patterns to load in the browser files: [ // bower:js + 'bower_components/jquery/dist/jquery.js', 'bower_components/angular/angular.js', + 'bower_components/bootstrap/dist/js/bootstrap.js', 'bower_components/angular-animate/angular-animate.js', 'bower_components/angular-cookies/angular-cookies.js', 'bower_components/angular-resource/angular-resource.js', From 6b792285fa03df1b881e7251b126413dc1736c2c Mon Sep 17 00:00:00 2001 From: Andy Y Date: Wed, 25 Feb 2015 10:13:17 -0800 Subject: [PATCH 06/43] Removed sqlite3 db from git cache --- declutter_db.sqlite3 | Bin 262144 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 declutter_db.sqlite3 diff --git a/declutter_db.sqlite3 b/declutter_db.sqlite3 deleted file mode 100644 index 1807312a98d17937181bb9a6bd5f3dc2041f7450..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262144 zcmeI532+-(df(B+MUVtqBaH^5YXp(fNEnJ_A7~s@v>J{CaVU|XNRcCv>kZrh8X!Pi z#6f~sZ?fdfY}t;Js%%`gb2v%GoA{{sh#kjq#kD@;Bz9_D>$1x!m$OdR8<*{J*}Fa_ z<#_Gn_3H-E4FV)rGuo9le-!!H?|tw1-tT?yb-%B>!G}xp*_z@@mnsFh<`XR^EDU3L z-RHAdEFUAkuans6(q1!bjD$X2V_Qn4Bjiy<+=hxq)}1N!mYZFqcFusRb^gs zdT&iIdt+UyW-6t6xf5hV$;H7?Qb(QN@MiZ;d=#hrYa$3{jQg0nv9qZQN z^btC=%JtWwgW;7Io!T74bq-|eWmX3=^)jh5r!)m`9HyXY zv<_5z>R1Z4>M&3{P*d0V*-kpWH^-U1iH>d^Z1DgeO7jUmNr$hKezJ!)9cjCiL5+@7 zZ9iEm)|6r`UfV4z)Qld!;P7T<7zPxQa`D3c%n7G=W`=pk zU6T`erGG8`B`5TbuFSkKA3bU%A#>7~B^}Es6<=&|#TQ$hpZ7gjo?Dn%Ui00LuK8wG zR~F}Dq{@Y8Y~{Ldv}M8vOD#w5Mwg?p+tG)HMpbg^yeB0)I8}VdDBmg2sbw`bx3n51 zmA3RaP_f^Ci*Zj)Xb`J!*FOR?EZ@$r*~q4dHcg%gP_Sf=(V_~A8<{qD}S)V zPX{w?^q7Qc-oxRxtMmJLx5FE~cr@1zQ1{!fjX1p*FEXDPGm~s19O=XEiJ+C`YIUbn zA;z^WSCSiYT9vIWH`&sO8rI1>5G(?4fRkwbGR1v#7Vv=ov$Es^r7qBS|4KBy#-$jMrE zn`qgszuMz?jx10LL3E(|{`+4o-Sr@ry2pclOdT#zC8Cv?|x$i9x6L z(j{hZvx|3!@nAo$PsGw}yy1fr!GF`~@GgxX+7Cn5wa#=Bocogwr+0judFNE8M;$Tk zRwruf(YKED1L&Y+=pY%h?yG@=tGn@Zn99k;Oetx)_DRoJfodyM z5xubAAGJHYYhpj%J#>ikJrW)J4x7^}ip<+0<=!Jpk0iU9e~%m=z!-F48I{ZBcwSB@ zhGnulOM$TMFK&bF)I^YKW&HjJ0}j>x)+h%3055uS-R}}!QwR4tDe2!^ zW1QZpDP~_bqAg@I6}hHvD0OU|gaK2%qX*ctwzaRR-A5f?aK;shZO7X%@!MkY96LXdnMKP`yU zTxc>B2!sOR@DQow%7IGwc($0Wk$QWT42DD@5awKViAolG66mi5;$^i znskWtr*LG40+C=iAaFKXLQWO3N9q*_M+8n1teRf!(K-}cASm*JFg0MeoYn{&)sX-h za4{TW?3OE6W^_-Jdb8`u{)pi)u@*P`dzK;3mn>|A{Ve-q>_1?4*bKYO4tu`Dp8cAb zI2r{35C8!X009sH0T2KI5C8!X0D<>GfNXQe7}aC)@{m=c2gG#}r%!9isZ@pdCx+cF z>qUk>prSeuMlK9nZ<#Za-8Feej65e#Zu$><8LPS%*oW*j*5dh9&!;?}@FYAR@{D>c?$5b@%)Reka!>m?N-cC!k}Ea?7M2Wj5A{f#pcM}FSo9WdMC{HYCDIn12lD)cCjC6ywj? zEjJnQfWjoRy7h4xb=A}Ov+W`#HCsiD8tQ4|XY7`cX7eP)rzzLUPyU*=Tcaq@A{K2JM`-a5^px2hhWb(uR7ZUPulZ!1Xi{APSj7HF3_RtI*|9#eB{m2%I<)!0!g58 zKY6G?&#EiX$*Q;C$~s1#CYb6hY@K{+Dn)QJ)TQwbyGkNo_#=tM30#xc|t){vrD-?2oYjnEhtcv*}jwiBLk#hMYaWI_ro}MGlL$V<)sJqg_dE!{OaPC6Oxu-wW z--^CWTncB-ozeVqx=f2q5k~@lZt9?4OjqrIXY2~`EnGc!#pJ6p<|X@N)kF3&aVmH( zdMSH<;I=)ncz47haqQpYi&N;89>>|svzsNn=}T1DaR*pW+PtJ!>X#L?oB#uE z(r=e(|IdvKSlB;hKTo~^;M45)v7cl=#wzRrdy{>Q^|FJW_dH+le1<#=@J~G7>ZyCa z(euD_)AO3=l>0B-zwQ2c_ov+Nx@+!lbkDmZ?lHG}BPcC7m~mCIVHUaWNsdhDc)xx$#< zKpCZ4nBO# zvh!zbjL7tQz2lrFF;+@yP;YggrHoze`t;;8w8N&?GhWt`^g5_*cv%~Bkr`AA)A&m- z+8966^|HljEwKfKv`Jp5f02%kQ!S})iBC}j?D59LNll=aH|&*PphM+Q>oBCApfwv` zdSJB_y#jSFO}qib66|V8HR`54Grh(@d;w&@ZF(8H;~u7+wW)<@e25zJ!8a0ITDo4e zvpXja00O7$MFS`8L-#uc4lPx$qP3T|Q=JA>1zJhA6E@cvV|Y2hN)z;g>b8Gi#OAs{ zhgXfM&;OHu`iBn)fB*=900@8p2!H?xfB*=900@A<*D(S0`G4&Hzm5kOT>}9S009sH z0T2KI5C8!X009sH0YU)x|6v9o00JNY0w4eaAOHd&00JNY0wD19PXPD-zy8Mi1Tw6cFpsz-GAkdjr_CWFAmQPebV(iE@ALnhyWiD z009sH0T2Lz=ZwJKwGp>v@9NCpIk#IJbj_3#o2j%AuWrbK6uit!9LHT=nkm0Ao8jIn z-OKZrW5Pn>?t11?CAAj2pQvUYWin}Lwi%n}9;bx$(wo`D>S{1wtS&7FZVDVPO>n}5 zAo=*vw8T$Kp-D*)1(75FU#O;3c>T}oN<%J`^U7qhR4|tbgrWZVNKOD zZa3dY)$q)QG!u$#HO0W=%cZGcr7qvQQ<$9!T5AVh*xRi0|f^L-RGln^;i+M68G6usnjNBStb&c|khjq*lw zGrM*9jpd@Wbz2ZuR@aJ)a`UmAl8X=Su9Rz;z|>M^Dlk>wiOrASU&tgkyA%yXrbTfw z7zl+Vs$#sNWO%BwcGO?tPRWR{cip8ae9`R=^-;Kx5ohw{@WOWN{@Uf)nVh(qSq#Kd zk5}(Brc%X+<@#JE#zn^qazeQ;*AskXAtY>N6Pa#>rRhL;G9rXRfuK72s+!^U!6E9l z%SFO_*9VVOx2nYEvXAd?RMt}~msbn-9)#!SQ*V@4vt|CicrW!pc@SJ$UAcQV5P36s zCmdc&Rqv(lKZ-1Lt1C?_EGh1Bh@>a2S=gmU2u^nwJzqxU*w!Bg(r*5wY z5}VsxNGj~6*H+)0+NmajnQppbWSW;Ic`nF@+cqGz^p^Uo+b$=F#2D;Hs#~m;YLDLB zX^5#=>2i82P=6q-uk5Y{xoTkfPN2~s?QfP=AFXX}=E_`Y{*9et@WH*sT=%LVhNeY< zs4Ip$wi{@v8#qMWb~)8{ZAYrRvX&DT>RXi^E?mA`TpKSfJeti!i}`A?vXPu$TFq1& z`3I@h;2Uqfx&C;0A(t%6!OiCUYL_vH;tdZfDL zx9)Ez_)z-ZMpL+4;<7ut4L+WDBfF*yph;hFIA_a`J9lJl3yYi>9k4z`Vz3_aey`_^h?z1pp=5SbSENhvH!+SyE9$Xb;9 zD=UPj1Hnly7!dgI-era=>+-tYQ?A~p-bQ9V)7Z$~zMr@qy8JLWo7vcmEiNxNvyTgW zB{P?KSg9rX#pqThS;*&Rgy=%(Zc5&`6YgS5lodmh;Sd)LarC?XY4CbdDQ4tM_i2|S zKqYk@2}ML9$gB7NN7#gg{oibn{R4KF{Vn!0?9Z@2%6^Ld4)&Xg03Q$l0T2KI5C8!X z009sH0T2KI5CDN=5E!!3m00ck)1V8`;KmY_l00cnb7zEV)Kj-;^h5a)5 z2EadI|B(G%_J6Ry$^IJo7Qp|^{v7*L?7w4wg#7{XZGiuj{Vw*C?6U_Z__*&6w_ zzzsIRegpd!`+&X2-eEt)hFO8V&c4d}*t6`5tcM+B2RvW)yyy9%=MP8&_<#TifB*=9 z00@8p2!H?xfB*=9z*8n*w=&ELj)qe-oK!=0f`->=IIf1C*J$Xc;WagMU!~!zG`ymQ zBbRA7M#E7x9KJ+D9}O?6;m|8IygJa4Tsdw>Z0Kw4V`K@;Gm(MhBlkk#aPu~z-o25aR2`) z8y~6%0T2KI5C8!X009sH0T2KI5CDN^fB^RY&%hu+1rPuM5C8!X009sH0T2KI5C8!X zc*+E@|9{GWQ9THN00@8p2!H?xfB*=900@8p2s{G>u>XGs1_3I700@8p2!H?xfB*=9 z00@8p2!Oy-CV>6_QwEIcK>!3m00ck)1V8`;KmY_l00cnb86bfD|1&TMPyqx$00ck) z1V8`;KmY_l00ck)1fDVhH>rQv^B*ki@38-o{a*H4*iCkUonl|`{E6o`NHRVk00JNY z0w4eaAOHd&00JNY0wD0UCUADxVG##iOiiiQlnVd4(vS<~yfT?A6-LesIV`*`<4vOB z3oeHxqKo1cCBt*Zl0)YQ9hQ(m95zZ_=bdJ0$S55=?=VY)Myd0>-7J-iQpb6lSsE}( z?dPp#sc4ki&JUQSf>CNc$2csKp+`pHfO`Lb*zL^h=WOM+i_y1pF zK5Ah;I`C-V`>j7}{R{hR_N@KO4&Iq}{-i7I`iDb5GW4YpY2;hoFSviu6Z3qQU1b;9 zpJ0FD*u#IuI<+_XveWx;hS^)q7E{DeQ?G5r>s4iMjd6OXrkH)XCMWVrDkm2+rFbEm zsmQf#saQRbFmQW0It<1bJAN7rz zz6Z;53p2}WzWdQN-^}XD;#`cVwGfT1T=$L2;?>lTxuP8Eai$+^XmdM}~Yw_A{xn(}aB)h5Zmc1BrJkcPV$C2ka(i%Sxq?tyYQgcSUVxj$P6ZfT3hYXi~rD99)jxjV?!Hx1$f+%Yd60;a zs9*n#nVzVxnwm!%N=Ge&eRR}T$Nb=GZ?v?oLG9GiwxPBr#CXg#`~CNa9o~547`!_L zt48)lOv7)#HsbVNyvTfFtTPVelv<%Gss|%IXshW@1h_0$t2?C%;nO;|@j}?N>g8o} zagi@&vc(?f0|FykjaTcWW10$yQYqg)TM((5YM!LxL4zgv(%A}WrhiV7g(`Ar4y7Px z4U2Qge3Dibt;y;1sIOZ|B9W7|>^3=vcZ<|BU_3|G;NGW0-tF*4FCIGbDgk}4)kF9G ziyo(UVuE@5!{+ggQw!5(7%ij4J$*)7&;CS%POCrOoKUlNX2WQE793+b(Y&3q?U~eS zoeXKaI=}xG>+n9DIGUtJ#Q;XmB6IQLHUW8Izc zt4zJ4{0Fg;8Tgwk_WK{c;P7T(G5mc6iNJL&Y^9B1|>I(q~|!vQ{&<`aCf zYY9H7kHuWhN@*^Zk2gPC32zBh227jvAW%b*in#IVB=S z-^#anJ#oJG>?u>1?-5PdhG~rVB z|1S)D+A{EIYsvQaY`@{~I&zM`a{i#}k?ZqA%J46Y{H*)0J@2w3>?hb6_T$WD_UA4C ziv4MI@4xrJPd5F^iDMca^F({amIWsr2uw6!DWfrR1D2;NqqQuqHIUP)?SLnM=> zI@v7K>mNClst|y3kF+!9PV~y6cBSW)!C}6UL$15@EeYxHwo=KasaK)<8mnB%7UT-C zl8&H{U#W87lpSv^Xq}a(ds@7#_u6GEVX5zhMGspgmlQox&+gwmN6rGbn0H*-;$+N2PWfaTQJ^kHQ(>dv z!Xb0OnD2=uLb9Teg{7C{jL!IC&A5fqh?>@mV4$=0>dYKEz2f@3KE@TGk%?ZaJrGOh z9bVjh^ntEtx%%`e(U_AYAU%g28gr8uH zCn7mj$QISDw|=&1$1j;}xLf>0rmJp%OXM6+yuC&v)m`Jnd`pR(lB`kl)6Q0!{p!gT zrA%gf%ZDIzdrq~=(|I{F>Z=yye4hB;ef45Bn;{!(f*P2MdSJ3^IKx&ErO=h^-@j8fm{yH;wqwK}g|QOH?e^)B|5Q@cCzqUpfQQ15ZHX4)~_ZEDsQ zdjFp7inccRwG&{MrNn~)J}JoQP>W-0pst$NhHi1YoPL(;s#a~@XfQ;LR}WVsky1iQ zS?q4-+EHrg<&IQ?t_A+aRc)7f#sot%k9b%}q*HPz($Yao_V?DHtBkpQgT1LMjq0>$ zTsx%Y)#6>bs3v zxl{=4CX}7}hO7vQQn*-DYFp`IZ8MY%*ZIV5Db(0a)tj5mS|(Vi)}&^+nJ#Y?lVM>v zF?6sEE;22N(>!S-BnAVat!8DnkQGwNs@SL{laY;VS}A90`BWye%Wdy&Y;6}e^0|#_ zF3s`v%Fa%*k}TDdTf4R7PCmO;tPCYwJ=+LGrbTfw%!kFWSWML#k;YDXvm|X*f_!Z= znJWw1sYbIIA-<5EY9p}`-mM6=&H7eTZ01t6WNNqGB${wsp(<9guEb#PHl*o5WReRC zVt_AacS@VPg+``PEpgd=d8fEl-_0i?a#l)KYSm0ZkgB#ntffg~bvc#E?-c5rl~O~lm3H{LSlG-6m3$$RDKv79guQ1QVq}_^ zCIwLt#XvGFZsyb5TVkV;t;z%!pHTuEja;Q#C}%cnTd7)kBaq*&l5s0%BHO7-p{f*e z=5m`G+rh?8 za5F-lB~FK$af4)J)j%V=(@2yPMK0USZ%Bo-RNKvzYVuYwo!F=*YMa)?K<_rl zc!VY+0f`H7+lj5pb|lwKH%qxxLlzR@&CN!=lCJNTBB4Sqp9tl1QZccuD8w(+OjPB_ zb|Wul>gnbdF~98YfXrxZxD4~0%t0YM9SBYm=Xp3NGz*!;u9TLu8yuOtHBL;|<=s?f zr;?~OvY`yQcfxOGO3h+pYd5mFLp+v+WTHfdE-&(hT{3&<`~M^V*W&pekJs}N_up}U z)*bcyKKTZ~`pExf@%?{a>y;kug8&GC00@8p2!H?xfB*=5a0H?@;zfDiz7kr?`}T&= zTHd$6gVyrCJsPx@_wBQwwY+bygr>{;^*hj7-nVCg*7Cl62eg*=?H#y7Y}fUH?ElFF z{p??|f6o3f`}^eo0Q`6MH`vdzzfArg0DaE?gPUxq2?Rg@1V8`;KmY_l00ck)1V8`; zK;Vf8*sTmRGOUKfLuxqWQbX6E8V)+u(CJV^hg}WrHZ`8BTxYZKmY_l00ck) z1V8`;KmY_l00cnbsS!}$|HuCSso_P%AOHd&00JNY0w4eaAOHd&00JQJOc22S|CtyD zC;00JNY0w4eaAOHd&00JNY0#B6yp8tQUcu_eBfB*=900@8p2!H?xfB*=900=x2 z1hD^qCWZk@fB*=900@8p2!H?xfB*=900@AhwdEBmU2{r7B%{J{qVKmY_l00ck)1V8`;KmY_l z00jO&CNOKYePo77@extrxj;lorqgnePbZUdNS1~`BrcJX(n%qeOe&;`WF#aATsRWo_+&^DQvo?? zsECV93*?8Nlma0xC=J|YNJXx2kPC_tMM_J_P%6R8!Ehic%7U0khZ0FaQn4sNVm#vP}#7z3i`%Klp$E2!H?xfB*=900@8p2!H?xfB*=5paia4 zKXPo3f>q6YT(7~vxb-8)_6%tI|1VnDFSGBlU;IEjh{`|!1V8`;KmY_l00ck)1V8`; zKmY{3Mg;6uh8eM{;lO~^>T;>i|J#SY)8d(9-*&UZzfKPE0Ra#I0T2KI5C8!X0D-SI zf&Ci}`@%c+897nTM#5E2;xgf2vbvkxsD?9}yY(E$%R8IF@_KHrvDS?8YbzOPab;m= zVP!oRYu?Q+xApYb4*j%~)YQyRecG7iO25i?hpxSniGNf)H)SnhT`eRCc|v zv>Ovvv-7v_rPm(6#mRRgd{TI8_py-QoXeFO3)!9QW8p5Jn%zjJ9>?;@d?dT}C{|g2 zB&qW3`fPb4QAlmi7h>Cq;_|NiXs%A{xh=KxC3mG*LRiixqW3n|gjzmPSjwiCZr;=$ z>J=w=UVY41;-{q$c{*6+MPWZ=w=cZ?v6)7Fw^ZGT{Z6}tCawMKzymL3ZekU1NE8NS+W}|^MVToHdkxQwX8%(Z@$pVx7?iHNPZ?&f6St@`@y zx$1#YezcTb%-z)=(5B?H=c>ifWH`);oU|XZQF7rjSBz}!?xZ(%%fWCsTNARPR8HkY zDO1jux8;Sx9HB&P+>%`=`mI~6iAWU=OWF#00iTn`zTNXPzW??_c z7T7WNC)hW?+Dkp!0|5{K0T2KI5C8!X009sH0T2LzXM(_G>jHC>AJU;_I?CNu zS+dbgNB9D)YNn$+Edzw!<&9=F)sW?MAYIrf*OJ+dN+MC&tz|Z=N~7K^Zw;}ZC;R_d z3;Xlzr`UJdG&#fv1V8`;KmY_l00ck)1V8`;KmY_lpf`b6tmIq$=-2-BdLGBoCGL9Y z#NJcfezL;WEjHi5w;mL0U+||rU7&gaUNNY~g{B4aBTVw-iv$Bf_4$8>{ep%3-~$36 z00JNY0w4eaAOHd&00JNY0wC}l6FAG*EMsFzLoSr_%4D)sFdVA;|5F327Iwn(N1h*c zzvuo*_l=Qn8?w5-Z_wuaH;zAde8~Rowm-6d*lHVC9e&K5Wd7_Z5Cf~szwjsg;j=b~ItsJ_V!xpFPQ`P*G39ZKf23Zbon zAU&cvc+Q-qsw68)t-pLz+3hbh0i)H6hT8pm*JqsG)!WS8LbjMv8s5{-A6 ztVy#tZ;qN`ufKibmeYItHuLV){)VJY3sX6BgU2`jC$gf$2a;G)-DpFCB$>=CFIQ{v zd?}MHj`~t^O{rxIiqQ&aW$*negAdeYHV(4HA)7!-8sDP9X{w7KDsp`vQJy7j&@9MOs<^3bH49n#I#Uur}m;KOM|Hg5(Y}Ire zE%l|GY8r?*y=$|~-fCY>)lOB(jH<>XVo*v2l~6Bj+qrHWt#LbVyT<-nxAUreRW&rg zk+7zA{1|Gdm57w!WbRP4r@s=lTQwe6ZS4%I8^==6;Z<&ZC5x42hdq}nDvG>)NpgB` z-D2Kd>bp?UjJ*g@L0IqoA?IkC?}?Tuy=3?DK$GLGvskxOX_T`SVskP%!*v!OaveaH zg4VT&y0RU(Ofar3z51&c?yNSgS^ET4mCK!K+KZNIu|zYoo__zD=5ycXpO}XRPn=x9jSOq*ar2v>CK3dLmQMTh|D^PvGs<;P84$HtibisuHHFWxx9U z|CSR+?dc&00T2KI5C8!X009sH0T2KI5C8!Xc%BKU_y4i~f1XDWx`O}+fB*=900@8p z2!H?xfB*=9z|jP-|38`$a)1B`fB*=900@8p2!H?xfB*=9!1GQ3&;LK~BMALL00ck) z1V8`;KmY_l00ck)1VG?u0*3ql;?cR00|Y<-1V8`;KmY_l00ck)1V8`;K;U^KVA%gZ zkLp8b5C8!X009sH0T2KI5C8!X009sHfnyNB^Z&Vp6XfB*=900@8p2!H?xfB*=9z%dA5|9=cf$N~Z&00JNY z0w4eaAOHd&00JNY0?#=CeE Date: Wed, 25 Feb 2015 10:16:42 -0800 Subject: [PATCH 07/43] items migration files removed --- items/migrations/0001_initial.py | 32 -------------------------------- 1 file changed, 32 deletions(-) delete mode 100644 items/migrations/0001_initial.py diff --git a/items/migrations/0001_initial.py b/items/migrations/0001_initial.py deleted file mode 100644 index 0fd22f3..0000000 --- a/items/migrations/0001_initial.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Item', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('poster_id', models.IntegerField()), - ('claimer_id', models.IntegerField()), - ('item_name', models.CharField(max_length=100)), - ('description', models.TextField(max_length=500)), - ('created', models.DateField(auto_now_add=True)), - ('image', models.CharField(max_length=100, null=True, blank=True)), - ('availability', models.BooleanField(default=True)), - ('category', models.CharField(max_length=50, choices=[(b'BOOKS', b'Books'), (b'ENTERTAINMENT', b'Movies, Music, and Games'), (b'ELECTRONICS', b'Electronics and Computers'), (b'HOME', b'Home'), (b'GARDEN', b'Garden and Tools'), (b'BEAUTY', b'Beauty and Health'), (b'TOYS', b'Toys, Kids and Baby'), (b'CLOTHING', b'Clothing, Shoes and Jewelry'), (b'SPORTS', b'Sports and Outdoors'), (b'AUTOMOTIVE', b'Automotive')])), - ], - options={ - 'verbose_name': 'Item', - 'verbose_name_plural': 'Items', - }, - bases=(models.Model,), - ), - ] From 144595f2ee5aac2ae32b5d122d7ff6ebaae2637d Mon Sep 17 00:00:00 2001 From: Shanarae Goodwin Date: Wed, 25 Feb 2015 10:55:01 -0800 Subject: [PATCH 08/43] removing sqlite3 file --- declutter_db.sqlite3.orig | Bin 48128 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 declutter_db.sqlite3.orig diff --git a/declutter_db.sqlite3.orig b/declutter_db.sqlite3.orig deleted file mode 100644 index c51ecdd78ee44d7cf8a3938bf2b7f41cff02dd4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48128 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 mm-iQR{-Yc Date: Wed, 25 Feb 2015 11:15:11 -0800 Subject: [PATCH 09/43] commiting before mergering --- appuser/migrations/0001_initial.py | 39 ------------------ .../migrations/0002_stream_deleted_status.py | 20 --------- declutter_db.sqlite3 | Bin 167936 -> 0 bytes items/api/urls.py | 2 +- 4 files changed, 1 insertion(+), 60 deletions(-) delete mode 100644 appuser/migrations/0001_initial.py delete mode 100644 appuser/migrations/0002_stream_deleted_status.py delete mode 100644 declutter_db.sqlite3 diff --git a/appuser/migrations/0001_initial.py b/appuser/migrations/0001_initial.py deleted file mode 100644 index 74f082e..0000000 --- a/appuser/migrations/0001_initial.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -from django.conf import settings - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.CreateModel( - name='Follower', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('followee', models.IntegerField()), - ('follower', models.IntegerField()), - ], - options={ - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name='Stream', - fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('item', models.TextField(max_length=120)), - ('created', models.DateField(auto_now_add=True)), - ('status', models.BooleanField(default=True)), - ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)), - ], - options={ - }, - bases=(models.Model,), - ), - ] diff --git a/appuser/migrations/0002_stream_deleted_status.py b/appuser/migrations/0002_stream_deleted_status.py deleted file mode 100644 index 594b915..0000000 --- a/appuser/migrations/0002_stream_deleted_status.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('appuser', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='stream', - name='deleted_status', - field=models.BooleanField(default=False), - preserve_default=True, - ), - ] diff --git a/declutter_db.sqlite3 b/declutter_db.sqlite3 deleted file mode 100644 index fb565289e65a5a0b3994ac696c05b1eeeb107fc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167936 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\d+)/$', ItemGenericRetrieveUpdateAPIView.as_view(), name="item-generic-single"), -) \ No newline at end of file +) From afb74bf1f344a7e6541140c09fb8db7cae1fb3ca Mon Sep 17 00:00:00 2001 From: Andy Y Date: Wed, 25 Feb 2015 11:25:59 -0800 Subject: [PATCH 10/43] main.css changed --- static/.tmp/styles/main.css | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/static/.tmp/styles/main.css b/static/.tmp/styles/main.css index bfaf811..22bc4b9 100644 --- a/static/.tmp/styles/main.css +++ b/static/.tmp/styles/main.css @@ -84,4 +84,6 @@ body { .other-color{ background: #f0ac1d; } -} \ No newline at end of file +} + +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsaUJBQWdCO0VBQ2hCLGtCQUFpQjtFQUNqQixhQUFZO0VBQ1osa0JBQWlCO0VBQ2xCOztBQUVEO0VBQ0UsWUFBVztFQUNaOztBQUVELDRFQUEyRTtBQUMzRTs7O0VBR0Usb0JBQW1CO0VBQ25CLHFCQUFvQjtFQUNyQjs7QUFFRCx5QkFBd0I7QUFDeEI7RUFDRSxrQ0FBaUM7RUFDakMscUJBQW9CO0VBQ3JCO0FBQ0Qsa0VBQWlFO0FBQ2pFO0VBQ0UsZUFBYztFQUNkLGtCQUFpQjtFQUNqQixtQkFBa0I7RUFDbEIsc0JBQXFCO0VBQ3RCOztBQUVELHlCQUF3QjtBQUN4QjtFQUNFLG1CQUFrQjtFQUNsQixhQUFZO0VBQ1osK0JBQThCO0VBQy9COztBQUVEO0VBQ0UsZ0JBQWU7RUFDaEI7O0FBRUQsZ0RBQStDO0FBQy9DO0VBQ0Usb0JBQW1CO0VBQ25CLGtDQUFpQztFQUNsQztBQUNEO0VBQ0UsaUJBQWdCO0VBQ2hCLG9CQUFtQjtFQUNwQjs7QUFFRCxtQ0FBa0M7QUFDbEM7RUFDRSxnQkFBZTtFQUNoQjtBQUNEO0VBQ0Usa0JBQWlCO0VBQ2xCOztBQUVELDBDQUF5QztBQUN6QztFQUNFO0lBQ0Usa0JBQWlCO0lBQ2xCOztFQUVELHdDQUF1QztFQUN2Qzs7O0lBR0UsaUJBQWdCO0lBQ2hCLGtCQUFpQjtJQUNsQjtFQUNELDZCQUE0QjtFQUM1QjtJQUNFLHFCQUFvQjtJQUNyQjtFQUNELGtFQUFpRTtFQUNqRTtJQUNFLGtCQUFpQjtJQUNsQjs7RUFFRDtNQUNJLHFCQUFvQjtJQUN2QjtFQUNGIiwiZmlsZSI6Im1haW4uY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmJyb3dzZWhhcHB5IHtcbiAgbWFyZ2luOiAwLjJlbSAwO1xuICBiYWNrZ3JvdW5kOiAjY2NjO1xuICBjb2xvcjogIzAwMDtcbiAgcGFkZGluZzogMC4yZW0gMDtcbn1cblxuYm9keSB7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi8qIEV2ZXJ5dGhpbmcgYnV0IHRoZSBqdW1ib3Ryb24gZ2V0cyBzaWRlIHNwYWNpbmcgZm9yIG1vYmlsZSBmaXJzdCB2aWV3cyAqL1xuLmhlYWRlcixcbi5tYXJrZXRpbmcsXG4uZm9vdGVyIHtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xufVxuXG4vKiBDdXN0b20gcGFnZSBoZWFkZXIgKi9cbi5oZWFkZXIge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cbi8qIE1ha2UgdGhlIG1hc3RoZWFkIGhlYWRpbmcgdGhlIHNhbWUgaGVpZ2h0IGFzIHRoZSBuYXZpZ2F0aW9uICovXG4uaGVhZGVyIGgzIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxOXB4O1xufVxuXG4vKiBDdXN0b20gcGFnZSBmb290ZXIgKi9cbi5mb290ZXIge1xuICBwYWRkaW5nLXRvcDogMTlweDtcbiAgY29sb3I6ICM3Nzc7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1O1xufVxuXG4uY29udGFpbmVyLW5hcnJvdyA+IGhyIHtcbiAgbWFyZ2luOiAzMHB4IDA7XG59XG5cbi8qIE1haW4gbWFya2V0aW5nIG1lc3NhZ2UgYW5kIHNpZ24gdXAgYnV0dG9uICovXG4uanVtYm90cm9uIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbn1cbi5qdW1ib3Ryb24gLmJ0biB7XG4gIGZvbnQtc2l6ZTogMjFweDtcbiAgcGFkZGluZzogMTRweCAyNHB4O1xufVxuXG4vKiBTdXBwb3J0aW5nIG1hcmtldGluZyBjb250ZW50ICovXG4ubWFya2V0aW5nIHtcbiAgbWFyZ2luOiA0MHB4IDA7XG59XG4ubWFya2V0aW5nIHAgKyBoNCB7XG4gIG1hcmdpbi10b3A6IDI4cHg7XG59XG5cbi8qIFJlc3BvbnNpdmU6IFBvcnRyYWl0IHRhYmxldHMgYW5kIHVwICovXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDczMHB4O1xuICB9XG5cbiAgLyogUmVtb3ZlIHRoZSBwYWRkaW5nIHdlIHNldCBlYXJsaWVyICovXG4gIC5oZWFkZXIsXG4gIC5tYXJrZXRpbmcsXG4gIC5mb290ZXIge1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB9XG4gIC8qIFNwYWNlIG91dCB0aGUgbWFzdGhlYWQgKi9cbiAgLmhlYWRlciB7XG4gICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgfVxuICAvKiBSZW1vdmUgdGhlIGJvdHRvbSBib3JkZXIgb24gdGhlIGp1bWJvdHJvbiBmb3IgdmlzdWFsIGVmZmVjdCAqL1xuICAuanVtYm90cm9uIHtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICB9XG5cbiAgLm90aGVyLWNvbG9ye1xuICAgICAgYmFja2dyb3VuZDogI2YwYWMxZDtcbiAgfVxufVxuIl19 */ \ No newline at end of file From e7e5814f507abcf0efa18203b30d6b5041ae1586 Mon Sep 17 00:00:00 2001 From: skumo Date: Wed, 25 Feb 2015 13:22:35 -0800 Subject: [PATCH 11/43] added login links to nav bar --- appuser/migrations/0001_initial.py | 41 +++++++++++++++++++++++++ items/migrations/0001_initial.py | 34 ++++++++++++++++++++ static/app/index.html | 7 ++++- static/app/scripts/controllers/login.js | 2 ++ static/app/scripts/controllers/main.js | 2 +- static/app/views/main.html | 2 +- 6 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 appuser/migrations/0001_initial.py create mode 100644 items/migrations/0001_initial.py diff --git a/appuser/migrations/0001_initial.py b/appuser/migrations/0001_initial.py new file mode 100644 index 0000000..39cf509 --- /dev/null +++ b/appuser/migrations/0001_initial.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('items', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Follower', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('followee', models.ForeignKey(related_name='followee', to=settings.AUTH_USER_MODEL)), + ('follower', models.ForeignKey(related_name='follower', to=settings.AUTH_USER_MODEL)), + ], + options={ + }, + bases=(models.Model,), + ), + migrations.CreateModel( + name='Stream', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('created', models.DateField(null=True, blank=True)), + ('status', models.BooleanField(default=True)), + ('deleted_status', models.BooleanField(default=False)), + ('item', models.ForeignKey(related_name='item_id', to='items.Item')), + ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)), + ], + options={ + }, + bases=(models.Model,), + ), + ] diff --git a/items/migrations/0001_initial.py b/items/migrations/0001_initial.py new file mode 100644 index 0000000..c6130f8 --- /dev/null +++ b/items/migrations/0001_initial.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Item', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('item_name', models.CharField(max_length=100)), + ('description', models.TextField(max_length=500)), + ('created', models.DateField(auto_now_add=True)), + ('image', models.CharField(max_length=100, null=True, blank=True)), + ('availability', models.BooleanField(default=True)), + ('category', models.CharField(max_length=50, choices=[(b'BOOKS', b'Books'), (b'ENTERTAINMENT', b'Movies, Music, and Games'), (b'ELECTRONICS', b'Electronics and Computers'), (b'HOME', b'Home'), (b'GARDEN', b'Garden and Tools'), (b'BEAUTY', b'Beauty and Health'), (b'TOYS', b'Toys, Kids and Baby'), (b'CLOTHING', b'Clothing, Shoes and Jewelry'), (b'SPORTS', b'Sports and Outdoors'), (b'AUTOMOTIVE', b'Automotive')])), + ('claimer', models.ForeignKey(related_name='claimed_items', blank=True, to=settings.AUTH_USER_MODEL, null=True)), + ('poster', models.ForeignKey(related_name='posted_items', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'Item', + 'verbose_name_plural': 'Items', + }, + bases=(models.Model,), + ), + ] diff --git a/static/app/index.html b/static/app/index.html index 2d97b0e..0a53e06 100644 --- a/static/app/index.html +++ b/static/app/index.html @@ -38,13 +38,18 @@
-
From defb246c84df08910db0a3aa8ed6772d154e00f4 Mon Sep 17 00:00:00 2001 From: Andy Y Date: Thu, 26 Feb 2015 09:27:57 -0800 Subject: [PATCH 12/43] Authentication on Angular with validation complete --- appuser/views.py | 6 +- static/.tmp/styles/main.css | 46 +++++++-------- static/app/index.html | 3 +- static/app/scripts/app.js | 49 ++++++++++++--- static/app/scripts/app.js.orig | 69 ---------------------- static/app/scripts/controllers/login.js | 7 +-- static/app/scripts/controllers/logout.js | 6 +- static/app/scripts/controllers/register.js | 3 +- 8 files changed, 80 insertions(+), 109 deletions(-) delete mode 100644 static/app/scripts/app.js.orig diff --git a/appuser/views.py b/appuser/views.py index d9f6c11..76709e3 100644 --- a/appuser/views.py +++ b/appuser/views.py @@ -64,7 +64,11 @@ class FollowerCreateAPIView(CreateAPIView): serializer_class = FollowerSerializer def post(self, request, *args, **kwargs): - follower_id = User.objects.get(email=request.data['follower']) + try: + follower_id = User.objects.get(email=request.data['follower']) + + except: + return Response({"error": "This user does not exist"}, status=status.HTTP_404_NOT_FOUND) data = { 'followee': request.user.id, diff --git a/static/.tmp/styles/main.css b/static/.tmp/styles/main.css index c08d946..22bc4b9 100644 --- a/static/.tmp/styles/main.css +++ b/static/.tmp/styles/main.css @@ -61,31 +61,29 @@ body { /* Responsive: Portrait tablets and up */ @media screen and (min-width: 768px) { - .container { - max-width: 730px; - } + .container { + max-width: 730px; + } - /* Remove the padding we set earlier */ - .header, - .marketing, - .footer { - padding-left: 0; - padding-right: 0; - } + /* Remove the padding we set earlier */ + .header, + .marketing, + .footer { + padding-left: 0; + padding-right: 0; + } + /* Space out the masthead */ + .header { + margin-bottom: 30px; + } + /* Remove the bottom border on the jumbotron for visual effect */ + .jumbotron { + border-bottom: 0; + } - /* Space out the masthead */ - .header { - margin-bottom: 30px; - } - - /* Remove the bottom border on the jumbotron for visual effect */ - .jumbotron { - border-bottom: 0; - } - - .other-color { - background: #f0ac1d; - } + .other-color{ + background: #f0ac1d; + } } - +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsaUJBQWdCO0VBQ2hCLGtCQUFpQjtFQUNqQixhQUFZO0VBQ1osa0JBQWlCO0VBQ2xCOztBQUVEO0VBQ0UsWUFBVztFQUNaOztBQUVELDRFQUEyRTtBQUMzRTs7O0VBR0Usb0JBQW1CO0VBQ25CLHFCQUFvQjtFQUNyQjs7QUFFRCx5QkFBd0I7QUFDeEI7RUFDRSxrQ0FBaUM7RUFDakMscUJBQW9CO0VBQ3JCO0FBQ0Qsa0VBQWlFO0FBQ2pFO0VBQ0UsZUFBYztFQUNkLGtCQUFpQjtFQUNqQixtQkFBa0I7RUFDbEIsc0JBQXFCO0VBQ3RCOztBQUVELHlCQUF3QjtBQUN4QjtFQUNFLG1CQUFrQjtFQUNsQixhQUFZO0VBQ1osK0JBQThCO0VBQy9COztBQUVEO0VBQ0UsZ0JBQWU7RUFDaEI7O0FBRUQsZ0RBQStDO0FBQy9DO0VBQ0Usb0JBQW1CO0VBQ25CLGtDQUFpQztFQUNsQztBQUNEO0VBQ0UsaUJBQWdCO0VBQ2hCLG9CQUFtQjtFQUNwQjs7QUFFRCxtQ0FBa0M7QUFDbEM7RUFDRSxnQkFBZTtFQUNoQjtBQUNEO0VBQ0Usa0JBQWlCO0VBQ2xCOztBQUVELDBDQUF5QztBQUN6QztFQUNFO0lBQ0Usa0JBQWlCO0lBQ2xCOztFQUVELHdDQUF1QztFQUN2Qzs7O0lBR0UsaUJBQWdCO0lBQ2hCLGtCQUFpQjtJQUNsQjtFQUNELDZCQUE0QjtFQUM1QjtJQUNFLHFCQUFvQjtJQUNyQjtFQUNELGtFQUFpRTtFQUNqRTtJQUNFLGtCQUFpQjtJQUNsQjs7RUFFRDtNQUNJLHFCQUFvQjtJQUN2QjtFQUNGIiwiZmlsZSI6Im1haW4uY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmJyb3dzZWhhcHB5IHtcbiAgbWFyZ2luOiAwLjJlbSAwO1xuICBiYWNrZ3JvdW5kOiAjY2NjO1xuICBjb2xvcjogIzAwMDtcbiAgcGFkZGluZzogMC4yZW0gMDtcbn1cblxuYm9keSB7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi8qIEV2ZXJ5dGhpbmcgYnV0IHRoZSBqdW1ib3Ryb24gZ2V0cyBzaWRlIHNwYWNpbmcgZm9yIG1vYmlsZSBmaXJzdCB2aWV3cyAqL1xuLmhlYWRlcixcbi5tYXJrZXRpbmcsXG4uZm9vdGVyIHtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xufVxuXG4vKiBDdXN0b20gcGFnZSBoZWFkZXIgKi9cbi5oZWFkZXIge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cbi8qIE1ha2UgdGhlIG1hc3RoZWFkIGhlYWRpbmcgdGhlIHNhbWUgaGVpZ2h0IGFzIHRoZSBuYXZpZ2F0aW9uICovXG4uaGVhZGVyIGgzIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxOXB4O1xufVxuXG4vKiBDdXN0b20gcGFnZSBmb290ZXIgKi9cbi5mb290ZXIge1xuICBwYWRkaW5nLXRvcDogMTlweDtcbiAgY29sb3I6ICM3Nzc7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1O1xufVxuXG4uY29udGFpbmVyLW5hcnJvdyA+IGhyIHtcbiAgbWFyZ2luOiAzMHB4IDA7XG59XG5cbi8qIE1haW4gbWFya2V0aW5nIG1lc3NhZ2UgYW5kIHNpZ24gdXAgYnV0dG9uICovXG4uanVtYm90cm9uIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbn1cbi5qdW1ib3Ryb24gLmJ0biB7XG4gIGZvbnQtc2l6ZTogMjFweDtcbiAgcGFkZGluZzogMTRweCAyNHB4O1xufVxuXG4vKiBTdXBwb3J0aW5nIG1hcmtldGluZyBjb250ZW50ICovXG4ubWFya2V0aW5nIHtcbiAgbWFyZ2luOiA0MHB4IDA7XG59XG4ubWFya2V0aW5nIHAgKyBoNCB7XG4gIG1hcmdpbi10b3A6IDI4cHg7XG59XG5cbi8qIFJlc3BvbnNpdmU6IFBvcnRyYWl0IHRhYmxldHMgYW5kIHVwICovXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDczMHB4O1xuICB9XG5cbiAgLyogUmVtb3ZlIHRoZSBwYWRkaW5nIHdlIHNldCBlYXJsaWVyICovXG4gIC5oZWFkZXIsXG4gIC5tYXJrZXRpbmcsXG4gIC5mb290ZXIge1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB9XG4gIC8qIFNwYWNlIG91dCB0aGUgbWFzdGhlYWQgKi9cbiAgLmhlYWRlciB7XG4gICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgfVxuICAvKiBSZW1vdmUgdGhlIGJvdHRvbSBib3JkZXIgb24gdGhlIGp1bWJvdHJvbiBmb3IgdmlzdWFsIGVmZmVjdCAqL1xuICAuanVtYm90cm9uIHtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICB9XG5cbiAgLm90aGVyLWNvbG9ye1xuICAgICAgYmFja2dyb3VuZDogI2YwYWMxZDtcbiAgfVxufVxuIl19 */ \ No newline at end of file diff --git a/static/app/index.html b/static/app/index.html index 0a53e06..d11e1d2 100644 --- a/static/app/index.html +++ b/static/app/index.html @@ -47,7 +47,7 @@
  • My Friends
  • Login
  • Logout
  • -
  • Hello {{ name }}
  • +
  • Hello {{ logname }}
  • @@ -104,6 +104,7 @@ + diff --git a/static/app/scripts/app.js b/static/app/scripts/app.js index 648ad9f..a0ef7f2 100644 --- a/static/app/scripts/app.js +++ b/static/app/scripts/app.js @@ -33,31 +33,66 @@ angular }) .when('/friendscrap', { templateUrl: 'views/friendscrap.html', - controller: 'FriendscrapCtrl' + controller: 'FriendscrapCtrl', + resolve: { + authenticated: ['djangoAuth', function(djangoAuth){ + return djangoAuth.authenticationStatus(); + }], + } }) .when('/mycrap', { templateUrl: 'views/mycrap.html', - controller: 'MycrapCtrl' + controller: 'MycrapCtrl', + resolve: { + authenticated: ['djangoAuth', function(djangoAuth){ + return djangoAuth.authenticationStatus(); + }], + } }) .when('/mycrap/myclaimed', { templateUrl: 'views/myclaimed.html', - controller: 'MycrapCtrl' + controller: 'MycrapCtrl', + resolve: { + authenticated: ['djangoAuth', function(djangoAuth){ + return djangoAuth.authenticationStatus(); + }], + } }) .when('/mycrap/postitem', { templateUrl: 'views/postitem.html', - controller: 'MycrapCtrl' + controller: 'MycrapCtrl', + resolve: { + authenticated: ['djangoAuth', function(djangoAuth){ + return djangoAuth.authenticationStatus(); + }], + } }) .when('/mycrap/:item', { templateUrl: 'views/edititem.html', - controller: 'MycrapCtrl' + controller: 'MycrapCtrl', + resolve: { + authenticated: ['djangoAuth', function(djangoAuth){ + return djangoAuth.authenticationStatus(); + }], + } }) .when('/myfriends', { templateUrl: 'views/myfriends.html', - controller: 'MyfriendsCtrl' + controller: 'MyfriendsCtrl', + resolve: { + authenticated: ['djangoAuth', function(djangoAuth){ + return djangoAuth.authenticationStatus(); + }], + } }) .when('/myfriends/addfriend', { templateUrl: 'views/addfriend.html', - controller: 'MyfriendsCtrl' + controller: 'MyfriendsCtrl', + resolve: { + authenticated: ['djangoAuth', function(djangoAuth){ + return djangoAuth.authenticationStatus(); + }], + } }) .otherwise({ redirectTo: '/' diff --git a/static/app/scripts/app.js.orig b/static/app/scripts/app.js.orig deleted file mode 100644 index 5202665..0000000 --- a/static/app/scripts/app.js.orig +++ /dev/null @@ -1,69 +0,0 @@ -'use strict'; - -angular - .module('declutterApp', [ - 'ngAnimate', - 'ngCookies', - 'ngResource', - 'ngRoute', - 'ngSanitize', - 'ngTouch' - ]) - .config(function ($routeProvider) { - $routeProvider - .when('/', { - templateUrl: '/views/main.html', - controller: 'MainCtrl' - }) - .when('/about', { - templateUrl: '/views/about.html', - controller: 'AboutCtrl' - }) - .when('/login', { - templateUrl: 'views/login.html', - controller: 'LoginCtrl' - }) - .when('/logout', { - templateUrl: 'views/logout.html', - controller: 'LogoutCtrl' - }) - .when('/register', { - templateUrl: 'views/register.html', - controller: 'RegisterCtrl' - }) - .when('/friendscrap', { - templateUrl: 'views/friendscrap.html', - controller: 'FriendscrapCtrl' - }) - .when('/mycrap', { -<<<<<<< HEAD - templateUrl: '/views/mycrap.html', -======= - templateUrl: 'views/mycrap.html', ->>>>>>> b064e6fde9b41fb5cddd1609956abd9b9a50b9c9 - controller: 'MycrapCtrl' - }) - .when('/mycrap/myclaimed', { - templateUrl: 'views/myclaimed.html', - controller: 'MycrapCtrl' - }) - .when('/mycrap/postitem', { - templateUrl: 'views/postitem.html', - controller: 'MycrapCtrl' - }) - .when('/mycrap/:item', { - templateUrl: 'views/edititem.html', - controller: 'MycrapCtrl' - }) - .when('/myfriends', { - templateUrl: 'views/myfriends.html', - controller: 'MyfriendsCtrl' - }) - .when('/myfriends/addfriend', { - templateUrl: 'views/addfriend.html', - controller: 'MyfriendsCtrl' - }) - .otherwise({ - redirectTo: '/' - }); - }); diff --git a/static/app/scripts/controllers/login.js b/static/app/scripts/controllers/login.js index 738f5df..404e13b 100644 --- a/static/app/scripts/controllers/login.js +++ b/static/app/scripts/controllers/login.js @@ -1,10 +1,9 @@ 'use strict'; angular.module('declutterApp') - .controller('LoginCtrl', function ($scope, $location, djangoAuth, Validate) { + .controller('LoginCtrl', function ($scope, $location, $rootScope, djangoAuth, Validate) { $scope.model = {'username':'','password':''}; $scope.complete = false; - $scope.name = ""; $scope.login = function(formData){ $scope.errors = []; Validate.form_validation(formData,$scope.errors); @@ -12,8 +11,8 @@ angular.module('declutterApp') djangoAuth.login($scope.model.username, $scope.model.password) .then(function(data){ // success case - $location.path("/"); - $scope.name = $scope.model.username; + $location.path("/mycrap"); + $rootScope.logname = $scope.model.username; },function(data){ // error case $scope.errors = data; diff --git a/static/app/scripts/controllers/logout.js b/static/app/scripts/controllers/logout.js index 1d0e326..d6d75a5 100755 --- a/static/app/scripts/controllers/logout.js +++ b/static/app/scripts/controllers/logout.js @@ -1,6 +1,8 @@ 'use strict'; angular.module('declutterApp') - .controller('LogoutCtrl', function ($scope, $location, djangoAuth) { + .controller('LogoutCtrl', function ($scope, $location, $timeout, $rootScope, $window, djangoAuth) { + $rootScope.logname=''; djangoAuth.logout(); - }); + $window.location.href = "/"; + }); diff --git a/static/app/scripts/controllers/register.js b/static/app/scripts/controllers/register.js index e9530a8..01b202f 100644 --- a/static/app/scripts/controllers/register.js +++ b/static/app/scripts/controllers/register.js @@ -12,7 +12,8 @@ angular.module('declutterApp') .then(function(data){ // success case $scope.complete = true; - $location.path("/"); + alert("Thank you for registering"); + $location.path("/login"); },function(data){ // error case $scope.errors = data; From b08a92af094dc89bf72bb7b2dbf4b150b9d83329 Mon Sep 17 00:00:00 2001 From: Shanarae Goodwin Date: Thu, 26 Feb 2015 09:34:17 -0800 Subject: [PATCH 13/43] shanarae 2/25 updates --- .gitignore | 3 +- items/api/urls.py | 8 ++- items/api/views.py | 32 ++++++++- static/.tmp/styles/main.css | 7 +- static/app/index.html | 3 + static/app/scripts/app.js | 2 +- static/app/scripts/controllers/config.js | 17 +++++ static/app/scripts/controllers/friendscrap.js | 72 +++++++++++++++++-- static/app/scripts/controllers/myclaimed.js | 24 +++++++ static/app/scripts/controllers/mycrap.js | 6 +- static/app/views/myclaimed.html | 29 +++++++- static/app/views/mycrap.html | 12 ++-- 12 files changed, 188 insertions(+), 27 deletions(-) create mode 100644 static/app/scripts/controllers/config.js create mode 100644 static/app/scripts/controllers/myclaimed.js diff --git a/.gitignore b/.gitignore index 0377a63..f6ffe5c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ local_settings.py *.pyc .idea/ -declutter_db.sqlite3 \ No newline at end of file +declutter_db.sqlite3 +declutter_db.sqlite3.orig \ No newline at end of file diff --git a/items/api/urls.py b/items/api/urls.py index a6b044f..c54afe6 100644 --- a/items/api/urls.py +++ b/items/api/urls.py @@ -1,6 +1,6 @@ from django.conf.urls import patterns, url from views import ItemListAPIView, ItemDetailAPIView, ItemCreateAPIView, ItemGenericListAPIView, ItemGenericRetrieveUpdateAPIView, ItemListCreateAPIView, \ - ClaimItemListCreateAPIView + ClaimItemListCreateAPIView, ClaimItemDetailAPIView, ClaimGenericRetrieveUpdateAPIView urlpatterns = patterns('', url(r'^$', ItemListAPIView.as_view(), name='ItemListAPIView'), @@ -8,6 +8,8 @@ url(r'^create/$', ItemCreateAPIView.as_view()), url(r'^list/$', ItemGenericListAPIView.as_view()), url(r'^generics/id/(?P\d+)/$', ItemGenericRetrieveUpdateAPIView.as_view(), name="item-generic-single"), - url(r'^poster/(?P\d+)/$', ItemListCreateAPIView.as_view()), - url(r'^claimer/(?P\d+)/$', ClaimItemListCreateAPIView.as_view()), + url(r'^poster/$', ItemListCreateAPIView.as_view()), + url(r'^claimer/$', ClaimItemListCreateAPIView.as_view()), + url(r'^claim/(?P\d+)/$', ClaimItemDetailAPIView.as_view()), + url(r'^mine/(?P\d+)/$', ClaimGenericRetrieveUpdateAPIView.as_view()), ) diff --git a/items/api/views.py b/items/api/views.py index d405946..6be16fc 100644 --- a/items/api/views.py +++ b/items/api/views.py @@ -2,7 +2,7 @@ from rest_framework import status from rest_framework.generics import CreateAPIView, ListAPIView, RetrieveUpdateAPIView, ListCreateAPIView from items.api.serializers import ItemSerializer -from items.models import Item +from items.models import Item, User class ItemListAPIView(APIView): @@ -83,4 +83,32 @@ class ClaimItemListCreateAPIView(ListCreateAPIView): def get_queryset(self): user = self.request.user - return Item.Objects.filter(claimer=user) \ No newline at end of file + return Item.objects.filter(claimer=user) + + +class ClaimItemDetailAPIView(CreateAPIView): + serializer_class = ItemSerializer + + def put(self, request, *args, **kwargs): + serializer = ItemSerializer(data=request.data) + item = Item.objects.filter(pk=kwargs['item_id']) + user = self.request.user + # user = User.objects.get(username=request.DATA['user']) + item.update(claimer=user) + + if serializer.is_valid(): + serializer.save(claimer=request.user) + #can we add availability=false here? + return Response(serializer.data, status=status.HTTP_202_ACCEPTED) + + else: + return Response(serializer.errors, status.HTTP_400_BAD_REQUEST) + + +class ClaimGenericRetrieveUpdateAPIView(RetrieveUpdateAPIView): + model = Item + serializer_class = ItemSerializer + lookup_field = 'id' + + def get_queryset(self): + return Item.objects.all() diff --git a/static/.tmp/styles/main.css b/static/.tmp/styles/main.css index a4c7bb8..22bc4b9 100644 --- a/static/.tmp/styles/main.css +++ b/static/.tmp/styles/main.css @@ -80,11 +80,10 @@ body { .jumbotron { border-bottom: 0; } -<<<<<<< HEAD -======= .other-color{ background: #f0ac1d; } ->>>>>>> ebdf937432e747e27a0f68c15e3d0b09128b03c1 -} \ No newline at end of file +} + +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsaUJBQWdCO0VBQ2hCLGtCQUFpQjtFQUNqQixhQUFZO0VBQ1osa0JBQWlCO0VBQ2xCOztBQUVEO0VBQ0UsWUFBVztFQUNaOztBQUVELDRFQUEyRTtBQUMzRTs7O0VBR0Usb0JBQW1CO0VBQ25CLHFCQUFvQjtFQUNyQjs7QUFFRCx5QkFBd0I7QUFDeEI7RUFDRSxrQ0FBaUM7RUFDakMscUJBQW9CO0VBQ3JCO0FBQ0Qsa0VBQWlFO0FBQ2pFO0VBQ0UsZUFBYztFQUNkLGtCQUFpQjtFQUNqQixtQkFBa0I7RUFDbEIsc0JBQXFCO0VBQ3RCOztBQUVELHlCQUF3QjtBQUN4QjtFQUNFLG1CQUFrQjtFQUNsQixhQUFZO0VBQ1osK0JBQThCO0VBQy9COztBQUVEO0VBQ0UsZ0JBQWU7RUFDaEI7O0FBRUQsZ0RBQStDO0FBQy9DO0VBQ0Usb0JBQW1CO0VBQ25CLGtDQUFpQztFQUNsQztBQUNEO0VBQ0UsaUJBQWdCO0VBQ2hCLG9CQUFtQjtFQUNwQjs7QUFFRCxtQ0FBa0M7QUFDbEM7RUFDRSxnQkFBZTtFQUNoQjtBQUNEO0VBQ0Usa0JBQWlCO0VBQ2xCOztBQUVELDBDQUF5QztBQUN6QztFQUNFO0lBQ0Usa0JBQWlCO0lBQ2xCOztFQUVELHdDQUF1QztFQUN2Qzs7O0lBR0UsaUJBQWdCO0lBQ2hCLGtCQUFpQjtJQUNsQjtFQUNELDZCQUE0QjtFQUM1QjtJQUNFLHFCQUFvQjtJQUNyQjtFQUNELGtFQUFpRTtFQUNqRTtJQUNFLGtCQUFpQjtJQUNsQjs7RUFFRDtNQUNJLHFCQUFvQjtJQUN2QjtFQUNGIiwiZmlsZSI6Im1haW4uY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmJyb3dzZWhhcHB5IHtcbiAgbWFyZ2luOiAwLjJlbSAwO1xuICBiYWNrZ3JvdW5kOiAjY2NjO1xuICBjb2xvcjogIzAwMDtcbiAgcGFkZGluZzogMC4yZW0gMDtcbn1cblxuYm9keSB7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi8qIEV2ZXJ5dGhpbmcgYnV0IHRoZSBqdW1ib3Ryb24gZ2V0cyBzaWRlIHNwYWNpbmcgZm9yIG1vYmlsZSBmaXJzdCB2aWV3cyAqL1xuLmhlYWRlcixcbi5tYXJrZXRpbmcsXG4uZm9vdGVyIHtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xufVxuXG4vKiBDdXN0b20gcGFnZSBoZWFkZXIgKi9cbi5oZWFkZXIge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cbi8qIE1ha2UgdGhlIG1hc3RoZWFkIGhlYWRpbmcgdGhlIHNhbWUgaGVpZ2h0IGFzIHRoZSBuYXZpZ2F0aW9uICovXG4uaGVhZGVyIGgzIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxOXB4O1xufVxuXG4vKiBDdXN0b20gcGFnZSBmb290ZXIgKi9cbi5mb290ZXIge1xuICBwYWRkaW5nLXRvcDogMTlweDtcbiAgY29sb3I6ICM3Nzc7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1O1xufVxuXG4uY29udGFpbmVyLW5hcnJvdyA+IGhyIHtcbiAgbWFyZ2luOiAzMHB4IDA7XG59XG5cbi8qIE1haW4gbWFya2V0aW5nIG1lc3NhZ2UgYW5kIHNpZ24gdXAgYnV0dG9uICovXG4uanVtYm90cm9uIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbn1cbi5qdW1ib3Ryb24gLmJ0biB7XG4gIGZvbnQtc2l6ZTogMjFweDtcbiAgcGFkZGluZzogMTRweCAyNHB4O1xufVxuXG4vKiBTdXBwb3J0aW5nIG1hcmtldGluZyBjb250ZW50ICovXG4ubWFya2V0aW5nIHtcbiAgbWFyZ2luOiA0MHB4IDA7XG59XG4ubWFya2V0aW5nIHAgKyBoNCB7XG4gIG1hcmdpbi10b3A6IDI4cHg7XG59XG5cbi8qIFJlc3BvbnNpdmU6IFBvcnRyYWl0IHRhYmxldHMgYW5kIHVwICovXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDczMHB4O1xuICB9XG5cbiAgLyogUmVtb3ZlIHRoZSBwYWRkaW5nIHdlIHNldCBlYXJsaWVyICovXG4gIC5oZWFkZXIsXG4gIC5tYXJrZXRpbmcsXG4gIC5mb290ZXIge1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB9XG4gIC8qIFNwYWNlIG91dCB0aGUgbWFzdGhlYWQgKi9cbiAgLmhlYWRlciB7XG4gICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgfVxuICAvKiBSZW1vdmUgdGhlIGJvdHRvbSBib3JkZXIgb24gdGhlIGp1bWJvdHJvbiBmb3IgdmlzdWFsIGVmZmVjdCAqL1xuICAuanVtYm90cm9uIHtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICB9XG5cbiAgLm90aGVyLWNvbG9ye1xuICAgICAgYmFja2dyb3VuZDogI2YwYWMxZDtcbiAgfVxufVxuIl19 */ \ No newline at end of file diff --git a/static/app/index.html b/static/app/index.html index 0a53e06..57a4ebc 100644 --- a/static/app/index.html +++ b/static/app/index.html @@ -95,6 +95,7 @@ + @@ -102,8 +103,10 @@ + + diff --git a/static/app/scripts/app.js b/static/app/scripts/app.js index 648ad9f..6aea059 100644 --- a/static/app/scripts/app.js +++ b/static/app/scripts/app.js @@ -41,7 +41,7 @@ angular }) .when('/mycrap/myclaimed', { templateUrl: 'views/myclaimed.html', - controller: 'MycrapCtrl' + controller: 'MyclaimedCtrl' }) .when('/mycrap/postitem', { templateUrl: 'views/postitem.html', diff --git a/static/app/scripts/controllers/config.js b/static/app/scripts/controllers/config.js new file mode 100644 index 0000000..3804d39 --- /dev/null +++ b/static/app/scripts/controllers/config.js @@ -0,0 +1,17 @@ +angular.module('declutterApp') + // Here we see the name of the controller defined. + // Following the name, we see an anonymous function with one argument. + // These arguments are functionality being injected into the controller. + // Think of this as being like including scripts in HTML. + // Unless they are referenced here, you cannot utilize them. + .config( + function($httpProvider){ + $httpProvider.defaults.xsrfCookieName = 'csrftoken'; + $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken'; + // $httpProvider.defaults.headers.common['Access-Control-Allow-Origin'] = "*"; + // $httpProvider.defaults.headers.common['Access-Control-Allow-Methods'] = ['OPTIONS', 'POST']; + // $httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = 'Content-Type'; + // $httpProvider.defaults.headers.post["Content-Type"] = "multipart/form-data"; + // $httpProvider.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded"; + // delete $httpProvider.defaults.headers.common['X-Requested-With']; + }); diff --git a/static/app/scripts/controllers/friendscrap.js b/static/app/scripts/controllers/friendscrap.js index 6fa4fcf..4e6b82b 100644 --- a/static/app/scripts/controllers/friendscrap.js +++ b/static/app/scripts/controllers/friendscrap.js @@ -5,10 +5,70 @@ 'use strict'; angular.module('declutterApp') - .controller('FriendscrapCtrl', function ($scope, $http) { - $http.get('/api/items/').success(function(data) { - $scope.items = data; - }). - error(function(data, status, headers, config) { - }); + .controller('FriendscrapCtrl', function ($scope, $http, $cookies) { + $http.defaults.headers.post['X-CSRFToken'] = $cookies.csrftoken; + + $http.get('/api/items/').success(function(data) { + $scope.items = data; + }). + error(function(data, status, headers, config) { + }); + + + + + //shanarae's code + // + //$scope.claimItem = function(){ + // $http.put('/api/items/mine/' + item_id). + // success(function(data){ + // $scope.items.put({item.claimer=user}); + // need to update claimer with user and availability to false + // alert("You've claimed this item!"); + // }). + // error(function(data){ + // $scope.error = ["Error claiming item"]; + // console.log("error" + data.error); + // }); + //}; + + // + // + //$scope.addItem = function(){ + // var data = { + // "item_name":$scope.formItemName, + // "description":$scope.formItemDescription, + // "category":$scope.formItemCategory + // }; + // + // $http.post('/api/items/create/', data). + // success(function(data){ + // $scope.items.push({item_name:data.item_name, description:data.description, category:data.category}); + // $scope.formItemName = ''; + // $scope.formItemDescription = ''; + // $scope.formItemCategory = ''; + // $location.path('/mycrap'); + // alert("Your new item has been posted!"); + // }). + // + // error(function(data){ + // $scope.error = ["Error adding new item"]; + // console.log("error" + data.error); + // }); + // }; + // + //$scope.removeItem = function(item){ + // $http.delete('api/items/item/' + item.id). + // success(function(data){ + // $scope.items.splice( + // $scope.items.indexOf(item), + // 1 + // ); + // }). + // error(function(data){ + // $scope.error = ["Error deleting item"]; + // }); + //}; + + }); diff --git a/static/app/scripts/controllers/myclaimed.js b/static/app/scripts/controllers/myclaimed.js new file mode 100644 index 0000000..b8e2784 --- /dev/null +++ b/static/app/scripts/controllers/myclaimed.js @@ -0,0 +1,24 @@ +'use strict'; + +angular.module('declutterApp') + + .controller('MyclaimedCtrl', function ($scope, $http, $cookies) { + $http.defaults.headers.post['X-CSRFToken'] = $cookies.csrftoken; + + + var items_request = $http.get('/api/items/claimer'); + items_request.success(function(data){ + console.log("success" + data); + $scope.items=data; + }); + items_request.error(function(data){ + $scope.error = ["Error with items"]; + console.log("error" + data); + }); + + $scope.getTotalItems = function(){ + return $scope.items ? $scope.items.length : 0; + }; + + + }); diff --git a/static/app/scripts/controllers/mycrap.js b/static/app/scripts/controllers/mycrap.js index dbaf157..a69b584 100644 --- a/static/app/scripts/controllers/mycrap.js +++ b/static/app/scripts/controllers/mycrap.js @@ -18,7 +18,7 @@ angular.module('declutterApp') {category:'AUTOMOTIVE', name:'Automotive'} ]; - var items_request = $http.get('/api/items/'); + var items_request = $http.get('/api/items/poster/'); items_request.success(function(data){ console.log("success" + data); $scope.items=data; @@ -68,4 +68,8 @@ angular.module('declutterApp') }); }; + $scope.delete = function(item) { + alert("Deleting the item"); + return item.show = true; + }; }); diff --git a/static/app/views/myclaimed.html b/static/app/views/myclaimed.html index 66b8e24..f01777c 100644 --- a/static/app/views/myclaimed.html +++ b/static/app/views/myclaimed.html @@ -6,5 +6,30 @@

    -

    Stuff I'm Taking From My Friends

    -

    {{ }} items claimed.

    +

    Stuff I'm Taking From My Friends

    +

    {{ getTotalItems() }} items claimed.

    +
    + + + + + + + + + + + + + + + + + + + + +
    ItemDescriptionOwnerClaimed ByAvailability
    {{ item.item_name }}{{ item.description }}{{ item.poster.username }}{{ item.claimer.username }}{{ item.availability }}
    +
    +
    + diff --git a/static/app/views/mycrap.html b/static/app/views/mycrap.html index ba3aba1..bb4e48b 100644 --- a/static/app/views/mycrap.html +++ b/static/app/views/mycrap.html @@ -8,11 +8,11 @@

    Stuff I'm Currently Trying to Give Away

    {{ getTotalItems() }} items posted.

    +
    - @@ -20,22 +20,20 @@ - - + - + - - + - +
    Item Id Item Description CategoryOwner Claimed By AvailabilityDelete
    {{ item.id }} {{ item.item_name }} {{ item.description }} {{ item.category }} {{ item.created }} {{ item.poster.username }}{{ item.claimer }}{{ item.claimer.username }} {{ item.availability }}DeleteDelete
    From c7b52cbf6714254c47026f2a4a00832eb4e667f1 Mon Sep 17 00:00:00 2001 From: skumo Date: Thu, 26 Feb 2015 09:52:25 -0800 Subject: [PATCH 14/43] commit for add friend and friendscrap --- .DS_Store | Bin 6148 -> 8196 bytes appuser/views.py | 7 ++- static/.tmp/styles/main.css | 7 ++- static/app/index.html | 1 + static/app/scripts/controllers/friendscrap.js | 23 +++++++-- static/app/scripts/controllers/myfriends.js | 35 +++++++++++--- static/app/views/friendscrap.html | 45 +++--------------- static/app/views/myfriends.html | 2 +- 8 files changed, 64 insertions(+), 56 deletions(-) diff --git a/.DS_Store b/.DS_Store index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..17413f9cbbfc72aefe20f7d61da485887b80fb9d 100644 GIT binary patch literal 8196 zcmeHMzi-n(6n@vHO+p!*mP!>B!W%*=kN_nEiwR*wR0?WUQPkLRXe>E#6gxzyN|l*^ zfQ5oHkHhTeP6J; z)(U6^{!0aDeK7GRv?LA$@}&bSegr^FVK*<>HmHGUO0*;n1R{fl2~$L2%H$D)33Kc> zMrQJa!gzG_Z}Q>5EP=Y#3TOq!6`-?w3NFG9cn~S)_r-%BajqGZ z%WgNS0eoBd`h+_g+BE}rBG+!j-U%#K$#4eadEi1FY$YQ6JfpHo%#UOmw~a-e|FSvC zDsfqr=rq{S#;Xe<#_qUb&3A&prxj&{QqwA(8y^u%Ew}fcypQ^br8i-Ok|O*fA6YI- z4SY;8!VA-MdSTn~0|(jPPTTjwD4+k%rlwOfv*}Fs#2j5lZti}i5%emN9d*N!-MPm< zd2Zd2?KL}U9JcS`Ll4`wv+mV<+s3JzK`XMoR=pE5-P-V4ZqO?Q-Ig0}RfN9{&y5<} z#^PG1{t!*q>{fl<3q8m4z35RUOV_q>dUy9ip?G=4Eab1P_E*f^VllsBUcFN6_l^B* zX8HW;joX{;{^MuQU%Y(v`pu^UdU{;8-;`6ZnjI9K54(E`@CD7_To}J(%VJ;JV zCCq2SD0NQxo3I)BY2i#ZAyo6Z^Z~Puu}U8A=#f-*_#?~hjj>8xu?f!N*F3_ne1!39 z@yO}@w|CID!pCCIKe*0gkMP6jiF`c%$*23ce}hS05G{!VfntXB{!eP?q7^tg1*S#l zB|87#n*9F%=n~YCwE|j!zpemFl`G{Eh7nuyc)Tg>GV!kBO@+n{1acFsXbAQ5<2d5* bABNaAC1*(-2t)>p{zHJvpewDwKULrlD3KW4 delta 105 zcmZp1XfcprU|?W$DortDU=RQ@Ie-{MGpJ5X6q~502;ws^0>w5aE@Piqz_pm2gF}!R pBnTAa1`@77thzDrJM(0I8AV3M$)+;eJWLRCKt?lcj^~-f3;-dB4=?}# diff --git a/appuser/views.py b/appuser/views.py index d9f6c11..1cab43e 100644 --- a/appuser/views.py +++ b/appuser/views.py @@ -64,7 +64,12 @@ class FollowerCreateAPIView(CreateAPIView): serializer_class = FollowerSerializer def post(self, request, *args, **kwargs): - follower_id = User.objects.get(email=request.data['follower']) + try: + follower_id = User.objects.get(email=request.data['follower']) + + except: + return Response({"error": "This user does not exist"}, status=status.HTTP_404_NOT_FOUND) + data = { 'followee': request.user.id, diff --git a/static/.tmp/styles/main.css b/static/.tmp/styles/main.css index a4c7bb8..22bc4b9 100644 --- a/static/.tmp/styles/main.css +++ b/static/.tmp/styles/main.css @@ -80,11 +80,10 @@ body { .jumbotron { border-bottom: 0; } -<<<<<<< HEAD -======= .other-color{ background: #f0ac1d; } ->>>>>>> ebdf937432e747e27a0f68c15e3d0b09128b03c1 -} \ No newline at end of file +} + +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsaUJBQWdCO0VBQ2hCLGtCQUFpQjtFQUNqQixhQUFZO0VBQ1osa0JBQWlCO0VBQ2xCOztBQUVEO0VBQ0UsWUFBVztFQUNaOztBQUVELDRFQUEyRTtBQUMzRTs7O0VBR0Usb0JBQW1CO0VBQ25CLHFCQUFvQjtFQUNyQjs7QUFFRCx5QkFBd0I7QUFDeEI7RUFDRSxrQ0FBaUM7RUFDakMscUJBQW9CO0VBQ3JCO0FBQ0Qsa0VBQWlFO0FBQ2pFO0VBQ0UsZUFBYztFQUNkLGtCQUFpQjtFQUNqQixtQkFBa0I7RUFDbEIsc0JBQXFCO0VBQ3RCOztBQUVELHlCQUF3QjtBQUN4QjtFQUNFLG1CQUFrQjtFQUNsQixhQUFZO0VBQ1osK0JBQThCO0VBQy9COztBQUVEO0VBQ0UsZ0JBQWU7RUFDaEI7O0FBRUQsZ0RBQStDO0FBQy9DO0VBQ0Usb0JBQW1CO0VBQ25CLGtDQUFpQztFQUNsQztBQUNEO0VBQ0UsaUJBQWdCO0VBQ2hCLG9CQUFtQjtFQUNwQjs7QUFFRCxtQ0FBa0M7QUFDbEM7RUFDRSxnQkFBZTtFQUNoQjtBQUNEO0VBQ0Usa0JBQWlCO0VBQ2xCOztBQUVELDBDQUF5QztBQUN6QztFQUNFO0lBQ0Usa0JBQWlCO0lBQ2xCOztFQUVELHdDQUF1QztFQUN2Qzs7O0lBR0UsaUJBQWdCO0lBQ2hCLGtCQUFpQjtJQUNsQjtFQUNELDZCQUE0QjtFQUM1QjtJQUNFLHFCQUFvQjtJQUNyQjtFQUNELGtFQUFpRTtFQUNqRTtJQUNFLGtCQUFpQjtJQUNsQjs7RUFFRDtNQUNJLHFCQUFvQjtJQUN2QjtFQUNGIiwiZmlsZSI6Im1haW4uY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmJyb3dzZWhhcHB5IHtcbiAgbWFyZ2luOiAwLjJlbSAwO1xuICBiYWNrZ3JvdW5kOiAjY2NjO1xuICBjb2xvcjogIzAwMDtcbiAgcGFkZGluZzogMC4yZW0gMDtcbn1cblxuYm9keSB7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi8qIEV2ZXJ5dGhpbmcgYnV0IHRoZSBqdW1ib3Ryb24gZ2V0cyBzaWRlIHNwYWNpbmcgZm9yIG1vYmlsZSBmaXJzdCB2aWV3cyAqL1xuLmhlYWRlcixcbi5tYXJrZXRpbmcsXG4uZm9vdGVyIHtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xufVxuXG4vKiBDdXN0b20gcGFnZSBoZWFkZXIgKi9cbi5oZWFkZXIge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cbi8qIE1ha2UgdGhlIG1hc3RoZWFkIGhlYWRpbmcgdGhlIHNhbWUgaGVpZ2h0IGFzIHRoZSBuYXZpZ2F0aW9uICovXG4uaGVhZGVyIGgzIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxOXB4O1xufVxuXG4vKiBDdXN0b20gcGFnZSBmb290ZXIgKi9cbi5mb290ZXIge1xuICBwYWRkaW5nLXRvcDogMTlweDtcbiAgY29sb3I6ICM3Nzc7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1O1xufVxuXG4uY29udGFpbmVyLW5hcnJvdyA+IGhyIHtcbiAgbWFyZ2luOiAzMHB4IDA7XG59XG5cbi8qIE1haW4gbWFya2V0aW5nIG1lc3NhZ2UgYW5kIHNpZ24gdXAgYnV0dG9uICovXG4uanVtYm90cm9uIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbn1cbi5qdW1ib3Ryb24gLmJ0biB7XG4gIGZvbnQtc2l6ZTogMjFweDtcbiAgcGFkZGluZzogMTRweCAyNHB4O1xufVxuXG4vKiBTdXBwb3J0aW5nIG1hcmtldGluZyBjb250ZW50ICovXG4ubWFya2V0aW5nIHtcbiAgbWFyZ2luOiA0MHB4IDA7XG59XG4ubWFya2V0aW5nIHAgKyBoNCB7XG4gIG1hcmdpbi10b3A6IDI4cHg7XG59XG5cbi8qIFJlc3BvbnNpdmU6IFBvcnRyYWl0IHRhYmxldHMgYW5kIHVwICovXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDczMHB4O1xuICB9XG5cbiAgLyogUmVtb3ZlIHRoZSBwYWRkaW5nIHdlIHNldCBlYXJsaWVyICovXG4gIC5oZWFkZXIsXG4gIC5tYXJrZXRpbmcsXG4gIC5mb290ZXIge1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB9XG4gIC8qIFNwYWNlIG91dCB0aGUgbWFzdGhlYWQgKi9cbiAgLmhlYWRlciB7XG4gICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgfVxuICAvKiBSZW1vdmUgdGhlIGJvdHRvbSBib3JkZXIgb24gdGhlIGp1bWJvdHJvbiBmb3IgdmlzdWFsIGVmZmVjdCAqL1xuICAuanVtYm90cm9uIHtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICB9XG5cbiAgLm90aGVyLWNvbG9ye1xuICAgICAgYmFja2dyb3VuZDogI2YwYWMxZDtcbiAgfVxufVxuIl19 */ \ No newline at end of file diff --git a/static/app/index.html b/static/app/index.html index 0a53e06..65d11c4 100644 --- a/static/app/index.html +++ b/static/app/index.html @@ -104,6 +104,7 @@ + diff --git a/static/app/scripts/controllers/friendscrap.js b/static/app/scripts/controllers/friendscrap.js index 6fa4fcf..38f0fd8 100644 --- a/static/app/scripts/controllers/friendscrap.js +++ b/static/app/scripts/controllers/friendscrap.js @@ -6,9 +6,22 @@ angular.module('declutterApp') .controller('FriendscrapCtrl', function ($scope, $http) { - $http.get('/api/items/').success(function(data) { - $scope.items = data; - }). - error(function(data, status, headers, config) { +// $http.get('/api/appuser/list/follower/').success(function(data) { +// console.log(data); +// $scope.friends = data; +// }). +// error(function(data, status, headers, config) { +// }); +// }); + + + var friends = $http.get('/api/appuser/list/follower/'); + friends.success(function(data){ + console.log(data); + $scope.friends=data; + }); + friends.error(function(data){ + $scope.error = ["Error with items"]; + console.log("error" + data); }); - }); + }); \ No newline at end of file diff --git a/static/app/scripts/controllers/myfriends.js b/static/app/scripts/controllers/myfriends.js index a220aa6..7015716 100644 --- a/static/app/scripts/controllers/myfriends.js +++ b/static/app/scripts/controllers/myfriends.js @@ -1,10 +1,31 @@ 'use strict'; + angular.module('declutterApp') - .controller('MyfriendsCtrl', function ($scope) { - $scope.awesomeThings = [ - 'HTML5 Boilerplate', - 'AngularJS', - 'Karma' - ]; - }); + .controller('MyfriendsCtrl', function ($scope, $http, $cookies) { + $http.defaults.headers.post['X-CSRFToken'] = $cookies.csrftoken; + $scope.addFriend = function () { + var data = { + "follower": $scope.formFriendEmail + }; + + console.log(data); + + + $http.post('/api/appuser/create/follower/', data). + success(function (data) { + console.log(data); + }). + error(function (data) { + $scope.error = ["Error adding New User"]; + console.log("error: " + data.error); + }); + } + + }); + + + + + + diff --git a/static/app/views/friendscrap.html b/static/app/views/friendscrap.html index 09aade1..e14e079 100644 --- a/static/app/views/friendscrap.html +++ b/static/app/views/friendscrap.html @@ -1,34 +1,3 @@ - - -

    @@ -38,19 +7,19 @@ - - - + + + - + + + + - - - diff --git a/static/app/views/myfriends.html b/static/app/views/myfriends.html index 6c3ae68..6c0b590 100644 --- a/static/app/views/myfriends.html +++ b/static/app/views/myfriends.html @@ -18,7 +18,7 @@ - + From 93612c0ea9899c5ca0061eef569541711f26a062 Mon Sep 17 00:00:00 2001 From: Shanarae Goodwin Date: Thu, 26 Feb 2015 10:05:24 -0800 Subject: [PATCH 15/43] resolve line missing now added on app.js --- static/app/scripts/app.js | 1 + 1 file changed, 1 insertion(+) diff --git a/static/app/scripts/app.js b/static/app/scripts/app.js index 07c0c3e..46403b2 100644 --- a/static/app/scripts/app.js +++ b/static/app/scripts/app.js @@ -52,6 +52,7 @@ angular .when('/mycrap/myclaimed', { templateUrl: 'views/myclaimed.html', controller: 'MyclaimedCtrl', + resolve: { authenticated: ['djangoAuth', function(djangoAuth){ return djangoAuth.authenticationStatus(); }], From 8d24a54cfe741ad1a9f3092c3eba0184f049953d Mon Sep 17 00:00:00 2001 From: Shanarae Goodwin Date: Thu, 26 Feb 2015 10:46:58 -0800 Subject: [PATCH 16/43] css color change --- static/.tmp/styles/main.css | 8 +++++--- static/app/index.html | 4 +++- static/app/styles/main.css | 6 +++++- static/app/views/login.html | 1 + static/app/views/register.html | 1 + 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/static/.tmp/styles/main.css b/static/.tmp/styles/main.css index 22bc4b9..39924d7 100644 --- a/static/.tmp/styles/main.css +++ b/static/.tmp/styles/main.css @@ -82,8 +82,10 @@ body { } .other-color{ - background: #f0ac1d; + background: #bbeaf0; } -} -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsaUJBQWdCO0VBQ2hCLGtCQUFpQjtFQUNqQixhQUFZO0VBQ1osa0JBQWlCO0VBQ2xCOztBQUVEO0VBQ0UsWUFBVztFQUNaOztBQUVELDRFQUEyRTtBQUMzRTs7O0VBR0Usb0JBQW1CO0VBQ25CLHFCQUFvQjtFQUNyQjs7QUFFRCx5QkFBd0I7QUFDeEI7RUFDRSxrQ0FBaUM7RUFDakMscUJBQW9CO0VBQ3JCO0FBQ0Qsa0VBQWlFO0FBQ2pFO0VBQ0UsZUFBYztFQUNkLGtCQUFpQjtFQUNqQixtQkFBa0I7RUFDbEIsc0JBQXFCO0VBQ3RCOztBQUVELHlCQUF3QjtBQUN4QjtFQUNFLG1CQUFrQjtFQUNsQixhQUFZO0VBQ1osK0JBQThCO0VBQy9COztBQUVEO0VBQ0UsZ0JBQWU7RUFDaEI7O0FBRUQsZ0RBQStDO0FBQy9DO0VBQ0Usb0JBQW1CO0VBQ25CLGtDQUFpQztFQUNsQztBQUNEO0VBQ0UsaUJBQWdCO0VBQ2hCLG9CQUFtQjtFQUNwQjs7QUFFRCxtQ0FBa0M7QUFDbEM7RUFDRSxnQkFBZTtFQUNoQjtBQUNEO0VBQ0Usa0JBQWlCO0VBQ2xCOztBQUVELDBDQUF5QztBQUN6QztFQUNFO0lBQ0Usa0JBQWlCO0lBQ2xCOztFQUVELHdDQUF1QztFQUN2Qzs7O0lBR0UsaUJBQWdCO0lBQ2hCLGtCQUFpQjtJQUNsQjtFQUNELDZCQUE0QjtFQUM1QjtJQUNFLHFCQUFvQjtJQUNyQjtFQUNELGtFQUFpRTtFQUNqRTtJQUNFLGtCQUFpQjtJQUNsQjs7RUFFRDtNQUNJLHFCQUFvQjtJQUN2QjtFQUNGIiwiZmlsZSI6Im1haW4uY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmJyb3dzZWhhcHB5IHtcbiAgbWFyZ2luOiAwLjJlbSAwO1xuICBiYWNrZ3JvdW5kOiAjY2NjO1xuICBjb2xvcjogIzAwMDtcbiAgcGFkZGluZzogMC4yZW0gMDtcbn1cblxuYm9keSB7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi8qIEV2ZXJ5dGhpbmcgYnV0IHRoZSBqdW1ib3Ryb24gZ2V0cyBzaWRlIHNwYWNpbmcgZm9yIG1vYmlsZSBmaXJzdCB2aWV3cyAqL1xuLmhlYWRlcixcbi5tYXJrZXRpbmcsXG4uZm9vdGVyIHtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xufVxuXG4vKiBDdXN0b20gcGFnZSBoZWFkZXIgKi9cbi5oZWFkZXIge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cbi8qIE1ha2UgdGhlIG1hc3RoZWFkIGhlYWRpbmcgdGhlIHNhbWUgaGVpZ2h0IGFzIHRoZSBuYXZpZ2F0aW9uICovXG4uaGVhZGVyIGgzIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxOXB4O1xufVxuXG4vKiBDdXN0b20gcGFnZSBmb290ZXIgKi9cbi5mb290ZXIge1xuICBwYWRkaW5nLXRvcDogMTlweDtcbiAgY29sb3I6ICM3Nzc7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1O1xufVxuXG4uY29udGFpbmVyLW5hcnJvdyA+IGhyIHtcbiAgbWFyZ2luOiAzMHB4IDA7XG59XG5cbi8qIE1haW4gbWFya2V0aW5nIG1lc3NhZ2UgYW5kIHNpZ24gdXAgYnV0dG9uICovXG4uanVtYm90cm9uIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbn1cbi5qdW1ib3Ryb24gLmJ0biB7XG4gIGZvbnQtc2l6ZTogMjFweDtcbiAgcGFkZGluZzogMTRweCAyNHB4O1xufVxuXG4vKiBTdXBwb3J0aW5nIG1hcmtldGluZyBjb250ZW50ICovXG4ubWFya2V0aW5nIHtcbiAgbWFyZ2luOiA0MHB4IDA7XG59XG4ubWFya2V0aW5nIHAgKyBoNCB7XG4gIG1hcmdpbi10b3A6IDI4cHg7XG59XG5cbi8qIFJlc3BvbnNpdmU6IFBvcnRyYWl0IHRhYmxldHMgYW5kIHVwICovXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDczMHB4O1xuICB9XG5cbiAgLyogUmVtb3ZlIHRoZSBwYWRkaW5nIHdlIHNldCBlYXJsaWVyICovXG4gIC5oZWFkZXIsXG4gIC5tYXJrZXRpbmcsXG4gIC5mb290ZXIge1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB9XG4gIC8qIFNwYWNlIG91dCB0aGUgbWFzdGhlYWQgKi9cbiAgLmhlYWRlciB7XG4gICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgfVxuICAvKiBSZW1vdmUgdGhlIGJvdHRvbSBib3JkZXIgb24gdGhlIGp1bWJvdHJvbiBmb3IgdmlzdWFsIGVmZmVjdCAqL1xuICAuanVtYm90cm9uIHtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICB9XG5cbiAgLm90aGVyLWNvbG9ye1xuICAgICAgYmFja2dyb3VuZDogI2YwYWMxZDtcbiAgfVxufVxuIl19 */ \ No newline at end of file + .well{ + background-color: #bbeaf0; +} +} \ No newline at end of file diff --git a/static/app/index.html b/static/app/index.html index 4a93105..b5f960c 100644 --- a/static/app/index.html +++ b/static/app/index.html @@ -51,7 +51,7 @@ - + @@ -63,6 +63,8 @@ diff --git a/static/app/views/register.html b/static/app/views/register.html index c77d0b2..1ee80d5 100644 --- a/static/app/views/register.html +++ b/static/app/views/register.html @@ -23,6 +23,7 @@
    {{error}}
    +

    You are already logged in! You don't need to register.

    From 59d1b145d1408bcff4463189b013a663dec4a8aa Mon Sep 17 00:00:00 2001 From: Shanarae Goodwin Date: Thu, 26 Feb 2015 14:22:26 -0800 Subject: [PATCH 17/43] 2/26 afternoon push --- items/models.py | 4 ++-- static/.tmp/styles/main.css | 8 +++++--- static/app/scripts/controllers/myclaimed.js | 9 +++++++++ static/app/scripts/controllers/mycrap.js | 10 ++++++++++ static/app/styles/main.css | 4 ++-- static/app/views/myclaimed.html | 4 ++-- static/app/views/mycrap.html | 8 ++++---- static/app/views/postitem.html | 2 +- 8 files changed, 35 insertions(+), 14 deletions(-) diff --git a/items/models.py b/items/models.py index 1c6106d..2e9b2e9 100644 --- a/items/models.py +++ b/items/models.py @@ -30,5 +30,5 @@ class Meta: availability = models.BooleanField(default=True) category = models.CharField(max_length=50, choices=CATEGORIES) - def __str__(self): - return "%s on %" % (self.item_name, self.created) + def __unicode__(self): + return "{}s on {}.format"(self.item_name, self.created) diff --git a/static/.tmp/styles/main.css b/static/.tmp/styles/main.css index 39924d7..9ed87e4 100644 --- a/static/.tmp/styles/main.css +++ b/static/.tmp/styles/main.css @@ -82,10 +82,12 @@ body { } .other-color{ - background: #bbeaf0; + background: #dbeaf0; } .well{ - background-color: #bbeaf0; + background-color: #dbeaf0; } -} \ No newline at end of file +} + +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0UsaUJBQWdCO0VBQ2hCLGtCQUFpQjtFQUNqQixhQUFZO0VBQ1osa0JBQWlCO0VBQ2xCOztBQUVEO0VBQ0UsWUFBVztFQUNaOztBQUVELDRFQUEyRTtBQUMzRTs7O0VBR0Usb0JBQW1CO0VBQ25CLHFCQUFvQjtFQUNyQjs7QUFFRCx5QkFBd0I7QUFDeEI7RUFDRSxrQ0FBaUM7RUFDakMscUJBQW9CO0VBQ3JCO0FBQ0Qsa0VBQWlFO0FBQ2pFO0VBQ0UsZUFBYztFQUNkLGtCQUFpQjtFQUNqQixtQkFBa0I7RUFDbEIsc0JBQXFCO0VBQ3RCOztBQUVELHlCQUF3QjtBQUN4QjtFQUNFLG1CQUFrQjtFQUNsQixhQUFZO0VBQ1osK0JBQThCO0VBQy9COztBQUVEO0VBQ0UsZ0JBQWU7RUFDaEI7O0FBRUQsZ0RBQStDO0FBQy9DO0VBQ0Usb0JBQW1CO0VBQ25CLGtDQUFpQztFQUNsQztBQUNEO0VBQ0UsaUJBQWdCO0VBQ2hCLG9CQUFtQjtFQUNwQjs7QUFFRCxtQ0FBa0M7QUFDbEM7RUFDRSxnQkFBZTtFQUNoQjtBQUNEO0VBQ0Usa0JBQWlCO0VBQ2xCOztBQUVELDBDQUF5QztBQUN6QztFQUNFO0lBQ0Usa0JBQWlCO0lBQ2xCOztFQUVELHdDQUF1QztFQUN2Qzs7O0lBR0UsaUJBQWdCO0lBQ2hCLGtCQUFpQjtJQUNsQjtFQUNELDZCQUE0QjtFQUM1QjtJQUNFLHFCQUFvQjtJQUNyQjtFQUNELGtFQUFpRTtFQUNqRTtJQUNFLGtCQUFpQjtJQUNsQjs7RUFFRDtNQUNJLHFCQUFvQjtJQUN2Qjs7RUFFRDtNQUNJLDJCQUEwQjtFQUMvQjtFQUNBIiwiZmlsZSI6Im1haW4uY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLmJyb3dzZWhhcHB5IHtcbiAgbWFyZ2luOiAwLjJlbSAwO1xuICBiYWNrZ3JvdW5kOiAjY2NjO1xuICBjb2xvcjogIzAwMDtcbiAgcGFkZGluZzogMC4yZW0gMDtcbn1cblxuYm9keSB7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi8qIEV2ZXJ5dGhpbmcgYnV0IHRoZSBqdW1ib3Ryb24gZ2V0cyBzaWRlIHNwYWNpbmcgZm9yIG1vYmlsZSBmaXJzdCB2aWV3cyAqL1xuLmhlYWRlcixcbi5tYXJrZXRpbmcsXG4uZm9vdGVyIHtcbiAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxNXB4O1xufVxuXG4vKiBDdXN0b20gcGFnZSBoZWFkZXIgKi9cbi5oZWFkZXIge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cbi8qIE1ha2UgdGhlIG1hc3RoZWFkIGhlYWRpbmcgdGhlIHNhbWUgaGVpZ2h0IGFzIHRoZSBuYXZpZ2F0aW9uICovXG4uaGVhZGVyIGgzIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbiAgbGluZS1oZWlnaHQ6IDQwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAxOXB4O1xufVxuXG4vKiBDdXN0b20gcGFnZSBmb290ZXIgKi9cbi5mb290ZXIge1xuICBwYWRkaW5nLXRvcDogMTlweDtcbiAgY29sb3I6ICM3Nzc7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZTVlNWU1O1xufVxuXG4uY29udGFpbmVyLW5hcnJvdyA+IGhyIHtcbiAgbWFyZ2luOiAzMHB4IDA7XG59XG5cbi8qIE1haW4gbWFya2V0aW5nIG1lc3NhZ2UgYW5kIHNpZ24gdXAgYnV0dG9uICovXG4uanVtYm90cm9uIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2U1ZTVlNTtcbn1cbi5qdW1ib3Ryb24gLmJ0biB7XG4gIGZvbnQtc2l6ZTogMjFweDtcbiAgcGFkZGluZzogMTRweCAyNHB4O1xufVxuXG4vKiBTdXBwb3J0aW5nIG1hcmtldGluZyBjb250ZW50ICovXG4ubWFya2V0aW5nIHtcbiAgbWFyZ2luOiA0MHB4IDA7XG59XG4ubWFya2V0aW5nIHAgKyBoNCB7XG4gIG1hcmdpbi10b3A6IDI4cHg7XG59XG5cbi8qIFJlc3BvbnNpdmU6IFBvcnRyYWl0IHRhYmxldHMgYW5kIHVwICovXG5AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY29udGFpbmVyIHtcbiAgICBtYXgtd2lkdGg6IDczMHB4O1xuICB9XG5cbiAgLyogUmVtb3ZlIHRoZSBwYWRkaW5nIHdlIHNldCBlYXJsaWVyICovXG4gIC5oZWFkZXIsXG4gIC5tYXJrZXRpbmcsXG4gIC5mb290ZXIge1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB9XG4gIC8qIFNwYWNlIG91dCB0aGUgbWFzdGhlYWQgKi9cbiAgLmhlYWRlciB7XG4gICAgbWFyZ2luLWJvdHRvbTogMzBweDtcbiAgfVxuICAvKiBSZW1vdmUgdGhlIGJvdHRvbSBib3JkZXIgb24gdGhlIGp1bWJvdHJvbiBmb3IgdmlzdWFsIGVmZmVjdCAqL1xuICAuanVtYm90cm9uIHtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICB9XG5cbiAgLm90aGVyLWNvbG9ye1xuICAgICAgYmFja2dyb3VuZDogI2RiZWFmMDtcbiAgfVxuXG4gIC53ZWxse1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2RiZWFmMDtcbn1cbn1cbiJdfQ== */ \ No newline at end of file diff --git a/static/app/scripts/controllers/myclaimed.js b/static/app/scripts/controllers/myclaimed.js index b8e2784..9f4ae36 100644 --- a/static/app/scripts/controllers/myclaimed.js +++ b/static/app/scripts/controllers/myclaimed.js @@ -1,6 +1,15 @@ 'use strict'; angular.module('declutterApp') + + .filter('availbool', function(){ + return function(boolValue) { + if (boolValue === true) + return "Claimed"; + else + return "Available"; + }; + }) .controller('MyclaimedCtrl', function ($scope, $http, $cookies) { $http.defaults.headers.post['X-CSRFToken'] = $cookies.csrftoken; diff --git a/static/app/scripts/controllers/mycrap.js b/static/app/scripts/controllers/mycrap.js index a69b584..1027a02 100644 --- a/static/app/scripts/controllers/mycrap.js +++ b/static/app/scripts/controllers/mycrap.js @@ -2,6 +2,15 @@ angular.module('declutterApp') + .filter('availbool', function(){ + return function(boolValue) { + if (boolValue === true) + return "Claimed"; + else + return "Available"; + }; + }) + .controller('MycrapCtrl', function ($scope, $http, $cookies, $location) { $http.defaults.headers.post['X-CSRFToken'] = $cookies.csrftoken; @@ -72,4 +81,5 @@ angular.module('declutterApp') alert("Deleting the item"); return item.show = true; }; + }); diff --git a/static/app/styles/main.css b/static/app/styles/main.css index 02068b3..77b4cf7 100644 --- a/static/app/styles/main.css +++ b/static/app/styles/main.css @@ -82,10 +82,10 @@ body { } .other-color{ - background: #bbeaf0; + background: #dbeaf0; } .well{ - background-color: #bbeaf0; + background-color: #dbeaf0; } } diff --git a/static/app/views/myclaimed.html b/static/app/views/myclaimed.html index f01777c..9aa01cb 100644 --- a/static/app/views/myclaimed.html +++ b/static/app/views/myclaimed.html @@ -16,7 +16,7 @@
    - + @@ -26,7 +26,7 @@ - +
    CategoryItem NameDescriptionIDUser NameItem Description Claim This
    {{ friend.id}} {{ friend.user_name}} {{ item.category }}{{ item.item_name }}{{ item.description }} Claim this Item
    {{ user.username }} {{ user.email }}Description Owner Claimed ByAvailabilityStatus
    {{ item.description }} {{ item.poster.username }} {{ item.claimer.username }}{{ item.availability }}{{ item.availability | availbool }}
    diff --git a/static/app/views/mycrap.html b/static/app/views/mycrap.html index bb4e48b..a23a856 100644 --- a/static/app/views/mycrap.html +++ b/static/app/views/mycrap.html @@ -19,7 +19,7 @@ Date Posted Owner Claimed By - Availability + Status @@ -29,11 +29,11 @@ {{ item.item_name }} {{ item.description }} {{ item.category }} - {{ item.created }} + {{ item.created | date:'shortDate' }} {{ item.poster.username }} {{ item.claimer.username }} - {{ item.availability }} - Delete + {{ item.availability | availbool }} + diff --git a/static/app/views/postitem.html b/static/app/views/postitem.html index 044368d..46adb7f 100644 --- a/static/app/views/postitem.html +++ b/static/app/views/postitem.html @@ -8,7 +8,7 @@

    Post a New Item

    -

    Item Name:

    +

    Item Name:

    Description:

    Category: