Commit 66ee5529fa54890e5aed7d863edda0c7d69f2851

Authored by Palak Handa
0 parents
Exists in master

initial commit

Showing 65 changed files with 2413 additions and 0 deletions   Show diff stats
... ... @@ -0,0 +1,33 @@
  1 +{
  2 + "name": "imigrationcrm-ui",
  3 + "description": "Smart-Office",
  4 + "homepage": "https://github.com/micrum/angular-material-admin",
  5 + "license": "MIT",
  6 + "version": "1.2.0",
  7 + "dependencies": {
  8 + "AngularJS-Toaster": "angularjs-toaster#~1.2.0",
  9 + "angular": "1.4.9",
  10 + "angular-animate": "~1.4.9",
  11 + "angular-cookies": "~1.4.9",
  12 + "angular-material": "1.0.0",
  13 + "angular-material-data-table": "~0.9.14",
  14 + "angular-messages": "~1.5.2",
  15 + "angular-nvd3": "1.0.0-rc.2",
  16 + "angular-resource": "~1.5.0",
  17 + "angular-sanitize": "~1.4.9",
  18 + "angular-touch": "~1.4.9",
  19 + "angular-ui-router": "~0.2.17",
  20 + "components-font-awesome": "~4.5.0",
  21 + "jquery": "~2.1.1",
  22 + "angular-chart.js": "^1.0.3",
  23 + "alasql": "0.2.7",
  24 + "angular-web-notification": "^1.2.7",
  25 + "angular-live-set": "*"
  26 + },
  27 + "devDependencies": {
  28 + "angular-mocks": "~1.4.9"
  29 + },
  30 + "resolutions": {
  31 + "angular": "~1.4.9"
  32 + }
  33 +}
... ...
... ... @@ -0,0 +1,11 @@
  1 +/**
  2 + * This file uses the Page Object pattern to define the main page for tests
  3 + * https://docs.google.com/presentation/d/1B6manhG0zEXkC-H-tPo2vwU06JhL8w9-XCF9oehXzAQ
  4 + */
  5 +
  6 +'use strict';
  7 +
  8 +var MainPage = function() {
  9 +};
  10 +
  11 +module.exports = new MainPage();
... ...
... ... @@ -0,0 +1,11 @@
  1 +'use strict';
  2 +
  3 +describe('The main view', function () {
  4 + var page;
  5 +
  6 + beforeEach(function () {
  7 + browser.get('http://localhost:3000/index.html');
  8 + page = require('./main.po');
  9 + });
  10 +
  11 +});
... ...
... ... @@ -0,0 +1,86 @@
  1 +'use strict';
  2 +
  3 +var gulp = require('gulp');
  4 +
  5 +var paths = gulp.paths;
  6 +
  7 +var $ = require('gulp-load-plugins')({
  8 + pattern: ['gulp-*', 'main-bower-files', 'uglify-save-license', 'del']
  9 +});
  10 +
  11 +gulp.task('partials', function () {
  12 + return gulp.src([
  13 + paths.src + '/{app,components}/**/*.html',
  14 + paths.tmp + '/{app,components}/**/*.html'
  15 + ])
  16 + .pipe($.minifyHtml({
  17 + empty: true,
  18 + spare: true,
  19 + quotes: true
  20 + }))
  21 + .pipe($.angularTemplatecache('templateCacheHtml.js', {
  22 + module: 'didPanelApp'
  23 + }))
  24 + .pipe(gulp.dest(paths.tmp + '/partials/'))
  25 +});
  26 +
  27 +gulp.task('html', ['inject', 'partials'], function () {
  28 + var partialsInjectFile = gulp.src(paths.tmp + '/partials/templateCacheHtml.js', { read: false });
  29 + var partialsInjectOptions = {
  30 + starttag: '<!-- inject:partials -->',
  31 + ignorePath: paths.tmp + '/partials',
  32 + addRootSlash: false
  33 + };
  34 +
  35 + var htmlFilter = $.filter('*.html');
  36 + var jsFilter = $.filter('**/*.js');
  37 + var cssFilter = $.filter('**/*.css');
  38 + var assets;
  39 +
  40 + return gulp.src(paths.tmp + '/serve/*.html')
  41 + .pipe($.inject(partialsInjectFile, partialsInjectOptions))
  42 + .pipe(assets = $.useref.assets())
  43 + .pipe($.rev())
  44 + .pipe(jsFilter)
  45 + .pipe($.ngAnnotate())
  46 + .pipe($.uglify({preserveComments: $.uglifySaveLicense}))
  47 + .pipe(jsFilter.restore())
  48 + .pipe(cssFilter)
  49 + .pipe($.csso())
  50 + .pipe(cssFilter.restore())
  51 + .pipe(assets.restore())
  52 + .pipe($.useref())
  53 + .pipe($.revReplace())
  54 + .pipe(htmlFilter)
  55 + .pipe($.minifyHtml({
  56 + empty: true,
  57 + spare: true,
  58 + quotes: true
  59 + }))
  60 + .pipe(htmlFilter.restore())
  61 + .pipe(gulp.dest(paths.dist + '/'))
  62 + .pipe($.size({ title: paths.dist + '/', showFiles: true }));
  63 +});
  64 +
  65 +gulp.task('images', function () {
  66 + return gulp.src(paths.src + '/assets/images/**/*')
  67 + .pipe(gulp.dest(paths.dist + '/assets/images/'));
  68 +});
  69 +
  70 +gulp.task('fonts', function () {
  71 + return gulp.src($.mainBowerFiles())
  72 + .pipe($.filter('**/*.{eot,svg,ttf,woff}'))
  73 + .pipe($.flatten())
  74 + .pipe(gulp.dest(paths.dist + '/fonts/'));
  75 +});
  76 +
  77 +gulp.task('misc', function () {
  78 + return gulp.src(paths.src + '/**/*.ico')
  79 + .pipe(gulp.dest(paths.dist + '/'));
  80 +});
  81 +
  82 +gulp.task('clean', function (done) {
  83 + $.del([paths.dist + '/', paths.tmp + '/'], done);
  84 +});
  85 +
  86 +gulp.task('build', ['html', 'images', 'fonts', 'misc']);
... ...
... ... @@ -0,0 +1,9 @@
  1 +'use strict';
  2 +
  3 +var gulp = require('gulp');
  4 +var ghPages = require('gulp-gh-pages');
  5 +
  6 +gulp.task('deploy', function() {
  7 + return gulp.src('./dist/**/*')
  8 + .pipe(ghPages());
  9 +});
... ...
gulp/e2e-tests.js
... ... @@ -0,0 +1,35 @@
  1 +'use strict';
  2 +
  3 +var gulp = require('gulp');
  4 +
  5 +var $ = require('gulp-load-plugins')();
  6 +
  7 +var browserSync = require('browser-sync');
  8 +
  9 +var paths = gulp.paths;
  10 +
  11 +// Downloads the selenium webdriver
  12 +gulp.task('webdriver-update', $.protractor.webdriver_update);
  13 +
  14 +gulp.task('webdriver-standalone', $.protractor.webdriver_standalone);
  15 +
  16 +function runProtractor (done) {
  17 +
  18 + gulp.src(paths.e2e + '/**/*.js')
  19 + .pipe($.protractor.protractor({
  20 + configFile: 'protractor.conf.js',
  21 + }))
  22 + .on('error', function (err) {
  23 + // Make sure failed tests cause gulp to exit non-zero
  24 + throw err;
  25 + })
  26 + .on('end', function () {
  27 + // Close browser sync server
  28 + browserSync.exit();
  29 + done();
  30 + });
  31 +}
  32 +
  33 +gulp.task('protractor', ['protractor:src']);
  34 +gulp.task('protractor:src', ['serve:e2e', 'webdriver-update'], runProtractor);
  35 +gulp.task('protractor:dist', ['serve:e2e-dist', 'webdriver-update'], runProtractor);
... ...
... ... @@ -0,0 +1,40 @@
  1 +'use strict';
  2 +
  3 +var gulp = require('gulp');
  4 +
  5 +var paths = gulp.paths;
  6 +
  7 +var $ = require('gulp-load-plugins')();
  8 +
  9 +var wiredep = require('wiredep').stream;
  10 +
  11 +gulp.task('inject', ['styles'], function () {
  12 +
  13 + var injectStyles = gulp.src([
  14 + paths.tmp + '/serve/{app,components}/**/*.css',
  15 + '!' + paths.tmp + '/serve/app/vendor.css'
  16 + ], { read: false });
  17 +
  18 + var injectScripts = gulp.src([
  19 + paths.src + '/{app,components}/**/*.js',
  20 + '!' + paths.src + '/{app,components}/**/*.spec.js',
  21 + '!' + paths.src + '/{app,components}/**/*.mock.js'
  22 + ]).pipe($.angularFilesort());
  23 +
  24 + var injectOptions = {
  25 + ignorePath: [paths.src, paths.tmp + '/serve'],
  26 + addRootSlash: false
  27 + };
  28 +
  29 + var wiredepOptions = {
  30 + directory: 'bower_components',
  31 + exclude: [/bootstrap\.css/, /foundation\.css/]
  32 + };
  33 +
  34 + return gulp.src(paths.src + '/*.html')
  35 + .pipe($.inject(injectStyles, injectOptions))
  36 + .pipe($.inject(injectScripts, injectOptions))
  37 + .pipe(wiredep(wiredepOptions))
  38 + .pipe(gulp.dest(paths.tmp + '/serve'));
  39 +
  40 +});
... ...
... ... @@ -0,0 +1,65 @@
  1 + /*jshint unused:false */
  2 +
  3 +/***************
  4 +
  5 + This file allow to configure a proxy system plugged into BrowserSync
  6 + in order to redirect backend requests while still serving and watching
  7 + files from the web project
  8 +
  9 + IMPORTANT: The proxy is disabled by default.
  10 +
  11 + If you want to enable it, watch at the configuration options and finally
  12 + change the `module.exports` at the end of the file
  13 +
  14 +***************/
  15 +
  16 +'use strict';
  17 +
  18 +var httpProxy = require('http-proxy');
  19 +var chalk = require('chalk');
  20 +
  21 +/*
  22 + * Location of your backend server
  23 + */
  24 +var proxyTarget = 'http://server/context/';
  25 +
  26 +var proxy = httpProxy.createProxyServer({
  27 + target: proxyTarget
  28 +});
  29 +
  30 +proxy.on('error', function(error, req, res) {
  31 + res.writeHead(500, {
  32 + 'Content-Type': 'text/plain'
  33 + });
  34 +
  35 + console.error(chalk.red('[Proxy]'), error);
  36 +});
  37 +
  38 +/*
  39 + * The proxy middleware is an Express middleware added to BrowserSync to
  40 + * handle backend request and proxy them to your backend.
  41 + */
  42 +function proxyMiddleware(req, res, next) {
  43 + /*
  44 + * This test is the switch of each request to determine if the request is
  45 + * for a static file to be handled by BrowserSync or a backend request to proxy.
  46 + *
  47 + * The existing test is a standard check on the files extensions but it may fail
  48 + * for your needs. If you can, you could also check on a context in the url which
  49 + * may be more reliable but can't be generic.
  50 + */
  51 + 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)) {
  52 + next();
  53 + } else {
  54 + proxy.web(req, res);
  55 + }
  56 +}
  57 +
  58 +/*
  59 + * This is where you activate or not your proxy.
  60 + *
  61 + * The first line activate if and the second one ignored it
  62 + */
  63 +
  64 +//module.exports = [proxyMiddleware];
  65 +module.exports = [];
... ...
... ... @@ -0,0 +1,58 @@
  1 +'use strict';
  2 +
  3 +var gulp = require('gulp');
  4 +
  5 +var paths = gulp.paths;
  6 +
  7 +var util = require('util');
  8 +
  9 +var browserSync = require('browser-sync');
  10 +
  11 +var middleware = require('./proxy');
  12 +
  13 +function browserSyncInit(baseDir, files, browser) {
  14 + browser = browser === undefined ? 'default' : browser;
  15 +
  16 + var routes = null;
  17 + if(baseDir === paths.src || (util.isArray(baseDir) && baseDir.indexOf(paths.src) !== -1)) {
  18 + routes = {
  19 + '/bower_components': 'bower_components'
  20 + };
  21 + }
  22 +
  23 + browserSync.instance = browserSync.init(files, {
  24 + startPath: '/',
  25 + server: {
  26 + baseDir: baseDir,
  27 + middleware: middleware,
  28 + routes: routes
  29 + },
  30 + browser: browser
  31 + });
  32 +}
  33 +
  34 +gulp.task('serve', ['watch'], function () {
  35 + browserSyncInit([
  36 + paths.tmp + '/serve',
  37 + paths.src
  38 + ], [
  39 + paths.tmp + '/serve/{app,components}/**/*.css',
  40 + paths.src + '/{app,components}/**/*.js',
  41 + paths.src + 'src/assets/images/**/*',
  42 + paths.tmp + '/serve/*.html',
  43 + paths.tmp + '/serve/{app,components}/**/*.html',
  44 + paths.src + '/{app,components}/**/*.html'
  45 + ]);
  46 +});
  47 +
  48 +gulp.task('serve:dist', ['build'], function () {
  49 + browserSyncInit(paths.dist);
  50 +});
  51 +
  52 +gulp.task('serve:e2e', ['inject'], function () {
  53 + browserSyncInit([paths.tmp + '/serve', paths.src], null, []);
  54 +});
  55 +
  56 +gulp.task('serve:e2e-dist', ['build'], function () {
  57 + browserSyncInit(paths.dist, null, []);
  58 +});
... ...
... ... @@ -0,0 +1,53 @@
  1 +'use strict';
  2 +
  3 +var gulp = require('gulp');
  4 +
  5 +var paths = gulp.paths;
  6 +
  7 +var $ = require('gulp-load-plugins')();
  8 +
  9 +gulp.task('styles', function () {
  10 +
  11 + var sassOptions = {
  12 + style: 'expanded'
  13 + };
  14 +
  15 + var injectFiles = gulp.src([
  16 + paths.src + '/{app,components}/**/*.scss',
  17 + '!' + paths.src + '/app/index.scss',
  18 + '!' + paths.src + '/app/vendor.scss'
  19 + ], { read: false });
  20 +
  21 + var injectOptions = {
  22 + transform: function(filePath) {
  23 + filePath = filePath.replace(paths.src + '/app/', '');
  24 + filePath = filePath.replace(paths.src + '/components/', '../components/');
  25 + return '@import \'' + filePath + '\';';
  26 + },
  27 + starttag: '// injector',
  28 + endtag: '// endinjector',
  29 + addRootSlash: false
  30 + };
  31 +
  32 + var indexFilter = $.filter('index.scss');
  33 +
  34 + return gulp.src([
  35 + paths.src + '/app/index.scss',
  36 + paths.src + '/app/vendor.scss'
  37 + ])
  38 + .pipe(indexFilter)
  39 + .pipe($.inject(injectFiles, injectOptions))
  40 + .pipe(indexFilter.restore())
  41 + .pipe($.rubySass(sassOptions)
  42 + .on('error', function (err) {
  43 + console.error('Error!', err.message);
  44 + })
  45 + )
  46 +
  47 + .pipe($.autoprefixer())
  48 + .on('error', function handleError(err) {
  49 + console.error(err.toString());
  50 + this.emit('end');
  51 + })
  52 + .pipe(gulp.dest(paths.tmp + '/serve/app/'));
  53 +});
... ...
gulp/unit-tests.js
... ... @@ -0,0 +1,35 @@
  1 +'use strict';
  2 +
  3 +var gulp = require('gulp');
  4 +
  5 +var $ = require('gulp-load-plugins')();
  6 +
  7 +var wiredep = require('wiredep');
  8 +
  9 +var paths = gulp.paths;
  10 +
  11 +function runTests (singleRun, done) {
  12 + var bowerDeps = wiredep({
  13 + directory: 'bower_components',
  14 + exclude: ['bootstrap-sass-official'],
  15 + dependencies: true,
  16 + devDependencies: true
  17 + });
  18 +
  19 + var testFiles = bowerDeps.js.concat([
  20 + paths.src + '/{app,components}/**/*.js'
  21 + ]);
  22 +
  23 + gulp.src(testFiles)
  24 + .pipe($.karma({
  25 + configFile: 'karma.conf.js',
  26 + action: (singleRun)? 'run': 'watch'
  27 + }))
  28 + .on('error', function (err) {
  29 + // Make sure failed tests cause gulp to exit non-zero
  30 + throw err;
  31 + });
  32 +}
  33 +
  34 +gulp.task('test', function (done) { runTests(true /* singleRun */, done) });
  35 +gulp.task('test:auto', function (done) { runTests(false /* singleRun */, done) });
... ...
... ... @@ -0,0 +1,14 @@
  1 +'use strict';
  2 +
  3 +var gulp = require('gulp');
  4 +
  5 +var paths = gulp.paths;
  6 +
  7 +gulp.task('watch', ['inject'], function () {
  8 + gulp.watch([
  9 + paths.src + '/*.html',
  10 + paths.src + '/{app,components}/**/*.scss',
  11 + paths.src + '/{app,components}/**/*.js',
  12 + 'bower.json'
  13 + ], ['inject']);
  14 +});
... ...
... ... @@ -0,0 +1,16 @@
  1 +'use strict';
  2 +
  3 +var gulp = require('gulp');
  4 +
  5 +gulp.paths = {
  6 + src: 'src',
  7 + dist: 'dist',
  8 + tmp: '.tmp',
  9 + e2e: 'e2e'
  10 +};
  11 +
  12 +require('require-dir')('./gulp');
  13 +
  14 +gulp.task('default', ['clean'], function () {
  15 + gulp.start('build');
  16 +});
... ...
... ... @@ -0,0 +1,17 @@
  1 +'use strict';
  2 +
  3 +module.exports = function(config) {
  4 +
  5 + config.set({
  6 + autoWatch : false,
  7 +
  8 + frameworks: ['jasmine'],
  9 +
  10 + browsers : ['PhantomJS'],
  11 +
  12 + plugins : [
  13 + 'karma-phantomjs-launcher',
  14 + 'karma-jasmine'
  15 + ]
  16 + });
  17 +};
... ...
... ... @@ -0,0 +1,53 @@
  1 +{
  2 + "name": "imigrationCrm-ui",
  3 + "version": "1.2.0",
  4 + "dependencies": {
  5 + "angular-chart.js": "^1.0.3",
  6 + "lodash": "~4.6.1"
  7 + },
  8 + "devDependencies": {
  9 + "browser-sync": "~1.7.1",
  10 + "chalk": "~0.5.1",
  11 + "del": "~0.1.3",
  12 + "gulp": "~3.9.0",
  13 + "gulp-angular-filesort": "~1.0.4",
  14 + "gulp-angular-templatecache": "~1.4.2",
  15 + "gulp-autoprefixer": "~2.0.0",
  16 + "gulp-consolidate": "~0.1.2",
  17 + "gulp-csso": "~0.2.9",
  18 + "gulp-filter": "~1.0.2",
  19 + "gulp-flatten": "~0.0.4",
  20 + "gulp-gh-pages": "^0.5.4",
  21 + "gulp-inject": "~1.0.2",
  22 + "gulp-jshint": "~1.9.0",
  23 + "gulp-karma": "~0.0.4",
  24 + "gulp-load-plugins": "~0.7.1",
  25 + "gulp-minify-html": "~0.1.7",
  26 + "gulp-ng-annotate": "~1.0.0",
  27 + "gulp-protractor": "~0.0.11",
  28 + "gulp-rename": "~1.2.0",
  29 + "gulp-replace": "~0.5.0",
  30 + "gulp-rev": "~2.0.1",
  31 + "gulp-rev-replace": "~0.3.1",
  32 + "gulp-ruby-sass": "~0.7.1",
  33 + "gulp-size": "~1.1.0",
  34 + "gulp-uglify": "~1.0.1",
  35 + "gulp-useref": "~1.0.2",
  36 + "http-proxy": "~1.7.0",
  37 + "jshint-stylish": "~1.0.0",
  38 + "karma-jasmine": "~0.3.1",
  39 + "karma-phantomjs-launcher": "~0.1.4",
  40 + "main-bower-files": "~2.4.0",
  41 + "protractor": "~1.4.0",
  42 + "require-dir": "~0.1.0",
  43 + "uglify-save-license": "~0.4.1",
  44 + "wiredep": "~2.2.0"
  45 + },
  46 + "engines": {
  47 + "node": ">=0.10.0"
  48 + },
  49 + "scripts": {
  50 + "init": "npm install",
  51 + "install": "bower install"
  52 + }
  53 +}
... ...
protractor.conf.js
... ... @@ -0,0 +1,25 @@
  1 +'use strict';
  2 +
  3 +var paths = require('./.yo-rc.json')['generator-gulp-angular'].props.paths;
  4 +
  5 +// An example configuration file.
  6 +exports.config = {
  7 + // The address of a running selenium server.
  8 + //seleniumAddress: 'http://localhost:4444/wd/hub',
  9 + //seleniumServerJar: deprecated, this should be set on node_modules/protractor/config.json
  10 +
  11 + // Capabilities to be passed to the webdriver instance.
  12 + capabilities: {
  13 + 'browserName': 'chrome'
  14 + },
  15 +
  16 + // Spec patterns are relative to the current working directly when
  17 + // protractor is called.
  18 + specs: [paths.e2e + '/**/*.js'],
  19 +
  20 + // Options to be passed to Jasmine-node.
  21 + jasmineNodeOpts: {
  22 + showColors: true,
  23 + defaultTimeoutInterval: 30000
  24 + }
  25 +};
... ...
... ... @@ -0,0 +1,157 @@
  1 +<!DOCTYPE html>
  2 +<html lang="en">
  3 + <head>
  4 + <meta charset="utf-8">
  5 + <title>Page Not Found :(</title>
  6 + <style>
  7 + ::-moz-selection {
  8 + background: #b3d4fc;
  9 + text-shadow: none;
  10 + }
  11 +
  12 + ::selection {
  13 + background: #b3d4fc;
  14 + text-shadow: none;
  15 + }
  16 +
  17 + html {
  18 + padding: 30px 10px;
  19 + font-size: 20px;
  20 + line-height: 1.4;
  21 + color: #737373;
  22 + background: #f0f0f0;
  23 + -webkit-text-size-adjust: 100%;
  24 + -ms-text-size-adjust: 100%;
  25 + }
  26 +
  27 + html,
  28 + input {
  29 + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  30 + }
  31 +
  32 + body {
  33 + max-width: 500px;
  34 + _width: 500px;
  35 + padding: 30px 20px 50px;
  36 + border: 1px solid #b3b3b3;
  37 + border-radius: 4px;
  38 + margin: 0 auto;
  39 + box-shadow: 0 1px 10px #a7a7a7, inset 0 1px 0 #fff;
  40 + background: #fcfcfc;
  41 + }
  42 +
  43 + h1 {
  44 + margin: 0 10px;
  45 + font-size: 50px;
  46 + text-align: center;
  47 + }
  48 +
  49 + h1 span {
  50 + color: #bbb;
  51 + }
  52 +
  53 + h3 {
  54 + margin: 1.5em 0 0.5em;
  55 + }
  56 +
  57 + p {
  58 + margin: 1em 0;
  59 + }
  60 +
  61 + ul {
  62 + padding: 0 0 0 40px;
  63 + margin: 1em 0;
  64 + }
  65 +
  66 + .container {
  67 + max-width: 380px;
  68 + _width: 380px;
  69 + margin: 0 auto;
  70 + }
  71 +
  72 + /* google search */
  73 +
  74 + #goog-fixurl ul {
  75 + list-style: none;
  76 + padding: 0;
  77 + margin: 0;
  78 + }
  79 +
  80 + #goog-fixurl form {
  81 + margin: 0;
  82 + }
  83 +
  84 + #goog-wm-qt,
  85 + #goog-wm-sb {
  86 + border: 1px solid #bbb;
  87 + font-size: 16px;
  88 + line-height: normal;
  89 + vertical-align: top;
  90 + color: #444;
  91 + border-radius: 2px;
  92 + }
  93 +
  94 + #goog-wm-qt {
  95 + width: 220px;
  96 + height: 20px;
  97 + padding: 5px;
  98 + margin: 5px 10px 0 0;
  99 + box-shadow: inset 0 1px 1px #ccc;
  100 + }
  101 +
  102 + #goog-wm-sb {
  103 + display: inline-block;
  104 + height: 32px;
  105 + padding: 0 10px;
  106 + margin: 5px 0 0;
  107 + white-space: nowrap;
  108 + cursor: pointer;
  109 + background-color: #f5f5f5;
  110 + background-image: -webkit-linear-gradient(rgba(255,255,255,0), #f1f1f1);
  111 + background-image: -moz-linear-gradient(rgba(255,255,255,0), #f1f1f1);
  112 + background-image: -ms-linear-gradient(rgba(255,255,255,0), #f1f1f1);
  113 + background-image: -o-linear-gradient(rgba(255,255,255,0), #f1f1f1);
  114 + -webkit-appearance: none;
  115 + -moz-appearance: none;
  116 + appearance: none;
  117 + *overflow: visible;
  118 + *display: inline;
  119 + *zoom: 1;
  120 + }
  121 +
  122 + #goog-wm-sb:hover,
  123 + #goog-wm-sb:focus {
  124 + border-color: #aaa;
  125 + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);
  126 + background-color: #f8f8f8;
  127 + }
  128 +
  129 + #goog-wm-qt:hover,
  130 + #goog-wm-qt:focus {
  131 + border-color: #105cb6;
  132 + outline: 0;
  133 + color: #222;
  134 + }
  135 +
  136 + input::-moz-focus-inner {
  137 + padding: 0;
  138 + border: 0;
  139 + }
  140 + </style>
  141 + </head>
  142 + <body>
  143 + <div class="container">
  144 + <h1>Not found <span>:(</span></h1>
  145 + <p>Sorry, but the page you were trying to view does not exist.</p>
  146 + <p>It looks like this was the result of either:</p>
  147 + <ul>
  148 + <li>a mistyped address</li>
  149 + <li>an out-of-date link</li>
  150 + </ul>
  151 + <script>
  152 + var GOOG_FIXURL_LANG = (navigator.language || '').slice(0,2),GOOG_FIXURL_SITE = location.host;
  153 + </script>
  154 + <script src="//linkhelp.clients.google.com/tbproxy/lh/wm/fixurl.js"></script>
  155 + </div>
  156 + </body>
  157 +</html>
... ...
src/app/app.config.js
... ... @@ -0,0 +1,147 @@
  1 +(function (){
  2 + 'use strict';
  3 +
  4 + angular.module('sbAdminApp')
  5 +
  6 + .config(function ($mdThemingProvider, $mdIconProvider, $httpProvider, USER_ROLES, AUTH_EVENTS) {
  7 +
  8 + $mdThemingProvider
  9 + .theme('default')
  10 + .primaryPalette('blue', {
  11 + 'default': '600'
  12 + })
  13 + .accentPalette('teal', {
  14 + 'default': '500'
  15 + })
  16 + .warnPalette('defaultPrimary');
  17 +
  18 + $mdThemingProvider
  19 + .theme('dark', 'default')
  20 + .primaryPalette('defaultPrimary')
  21 + .dark();
  22 +
  23 + $mdThemingProvider
  24 + .theme('grey', 'default')
  25 + .primaryPalette('grey');
  26 +
  27 + $mdThemingProvider
  28 + .theme('custom', 'default')
  29 + .primaryPalette('defaultPrimary', {
  30 + 'hue-1': '50'
  31 + });
  32 +
  33 + $mdThemingProvider
  34 + .definePalette('defaultPrimary', {
  35 + '50': '#FFFFFF',
  36 + '100': 'rgb(255, 198, 197)',
  37 + '200': '#E75753',
  38 + '300': '#E75753',
  39 + '400': '#E75753',
  40 + '500': '#E75753',
  41 + '600': '#E75753',
  42 + '700': '#E75753',
  43 + '800': '#E75753',
  44 + '900': '#E75753',
  45 + 'A100': '#E75753',
  46 + 'A200': '#E75753',
  47 + 'A400': '#E75753',
  48 + 'A700': '#E75753'
  49 + });
  50 + $mdIconProvider
  51 + .icon('user', 'assets/images/user.svg', 64);
  52 + })
  53 +
  54 + .run(['$rootScope', function($rootScope) {
  55 + $rootScope.userDetails = {};
  56 + $rootScope.userDetails.partyDetail = {};
  57 + if(localStorage.getItem("userDetails")){
  58 + $rootScope.userDetails = JSON.parse(localStorage.getItem("userDetails"));
  59 + $rootScope.auth = localStorage.getItem("auth");
  60 + }
  61 + }])
  62 +
  63 + .config(function ($httpProvider) {
  64 + $httpProvider.interceptors.push('httpRequestInterceptor');
  65 + })
  66 +
  67 + .factory('httpRequestInterceptor', ['$q', '$rootScope', '$location', function($q, $rootScope, $location) {
  68 + return {
  69 + request: function($config) {
  70 + //$config.headers['Authorization'] = 'Basic ' + $rootScope.auth;
  71 + return $config;
  72 + },
  73 + responseError: function(rejection) {
  74 + if (rejection.status === 401) {
  75 + //localStorage.clear();
  76 + //window.location.reload();
  77 + }
  78 + return $q.reject(rejection);
  79 + }
  80 + }
  81 + }])
  82 + .run(function($rootScope, $window, $state, LoginService, AUTH_EVENTS) {
  83 + $rootScope.$on('$stateChangeStart', function (event, next, nextParams, fromState) {
  84 + if ('data' in next && 'authorizedRoles' in next.data) {
  85 + var authorizedRoles = next.data.authorizedRoles;
  86 + if (!LoginService.isAuthorized(authorizedRoles)) {
  87 + event.preventDefault();
  88 + if($state.current.name.length == 0) {
  89 + $state.go('login')
  90 + } else {
  91 + $state.go($state.current, {}, {reload: true});
  92 + $rootScope.$broadcast(AUTH_EVENTS.notAuthorized);
  93 + $("background").remove();
  94 + }
  95 + }
  96 + }
  97 + if (LoginService.isAuthenticated()) {
  98 + if (next.name == 'login') {
  99 + event.preventDefault();
  100 + if($state.current.name.length == 0) {
  101 + $state.go('app.user');
  102 + } else {
  103 + $state.go($state.current, {}, {reload: true});
  104 + $rootScope.$broadcast(AUTH_EVENTS.notAuthorized);
  105 + }
  106 + }
  107 + }
  108 + });
  109 + })
  110 +
  111 + // .directive('apsUploadFile', apsUploadFile);
  112 +
  113 + // function apsUploadFile() {
  114 + // var directive = {
  115 + // restrict: 'E',
  116 + // template: '<input id="fileInput" type="file" class="ng-hide"> <md-icon class="material-icons" id="uploadButton">attach_file</md-icon> </md-button><md-input-container flex="100" md-no-float> <input id="textInput" ng-model="fileName" type="text" placeholder="choose file" ng-readonly="true"></md-input-container>',
  117 + // link: apsUploadFileLink
  118 + // };
  119 + // return directive;
  120 + // }
  121 +
  122 + // function apsUploadFileLink(scope, element, attrs) {
  123 + // var input = $(element[0].querySelector('#fileInput'));
  124 + // var button = $(element[0].querySelector('#uploadButton'));
  125 + // var textInput = $(element[0].querySelector('#textInput'));
  126 +
  127 + // if (input.length && button.length && textInput.length) {
  128 + // button.click(function(e) {
  129 + // input.click();
  130 + // });
  131 + // textInput.click(function(e) {
  132 + // input.click();
  133 + // });
  134 + // }
  135 +
  136 + // input.on('change', function(e) {
  137 + // var files = e.target.files;
  138 + // if (files[0]) {
  139 + // scope.fileName = files[0].name;
  140 + // } else {
  141 + // scope.fileName = null;
  142 + // }
  143 + // scope.$apply();
  144 + // });
  145 + // }
  146 +
  147 +})();
0 148 \ No newline at end of file
... ...
src/app/app.constant.js
... ... @@ -0,0 +1,20 @@
  1 +(function(){
  2 + 'use strict';
  3 +
  4 + angular.module('sbAdminApp')
  5 +
  6 + .constant("BASE_URL", "http://localhost:3002/api")
  7 + //.constant("BASE_URL", "http://192.168.1.131:4000/api")
  8 +
  9 + .constant('AUTH_EVENTS', {
  10 + updateUser: 'update-user',
  11 + notAuthorized: 'auth-not-authorized',
  12 + notAuthenticated: 'auth-not-authenticated'
  13 + })
  14 +
  15 + .constant('USER_ROLES', {
  16 + admin: 'ADMIN',
  17 + user: 'USER',
  18 + });
  19 +
  20 +})();
... ...
src/app/app.module.js
... ... @@ -0,0 +1,26 @@
  1 +(function () {
  2 + 'use strict';
  3 +
  4 + angular.module('sbAdminApp', [
  5 +
  6 + //Angular module
  7 + 'ngAnimate',
  8 + 'ngCookies'
  9 + ,'ngSanitize'
  10 + ,'ngResource'
  11 + ,'ui.router'
  12 + ,'ngMaterial'
  13 + ,'nvd3'
  14 + ,'toaster'
  15 + ,'md.data.table'
  16 + ,'ngMessages'
  17 + ,'chart.js'
  18 + ,'ls.ChangeStream'
  19 + ,'angular-web-notification'
  20 +
  21 + // Custom module
  22 + ,'sbAdminApp.authentication'
  23 + ,'sbAdminApp.navigation'
  24 + ,'sbAdminApp.user'
  25 + ]);
  26 +})();
0 27 \ No newline at end of file
... ...
src/app/app.route.js
... ... @@ -0,0 +1,42 @@
  1 +(function (){
  2 + 'use strict';
  3 +
  4 + angular.module('sbAdminApp')
  5 + .config(function ($stateProvider, $urlRouterProvider, USER_ROLES){
  6 + $urlRouterProvider.otherwise('/login');
  7 + $stateProvider
  8 + .state('app', {
  9 + url: '/app',
  10 + abstract: true,
  11 + templateUrl: 'app/components/navigation/template/navigation.html',
  12 + controller: 'MainController',
  13 + controllerAs: 'vm'
  14 + })
  15 + .state('login', {
  16 + url: '/login',
  17 + controller: 'LoginCtrl',
  18 + templateUrl: 'app/components/authentication/template/login.html',
  19 + data: {
  20 + title: 'Login'
  21 + }
  22 + })
  23 + .state('app.user', {
  24 + url: '/user',
  25 + controller: 'userCtrl',
  26 + templateUrl: 'app/components/user/template/user.html',
  27 + data: {
  28 + title: 'user',
  29 + authorizedRoles: [USER_ROLES.admin , USER_ROLES.user],
  30 + }
  31 + })
  32 + .state('app.startUp', {
  33 + url: '/startUp',
  34 + controller: 'userCtrl',
  35 + templateUrl: 'app/components/user/template/startUp.html',
  36 + data: {
  37 + title: 'user',
  38 + authorizedRoles: [USER_ROLES.admin , USER_ROLES.user],
  39 + }
  40 + })
  41 + })
  42 +})();
... ...
src/app/components/authentication/authentication.controller.js
... ... @@ -0,0 +1,59 @@
  1 +(function(){
  2 + 'use strict';
  3 +
  4 + angular.module('sbAdminApp')
  5 + .controller('LoginCtrl', ['$scope', '$rootScope', '$state','$mdDialog','$log', 'AUTH_EVENTS', 'LoginService', 'toaster', loginCtrl]);
  6 +
  7 + function loginCtrl($scope, $rootScope, $state, $mdDialog,$log, AUTH_EVENTS, LoginService ,toaster) {
  8 + $scope.doLogin = function() {
  9 + $rootScope.auth = window.btoa($scope.loginData.email + ':' + $scope.loginData.password);
  10 + LoginService.doLogin().save($scope.loginData).$promise.then(function(result) {
  11 + console.log("result",result);
  12 + if(result){
  13 + $rootScope.$broadcast(AUTH_EVENTS.updateUser);
  14 + LoginService.setUser(result);
  15 + /*if(result.role === 'admin'){
  16 + $state.go("app.user");
  17 + } else {
  18 + $state.go("app.");
  19 + } */
  20 + $state.go("app.user");
  21 + }
  22 + if (Notification.permission !== 'denied') {
  23 + Notification.requestPermission(function(permission) {
  24 + // If the user accepts, let's create a notification
  25 + if (permission === "granted") {
  26 + /*var notification = new Notification("Hello!");*/
  27 + }
  28 + });
  29 + }
  30 + },
  31 + function error(error) {
  32 + console.log("ererrorror",error);
  33 + if(error){
  34 + toaster.error("server error");
  35 + }
  36 + });
  37 +
  38 + }
  39 + $scope.signUp=function(){
  40 +
  41 + LoginService.signUp().save($scope.signupData).$promise.then(function(result) {
  42 + console.log("result",result);
  43 + // toaster.success("signed up successfully")
  44 + $mdDialog.show(
  45 + $mdDialog.alert()
  46 + .clickOutsideToClose(true)
  47 + .title()
  48 + .textContent("Please check your email and click on the verification link before logging in.")
  49 + .ariaLabel('Alert')
  50 + .ok('ok')
  51 + );
  52 +
  53 + });
  54 +
  55 +
  56 + }
  57 +
  58 + }
  59 +})();
0 60 \ No newline at end of file
... ...
src/app/components/authentication/authentication.module.js
... ... @@ -0,0 +1,5 @@
  1 +(function () {
  2 +
  3 + angular.module('sbAdminApp.authentication', []);
  4 +
  5 +})();
... ...
src/app/components/authentication/authentication.service.js
... ... @@ -0,0 +1,70 @@
  1 +(function(){
  2 + 'use strict';
  3 +
  4 + angular.module('sbAdminApp')
  5 + .service('LoginService', ['$q', '$http', '$rootScope', '$resource', 'BASE_URL', 'USER_ROLES', LoginService]);
  6 +
  7 + function LoginService($q, $http, $rootScope, $resource, BASE_URL, USER_ROLES) {
  8 +
  9 + var authService = {},
  10 + admin = '',
  11 + user = '',
  12 + role = '',
  13 + isAuthenticated = false;
  14 +
  15 + if (window.localStorage.getItem("loginStatus")) {
  16 + isAuthenticated = true;
  17 + $rootScope.userDetails = JSON.parse(localStorage.getItem("userDetails"));
  18 + role = $rootScope.userDetails.role.toUpperCase();
  19 + }
  20 +
  21 + this.setUser = function (res) {
  22 + localStorage.setItem('loginStatus', true);
  23 + localStorage.setItem('userDetails', JSON.stringify(res));
  24 + isAuthenticated = true;
  25 + $rootScope.userDetails = JSON.parse(localStorage.getItem("userDetails"));
  26 + role = $rootScope.userDetails.role.toUpperCase();
  27 + }
  28 +
  29 + this.isAuthenticated = function () {
  30 + return isAuthenticated;
  31 + };
  32 +
  33 + this.role = function () {
  34 + return role;
  35 + };
  36 +
  37 + this.getUser = function () {
  38 + return JSON.parse(window.localStorage.getItem("userDetails"));
  39 + }
  40 +
  41 + this.isAuthorized = function (authorizedRoles) {
  42 + if (!angular.isArray(authorizedRoles)) {
  43 + authorizedRoles = [authorizedRoles];
  44 + }
  45 + return (this.isAuthenticated() && authorizedRoles.indexOf(role) !== -1);
  46 + }
  47 +
  48 + this.signUp = function() {
  49 + return $resource(BASE_URL+'/users/signUp');
  50 + }
  51 +
  52 + //Resource for REST APIs
  53 + this.doLogin = function() {
  54 + return $resource(BASE_URL+'/users/login');
  55 + }
  56 +
  57 + this.logOut = function(){
  58 + return $resource(BASE_URL+'/users/logout',
  59 + {access_token:$rootScope.userDetails.id})
  60 + }
  61 +
  62 + this.deleteUser = function () {
  63 + isAuthenticated = false;
  64 + $rootScope.$loginStatus = false;
  65 + localStorage.clear();
  66 + }
  67 +
  68 + }
  69 +
  70 +})();
0 71 \ No newline at end of file
... ...
src/app/components/authentication/template/login.html
... ... @@ -0,0 +1,64 @@
  1 +<h1 class="heading" style="text-align:center;">Startup Jalsa</h1>
  2 +<md-content class="md-padding" layout="row" layout-wrap layout-align="end center" style="width: 100%;background-color: #e0e0e0;">
  3 + <md-card style="padding: 0px 20px;width:55%;margin-top: -180px;">
  4 + <md-card-title>
  5 + <md-card-title-text style="text-align: center;color: dodgerblue;">
  6 + <span class="md-headline">Login</span>
  7 + </md-card-title-text>
  8 + </md-card-title>
  9 +
  10 + <form name="loginForm">
  11 + <div layout="column">
  12 + <md-input-container class="md-block md-icon-float">
  13 + <label>Email</label>
  14 + <md-icon md-svg-src="assets/images/ic_email_black_24px.svg" class="name"></md-icon>
  15 + <input ng-model="loginData.email">
  16 + </md-input-container>
  17 + <md-input-container class="md-block md-icon-float">
  18 + <label>Password</label>
  19 + <md-icon md-svg-src="assets/images/ic_remove_red_eye_black_24px.svg" class="password"></md-icon>
  20 + <input type="password" ng-model="loginData.password">
  21 + </md-input-container>
  22 + <section layout="column" layout-align="start">
  23 + <md-button class="md-primary md-raised" ng-click="doLogin()">Login</md-button>
  24 + </section>
  25 + </div>
  26 + </form>
  27 +</md-card>
  28 +</md-content>
  29 +<md-content class="md-padding" layout="row" layout-wrap layout-align="start center" style="width: 100%;background-color:#e0e0e0;">
  30 + <md-card style="padding: 0px 20px;width:60%;">
  31 + <md-card-title>
  32 + <md-card-title-text style="text-align: center;color: dodgerblue;">
  33 + <span class="md-headline">Sign Up</span>
  34 + </md-card-title-text>
  35 + </md-card-title>
  36 + <div layout="column">
  37 + <md-input-container class="md-block md-icon-float">
  38 + <label>Username</label>
  39 + <md-icon md-svg-src="assets/images/ic_person_black_24px.svg" class="name"></md-icon>
  40 + <input ng-model="signupData.username">
  41 + </md-input-container>
  42 + <md-input-container class="md-block md-icon-float">
  43 + <label>Email</label>
  44 + <md-icon md-svg-src="assets/images/ic_email_black_24px.svg" class="email"></md-icon>
  45 + <input ng-model="signupData.email">
  46 + </md-input-container>
  47 + <md-input-container class="md-block md-icon-float">
  48 + <label>Password</label>
  49 + <md-icon md-svg-src="assets/images/ic_remove_red_eye_black_24px.svg" class="password"></md-icon>
  50 + <input type="password" ng-model="signupData.password">
  51 + </md-input-container>
  52 + <md-input-container class="md-block md-icon-float">
  53 + <label>Confirm Password</label>
  54 + <md-icon md-svg-src="assets/images/ic_remove_red_eye_black_24px.svg" class="confirmPassword"></md-icon>
  55 + <input type="password" ng-model="signupData.confirmPassword">
  56 + </md-input-container>
  57 + <section layout="column" layout-align="start">
  58 + <md-button class="md-primary md-raised" ng-click="signUp()">sign up</md-button>
  59 + </section>
  60 + </div>
  61 + </form>
  62 + </md-card>
  63 +</md-content>
  64 +<toaster-container toaster-options="{'time-out': 2000, 'close-button':true, 'animation-class': 'toast-top-right'}"></toaster-container>
0 65 \ No newline at end of file
... ...
src/app/components/navigation/navigation.controller.js
... ... @@ -0,0 +1,119 @@
  1 +(function(){
  2 + 'use strict';
  3 +
  4 + angular.module('sbAdminApp')
  5 + .controller('con',['$scope',con])
  6 + .controller('MainController', ['navService','$rootScope','$mdSidenav', '$mdBottomSheet', '$log', '$q', '$state', '$mdToast', '$scope', '$mdMedia', '$mdDialog','LoginService', 'toaster', MainController]);
  7 +
  8 + function MainController(navService,$rootScope, $mdSidenav, $mdBottomSheet, $log, $q, $state, $mdToast, $scope, $mdMedia, $mdDialog, LoginService, toaster) {
  9 + var vm = this;
  10 + //vm.menuItems = [ ];
  11 + vm.selectItem = selectItem;
  12 + vm.toggleItemsList = toggleItemsList;
  13 + vm.showActions = showActions;
  14 + vm.title = $state.current.data.title;
  15 + vm.showSimpleToast = showSimpleToast;
  16 + vm.toggleRightSidebar = toggleRightSidebar;
  17 + vm.autoFocusContent = false;
  18 + vm.isOpen = isOpen;
  19 + vm.toggleOpen = toggleOpen;
  20 +
  21 + vm.menu = navService;
  22 +
  23 + $scope.companyName = localStorage.getItem("companyName");
  24 +
  25 + /*navService.loadAllItems().then(function(menuItems) {
  26 + vm.menuItems = [].concat(menuItems);
  27 + });*/
  28 +
  29 + function toggleRightSidebar() {
  30 + $mdSidenav('right').toggle();
  31 + }
  32 +
  33 + function toggleItemsList() {
  34 + var pending = $mdBottomSheet.hide() || $q.when(true);
  35 + pending.then(function(){
  36 + $mdSidenav('left').toggle();
  37 + });
  38 + }
  39 +
  40 + function isOpen(section) {
  41 + return navService.isSectionSelected(section);
  42 + }
  43 +
  44 + function toggleOpen(section) {
  45 + navService.toggleSelectSection(section);
  46 + }
  47 +
  48 + function selectItem (item) {
  49 + /*$scope.searchDID = false;
  50 + if(item.name == 'DID'){
  51 + $scope.searchDID = true;
  52 + }*/
  53 + vm.title = item.name;
  54 + vm.toggleItemsList();
  55 + vm.showSimpleToast(vm.title);
  56 + }
  57 +
  58 + function showActions($event) {
  59 + $mdBottomSheet.show({
  60 + parent: angular.element(document.getElementById('content')),
  61 + templateUrl: 'app/views/partials/bottomSheet.html',
  62 + controller: [ '$mdBottomSheet', SheetController],
  63 + controllerAs: "vm",
  64 + bindToController : true,
  65 + targetEvent: $event
  66 + }).then(function(clickedItem) {
  67 + clickedItem && $log.debug( clickedItem.name + ' clicked!');
  68 + });
  69 +
  70 + function SheetController( $mdBottomSheet ) {
  71 + var vm = this;
  72 +
  73 + vm.actions = [
  74 + { name: 'Share', icon: 'share', url: 'https://twitter.com/intent/tweet?text=Angular%20Material%20Dashboard%20https://github.com/flatlogic/angular-material-dashboard%20via%20@flatlogicinc' },
  75 + { name: 'Star', icon: 'star', url: 'https://github.com/flatlogic/angular-material-dashboard/stargazers' }
  76 + ];
  77 +
  78 + vm.performAction = function(action) {
  79 + $mdBottomSheet.hide(action);
  80 + };
  81 + }
  82 + }
  83 +
  84 + function showSimpleToast(title) {
  85 + $mdToast.show(
  86 + $mdToast.simple()
  87 + .content(title)
  88 + .hideDelay(2000)
  89 + .position('bottom right')
  90 + );
  91 + }
  92 +
  93 + $scope.logout = function() {
  94 + LoginService.logOut().save().$promise.then(function(result){
  95 + window.location.reload();
  96 + LoginService.deleteUser();
  97 + $state.go("login");
  98 +
  99 + }, function(error){
  100 + if(error){
  101 + toaster.error("server error");
  102 + }
  103 + });
  104 + }
  105 + }
  106 +
  107 + function con($scope){
  108 + $scope.class = "sidebar-full";
  109 + $scope.changeClass = function(){
  110 + if ($scope.class === "sidebar-full"){
  111 + $scope.class = "sidebar-mini";
  112 + }
  113 + else{
  114 + $scope.class = "sidebar-full";
  115 + }
  116 +
  117 + };
  118 + }
  119 +})();
0 120 \ No newline at end of file
... ...
src/app/components/navigation/navigation.module.js
... ... @@ -0,0 +1,5 @@
  1 +(function () {
  2 +
  3 + angular.module('sbAdminApp.navigation', []);
  4 +
  5 +})();
... ...
src/app/components/navigation/navigation.service.js
... ... @@ -0,0 +1,57 @@
  1 +(function(){
  2 +
  3 + 'use strict';
  4 +
  5 + angular.module('sbAdminApp').factory('navService', [ '$location', '$rootScope', function ($location, $rootScope) {
  6 +
  7 +
  8 + var section = [];
  9 +
  10 + section.push({
  11 + name: 'Recommend a Startup',
  12 + type: 'link',
  13 + sref: '.user',
  14 + role: ['user'],
  15 + });
  16 +
  17 + section.push({
  18 + name: 'Apply Late as Startup',
  19 + type: 'link',
  20 + sref: '.startUp',
  21 + role: ['user'],
  22 + });
  23 +
  24 + var sections = [];
  25 + for(var i = 0; i < section.length; i++) {
  26 + if(section[i].role.indexOf($rootScope.userDetails.role) !== -1){
  27 + sections.push(section[i]);
  28 + }
  29 + }
  30 +
  31 + var self;
  32 +
  33 + return self = {
  34 + sections: sections,
  35 +
  36 + toggleSelectSection: function (section) {
  37 + self.openedSection = (self.openedSection === section ? null : section);
  38 + },
  39 + isSectionSelected: function (section) {
  40 + return self.openedSection === section;
  41 + },
  42 +
  43 + selectPage: function (section, page) {
  44 + page && page.url && $location.path(page.url);
  45 + self.currentSection = section;
  46 + self.currentPage = page;
  47 + }
  48 + };
  49 +
  50 + function sortByHumanName(a, b) {
  51 + return (a.humanName < b.humanName) ? -1 :
  52 + (a.humanName > b.humanName) ? 1 : 0;
  53 + }
  54 +
  55 + }])
  56 +
  57 +})();
0 58 \ No newline at end of file
... ...
src/app/components/navigation/template/navigation.html
... ... @@ -0,0 +1,73 @@
  1 +<md-sidenav class="md-sidenav-left md-whiteframe-z2" md-component-id="left" md-is-locked-open="$mdMedia('gt-sm')">
  2 + <md-toolbar md-theme="default" class="md-theme-indigo">
  3 + <h1 class="md-toolbar-tools" style="white-space: pre;
  4 + font-size: 14px">
  5 + WELCOME TO YC APPLY
  6 + </h1>
  7 + </md-toolbar>
  8 +
  9 + <div class="navigation-container">
  10 + <div class="toggle-box">
  11 + <!-- <md-button hide-sm hide-xs ng-click="changeClass()" class="size-toggle toggle-left">
  12 + <i class="material-icons">menu</i>
  13 + </md-button> -->
  14 +<!-- <md-button hide-sm hide-xs ng-click="logout()" class="size-toggle toggle-right">
  15 + <i class="material-icons">power_settings_new</i>
  16 + </md-button> -->
  17 + </div>
  18 + </div>
  19 +
  20 + <md-content class="custom-md-content" role="navigation">
  21 + <ul class="side-menu">
  22 + <li ng-repeat="item in vm.menu.sections" class="parent-list-item hover-link" ng-class="{'parentActive' : vm.isSectionSelected(item)}" ui-sref-active="md-warn">
  23 + <h2 class="menu-heading" ng-if="item.type === 'heading'" id="heading_{{ item.name }}">
  24 + {{item}}
  25 + </h2>
  26 + <menu-link section="item" ng-if="item.type === 'link'"></menu-link>
  27 + <menu-toggle section="item" ng-if="item.type === 'toggle'"></menu-toggle>
  28 + </li>
  29 + </ul>
  30 + </md-content>
  31 +</md-sidenav>
  32 +
  33 +<div layout="column" flex>
  34 + <md-toolbar md-theme="default" layout="row" layout-align="end center">
  35 + <!-- <i class="material-icons" style="cursor: pointer;" ng-click="c2c(customer.phone)">phone
  36 + <md-tooltip>Click To Call</md-tooltip>
  37 + </i> &nbsp &nbsp -->
  38 + <md-menu md-position-mode="target-right target">
  39 + <md-button aria-label="Open logout menu" class="md-icon-button" ng-click="$mdOpenMenu($event)">
  40 + <md-icon md-menu-origin md-svg-src="assets/images/ic_person_white_24px.svg"></md-icon>
  41 + </md-button>
  42 + <md-menu-content width="3" style="background-color:#ffffff";>
  43 + <md-menu-item>
  44 + <md-button ui-sref="app.myProfile">
  45 + <div layout="row" style="color:#000";>
  46 + <p flex>My Profile</p>
  47 + </div>
  48 + </md-button>
  49 + </md-menu-item>
  50 + <md-menu-item>
  51 + <md-button ui-sref="app.changePassword">
  52 + <div layout="row" style="color:#000";>
  53 + <p flex>Change Password</p>
  54 + </div>
  55 + </md-button>
  56 + </md-menu-item>
  57 + <md-menu-item>
  58 + <md-button ng-click="logout();">
  59 + <div layout="row" style="color:#000";>
  60 + <p flex>Logout</p>
  61 + </div>
  62 + </md-button>
  63 + </md-menu-item>
  64 + </md-menu-content>
  65 + </md-menu>
  66 + </md-toolbar>
  67 +
  68 + <toaster-container toaster-options="{'time-out': 2000, 'close-button':true, 'animation-class': 'toast-top-right'}"></toaster-container>
  69 +
  70 + <md-content flex class="md-padding page-content">
  71 + <div ui-view></div>
  72 + </md-content>
  73 +</div>
0 74 \ No newline at end of file
... ...
src/app/components/user/template/startUp.html
... ... @@ -0,0 +1,8 @@
  1 +<h1 class="md-title headline">Startup Jalsa:</h1><br></br>
  2 +<form name="awardsForm" novalidate>
  3 + <div>
  4 + <label>Company name:</label>
  5 + <input ng-model="data.heading" type="text" name="heading" required>
  6 + </div>
  7 +</form>
  8 +
0 9 \ No newline at end of file
... ...
src/app/components/user/template/user.html
... ... @@ -0,0 +1,5 @@
  1 +<h3>YC Recommendations:</h3><br>
  2 +<div>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.</div><br>
  3 +<div>You can recommend as many founders as you like, and then use this page to keep track of their applications.</div><br>
  4 +<div>Thank you!</div><br>
  5 +<div>Y Combinator</div>
... ...
src/app/components/user/user.controller.js
... ... @@ -0,0 +1,12 @@
  1 +(function(){
  2 + 'use strict';
  3 +
  4 + angular.module('sbAdminApp')
  5 + .controller('userCtrl', ['$scope', '$rootScope', '$state','$log', 'AUTH_EVENTS', 'userService', 'toaster', userCtrl]);
  6 +
  7 + function userCtrl($scope, $rootScope, $state,$log, AUTH_EVENTS, userService ,toaster) {
  8 +
  9 +
  10 + }
  11 +
  12 + })();
0 13 \ No newline at end of file
... ...
src/app/components/user/user.module.js
... ... @@ -0,0 +1,5 @@
  1 +(function () {
  2 +
  3 + angular.module('sbAdminApp.user', []);
  4 +
  5 +})();
... ...
src/app/components/user/user.service.js
... ... @@ -0,0 +1,11 @@
  1 +(function(){
  2 + 'use strict';
  3 +
  4 + angular.module('sbAdminApp')
  5 + .service('userService', ['$q', '$http', '$rootScope', '$resource', 'BASE_URL', 'USER_ROLES', userService]);
  6 +
  7 + function userService($q, $http, $rootScope, $resource, BASE_URL, USER_ROLES) {
  8 +
  9 + }
  10 +
  11 + })();
... ...
src/app/directive/menu_toggle.directive.js
... ... @@ -0,0 +1,44 @@
  1 +angular.module('sbAdminApp')
  2 + .run(['$templateCache', function ($templateCache) {
  3 + $templateCache.put('partials/menu-toggle.tmpl.html',
  4 + '<md-button class="md-button-toggle"\n' +
  5 + ' ng-click="toggle()"\n' +
  6 + ' aria-controls="docs-menu-{{section.name}}"\n' +
  7 + ' flex layout="row"\n' +
  8 + ' aria-expanded="{{isOpen()}}">\n' +
  9 + ' <i class="material-icons">{{section.icon}}</i>\n' +
  10 + ' {{section.name}}\n' +
  11 + ' <span aria-hidden="true" class=" pull-right fa fa-chevron-down md-toggle-icon"\n' +
  12 + ' ng-class="{\'toggled\' : isOpen()}"></span>\n' +
  13 + '</md-button>\n' +
  14 + '<ul ng-show="isOpen()" id="docs-menu-{{section.name}}" class="menu-toggle-list">\n' +
  15 + ' <li ng-repeat="page in section.pages">\n' +
  16 + ' <menu-link section="page"></menu-link>\n' +
  17 + ' </li>\n' +
  18 + '</ul>\n' +
  19 + '');
  20 + }])
  21 + .directive('menuToggle', ['$timeout', function ($timeout ) {
  22 + return {
  23 + scope: {
  24 + section: '='
  25 + },
  26 + templateUrl: 'partials/menu-toggle.tmpl.html',
  27 + link: function (scope, element) {
  28 + var controller = element.parent().controller();
  29 +
  30 + scope.isOpen = function () {
  31 + return controller.isOpen(scope.section);
  32 + };
  33 + scope.toggle = function () {
  34 + controller.toggleOpen(scope.section);
  35 + };
  36 +
  37 + var parentNode = element[0].parentNode.parentNode.parentNode;
  38 + if (parentNode.classList.contains('parent-list-item')) {
  39 + var heading = parentNode.querySelector('h2');
  40 + element[0].firstChild.setAttribute('aria-describedby', heading.id);
  41 + }
  42 + }
  43 + };
  44 + }])
0 45 \ No newline at end of file
... ...
src/app/directive/menulink.directive.js
... ... @@ -0,0 +1,36 @@
  1 +(function(){
  2 + 'use strict';
  3 +
  4 + angular.module('sbAdminApp')
  5 + .run(['$templateCache', function ($templateCache) {
  6 + $templateCache.put('partials/menu-link.tmpl.html',
  7 + '<md-button ng-class="{\'{{section.icon}}\' : true}" ui-sref-active="active" \n' +
  8 + ' ui-sref="{{section.sref}}" style=" text-transform: capitalize; " ng-click="focusSection()">\n' +
  9 + ' <i class="material-icons">{{section.icon}}</i>\n' +
  10 + ' {{section.name}}\n' +
  11 + ' <span class="md-visually-hidden "\n' +
  12 + ' ng-if="isSelected()">\n' +
  13 + ' current page\n' +
  14 + ' </span>\n' +
  15 + '</md-button>\n' +
  16 + '');
  17 + }])
  18 + .directive('menuLink', function () {
  19 + return {
  20 + scope: {
  21 + section: '='
  22 + },
  23 + templateUrl: 'partials/menu-link.tmpl.html',
  24 + link: function ($scope, $element) {
  25 + var controller = $element.parent().controller();
  26 +
  27 + $scope.focusSection = function () {
  28 + // set flag to be used later when
  29 + // $locationChangeSuccess calls openPage()
  30 + controller.autoFocusContent = true;
  31 + };
  32 + }
  33 + };
  34 + })
  35 +})();
  36 +
... ...
src/app/index.scss
... ... @@ -0,0 +1,16 @@
  1 +// injector
  2 +// endinjector
  3 +
  4 +
  5 +/* Custom CSS */
  6 +
  7 +
  8 +body{
  9 + color:#000;
  10 +}
  11 +
  12 +.iframe{
  13 + width:100% ;
  14 + height:800px ;
  15 + border:0;
  16 +}
0 17 \ No newline at end of file
... ...
src/app/stylesheets/_custom.scss
... ... @@ -0,0 +1,509 @@
  1 +// COLORS
  2 +$main-bg-color: #ECECEC;
  3 +$text-color: #7A7A7A;
  4 +$accent-color: rgb(0, 150, 136);
  5 +$warning-color: #E75753;
  6 +
  7 +
  8 +// VARIABLES
  9 +$left-sidenav-width: 200px;
  10 +$widget-height: 310px;
  11 +$font-weight-bold: 600;
  12 +$font-size-large: 20px;
  13 +
  14 +
  15 +// LAYOUT
  16 +body {
  17 + color: $text-color;
  18 +}
  19 +
  20 +.toolbar-button {
  21 + min-width: 20px;
  22 +}
  23 +
  24 +.share-label {
  25 + vert-align: middle;
  26 + margin-left: 10px;
  27 +}
  28 +
  29 +.page-content {
  30 + background-color: $main-bg-color;
  31 +}
  32 +
  33 +.widget-progress {
  34 + width: 95% !important;
  35 + margin-left: 10px;
  36 +}
  37 +
  38 +
  39 +// UTILS
  40 +.capitalize {
  41 + text-transform: capitalize;
  42 +}
  43 +
  44 +.img-circle {
  45 + height: 50px;
  46 + border-radius: 50%;
  47 + margin: 0 10px;
  48 +}
  49 +
  50 +
  51 +// COMPONENTS
  52 +.messages {
  53 + position: relative;
  54 +
  55 + &-content {
  56 + height: 100vh;
  57 + }
  58 +}
  59 +
  60 +.notifications-label {
  61 + width: 16px;
  62 + height: 16px;
  63 + line-height: 16px;
  64 + text-align: center;
  65 + border-radius: 50%;
  66 + position: absolute;
  67 + font-size: 12px;
  68 + top: 2px;
  69 + right: 2px;
  70 + background-color: $warning-color;
  71 +}
  72 +
  73 +// panel-widget
  74 +.panel-widget {
  75 + background-color: white;
  76 +
  77 + &-toolbar {
  78 + box-shadow: none;
  79 + }
  80 +
  81 + &-tittle {
  82 + color: $text-color;
  83 + }
  84 +}
  85 +
  86 +.options {
  87 + -webkit-transition:all linear 0.5s;
  88 + transition:all linear 0.5s;
  89 +}
  90 +
  91 +.options.ng-hide {
  92 + opacity:0;
  93 +}
  94 +
  95 +.fixed-height-widget {
  96 + height: $widget-height;
  97 +}
  98 +
  99 +// charts
  100 +.donut-chart-title{
  101 + text-align: center;
  102 +}
  103 +
  104 +.custom-tooltip {
  105 + font-size: $font-size-large;
  106 + color: $text-color;
  107 + text-align: center;
  108 +}
  109 +
  110 +
  111 +// OVERRIDES
  112 +// angular material overrides
  113 +md-radio-group {
  114 + border: none;
  115 +}
  116 +
  117 +md-icon {
  118 + height: auto;
  119 +}
  120 +
  121 +md-sidenav.md-locked-open.md-sidenav-left {
  122 + width: $left-sidenav-width;
  123 + min-width: $left-sidenav-width;
  124 + max-width: $left-sidenav-width;
  125 +}
  126 +
  127 +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 {
  128 + color: white;
  129 +}
  130 +
  131 +md-radio-button.md-accent.md-checked .md-label span {
  132 + color: $accent-color;
  133 +}
  134 +
  135 +.md-toolbar-tools h1 {
  136 + font-size: $font-size-large;
  137 +}
  138 +
  139 +
  140 +md-backdrop.md-sidenav-backdrop {
  141 + position: fixed;
  142 +}
  143 +
  144 +// libs overrides
  145 +.material-icons {
  146 + vertical-align: middle;
  147 +}
  148 +
  149 +.material-icons.md-18 { font-size: 18px; }
  150 +.material-icons.md-24 { font-size: 24px; }
  151 +.material-icons.md-36 { font-size: 36px; }
  152 +.material-icons.md-48 { font-size: 48px; }
  153 +
  154 +.nvd3.nv-pie .nv-pie-title {
  155 + fill: rgb(68, 68, 68);
  156 + font-weight: $font-weight-bold;
  157 + font-size: $font-size-large !important;
  158 +}
  159 +
  160 +.nvtooltip {
  161 + background-color: transparent;
  162 + border: none;
  163 + font-weight: $font-weight-bold;
  164 +}
  165 +
  166 +.orange .md-bar2 {
  167 + background-color: orange;
  168 +}
  169 +
  170 +.orange .md-container {
  171 + background-color: rgb(255, 236, 201)
  172 +}
  173 +
  174 +
  175 +/* Custom by Anurag */
  176 +
  177 +//variables
  178 +$sidenav-mobile-width: 190px;
  179 +
  180 +md-sidenav {
  181 + width: $sidenav-mobile-width;
  182 +}
  183 +
  184 +.vertical {
  185 + padding-right: 5px;
  186 + border-right-style: groove;
  187 +}
  188 +
  189 +md-toolbar .md-menu {
  190 + margin: 0 !important;
  191 +}
  192 +
  193 +/*form validation*/
  194 +
  195 +.help-block {
  196 + color: red;
  197 + font-size: 11px;
  198 +}
  199 +
  200 +
  201 +
  202 +
  203 +
  204 +/* Styles go here */
  205 +
  206 +body {
  207 + font-family: 'Ubuntu', sans-serif;
  208 + color: orangered;
  209 +}
  210 +
  211 +.fill-height{
  212 + display: flex;
  213 + flex: 1;
  214 + min-height: 100%;
  215 +}
  216 +
  217 +.fill-height > div{
  218 + min-height: 100%;
  219 + display: flex;
  220 +}
  221 +
  222 +md-sidenav {
  223 + overflow: visible;
  224 +
  225 +}
  226 +.side-menu, .side-menu ul {
  227 + list-style: none;
  228 + padding: 0;
  229 + margin-top: 0;
  230 +}
  231 +
  232 +.side-menu .md-button.active {
  233 + color: rgb(30,136,229);
  234 +}
  235 +
  236 +.side-menu .menu-toggle-list a.md-button {
  237 + display: block;
  238 + padding: 0 16px 0 32px;
  239 + text-transform: none;
  240 + text-rendering: optimizeLegibility;
  241 + font-weight: 500;
  242 +}
  243 +
  244 +.side-menu .menu-toggle-list .md-button {
  245 + display: block;
  246 + padding: 0 16px 0 32px;
  247 + text-transform: none;
  248 +}
  249 +
  250 +.side-menu > li {
  251 + border-top: 1px solid rgba(0, 0, 0, 0.12);
  252 +}
  253 +
  254 +.md-button-toggle .md-toggle-icon.toggled {
  255 + transform: rotateZ(180deg);
  256 + -webkit-transform: rotateZ(180deg);
  257 +}
  258 +
  259 +.side-menu .md-button-toggle .md-toggle-icon {
  260 + background-size: 100% auto;
  261 + display: inline-block;
  262 + margin: auto 0 auto auto;
  263 + width: 15px;
  264 + color: darkgray;
  265 + transition: transform .3s ease-in-out;
  266 + -webkit-transition: -webkit-transform .3s ease-in-out;
  267 +}
  268 +
  269 +.menu-toggle-list.ng-hide {
  270 + max-height: 0;
  271 +}
  272 +
  273 +.side-menu .md-button {
  274 + border-radius: 0;
  275 + color: inherit;
  276 + cursor: pointer;
  277 + font-weight: 400;
  278 + line-height: 40px;
  279 + margin: 0;
  280 + max-height: 40px;
  281 + overflow: hidden;
  282 + padding: 0px 16px;
  283 + text-align: left;
  284 + text-decoration: none;
  285 + white-space: normal;
  286 + width: 100%;
  287 +}
  288 +
  289 +.menu-toggle-list {
  290 + background: #fff;
  291 + max-height: 1300px;
  292 + overflow: hidden;
  293 + position: relative;
  294 + z-index: 1;
  295 + -webkit-transition: 0.75s cubic-bezier(0.35, 0, 0.25, 1);
  296 + -webkit-transition-property: max-height;
  297 + -moz-transition: 0.75s cubic-bezier(0.35, 0, 0.25, 1);
  298 + -moz-transition-property: max-height;
  299 + transition: 0.75s cubic-bezier(0.35, 0, 0.25, 1);
  300 + transition-property: max-height;
  301 +}
  302 +
  303 +
  304 +.side-menu menu-toggle span{
  305 + padding-top: 12px;
  306 + padding-bottom: 12px;
  307 +}
  308 +
  309 +
  310 +
  311 +
  312 +
  313 +.noShadow{
  314 + box-shadow:none;
  315 +}
  316 +.borderNew{
  317 + border-bottom:1px solid;
  318 + border-color:rgba(128, 128, 128, 0.25);
  319 +}
  320 +.noMargin{
  321 + margin:0px;
  322 +}
  323 +.height25{
  324 + height:25px;
  325 +}
  326 +.carrierBtn{
  327 + width:300px;
  328 + height:200px;
  329 + background-color:#fff;
  330 + box-shadow:0px 0px 10px #666;
  331 + text-align:center;
  332 + line-height:200px;
  333 + font-size:30px;
  334 + float:left;
  335 + cursor:pointer;
  336 + -webkit-transition:0.2s;
  337 +}
  338 +.carrierBtn:first-child{
  339 + margin-right:50px;
  340 +}
  341 +.carrierBtn:hover{
  342 + background-color:rgb(30,136,229);
  343 + color:#fff;
  344 +}
  345 +.carrierBtnSelected{
  346 + background-color:rgb(30,136,229);
  347 + color:#fff;
  348 +}
  349 +.myWrapper{
  350 + min-height:500px;
  351 +}
  352 +.popWrapper{
  353 + padding:20px;
  354 +}
  355 +.popTitle{
  356 + color:#333;
  357 +}
  358 +.popContent{
  359 + color:#333;
  360 + font-weight:normal;
  361 +}
  362 +.myBtnPrimary{
  363 + box-shadow:0 2px 5px 0 rgba(0,0,0,.26);
  364 + color: rgba(255,255,255,0.87);
  365 + background-color: rgb(16,108,200);
  366 + float:left;
  367 +}
  368 +.myBtnPrimary:hover{
  369 + box-shadow:0 2px 5px 0 rgba(0,0,0,.26);
  370 + color: rgba(255,255,255,0.87);
  371 + background-color: rgb(16,108,200) !important;
  372 + float:left;
  373 +}
  374 +.myBtnDefault{
  375 + box-shadow:0 2px 5px 0 rgba(0,0,0,.26);
  376 + color:#333;
  377 +}
  378 +.cl{clear:both;}
  379 +
  380 +.widthstyle{
  381 + width: 400px !important;
  382 + height:200px !important;
  383 + }
  384 +.panel-green {
  385 + border-color: #5cb85c;
  386 +}
  387 +
  388 +.panel-green .panel-heading {
  389 + border-color: #5cb85c;
  390 + color: #fff;
  391 + background-color: #5cb85c;
  392 +}
  393 +
  394 +.panel-green a {
  395 + color: #5cb85c;
  396 +}
  397 +
  398 +.panel-green a:hover {
  399 + color: #3d8b3d;
  400 +}
  401 +
  402 +.panel-red {
  403 + border-color: #d9534f;
  404 +}
  405 +
  406 +.panel-red .panel-heading {
  407 + border-color: #d9534f;
  408 + color: #fff;
  409 + background-color: #d9534f;
  410 +}
  411 +
  412 +.panel-red a {
  413 + color: #d9534f;
  414 +}
  415 +
  416 +.panel-red a:hover {
  417 + color: #b52b27;
  418 +}
  419 +
  420 +.panel-yellow {
  421 + border-color: #f0ad4e;
  422 +}
  423 +
  424 +.panel-yellow .panel-heading {
  425 + border-color: #f0ad4e;
  426 + color: #fff;
  427 + background-color: #f0ad4e;
  428 +}
  429 +
  430 +.panel-yellow a {
  431 + color: #f0ad4e;
  432 +}
  433 +
  434 +.panel-yellow a:hover {
  435 + color: #df8a13;
  436 +}
  437 +
  438 +.camelCase {
  439 + text-transform: none;
  440 +}
  441 +
  442 +background{
  443 + z-index: 0;
  444 + position:absolute;
  445 + left:0px;
  446 + right:0px;
  447 + top:-21px;
  448 + bottom:0px;
  449 + background-size: cover;
  450 +}
  451 +
  452 +.panel-Content {
  453 + padding:0px
  454 +}
  455 +
  456 +.gridListdemoBasicUsage md-grid-list {
  457 + margin: 8px; }
  458 +
  459 +.gridListdemoBasicUsage .orangered {
  460 + background: #A66866; }
  461 +
  462 +.gridListdemoBasicUsage .green {
  463 + background: #337ab7; }
  464 +
  465 +.gridListdemoBasicUsage .yellow {
  466 + background: #f0ad4e; }
  467 +
  468 +.gridListdemoBasicUsage .blue {
  469 + background: #84ffff; }
  470 +
  471 +.gridListdemoBasicUsage .purple {
  472 + background: #b388ff; }
  473 +
  474 +.gridListdemoBasicUsage .red {
  475 + background: #ff8a80; }
  476 +
  477 +.gridListdemoBasicUsage md-grid-tile {
  478 + transition: all 400ms ease-out 50ms; }
  479 +
  480 +/* Custom css */
  481 +
  482 +.gridContent{
  483 + width:100%;
  484 + height:auto;
  485 + padding:10%;
  486 + color:#fff;
  487 +}
  488 +.fl{
  489 + float:left;
  490 +}
  491 +.fr{
  492 + float:right;
  493 +}
  494 +.cl{
  495 + clear:both;
  496 +}
  497 +
  498 +.selectFont{
  499 + font-size: 17px;
  500 +}
  501 +
  502 +.heading{
  503 + color:#757575;
  504 + position:absolute;
  505 + z-index:9;
  506 + left:0;
  507 + right:0;
  508 + top:0;
  509 +}
0 510 \ No newline at end of file
... ...
src/app/stylesheets/_table.scss
... ... @@ -0,0 +1,212 @@
  1 +// This file based on http://codepen.io/zavoloklom/pen/IGkDz
  2 +
  3 +// VARIABLES
  4 +$table-header-font-weight: 400;
  5 +$table-header-font-color: #757575;
  6 +
  7 +$table-cell-padding: 1.2rem;
  8 +
  9 +$table-bg: #fff;
  10 +$table-bg-accent: #f5f5f5;
  11 +$table-bg-hover: rgba(0,0,0,.12);
  12 +$table-bg-active: $table-bg-hover;
  13 +$table-border-color: #e0e0e0;
  14 +
  15 +
  16 +// MIXINS
  17 +@mixin transition($transition-property, $transition-time, $method) {
  18 + -webkit-transition: $transition-property $transition-time $method;
  19 + -moz-transition: $transition-property $transition-time $method;
  20 + -ms-transition: $transition-property $transition-time $method;
  21 + -o-transition: $transition-property $transition-time $method;
  22 + transition: $transition-property $transition-time $method;
  23 +}
  24 +
  25 +
  26 +//TABLES
  27 +.table {
  28 + border-spacing: 0;
  29 + width: 100%;
  30 + max-width: 100%;
  31 + margin-bottom: 2rem;
  32 + background-color: $table-bg;
  33 + > thead,
  34 + > tbody,
  35 + > tfoot {
  36 + > tr {
  37 + @include transition(all, 0.3s, ease);
  38 + > th,
  39 + > td {
  40 + text-align: left;
  41 + padding: $table-cell-padding;
  42 + vertical-align: top;
  43 + border-top: 0;
  44 + @include transition(all, 0.3s, ease);
  45 + }
  46 + }
  47 + }
  48 + > thead > tr > th {
  49 + font-weight: $table-header-font-weight;
  50 + color: $table-header-font-color;
  51 + vertical-align: bottom;
  52 + border-bottom: 1px solid rgba(0,0,0,.12);
  53 + }
  54 + > caption + thead,
  55 + > colgroup + thead,
  56 + > thead:first-child {
  57 + > tr:first-child {
  58 + > th,
  59 + > td {
  60 + border-top: 0;
  61 + }
  62 + }
  63 + }
  64 + > tbody + tbody {
  65 + border-top: 1px solid rgba(0,0,0,.12);
  66 + }
  67 +
  68 + // Nesting
  69 + .table {
  70 + background-color: $table-bg;
  71 + }
  72 +
  73 + // Remove border
  74 + .no-border {
  75 + border: 0;
  76 + }
  77 +}
  78 +
  79 +// Bordered version
  80 +//
  81 +// Add horizontal borders between columns.
  82 +.table-bordered {
  83 + border: 0;
  84 + > thead,
  85 + > tbody,
  86 + > tfoot {
  87 + > tr {
  88 + > th,
  89 + > td {
  90 + border: 0;
  91 + border-bottom: 1px solid $table-border-color;
  92 + }
  93 + }
  94 + }
  95 + > thead > tr {
  96 + > th,
  97 + > td {
  98 + border-bottom-width: 2px;
  99 + }
  100 + }
  101 +}
  102 +
  103 +
  104 +// Hover effect
  105 +//
  106 +.table-hover {
  107 + > tbody > tr:hover {
  108 + > td,
  109 + > th {
  110 + background-color: $table-bg-hover;
  111 + }
  112 + }
  113 +}
  114 +
  115 +// Responsive tables (vertical)
  116 +//
  117 +// Wrap your tables in `.table-responsive-vertical` and we'll make them mobile friendly
  118 +// by vertical table-cell display. Only applies <768px. Everything above that will display normally.
  119 +// For correct display you must add 'data-title' to each 'td'
  120 +.table-responsive-vertical {
  121 +
  122 + @media screen and (max-width: 768px) {
  123 +
  124 + // Tighten up spacing
  125 + > .table {
  126 + margin-bottom: 0;
  127 + background-color: transparent;
  128 + > thead,
  129 + > tfoot {
  130 + display: none;
  131 + }
  132 +
  133 + > tbody {
  134 + display: block;
  135 +
  136 + > tr {
  137 + display: block;
  138 + border: 1px solid $table-border-color;
  139 + border-radius: 2px;
  140 + margin-bottom: $table-cell-padding;
  141 +
  142 + > td {
  143 + background-color: $table-bg;
  144 + display: block;
  145 + vertical-align: middle;
  146 + text-align: right;
  147 + }
  148 + > td[data-title]:before {
  149 + content: attr(data-title);
  150 + float: left;
  151 + font-size: inherit;
  152 + font-weight: $table-header-font-weight;
  153 + color: $table-header-font-color;
  154 + padding-right: 10px;
  155 + }
  156 + }
  157 + }
  158 + }
  159 +
  160 + // Special overrides for shadows
  161 + &.shadow-z-1 {
  162 + -webkit-box-shadow: none;
  163 + -moz-box-shadow: none;
  164 + box-shadow: none;
  165 + > .table > tbody > tr {
  166 + border: none;
  167 + }
  168 + }
  169 +
  170 + // Special overrides for the bordered tables
  171 + > .table-bordered {
  172 + border: 0;
  173 +
  174 + // Nuke the appropriate borders so that the parent can handle them
  175 + > tbody {
  176 + > tr {
  177 + > td {
  178 + border: 0;
  179 + border-bottom: 1px solid $table-border-color;
  180 + }
  181 + > td:last-child {
  182 + border-bottom: 0;
  183 + }
  184 + }
  185 + }
  186 + }
  187 +
  188 + // Special overrides for the striped tables
  189 + > .table-striped {
  190 + > tbody > tr > td,
  191 + > tbody > tr:nth-child(odd) {
  192 + background-color: $table-bg;
  193 + }
  194 + > tbody > tr > td:nth-child(odd) {
  195 + background-color: $table-bg-accent;
  196 + }
  197 + }
  198 +
  199 + // Special overrides for hover tables
  200 + > .table-hover {
  201 + > tbody {
  202 + > tr:hover > td,
  203 + > tr:hover {
  204 + background-color: $table-bg;
  205 + }
  206 + > tr > td:hover {
  207 + background-color: $table-bg-hover;
  208 + }
  209 + }
  210 + }
  211 + }
  212 +}
... ...
src/assets/images/cart.png

273 Bytes

src/assets/images/ic_business_black_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M0 0h24v24H0z" fill="none"/>
  3 + <path d="M12 7V3H2v18h20V7H12zM6 19H4v-2h2v2zm0-4H4v-2h2v2zm0-4H4V9h2v2zm0-4H4V5h2v2zm4 12H8v-2h2v2zm0-4H8v-2h2v2zm0-4H8V9h2v2zm0-4H8V5h2v2zm10 12h-8v-2h2v-2h-2v-2h2v-2h-2V9h8v10zm-2-8h-2v2h2v-2zm0 4h-2v2h2v-2z"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_clear_white_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#FFFFFF" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>
  3 + <path d="M0 0h24v24H0z" fill="none"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_close_black_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>
  3 + <path d="M0 0h24v24H0z" fill="none"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_close_white_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#FFFFFF" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>
  3 + <path d="M0 0h24v24H0z" fill="none"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_domain_black_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M0 0h24v24H0z" fill="none"/>
  3 + <path d="M12 7V3H2v18h20V7H12zM6 19H4v-2h2v2zm0-4H4v-2h2v2zm0-4H4V9h2v2zm0-4H4V5h2v2zm4 12H8v-2h2v2zm0-4H8v-2h2v2zm0-4H8V9h2v2zm0-4H8V5h2v2zm10 12h-8v-2h2v-2h-2v-2h2v-2h-2V9h8v10zm-2-8h-2v2h2v-2zm0 4h-2v2h2v-2z"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_done_black_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M0 0h24v24H0z" fill="none"/>
  3 + <path d="M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_email_black_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/>
  3 + <path d="M0 0h24v24H0z" fill="none"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_extension_black_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M0 0h24v24H0z" fill="none"/>
  3 + <path d="M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_functions_black_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M0 0h24v24H0z" fill="none"/>
  3 + <path d="M18 4H6v2l6.5 6L6 18v2h12v-3h-7l5-5-5-5h7z"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_home_black_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"/>
  3 + <path d="M0 0h24v24H0z" fill="none"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_location_city_black_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M15 11V5l-3-3-3 3v2H3v14h18V11h-6zm-8 8H5v-2h2v2zm0-4H5v-2h2v2zm0-4H5V9h2v2zm6 8h-2v-2h2v2zm0-4h-2v-2h2v2zm0-4h-2V9h2v2zm0-4h-2V5h2v2zm6 12h-2v-2h2v2zm0-4h-2v-2h2v2z"/>
  3 + <path d="M0 0h24v24H0z" fill="none"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_open_in_new_black_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M0 0h24v24H0z" fill="none"/>
  3 + <path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_person_black_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/>
  3 + <path d="M0 0h24v24H0z" fill="none"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_person_white_18px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#FFFFFF" height="18" viewBox="0 0 24 24" width="18" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/>
  3 + <path d="M0 0h24v24H0z" fill="none"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_person_white_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#FFFFFF" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/>
  3 + <path d="M0 0h24v24H0z" fill="none"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_phone_black_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M0 0h24v24H0z" fill="none"/>
  3 + <path d="M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_phone_missed_black_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M0 0h24v24H0z" fill="none"/>
  3 + <path d="M6.5 5.5L12 11l7-7-1-1-6 6-4.5-4.5H11V3H5v6h1.5V5.5zm17.21 11.17C20.66 13.78 16.54 12 12 12 7.46 12 3.34 13.78.29 16.67c-.18.18-.29.43-.29.71s.11.53.29.71l2.48 2.48c.18.18.43.29.71.29.27 0 .52-.11.7-.28.79-.74 1.69-1.36 2.66-1.85.33-.16.56-.5.56-.9v-3.1c1.45-.48 3-.73 4.6-.73 1.6 0 3.15.25 4.6.72v3.1c0 .39.23.74.56.9.98.49 1.87 1.12 2.67 1.85.18.18.43.28.7.28.28 0 .53-.11.71-.29l2.48-2.48c.18-.18.29-.43.29-.71s-.12-.52-.3-.7z"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_pin_drop_black_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M18 8c0-3.31-2.69-6-6-6S6 4.69 6 8c0 4.5 6 11 6 11s6-6.5 6-11zm-8 0c0-1.1.9-2 2-2s2 .9 2 2-.89 2-2 2c-1.1 0-2-.9-2-2zM5 20v2h14v-2H5z"/>
  3 + <path d="M0 0h24v24H0z" fill="none"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_public_black_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M0 0h24v24H0z" fill="none"/>
  3 + <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_remove_red_eye_black_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M0 0h24v24H0z" fill="none"/>
  3 + <path d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_room_black_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/>
  3 + <path d="M0 0h24v24H0z" fill="none"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
src/assets/images/ic_transfer_within_a_station_black_18px.svg
... ... @@ -0,0 +1,10 @@
  1 +<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <g>
  3 + <path d="M0 0h24v24H0z" fill="none"/>
  4 + <path d="M16.49 15.5v-1.75L14 16.25l2.49 2.5V17H22v-1.5z"/>
  5 + <path d="M19.51 19.75H14v1.5h5.51V23L22 20.5 19.51 18z"/>
  6 + <g>
  7 + <path d="M9.5 5.5c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zM5.75 8.9L3 23h2.1l1.75-8L9 17v6h2v-7.55L8.95 13.4l.6-3C10.85 12 12.8 13 15 13v-2c-1.85 0-3.45-1-4.35-2.45l-.95-1.6C9.35 6.35 8.7 6 8 6c-.25 0-.5.05-.75.15L2 8.3V13h2V9.65l1.75-.75"/>
  8 + </g>
  9 + </g>
  10 +</svg>
0 11 \ No newline at end of file
... ...
src/assets/images/ic_trending_flat_white_24px.svg
... ... @@ -0,0 +1,4 @@
  1 +<svg fill="#FFFFFF" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
  2 + <path d="M22 12l-4-4v3H3v2h15v3z"/>
  3 + <path d="M0 0h24v24H0z" fill="none"/>
  4 +</svg>
0 5 \ No newline at end of file
... ...
No preview for this file type
... ... @@ -0,0 +1,52 @@
  1 +<!doctype html>
  2 +<html class="no-js" ng-app="sbAdminApp">
  3 + <head>
  4 + <meta charset="utf-8">
  5 + <title>Startup Jalsa</title>
  6 + <meta name="description" content="Startup Jalsa">
  7 + <meta name="author" content="Shyam Kumar">
  8 + <meta name="viewport" content="width=device-width">
  9 + <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
  10 +
  11 + <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.5/socket.io.min.js"></script>
  12 + <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
  13 +
  14 + <!-- build:css({.tmp/serve,src}) styles/vendor.css -->
  15 + <!-- bower:css -->
  16 + <!-- run `gulp wiredep` to automaticaly populate bower styles dependencies -->
  17 + <!-- endbower -->
  18 + <!-- endbuild -->
  19 +
  20 + <!-- build:css({.tmp/serve,src}) styles/app.css -->
  21 + <!-- inject:css -->
  22 + <!-- css files will be automaticaly insert here -->
  23 + <!-- endinject -->
  24 + <!-- endbuild -->
  25 + </head>
  26 + <body>
  27 + <!--[if lt IE 10]>
  28 + <p>You are using an <strong>outdated</strong> browser. Please
  29 + <a href="http://browsehappy.com/">upgrade your browser</a>
  30 + to improve your experience.</p>
  31 + <![endif]-->
  32 +
  33 + <div ui-view layout="row" layout-fill></div>
  34 +
  35 + <!-- build:js(src) scripts/vendor.js -->
  36 + <!-- bower:js -->
  37 + <!-- run `gulp wiredep` to automaticaly populate bower script dependencies -->
  38 + <!-- endbower -->
  39 + <!-- endbuild -->
  40 +
  41 + <!-- build:js({.tmp/serve,.tmp/partials,src}) scripts/app.js -->
  42 + <!-- inject:js -->
  43 + <!-- js files will be automaticaly insert here -->
  44 + <!-- endinject -->
  45 +
  46 + <!-- inject:partials -->
  47 + <!-- angular templates will be automatically converted in js and inserted here -->
  48 + <!-- endinject -->
  49 + <!-- endbuild -->
  50 +
  51 + </body>
  52 +</html>
0 53 \ No newline at end of file
... ...