From 5468873b35260852b7eea89dbd67bbfc20ff52fd Mon Sep 17 00:00:00 2001 From: Fergal Moran Date: Mon, 29 Apr 2013 23:30:51 +0100 Subject: [PATCH] First draft user profile sidebar --- dss/settings.py | 10 ++--- spa/api/v1/UserResource.py | 10 ++++- static/img/toolbar-loader.gif | Bin 0 -> 9392 bytes static/js/app/app.js | 57 +++++++++++++++++---------- static/js/app/site.js | 10 ++++- static/js/app/views/header.js | 9 ----- static/js/app/views/sidebaruser.js | 9 ++--- static/js/app/views/user.js | 2 - templates/views/HeaderView.html | 16 +++++--- templates/views/SidebarViewUser.html | 11 ++++-- 10 files changed, 81 insertions(+), 53 deletions(-) create mode 100644 static/img/toolbar-loader.gif diff --git a/dss/settings.py b/dss/settings.py index 13171ad..51f78b7 100644 --- a/dss/settings.py +++ b/dss/settings.py @@ -1,4 +1,4 @@ -## Django settings for dss project. +#e Django settings for dss project. from datetime import timedelta import os @@ -44,9 +44,9 @@ USE_L10N = True USE_TZ = True SITE_ROOT = here('') -MEDIA_ROOT = here('media') +MEDIA_ROOT = here('../media') STATIC_ROOT = here('static') #localsettings.STATIC_ROOT if hasattr(localsettings, 'STATIC_ROOT') else '' -CACHE_ROOT = here('media/cache') +CACHE_ROOT = here('../media/cache') if DEBUG: STATIC_URL = '/static/' @@ -133,8 +133,8 @@ MIDDLEWARE_CLASSES = ( 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'spa.middleware.uploadify.SWFUploadMiddleware', - 'spa.middleware.sqlprinter.SqlPrintingMiddleware', - 'debug_toolbar.middleware.DebugToolbarMiddleware', + #'spa.middleware.sqlprinter.SqlPrintingMiddleware', + #'debug_toolbar.middleware.DebugToolbarMiddleware', ) WSGI_APPLICATION = 'dss.wsgi.application' diff --git a/spa/api/v1/UserResource.py b/spa/api/v1/UserResource.py index 5ac4313..699e255 100644 --- a/spa/api/v1/UserResource.py +++ b/spa/api/v1/UserResource.py @@ -4,6 +4,7 @@ from tastypie.authentication import Authentication from tastypie.authorization import DjangoAuthorization from spa.api.v1.BackboneCompatibleResource import BackboneCompatibleResource from spa.models import UserProfile +from django.conf.urls import url class UserProfileResource(BackboneCompatibleResource): @@ -19,7 +20,6 @@ class UserProfileResource(BackboneCompatibleResource): def _hydrateBitmapOption(self, source, comparator): return "checked" if (source & comparator) != 0 else "" - def hydrate(self, bundle): if 'activity_sharing_likes' in bundle.data: likes = UserProfile.ACTIVITY_SHARE_LIKES if bundle.data['activity_sharing_likes'] else 0 @@ -55,6 +55,8 @@ class UserProfileResource(BackboneCompatibleResource): def dehydrate(self, bundle): del bundle.data['activity_sharing'] del bundle.data['activity_sharing_networks'] + bundle.data['display_name'] = bundle.obj.get_nice_name() + bundle.data['avatar_image'] = bundle.obj.get_avatar_image() if bundle.obj.user.id == bundle.request.user.id: bundle.data['activity_sharing_likes'] = \ self._hydrateBitmapOption(bundle.obj.activity_sharing, UserProfile.ACTIVITY_SHARE_LIKES) @@ -80,6 +82,12 @@ class UserResource(BackboneCompatibleResource): authorization = DjangoAuthorization() authentication = Authentication() + def prepend_urls(self): + return [ + url(r"^(?P%s)/(?P\d+)/$" % self._meta.resource_name, self.wrap_view('dispatch_detail'), name="api_dispatch_detail"), + url(r"^(?P%s)/(?P[\w\d_.-]+)/$" % self._meta.resource_name, self.wrap_view('dispatch_detail'), name="api_dispatch_detail"), + ] + def dehydrate(self, bundle): if bundle.obj.id != bundle.request.user.id: del bundle.data['email'] diff --git a/static/img/toolbar-loader.gif b/static/img/toolbar-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e4bfdef37e8039f754aa686681ce0f72019efc7 GIT binary patch literal 9392 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 U6Px^c!PKR>P3LOSuNBe%5B%+}PXGV_ literal 0 HcmV?d00001 diff --git a/static/js/app/app.js b/static/js/app/app.js index 720138c..aebda69 100644 --- a/static/js/app/app.js +++ b/static/js/app/app.js @@ -9,6 +9,7 @@ var AppRouter = Backbone.Router.extend({ root: '/', routes: { + "debug": "debug", "mixes": "mixList", "mixes/:type": "mixList", "mix/upload": "mixUpload", @@ -52,15 +53,46 @@ var AppRouter = Backbone.Router.extend({ } }, + debug: function () { + var model = new User({ + id: 'fergal' + }); + model.fetch({ + success: function(){ + var content= new SidebarViewUser({ + model: model + }); + $('#content').html(content.render().el); + } + }); + }, user: function (user) { this._renderMixList('latest', { "user": user }); var model = new User({ id: user }); - this.sidebarView = new SidebarViewUser({ - model: model + model.fetch({ + success: function(){ + var content= new SidebarViewUser({ + model: model + }); + $('#sidebar').html(content.render().el); + } + }); + }, + userDetails: function () { + var user = new User({ + id: com.podnoms.settings.currentUser + }); + $('#site-content-fill').html(''); + user.fetch({ + success: function () { + var content = new UserView({ + model: user + }); + $('#content').html(content.render().el); + } }); - $('#sidebar').html(this.sidebarView.el); }, mixList: function (type) { this._renderMixList(type); @@ -84,8 +116,7 @@ var AppRouter = Backbone.Router.extend({ var mixes = new MixListView({ collection: mixList }); - var content = mixes.el; - $('#content').html(content); + $('#content').html(mixes.el); if (mixes.itemPlaying != null) { com.podnoms.settings.setupPlayer(mixes.itemPlaying.toJSON(), mixes.itemPlaying.get('id')); } @@ -119,7 +150,7 @@ var AppRouter = Backbone.Router.extend({ }, mixEdit: function (id) { var mix = new Mix({ - id: id + slug: id }); mix.fetch({ success: function () { @@ -219,20 +250,6 @@ var AppRouter = Backbone.Router.extend({ }, connectAccounts: function () { alert("Connecting accounts"); - }, - userDetails: function () { - var user = new User({ - id: com.podnoms.settings.currentUser - }); - $('#site-content-fill').html(''); - user.fetch({ - success: function () { - var content = new UserView({ - model: user - }); - $('#content').html(content.render().el); - } - }); } }); diff --git a/static/js/app/site.js b/static/js/app/site.js index c43f0e2..005e33e 100644 --- a/static/js/app/site.js +++ b/static/js/app/site.js @@ -7,6 +7,7 @@ */ $(document).ready(function () { + $('#ajax-request').hide(); if (window.location.hash == '#_=_') { window.location.hash = ""; } @@ -14,7 +15,14 @@ $(document).ready(function () { Backbone.history.navigate("/"); } }); - +$(document).on({ + ajaxStart: function () { + $('#ajax-request').show(); + }, + ajaxStop: function () { + $('#ajax-request').hide(); + } +}); $(document).ajaxSend(function (event, xhr, settings) { function getCookie(name) { var cookieValue = null; diff --git a/static/js/app/views/header.js b/static/js/app/views/header.js index 4972fe2..35a7e7a 100644 --- a/static/js/app/views/header.js +++ b/static/js/app/views/header.js @@ -23,15 +23,6 @@ window.HeaderView = Backbone.View.extend({ }, login: function () { com.podnoms.utils.modal('tpl/LoginView'); - return; - $.colorbox({ - href: "/tpl/LoginView/", - onClosed: function () { - Backbone.history.navigate('/', { - trigger: true - }); - } - }); }, logout: function () { com.podnoms.utils.showAlert("Success", "You are now logged out"); diff --git a/static/js/app/views/sidebaruser.js b/static/js/app/views/sidebaruser.js index 9f98b8e..fbb95eb 100644 --- a/static/js/app/views/sidebaruser.js +++ b/static/js/app/views/sidebaruser.js @@ -10,11 +10,10 @@ window.SidebarViewUser = Backbone.View.extend({ events: { }, - initialize: function () { - this.render(); - }, render: function () { - $(this.el).html(this.template({"item":this.model.toJSON()})); + ich.addTemplate('sidebaruser', this.template()); + var rendered = ich.sidebaruser(this.model.toJSON()); + $(this.el).html(rendered); return this; } -}); \ No newline at end of file +}); diff --git a/static/js/app/views/user.js b/static/js/app/views/user.js index cf5ed82..b881f5d 100644 --- a/static/js/app/views/user.js +++ b/static/js/app/views/user.js @@ -12,8 +12,6 @@ UserView = DSSEditableView.extend({ "click #save-changes": "saveChanges", "change input[type=radio]": "selectAvatar" }, - initialize: function () { - }, render: function () { ich.addTemplate('user', this.template()); var renderedTemplate = ich.user(this.model.toJSON()); diff --git a/templates/views/HeaderView.html b/templates/views/HeaderView.html index 70adbd3..354a6c0 100644 --- a/templates/views/HeaderView.html +++ b/templates/views/HeaderView.html @@ -2,9 +2,9 @@ {% load spa_extras %}