Merge conflicts

This commit is contained in:
Fergal Moran
2015-12-10 22:38:49 +00:00
44 changed files with 356 additions and 730 deletions

View File

@@ -1,24 +1,24 @@
'use strict';
angular.module('dssWebApp', [
'ngCookies',
'ngResource',
'ngAnimate',
'ngSanitize',
'btford.socket-io',
'ui.router',
'angular-loading-bar',
'js-data',
'ui.bootstrap',
'dialogs.main',
'infinite-scroll',
'angularFileUpload',
'angulartics',
'angular-jwt',
'http-auth-interceptor',
'angular-smilies',
'angulartics.google.analytics'
])
'ngCookies',
'ngResource',
'ngAnimate',
'ngSanitize',
'btford.socket-io',
'ui.router',
'angular-loading-bar',
'js-data',
'ui.bootstrap',
'dialogs.main',
'infinite-scroll',
'angularFileUpload',
'angulartics',
'angular-jwt',
'http-auth-interceptor',
'angular-smilies',
'angulartics.google.analytics'
])
.config(function ($stateProvider, $sceDelegateProvider, $httpProvider, $urlRouterProvider, $locationProvider, $provide,
jwtInterceptorProvider, $analyticsProvider, dialogsProvider, DSProvider, DSHttpAdapterProvider,
SERVER_CONFIG, STORAGE) {
@@ -51,72 +51,84 @@ angular.module('dssWebApp', [
]);
$locationProvider.html5Mode(true);
}).run(function ($http, $rootScope, $state, $anchorScroll, $window, LoginService, Session, SocketService) {
$rootScope.isPlaying = false;
$rootScope.isPlaying = false;
$rootScope.setCurrentUser = function (user) {
console.log('Current user', user);
$rootScope.currentUser = user;
};
$rootScope.connectSockets = function () {
SocketService.connectSocket(Session.getSession());
SocketService.registerHandler('site:broadcast', function (data) {
console.log(data);
$.notify({
message: data,
icon: '/assets/images/yeoman.png'
}, {
placement: {
from: 'bottom',
align: 'left'
},
icon_type: 'image'
});
$rootScope.setCurrentUser = function (user) {
console.log('Current user', user);
$rootScope.currentUser = user;
};
$rootScope.connectSockets = function () {
SocketService.connectSocket(Session.getSession());
SocketService.registerHandler('site:broadcast', function (data) {
console.log(data);
$.notify({
message: data,
icon: '/assets/images/yeoman.png'
}, {
placement: {
from: 'bottom',
align: 'left'
},
icon_type: 'image'
});
};
hello.init({
facebook: '154504534677009',
twitter: 'qmvJ6tptgd8G9T9WYp6P3Q',
google: '248170132962-5km115budk9h84raa26hdmnnqdj8ivkl.apps.googleusercontent.com'
}, {
redirect_uri: '/'
});
};
//ensure login before state change
$rootScope.$on('$stateChangeStart', function (event, toState, toParams) {
if (!$rootScope.currentUser && Session.getLocalToken() != null && Session.getBackend()) {
LoginService.loginUser().then(function (user) {
LoginService.getUserProfile()
.then(function(user){
$rootScope.setCurrentUser(user);
$rootScope.connectSockets();
hello.init({
facebook: '154504534677009',
twitter: 'qmvJ6tptgd8G9T9WYp6P3Q',
google: '248170132962-5km115budk9h84raa26hdmnnqdj8ivkl.apps.googleusercontent.com'
}, {
redirect_uri: '/'
});
//ensure login before state change
$rootScope.$on('$stateChangeStart', function (event, toState, toParams) {
if (!$rootScope.currentUser && Session.getLocalToken() != null && Session.getBackend()) {
LoginService.loginUser().then(function (user) {
LoginService.getUserProfile()
.then(function (user) {
$rootScope.setCurrentUser(user);
$rootScope.connectSockets();
return $state.go(toState.name, toParams);
});
}, function (result) {
console.log('Unable to login', result);
if (result.code === 403 || result.code === 400 || result.code === 401 || result.code === 500) {
LoginService.logoutUser()
.then(function () {
return $state.go(toState.name, toParams);
});
}, function (result) {
console.log('Unable to login', result);
if (result.code === 403 || result.code === 400 || result.code === 401 || result.code === 500) {
LoginService.logoutUser()
.then(function () {
return $state.go(toState.name, toParams);
});
} else {
debugger;
console.error('Ooops');
LoginService.logoutUser()
.then(function () {
return $state.go(toState.name, toParams);
});
}
});
event.preventDefault();
}
});
$rootScope.$on('$viewContentLoaded', function (evt, absNewUrl, absOldUrl) {
$anchorScroll();
//$window.scrollTop(0, 0);
});
$rootScope.$on('$locationChangeSuccess', function (evt, absNewUrl, absOldUrl) {
$anchorScroll();
});
} else {
debugger;
console.error('Ooops');
LoginService.logoutUser()
.then(function () {
return $state.go(toState.name, toParams);
});
}
});
event.preventDefault();
}
});
$rootScope.$on('$viewContentLoaded', function (evt, absNewUrl, absOldUrl) {
$anchorScroll();
//$window.scrollTop(0, 0);
});
$rootScope.$on('$locationChangeSuccess', function (evt, absNewUrl, absOldUrl) {
$anchorScroll();
});
/*
$rootScope.$on('$stateChangeError', function (event, toState, toParams, fromState, fromParams, error) {
console.log('$stateChangeError - fired when an error occurs during transition.');
console.log(arguments);
});
$rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {
console.log('$stateChangeSuccess to ' + toState.name + '- fired once the state transition is complete.');
});
$rootScope.$on('$stateNotFound', function (event, unfoundState, fromState, fromParams) {
console.log('$stateNotFound ' + unfoundState.to + ' - fired when a state cannot be found by its name.');
console.log(unfoundState, fromState, fromParams);
});
*/
});

View File

@@ -19,8 +19,8 @@
@import 'views/mixes/mixes.less';
@import 'views/mixes/upload/upload.less';
@import 'views/schedule/schedule.less';
@import 'views/users/item/userItem.less';
@import 'views/users/users.less';
@import 'views/user/item/userItem.less';
@import 'views/user/user.less';
// endinjector
#page-content {

View File

@@ -33,7 +33,7 @@
span.text-info()
i.fa.fa-globe
strong
a(ui-sref='root.users.user({slug: comment.slug})') {{comment.display_name}}
a(ui-sref='root.user({user: comment.slug})') {{comment.display_name}}
| commented.
p {{comment.comment}}
p

View File

@@ -6,7 +6,7 @@
</div>
<div class="play-progress">
<span>
<a ui-sref="root.mixes.mix({slug: mix.slug})">
<a ui-sref="root.user.mix({user: mix.user.slug, mix: mix.slug})">
{{mix.user.first_name}} - {{mix.title}}
</a>
</span>

View File

@@ -1,18 +1,9 @@
<div class="container-fluid">
<a ui-sref="root.home" id="brand">Deep|South|Sounds</a>
<a ui-sref="root" id="brand">Deep|South|Sounds</a>
<ul class="main-nav">
<li class="ms-hover">
<a ui-sref="root.mixes" ui-sref-active="active">
<span>Mixes</span>
</a>
</li>
<li class="ms-hover">
<a ui-sref="root.users" ui-sref-active="active">
<span>Users</span>
</a>
</li>
<li class="ms-hover" ng-if="$root.currentUser">
<a ui-sref="root.upload" ui-sref-active="active">
<i class="fa fa-cloud-upload"></i>
<span>Upload</span>
</a>
</li>
@@ -39,7 +30,7 @@
<span class="label label-lightred">{{notificationCount}}</span>
</a>
<ul class="dropdown-menu pull-right message-ul">
<dss-notifications />
<dss-notifications/>
<li>
<a href="components-messages.html" class="more-messages">Go to Message center
<i class="fa fa-arrow-right"></i>
@@ -54,7 +45,7 @@
</a>
<ul class="dropdown-menu pull-right">
<li>
<a ui-sref="root.me">Edit profile</a>
<a ui-sref="root.me">View profile</a>
</li>
<li>
<a ui-sref="root.me.edit">Account settings</a>

View File

@@ -1,6 +0,0 @@
'use strict';
angular.module('dssWebApp')
.controller('SidebarCtrl', function ($scope) {
});

View File

@@ -1,21 +0,0 @@
'use strict';
describe('Controller: SidebarCtrl', function () {
// load the controller's module
beforeEach(module('dssWebApp'));
var SidebarCtrl, scope;
// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
SidebarCtrl = $controller('SidebarCtrl', {
$scope: scope
});
}));
it('should ...', function () {
expect(1).toEqual(1);
});
});

View File

@@ -1,133 +0,0 @@
<nav class="navbar navbar-default" role="navigation">
<div class="side-menu-container">
<div class="navbar-header">
<a class="navbar-brand" href="#">
<div class="icon fa fa-paper-plane"></div>
<div class="title">Flat Admin V.2</div>
</a>
<button type="button" class="navbar-expand-toggle pull-right visible-xs">
<i class="fa fa-times icon"></i>
</button>
</div>
<ul class="nav navbar-nav">
<li ng-if="$root.currentUser" class="purple">
<a ui-sref="root.upload" ui-sref-active="active">
<i
class="sidebar-nav-icon fa fa-upload fa-white"></i>Upload
</a>
</li>
<li>
<a ui-sref="root.mixes" ui-sref-active="active">
<i class="sidebar-nav-icon fa fa-music"></i>Mixes
</a>
<b class="arrow"></b>
</li>
<li>
<a ui-sref="root.schedule" ui-sref-active="active">
<i class="sidebar-nav-icon fa fa-calendar"></i>Schedule
</a>
<b class="arrow"></b>
</li>
<li ng-if="isInRole('admin')">
<a ui-sref="root.radio" ui-sref-active="active">
<i class="sidebar-nav-icon fa fa-signal"></i>Radio Admin
</a>
<b class="arrow"></b>
</li>
<li>
<a ui-sref="root.users" ui-sref-active="active">
<i
class="sidebar-nav-icon fa fa-user"></i>Users
</a>
</li>
<li ng-if="$root.currentUser" class="purple">
<a ui-sref-active="active" ui-sref="root.me">
<i
class="sidebar-nav-icon fa fa-users"></i>My Profile
</a>
</li>
<li ng-if="$root.currentUser">
<a ui-sref-active="active" ui-sref="root.me.edit">
<i
class="sidebar-nav-icon fa fa-cogs"></i>Settings
</a>
</li>
<li ng-if="$root.currentUser &amp;&amp; False">
<a id="header-stream-button" ui-sref-active="active"
href="/stream"
title="Show mixes from people you follow">
<i
class="sidebar-nav-icon fa fa-dot-circle-o fa-white"></i>Stream
</a>
</li>
<li ng-if="False">
<a id="header-random-button" ui-sref-active="active" data-bypass="true"
title="Show random mix from our vaults">
<i class="sidebar-nav-icon fa fa-cogs"></i>Random
</a>
</li>
<li ng-if="False">
<a ui-sref-active="active" data-bypass="true" target="_blank" href="/podcast">
<i
class="sidebar-nav-icon fa fa-rss"></i>Podcast
</a>
</li>
<li ng-if="liveEnabled" class="purple">
<a id="header-live-button" ui-sref-active="active" data-bypass="true"
class="btn-success">
<i id="header-live-icon"
class="sidebar-nav-icon fa fa-headphones"></i>Listen
Live
</a>
</li>
</ul>
</div>
<!-- /.navbar-collapse -->
</nav>
<div class="sidebar-scroll">
<div class="sidebar-content">
<a href="/" class="sidebar-brand">
<i class="fa fa-2x fa-heartbeat"></i><span>Deep<small>south</small>Sounds</span>
</a>
<div id="sidebar-currentuser" ng-if="$root.currentUser" class="sidebar-section sidebar-user clearfix">
<div class="sidebar-user-avatar">
<a ui-sref="root.users.user({slug: $root.currentUser.slug})">
<img
ng-src="{{$root.currentUser.profile_image_medium}}" alt="avatar"/>
</a>
</div>
<a ui-sref="root.users.user({slug: $root.currentUser.slug})" class="sidebar-user-name">{{$root.currentUser.display_name}}</a>
<div class="sidebar-user-links">
<a ui-sref="root.users.user({slug: $root.currentUser.slug})"
data-toggle="tooltip" data-placement="bottom"
title="Profile">
<i class="fa fa-user"></i>
</a>
<a href="#"
data-toggle="tooltip"
data-placement="bottom"
title="Messages">
<i class="fa fa-envelope-o"></i>
</a>
<a ui-sref="root.users.edit({slug: $root.currentUser.slug})"
data-toggle="tooltip" data-placement="bottom"
title="Settings" class="enable-tooltip">
<i
class="fa fa-cogs"></i>
</a>
<a href="#" ng-click="logout()"
data-toggle="tooltip" title="Logout">
<i class="fa fa-sign-out"></i>
</a>
</div>
</div>
<div class="sidebar-section sidebar-nav-mini-hide">
<dss-radio-player></dss-radio-player>
</div>
</div>
</div>

View File

@@ -6,7 +6,7 @@ ul.timeline-list
small {{item.date|humanise}}
.timeline-content
p.push-bit
a(ui-sref='root.users.user({slug: item.from_user.slug})')
a(ui-sref='root.user({user: item.from_user.slug})')
strong {{item.from_user.display_name}}
p.push-bit {{item.verb}}
a(ng-href="{{item.object_type}}/{{item.object_slug}}")

View File

@@ -38,7 +38,7 @@
</div>
</div>
<div style="left: 56px;" class="meta-artist-con hidden-xs">
<a ui-sref="root.users.user({slug: mix.user.slug})"
<a ui-sref="root.user({user: mix.user.slug})"
class="the-artist ng-binding">
{{mix.user.display_name}}
</a>

View File

@@ -1,6 +1,6 @@
<li ng-repeat="notification in notifications">
<a ui-sref="root.mixes.mix({slug: notification.target})"
ng-class="notification.accepted_date ? '' : 'notification-new'">
<a ui-sref="root.users.mix({user: mix.user.slug, mix: notification.target})"
ng-class="notification.accepted_date ? '' : 'notification-new'">
<img ng-src="{{notification.from_user.profile_image_small}}" alt="">
<div class="details">
<div class="name">

View File

@@ -1,9 +1,8 @@
.navbar-notification-feed{
overflow: scroll;
overflow-x: hidden;
.navbar-notification-feed {
overflow: scroll;
overflow-x: hidden;
}
.notification-new .message{
font-weight: bold;
.notification-new {
font-weight: bold!important;
}

View File

@@ -41,36 +41,12 @@ angular.module('dssWebApp')
$scope.currentTheme = element.currentTarget.getAttribute("data-theme");
localStorage.setItem('dss__theme__', $scope.currentTheme);
};
$scope.toggleSidebar = function () {
var $page = $('#page-container');
var windowW = utils.getWindowWidth();
if (windowW > 991) { // Toggle main sidebar in large screens (> 991px)
$page.toggleClass('sidebar-visible-lg');
if ($page.hasClass('sidebar-mini')) {
$page.toggleClass('sidebar-visible-lg-mini');
}
if ($page.hasClass('sidebar-visible-lg')) {
$scope.closeSidebarAlt();
}
} else { // Toggle main sidebar in small screens (< 992px)
$page.toggleClass('sidebar-visible-xs');
if ($page.hasClass('sidebar-visible-xs')) {
$scope.closeSidebarAlt();
}
}
};
$scope.startChat = function (slug) {
console.log("Starting chat", slug);
UserModel.find(slug).then(function (user) {
$rootScope.isMessaging = true;
$rootScope.$broadcast(CHAT_EVENTS.startChat, user);
});
};
$scope.closeSidebarAlt = function () {
};
$scope.openSidebarAlt = function () {
};
$scope.$on(AUTH_EVENTS.loginSuccess, function (event, user) {
$scope.setCurrentUser(user);
@@ -129,7 +105,7 @@ angular.module('dssWebApp')
};
$scope.editMix = function (mix) {
$state.go('root.edit', {slug: mix.slug});
$state.go('root.user.mix.edit', {mix: mix.slug});
};
$scope.deleteMix = function (mix) {
@@ -140,7 +116,7 @@ angular.module('dssWebApp')
dlg.result.then(function (result) {
if (result) {
MixModel.destroy(mix.slug).then(function () {
$state.go('root.mixes');
$state.go('root');
});
}
});

View File

@@ -1,31 +0,0 @@
'use strict'
angular.module('dssWebApp')
.config(function ($stateProvider) {
$stateProvider
.state('root', {
url: '',
abstract: true,
views: {
'navbar': {
templateUrl: 'app/components/navbar/navbar.html',
controller: 'NavbarCtrl'
},
'pageheader': {
templateUrl: 'app/components/pageheader/pageheader.html',
controller: 'PageheaderCtrl'
},
'sidebar': {
templateUrl: 'app/components/sidebar/sidebar.html',
controller: 'SidebarCtrl'
},
'chatbar': {
templateUrl: 'app/components/chatbar/chatbar.html',
controller: 'ChatbarCtrl'
},
'footer': {
templateUrl: 'app/components/footer/footer.html',
controller: 'FooterCtrl'
}
}
});
});

134
client/app/routes.js Executable file
View File

@@ -0,0 +1,134 @@
'use strict'
angular.module('dssWebApp')
.config(function ($stateProvider) {
$stateProvider
.state('root', {
url: '/',
controller: function ($scope) {
$scope.$watch('currentUser', function () {
$state.reload();
});
},
resolve: {
mixes: function (MixModel) {
return MixModel.findAll({
waveform_generated: "True",
is_featured: "True"
});
}
},
views: {
'navbar': {
templateUrl: 'app/components/navbar/navbar.html',
controller: 'NavbarCtrl'
},
'pageheader': {
templateUrl: 'app/components/pageheader/pageheader.html',
controller: 'PageheaderCtrl'
},
'chatbar': {
templateUrl: 'app/components/chatbar/chatbar.html',
controller: 'ChatbarCtrl'
},
'footer': {
templateUrl: 'app/components/footer/footer.html',
controller: 'FooterCtrl'
},
'content@': {
templateUrl: 'app/views/home/home.html',
controller: 'HomeCtrl'
}
}
})
.state('root.upload', {
url: '/upload',
resolve: {
mix: function () {
return null;
}
},
views: {
'content@': {
templateUrl: 'app/views/mixes/upload/upload.html',
controller: 'MixUploadCtrl'
}
}
})
.state('root.me', {
url: 'me',
resolve: {
user: function ($rootScope, UserModel) {
return UserModel.find($rootScope.currentUser.slug);
}
},
views: {
'content@': {
templateUrl: 'app/views/user/item/userItem.html',
controller: 'UserItemCtrl'
}
}
})
.state('root.me.edit', {
url: '/edit',
resolve: {
user: function ($rootScope, UserModel) {
return UserModel.findAll({slug: $rootScope.currentUser.slug});
}
},
views: {
'content@': {
templateUrl: 'app/views/user/edit/userEdit.html',
controller: 'UserEditCtrl'
}
}
})
.state('root.user', {
url: ':user',
resolve: {
user: function ($stateParams, UserModel) {
return UserModel.find($stateParams.user);
}
},
views: {
'content@': {
templateUrl: 'app/views/user/item/userItem.html',
controller: 'UserItemCtrl'
}
}
})
.state('root.user.mix', {
url: '/:mix',
resolve: {
mix: function ($stateParams, MixModel) {
return MixModel.find($stateParams.mix);
},
comments: function ($stateParams, CommentModel) {
return CommentModel.findAll({
mix__slug: $stateParams.mix,
ordering: '-id'
});
}
},
views: {
'content@': {
templateUrl: 'app/views/mixes/item/mix.html',
controller: 'MixCtrl'
}
}
})
.state('root.user.mix.edit', {
url: '/edit',
resolve: {
mix: function ($stateParams, MixModel) {
var ret = MixModel.find($stateParams.mix);
return ret;
}
},
views: {
'content@': {
templateUrl: 'app/views/mixes/upload/upload.html',
controller: 'MixUploadCtrl'
}
}
});
});

View File

@@ -1,28 +0,0 @@
'use strict';
describe('Controller: MainCtrl', function () {
// load the controller's module
beforeEach(module('dssWebApp'));
var HomeCtrl,
scope,
$httpBackend;
// Initialize the controller and a mock scope
beforeEach(inject(function (_$httpBackend_, $controller, $rootScope) {
$httpBackend = _$httpBackend_;
$httpBackend.expectGET('/api/things')
.respond(['HTML5 Boilerplate', 'AngularJS', 'Karma', 'Express']);
scope = $rootScope.$new();
HomeCtrl = $controller('HomeCtrl', {
$scope: scope
});
}));
it('should attach a list of things to the scope', function () {
$httpBackend.flush();
expect(scope.awesomeThings.length).toBe(4);
});
});

View File

@@ -1,28 +0,0 @@
'use strict';
angular.module('dssWebApp')
.config(function ($stateProvider) {
$stateProvider
.state('root.home', {
url: '/',
controller: function ($scope) {
$scope.$watch('currentUser', function () {
$state.reload();
});
},
resolve: {
mixes: function (MixModel) {
return MixModel.findAll({
waveform_generated: "True",
is_featured: "True"
});
}
},
views: {
'content@': {
templateUrl: 'app/views/home/home.html',
controller: 'HomeCtrl'
}
}
});
});

View File

@@ -1,33 +0,0 @@
'use strict';
angular.module('dssWebApp')
.config(function ($stateProvider) {
$stateProvider
.state('root.me', {
url: '/me',
resolve: {
user: function ($rootScope, UserModel) {
return UserModel.find($rootScope.currentUser.slug);
}
},
views: {
'content@': {
templateUrl: 'app/views/users/item/userItem.html',
controller: 'UserItemCtrl'
}
}
}).state('root.me.edit', {
url: '/edit',
resolve: {
user: function ($rootScope, UserModel) {
return UserModel.findAll({slug: $rootScope.currentUser.slug});
}
},
views: {
'content@': {
templateUrl: 'app/views/users/edit/userEdit.html',
controller: 'UserEditCtrl'
}
}
});
});

View File

@@ -1,4 +1,4 @@
'use strict'
'use strict';
angular.module('dssWebApp')
.controller('MixCtrl', function ($scope, mix, comments) {

View File

@@ -1,26 +0,0 @@
'use strict'
angular.module('dssWebApp')
.config(['$stateProvider', function ($stateProvider) {
$stateProvider
.state('root.mixes.mix', {
url: '/:slug',
resolve: {
mix: function ($stateParams, MixModel) {
return MixModel.find($stateParams.slug);
},
comments: function ($stateParams, CommentModel) {
return CommentModel.findAll({
mix__slug: $stateParams.slug,
ordering: '-id'
});
}
},
views: {
'content@': {
templateUrl: 'app/views/mixes/item/mix.html',
controller: 'MixCtrl'
}
}
})
}]);

View File

@@ -1,7 +1,7 @@
<div class="box">
<div class="box-title">
<a ui-sref="root.mixes.mix({slug: mix.slug})"><h3><i class="fa fa-headphones"></i>{{mix.title}}</h3></a>
<div class="actions" ng-show="$root.currentUser">
<a ui-sref="root.user.mix({user: mix.user.slug, mix: mix.slug})"><h3><i class="fa fa-headphones"></i>{{mix.title}}</h3></a>
<div class="actions">
<a ng-click="editMix(mix)" class="btn btn-mini content-refresh" data-toggle="tooltip" data-title="Edit">
<i class="fa fa-pencil"></i>
</a>
@@ -24,7 +24,7 @@
<h4></h4>
</div>
<div class="row">
<aside>By <a ui-sref="root.users.user({slug: mix.user.slug})">{{mix.user.display_name}}</a></aside>
<aside>By <a ui-sref="root.user({user: mix.user.slug})">{{mix.user.display_name}}</a></aside>
</div>
<div class="row">
<div class="btn-group mix-tools" role="group" aria-label="Default button group">

View File

@@ -1,23 +0,0 @@
'use strict';
angular.module('dssWebApp')
.config(['$stateProvider', function ($stateProvider) {
$stateProvider
.state('root.mixes', {
url: '/mix',
resolve: {
mixes: function (MixModel) {
return MixModel.findAll({
waveform_generated: "True",
is_featured: "True"
});
}
},
views: {
'content@': {
templateUrl: 'app/views/mixes/mixes.html',
controller: 'MixesCtrl'
}
}
});
}]);

View File

@@ -38,7 +38,7 @@ angular.module('dssWebApp')
if ($scope.detailsEntered && $scope.uploadState >= uploadStates.AUDIO_SENT &&
$scope.processingState == processingStates.PROCESSED) {
MixModel.refresh($scope.mix.slug).then(function (m) {
$state.go('root.mixes.mix', {slug: m.slug});
$state.go('root.user.mix', {user: m.user.slug, slug: m.slug});
});
}
}

View File

@@ -1,34 +0,0 @@
'use strict';
angular.module('dssWebApp')
.config(['$stateProvider', function ($stateProvider) {
$stateProvider
.state('root.upload', {
url: '/upload',
resolve: {
mix: function () {
return null;
}
},
views: {
'content@': {
templateUrl: 'app/views/mixes/upload/upload.html',
controller: 'MixUploadCtrl'
}
}
}).state('root.edit', {
url: '/edit/:slug',
resolve: {
mix: function ($stateParams, MixModel) {
var ret = MixModel.find($stateParams.slug);
return ret;
}
},
views: {
'content@': {
templateUrl: 'app/views/mixes/upload/upload.html',
controller: 'MixUploadCtrl'
}
}
});
}]);

View File

@@ -1,15 +0,0 @@
'use strict';
angular.module('dssWebApp')
.config(function ($stateProvider) {
$stateProvider
.state('root.radio', {
url: '/radio',
views: {
'content@': {
templateUrl: 'app/views/radio/radio.html',
controller: 'RadioAdminCtrl'
}
}
});
});

View File

@@ -1,19 +0,0 @@
'use strict';
angular.module('dssWebApp')
.config(function ($stateProvider) {
$stateProvider
.state('root.schedule', {
url: '/schedule',
views: {
'content@': {
templateUrl: 'app/views/schedule/schedule.html',
controller: 'ScheduleCtrl'
}
}, resolve: {
shows: function (ShowModel) {
return ShowModel.findAll({});
}
}
});
});

View File

@@ -16,7 +16,7 @@
</div>
</div>
<div class="box-content">
<a ui-sref="root.mixes.mix({slug: mix.slug})"><img ng-src="{{mix.mix_image}}"/>
<a ui-sref="root.user.mix({user: mix.user.slug, mix: mix.slug})"><img ng-src="{{mix.mix_image}}"/>
</a>
<h5>{{mix.title}}</h5>
</div>

View File

@@ -1,4 +1,4 @@
<a ui-sref="root.mixes.mix({slug: match.model.slug})">
<a ui-sref="root.user.mix({user: mix.user.slug, mix: mix.slug})">
<div class="widget">
<div class="widget-simple">
<div href="javascript:void(0)" class="widget-icon pull-left animation-fadeIn themed-background">

View File

@@ -0,0 +1,89 @@
<div class="col-md-6">
<div class="block">
<div class="block-title">
<h2><strong>My Details</strong></h2>
</div>
<form class="form-horizontal form-bordered">
<div class="fieldset">
<div class="form-group">
<div class="col-md-4">
<label class="control-label">Display Name</label>
</div>
<div class="col-md-8">
<input type="text" ng-model="vm.user.display_name" ng-blur="updateUser()" class="form-control"/>
</div>
</div>
<div ng-class="{'has-error': vm.slugError}" class="form-group">
<div class="col-md-4">
<label class="control-label">Profile Url</label>
</div>
<div class="col-md-8">
<div class="input-group">
<input type="text" ng-model="vm.tempSlug" ng-change="checkSlug()" ng-blur="saveSlug()" class="form-control"/><span class="input-group-addon"><i ng-class="{'fa-spin': vm.slugChanging || vm.slugError, 'text-danger': vm.slugError}" class="fa fa-asterisk"></i></span>
</div><span ng-show="!vm.slugError" class="help-block">Your profile URL will be /users/{{vm.tempSlug}}</span><span ng-show="vm.slugError" class="help-block animation-slideDown">Slug must be unique</span>
</div>
</div>
<div class="form-group">
<div class="col-md-4">
<label class="control-label">Email Address</label>
</div>
<div class="col-md-8">
<input type="text" ng-model="vm.user.email" ng-blur="updateUser()" class="form-control"/>
</div>
</div>
</div>
</form>
</div>
<div class="block">
<div class="block-title">
<h2><i class="ace-icon fa fa-share green"></i><strong></strong> Sharing</h2>
</div>
<form class="form-horizontal form-bordered">
<div class="form-group">
<label class="col-md-2 control-label"><i class="fa fa-facebook"></i> Facebook</label>
<div class="col-md-10">
<label ng-repeat="item in sharing_options" ng-model="vm.user.activity_sharing_facebook" checkbox-bitfield="" ng-change="updateUser()" class="radio-inline">
<input type="checkbox" value="{{item.power}}"/> {{item.abbr}}
</label>
</div>
</div>
<div class="form-group">
<label class="col-md-2 control-label"><i class="fa fa-twitter"></i> Twitter</label>
<div class="col-md-10">
<label ng-repeat="item in sharing_options" ng-model="vm.user.activity_sharing_twitter" checkbox-bitfield="" ng-change="updateUser()" class="radio-inline">
<input type="checkbox" value="{{item.power}}"/> {{item.abbr}}
</label>
</div>
</div>
</form>
</div>
<div class="block">
<div class="block-title">
<h2><i class="fa fa-envelope"></i><strong></strong> Email Notifications</h2>
</div>
<form class="form-horizontal form-bordered">
<div class="form-group">
<label ng-repeat="item in sharing_options" ng-model="vm.user.email_notifications" checkbox-bitfield="" ng-change="updateUser()" class="radio-inline">
<input type="checkbox" value="{{item.power}}"/> {{item.abbr}}
</label>
</div>
</form>
</div>
</div>
<div class="col-md-6">
<div class="block">
<div class="block-title">
<div class="block-options pull-right"><a ng-click="updateUser()" class="btn btn-alt btn-sm btn-default"><i class="fa fa-save"></i></a></div>
<h2><strong>My Description</strong><small>This is experimental feedback appreciated </small></h2>
</div>
<form class="form-horizontal form-bordered">
<fieldset>
<div class="form-group">
<div class="col-xs-12">
<textarea dss-ckeditor="dss-ckeditor" on-change="updateDescription()" ng-model="vm.user.description" blur="updateUser()" ng-blur="updateUser()"></textarea>
</div>
</div>
</fieldset>
</form>
</div>
</div>

View File

@@ -34,7 +34,7 @@
</div>
<div class="box-content">
<div ng-repeat="follower in user.followers" class="col-xs-4 col-sm-3 col-lg-2 block-section">
<a ui-sref="root.users.user({slug: follower.slug})">
<a ui-sref="root.user({user: follower.slug})">
<img ng-src="{{follower.profile_image_small}}" alt="image" data-toggle="tooltip"
title="{{follower.display_name}}" class="img-circle user-profile-insert"/>
</a>

View File

@@ -4,7 +4,7 @@ angular.module('dssWebApp')
.controller('UserItemCtrl', function ($scope, UserModel, MixModel, user, logger) {
logger.logSuccess('UserItemCtrl', $scope);
$scope.user = user;
$scope.showLatest = function(){
$scope.showLatest = function () {
$scope.mixTitle = "Latest";
MixModel.findAll({
user__slug: user.slug,
@@ -15,7 +15,7 @@ angular.module('dssWebApp')
$scope.mixPage = 1;
});
};
$scope.showPopular = function(){
$scope.showPopular = function () {
$scope.mixTitle = "Popular";
MixModel.findAll({
user__slug: user.slug,

View File

@@ -1,6 +1,6 @@
'use strict';
angular.module('dssWebApp')
.controller('UsersCtrl', function ($scope, users) {
.controller('UserCtrl', function ($scope, users) {
$scope.users = users;
});

View File

@@ -1,7 +1,7 @@
<div class="col-sm-4 col-md-4" ng-repeat="user in users">
<div class="post">
<div class="post-img-content">
<a ui-sref="root.users.user({slug: user.slug})">
<a ui-sref="root.user({user: user.slug})">
<img class="userlist-profile-image" ng-src="{{user.profile_image_medium}}" class="img-responsive"/>
</a>
<br/>
@@ -24,10 +24,10 @@
<img ng-src="{{user.profile_image_header}}" alt="background"
class="widget-background animation-pulseSlow">
<h3 class="widget-content widget-content-image widget-content-light clearfix">
<a ui-sref="root.users.user({slug: user.slug})" class="pull-right">
<a ui-sref="root.user({user: user.slug})" class="pull-right">
<img ng-src="{{user.profile_image_medium}}" alt="avatar" class="widget-image img-circle">
</a>
<a ui-sref="root.users.user({slug: user.slug})"
<a ui-sref="root.user({user: user.slug})"
class="themed-color-autumn">{{user.display_name}}</a>
<br>
<small>{{user.title}}</small>

View File

@@ -1,86 +0,0 @@
.col-md-6
.block
.block-title
h2
strong My Details
form.form-horizontal.form-bordered
.fieldset
.form-group
.col-md-4
label.control-label Display Name
.col-md-8
input.form-control(type='text', ng-model="vm.user.display_name" ng-blur="updateUser()")
.form-group(ng-class="{'has-error': vm.slugError}")
.col-md-4
label.control-label Profile Url
.col-md-8
.input-group
input.form-control(type='text', ng-model="vm.tempSlug" ng-change="checkSlug()" ng-blur="saveSlug()")
span.input-group-addon
i.fa.fa-asterisk(
ng-class="{'fa-spin': vm.slugChanging || vm.slugError, 'text-danger': vm.slugError}"
)
span.help-block(ng-show='!vm.slugError') Your profile URL will be /users/{{vm.tempSlug}}
span.help-block.animation-slideDown(ng-show="vm.slugError") Slug must be unique
.form-group
.col-md-4
label.control-label Email Address
.col-md-8
input.form-control(type='text', ng-model="vm.user.email" ng-blur="updateUser()")
.block
.block-title
h2
i.ace-icon.fa.fa-share.green
strong
| Sharing
form.form-horizontal.form-bordered
.form-group
label.col-md-2.control-label
i.fa.fa-facebook
| Facebook
.col-md-10
label.radio-inline(ng-repeat='item in sharing_options', ng-model='vm.user.activity_sharing_facebook', checkbox-bitfield=''
ng-change="updateUser()")
input(type='checkbox', value='{{item.power}}')
| {{item.abbr}}
.form-group
label.col-md-2.control-label
i.fa.fa-twitter
| Twitter
.col-md-10
label.radio-inline(ng-repeat='item in sharing_options', ng-model='vm.user.activity_sharing_twitter', checkbox-bitfield=''
ng-change="updateUser()")
input(type='checkbox', value='{{item.power}}')
| {{item.abbr}}
.block
.block-title
h2
i.fa.fa-envelope
strong
| Email Notifications
form.form-horizontal.form-bordered
.form-group
label.radio-inline(ng-repeat='item in sharing_options', ng-model='vm.user.email_notifications', checkbox-bitfield=''
ng-change="updateUser()")
input(type='checkbox', value='{{item.power}}')
| {{item.abbr}}
.col-md-6
.block
.block-title
.block-options.pull-right
a.btn.btn-alt.btn-sm.btn-default(ng-click="updateUser()")
i.fa.fa-save
h2
strong My Description
small This is experimental feedback appreciated
form.form-horizontal.form-bordered
fieldset
.form-group
.col-xs-12
textarea(
dss-ckeditor
on-change='updateDescription()'
ng-model='vm.user.description'
blur='updateUser()'
ng-blur='updateUser()'
)

View File

@@ -1,20 +0,0 @@
'use strict';
angular.module('dssWebApp')
.config(function ($stateProvider) {
$stateProvider
.state('root.users.edit', {
url: '/edit',
resolve: {
user: function ($stateParams, $rootScope, UserModel) {
return UserModel.findAll({slug: $rootScope.currentUser.slug});
}
},
views: {
'content@': {
templateUrl: 'app/views/users/edit/userEdit.html',
controller: 'UserEditCtrl'
}
}
});
});

View File

@@ -1,20 +0,0 @@
'use strict';
angular.module('dssWebApp')
.config(function ($stateProvider) {
$stateProvider
.state('root.users.user', {
url: '/:slug',
resolve: {
user: function ($stateParams, UserModel) {
return UserModel.find($stateParams.slug);
}
},
views: {
'content@': {
templateUrl: 'app/views/users/item/userItem.html',
controller: 'UserItemCtrl'
}
}
});
});

View File

@@ -1,23 +0,0 @@
/*
'use strict';
describe('Controller: UsersCtrl', function () {
// load the controller's module
beforeEach(module('dssWebApp'));
var UsersCtrl, scope;
// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
UsersCtrl = $controller('UsersCtrl', {
$scope: scope
});
}));
it('should ...', function () {
expect(1).toEqual(1);
});
});
*/

View File

@@ -1,22 +0,0 @@
'use strict';
angular.module('dssWebApp')
.config(function ($stateProvider) {
$stateProvider
.state('root.users', {
url: '/users',
templateUrl: 'app/users/users.html',
controller: 'UsersCtrl',
resolve: {
users: function (UserModel) {
return UserModel.findAll();
}
},
views: {
'content@': {
templateUrl: 'app/views/users/users.html',
controller: 'UsersCtrl'
}
}
});
});

View File

@@ -1,5 +1,9 @@
@charset "UTF-8";
@import url(http://fonts.googleapis.com/css?family=Open+Sans:400,300);
<<<<<<< HEAD
=======
>>>>>>> develop
.input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child > .btn, .input-group-btn:first-child > .dropdown-toggle, .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {
-moz-border-radius: 0;
-webkit-border-radius: 0;

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -143,7 +143,6 @@
<script src="app/components/messagepopup/messagepopup.directive.js"></script>
<script src="app/components/navbar/navbar.controller.js"></script>
<script src="app/components/pageheader/pageheader.controller.js"></script>
<script src="app/components/sidebar/sidebar.controller.js"></script>
<script src="app/components/socket/socket.service.js"></script>
<script src="app/constants/audio.js"></script>
<script src="app/constants/backends.js"></script>
@@ -184,7 +183,7 @@
<script src="app/models/user.js"></script>
<script src="app/providers/logger/logger.service.js"></script>
<script src="app/providers/server.settings.js"></script>
<script src="app/root.js"></script>
<script src="app/routes.js"></script>
<script src="app/services/audio/audio.events.js"></script>
<script src="app/services/audio/audio.service.js"></script>
<script src="app/services/auth/auth.interceptor.js"></script>
@@ -197,25 +196,15 @@
<script src="app/services/user/notification.service.js"></script>
<script src="app/services/user/user.roles.js"></script>
<script src="app/views/home/home.controller.js"></script>
<script src="app/views/home/home.js"></script>
<script src="app/views/me/edit.js"></script>
<script src="app/views/mixes/item/mix.controller.js"></script>
<script src="app/views/mixes/item/mix.js"></script>
<script src="app/views/mixes/mixes.controller.js"></script>
<script src="app/views/mixes/mixes.directive.js"></script>
<script src="app/views/mixes/mixes.routes.js"></script>
<script src="app/views/mixes/upload/upload.controller.js"></script>
<script src="app/views/mixes/upload/upload.js"></script>
<script src="app/views/radio/radio.controller.js"></script>
<script src="app/views/radio/radio.routes.js"></script>
<script src="app/views/schedule/schedule.controller.js"></script>
<script src="app/views/schedule/schedule.routes.js"></script>
<script src="app/views/users/edit/userEdit.js"></script>
<script src="app/views/users/edit/userEditCtrl.js"></script>
<script src="app/views/users/item/userItem.js"></script>
<script src="app/views/users/item/userItemCtrl.js"></script>
<script src="app/views/users/users.controller.js"></script>
<script src="app/views/users/users.js"></script>
<script src="app/views/user/edit/userEditCtrl.js"></script>
<script src="app/views/user/item/userItemCtrl.js"></script>
<script src="app/views/user/user.controller.js"></script>
<!-- endinjector -->
<!-- endbuild -->