Remove front, want to work on it separately

This commit is contained in:
KimLS 2017-01-25 16:45:28 -08:00
parent ae78b00a6b
commit a8699eb40c
25 changed files with 0 additions and 719 deletions

View File

@ -1,49 +0,0 @@
# Logs
logs
*.log
npm-debug.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules
jspm_packages
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
dist

View File

@ -1,3 +0,0 @@
{
"api_url": "http://localhost:9080"
}

View File

@ -1,211 +0,0 @@
'use strict';
var del = require('del');
var fs = require('fs');
var browserify = require('browserify');
var gulp = require('gulp');
var source = require('vinyl-source-stream');
var buffer = require('vinyl-buffer');
var uglify = require('gulp-uglify');
var sourcemaps = require('gulp-sourcemaps');
var gutil = require('gulp-util');
var concat = require('gulp-concat');
var connect = require('gulp-connect');
var templateCache = require('gulp-angular-templatecache');
var minifyCSS = require('gulp-cssnano');
var minifyHTML = require('gulp-htmlmin');
var sass = require('gulp-sass');
var gulpsync = require('gulp-sync')(gulp);
gulp.task('clean:css', function() {
return del([
'dist/css/**/*'
]);
});
gulp.task('clean:javascript', function() {
return del([
'dist/js/**/*'
]);
});
gulp.task('clean', ['clean:css', 'clean:javascript']);
gulp.task('app:javascript:prod', function () {
var b = browserify({
entries: 'src/index.js',
debug: false
});
return b.transform('babelify', {presets: ["es2015"]})
.transform('brfs')
.bundle()
.pipe(source('bundle.js'))
.pipe(buffer())
.pipe(sourcemaps.init({loadMaps: true}))
.pipe(uglify())
.on('error', gutil.log)
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest('./dist/js/'))
.pipe(connect.reload());
});
gulp.task('app:javascript:dev', function () {
var b = browserify({
entries: 'src/index.js',
debug: true
});
return b.transform('babelify', {presets: ["es2015"]})
.transform('brfs')
.bundle()
.pipe(source('bundle.js'))
.pipe(buffer())
.pipe(sourcemaps.init({loadMaps: true}))
.on('error', gutil.log)
.pipe(sourcemaps.write('./'))
.pipe(gulp.dest('./dist/js/'))
.pipe(connect.reload());
});
gulp.task('javascript:dev', ['app:javascript:dev']);
gulp.task('javascript:prod', ['app:javascript:prod']);
var vendor_css = [
'node_modules/angular-material/angular-material.min.css',
'node_modules/angular-loading-bar/build/loading-bar.min.css',
'node_modules/mdi/css/materialdesignicons.min.css',
'node_modules/datatables.net-dt/css/jquery.dataTables.css',
'node_modules/angular-datatables/dist/css/angular-datatables.min.css'
];
gulp.task('vendor:css:prod', function() {
return gulp.src(vendor_css)
.pipe(minifyCSS())
.pipe(concat('vendor.css'))
.pipe(gulp.dest('dist/css'))
.pipe(connect.reload());
});
gulp.task('vendor:css:dev', function() {
return gulp.src(vendor_css)
.pipe(concat('vendor.css'))
.pipe(gulp.dest('dist/css'))
.pipe(connect.reload());
});
var app_sass = [
'src/**/*.scss',
];
gulp.task('app:sass:prod', function() {
return gulp.src(app_sass)
.pipe(sass().on('error', sass.logError))
.pipe(minifyCSS())
.pipe(concat('app.css'))
.pipe(gulp.dest('dist/css'))
.pipe(connect.reload());
});
gulp.task('app:sass:dev', function() {
return gulp.src(app_sass)
.pipe(sass().on('error', sass.logError))
.pipe(concat('app.css'))
.pipe(gulp.dest('dist/css'))
.pipe(connect.reload());
});
gulp.task('css:prod', ['vendor:css:prod', 'app:sass:prod']);
gulp.task('css:dev', ['vendor:css:dev', 'app:sass:dev']);
var assets_images = [
'src/assets/images/**/*',
];
var assets_media = [
'src/assets/media/*',
];
gulp.task('assets:images', function() {
return gulp.src(assets_images)
.pipe(gulp.dest('dist/images'))
.pipe(connect.reload());
});
gulp.task('assets:media', function() {
return gulp.src(assets_media)
.pipe(gulp.dest('dist/media'))
.pipe(connect.reload());
});
var assets_fonts = [
'node_modules/mdi/fonts/*'
];
gulp.task('assets:fonts', function() {
return gulp.src(assets_fonts)
.pipe(gulp.dest('dist/fonts'));
});
gulp.task('assets', ['assets:images', 'assets:media', 'assets:fonts']);
var app_html = [
'src/**/*.html'
];
gulp.task('app:html:prod', function() {
return gulp.src(app_html)
.pipe(minifyHTML({collapseWhitespace: true, removeComments: true}))
.pipe(templateCache({standalone: true}))
.pipe(gulp.dest('dist/js'))
.pipe(connect.reload());
});
gulp.task('app:html:dev', function() {
return gulp.src(app_html)
.pipe(templateCache({standalone: true}))
.pipe(gulp.dest('dist/js'))
.pipe(connect.reload());
});
var app_entry = [
'src/index.html'
];
gulp.task('app:entry:prod', function() {
return gulp.src(app_entry)
.pipe(minifyHTML({collapseWhitespace: true, removeComments: true}))
.pipe(gulp.dest('dist'))
.pipe(connect.reload());
});
gulp.task('app:entry:dev', function() {
return gulp.src(app_entry)
.pipe(gulp.dest('dist'))
.pipe(connect.reload());
});
gulp.task('build:prod', gulpsync.sync(['clean', 'javascript:prod', 'css:prod', 'app:html:prod', 'app:entry:prod', 'assets']));
gulp.task('build:dev', gulpsync.sync(['clean', 'javascript:dev', 'css:dev', 'app:html:dev', 'app:entry:dev', 'assets']));
gulp.task('build', ['build:prod']);
gulp.task('live_reload', function() {
connect.server({
livereload: true,
root: 'dist',
port: '8000'
});
});
gulp.task('watch', ['live_reload'], function() {
gulp.watch('src/**/*.js', ['app:javascript:dev']);
gulp.watch(vendor_css, ['vendor:css:dev']);
gulp.watch(app_sass, ['app:sass:dev']);
gulp.watch(assets_images, ['assets:images']);
gulp.watch(assets_media, ['assets:media']);
gulp.watch(assets_fonts, ['assets:fonts']);
gulp.watch(app_html, ['app:html:dev']);
gulp.watch(app_entry, ['app:entry:dev']);
});
gulp.task('serve', gulpsync.sync(['build:dev', 'watch']));

View File

@ -1,43 +0,0 @@
{
"name": "wi-front",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "MIT",
"devDependencies": {
"babel-preset-es2015": "^6.22.0",
"babelify": "^7.3.0",
"brfs": "^1.4.3",
"browserify": "^13.3.0",
"del": "^2.2.2",
"gulp": "^3.9.1",
"gulp-angular-templatecache": "^2.0.0",
"gulp-concat": "^2.6.1",
"gulp-connect": "^5.0.0",
"gulp-cssnano": "^2.1.2",
"gulp-htmlmin": "^3.0.0",
"gulp-sass": "^3.1.0",
"gulp-sourcemaps": "^2.4.0",
"gulp-sync": "^0.1.4",
"gulp-uglify": "^2.0.0",
"gulp-util": "^3.0.8",
"lodash": "^4.17.4",
"vinyl-buffer": "^1.0.0",
"vinyl-source-stream": "^1.1.0"
},
"dependencies": {
"angular": "^1.6.1",
"angular-animate": "^1.6.1",
"angular-aria": "^1.6.1",
"angular-datatables": "^0.6.0",
"angular-loading-bar": "^0.9.0",
"angular-material": "^1.1.1",
"angular-ui-router": "^0.4.2",
"mdi": "^1.8.36",
"ngstorage": "^0.3.11"
}
}

View File

@ -1 +0,0 @@
<ui-view layout-fill></ui-view>

View File

@ -1,15 +0,0 @@
(function() {
'use strict';
var app = angular.module('app');
app.component('appRoot', {
templateUrl: 'app/app.html',
controller: ['$state', function($state) {
var self = this;
this.$onInit = function () {
};
}]
});
})();

View File

@ -1,6 +0,0 @@
(function() {
'use strict';
require('./login/login.js');
require('./portal/portal.js');
})();

View File

@ -1,24 +0,0 @@
<md-content layout-fill layout="column" layout-align="start center">
<h2 class="login-title">Login</h2>
<form layout="column" class="md-whiteframe-4dp login-panel" ng-submit="$ctrl.doLogin()">
<md-input-container class="md-block">
<label>Username</label>
<input name="username" required ng-model="$ctrl.username" ng-disabled="$ctrl.loggingIn" aria-label="Username">
</md-input-container>
<md-input-container class="md-block">
<label>Password</label>
<input type="password" name="password" required ng-model="$ctrl.password" ng-disabled="$ctrl.loggingIn" aria-label="Password">
</md-input-container>
<div layout="row">
<md-checkbox ng-model="$ctrl.rememberMe" ng-disabled="$ctrl.loggingIn" aria-label="Remember Me">Remember Me</md-checkbox>
</div>
<span class="login-error-message" ng-show="$ctrl.error">
Unauthorized login.
</span>
<md-button type="submit" class="md-raised md-primary" ng-disabled="!$ctrl.canLogin()">Login</md-button>
</form>
</md-content>

View File

@ -1,52 +0,0 @@
(function() {
'use strict';
var app = angular.module('app');
app.component('login', {
templateUrl: 'app/components/login/login.html',
controller: ['$state', 'appConfig', 'loginState', '$http', function($state, appConfig, loginState, $http) {
var self = this;
self.username = '';
self.password = '';
self.rememberMe = false;
self.doLogin = doLogin;
self.canLogin = canLogin;
self.loggingIn = false;
self.error = false;
function doLogin() {
if(!canLogin()) {
return;
}
self.loggingIn = true;
self.error = false;
var data = { username: self.username, password: self.password };
$http.post(appConfig.config.api_url + '/api/token', data)
.then(function(response) {
self.loggingIn = false;
loginState.login(self.username, response.data, self.rememberMe);
}, function(response) {
self.loggingIn = false;
self.error = true;
});
}
function canLogin() {
if(self.username.length === 0 || self.password.length === 0 || self.loggingIn) {
return false;
}
return true;
}
self.$onInit = function () {
//If logged in just goto the next state
if(loginState.isLoggedIn()) {
$state.go(loginState.nextState, loginState.nextStateParams);
};
};
}]
});
})();

View File

@ -1,16 +0,0 @@
.login-panel
{
width: 400px;
padding: 28px;
}
.login-title
{
margin: 3em 0 3em 0;
}
.login-error-message
{
color: rgba(255, 40, 40, 200);
padding: 8px;
}

View File

@ -1,26 +0,0 @@
<md-content layout-fill>
<md-toolbar class="md-hue-2">
<div class="md-toolbar-tools">
<md-button class="md-icon-button" aria-label="menu">
<md-icon class="mdi mdi-menu mdi-24px"></md-icon>
</md-button>
<h2>
<span>EQEmu WI Portal</span>
</h2>
<span flex></span>
<md-menu md-offset="-20 -20">
<md-button class="md-icon-button" aria-label="More" ng-click="$ctrl.openMenu($mdOpenMenu, $event)">
<md-icon md-menu-origin class="mdi mdi-dots-vertical mdi-24px"></md-icon>
</md-button>
<md-menu-content width="4">
<md-menu-item>
<md-button ng-click="$ctrl.logout($event)">
<md-iconclass="mdi mdi-power mdi-24px" md-menu-align-target></md-icon>
Logout
</md-button>
</md-menu-item>
</md-menu-content>
</md-menu>
</div>
</md-toolbar>
</md-content>

View File

@ -1,39 +0,0 @@
(function() {
'use strict';
var app = angular.module('app');
app.component('portal', {
templateUrl: 'app/components/portal/portal.html',
controller: ['$state', '$mdDialog', 'loginState', function($state, $mdDialog, loginState) {
var self = this;
self.openMenu = openMenu;
self.logout = logout;
function openMenu($mdOpenMenu, ev) {
self.originatorEv = ev;
$mdOpenMenu(ev);
};
function logout(ev) {
var confirm = $mdDialog.confirm()
.title('Logout')
.textContent('Are you sure you wish to logout?')
.ariaLabel('Logout')
.targetEvent(ev)
.ok('Logout')
.cancel('Cancel');
$mdDialog.show(confirm).then(function() {
loginState.logout();
$state.go('login');
}, function() {
});
}
self.$onInit = function () {
};
}]
});
})();

View File

@ -1,24 +0,0 @@
(function(){
'use strict';
var app = angular.module('app');
app.factory('applyAuthIntercept', ['$injector', function($injector) {
return {
request: function(config) {
if(config.anonOnly) {
return config;
}
if(!config.headers) {
config.headers = { };
}
var loginState = $injector.get('loginState');
config.headers.Authorization = 'Bearer ' + loginState.token;
return config;
}
};
}]);
})();

View File

@ -1,25 +0,0 @@
(function(){
'use strict';
var app = angular.module('app');
app.factory('checkAuthIntercept', ['$q', '$injector', function($q, $injector) {
return {
responseError: function(response) {
if(response.status === 401) {
var $state = $injector.get('$state');
var loginState = $injector.get('loginState');
if($state.current.name !== 'login') {
loginState.nextState = $state.current.name;
loginState.nextStateParams = {};
loginState.logout();
$state.go('login');
}
}
return $q.reject(response);
}
};
}]);
})();

View File

@ -1,6 +0,0 @@
(function() {
'use strict';
require('./apply-auth.js');
require('./check-auth.js');
})();

View File

@ -1,21 +0,0 @@
(function() {
'use strict';
var app = angular.module('app');
app.config(['$stateProvider', '$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/login');
$stateProvider.state('login', {
url: '/login',
template: '<login></login>'
});
$stateProvider.state('portal', {
url: '/portal',
template: '<portal></portal>'
});
}
]);
})();

View File

@ -1,5 +0,0 @@
(function() {
'use strict';
require('./core.js');
})();

View File

@ -1,10 +0,0 @@
(function() {
'use strict';
var fs = require('fs');
var app = angular.module('app');
app.service('appConfig', function() {
this.config = JSON.parse(fs.readFileSync(__dirname + '/../../../config.json', 'utf8'));
});
})();

View File

@ -1,6 +0,0 @@
(function() {
'use strict';
require('./config.js');
require('./login.js');
})();

View File

@ -1,78 +0,0 @@
(function() {
'use strict';
var app = angular.module('app');
app.service('loginState', ['$rootScope', '$http', '$httpParamSerializer', '$state', '$localStorage', '$sessionStorage',
function($rootScope, $http, $httpParamSerializer, $state, $localStorage, $sessionStorage) {
var self = this;
self.isLoggedIn = isLoggedIn;
self.logout = logout;
self.login = login;
self.nextState = 'portal';
self.nextStateParams = { };
self.token = '';
function isLoggedIn() {
var storage_bucket = null;
var token = null;
if($localStorage.token) {
storage_bucket = $localStorage;
token = $localStorage.token;
} else if($sessionStorage.token) {
storage_bucket = $sessionStorage;
token = $sessionStorage.token;
}
if(token) {
var expires = storage_bucket.expires;
var username = storage_bucket.username;
var expire_date = new Date(expires);
var current_date = new Date();
if(current_date > expire_date) {
self.logout();
} else {
self.token = token;
self.expires = expires;
self.username = username;
return true;
}
}
return false;
}
function logout() {
delete $localStorage.token;
delete $localStorage.expires;
delete $localStorage.username;
delete $sessionStorage.token;
delete $sessionStorage.expires;
delete $sessionStorage.username;
self.wasLoggedInAs = self.username;
self.username = null;
self.token = null;
self.expires = null;
}
function login(username, loginObj, rememberMe) {
self.username = username;
self.token = loginObj.token;
self.expires = loginObj.expires;
if(rememberMe) {
$localStorage.username = self.username;
$localStorage.token = self.token;
$localStorage.expires = self.expires;
} else {
$sessionStorage.username = self.username;
$sessionStorage.token = self.token;
$sessionStorage.expires = self.expires;
}
$state.go(self.nextState, self.nextStateParams);
}
}]);
})();

View File

@ -1,19 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="description" content="Web portal for EQEmu WI Front">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>EQEmu WI Front</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,600,700">
<link rel="stylesheet" href="css/vendor.css">
<link rel="stylesheet" href="css/app.css">
</head>
<body>
<app-root>Loading...</app-root>
<script type="text/javascript" src="js/bundle.js"></script>
<script type="text/javascript" src="js/templates.js"></script>
</body>
</html>

View File

@ -1,40 +0,0 @@
'use strict';
var $ = global.jQuery = require('jquery');
require('datatables.net')(jQuery);
var angular = require('angular');
require('angular-material');
require('angular-ui-router');
require('angular-loading-bar');
require('angular-animate');
require('ngstorage');
require('angular-datatables');
var app = angular.module('app', ['ngMaterial', 'ui.router', 'angular-loading-bar', 'ngAnimate' ,'ngStorage', 'templates', 'datatables']);
app.config(['$sceDelegateProvider', 'cfpLoadingBarProvider', '$animateProvider', '$compileProvider', '$localStorageProvider', '$sessionStorageProvider', '$httpProvider',
function($sceDelegateProvider, cfpLoadingBarProvider, $animateProvider, $compileProvider, $localStorageProvider, $sessionStorageProvider, $httpProvider) {
$sceDelegateProvider.resourceUrlWhitelist([
'self'
]);
$animateProvider.classNameFilter(/^((?!(fa-spinner|fa-cog|fa-refresh|fa-circle-o-notch)).)*$/);
$compileProvider.preAssignBindingsEnabled(true);
$localStorageProvider.setKeyPrefix('eqemu_wi_');
$sessionStorageProvider.setKeyPrefix('eqemu_wi_');
$httpProvider.interceptors.push('applyAuthIntercept');
$httpProvider.interceptors.push('checkAuthIntercept');
}]);
angular.element(function() {
angular.bootstrap(document, ['app']);
});
require('./app/app.js');
require('./app/services');
require('./app/routes');
require('./app/components');
require('./app/interceptors');