diff --git a/bower.json b/bower.json
new file mode 100644
index 0000000..b631642
--- /dev/null
+++ b/bower.json
@@ -0,0 +1,33 @@
+{
+ "name": "imigrationcrm-ui",
+ "description": "Smart-Office",
+ "homepage": "https://github.com/micrum/angular-material-admin",
+ "license": "MIT",
+ "version": "1.2.0",
+ "dependencies": {
+ "AngularJS-Toaster": "angularjs-toaster#~1.2.0",
+ "angular": "1.4.9",
+ "angular-animate": "~1.4.9",
+ "angular-cookies": "~1.4.9",
+ "angular-material": "1.0.0",
+ "angular-material-data-table": "~0.9.14",
+ "angular-messages": "~1.5.2",
+ "angular-nvd3": "1.0.0-rc.2",
+ "angular-resource": "~1.5.0",
+ "angular-sanitize": "~1.4.9",
+ "angular-touch": "~1.4.9",
+ "angular-ui-router": "~0.2.17",
+ "components-font-awesome": "~4.5.0",
+ "jquery": "~2.1.1",
+ "angular-chart.js": "^1.0.3",
+ "alasql": "0.2.7",
+ "angular-web-notification": "^1.2.7",
+ "angular-live-set": "*"
+ },
+ "devDependencies": {
+ "angular-mocks": "~1.4.9"
+ },
+ "resolutions": {
+ "angular": "~1.4.9"
+ }
+}
diff --git a/e2e/main.po.js b/e2e/main.po.js
new file mode 100644
index 0000000..2a637c9
--- /dev/null
+++ b/e2e/main.po.js
@@ -0,0 +1,11 @@
+/**
+ * This file uses the Page Object pattern to define the main page for tests
+ * https://docs.google.com/presentation/d/1B6manhG0zEXkC-H-tPo2vwU06JhL8w9-XCF9oehXzAQ
+ */
+
+'use strict';
+
+var MainPage = function() {
+};
+
+module.exports = new MainPage();
diff --git a/e2e/main.spec.js b/e2e/main.spec.js
new file mode 100644
index 0000000..c98bfac
--- /dev/null
+++ b/e2e/main.spec.js
@@ -0,0 +1,11 @@
+'use strict';
+
+describe('The main view', function () {
+ var page;
+
+ beforeEach(function () {
+ browser.get('http://localhost:3000/index.html');
+ page = require('./main.po');
+ });
+
+});
diff --git a/gulp/build.js b/gulp/build.js
new file mode 100644
index 0000000..015efd2
--- /dev/null
+++ b/gulp/build.js
@@ -0,0 +1,86 @@
+'use strict';
+
+var gulp = require('gulp');
+
+var paths = gulp.paths;
+
+var $ = require('gulp-load-plugins')({
+ pattern: ['gulp-*', 'main-bower-files', 'uglify-save-license', 'del']
+});
+
+gulp.task('partials', function () {
+ return gulp.src([
+ paths.src + '/{app,components}/**/*.html',
+ paths.tmp + '/{app,components}/**/*.html'
+ ])
+ .pipe($.minifyHtml({
+ empty: true,
+ spare: true,
+ quotes: true
+ }))
+ .pipe($.angularTemplatecache('templateCacheHtml.js', {
+ module: 'didPanelApp'
+ }))
+ .pipe(gulp.dest(paths.tmp + '/partials/'))
+});
+
+gulp.task('html', ['inject', 'partials'], function () {
+ var partialsInjectFile = gulp.src(paths.tmp + '/partials/templateCacheHtml.js', { read: false });
+ var partialsInjectOptions = {
+ starttag: '',
+ ignorePath: paths.tmp + '/partials',
+ addRootSlash: false
+ };
+
+ var htmlFilter = $.filter('*.html');
+ var jsFilter = $.filter('**/*.js');
+ var cssFilter = $.filter('**/*.css');
+ var assets;
+
+ return gulp.src(paths.tmp + '/serve/*.html')
+ .pipe($.inject(partialsInjectFile, partialsInjectOptions))
+ .pipe(assets = $.useref.assets())
+ .pipe($.rev())
+ .pipe(jsFilter)
+ .pipe($.ngAnnotate())
+ .pipe($.uglify({preserveComments: $.uglifySaveLicense}))
+ .pipe(jsFilter.restore())
+ .pipe(cssFilter)
+ .pipe($.csso())
+ .pipe(cssFilter.restore())
+ .pipe(assets.restore())
+ .pipe($.useref())
+ .pipe($.revReplace())
+ .pipe(htmlFilter)
+ .pipe($.minifyHtml({
+ empty: true,
+ spare: true,
+ quotes: true
+ }))
+ .pipe(htmlFilter.restore())
+ .pipe(gulp.dest(paths.dist + '/'))
+ .pipe($.size({ title: paths.dist + '/', showFiles: true }));
+});
+
+gulp.task('images', function () {
+ return gulp.src(paths.src + '/assets/images/**/*')
+ .pipe(gulp.dest(paths.dist + '/assets/images/'));
+});
+
+gulp.task('fonts', function () {
+ return gulp.src($.mainBowerFiles())
+ .pipe($.filter('**/*.{eot,svg,ttf,woff}'))
+ .pipe($.flatten())
+ .pipe(gulp.dest(paths.dist + '/fonts/'));
+});
+
+gulp.task('misc', function () {
+ return gulp.src(paths.src + '/**/*.ico')
+ .pipe(gulp.dest(paths.dist + '/'));
+});
+
+gulp.task('clean', function (done) {
+ $.del([paths.dist + '/', paths.tmp + '/'], done);
+});
+
+gulp.task('build', ['html', 'images', 'fonts', 'misc']);
diff --git a/gulp/deploy.js b/gulp/deploy.js
new file mode 100644
index 0000000..e7c1d38
--- /dev/null
+++ b/gulp/deploy.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var gulp = require('gulp');
+var ghPages = require('gulp-gh-pages');
+
+gulp.task('deploy', function() {
+ return gulp.src('./dist/**/*')
+ .pipe(ghPages());
+});
diff --git a/gulp/e2e-tests.js b/gulp/e2e-tests.js
new file mode 100644
index 0000000..99ab2c5
--- /dev/null
+++ b/gulp/e2e-tests.js
@@ -0,0 +1,35 @@
+'use strict';
+
+var gulp = require('gulp');
+
+var $ = require('gulp-load-plugins')();
+
+var browserSync = require('browser-sync');
+
+var paths = gulp.paths;
+
+// Downloads the selenium webdriver
+gulp.task('webdriver-update', $.protractor.webdriver_update);
+
+gulp.task('webdriver-standalone', $.protractor.webdriver_standalone);
+
+function runProtractor (done) {
+
+ gulp.src(paths.e2e + '/**/*.js')
+ .pipe($.protractor.protractor({
+ configFile: 'protractor.conf.js',
+ }))
+ .on('error', function (err) {
+ // Make sure failed tests cause gulp to exit non-zero
+ throw err;
+ })
+ .on('end', function () {
+ // Close browser sync server
+ browserSync.exit();
+ done();
+ });
+}
+
+gulp.task('protractor', ['protractor:src']);
+gulp.task('protractor:src', ['serve:e2e', 'webdriver-update'], runProtractor);
+gulp.task('protractor:dist', ['serve:e2e-dist', 'webdriver-update'], runProtractor);
diff --git a/gulp/inject.js b/gulp/inject.js
new file mode 100644
index 0000000..93e13de
--- /dev/null
+++ b/gulp/inject.js
@@ -0,0 +1,40 @@
+'use strict';
+
+var gulp = require('gulp');
+
+var paths = gulp.paths;
+
+var $ = require('gulp-load-plugins')();
+
+var wiredep = require('wiredep').stream;
+
+gulp.task('inject', ['styles'], function () {
+
+ var injectStyles = gulp.src([
+ paths.tmp + '/serve/{app,components}/**/*.css',
+ '!' + paths.tmp + '/serve/app/vendor.css'
+ ], { read: false });
+
+ var injectScripts = gulp.src([
+ paths.src + '/{app,components}/**/*.js',
+ '!' + paths.src + '/{app,components}/**/*.spec.js',
+ '!' + paths.src + '/{app,components}/**/*.mock.js'
+ ]).pipe($.angularFilesort());
+
+ var injectOptions = {
+ ignorePath: [paths.src, paths.tmp + '/serve'],
+ addRootSlash: false
+ };
+
+ var wiredepOptions = {
+ directory: 'bower_components',
+ exclude: [/bootstrap\.css/, /foundation\.css/]
+ };
+
+ return gulp.src(paths.src + '/*.html')
+ .pipe($.inject(injectStyles, injectOptions))
+ .pipe($.inject(injectScripts, injectOptions))
+ .pipe(wiredep(wiredepOptions))
+ .pipe(gulp.dest(paths.tmp + '/serve'));
+
+});
diff --git a/gulp/proxy.js b/gulp/proxy.js
new file mode 100644
index 0000000..2fcd734
--- /dev/null
+++ b/gulp/proxy.js
@@ -0,0 +1,65 @@
+ /*jshint unused:false */
+
+/***************
+
+ This file allow to configure a proxy system plugged into BrowserSync
+ in order to redirect backend requests while still serving and watching
+ files from the web project
+
+ IMPORTANT: The proxy is disabled by default.
+
+ If you want to enable it, watch at the configuration options and finally
+ change the `module.exports` at the end of the file
+
+***************/
+
+'use strict';
+
+var httpProxy = require('http-proxy');
+var chalk = require('chalk');
+
+/*
+ * Location of your backend server
+ */
+var proxyTarget = 'http://server/context/';
+
+var proxy = httpProxy.createProxyServer({
+ target: proxyTarget
+});
+
+proxy.on('error', function(error, req, res) {
+ res.writeHead(500, {
+ 'Content-Type': 'text/plain'
+ });
+
+ console.error(chalk.red('[Proxy]'), error);
+});
+
+/*
+ * The proxy middleware is an Express middleware added to BrowserSync to
+ * handle backend request and proxy them to your backend.
+ */
+function proxyMiddleware(req, res, next) {
+ /*
+ * This test is the switch of each request to determine if the request is
+ * for a static file to be handled by BrowserSync or a backend request to proxy.
+ *
+ * The existing test is a standard check on the files extensions but it may fail
+ * for your needs. If you can, you could also check on a context in the url which
+ * may be more reliable but can't be generic.
+ */
+ if (/\.(html|css|js|png|jpg|jpeg|gif|ico|xml|rss|txt|eot|svg|ttf|woff|cur)(\?((r|v|rel|rev)=[\-\.\w]*)?)?$/.test(req.url)) {
+ next();
+ } else {
+ proxy.web(req, res);
+ }
+}
+
+/*
+ * This is where you activate or not your proxy.
+ *
+ * The first line activate if and the second one ignored it
+ */
+
+//module.exports = [proxyMiddleware];
+module.exports = [];
diff --git a/gulp/server.js b/gulp/server.js
new file mode 100644
index 0000000..5740a54
--- /dev/null
+++ b/gulp/server.js
@@ -0,0 +1,58 @@
+'use strict';
+
+var gulp = require('gulp');
+
+var paths = gulp.paths;
+
+var util = require('util');
+
+var browserSync = require('browser-sync');
+
+var middleware = require('./proxy');
+
+function browserSyncInit(baseDir, files, browser) {
+ browser = browser === undefined ? 'default' : browser;
+
+ var routes = null;
+ if(baseDir === paths.src || (util.isArray(baseDir) && baseDir.indexOf(paths.src) !== -1)) {
+ routes = {
+ '/bower_components': 'bower_components'
+ };
+ }
+
+ browserSync.instance = browserSync.init(files, {
+ startPath: '/',
+ server: {
+ baseDir: baseDir,
+ middleware: middleware,
+ routes: routes
+ },
+ browser: browser
+ });
+}
+
+gulp.task('serve', ['watch'], function () {
+ browserSyncInit([
+ paths.tmp + '/serve',
+ paths.src
+ ], [
+ paths.tmp + '/serve/{app,components}/**/*.css',
+ paths.src + '/{app,components}/**/*.js',
+ paths.src + 'src/assets/images/**/*',
+ paths.tmp + '/serve/*.html',
+ paths.tmp + '/serve/{app,components}/**/*.html',
+ paths.src + '/{app,components}/**/*.html'
+ ]);
+});
+
+gulp.task('serve:dist', ['build'], function () {
+ browserSyncInit(paths.dist);
+});
+
+gulp.task('serve:e2e', ['inject'], function () {
+ browserSyncInit([paths.tmp + '/serve', paths.src], null, []);
+});
+
+gulp.task('serve:e2e-dist', ['build'], function () {
+ browserSyncInit(paths.dist, null, []);
+});
diff --git a/gulp/styles.js b/gulp/styles.js
new file mode 100644
index 0000000..e34a731
--- /dev/null
+++ b/gulp/styles.js
@@ -0,0 +1,53 @@
+'use strict';
+
+var gulp = require('gulp');
+
+var paths = gulp.paths;
+
+var $ = require('gulp-load-plugins')();
+
+gulp.task('styles', function () {
+
+ var sassOptions = {
+ style: 'expanded'
+ };
+
+ var injectFiles = gulp.src([
+ paths.src + '/{app,components}/**/*.scss',
+ '!' + paths.src + '/app/index.scss',
+ '!' + paths.src + '/app/vendor.scss'
+ ], { read: false });
+
+ var injectOptions = {
+ transform: function(filePath) {
+ filePath = filePath.replace(paths.src + '/app/', '');
+ filePath = filePath.replace(paths.src + '/components/', '../components/');
+ return '@import \'' + filePath + '\';';
+ },
+ starttag: '// injector',
+ endtag: '// endinjector',
+ addRootSlash: false
+ };
+
+ var indexFilter = $.filter('index.scss');
+
+ return gulp.src([
+ paths.src + '/app/index.scss',
+ paths.src + '/app/vendor.scss'
+ ])
+ .pipe(indexFilter)
+ .pipe($.inject(injectFiles, injectOptions))
+ .pipe(indexFilter.restore())
+ .pipe($.rubySass(sassOptions)
+ .on('error', function (err) {
+ console.error('Error!', err.message);
+ })
+ )
+
+ .pipe($.autoprefixer())
+ .on('error', function handleError(err) {
+ console.error(err.toString());
+ this.emit('end');
+ })
+ .pipe(gulp.dest(paths.tmp + '/serve/app/'));
+});
diff --git a/gulp/unit-tests.js b/gulp/unit-tests.js
new file mode 100644
index 0000000..f13a9c0
--- /dev/null
+++ b/gulp/unit-tests.js
@@ -0,0 +1,35 @@
+'use strict';
+
+var gulp = require('gulp');
+
+var $ = require('gulp-load-plugins')();
+
+var wiredep = require('wiredep');
+
+var paths = gulp.paths;
+
+function runTests (singleRun, done) {
+ var bowerDeps = wiredep({
+ directory: 'bower_components',
+ exclude: ['bootstrap-sass-official'],
+ dependencies: true,
+ devDependencies: true
+ });
+
+ var testFiles = bowerDeps.js.concat([
+ paths.src + '/{app,components}/**/*.js'
+ ]);
+
+ gulp.src(testFiles)
+ .pipe($.karma({
+ configFile: 'karma.conf.js',
+ action: (singleRun)? 'run': 'watch'
+ }))
+ .on('error', function (err) {
+ // Make sure failed tests cause gulp to exit non-zero
+ throw err;
+ });
+}
+
+gulp.task('test', function (done) { runTests(true /* singleRun */, done) });
+gulp.task('test:auto', function (done) { runTests(false /* singleRun */, done) });
diff --git a/gulp/watch.js b/gulp/watch.js
new file mode 100644
index 0000000..48ba133
--- /dev/null
+++ b/gulp/watch.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var gulp = require('gulp');
+
+var paths = gulp.paths;
+
+gulp.task('watch', ['inject'], function () {
+ gulp.watch([
+ paths.src + '/*.html',
+ paths.src + '/{app,components}/**/*.scss',
+ paths.src + '/{app,components}/**/*.js',
+ 'bower.json'
+ ], ['inject']);
+});
diff --git a/gulpfile.js b/gulpfile.js
new file mode 100644
index 0000000..19e88c5
--- /dev/null
+++ b/gulpfile.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var gulp = require('gulp');
+
+gulp.paths = {
+ src: 'src',
+ dist: 'dist',
+ tmp: '.tmp',
+ e2e: 'e2e'
+};
+
+require('require-dir')('./gulp');
+
+gulp.task('default', ['clean'], function () {
+ gulp.start('build');
+});
diff --git a/karma.conf.js b/karma.conf.js
new file mode 100644
index 0000000..12e3ff3
--- /dev/null
+++ b/karma.conf.js
@@ -0,0 +1,17 @@
+'use strict';
+
+module.exports = function(config) {
+
+ config.set({
+ autoWatch : false,
+
+ frameworks: ['jasmine'],
+
+ browsers : ['PhantomJS'],
+
+ plugins : [
+ 'karma-phantomjs-launcher',
+ 'karma-jasmine'
+ ]
+ });
+};
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..d647d68
--- /dev/null
+++ b/package.json
@@ -0,0 +1,53 @@
+{
+ "name": "imigrationCrm-ui",
+ "version": "1.2.0",
+ "dependencies": {
+ "angular-chart.js": "^1.0.3",
+ "lodash": "~4.6.1"
+ },
+ "devDependencies": {
+ "browser-sync": "~1.7.1",
+ "chalk": "~0.5.1",
+ "del": "~0.1.3",
+ "gulp": "~3.9.0",
+ "gulp-angular-filesort": "~1.0.4",
+ "gulp-angular-templatecache": "~1.4.2",
+ "gulp-autoprefixer": "~2.0.0",
+ "gulp-consolidate": "~0.1.2",
+ "gulp-csso": "~0.2.9",
+ "gulp-filter": "~1.0.2",
+ "gulp-flatten": "~0.0.4",
+ "gulp-gh-pages": "^0.5.4",
+ "gulp-inject": "~1.0.2",
+ "gulp-jshint": "~1.9.0",
+ "gulp-karma": "~0.0.4",
+ "gulp-load-plugins": "~0.7.1",
+ "gulp-minify-html": "~0.1.7",
+ "gulp-ng-annotate": "~1.0.0",
+ "gulp-protractor": "~0.0.11",
+ "gulp-rename": "~1.2.0",
+ "gulp-replace": "~0.5.0",
+ "gulp-rev": "~2.0.1",
+ "gulp-rev-replace": "~0.3.1",
+ "gulp-ruby-sass": "~0.7.1",
+ "gulp-size": "~1.1.0",
+ "gulp-uglify": "~1.0.1",
+ "gulp-useref": "~1.0.2",
+ "http-proxy": "~1.7.0",
+ "jshint-stylish": "~1.0.0",
+ "karma-jasmine": "~0.3.1",
+ "karma-phantomjs-launcher": "~0.1.4",
+ "main-bower-files": "~2.4.0",
+ "protractor": "~1.4.0",
+ "require-dir": "~0.1.0",
+ "uglify-save-license": "~0.4.1",
+ "wiredep": "~2.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "init": "npm install",
+ "install": "bower install"
+ }
+}
diff --git a/protractor.conf.js b/protractor.conf.js
new file mode 100644
index 0000000..0f43a9e
--- /dev/null
+++ b/protractor.conf.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var paths = require('./.yo-rc.json')['generator-gulp-angular'].props.paths;
+
+// An example configuration file.
+exports.config = {
+ // The address of a running selenium server.
+ //seleniumAddress: 'http://localhost:4444/wd/hub',
+ //seleniumServerJar: deprecated, this should be set on node_modules/protractor/config.json
+
+ // Capabilities to be passed to the webdriver instance.
+ capabilities: {
+ 'browserName': 'chrome'
+ },
+
+ // Spec patterns are relative to the current working directly when
+ // protractor is called.
+ specs: [paths.e2e + '/**/*.js'],
+
+ // Options to be passed to Jasmine-node.
+ jasmineNodeOpts: {
+ showColors: true,
+ defaultTimeoutInterval: 30000
+ }
+};
diff --git a/src/404.html b/src/404.html
new file mode 100644
index 0000000..fdace4a
--- /dev/null
+++ b/src/404.html
@@ -0,0 +1,157 @@
+
+
+
+
+ Page Not Found :(
+
+
+
+
+
Not found :(
+
Sorry, but the page you were trying to view does not exist.
+
It looks like this was the result of either:
+
+ a mistyped address
+ an out-of-date link
+
+
+
+
+
+
diff --git a/src/app/app.config.js b/src/app/app.config.js
new file mode 100644
index 0000000..86be91d
--- /dev/null
+++ b/src/app/app.config.js
@@ -0,0 +1,147 @@
+(function (){
+ 'use strict';
+
+ angular.module('sbAdminApp')
+
+ .config(function ($mdThemingProvider, $mdIconProvider, $httpProvider, USER_ROLES, AUTH_EVENTS) {
+
+ $mdThemingProvider
+ .theme('default')
+ .primaryPalette('blue', {
+ 'default': '600'
+ })
+ .accentPalette('teal', {
+ 'default': '500'
+ })
+ .warnPalette('defaultPrimary');
+
+ $mdThemingProvider
+ .theme('dark', 'default')
+ .primaryPalette('defaultPrimary')
+ .dark();
+
+ $mdThemingProvider
+ .theme('grey', 'default')
+ .primaryPalette('grey');
+
+ $mdThemingProvider
+ .theme('custom', 'default')
+ .primaryPalette('defaultPrimary', {
+ 'hue-1': '50'
+ });
+
+ $mdThemingProvider
+ .definePalette('defaultPrimary', {
+ '50': '#FFFFFF',
+ '100': 'rgb(255, 198, 197)',
+ '200': '#E75753',
+ '300': '#E75753',
+ '400': '#E75753',
+ '500': '#E75753',
+ '600': '#E75753',
+ '700': '#E75753',
+ '800': '#E75753',
+ '900': '#E75753',
+ 'A100': '#E75753',
+ 'A200': '#E75753',
+ 'A400': '#E75753',
+ 'A700': '#E75753'
+ });
+ $mdIconProvider
+ .icon('user', 'assets/images/user.svg', 64);
+ })
+
+ .run(['$rootScope', function($rootScope) {
+ $rootScope.userDetails = {};
+ $rootScope.userDetails.partyDetail = {};
+ if(localStorage.getItem("userDetails")){
+ $rootScope.userDetails = JSON.parse(localStorage.getItem("userDetails"));
+ $rootScope.auth = localStorage.getItem("auth");
+ }
+ }])
+
+ .config(function ($httpProvider) {
+ $httpProvider.interceptors.push('httpRequestInterceptor');
+ })
+
+ .factory('httpRequestInterceptor', ['$q', '$rootScope', '$location', function($q, $rootScope, $location) {
+ return {
+ request: function($config) {
+ //$config.headers['Authorization'] = 'Basic ' + $rootScope.auth;
+ return $config;
+ },
+ responseError: function(rejection) {
+ if (rejection.status === 401) {
+ //localStorage.clear();
+ //window.location.reload();
+ }
+ return $q.reject(rejection);
+ }
+ }
+ }])
+ .run(function($rootScope, $window, $state, LoginService, AUTH_EVENTS) {
+ $rootScope.$on('$stateChangeStart', function (event, next, nextParams, fromState) {
+ if ('data' in next && 'authorizedRoles' in next.data) {
+ var authorizedRoles = next.data.authorizedRoles;
+ if (!LoginService.isAuthorized(authorizedRoles)) {
+ event.preventDefault();
+ if($state.current.name.length == 0) {
+ $state.go('login')
+ } else {
+ $state.go($state.current, {}, {reload: true});
+ $rootScope.$broadcast(AUTH_EVENTS.notAuthorized);
+ $("background").remove();
+ }
+ }
+ }
+ if (LoginService.isAuthenticated()) {
+ if (next.name == 'login') {
+ event.preventDefault();
+ if($state.current.name.length == 0) {
+ $state.go('app.user');
+ } else {
+ $state.go($state.current, {}, {reload: true});
+ $rootScope.$broadcast(AUTH_EVENTS.notAuthorized);
+ }
+ }
+ }
+ });
+ })
+
+ // .directive('apsUploadFile', apsUploadFile);
+
+ // function apsUploadFile() {
+ // var directive = {
+ // restrict: 'E',
+ // template: ' attach_file ',
+ // link: apsUploadFileLink
+ // };
+ // return directive;
+ // }
+
+ // function apsUploadFileLink(scope, element, attrs) {
+ // var input = $(element[0].querySelector('#fileInput'));
+ // var button = $(element[0].querySelector('#uploadButton'));
+ // var textInput = $(element[0].querySelector('#textInput'));
+
+ // if (input.length && button.length && textInput.length) {
+ // button.click(function(e) {
+ // input.click();
+ // });
+ // textInput.click(function(e) {
+ // input.click();
+ // });
+ // }
+
+ // input.on('change', function(e) {
+ // var files = e.target.files;
+ // if (files[0]) {
+ // scope.fileName = files[0].name;
+ // } else {
+ // scope.fileName = null;
+ // }
+ // scope.$apply();
+ // });
+ // }
+
+})();
\ No newline at end of file
diff --git a/src/app/app.constant.js b/src/app/app.constant.js
new file mode 100644
index 0000000..e447b9a
--- /dev/null
+++ b/src/app/app.constant.js
@@ -0,0 +1,20 @@
+(function(){
+ 'use strict';
+
+ angular.module('sbAdminApp')
+
+ .constant("BASE_URL", "http://localhost:3002/api")
+ //.constant("BASE_URL", "http://192.168.1.131:4000/api")
+
+ .constant('AUTH_EVENTS', {
+ updateUser: 'update-user',
+ notAuthorized: 'auth-not-authorized',
+ notAuthenticated: 'auth-not-authenticated'
+ })
+
+ .constant('USER_ROLES', {
+ admin: 'ADMIN',
+ user: 'USER',
+ });
+
+})();
diff --git a/src/app/app.module.js b/src/app/app.module.js
new file mode 100644
index 0000000..5a13931
--- /dev/null
+++ b/src/app/app.module.js
@@ -0,0 +1,26 @@
+(function () {
+ 'use strict';
+
+ angular.module('sbAdminApp', [
+
+ //Angular module
+ 'ngAnimate',
+ 'ngCookies'
+ ,'ngSanitize'
+ ,'ngResource'
+ ,'ui.router'
+ ,'ngMaterial'
+ ,'nvd3'
+ ,'toaster'
+ ,'md.data.table'
+ ,'ngMessages'
+ ,'chart.js'
+ ,'ls.ChangeStream'
+ ,'angular-web-notification'
+
+ // Custom module
+ ,'sbAdminApp.authentication'
+ ,'sbAdminApp.navigation'
+ ,'sbAdminApp.user'
+ ]);
+})();
\ No newline at end of file
diff --git a/src/app/app.route.js b/src/app/app.route.js
new file mode 100644
index 0000000..71f8eca
--- /dev/null
+++ b/src/app/app.route.js
@@ -0,0 +1,42 @@
+(function (){
+ 'use strict';
+
+ angular.module('sbAdminApp')
+ .config(function ($stateProvider, $urlRouterProvider, USER_ROLES){
+ $urlRouterProvider.otherwise('/login');
+ $stateProvider
+ .state('app', {
+ url: '/app',
+ abstract: true,
+ templateUrl: 'app/components/navigation/template/navigation.html',
+ controller: 'MainController',
+ controllerAs: 'vm'
+ })
+ .state('login', {
+ url: '/login',
+ controller: 'LoginCtrl',
+ templateUrl: 'app/components/authentication/template/login.html',
+ data: {
+ title: 'Login'
+ }
+ })
+ .state('app.user', {
+ url: '/user',
+ controller: 'userCtrl',
+ templateUrl: 'app/components/user/template/user.html',
+ data: {
+ title: 'user',
+ authorizedRoles: [USER_ROLES.admin , USER_ROLES.user],
+ }
+ })
+ .state('app.startUp', {
+ url: '/startUp',
+ controller: 'userCtrl',
+ templateUrl: 'app/components/user/template/startUp.html',
+ data: {
+ title: 'user',
+ authorizedRoles: [USER_ROLES.admin , USER_ROLES.user],
+ }
+ })
+ })
+})();
diff --git a/src/app/components/authentication/authentication.controller.js b/src/app/components/authentication/authentication.controller.js
new file mode 100644
index 0000000..68e027a
--- /dev/null
+++ b/src/app/components/authentication/authentication.controller.js
@@ -0,0 +1,59 @@
+(function(){
+ 'use strict';
+
+ angular.module('sbAdminApp')
+ .controller('LoginCtrl', ['$scope', '$rootScope', '$state','$mdDialog','$log', 'AUTH_EVENTS', 'LoginService', 'toaster', loginCtrl]);
+
+ function loginCtrl($scope, $rootScope, $state, $mdDialog,$log, AUTH_EVENTS, LoginService ,toaster) {
+ $scope.doLogin = function() {
+ $rootScope.auth = window.btoa($scope.loginData.email + ':' + $scope.loginData.password);
+ LoginService.doLogin().save($scope.loginData).$promise.then(function(result) {
+ console.log("result",result);
+ if(result){
+ $rootScope.$broadcast(AUTH_EVENTS.updateUser);
+ LoginService.setUser(result);
+ /*if(result.role === 'admin'){
+ $state.go("app.user");
+ } else {
+ $state.go("app.");
+ } */
+ $state.go("app.user");
+ }
+ if (Notification.permission !== 'denied') {
+ Notification.requestPermission(function(permission) {
+ // If the user accepts, let's create a notification
+ if (permission === "granted") {
+ /*var notification = new Notification("Hello!");*/
+ }
+ });
+ }
+ },
+ function error(error) {
+ console.log("ererrorror",error);
+ if(error){
+ toaster.error("server error");
+ }
+ });
+
+ }
+ $scope.signUp=function(){
+
+ LoginService.signUp().save($scope.signupData).$promise.then(function(result) {
+ console.log("result",result);
+ // toaster.success("signed up successfully")
+ $mdDialog.show(
+ $mdDialog.alert()
+ .clickOutsideToClose(true)
+ .title()
+ .textContent("Please check your email and click on the verification link before logging in.")
+ .ariaLabel('Alert')
+ .ok('ok')
+ );
+
+ });
+
+
+ }
+
+ }
+})();
\ No newline at end of file
diff --git a/src/app/components/authentication/authentication.module.js b/src/app/components/authentication/authentication.module.js
new file mode 100644
index 0000000..d2dc124
--- /dev/null
+++ b/src/app/components/authentication/authentication.module.js
@@ -0,0 +1,5 @@
+(function () {
+
+ angular.module('sbAdminApp.authentication', []);
+
+})();
diff --git a/src/app/components/authentication/authentication.service.js b/src/app/components/authentication/authentication.service.js
new file mode 100644
index 0000000..dce30ff
--- /dev/null
+++ b/src/app/components/authentication/authentication.service.js
@@ -0,0 +1,70 @@
+(function(){
+ 'use strict';
+
+ angular.module('sbAdminApp')
+ .service('LoginService', ['$q', '$http', '$rootScope', '$resource', 'BASE_URL', 'USER_ROLES', LoginService]);
+
+ function LoginService($q, $http, $rootScope, $resource, BASE_URL, USER_ROLES) {
+
+ var authService = {},
+ admin = '',
+ user = '',
+ role = '',
+ isAuthenticated = false;
+
+ if (window.localStorage.getItem("loginStatus")) {
+ isAuthenticated = true;
+ $rootScope.userDetails = JSON.parse(localStorage.getItem("userDetails"));
+ role = $rootScope.userDetails.role.toUpperCase();
+ }
+
+ this.setUser = function (res) {
+ localStorage.setItem('loginStatus', true);
+ localStorage.setItem('userDetails', JSON.stringify(res));
+ isAuthenticated = true;
+ $rootScope.userDetails = JSON.parse(localStorage.getItem("userDetails"));
+ role = $rootScope.userDetails.role.toUpperCase();
+ }
+
+ this.isAuthenticated = function () {
+ return isAuthenticated;
+ };
+
+ this.role = function () {
+ return role;
+ };
+
+ this.getUser = function () {
+ return JSON.parse(window.localStorage.getItem("userDetails"));
+ }
+
+ this.isAuthorized = function (authorizedRoles) {
+ if (!angular.isArray(authorizedRoles)) {
+ authorizedRoles = [authorizedRoles];
+ }
+ return (this.isAuthenticated() && authorizedRoles.indexOf(role) !== -1);
+ }
+
+ this.signUp = function() {
+ return $resource(BASE_URL+'/users/signUp');
+ }
+
+ //Resource for REST APIs
+ this.doLogin = function() {
+ return $resource(BASE_URL+'/users/login');
+ }
+
+ this.logOut = function(){
+ return $resource(BASE_URL+'/users/logout',
+ {access_token:$rootScope.userDetails.id})
+ }
+
+ this.deleteUser = function () {
+ isAuthenticated = false;
+ $rootScope.$loginStatus = false;
+ localStorage.clear();
+ }
+
+ }
+
+})();
\ No newline at end of file
diff --git a/src/app/components/authentication/template/login.html b/src/app/components/authentication/template/login.html
new file mode 100644
index 0000000..910e8a0
--- /dev/null
+++ b/src/app/components/authentication/template/login.html
@@ -0,0 +1,64 @@
+Startup Jalsa
+
+
+
+
+ Login
+
+
+
+
+
+
+
+
+
+
+ Sign Up
+
+
+
+
+ Username
+
+
+
+
+ Email
+
+
+
+
+ Password
+
+
+
+
+ Confirm Password
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/components/navigation/navigation.controller.js b/src/app/components/navigation/navigation.controller.js
new file mode 100644
index 0000000..1945c3d
--- /dev/null
+++ b/src/app/components/navigation/navigation.controller.js
@@ -0,0 +1,119 @@
+(function(){
+ 'use strict';
+
+ angular.module('sbAdminApp')
+ .controller('con',['$scope',con])
+ .controller('MainController', ['navService','$rootScope','$mdSidenav', '$mdBottomSheet', '$log', '$q', '$state', '$mdToast', '$scope', '$mdMedia', '$mdDialog','LoginService', 'toaster', MainController]);
+
+ function MainController(navService,$rootScope, $mdSidenav, $mdBottomSheet, $log, $q, $state, $mdToast, $scope, $mdMedia, $mdDialog, LoginService, toaster) {
+ var vm = this;
+ //vm.menuItems = [ ];
+ vm.selectItem = selectItem;
+ vm.toggleItemsList = toggleItemsList;
+ vm.showActions = showActions;
+ vm.title = $state.current.data.title;
+ vm.showSimpleToast = showSimpleToast;
+ vm.toggleRightSidebar = toggleRightSidebar;
+ vm.autoFocusContent = false;
+ vm.isOpen = isOpen;
+ vm.toggleOpen = toggleOpen;
+
+ vm.menu = navService;
+
+ $scope.companyName = localStorage.getItem("companyName");
+
+ /*navService.loadAllItems().then(function(menuItems) {
+ vm.menuItems = [].concat(menuItems);
+ });*/
+
+ function toggleRightSidebar() {
+ $mdSidenav('right').toggle();
+ }
+
+ function toggleItemsList() {
+ var pending = $mdBottomSheet.hide() || $q.when(true);
+ pending.then(function(){
+ $mdSidenav('left').toggle();
+ });
+ }
+
+ function isOpen(section) {
+ return navService.isSectionSelected(section);
+ }
+
+ function toggleOpen(section) {
+ navService.toggleSelectSection(section);
+ }
+
+ function selectItem (item) {
+ /*$scope.searchDID = false;
+ if(item.name == 'DID'){
+ $scope.searchDID = true;
+ }*/
+ vm.title = item.name;
+ vm.toggleItemsList();
+ vm.showSimpleToast(vm.title);
+ }
+
+ function showActions($event) {
+ $mdBottomSheet.show({
+ parent: angular.element(document.getElementById('content')),
+ templateUrl: 'app/views/partials/bottomSheet.html',
+ controller: [ '$mdBottomSheet', SheetController],
+ controllerAs: "vm",
+ bindToController : true,
+ targetEvent: $event
+ }).then(function(clickedItem) {
+ clickedItem && $log.debug( clickedItem.name + ' clicked!');
+ });
+
+ function SheetController( $mdBottomSheet ) {
+ var vm = this;
+
+ vm.actions = [
+ { name: 'Share', icon: 'share', url: 'https://twitter.com/intent/tweet?text=Angular%20Material%20Dashboard%20https://github.com/flatlogic/angular-material-dashboard%20via%20@flatlogicinc' },
+ { name: 'Star', icon: 'star', url: 'https://github.com/flatlogic/angular-material-dashboard/stargazers' }
+ ];
+
+ vm.performAction = function(action) {
+ $mdBottomSheet.hide(action);
+ };
+ }
+ }
+
+ function showSimpleToast(title) {
+ $mdToast.show(
+ $mdToast.simple()
+ .content(title)
+ .hideDelay(2000)
+ .position('bottom right')
+ );
+ }
+
+ $scope.logout = function() {
+ LoginService.logOut().save().$promise.then(function(result){
+ window.location.reload();
+ LoginService.deleteUser();
+ $state.go("login");
+
+ }, function(error){
+ if(error){
+ toaster.error("server error");
+ }
+ });
+ }
+ }
+
+ function con($scope){
+ $scope.class = "sidebar-full";
+ $scope.changeClass = function(){
+ if ($scope.class === "sidebar-full"){
+ $scope.class = "sidebar-mini";
+ }
+ else{
+ $scope.class = "sidebar-full";
+ }
+
+ };
+ }
+})();
\ No newline at end of file
diff --git a/src/app/components/navigation/navigation.module.js b/src/app/components/navigation/navigation.module.js
new file mode 100644
index 0000000..1ee765b
--- /dev/null
+++ b/src/app/components/navigation/navigation.module.js
@@ -0,0 +1,5 @@
+(function () {
+
+ angular.module('sbAdminApp.navigation', []);
+
+})();
diff --git a/src/app/components/navigation/navigation.service.js b/src/app/components/navigation/navigation.service.js
new file mode 100644
index 0000000..5596711
--- /dev/null
+++ b/src/app/components/navigation/navigation.service.js
@@ -0,0 +1,57 @@
+(function(){
+
+ 'use strict';
+
+ angular.module('sbAdminApp').factory('navService', [ '$location', '$rootScope', function ($location, $rootScope) {
+
+
+ var section = [];
+
+ section.push({
+ name: 'Recommend a Startup',
+ type: 'link',
+ sref: '.user',
+ role: ['user'],
+ });
+
+ section.push({
+ name: 'Apply Late as Startup',
+ type: 'link',
+ sref: '.startUp',
+ role: ['user'],
+ });
+
+ var sections = [];
+ for(var i = 0; i < section.length; i++) {
+ if(section[i].role.indexOf($rootScope.userDetails.role) !== -1){
+ sections.push(section[i]);
+ }
+ }
+
+ var self;
+
+ return self = {
+ sections: sections,
+
+ toggleSelectSection: function (section) {
+ self.openedSection = (self.openedSection === section ? null : section);
+ },
+ isSectionSelected: function (section) {
+ return self.openedSection === section;
+ },
+
+ selectPage: function (section, page) {
+ page && page.url && $location.path(page.url);
+ self.currentSection = section;
+ self.currentPage = page;
+ }
+ };
+
+ function sortByHumanName(a, b) {
+ return (a.humanName < b.humanName) ? -1 :
+ (a.humanName > b.humanName) ? 1 : 0;
+ }
+
+ }])
+
+})();
\ No newline at end of file
diff --git a/src/app/components/navigation/template/navigation.html b/src/app/components/navigation/template/navigation.html
new file mode 100644
index 0000000..b76cf6a
--- /dev/null
+++ b/src/app/components/navigation/template/navigation.html
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/app/components/user/template/startUp.html b/src/app/components/user/template/startUp.html
new file mode 100644
index 0000000..6368058
--- /dev/null
+++ b/src/app/components/user/template/startUp.html
@@ -0,0 +1,8 @@
+Startup Jalsa:
+
+
\ No newline at end of file
diff --git a/src/app/components/user/template/user.html b/src/app/components/user/template/user.html
new file mode 100644
index 0000000..3a1f140
--- /dev/null
+++ b/src/app/components/user/template/user.html
@@ -0,0 +1,5 @@
+YC Recommendations:
+Do you know a startup founder who should apply to YC? Recommend them here and we’ll send them an email encouraging them to apply.
+You can recommend as many founders as you like, and then use this page to keep track of their applications.
+Thank you!
+Y Combinator
diff --git a/src/app/components/user/user.controller.js b/src/app/components/user/user.controller.js
new file mode 100644
index 0000000..1650393
--- /dev/null
+++ b/src/app/components/user/user.controller.js
@@ -0,0 +1,12 @@
+(function(){
+ 'use strict';
+
+ angular.module('sbAdminApp')
+ .controller('userCtrl', ['$scope', '$rootScope', '$state','$log', 'AUTH_EVENTS', 'userService', 'toaster', userCtrl]);
+
+ function userCtrl($scope, $rootScope, $state,$log, AUTH_EVENTS, userService ,toaster) {
+
+
+ }
+
+ })();
\ No newline at end of file
diff --git a/src/app/components/user/user.module.js b/src/app/components/user/user.module.js
new file mode 100644
index 0000000..7eb8467
--- /dev/null
+++ b/src/app/components/user/user.module.js
@@ -0,0 +1,5 @@
+(function () {
+
+ angular.module('sbAdminApp.user', []);
+
+})();
diff --git a/src/app/components/user/user.service.js b/src/app/components/user/user.service.js
new file mode 100644
index 0000000..e992da1
--- /dev/null
+++ b/src/app/components/user/user.service.js
@@ -0,0 +1,11 @@
+(function(){
+ 'use strict';
+
+ angular.module('sbAdminApp')
+ .service('userService', ['$q', '$http', '$rootScope', '$resource', 'BASE_URL', 'USER_ROLES', userService]);
+
+ function userService($q, $http, $rootScope, $resource, BASE_URL, USER_ROLES) {
+
+ }
+
+ })();
diff --git a/src/app/directive/menu_toggle.directive.js b/src/app/directive/menu_toggle.directive.js
new file mode 100644
index 0000000..459962a
--- /dev/null
+++ b/src/app/directive/menu_toggle.directive.js
@@ -0,0 +1,44 @@
+angular.module('sbAdminApp')
+ .run(['$templateCache', function ($templateCache) {
+ $templateCache.put('partials/menu-toggle.tmpl.html',
+ '\n' +
+ ' {{section.icon}} \n' +
+ ' {{section.name}}\n' +
+ ' \n' +
+ ' \n' +
+ '\n' +
+ '');
+ }])
+ .directive('menuToggle', ['$timeout', function ($timeout ) {
+ return {
+ scope: {
+ section: '='
+ },
+ templateUrl: 'partials/menu-toggle.tmpl.html',
+ link: function (scope, element) {
+ var controller = element.parent().controller();
+
+ scope.isOpen = function () {
+ return controller.isOpen(scope.section);
+ };
+ scope.toggle = function () {
+ controller.toggleOpen(scope.section);
+ };
+
+ var parentNode = element[0].parentNode.parentNode.parentNode;
+ if (parentNode.classList.contains('parent-list-item')) {
+ var heading = parentNode.querySelector('h2');
+ element[0].firstChild.setAttribute('aria-describedby', heading.id);
+ }
+ }
+ };
+ }])
\ No newline at end of file
diff --git a/src/app/directive/menulink.directive.js b/src/app/directive/menulink.directive.js
new file mode 100644
index 0000000..99a9c34
--- /dev/null
+++ b/src/app/directive/menulink.directive.js
@@ -0,0 +1,36 @@
+(function(){
+ 'use strict';
+
+ angular.module('sbAdminApp')
+ .run(['$templateCache', function ($templateCache) {
+ $templateCache.put('partials/menu-link.tmpl.html',
+ '\n' +
+ ' {{section.icon}} \n' +
+ ' {{section.name}}\n' +
+ ' \n' +
+ ' current page\n' +
+ ' \n' +
+ ' \n' +
+ '');
+ }])
+ .directive('menuLink', function () {
+ return {
+ scope: {
+ section: '='
+ },
+ templateUrl: 'partials/menu-link.tmpl.html',
+ link: function ($scope, $element) {
+ var controller = $element.parent().controller();
+
+ $scope.focusSection = function () {
+ // set flag to be used later when
+ // $locationChangeSuccess calls openPage()
+ controller.autoFocusContent = true;
+ };
+ }
+ };
+ })
+})();
+
diff --git a/src/app/index.scss b/src/app/index.scss
new file mode 100644
index 0000000..6a70604
--- /dev/null
+++ b/src/app/index.scss
@@ -0,0 +1,16 @@
+// injector
+// endinjector
+
+
+/* Custom CSS */
+
+
+body{
+ color:#000;
+}
+
+.iframe{
+ width:100% ;
+ height:800px ;
+ border:0;
+}
\ No newline at end of file
diff --git a/src/app/stylesheets/_custom.scss b/src/app/stylesheets/_custom.scss
new file mode 100644
index 0000000..26f9e8d
--- /dev/null
+++ b/src/app/stylesheets/_custom.scss
@@ -0,0 +1,509 @@
+// COLORS
+$main-bg-color: #ECECEC;
+$text-color: #7A7A7A;
+$accent-color: rgb(0, 150, 136);
+$warning-color: #E75753;
+
+
+// VARIABLES
+$left-sidenav-width: 200px;
+$widget-height: 310px;
+$font-weight-bold: 600;
+$font-size-large: 20px;
+
+
+// LAYOUT
+body {
+ color: $text-color;
+}
+
+.toolbar-button {
+ min-width: 20px;
+}
+
+.share-label {
+ vert-align: middle;
+ margin-left: 10px;
+}
+
+.page-content {
+ background-color: $main-bg-color;
+}
+
+.widget-progress {
+ width: 95% !important;
+ margin-left: 10px;
+}
+
+
+// UTILS
+.capitalize {
+ text-transform: capitalize;
+}
+
+.img-circle {
+ height: 50px;
+ border-radius: 50%;
+ margin: 0 10px;
+}
+
+
+// COMPONENTS
+.messages {
+ position: relative;
+
+ &-content {
+ height: 100vh;
+ }
+}
+
+.notifications-label {
+ width: 16px;
+ height: 16px;
+ line-height: 16px;
+ text-align: center;
+ border-radius: 50%;
+ position: absolute;
+ font-size: 12px;
+ top: 2px;
+ right: 2px;
+ background-color: $warning-color;
+}
+
+// panel-widget
+.panel-widget {
+ background-color: white;
+
+ &-toolbar {
+ box-shadow: none;
+ }
+
+ &-tittle {
+ color: $text-color;
+ }
+}
+
+.options {
+ -webkit-transition:all linear 0.5s;
+ transition:all linear 0.5s;
+}
+
+.options.ng-hide {
+ opacity:0;
+}
+
+.fixed-height-widget {
+ height: $widget-height;
+}
+
+// charts
+.donut-chart-title{
+ text-align: center;
+}
+
+.custom-tooltip {
+ font-size: $font-size-large;
+ color: $text-color;
+ text-align: center;
+}
+
+
+// OVERRIDES
+// angular material overrides
+md-radio-group {
+ border: none;
+}
+
+md-icon {
+ height: auto;
+}
+
+md-sidenav.md-locked-open.md-sidenav-left {
+ width: $left-sidenav-width;
+ min-width: $left-sidenav-width;
+ max-width: $left-sidenav-width;
+}
+
+a.md-button.md-warn.md-raised, a.md-button.md-warn.md-fab, .md-button.md-warn.md-raised, .md-button.md-warn.md-fab {
+ color: white;
+}
+
+md-radio-button.md-accent.md-checked .md-label span {
+ color: $accent-color;
+}
+
+.md-toolbar-tools h1 {
+ font-size: $font-size-large;
+}
+
+
+md-backdrop.md-sidenav-backdrop {
+ position: fixed;
+}
+
+// libs overrides
+.material-icons {
+ vertical-align: middle;
+}
+
+.material-icons.md-18 { font-size: 18px; }
+.material-icons.md-24 { font-size: 24px; }
+.material-icons.md-36 { font-size: 36px; }
+.material-icons.md-48 { font-size: 48px; }
+
+.nvd3.nv-pie .nv-pie-title {
+ fill: rgb(68, 68, 68);
+ font-weight: $font-weight-bold;
+ font-size: $font-size-large !important;
+}
+
+.nvtooltip {
+ background-color: transparent;
+ border: none;
+ font-weight: $font-weight-bold;
+}
+
+.orange .md-bar2 {
+ background-color: orange;
+}
+
+.orange .md-container {
+ background-color: rgb(255, 236, 201)
+}
+
+
+/* Custom by Anurag */
+
+//variables
+$sidenav-mobile-width: 190px;
+
+md-sidenav {
+ width: $sidenav-mobile-width;
+}
+
+.vertical {
+ padding-right: 5px;
+ border-right-style: groove;
+}
+
+md-toolbar .md-menu {
+ margin: 0 !important;
+}
+
+/*form validation*/
+
+.help-block {
+ color: red;
+ font-size: 11px;
+}
+
+
+
+
+
+/* Styles go here */
+
+body {
+ font-family: 'Ubuntu', sans-serif;
+ color: orangered;
+}
+
+.fill-height{
+ display: flex;
+ flex: 1;
+ min-height: 100%;
+}
+
+.fill-height > div{
+ min-height: 100%;
+ display: flex;
+}
+
+md-sidenav {
+ overflow: visible;
+
+}
+.side-menu, .side-menu ul {
+ list-style: none;
+ padding: 0;
+ margin-top: 0;
+}
+
+.side-menu .md-button.active {
+ color: rgb(30,136,229);
+}
+
+.side-menu .menu-toggle-list a.md-button {
+ display: block;
+ padding: 0 16px 0 32px;
+ text-transform: none;
+ text-rendering: optimizeLegibility;
+ font-weight: 500;
+}
+
+.side-menu .menu-toggle-list .md-button {
+ display: block;
+ padding: 0 16px 0 32px;
+ text-transform: none;
+}
+
+.side-menu > li {
+ border-top: 1px solid rgba(0, 0, 0, 0.12);
+}
+
+.md-button-toggle .md-toggle-icon.toggled {
+ transform: rotateZ(180deg);
+ -webkit-transform: rotateZ(180deg);
+}
+
+.side-menu .md-button-toggle .md-toggle-icon {
+ background-size: 100% auto;
+ display: inline-block;
+ margin: auto 0 auto auto;
+ width: 15px;
+ color: darkgray;
+ transition: transform .3s ease-in-out;
+ -webkit-transition: -webkit-transform .3s ease-in-out;
+}
+
+.menu-toggle-list.ng-hide {
+ max-height: 0;
+}
+
+.side-menu .md-button {
+ border-radius: 0;
+ color: inherit;
+ cursor: pointer;
+ font-weight: 400;
+ line-height: 40px;
+ margin: 0;
+ max-height: 40px;
+ overflow: hidden;
+ padding: 0px 16px;
+ text-align: left;
+ text-decoration: none;
+ white-space: normal;
+ width: 100%;
+}
+
+.menu-toggle-list {
+ background: #fff;
+ max-height: 1300px;
+ overflow: hidden;
+ position: relative;
+ z-index: 1;
+ -webkit-transition: 0.75s cubic-bezier(0.35, 0, 0.25, 1);
+ -webkit-transition-property: max-height;
+ -moz-transition: 0.75s cubic-bezier(0.35, 0, 0.25, 1);
+ -moz-transition-property: max-height;
+ transition: 0.75s cubic-bezier(0.35, 0, 0.25, 1);
+ transition-property: max-height;
+}
+
+
+.side-menu menu-toggle span{
+ padding-top: 12px;
+ padding-bottom: 12px;
+}
+
+
+
+
+
+.noShadow{
+ box-shadow:none;
+}
+.borderNew{
+ border-bottom:1px solid;
+ border-color:rgba(128, 128, 128, 0.25);
+}
+.noMargin{
+ margin:0px;
+}
+.height25{
+ height:25px;
+}
+.carrierBtn{
+ width:300px;
+ height:200px;
+ background-color:#fff;
+ box-shadow:0px 0px 10px #666;
+ text-align:center;
+ line-height:200px;
+ font-size:30px;
+ float:left;
+ cursor:pointer;
+ -webkit-transition:0.2s;
+}
+.carrierBtn:first-child{
+ margin-right:50px;
+}
+.carrierBtn:hover{
+ background-color:rgb(30,136,229);
+ color:#fff;
+}
+.carrierBtnSelected{
+ background-color:rgb(30,136,229);
+ color:#fff;
+}
+.myWrapper{
+ min-height:500px;
+}
+.popWrapper{
+ padding:20px;
+}
+.popTitle{
+ color:#333;
+}
+.popContent{
+ color:#333;
+ font-weight:normal;
+}
+.myBtnPrimary{
+ box-shadow:0 2px 5px 0 rgba(0,0,0,.26);
+ color: rgba(255,255,255,0.87);
+ background-color: rgb(16,108,200);
+ float:left;
+}
+.myBtnPrimary:hover{
+ box-shadow:0 2px 5px 0 rgba(0,0,0,.26);
+ color: rgba(255,255,255,0.87);
+ background-color: rgb(16,108,200) !important;
+ float:left;
+}
+.myBtnDefault{
+ box-shadow:0 2px 5px 0 rgba(0,0,0,.26);
+ color:#333;
+}
+.cl{clear:both;}
+
+.widthstyle{
+ width: 400px !important;
+ height:200px !important;
+ }
+.panel-green {
+ border-color: #5cb85c;
+}
+
+.panel-green .panel-heading {
+ border-color: #5cb85c;
+ color: #fff;
+ background-color: #5cb85c;
+}
+
+.panel-green a {
+ color: #5cb85c;
+}
+
+.panel-green a:hover {
+ color: #3d8b3d;
+}
+
+.panel-red {
+ border-color: #d9534f;
+}
+
+.panel-red .panel-heading {
+ border-color: #d9534f;
+ color: #fff;
+ background-color: #d9534f;
+}
+
+.panel-red a {
+ color: #d9534f;
+}
+
+.panel-red a:hover {
+ color: #b52b27;
+}
+
+.panel-yellow {
+ border-color: #f0ad4e;
+}
+
+.panel-yellow .panel-heading {
+ border-color: #f0ad4e;
+ color: #fff;
+ background-color: #f0ad4e;
+}
+
+.panel-yellow a {
+ color: #f0ad4e;
+}
+
+.panel-yellow a:hover {
+ color: #df8a13;
+}
+
+.camelCase {
+ text-transform: none;
+}
+
+background{
+ z-index: 0;
+ position:absolute;
+ left:0px;
+ right:0px;
+ top:-21px;
+ bottom:0px;
+ background-size: cover;
+}
+
+.panel-Content {
+ padding:0px
+}
+
+.gridListdemoBasicUsage md-grid-list {
+ margin: 8px; }
+
+.gridListdemoBasicUsage .orangered {
+ background: #A66866; }
+
+.gridListdemoBasicUsage .green {
+ background: #337ab7; }
+
+.gridListdemoBasicUsage .yellow {
+ background: #f0ad4e; }
+
+.gridListdemoBasicUsage .blue {
+ background: #84ffff; }
+
+.gridListdemoBasicUsage .purple {
+ background: #b388ff; }
+
+.gridListdemoBasicUsage .red {
+ background: #ff8a80; }
+
+.gridListdemoBasicUsage md-grid-tile {
+ transition: all 400ms ease-out 50ms; }
+
+/* Custom css */
+
+.gridContent{
+ width:100%;
+ height:auto;
+ padding:10%;
+ color:#fff;
+}
+.fl{
+ float:left;
+}
+.fr{
+ float:right;
+}
+.cl{
+ clear:both;
+}
+
+.selectFont{
+ font-size: 17px;
+}
+
+.heading{
+ color:#757575;
+ position:absolute;
+ z-index:9;
+ left:0;
+ right:0;
+ top:0;
+}
\ No newline at end of file
diff --git a/src/app/stylesheets/_table.scss b/src/app/stylesheets/_table.scss
new file mode 100644
index 0000000..58d9adb
--- /dev/null
+++ b/src/app/stylesheets/_table.scss
@@ -0,0 +1,212 @@
+// This file based on http://codepen.io/zavoloklom/pen/IGkDz
+
+// VARIABLES
+$table-header-font-weight: 400;
+$table-header-font-color: #757575;
+
+$table-cell-padding: 1.2rem;
+
+$table-bg: #fff;
+$table-bg-accent: #f5f5f5;
+$table-bg-hover: rgba(0,0,0,.12);
+$table-bg-active: $table-bg-hover;
+$table-border-color: #e0e0e0;
+
+
+// MIXINS
+@mixin transition($transition-property, $transition-time, $method) {
+ -webkit-transition: $transition-property $transition-time $method;
+ -moz-transition: $transition-property $transition-time $method;
+ -ms-transition: $transition-property $transition-time $method;
+ -o-transition: $transition-property $transition-time $method;
+ transition: $transition-property $transition-time $method;
+}
+
+
+//TABLES
+.table {
+ border-spacing: 0;
+ width: 100%;
+ max-width: 100%;
+ margin-bottom: 2rem;
+ background-color: $table-bg;
+ > thead,
+ > tbody,
+ > tfoot {
+ > tr {
+ @include transition(all, 0.3s, ease);
+ > th,
+ > td {
+ text-align: left;
+ padding: $table-cell-padding;
+ vertical-align: top;
+ border-top: 0;
+ @include transition(all, 0.3s, ease);
+ }
+ }
+ }
+ > thead > tr > th {
+ font-weight: $table-header-font-weight;
+ color: $table-header-font-color;
+ vertical-align: bottom;
+ border-bottom: 1px solid rgba(0,0,0,.12);
+ }
+ > caption + thead,
+ > colgroup + thead,
+ > thead:first-child {
+ > tr:first-child {
+ > th,
+ > td {
+ border-top: 0;
+ }
+ }
+ }
+ > tbody + tbody {
+ border-top: 1px solid rgba(0,0,0,.12);
+ }
+
+ // Nesting
+ .table {
+ background-color: $table-bg;
+ }
+
+ // Remove border
+ .no-border {
+ border: 0;
+ }
+}
+
+// Bordered version
+//
+// Add horizontal borders between columns.
+.table-bordered {
+ border: 0;
+ > thead,
+ > tbody,
+ > tfoot {
+ > tr {
+ > th,
+ > td {
+ border: 0;
+ border-bottom: 1px solid $table-border-color;
+ }
+ }
+ }
+ > thead > tr {
+ > th,
+ > td {
+ border-bottom-width: 2px;
+ }
+ }
+}
+
+
+// Hover effect
+//
+.table-hover {
+ > tbody > tr:hover {
+ > td,
+ > th {
+ background-color: $table-bg-hover;
+ }
+ }
+}
+
+// Responsive tables (vertical)
+//
+// Wrap your tables in `.table-responsive-vertical` and we'll make them mobile friendly
+// by vertical table-cell display. Only applies <768px. Everything above that will display normally.
+// For correct display you must add 'data-title' to each 'td'
+.table-responsive-vertical {
+
+ @media screen and (max-width: 768px) {
+
+ // Tighten up spacing
+ > .table {
+ margin-bottom: 0;
+ background-color: transparent;
+ > thead,
+ > tfoot {
+ display: none;
+ }
+
+ > tbody {
+ display: block;
+
+ > tr {
+ display: block;
+ border: 1px solid $table-border-color;
+ border-radius: 2px;
+ margin-bottom: $table-cell-padding;
+
+ > td {
+ background-color: $table-bg;
+ display: block;
+ vertical-align: middle;
+ text-align: right;
+ }
+ > td[data-title]:before {
+ content: attr(data-title);
+ float: left;
+ font-size: inherit;
+ font-weight: $table-header-font-weight;
+ color: $table-header-font-color;
+ padding-right: 10px;
+ }
+ }
+ }
+ }
+
+ // Special overrides for shadows
+ &.shadow-z-1 {
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ > .table > tbody > tr {
+ border: none;
+ }
+ }
+
+ // Special overrides for the bordered tables
+ > .table-bordered {
+ border: 0;
+
+ // Nuke the appropriate borders so that the parent can handle them
+ > tbody {
+ > tr {
+ > td {
+ border: 0;
+ border-bottom: 1px solid $table-border-color;
+ }
+ > td:last-child {
+ border-bottom: 0;
+ }
+ }
+ }
+ }
+
+ // Special overrides for the striped tables
+ > .table-striped {
+ > tbody > tr > td,
+ > tbody > tr:nth-child(odd) {
+ background-color: $table-bg;
+ }
+ > tbody > tr > td:nth-child(odd) {
+ background-color: $table-bg-accent;
+ }
+ }
+
+ // Special overrides for hover tables
+ > .table-hover {
+ > tbody {
+ > tr:hover > td,
+ > tr:hover {
+ background-color: $table-bg;
+ }
+ > tr > td:hover {
+ background-color: $table-bg-hover;
+ }
+ }
+ }
+ }
+}
diff --git a/src/assets/images/cart.png b/src/assets/images/cart.png
new file mode 100644
index 0000000000000000000000000000000000000000..33f21feb4f206e71c5f89ff6293748919a388f22
GIT binary patch
literal 273
zcmV+s0q*{ZP)F;1Vy^MAih9zug9=Rwo60lV;G+1RR^0>dUwMXiTKr>Z8Z
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_clear_white_24px.svg b/src/assets/images/ic_clear_white_24px.svg
new file mode 100644
index 0000000..5704800
--- /dev/null
+++ b/src/assets/images/ic_clear_white_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_close_black_24px.svg b/src/assets/images/ic_close_black_24px.svg
new file mode 100644
index 0000000..ec8d116
--- /dev/null
+++ b/src/assets/images/ic_close_black_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_close_white_24px.svg b/src/assets/images/ic_close_white_24px.svg
new file mode 100644
index 0000000..5704800
--- /dev/null
+++ b/src/assets/images/ic_close_white_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_domain_black_24px.svg b/src/assets/images/ic_domain_black_24px.svg
new file mode 100644
index 0000000..1f43cd5
--- /dev/null
+++ b/src/assets/images/ic_domain_black_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_done_black_24px.svg b/src/assets/images/ic_done_black_24px.svg
new file mode 100644
index 0000000..9bba7f8
--- /dev/null
+++ b/src/assets/images/ic_done_black_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_email_black_24px.svg b/src/assets/images/ic_email_black_24px.svg
new file mode 100644
index 0000000..855c7cc
--- /dev/null
+++ b/src/assets/images/ic_email_black_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_extension_black_24px.svg b/src/assets/images/ic_extension_black_24px.svg
new file mode 100644
index 0000000..91b12d5
--- /dev/null
+++ b/src/assets/images/ic_extension_black_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_functions_black_24px.svg b/src/assets/images/ic_functions_black_24px.svg
new file mode 100644
index 0000000..acd915a
--- /dev/null
+++ b/src/assets/images/ic_functions_black_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_home_black_24px.svg b/src/assets/images/ic_home_black_24px.svg
new file mode 100644
index 0000000..676d2d3
--- /dev/null
+++ b/src/assets/images/ic_home_black_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_location_city_black_24px.svg b/src/assets/images/ic_location_city_black_24px.svg
new file mode 100644
index 0000000..bd03326
--- /dev/null
+++ b/src/assets/images/ic_location_city_black_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_open_in_new_black_24px.svg b/src/assets/images/ic_open_in_new_black_24px.svg
new file mode 100644
index 0000000..ca89ba8
--- /dev/null
+++ b/src/assets/images/ic_open_in_new_black_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_person_black_24px.svg b/src/assets/images/ic_person_black_24px.svg
new file mode 100644
index 0000000..5fbd2b2
--- /dev/null
+++ b/src/assets/images/ic_person_black_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_person_white_18px.svg b/src/assets/images/ic_person_white_18px.svg
new file mode 100644
index 0000000..3a615e4
--- /dev/null
+++ b/src/assets/images/ic_person_white_18px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_person_white_24px.svg b/src/assets/images/ic_person_white_24px.svg
new file mode 100644
index 0000000..9d68e15
--- /dev/null
+++ b/src/assets/images/ic_person_white_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_phone_black_24px.svg b/src/assets/images/ic_phone_black_24px.svg
new file mode 100644
index 0000000..eca33f1
--- /dev/null
+++ b/src/assets/images/ic_phone_black_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_phone_missed_black_24px.svg b/src/assets/images/ic_phone_missed_black_24px.svg
new file mode 100644
index 0000000..8256a7f
--- /dev/null
+++ b/src/assets/images/ic_phone_missed_black_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_pin_drop_black_24px.svg b/src/assets/images/ic_pin_drop_black_24px.svg
new file mode 100644
index 0000000..5388073
--- /dev/null
+++ b/src/assets/images/ic_pin_drop_black_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_public_black_24px.svg b/src/assets/images/ic_public_black_24px.svg
new file mode 100644
index 0000000..d07df45
--- /dev/null
+++ b/src/assets/images/ic_public_black_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_remove_red_eye_black_24px.svg b/src/assets/images/ic_remove_red_eye_black_24px.svg
new file mode 100644
index 0000000..2e21adb
--- /dev/null
+++ b/src/assets/images/ic_remove_red_eye_black_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_room_black_24px.svg b/src/assets/images/ic_room_black_24px.svg
new file mode 100644
index 0000000..d7844b2
--- /dev/null
+++ b/src/assets/images/ic_room_black_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_transfer_within_a_station_black_18px.svg b/src/assets/images/ic_transfer_within_a_station_black_18px.svg
new file mode 100644
index 0000000..23b0235
--- /dev/null
+++ b/src/assets/images/ic_transfer_within_a_station_black_18px.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/images/ic_trending_flat_white_24px.svg b/src/assets/images/ic_trending_flat_white_24px.svg
new file mode 100644
index 0000000..218dc82
--- /dev/null
+++ b/src/assets/images/ic_trending_flat_white_24px.svg
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/favicon.ico b/src/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..6527905307f19ba00762f9241f7eb535fa84a2f9
GIT binary patch
literal 4286
zcmchaPe@cz6vpqQW1y54B@{_hhFD-kWPgyXjSGVaf);_51TESOlSPOdvy}@W5Q+**
zs6~RrtlR}7(V|sCkP&1f7!5{Hixw@4+x@+HXSm*Z^WGalm2d8S=brO@=iGm9MyZ7P
zPo)%}YN|=8W~EfSfibDm2H3qnGq$y%h@zqVv#zn@@WvhIGJ8*ECePe@roq(*vwGys
z4?Q;bI~MRIM&jXu6Yg@wqQ#8&8x#z55E}ONd3<&rw_h!5AbBx{CcZ%&z736jHxFa0
zsBLqly3+dQ%MZGH{QU}GW6bsq=@$a@sXtac^<8>8uP>*+d!Qdtv&&mnKlvE_T-+SC
z*QNCVwcvq%+&DDc+T}Uf(2_FavDN{-&hCpIs?aW=A$mcrzyD+9(025i1~K&uVf&w4
zItQLK9T{7k?s@bnU*&p+<^UI*aHA1aH+Fo^PAzM|xjNK09?2V(Cme7IFB(BP?7#at
z(>DB3w`AUFS~=(LUBdZ>v-SG4J~%Mrfj&05Z)oj13l5tbEq4x>8+;FC0Dvr
zbJY#7PS$+yE_Cf7gxqQEC@RoZX5J^}71l+`Q~qnOF4D
za`lhjUuqZa-sj)EHDleV2i|mc!Ly-@7IwzPM{?pBUt(+@IHi8HTz#Iq9)9h|hrL3)
zfOT#@|5$JCxmRjsOj>&kUt(m8*57|W(FoE`CX*8edYv%j=3sR5>!hvglJ#@8K6j$g
z&IuUbRC_{)p}sbyx%UD6Fki;t6nDk0gT5&6Q_at7FbVVOu?4VK{oR#!kyYbCc;<4+LITzoZ8-~O5L+9MiLHL4NyME>!
z;Ky7<)UR!gN_~GXhMvPMHNB;EmmIK}eHD&~cRx89jth}IM#tU%ablw0|GxfE9IjRR
zl-)b-IvC#UD!IewzPL77SI>R+?}<2ERr|R2o~zCC8rJUR8>DI5*0O$6+k~wZ)Mt;b
z(Hul-OFl+F))}lK&&Yi*+S2kJmHDbdBWOQnaSA6S|#*
+
+
+
+ Startup Jalsa
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file