Account Email
5 |-
13 |
-
14 |
{{e.address}}
15 |status {{e.status == 0}}
16 | Default 17 | 18 |
19 |
├── server ├── auth │ ├── api.js │ ├── routes.js │ ├── middleware.js │ ├── password │ │ ├── api.js │ │ ├── routes.js │ │ └── model.js │ ├── model.js │ └── config.js ├── templates │ ├── password_reset │ │ ├── style.css │ │ ├── text.ejs │ │ └── html.ejs │ └── test │ │ ├── text.ejs │ │ ├── html.ejs │ │ └── style.css ├── accounts │ └── local │ │ └── models.js ├── ds │ ├── index.js │ └── stores │ │ └── memory.js ├── test │ ├── email │ │ └── model.js │ ├── auth │ │ ├── password │ │ │ ├── routes.js │ │ │ ├── api.js │ │ │ └── model.js │ │ └── model.js │ ├── accounts │ │ └── api.js │ ├── utils │ │ └── index.js │ ├── mailer │ │ └── model.js │ ├── config │ │ └── model.js │ └── user │ │ ├── api.js │ │ └── model.js ├── user │ ├── utils.js │ ├── model.js │ └── api.js ├── email │ ├── utils.js │ ├── model.js │ └── model.old.js ├── config.js ├── config │ └── model.js ├── session │ └── api.js ├── errors │ └── index.js ├── mailer │ └── model.js └── index.js ├── app ├── assets │ ├── img │ │ ├── .gitignore │ │ └── auth │ │ │ ├── aol.png │ │ │ ├── yahoo.png │ │ │ ├── facebook.png │ │ │ ├── github.png │ │ │ ├── google+.png │ │ │ ├── google.png │ │ │ ├── linkedin.png │ │ │ ├── myopenid.png │ │ │ ├── myspace.png │ │ │ ├── openid.png │ │ │ ├── paypal.png │ │ │ ├── symantec.png │ │ │ ├── twitter.png │ │ │ └── windowslive.png │ ├── partials │ │ ├── errors │ │ │ └── 404.html │ │ ├── nav.html │ │ ├── home.html │ │ ├── account │ │ │ ├── menu.html │ │ │ ├── nav.html │ │ │ ├── email.html │ │ │ ├── overview.html │ │ │ ├── connected.html │ │ │ ├── recovery.html │ │ │ ├── profile.html │ │ │ ├── login.html │ │ │ ├── password.html │ │ │ └── signup.html │ │ └── about.html │ ├── font │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.ttf │ │ └── fontawesome-webfont.woff │ └── index.html ├── scripts │ ├── ds │ │ ├── stores │ │ │ ├── rpc.js │ │ │ ├── memory.js │ │ │ └── rest.js │ │ ├── index.js │ │ └── services.js │ ├── log │ │ ├── index.js │ │ └── services.js │ ├── services.js │ ├── user │ │ ├── index.js │ │ └── services.js │ ├── session │ │ ├── index.js │ │ └── services.js │ ├── config │ │ ├── index.js │ │ └── services.js │ ├── flash │ │ ├── index.js │ │ └── services.js │ ├── account │ │ ├── index.js │ │ ├── controllers │ │ │ ├── recovery.js │ │ │ ├── overview.js │ │ │ ├── connected.js │ │ │ ├── email.js │ │ │ ├── index.js │ │ │ ├── password.js │ │ │ ├── profile.js │ │ │ ├── signup.js │ │ │ ├── login.js │ │ │ └── main.js │ │ └── services.js │ ├── directives.js │ ├── user_profile │ │ ├── index.js │ │ └── services.js │ ├── filters.js │ ├── rpc │ │ └── service.js │ └── controllers.js ├── init.js ├── styles │ ├── themes │ │ └── custom │ │ │ └── _overrides.less │ └── app.less └── app.js ├── Procfile ├── vendor ├── scripts │ └── angular │ │ └── version.txt └── styles │ ├── themes │ ├── default │ │ └── _overrides.less │ └── sapling │ │ └── _overrides.less │ ├── sapling │ ├── _account.less │ ├── _angular.less │ ├── _sticky-footer.less │ ├── _breadcrumbs.less │ └── _auth.less │ └── bootstrap │ ├── _layouts.less │ ├── _component-animations.less │ ├── _utilities.less │ ├── _breadcrumbs.less │ ├── _grid.less │ ├── _hero-unit.less │ ├── _responsive-768px-979px.less │ ├── _wells.less │ ├── _responsive-1200px-min.less │ ├── _close.less │ ├── _pager.less │ ├── _accordion.less │ ├── _scaffolding.less │ ├── _responsive.less │ ├── _responsive-utilities.less │ ├── _thumbnails.less │ ├── _alerts.less │ ├── _code.less │ ├── _pagination.less │ ├── _bootstrap.less │ ├── _tooltip.less │ ├── _labels-badges.less │ ├── _modals.less │ ├── _carousel.less │ ├── _reset.less │ ├── _progress-bars.less │ ├── _popovers.less │ ├── _responsive-767px-max.less │ ├── _responsive-navbar.less │ └── _type.less ├── scripts ├── server.sh ├── test-server.sh ├── init.sh ├── compile-html.sh ├── compile-tests.sh ├── development.sh ├── test.sh └── production.sh ├── CONVENTIONS.md ├── test ├── mocha.opts ├── testacular-e2e.conf.js ├── unit │ ├── services.spec.js │ ├── contoller.spec.js │ ├── filter.spec.js │ ├── directive.spec.js │ ├── log │ │ └── services.spec.js │ ├── user_profile │ │ └── services.spec.js │ ├── ds │ │ ├── services.spec.js │ │ └── stores │ │ │ └── rest.spec.js │ └── flash │ │ └── services.spec.js ├── e2e │ └── app │ │ └── scenario.js ├── testacular.conf.js └── vendor │ └── sapling │ └── sapling-mocks.js ├── .gitignore ├── NEWS.md ├── AUTHORS.md ├── CONTRIBUTORS.md ├── config.coffee ├── TODO.md └── package.json /server/auth/api.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/assets/img/.gitignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/scripts/ds/stores/rpc.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: node server 2 | -------------------------------------------------------------------------------- /server/templates/password_reset/style.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /server/accounts/local/models.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /vendor/scripts/angular/version.txt: -------------------------------------------------------------------------------- 1 | 1.0.1 2 | -------------------------------------------------------------------------------- /server/templates/test/text.ejs: -------------------------------------------------------------------------------- 1 | Hello <%= name %> 2 | -------------------------------------------------------------------------------- /server/templates/test/html.ejs: -------------------------------------------------------------------------------- 1 |
Sapling is an starter application for AngularJS apps. 2 | It goes beyond the basic setup to provide:
3 | 4 |Try it out:
7 | 8 | 9 | 10 |Check out the Account section.
-------------------------------------------------------------------------------- /app/styles/themes/custom/_overrides.less: -------------------------------------------------------------------------------- 1 | /* 2 | Place custom styles here. Thes styles are ment to be loaded after 3 | bootstrap, so the may override it's behavior. 4 | */ 5 | 6 | body { 7 | #gradient > .striped(@blue); 8 | } 9 | 10 | // Footer 11 | .footer { 12 | background-color: whitesmoke; 13 | padding: 30px 0; 14 | .box-shadow(inset 0 5px 15px rgba(0, 0, 0, .025)); 15 | } 16 | 17 | -------------------------------------------------------------------------------- /vendor/styles/sapling/_angular.less: -------------------------------------------------------------------------------- 1 | input.ng-dirty.ng-valid { 2 | /*.formFieldState(@successText, @successText, @successBackground);*/ 3 | border-color: @successText; 4 | } 5 | 6 | input.ng-dirty.ng-invalid { 7 | /*.formFieldState(@errorText, @errorText, @errorBackground);*/ 8 | border-color: @errorText; 9 | } 10 | 11 | input.ng-pristine { 12 | 13 | } 14 | 15 | input.ng-dirty { 16 | 17 | } 18 | 19 | -------------------------------------------------------------------------------- /vendor/styles/sapling/_sticky-footer.less: -------------------------------------------------------------------------------- 1 | 2 | // Sticky Footer 3 | 4 | @footerHeight: 92px; 5 | 6 | html, body { 7 | height: 100%; 8 | } 9 | 10 | .wrapper { 11 | min-height: 100%; 12 | height: auto !important; 13 | height: 100%; 14 | margin: 0 auto -@footerHeight; 15 | } 16 | 17 | .push { 18 | height: @footerHeight; 19 | } 20 | 21 | .wrapper > .container { 22 | padding-top: 24px; 23 | } 24 | -------------------------------------------------------------------------------- /server/user/utils.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // validateEmail is a simple email validator. It confirms that the provided 4 | // string contains a `@` and a `.` 5 | // TODO maybe use a regex here. 6 | exports.validateEmail = function (address) { 7 | if (address.indexOf('@') === -1) { 8 | return false; 9 | } 10 | if (address.indexOf('.') === -1) { 11 | return false; 12 | } 13 | return true; 14 | }; 15 | 16 | -------------------------------------------------------------------------------- /vendor/styles/bootstrap/_layouts.less: -------------------------------------------------------------------------------- 1 | // 2 | // Layouts 3 | // -------------------------------------------------- 4 | 5 | 6 | // Container (centered, fixed-width layouts) 7 | .container { 8 | .container-fixed(); 9 | } 10 | 11 | // Fluid layouts (left aligned, with sidebar, min- & max-width content) 12 | .container-fluid { 13 | padding-right: @gridGutterWidth; 14 | padding-left: @gridGutterWidth; 15 | .clearfix(); 16 | } -------------------------------------------------------------------------------- /server/email/utils.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // validateEmail is a simple email validator. It confirms that the provided 4 | // string contains a `@` and a `.` 5 | // TODO maybe use a regex here. 6 | exports.validateEmail = function (address) { 7 | if (!address) { 8 | return false; 9 | } 10 | if (address.indexOf('@') === -1) { 11 | return false; 12 | } 13 | if (address.indexOf('.') === -1) { 14 | return false; 15 | } 16 | return true; 17 | }; 18 | -------------------------------------------------------------------------------- /vendor/styles/bootstrap/_component-animations.less: -------------------------------------------------------------------------------- 1 | // 2 | // Component animations 3 | // -------------------------------------------------- 4 | 5 | 6 | .fade { 7 | opacity: 0; 8 | .transition(opacity .15s linear); 9 | &.in { 10 | opacity: 1; 11 | } 12 | } 13 | 14 | .collapse { 15 | position: relative; 16 | height: 0; 17 | overflow: hidden; 18 | overflow: visible \9; 19 | .transition(height .35s ease); 20 | &.in { 21 | height: auto; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/scripts/directives.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | // register the module with Angular 4 | angular.module('app.directives', [ 5 | // require the 'app.service' module 6 | 'app.services' 7 | ]) 8 | .directive('appVersion', [ 9 | // this directive depends specifically on the 'version' service from 'app.service' 10 | 'version', 11 | function (version) { 12 | return function (scope, elm, attrs) { 13 | return elm.text(version); 14 | }; 15 | } 16 | ]); 17 | -------------------------------------------------------------------------------- /app/scripts/user_profile/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * userProfile provides a userProfile object. 3 | * The userProfile object conforms the [portable contacts spec][] with a few additions: 4 | * TODO Add spec. 5 | * 6 | * 7 | * [portable contacts spec]: http://portablecontacts.net/draft-spec.html 8 | */ 9 | 10 | // This module is a added as a convenience. 11 | // The convention is to include all sub-modules that are present in the directory. 12 | angular.module('userProfile', ['userProfile.services']); -------------------------------------------------------------------------------- /AUTHORS.md: -------------------------------------------------------------------------------- 1 | ###### Notice 2 | 3 | *This is the official list of **sapling** authors for copyright purposes.* 4 | 5 | *This file is distinct from the CONTRIBUTORS file. See the latter for an 6 | explanation.* 7 | 8 | *Names should be added to this file as:* 9 | 10 | `Organization` or `Namestatus {{e.status == 0}}
16 | Default 17 | 18 |To reset your password, enter the email address you used when creating your {{ application_title }} account.
13 | 24 |If you don't have a {{ App.Title }} account you can create one now
26 |git clone https://github.com/scotch/sapling-aego.git to clone the sapling-aego repositorycd sapling-aegogit submodule initgit submodule updatecd client/./scripts/init.sh to install node packages./scripts/development.sh to compile javascripts and css./scripts/compile-jade.sh to run a jade watcher./scripts/compile-html.sh to compile html files in app/assetsTODO added more...
-------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": "Kyle Finley