mirror of https://github.com/akveo/blur-admin
adding auth + main module
parent
59c2f1e907
commit
627ff12d16
|
@ -56,7 +56,8 @@
|
||||||
"ng-js-tree": "~0.0.7",
|
"ng-js-tree": "~0.0.7",
|
||||||
"angular-ui-select": "^0.19.6",
|
"angular-ui-select": "^0.19.6",
|
||||||
"angular-upload": "^1.0.12",
|
"angular-upload": "^1.0.12",
|
||||||
"ng-tags-input": "^3.2.0"
|
"ng-tags-input": "^3.2.0",
|
||||||
|
"lodash": "^4.17.4"
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"angular": "~1.5.9",
|
"angular": "~1.5.9",
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,39 @@
|
||||||
|
/**
|
||||||
|
* @author ayoub
|
||||||
|
*/
|
||||||
|
(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular.module('BlurAdmin.pages.authSignIn')
|
||||||
|
.factory('AuthService',AuthService);
|
||||||
|
|
||||||
|
/** @ngInject */
|
||||||
|
function AuthService($http, $q) {
|
||||||
|
var apiBaseUrl = "http://localhost:9000"
|
||||||
|
var endpoint = apiBaseUrl + "/auth";
|
||||||
|
|
||||||
|
function login(params) {
|
||||||
|
params = params || {};
|
||||||
|
|
||||||
|
var access_token = { "access_token" : params.access_token }
|
||||||
|
var auth = { headers : { 'Authorization': 'Basic ' + btoa(params.email + ":" + params.password)}}
|
||||||
|
|
||||||
|
var deferred = $q.defer();
|
||||||
|
$http.post(endpoint, access_token, auth)
|
||||||
|
.success(function(data) {
|
||||||
|
deferred.resolve(data);
|
||||||
|
}).error(function(msg, code) {
|
||||||
|
deferred.reject(msg);
|
||||||
|
});
|
||||||
|
|
||||||
|
return deferred.promise;
|
||||||
|
|
||||||
|
|
||||||
|
return $http.post(endpoint, access_token, auth)
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
login:login
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})();
|
|
@ -0,0 +1,35 @@
|
||||||
|
<div class="login" ng-controller="authSignInCtrl as signInVm">
|
||||||
|
<main class="auth-main">
|
||||||
|
<div class="auth-block">
|
||||||
|
<h1>Sign in to Blur Admin</h1>
|
||||||
|
<a ui-sref="authSignUp" class="auth-link">New to Blur Admin? Sign up!</a>
|
||||||
|
|
||||||
|
<form class="form-horizontal" ng-submit="signInVm.login()">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="inputEmail3" class="col-sm-2 control-label">Email</label>
|
||||||
|
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="email" ng-model="signInVm.email" class="form-control" id="inputEmail3" placeholder="Email">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="inputPassword3" class="col-sm-2 control-label">Password</label>
|
||||||
|
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="password" ng-model="signInVm.password" class="form-control" id="inputPassword3" placeholder="Password">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-sm-offset-2 col-sm-10">
|
||||||
|
<button type="submit" class="btn btn-default btn-auth">Sign in</button>
|
||||||
|
<a href class="forgot-pass">Forgot password?</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div class="error">{{vm.error}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
</div>
|
|
@ -0,0 +1,22 @@
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular.module('BlurAdmin.pages.authSignIn', [])
|
||||||
|
.config(routeConfig);
|
||||||
|
|
||||||
|
/** @ngInject */
|
||||||
|
function routeConfig($stateProvider) {
|
||||||
|
$stateProvider
|
||||||
|
.state('authSignIn', {
|
||||||
|
url: '/authSignIn',
|
||||||
|
templateUrl: 'app/pages/authSignIn/authSignIn.html',
|
||||||
|
title: 'My Page',
|
||||||
|
controller: 'authSignInCtrl',
|
||||||
|
sidebarMeta: {
|
||||||
|
order: 800,
|
||||||
|
},
|
||||||
|
authenticate: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
})();
|
|
@ -0,0 +1,49 @@
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular.module('BlurAdmin.pages.authSignIn')
|
||||||
|
.controller('authSignInCtrl', authSignInCtrl);
|
||||||
|
|
||||||
|
/** @ngInject */
|
||||||
|
function authSignInCtrl($scope, localStorage, $state, AuthService) {
|
||||||
|
var vm = this;
|
||||||
|
|
||||||
|
|
||||||
|
vm.login = login;
|
||||||
|
|
||||||
|
init();
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
localStorage.clear();
|
||||||
|
vm.error = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
function login() {
|
||||||
|
var userObject = {
|
||||||
|
email: vm.email,
|
||||||
|
password: vm.password
|
||||||
|
};
|
||||||
|
AuthService
|
||||||
|
.login(userObject)
|
||||||
|
.then(
|
||||||
|
function (data){
|
||||||
|
if (data.token && data.user) {
|
||||||
|
|
||||||
|
localStorage.setObject('user', data.user);
|
||||||
|
localStorage.setObject('token', data.token);
|
||||||
|
$state.go('main.dashboard');
|
||||||
|
}
|
||||||
|
console.log("AuthService loggedin",data)
|
||||||
|
},
|
||||||
|
function (error){
|
||||||
|
vm.error = "There were an error logging you in"
|
||||||
|
console.log("Error", error);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
})();
|
|
@ -0,0 +1,49 @@
|
||||||
|
<div class="login">
|
||||||
|
|
||||||
|
<main class="auth-main">
|
||||||
|
<div class="auth-block">
|
||||||
|
<h1>Sign up to Blur Admin</h1>
|
||||||
|
<a ui-sref="authSignIn" class="auth-link">Already have a Blur Admin account? Sign in!</a>
|
||||||
|
|
||||||
|
<form class="form-horizontal">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="inputName3" class="col-sm-2 control-label">Name</label>
|
||||||
|
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="text" class="form-control" id="inputName3" placeholder="Full Name">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="inputEmail3" class="col-sm-2 control-label">Email</label>
|
||||||
|
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="inputPassword3" class="col-sm-2 control-label">Password</label>
|
||||||
|
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="password" class="form-control" id="inputPassword3" placeholder="Password">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-sm-offset-2 col-sm-10">
|
||||||
|
<button type="submit" class="btn btn-default btn-auth">Sign up</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div class="auth-sep"><span><span>or Sign up with one click</span></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="al-share-auth">
|
||||||
|
<ul class="al-share clearfix">
|
||||||
|
<li><i class="socicon socicon-facebook" title="Share on Facebook"></i></li>
|
||||||
|
<li><i class="socicon socicon-twitter" title="Share on Twitter"></i></li>
|
||||||
|
<li><i class="socicon socicon-google" title="Share on Google Plus"></i></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
</div>
|
|
@ -0,0 +1,22 @@
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular.module('BlurAdmin.pages.authSignUp', [])
|
||||||
|
.config(routeConfig);
|
||||||
|
|
||||||
|
/** @ngInject */
|
||||||
|
function routeConfig($stateProvider) {
|
||||||
|
$stateProvider
|
||||||
|
.state('authSignUp', {
|
||||||
|
url: '/authSignUp',
|
||||||
|
templateUrl: 'app/pages/authSignUp/authSignUp.html',
|
||||||
|
title: 'My Page',
|
||||||
|
controller: 'authSignUpCtrl',
|
||||||
|
sidebarMeta: {
|
||||||
|
order: 800,
|
||||||
|
},
|
||||||
|
authenticate: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
})();
|
|
@ -0,0 +1,13 @@
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular.module('BlurAdmin.pages.authSignUp')
|
||||||
|
.controller('authSignUpCtrl', authSignUpCtrl);
|
||||||
|
|
||||||
|
/** @ngInject */
|
||||||
|
function authSignUpCtrl($scope) {
|
||||||
|
var vm = this;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
})();
|
|
@ -0,0 +1,13 @@
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular.module('BlurAdmin.pages.config', [])
|
||||||
|
.config(routeConfig);
|
||||||
|
|
||||||
|
/** @ngInject */
|
||||||
|
function routeConfig() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
})();
|
|
@ -0,0 +1,20 @@
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular.module('BlurAdmin.pages.config')
|
||||||
|
.run(stateChangeStart);
|
||||||
|
|
||||||
|
/** @ngInject */
|
||||||
|
function stateChangeStart($rootScope, $state, localStorage) {
|
||||||
|
$rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState, fromParams) {
|
||||||
|
var login = localStorage.getObject('user');
|
||||||
|
var token = localStorage.getObject('token');
|
||||||
|
if (toState.authenticate && (_.isEmpty(login) || _.isEmpty(token)) ) {
|
||||||
|
// User isn’t authenticated
|
||||||
|
$state.transitionTo("authSignIn");
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
})();
|
Binary file not shown.
|
@ -0,0 +1 @@
|
||||||
|
Dash
|
|
@ -0,0 +1,26 @@
|
||||||
|
/**
|
||||||
|
* @author v.lugovsky
|
||||||
|
* created on 16.12.2015
|
||||||
|
*/
|
||||||
|
(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular.module('BlurAdmin.pages.dashboard', [])
|
||||||
|
.config(routeConfig);
|
||||||
|
|
||||||
|
/** @ngInject */
|
||||||
|
function routeConfig($stateProvider) {
|
||||||
|
$stateProvider
|
||||||
|
.state('main.dashboard', {
|
||||||
|
url: '/dashboard',
|
||||||
|
templateUrl: 'app/pages/dashboard/dashboard.html',
|
||||||
|
title: 'Dashboard',
|
||||||
|
sidebarMeta: {
|
||||||
|
icon: 'ion-android-home',
|
||||||
|
order: 0,
|
||||||
|
},
|
||||||
|
authenticate: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
})();
|
|
@ -0,0 +1,31 @@
|
||||||
|
<div class="body-bg"></div>
|
||||||
|
<main ng-if="$pageFinishedLoading" ng-class="{ 'menu-collapsed': $baSidebarService.isMenuCollapsed() }">
|
||||||
|
|
||||||
|
<ba-sidebar></ba-sidebar>
|
||||||
|
<page-top></page-top>
|
||||||
|
|
||||||
|
<div class="al-main">
|
||||||
|
<div class="al-content">
|
||||||
|
<content-top></content-top>
|
||||||
|
<div ui-view autoscroll="true" autoscroll-body-top></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer class="al-footer clearfix">
|
||||||
|
<div class="al-footer-right">Created with <i class="ion-heart"></i></div>
|
||||||
|
<div class="al-footer-main clearfix">
|
||||||
|
<div class="al-copy">Blur Admin 2016</div>
|
||||||
|
<ul class="al-share clearfix">
|
||||||
|
<li><i class="socicon socicon-facebook"></i></li>
|
||||||
|
<li><i class="socicon socicon-twitter"></i></li>
|
||||||
|
<li><i class="socicon socicon-google"></i></li>
|
||||||
|
<li><i class="socicon socicon-github"></i></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<back-top></back-top>
|
||||||
|
</main>
|
||||||
|
<div id="preloader" ng-show="!$pageFinishedLoading">
|
||||||
|
<div></div>
|
||||||
|
</div>
|
|
@ -0,0 +1,24 @@
|
||||||
|
/**
|
||||||
|
* @author l.azevedo
|
||||||
|
* created on 29.07.2017
|
||||||
|
*/
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular.module('BlurAdmin.pages.main', [])
|
||||||
|
.config(routeConfig);
|
||||||
|
|
||||||
|
/** @ngInject */
|
||||||
|
function routeConfig($stateProvider) {
|
||||||
|
$stateProvider
|
||||||
|
.state('main', {
|
||||||
|
url: '/main',
|
||||||
|
templateUrl: 'app/pages/main/main.html',
|
||||||
|
redirectTo: 'main.dashboard',
|
||||||
|
authenticate: true
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
})();
|
|
@ -8,15 +8,24 @@
|
||||||
angular.module('BlurAdmin.pages', [
|
angular.module('BlurAdmin.pages', [
|
||||||
'ui.router',
|
'ui.router',
|
||||||
|
|
||||||
|
'BlurAdmin.pages.dashboard',
|
||||||
|
'BlurAdmin.pages.main',
|
||||||
'BlurAdmin.pages.surveys',
|
'BlurAdmin.pages.surveys',
|
||||||
'BlurAdmin.pages.teams',
|
'BlurAdmin.pages.teams',
|
||||||
'BlurAdmin.pages.viewer',
|
'BlurAdmin.pages.viewer',
|
||||||
])
|
'BlurAdmin.pages.authSignIn',
|
||||||
.config(routeConfig);
|
'BlurAdmin.pages.authSignUp',
|
||||||
|
'BlurAdmin.pages.services',
|
||||||
|
'BlurAdmin.pages.config',
|
||||||
|
//'BlurAdmin.pages.main',
|
||||||
|
]).config(routeConfig)
|
||||||
|
.factory('authInterceptor', authInterceptor);
|
||||||
|
|
||||||
/** @ngInject */
|
/** @ngInject */
|
||||||
function routeConfig($urlRouterProvider, baSidebarServiceProvider) {
|
function routeConfig($urlRouterProvider, baSidebarServiceProvider, $httpProvider) {
|
||||||
$urlRouterProvider.otherwise('/dashboard');
|
$urlRouterProvider.otherwise('/authSignIn');
|
||||||
|
|
||||||
|
$httpProvider.interceptors.push('authInterceptor');
|
||||||
|
|
||||||
baSidebarServiceProvider.addStaticItem({
|
baSidebarServiceProvider.addStaticItem({
|
||||||
title: 'Pages',
|
title: 'Pages',
|
||||||
|
@ -40,4 +49,44 @@
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function authInterceptor($rootScope, $q, localStorage) {
|
||||||
|
console.log('authInterceptor')
|
||||||
|
return {
|
||||||
|
request: function (config) {
|
||||||
|
config.headers = config.headers || {};
|
||||||
|
|
||||||
|
if (config.data !== undefined && config.url.indexOf('auth') != -1) {
|
||||||
|
config.data.access_token = 'AlAoWLue33D1sBrKNHOohXdvYNh2Je9i'; //TODO : get this from the config
|
||||||
|
}
|
||||||
|
else if (localStorage.getObject('token')) {
|
||||||
|
|
||||||
|
if (config.data === undefined) {
|
||||||
|
//Do nothing if data is not originally supplied from the calling method
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
config.data.access_token = localStorage.getObject('token');
|
||||||
|
console.log()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (config.method === 'GET') {
|
||||||
|
/*if (config.params === undefined) {
|
||||||
|
config.params = {};
|
||||||
|
}
|
||||||
|
config.params.test = localStorage.getObject('token');*/
|
||||||
|
}
|
||||||
|
//config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token;
|
||||||
|
}
|
||||||
|
return config;
|
||||||
|
},
|
||||||
|
responseError: function (rejection) {
|
||||||
|
if (rejection.status === 401) {
|
||||||
|
console.log("not authorised");
|
||||||
|
localStorage.clear();
|
||||||
|
}
|
||||||
|
return $q.reject(rejection);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
/**
|
||||||
|
* @author l.azevedo
|
||||||
|
* created on 29/06/2017
|
||||||
|
*/
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular.module('BlurAdmin.pages.services')
|
||||||
|
.service('localStorage', localStorage);
|
||||||
|
|
||||||
|
/** @ngInject */
|
||||||
|
function localStorage($window) {
|
||||||
|
var service = {
|
||||||
|
set: set,
|
||||||
|
get: get,
|
||||||
|
setObject: setObject,
|
||||||
|
getObject: getObject,
|
||||||
|
clear: clear
|
||||||
|
}
|
||||||
|
|
||||||
|
return service;
|
||||||
|
|
||||||
|
function set(key, value) {
|
||||||
|
if ($window.fakeLocalStorage) {
|
||||||
|
$window.fakeLocalStorage[key] = value;
|
||||||
|
} else {
|
||||||
|
$window.localStorage[key] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function get(key, defaultValue) {
|
||||||
|
return !$window.fakeLocalStorage ? $window.localStorage[key] || defaultValue : $window.fakeLocalStorage[key] || defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setObject(key, value) {
|
||||||
|
if ($window.fakeLocalStorage) {
|
||||||
|
$window.fakeLocalStorage[key] = angular.toJson(value);
|
||||||
|
} else {
|
||||||
|
$window.localStorage[key] = angular.toJson(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getObject(key) {
|
||||||
|
return !$window.fakeLocalStorage ? angular.fromJson($window.localStorage[key] || '{}') : angular.fromJson($window.fakeLocalStorage[key] || '{}');
|
||||||
|
}
|
||||||
|
|
||||||
|
function clear() {
|
||||||
|
if ($window.fakeLocalStorage) {
|
||||||
|
$window.fakeLocalStorage = {};
|
||||||
|
} else {
|
||||||
|
$window.localStorage.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})();
|
|
@ -0,0 +1,12 @@
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
angular.module('BlurAdmin.pages.services', [])
|
||||||
|
.config(routeConfig);
|
||||||
|
|
||||||
|
/** @ngInject */
|
||||||
|
function routeConfig() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
})();
|
|
@ -257,7 +257,7 @@
|
||||||
$scope.survey.list = $scope.lists.selected;
|
$scope.survey.list = $scope.lists.selected;
|
||||||
$scope.survey.status = "Sending";
|
$scope.survey.status = "Sending";
|
||||||
$log.info("sendSurvey",$scope.survey);
|
$log.info("sendSurvey",$scope.survey);
|
||||||
$state.transitionTo('surveys.list'/*, {id: item.id}*/);
|
$state.transitionTo('main.surveys.list'/*, {id: item.id}*/);
|
||||||
|
|
||||||
$scope.saveSurvey(true);
|
$scope.saveSurvey(true);
|
||||||
|
|
||||||
|
|
|
@ -23,12 +23,12 @@
|
||||||
|
|
||||||
function goToCreate() {
|
function goToCreate() {
|
||||||
$log.info("Go to create");
|
$log.info("Go to create");
|
||||||
$state.go('surveys.create');
|
$state.go('main.surveys.create');
|
||||||
}
|
}
|
||||||
|
|
||||||
function editSurvey(id){
|
function editSurvey(id){
|
||||||
$log.info("Edit");
|
$log.info("Edit");
|
||||||
$state.go('surveys.edit', {'survey_id': id})
|
$state.go('main.surveys.edit', {'survey_id': id})
|
||||||
};
|
};
|
||||||
|
|
||||||
function removeSurvey(id){
|
function removeSurvey(id){
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
/** @ngInject */
|
/** @ngInject */
|
||||||
function routeConfig($stateProvider) {
|
function routeConfig($stateProvider) {
|
||||||
$stateProvider
|
$stateProvider
|
||||||
.state('surveys', {
|
.state('main.surveys', {
|
||||||
url: '/surveys',
|
url: '/surveys',
|
||||||
template : '<ui-view autoscroll="true" autoscroll-body-top></ui-view>',
|
template : '<ui-view autoscroll="true" autoscroll-body-top></ui-view>',
|
||||||
title: 'Surveys',
|
title: 'Surveys',
|
||||||
|
@ -21,7 +21,7 @@
|
||||||
icon: 'ion-gear-a',
|
icon: 'ion-gear-a',
|
||||||
order: 1000,
|
order: 1000,
|
||||||
},
|
},
|
||||||
}).state('surveys.create', {
|
}).state('main.surveys.create', {
|
||||||
url: '/create',
|
url: '/create',
|
||||||
templateUrl: 'app/pages/surveys/create/create.html',
|
templateUrl: 'app/pages/surveys/create/create.html',
|
||||||
controller: "CreateTabCtrl",
|
controller: "CreateTabCtrl",
|
||||||
|
@ -29,12 +29,12 @@
|
||||||
sidebarMeta: {
|
sidebarMeta: {
|
||||||
order: 1000,
|
order: 1000,
|
||||||
},
|
},
|
||||||
}).state('surveys.edit', {
|
}).state('main.surveys.edit', {
|
||||||
url: '/edit/:survey_id',
|
url: '/edit/:survey_id',
|
||||||
templateUrl: 'app/pages/surveys/create/create.html',
|
templateUrl: 'app/pages/surveys/create/create.html',
|
||||||
controller: "CreateTabCtrl",
|
controller: "CreateTabCtrl",
|
||||||
title: 'Edit a survey'
|
title: 'Edit a survey'
|
||||||
}).state('surveys.list', {
|
}).state('main.surveys.list', {
|
||||||
url: '/list',
|
url: '/list',
|
||||||
templateUrl: 'app/pages/surveys/list/list.html',
|
templateUrl: 'app/pages/surveys/list/list.html',
|
||||||
controller: "list as vm",
|
controller: "list as vm",
|
||||||
|
|
|
@ -169,7 +169,7 @@
|
||||||
if (item && item.isChecked) {
|
if (item && item.isChecked) {
|
||||||
vm.activeList = item;
|
vm.activeList = item;
|
||||||
vm.errors.noList = false;
|
vm.errors.noList = false;
|
||||||
$state.transitionTo('teams.lists', {id: item.id}, {notify: false});
|
$state.transitionTo('main.teams.lists', {id: item.id}, {notify: false});
|
||||||
angular.forEach(vm.Lists, function(list){
|
angular.forEach(vm.Lists, function(list){
|
||||||
if(item.id != list.id)
|
if(item.id != list.id)
|
||||||
list.isChecked = false;
|
list.isChecked = false;
|
||||||
|
@ -201,7 +201,7 @@
|
||||||
vm.activeList = {};
|
vm.activeList = {};
|
||||||
vm.errors.noList = true;
|
vm.errors.noList = true;
|
||||||
vm.listMembers = [];
|
vm.listMembers = [];
|
||||||
$state.transitionTo('teams.lists', {notify: false});
|
$state.transitionTo('main.teams.lists', {notify: false});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
/** @ngInject */
|
/** @ngInject */
|
||||||
function routeConfig($stateProvider,$urlRouterProvider) {
|
function routeConfig($stateProvider,$urlRouterProvider) {
|
||||||
$stateProvider
|
$stateProvider
|
||||||
.state('teams.lists', {
|
.state('main.teams.lists', {
|
||||||
url: '/lists/:id',
|
url: '/lists/:id',
|
||||||
//abstract: true,
|
//abstract: true,
|
||||||
templateUrl: 'app/pages/teams/lists/lists.html',
|
templateUrl: 'app/pages/teams/lists/lists.html',
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
.create(vm.member)
|
.create(vm.member)
|
||||||
.then(function (data){
|
.then(function (data){
|
||||||
vm.member = {}
|
vm.member = {}
|
||||||
$state.go('teams.members');
|
$state.go('main.teams.members');
|
||||||
|
|
||||||
toastr.info('The member was created successfuly :)', 'Members', {
|
toastr.info('The member was created successfuly :)', 'Members', {
|
||||||
"autoDismiss": true,
|
"autoDismiss": true,
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<a href class="collapse-navigation-link ion-navicon"
|
<a href class="collapse-navigation-link ion-navicon"
|
||||||
ng-click="tabCtrl.navigationCollapsed=!tabCtrl.navigationCollapsed"></a>
|
ng-click="tabCtrl.navigationCollapsed=!tabCtrl.navigationCollapsed"></a>
|
||||||
</div>
|
</div>
|
||||||
<button ui-sref="teams.members.label({label : detailCtrl.label})" type="button" class="back-button btn btn-default btn-with-icon"><i
|
<button ui-sref="main.teams.members.label({label : detailCtrl.label})" type="button" class="back-button btn btn-default btn-with-icon"><i
|
||||||
class="ion-chevron-left"></i>Back
|
class="ion-chevron-left"></i>Back
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
<div class="labels-container">
|
<div class="labels-container">
|
||||||
<div ng-repeat="t in tabCtrl.tabs" ui-sref-active="active" class="label-item"
|
<div ng-repeat="t in tabCtrl.tabs" ui-sref-active="active" class="label-item"
|
||||||
ui-sref="teams.members.label({label: t.label})" ng-click="tabCtrl.selectTab(t.label)">
|
ui-sref="main.teams.members.label({label: t.label})" ng-click="tabCtrl.selectTab(t.label)">
|
||||||
<span class="tag label {{t.label}}">{{t.name}}</span>
|
<span class="tag label {{t.label}}">{{t.name}}</span>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
/** @ngInject */
|
/** @ngInject */
|
||||||
function routeConfig($stateProvider,$urlRouterProvider) {
|
function routeConfig($stateProvider,$urlRouterProvider) {
|
||||||
$stateProvider
|
$stateProvider
|
||||||
.state('teams.members', {
|
.state('main.teams.members', {
|
||||||
url: '/members',
|
url: '/members',
|
||||||
//abstract: true,
|
//abstract: true,
|
||||||
templateUrl: 'app/pages/teams/members/members.html',
|
templateUrl: 'app/pages/teams/members/members.html',
|
||||||
|
@ -21,13 +21,13 @@
|
||||||
sidebarMeta: {
|
sidebarMeta: {
|
||||||
order: 0,
|
order: 0,
|
||||||
},
|
},
|
||||||
}).state('teams.members.label', {
|
}).state('main.teams.members.label', {
|
||||||
url: '/:label',
|
url: '/:label',
|
||||||
templateUrl: 'app/pages/teams/members/membersListing/membersList.html',
|
templateUrl: 'app/pages/teams/members/membersListing/membersList.html',
|
||||||
title: 'Members',
|
title: 'Members',
|
||||||
controller: "MembersListCtrl",
|
controller: "MembersListCtrl",
|
||||||
controllerAs: "listCtrl"
|
controllerAs: "listCtrl"
|
||||||
}).state('teams.members.detail', {
|
}).state('main.teams.members.detail', {
|
||||||
url: '/:id',
|
url: '/:id',
|
||||||
templateUrl: 'app/pages/teams/members/detail/memberDetail.html',
|
templateUrl: 'app/pages/teams/members/detail/memberDetail.html',
|
||||||
title: 'Detail',
|
title: 'Detail',
|
||||||
|
|
|
@ -34,11 +34,11 @@
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="photo-td" ui-sref="teams.members.detail({id: m.id, label: listCtrl.label})">
|
<td class="photo-td" ui-sref="main.teams.members.detail({id: m.id, label: listCtrl.label})">
|
||||||
<img ng-src="{{m.id | profilePicture}}" class="little-human-picture">
|
<img ng-src="{{m.id | profilePicture}}" class="little-human-picture">
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td ui-sref="teams.members.detail({id: m.id, label: listCtrl.label})">
|
<td ui-sref="main.teams.members.detail({id: m.id, label: listCtrl.label})">
|
||||||
<div class="name-container">
|
<div class="name-container">
|
||||||
<div><span class="name">{{m.name}}</span></div>
|
<div><span class="name">{{m.name}}</span></div>
|
||||||
<div><span ng-repeat="l in m.labels" class="tag label label-primary {{l}}">{{l}}</span></div>
|
<div><span ng-repeat="l in m.labels" class="tag label label-primary {{l}}">{{l}}</span></div>
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
/** @ngInject */
|
/** @ngInject */
|
||||||
function routeConfig($stateProvider) {
|
function routeConfig($stateProvider) {
|
||||||
$stateProvider
|
$stateProvider
|
||||||
.state('teams', {
|
.state('main.teams', {
|
||||||
url: '/teams',
|
url: '/teams',
|
||||||
template : '<ui-view autoscroll="true" autoscroll-body-top></ui-view>',
|
template : '<ui-view autoscroll="true" autoscroll-body-top></ui-view>',
|
||||||
abstract: true,
|
abstract: true,
|
||||||
|
|
|
@ -73,7 +73,8 @@
|
||||||
return {
|
return {
|
||||||
name: s.name,
|
name: s.name,
|
||||||
title: s.title,
|
title: s.title,
|
||||||
level: (s.name.match(/\./g) || []).length,
|
//level: (s.name.match(/\./g) || []).length,
|
||||||
|
level: ((s.name.match(/\./g) || []).length - 1),
|
||||||
order: meta.order,
|
order: meta.order,
|
||||||
icon: meta.icon,
|
icon: meta.icon,
|
||||||
stateRef: s.name,
|
stateRef: s.name,
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en" ng-app="BlurAdmin">
|
<html lang="en" ng-app="BlurAdmin">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
@ -23,57 +24,29 @@
|
||||||
<!-- css files will be automatically insert here -->
|
<!-- css files will be automatically insert here -->
|
||||||
<!-- endinject -->
|
<!-- endinject -->
|
||||||
<!-- endbuild -->
|
<!-- endbuild -->
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div class="body-bg"></div>
|
<div ui-view autoscroll="true" autoscroll-body-top></div>
|
||||||
<main ng-if="$pageFinishedLoading" ng-class="{ 'menu-collapsed': $baSidebarService.isMenuCollapsed() }">
|
|
||||||
|
|
||||||
<ba-sidebar></ba-sidebar>
|
<!-- build:js(src) scripts/vendor.js -->
|
||||||
<page-top></page-top>
|
<!-- bower:js -->
|
||||||
|
<!-- run `gulp inject` to automatically populate bower script dependencies -->
|
||||||
|
<!-- endbower -->
|
||||||
|
<!-- endbuild -->
|
||||||
|
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
|
||||||
|
|
||||||
<div class="al-main">
|
<!-- build:js({.tmp/serve,.tmp/partials,src}) scripts/app.js -->
|
||||||
<div class="al-content">
|
<!-- inject:js -->
|
||||||
<content-top></content-top>
|
<!-- js files will be automatically insert here -->
|
||||||
<div ui-view autoscroll="true" autoscroll-body-top></div>
|
<!-- endinject -->
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<footer class="al-footer clearfix">
|
<!-- inject:partials -->
|
||||||
<div class="al-footer-right">Created with <i class="ion-heart"></i></div>
|
<!-- angular templates will be automatically converted in js and inserted here -->
|
||||||
<div class="al-footer-main clearfix">
|
<!-- endinject -->
|
||||||
<div class="al-copy">Blur Admin 2016</div>
|
<!-- endbuild -->
|
||||||
<ul class="al-share clearfix">
|
|
||||||
<li><i class="socicon socicon-facebook"></i></li>
|
|
||||||
<li><i class="socicon socicon-twitter"></i></li>
|
|
||||||
<li><i class="socicon socicon-google"></i></li>
|
|
||||||
<li><i class="socicon socicon-github"></i></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<back-top></back-top>
|
|
||||||
</main>
|
|
||||||
|
|
||||||
<div id="preloader" ng-show="!$pageFinishedLoading">
|
|
||||||
<div></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- build:js(src) scripts/vendor.js -->
|
|
||||||
<!-- bower:js -->
|
|
||||||
<!-- run `gulp inject` to automatically populate bower script dependencies -->
|
|
||||||
<!-- endbower -->
|
|
||||||
<!-- endbuild -->
|
|
||||||
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
|
|
||||||
|
|
||||||
<!-- build:js({.tmp/serve,.tmp/partials,src}) scripts/app.js -->
|
|
||||||
<!-- inject:js -->
|
|
||||||
<!-- js files will be automatically insert here -->
|
|
||||||
<!-- endinject -->
|
|
||||||
|
|
||||||
<!-- inject:partials -->
|
|
||||||
<!-- angular templates will be automatically converted in js and inserted here -->
|
|
||||||
<!-- endinject -->
|
|
||||||
<!-- endbuild -->
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
|
@ -3,7 +3,6 @@
|
||||||
@import "theme/_layout.scss";
|
@import "theme/_layout.scss";
|
||||||
@import 'theme/buttons.scss';
|
@import 'theme/buttons.scss';
|
||||||
@import 'app/form.scss';
|
@import 'app/form.scss';
|
||||||
|
|
||||||
html {
|
html {
|
||||||
min-height: 520px;
|
min-height: 520px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
@ -15,14 +14,17 @@ body {
|
||||||
}
|
}
|
||||||
|
|
||||||
$text-color: #ffffff;
|
$text-color: #ffffff;
|
||||||
|
.form-control,
|
||||||
.form-control, .form-control:focus {
|
.form-control:focus {
|
||||||
@include placeholderStyle($text-color, 0.9);
|
@include placeholderStyle($text-color, 0.9);
|
||||||
background-color: rgba(0, 0, 0, .4);
|
background-color: rgba(0, 0, 0, .4);
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
color: $text-color;
|
color: $text-color;
|
||||||
}
|
}
|
||||||
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {
|
|
||||||
|
.form-control[disabled],
|
||||||
|
.form-control[readonly],
|
||||||
|
fieldset[disabled] .form-control {
|
||||||
@include placeholderStyle($text-color, 0.6);
|
@include placeholderStyle($text-color, 0.6);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,12 +59,10 @@ $text-color: #ffffff;
|
||||||
color: $primary-dark;
|
color: $primary-dark;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.control-label {
|
.control-label {
|
||||||
padding-top: 11px;
|
padding-top: 11px;
|
||||||
color: $text-color;
|
color: $text-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form-group {
|
.form-group {
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
}
|
}
|
||||||
|
@ -105,18 +105,19 @@ a.forgot-pass {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
display: block;
|
display: block;
|
||||||
position: relative;
|
position: relative;
|
||||||
& > span {
|
&>span {
|
||||||
display: table-cell;
|
display: table-cell;
|
||||||
width: 30%;
|
width: 30%;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
padding: 0 24px;
|
padding: 0 24px;
|
||||||
color: $text-color;
|
color: $text-color;
|
||||||
& > span {
|
&>span {
|
||||||
margin-top: -12px;
|
margin-top: -12px;
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&:before, &:after {
|
&:before,
|
||||||
|
&:after {
|
||||||
border-top: solid 1px $text-color;
|
border-top: solid 1px $text-color;
|
||||||
content: "";
|
content: "";
|
||||||
height: 1px;
|
height: 1px;
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
@import 'theme/conf/mixins';
|
@import 'theme/conf/mixins';
|
||||||
@import 'theme/conf/colorScheme/mint';
|
@import 'theme/conf/colorScheme/mint';
|
||||||
@import 'theme/conf/variables';
|
@import 'theme/conf/variables';
|
||||||
|
@import 'theme/_login.scss';
|
||||||
|
|
|
@ -0,0 +1,141 @@
|
||||||
|
.login {
|
||||||
|
min-height: 520px;
|
||||||
|
@include main-background();
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
$text-color: #ffffff;
|
||||||
|
.login .form-control,
|
||||||
|
.login .form-control:focus {
|
||||||
|
@include placeholderStyle($text-color, 0.9);
|
||||||
|
background-color: rgba(0, 0, 0, .4);
|
||||||
|
border-radius: 5px;
|
||||||
|
color: $text-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login .form-control[disabled],
|
||||||
|
.login .form-control[readonly],
|
||||||
|
fieldset[disabled] .form-control {
|
||||||
|
@include placeholderStyle($text-color, 0.6);
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-main {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login .auth-block {
|
||||||
|
width: 540px;
|
||||||
|
margin: 150px auto;
|
||||||
|
border-radius: 5px;
|
||||||
|
@include bg-translucent-dark(0.55);
|
||||||
|
color: #fff;
|
||||||
|
padding: 32px;
|
||||||
|
h1 {
|
||||||
|
font-weight: $font-light;
|
||||||
|
margin-bottom: 28px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
outline: none;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
color: $primary;
|
||||||
|
&:hover {
|
||||||
|
color: $primary-dark;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.control-label {
|
||||||
|
padding-top: 11px;
|
||||||
|
color: $text-color;
|
||||||
|
}
|
||||||
|
.form-group {
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.login .auth-input {
|
||||||
|
width: 300px;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
input {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
border: none;
|
||||||
|
font-size: 16px;
|
||||||
|
padding: 4px 10px;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.login a.forgot-pass {
|
||||||
|
display: block;
|
||||||
|
text-align: right;
|
||||||
|
margin-bottom: -20px;
|
||||||
|
float: right;
|
||||||
|
z-index: 2;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login .auth-link {
|
||||||
|
display: block;
|
||||||
|
font-size: 16px;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 33px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login .auth-sep {
|
||||||
|
margin-top: 36px;
|
||||||
|
margin-bottom: 24px;
|
||||||
|
line-height: 20px;
|
||||||
|
font-size: 16px;
|
||||||
|
text-align: center;
|
||||||
|
display: block;
|
||||||
|
position: relative;
|
||||||
|
&>span {
|
||||||
|
display: table-cell;
|
||||||
|
width: 30%;
|
||||||
|
white-space: nowrap;
|
||||||
|
padding: 0 24px;
|
||||||
|
color: $text-color;
|
||||||
|
&>span {
|
||||||
|
margin-top: -12px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:before,
|
||||||
|
&:after {
|
||||||
|
border-top: solid 1px $text-color;
|
||||||
|
content: "";
|
||||||
|
height: 1px;
|
||||||
|
width: 35%;
|
||||||
|
display: table-cell;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.login .al-share-auth {
|
||||||
|
text-align: center;
|
||||||
|
.al-share {
|
||||||
|
float: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
display: inline-block;
|
||||||
|
li {
|
||||||
|
margin-left: 24px;
|
||||||
|
&:first-child {
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
i {
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.login .btn-auth {
|
||||||
|
color: #ffffff!important;
|
||||||
|
}
|
Loading…
Reference in New Issue