Skip to content

Commit

Permalink
Adding Angular Seed and refactoring the API layer
Browse files Browse the repository at this point in the history
  • Loading branch information
snowyfox committed Jul 29, 2017
1 parent 3864f4d commit b40e09d
Show file tree
Hide file tree
Showing 42 changed files with 309 additions and 301 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ MobileDatabase.iml
.idea
node_modules
.DS_Store
/bower_components
6 changes: 1 addition & 5 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,8 @@ if(rebuildDatabase){
});
}



const app = express();

const index = require('./routes/index');
const apiV1 = require('./routes/apiV1');

// view engine setup
Expand All @@ -43,10 +40,9 @@ app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', index);
app.use('/api/v1', apiV1);
app.use('/', express.static(path.join(__dirname, 'app')));

// catch 404 and forward to error handler
app.use(function(req, res, next) {
Expand Down
25 changes: 25 additions & 0 deletions app/app.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/* app css stylesheet */

.menu {
list-style: none;
border-bottom: 0.1em solid black;
margin-bottom: 2em;
padding: 0 0 0.5em;
}

.menu:before {
content: "[";
}

.menu:after {
content: "]";
}

.menu > li {
display: inline;
}

.menu > li + li:before {
content: "|";
padding-right: 0.3em;
}
14 changes: 14 additions & 0 deletions app/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
'use strict';

// Declare app level module which depends on views, and components
angular.module('myApp', [
'ngRoute',
'myApp.view1',
'myApp.view2',
'myApp.version'
]).
config(['$locationProvider', '$routeProvider', function($locationProvider, $routeProvider) {
$locationProvider.hashPrefix('!');

$routeProvider.otherwise({redirectTo: '/view1'});
}]);
9 changes: 9 additions & 0 deletions app/components/version/interpolate-filter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
'use strict';

angular.module('myApp.version.interpolate-filter', [])

.filter('interpolate', ['version', function(version) {
return function(text) {
return String(text).replace(/\%VERSION\%/mg, version);
};
}]);
15 changes: 15 additions & 0 deletions app/components/version/interpolate-filter_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
'use strict';

describe('myApp.version module', function() {
beforeEach(module('myApp.version'));

describe('interpolate filter', function() {
beforeEach(module(function($provide) {
$provide.value('version', 'TEST_VER');
}));

it('should replace VERSION', inject(function(interpolateFilter) {
expect(interpolateFilter('before %VERSION% after')).toEqual('before TEST_VER after');
}));
});
});
9 changes: 9 additions & 0 deletions app/components/version/version-directive.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
'use strict';

angular.module('myApp.version.version-directive', [])

.directive('appVersion', ['version', function(version) {
return function(scope, elm, attrs) {
elm.text(version);
};
}]);
17 changes: 17 additions & 0 deletions app/components/version/version-directive_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
'use strict';

describe('myApp.version module', function() {
beforeEach(module('myApp.version'));

describe('app-version directive', function() {
it('should print current version', function() {
module(function($provide) {
$provide.value('version', 'TEST_VER');
});
inject(function($compile, $rootScope) {
var element = $compile('<span app-version></span>')($rootScope);
expect(element.text()).toEqual('TEST_VER');
});
});
});
});
8 changes: 8 additions & 0 deletions app/components/version/version.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
'use strict';

angular.module('myApp.version', [
'myApp.version.interpolate-filter',
'myApp.version.version-directive'
])

.value('version', '0.1');
11 changes: 11 additions & 0 deletions app/components/version/version_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
'use strict';

describe('myApp.version module', function() {
beforeEach(module('myApp.version'));

describe('version service', function() {
it('should return current version', inject(function(version) {
expect(version).toEqual('0.1');
}));
});
});
58 changes: 58 additions & 0 deletions app/index-async.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="bower_components/html5-boilerplate/dist/css/normalize.css">
<link rel="stylesheet" href="bower_components/html5-boilerplate/dist/css/main.css">
<style>
[ng-cloak] {
display: none;
}
</style>
<script src="bower_components/html5-boilerplate/dist/js/vendor/modernizr-2.8.3.min.js"></script>
<script>
// include angular loader, which allows the files to load in any order
//@@NG_LOADER_START@@
// You need to run `npm run update-index-async` to inject the angular async code here
//@@NG_LOADER_END@@

// include a third-party async loader library
/*!
* $script.js v1.3
* https://github.com/ded/script.js
* Copyright: @ded & @fat - Dustin Diaz, Jacob Thornton 2011
* Follow our software http://twitter.com/dedfat
* License: MIT
*/
!function(a,b,c){function t(a,c){var e=b.createElement("script"),f=j;e.onload=e.onerror=e[o]=function(){e[m]&&!/^c|loade/.test(e[m])||f||(e.onload=e[o]=null,f=1,c())},e.async=1,e.src=a,d.insertBefore(e,d.firstChild)}function q(a,b){p(a,function(a){return!b(a)})}var d=b.getElementsByTagName("head")[0],e={},f={},g={},h={},i="string",j=!1,k="push",l="DOMContentLoaded",m="readyState",n="addEventListener",o="onreadystatechange",p=function(a,b){for(var c=0,d=a.length;c<d;++c)if(!b(a[c]))return j;return 1};!b[m]&&b[n]&&(b[n](l,function r(){b.removeEventListener(l,r,j),b[m]="complete"},j),b[m]="loading");var s=function(a,b,d){function o(){if(!--m){e[l]=1,j&&j();for(var a in g)p(a.split("|"),n)&&!q(g[a],n)&&(g[a]=[])}}function n(a){return a.call?a():e[a]}a=a[k]?a:[a];var i=b&&b.call,j=i?b:d,l=i?a.join(""):b,m=a.length;c(function(){q(a,function(a){h[a]?(l&&(f[l]=1),o()):(h[a]=1,l&&(f[l]=1),t(s.path?s.path+a+".js":a,o))})},0);return s};s.get=t,s.ready=function(a,b,c){a=a[k]?a:[a];var d=[];!q(a,function(a){e[a]||d[k](a)})&&p(a,function(a){return e[a]})?b():!function(a){g[a]=g[a]||[],g[a][k](b),c&&c(d)}(a.join("|"));return s};var u=a.$script;s.noConflict=function(){a.$script=u;return this},typeof module!="undefined"&&module.exports?module.exports=s:a.$script=s}(this,document,setTimeout)

// load all of the dependencies asynchronously.
$script([
'bower_components/angular/angular.js',
'bower_components/angular-route/angular-route.js',
'app.js',
'view1/view1.js',
'view2/view2.js',
'components/version/version.js',
'components/version/version-directive.js',
'components/version/interpolate-filter.js'
], function() {
// when all is done, execute bootstrap angular application
angular.bootstrap(document, ['myApp']);
});
</script>
<title>My AngularJS App</title>
<link rel="stylesheet" href="app.css">
</head>
<body ng-cloak>
<ul class="menu">
<li><a href="#!/view1">view1</a></li>
<li><a href="#!/view2">view2</a></li>
</ul>

<div ng-view></div>

<div>Angular seed app: v<span app-version></span></div>

</body>
</html>
43 changes: 43 additions & 0 deletions app/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<!DOCTYPE html>
<!--[if lt IE 7]> <html lang="en" ng-app="myApp" class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html lang="en" ng-app="myApp" class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html lang="en" ng-app="myApp" class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html lang="en" ng-app="myApp" class="no-js"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>My AngularJS App</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="bower_components/html5-boilerplate/dist/css/normalize.css">
<link rel="stylesheet" href="bower_components/html5-boilerplate/dist/css/main.css">
<link rel="stylesheet" href="app.css">
<script src="bower_components/html5-boilerplate/dist/js/vendor/modernizr-2.8.3.min.js"></script>
</head>
<body>
<ul class="menu">
<li><a href="#!/view1">view1</a></li>
<li><a href="#!/view2">view2</a></li>
</ul>

<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
<![endif]-->

<div ng-view></div>

<div>Angular seed app: v<span app-version></span></div>

<!-- In production use:
<script src="//ajax.googleapis.com/ajax/libs/angularjs/x.x.x/angular.min.js"></script>
-->
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular-route/angular-route.js"></script>
<script src="app.js"></script>
<script src="view1/view1.js"></script>
<script src="view2/view2.js"></script>
<script src="components/version/version.js"></script>
<script src="components/version/version-directive.js"></script>
<script src="components/version/interpolate-filter.js"></script>
</body>
</html>
1 change: 1 addition & 0 deletions app/view1/view1.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<p>This is the partial for view 1.</p>
14 changes: 14 additions & 0 deletions app/view1/view1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
'use strict';

angular.module('myApp.view1', ['ngRoute'])

.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/view1', {
templateUrl: 'view1/view1.html',
controller: 'View1Ctrl'
});
}])

.controller('View1Ctrl', [function() {

}]);
16 changes: 16 additions & 0 deletions app/view1/view1_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
'use strict';

describe('myApp.view1 module', function() {

beforeEach(module('myApp.view1'));

describe('view1 controller', function(){

it('should ....', inject(function($controller) {
//spec body
var view1Ctrl = $controller('View1Ctrl');
expect(view1Ctrl).toBeDefined();
}));

});
});
5 changes: 5 additions & 0 deletions app/view2/view2.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<p>This is the partial for view 2.</p>
<p>
Showing of 'interpolate' filter:
{{ 'Current version is v%VERSION%.' | interpolate }}
</p>
14 changes: 14 additions & 0 deletions app/view2/view2.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
'use strict';

angular.module('myApp.view2', ['ngRoute'])

.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/view2', {
templateUrl: 'view2/view2.html',
controller: 'View2Ctrl'
});
}])

.controller('View2Ctrl', [function() {

}]);
16 changes: 16 additions & 0 deletions app/view2/view2_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
'use strict';

describe('myApp.view2 module', function() {

beforeEach(module('myApp.view2'));

describe('view2 controller', function(){

it('should ....', inject(function($controller) {
//spec body
var view2Ctrl = $controller('View2Ctrl');
expect(view2Ctrl).toBeDefined();
}));

});
});
15 changes: 15 additions & 0 deletions bower.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"name": "angular-seed",
"description": "A starter project for AngularJS",
"version": "0.0.0",
"homepage": "https://github.com/angular/angular-seed",
"license": "MIT",
"private": true,
"dependencies": {
"angular": "~1.5.0",
"angular-route": "~1.5.0",
"angular-loader": "~1.5.0",
"angular-mocks": "~1.5.0",
"html5-boilerplate": "^5.3.0"
}
}
8 changes: 6 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@
"private": true,
"scripts": {
"start": "nodemon ./bin/www",
"start:dev": "nodemon ./bin/www"
"start:dev": "nodemon ./bin/www",
"postinstall": "bower install",
"update-deps": "npm update",
"postupdate-deps": "bower update"
},
"dependencies": {
"bluebird": "^3.5.0",
Expand All @@ -25,6 +28,7 @@
"string-format": "^0.5.0"
},
"devDependencies": {
"nodemon": "^1.11.0"
"nodemon": "^1.11.0",
"bower": "^1.7.7"
}
}
27 changes: 1 addition & 26 deletions routes/apiV1.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,9 @@
const express = require('express');
const router = express.Router();

router.use('/crud', require('./v1/crud'));

router.use('/dictionary/blocks', require('./v1/dictionary/blocks'));
router.use('/dictionary/builds', require('./v1/dictionary/builds'));
router.use('/dictionary/buildData', require('./v1/dictionary/buildData'));
router.use('/dictionary/templates', require('./v1/dictionary/templates'));

router.use('/lemmas', require('./v1/lemmas'));

router.use('/entry/layouts', require('./v1/entry/layouts'));
router.use('/entry/layoutTemplates', require('./v1/entry/layoutTemplates'));
router.use('/entry/templates', require('./v1/entry/templates'));
router.use('/entry/typeEntries', require('./v1/entry/typeTemplates'));
router.use('/entry/types', require('./v1/entry/types'));
router.use('/entry/typeTemplates', require('./v1/entry/typeTemplates'));

router.use('/definitions', require('./v1/definitions'));
router.use('/languages', require('./v1/languages'));

router.use('/localized/entry/layouts', require('./v1/localized/entryLayouts'));
router.use('/localized/metadata', require('./v1/localized/metadata'));

router.use('/metadata', require('./v1/metadata'));

router.use('/partsOfSpeech', require('./v1/lemmaClassTypes'));

router.use('/sources', require('./v1/sources'));

router.use('/models', require('./v1/models'));
router.use('/export', require('./v1/export'));

module.exports = router;
Loading

0 comments on commit b40e09d

Please sign in to comment.