├── client ├── css │ ├── images │ │ ├── back_light.svg │ │ ├── call.svg │ │ ├── chat.svg │ │ ├── email.svg │ │ ├── ic_action_dialog.png │ │ ├── ic_action_mail.png │ │ ├── ic_action_monolog.png │ │ ├── ic_action_phone_outgoing.png │ │ ├── ic_action_user.png │ │ ├── ic_action_users.png │ │ ├── icon-back.png │ │ ├── next.svg │ │ └── next_blue.svg │ └── styles.css ├── index.html ├── js │ ├── app.js │ ├── controllers.js │ ├── memory-services.js │ └── rest-services.js ├── lib │ ├── angular-animate.js │ ├── angular-resource.js │ ├── angular-route.js │ ├── angular-touch.js │ └── angular.js ├── partials │ ├── employee-detail.html │ ├── employee-list.html │ └── report-list.html ├── pics │ ├── amy_jones.jpg │ ├── eugene_lee.jpg │ ├── gary_donovan.jpg │ ├── james_king.jpg │ ├── john_williams.jpg │ ├── julie_taylor.jpg │ ├── kathleen_byrne.jpg │ ├── lisa_wong.jpg │ ├── paul_jones.jpg │ ├── paula_gates.jpg │ ├── ray_moore.jpg │ └── steven_wells.jpg └── topcoat │ ├── css │ ├── topcoat-mobile-light.css │ └── topcoat-mobile-light.min.css │ ├── font │ ├── LICENSE.txt │ ├── SourceCodePro-Black.otf │ ├── SourceCodePro-Bold.otf │ ├── SourceCodePro-ExtraLight.otf │ ├── SourceCodePro-Light.otf │ ├── SourceCodePro-Regular.otf │ ├── SourceCodePro-Semibold.otf │ ├── SourceSansPro-Black.otf │ ├── SourceSansPro-BlackIt.otf │ ├── SourceSansPro-Bold.otf │ ├── SourceSansPro-BoldIt.otf │ ├── SourceSansPro-ExtraLight.otf │ ├── SourceSansPro-ExtraLightIt.otf │ ├── SourceSansPro-It.otf │ ├── SourceSansPro-Light.otf │ ├── SourceSansPro-LightIt.otf │ ├── SourceSansPro-Regular.otf │ ├── SourceSansPro-Semibold.otf │ └── SourceSansPro-SemiboldIt.otf │ └── img │ ├── avatar.png │ ├── bg_dark.png │ ├── breadcrumb.png │ ├── checkbox_checked.png │ ├── checkbox_checked_dark.png │ ├── checkbox_unchecked.png │ ├── checkbox_unchecked_dark.png │ ├── checkmark_bw.svg │ ├── dark-combo-box-bg.png │ ├── dark-combo-box-bg2x.png │ ├── dark-grips.png │ ├── dark-sprites2x.png │ ├── dialog-zone-bg.png │ ├── drop-down-triangle-dark.png │ ├── drop-down-triangle.png │ ├── hamburger_bw.svg │ ├── hamburger_dark.svg │ ├── hamburger_light.svg │ ├── light-combo-box-bg.png │ ├── light-combo-box-bg2x.png │ ├── light-grips.png │ ├── light-sprites2x.png │ ├── pop-up-triangle-dark.png │ ├── pop-up-triangle.png │ ├── search-bg.png │ ├── search-bg2x.png │ ├── search.svg │ ├── search_bw.svg │ ├── search_dark.svg │ ├── search_light.svg │ ├── spinner.png │ └── spinner2x.png └── server ├── package.json ├── routes └── employee.js └── server.js /client/css/images/back_light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | ]> 9 | 14 | -------------------------------------------------------------------------------- /client/css/images/call.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | ]> 9 | 18 | -------------------------------------------------------------------------------- /client/css/images/chat.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | ]> 9 | 19 | -------------------------------------------------------------------------------- /client/css/images/email.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | ]> 9 | 16 | -------------------------------------------------------------------------------- /client/css/images/ic_action_dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ccoenraets/angular-directory/3a7910d74de2730333541e5e125ef7c48e11fa6e/client/css/images/ic_action_dialog.png -------------------------------------------------------------------------------- /client/css/images/ic_action_mail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ccoenraets/angular-directory/3a7910d74de2730333541e5e125ef7c48e11fa6e/client/css/images/ic_action_mail.png -------------------------------------------------------------------------------- /client/css/images/ic_action_monolog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ccoenraets/angular-directory/3a7910d74de2730333541e5e125ef7c48e11fa6e/client/css/images/ic_action_monolog.png -------------------------------------------------------------------------------- /client/css/images/ic_action_phone_outgoing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ccoenraets/angular-directory/3a7910d74de2730333541e5e125ef7c48e11fa6e/client/css/images/ic_action_phone_outgoing.png -------------------------------------------------------------------------------- /client/css/images/ic_action_user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ccoenraets/angular-directory/3a7910d74de2730333541e5e125ef7c48e11fa6e/client/css/images/ic_action_user.png -------------------------------------------------------------------------------- /client/css/images/ic_action_users.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ccoenraets/angular-directory/3a7910d74de2730333541e5e125ef7c48e11fa6e/client/css/images/ic_action_users.png -------------------------------------------------------------------------------- /client/css/images/icon-back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ccoenraets/angular-directory/3a7910d74de2730333541e5e125ef7c48e11fa6e/client/css/images/icon-back.png -------------------------------------------------------------------------------- /client/css/images/next.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | ]> 9 | 14 | -------------------------------------------------------------------------------- /client/css/images/next_blue.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | ]> 9 | 14 | -------------------------------------------------------------------------------- /client/css/styles.css: -------------------------------------------------------------------------------- 1 | .back-button { 2 | top: 10px; 3 | position: absolute; 4 | } 5 | 6 | .scroller { 7 | overflow: auto; 8 | -webkit-overflow-scrolling: touch; 9 | position: absolute; 10 | top: 168px; 11 | bottom: 0px; 12 | left: 0px; 13 | right: 0px; 14 | } 15 | 16 | .topcoat-icon--back { 17 | background: url("images/back_light.svg") no-repeat; 18 | -webkit-background-size: cover; 19 | -moz-background-size: cover; 20 | background-size: cover; 21 | } 22 | 23 | .count { 24 | color: #5DC1FF; 25 | position: absolute; 26 | right: 50px; 27 | top: 26px; 28 | font-weight: bold; 29 | } 30 | 31 | .search-bar { 32 | padding:10px 10px 12px 8px; 33 | } 34 | 35 | .search-bar > input { 36 | width: 100%; 37 | } 38 | 39 | a { 40 | text-decoration: none; 41 | color: inherit; 42 | -webkit-touch-callout: none; 43 | -webkit-tap-highlight-color: rgb(0, 0, 0); 44 | } 45 | 46 | .details { 47 | margin: auto; 48 | } 49 | 50 | .details>img { 51 | float:left; 52 | margin:10px; 53 | width: 80px; 54 | height: 80px; 55 | } 56 | 57 | .details h1 { 58 | padding: 12px 0px 4px 0px; 59 | margin: 0px 0px 0px 0px; 60 | font-size: 1.2rem; 61 | } 62 | 63 | .details h2 { 64 | padding: 0px 0px 0px 0px; 65 | margin: 0px 0px 0px 0px; 66 | font-size: 1.1rem; 67 | font-weight: normal; 68 | color: #888; 69 | } 70 | 71 | .list { 72 | list-style-type: none; 73 | } 74 | 75 | .list > li { 76 | position: relative; 77 | clear: both; 78 | padding: 0px; 79 | margin: 0px; 80 | } 81 | 82 | .list > li:nth-of-type(1) { 83 | border-top: none; 84 | } 85 | 86 | .list > li > a { 87 | margin: 0px; 88 | display: block; 89 | height: 57px; 90 | padding: 4px; 91 | } 92 | 93 | 94 | .list > li > a > p:nth-of-type(1) { 95 | margin: 8px 0px 0px 0px; 96 | font-weight: bold; 97 | } 98 | 99 | .list > li p:nth-of-type(2) { 100 | margin: 0px; 101 | color: #777; 102 | } 103 | 104 | .list > li img { 105 | width: 57px; 106 | height: 57px; 107 | float: left; 108 | margin-right: 8px; 109 | } 110 | 111 | .list li:active { 112 | background-color: #d6d6d6; 113 | } 114 | 115 | .actions > li > a { 116 | padding-left: 12px; 117 | } 118 | 119 | .action-icon { 120 | position: absolute !important; 121 | top: 18px; 122 | right: 20px !important; 123 | width: 28px !important; 124 | height: 28px; 125 | } 126 | 127 | .actions li p:nth-of-type(1) { 128 | color: #5DC1FF; 129 | font-size: 0.9em; 130 | font-weight: lighter; 131 | } 132 | 133 | .actions li p:nth-of-type(2) { 134 | color: inherit; 135 | } 136 | 137 | ul { 138 | clear:both; 139 | border-top: none !important; 140 | } 141 | 142 | .icon-call { 143 | background: transparent url(images/call.svg); 144 | background-repeat: no-repeat; 145 | -webkit-background-size: cover; 146 | -moz-background-size: cover; 147 | background-size: cover; 148 | } 149 | 150 | .icon-sms { 151 | background: transparent url(images/chat.svg); 152 | background-repeat: no-repeat; 153 | -webkit-background-size: cover; 154 | -moz-background-size: cover; 155 | background-size: cover; 156 | } 157 | 158 | .icon-mail { 159 | background: transparent url(images/email.svg); 160 | background-repeat: no-repeat; 161 | -webkit-background-size: cover; 162 | -moz-background-size: cover; 163 | background-size: cover; 164 | } 165 | 166 | .icon-manager { 167 | background: transparent url(images/next.svg); 168 | background-repeat: no-repeat; 169 | -webkit-background-size: cover; 170 | -moz-background-size: cover; 171 | background-size: cover; 172 | } 173 | 174 | .icon-reports { 175 | background: transparent url(images/next.svg); 176 | background-repeat: no-repeat; 177 | -webkit-background-size: cover; 178 | -moz-background-size: cover; 179 | background-size: cover; 180 | } 181 | 182 | .chevron { 183 | background: transparent url(images/next_blue.svg); 184 | background-repeat: no-repeat; 185 | background-size: contain; 186 | width: 20px; 187 | height: 20px; 188 | position: absolute; 189 | right: 12px; 190 | top: 22px; 191 | height: 50px; 192 | width: 28px; 193 | } 194 | 195 | .slide-left.ng-enter, 196 | .slide-left.ng-leave, 197 | .slide-right.ng-enter, 198 | .slide-right.ng-leave { 199 | position: absolute; 200 | top: 0; right: 0; bottom: 0; left: 0; 201 | background: inherit; 202 | -ms-transition: .25s ease-in-out; 203 | -webkit-transition: .25s ease-in-out; 204 | transition: .25s ease-in-out; 205 | } 206 | 207 | 208 | .slide-left.ng-enter { 209 | z-index: 101; 210 | -webkit-transform: translateX(100%); 211 | transform: translateX(100%); 212 | } 213 | 214 | .slide-left.ng-enter.ng-enter-active { 215 | -webkit-transform: translateX(0); 216 | transform: translateX(0); 217 | } 218 | 219 | .slide-left.ng-leave { 220 | z-index: 100; 221 | -webkit-transform: translateX(0); 222 | transform: translateX(0); 223 | } 224 | 225 | .slide-left.ng-leave.ng-leave-active { 226 | -webkit-transform: translateX(-100%); 227 | transform: translateX(-100%); 228 | } 229 | 230 | .slide-right.ng-enter { 231 | z-index: 100; 232 | -webkit-transform: translateX(-100%); 233 | transform: translateX(-100%); 234 | } 235 | 236 | .slide-right.ng-enter.ng-enter-active { 237 | -webkit-transform: translateX(0); 238 | transform: translateX(0); 239 | } 240 | 241 | .slide-right.ng-leave { 242 | z-index: 101; 243 | -webkit-transform: translateX(0); 244 | transform: translateX(0); 245 | } 246 | 247 | .slide-right.ng-leave.ng-leave-active { 248 | -webkit-transform: translateX(100%); 249 | transform: translateX(100%); 250 | } -------------------------------------------------------------------------------- /client/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /client/js/app.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('myApp', [ 4 | 'ngTouch', 5 | 'ngRoute', 6 | 'ngAnimate', 7 | 'myApp.controllers', 8 | 'myApp.memoryServices' 9 | ]). 10 | config(['$routeProvider', function ($routeProvider) { 11 | $routeProvider.when('/employees', {templateUrl: 'partials/employee-list.html', controller: 'EmployeeListCtrl'}); 12 | $routeProvider.when('/employees/:employeeId', {templateUrl: 'partials/employee-detail.html', controller: 'EmployeeDetailCtrl'}); 13 | $routeProvider.when('/employees/:employeeId/reports', {templateUrl: 'partials/report-list.html', controller: 'ReportListCtrl'}); 14 | $routeProvider.otherwise({redirectTo: '/employees'}); 15 | }]); -------------------------------------------------------------------------------- /client/js/controllers.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('myApp.controllers', []) 4 | .controller('MainCtrl', ['$scope', '$rootScope', '$window', '$location', function ($scope, $rootScope, $window, $location) { 5 | $scope.slide = ''; 6 | $rootScope.back = function() { 7 | $scope.slide = 'slide-right'; 8 | $window.history.back(); 9 | } 10 | $rootScope.go = function(path){ 11 | $scope.slide = 'slide-left'; 12 | $location.url(path); 13 | } 14 | }]) 15 | .controller('EmployeeListCtrl', ['$scope', 'Employee', function ($scope, Employee) { 16 | $scope.employees = Employee.query(); 17 | }]) 18 | .controller('EmployeeDetailCtrl', ['$scope', '$routeParams', 'Employee', function ($scope, $routeParams, Employee) { 19 | $scope.employee = Employee.get({employeeId: $routeParams.employeeId}); 20 | }]) 21 | .controller('ReportListCtrl', ['$scope', '$routeParams', 'Report', function ($scope, $routeParams, Report) { 22 | $scope.employees = Report.query({employeeId: $routeParams.employeeId}); 23 | }]); 24 | -------------------------------------------------------------------------------- /client/js/memory-services.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | (function () { 4 | 5 | var employees = [ 6 | {"id": 1, "firstName": "James", "lastName": "King", "managerId": 0, "managerName": "", "reports": 4, "title": "President and CEO", "department": "Corporate", "cellPhone": "617-000-0001", "officePhone": "781-000-0001", "email": "jking@fakemail.com", "city": "Boston, MA", "pic": "james_king.jpg", "twitterId": "@fakejking", "blog": "http://coenraets.org"}, 7 | {"id": 2, "firstName": "Julie", "lastName": "Taylor", "managerId": 1, "managerName": "James King", "reports": 2, "title": "VP of Marketing", "department": "Marketing", "cellPhone": "617-000-0002", "officePhone": "781-000-0002", "email": "jtaylor@fakemail.com", "city": "Boston, MA", "pic": "julie_taylor.jpg", "twitterId": "@fakejtaylor", "blog": "http://coenraets.org"}, 8 | {"id": 3, "firstName": "Eugene", "lastName": "Lee", "managerId": 1, "managerName": "James King", "reports": 0, "title": "CFO", "department": "Accounting", "cellPhone": "617-000-0003", "officePhone": "781-000-0003", "email": "elee@fakemail.com", "city": "Boston, MA", "pic": "eugene_lee.jpg", "twitterId": "@fakeelee", "blog": "http://coenraets.org"}, 9 | {"id": 4, "firstName": "John", "lastName": "Williams", "managerId": 1, "managerName": "James King", "reports": 3, "title": "VP of Engineering", "department": "Engineering", "cellPhone": "617-000-0004", "officePhone": "781-000-0004", "email": "jwilliams@fakemail.com", "city": "Boston, MA", "pic": "john_williams.jpg", "twitterId": "@fakejwilliams", "blog": "http://coenraets.org"}, 10 | {"id": 5, "firstName": "Ray", "lastName": "Moore", "managerId": 1, "managerName": "James King", "reports": 2, "title": "VP of Sales", "department": "Sales", "cellPhone": "617-000-0005", "officePhone": "781-000-0005", "email": "rmoore@fakemail.com", "city": "Boston, MA", "pic": "ray_moore.jpg", "twitterId": "@fakermoore", "blog": "http://coenraets.org"}, 11 | {"id": 6, "firstName": "Paul", "lastName": "Jones", "managerId": 4, "managerName": "John Williams", "reports": 0, "title": "QA Manager", "department": "Engineering", "cellPhone": "617-000-0006", "officePhone": "781-000-0006", "email": "pjones@fakemail.com", "city": "Boston, MA", "pic": "paul_jones.jpg", "twitterId": "@fakepjones", "blog": "http://coenraets.org"}, 12 | {"id": 7, "firstName": "Paula", "lastName": "Gates", "managerId": 4, "managerName": "John Williams", "reports": 0, "title": "Software Architect", "department": "Engineering", "cellPhone": "617-000-0007", "officePhone": "781-000-0007", "email": "pgates@fakemail.com", "city": "Boston, MA", "pic": "paula_gates.jpg", "twitterId": "@fakepgates", "blog": "http://coenraets.org"}, 13 | {"id": 8, "firstName": "Lisa", "lastName": "Wong", "managerId": 2, "managerName": "Julie Taylor", "reports": 0, "title": "Marketing Manager", "department": "Marketing", "cellPhone": "617-000-0008", "officePhone": "781-000-0008", "email": "lwong@fakemail.com", "city": "Boston, MA", "pic": "lisa_wong.jpg", "twitterId": "@fakelwong", "blog": "http://coenraets.org"}, 14 | {"id": 9, "firstName": "Gary", "lastName": "Donovan", "managerId": 2, "managerName": "Julie Taylor", "reports": 0, "title": "Marketing Manager", "department": "Marketing", "cellPhone": "617-000-0009", "officePhone": "781-000-0009", "email": "gdonovan@fakemail.com", "city": "Boston, MA", "pic": "gary_donovan.jpg", "twitterId": "@fakegdonovan", "blog": "http://coenraets.org"}, 15 | {"id": 10, "firstName": "Kathleen", "lastName": "Byrne", "managerId": 5, "managerName": "Ray Moore", "reports": 0, "title": "Sales Representative", "department": "Sales", "cellPhone": "617-000-0010", "officePhone": "781-000-0010", "email": "kbyrne@fakemail.com", "city": "Boston, MA", "pic": "kathleen_byrne.jpg", "twitterId": "@fakekbyrne", "blog": "http://coenraets.org"}, 16 | {"id": 11, "firstName": "Amy", "lastName": "Jones", "managerId": 5, "managerName": "Ray Moore", "reports": 0, "title": "Sales Representative", "department": "Sales", "cellPhone": "617-000-0011", "officePhone": "781-000-0011", "email": "ajones@fakemail.com", "city": "Boston, MA", "pic": "amy_jones.jpg", "twitterId": "@fakeajones", "blog": "http://coenraets.org"}, 17 | {"id": 12, "firstName": "Steven", "lastName": "Wells", "managerId": 4, "managerName": "John Williams", "reports": 0, "title": "Software Architect", "department": "Engineering", "cellPhone": "617-000-0012", "officePhone": "781-000-0012", "email": "swells@fakemail.com", "city": "Boston, MA", "pic": "steven_wells.jpg", "twitterId": "@fakeswells", "blog": "http://coenraets.org"} 18 | ], 19 | 20 | findById = function (id) { 21 | var employee = null, 22 | l = employees.length, 23 | i; 24 | for (i = 0; i < l; i = i + 1) { 25 | if (employees[i].id === id) { 26 | employee = employees[i]; 27 | break; 28 | } 29 | } 30 | return employee; 31 | }, 32 | 33 | findByManager = function (managerId) { 34 | var results = employees.filter(function (element) { 35 | return managerId === element.managerId; 36 | }); 37 | return results; 38 | }; 39 | 40 | 41 | angular.module('myApp.memoryServices', []) 42 | .factory('Employee', [ 43 | function () { 44 | return { 45 | query: function () { 46 | return employees; 47 | }, 48 | get: function (employee) { 49 | return findById(parseInt(employee.employeeId)); 50 | } 51 | } 52 | 53 | }]) 54 | .factory('Report', [ 55 | function () { 56 | return { 57 | query: function (employee) { 58 | return findByManager(parseInt(employee.employeeId)); 59 | } 60 | } 61 | 62 | }]); 63 | 64 | }()); -------------------------------------------------------------------------------- /client/js/rest-services.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | angular.module('myApp.restServices', ['ngResource']) 4 | .factory('Employee', ['$resource', 5 | function ($resource) { 6 | return $resource('http://localhost:3000/employees/:employeeId', {}); 7 | }]) 8 | 9 | .factory('Report', ['$resource', 10 | function ($resource) { 11 | return $resource('http://localhost:3000/employees/:employeeId/reports', {}); 12 | }]); -------------------------------------------------------------------------------- /client/lib/angular-animate.js: -------------------------------------------------------------------------------- 1 | /* 2 | AngularJS v1.2.0-rc.3 3 | (c) 2010-2012 Google, Inc. http://angularjs.org 4 | License: MIT 5 | */ 6 | (function(m,f,n){'use strict';f.module("ngAnimate",["ng"]).config(["$provide","$animateProvider",function(A,s){var v=f.noop,w=f.forEach,B=s.$$selectors,k="$$ngAnimateState",x="ng-animate",u={running:!0};A.decorator("$animate",["$delegate","$injector","$sniffer","$rootElement","$timeout","$rootScope",function(q,m,y,n,p,g){function G(a){if(a){var c=[],b={};a=a.substr(1).split(".");(y.transitions||y.animations)&&a.push("");for(var e=0;e totalY, we send preventDefault() and treat this as a swipe.
126 | // - On totalY > totalX, we let the browser handle it as a scroll.
127 |
128 | if (!startCoords) return;
129 | var coords = getCoordinates(event);
130 |
131 | totalX += Math.abs(coords.x - lastPos.x);
132 | totalY += Math.abs(coords.y - lastPos.y);
133 |
134 | lastPos = coords;
135 |
136 | if (totalX < MOVE_BUFFER_RADIUS && totalY < MOVE_BUFFER_RADIUS) {
137 | return;
138 | }
139 |
140 | // One of totalX or totalY has exceeded the buffer, so decide on swipe vs. scroll.
141 | if (totalY > totalX) {
142 | // Allow native scrolling to take over.
143 | active = false;
144 | eventHandlers['cancel'] && eventHandlers['cancel'](event);
145 | return;
146 | } else {
147 | // Prevent the browser from scrolling.
148 | event.preventDefault();
149 | eventHandlers['move'] && eventHandlers['move'](coords, event);
150 | }
151 | });
152 |
153 | element.on('touchend mouseup', function(event) {
154 | if (!active) return;
155 | active = false;
156 | eventHandlers['end'] && eventHandlers['end'](getCoordinates(event), event);
157 | });
158 | }
159 | };
160 | }]);
161 |
162 | /**
163 | * @ngdoc directive
164 | * @name ngTouch.directive:ngClick
165 | *
166 | * @description
167 | * A more powerful replacement for the default ngClick designed to be used on touchscreen
168 | * devices. Most mobile browsers wait about 300ms after a tap-and-release before sending
169 | * the click event. This version handles them immediately, and then prevents the
170 | * following click event from propagating.
171 | *
172 | * Requires the {@link ngTouch `ngTouch`} module to be installed.
173 | *
174 | * This directive can fall back to using an ordinary click event, and so works on desktop
175 | * browsers as well as mobile.
176 | *
177 | * This directive also sets the CSS class `ng-click-active` while the element is being held
178 | * down (by a mouse click or touch) so you can restyle the depressed element if you wish.
179 | *
180 | * @element ANY
181 | * @param {expression} ngClick {@link guide/expression Expression} to evaluate
182 | * upon tap. (Event object is available as `$event`)
183 | *
184 | * @example
185 | =h&&(r.resolve(n),l(q.$$intervalId),delete e[q.$$intervalId]);y||b.$apply()},g);e[q.$$intervalId]=r;return q}var e={};d.cancel=function(a){return a&&a.$$intervalId in e?(e[a.$$intervalId].reject("canceled"),clearInterval(a.$$intervalId),delete e[a.$$intervalId],
73 | !0):!1};return d}]}function ld(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),
74 | DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function hc(b){b=b.split("/");for(var a=b.length;a--;)b[a]=qb(b[a]);return b.join("/")}function ic(b,a){var c=wa(b);a.$$protocol=
75 | c.protocol;a.$$host=c.hostname;a.$$port=W(c.port)||md[c.protocol]||null}function jc(b,a){var c="/"!==b.charAt(0);c&&(b="/"+b);var d=wa(b);a.$$path=decodeURIComponent(c&&"/"===d.pathname.charAt(0)?d.pathname.substring(1):d.pathname);a.$$search=Qb(d.search);a.$$hash=decodeURIComponent(d.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function na(b,a){if(0==a.indexOf(b))return a.substr(b.length)}function Ta(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function Db(b){return b.substr(0,
76 | Ta(b).lastIndexOf("/")+1)}function kc(b,a){this.$$html5=!0;a=a||"";var c=Db(b);ic(b,this);this.$$parse=function(a){var b=na(c,a);if(!F(b))throw Eb("ipthprfx",a,c);jc(b,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Rb(this.$$search),b=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=hc(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$rewrite=function(d){var e;if((e=na(b,d))!==s)return d=e,(e=na(a,e))!==s?c+(na("/",e)||e):b+d;if((e=na(c,
77 | d))!==s)return c+e;if(c==d+"/")return c}}function Fb(b,a){var c=Db(b);ic(b,this);this.$$parse=function(d){var e=na(b,d)||na(c,d),e="#"==e.charAt(0)?na(a,e):this.$$html5?e:"";if(!F(e))throw Eb("ihshprfx",d,a);jc(e,this);this.$$compose()};this.$$compose=function(){var c=Rb(this.$$search),e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=hc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$rewrite=function(a){if(Ta(b)==Ta(a))return a}}function lc(b,a){this.$$html5=!0;Fb.apply(this,
78 | arguments);var c=Db(b);this.$$rewrite=function(d){var e;if(b==Ta(d))return d;if(e=na(c,d))return b+a+e;if(c===d+"/")return c}}function eb(b){return function(){return this[b]}}function mc(b,a){return function(c){if(z(c))return this[b];this[b]=a(c);this.$$compose();return this}}function nd(){var b="",a=!1;this.hashPrefix=function(a){return w(a)?(b=a,this):b};this.html5Mode=function(b){return w(b)?(a=b,this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement",function(c,d,e,f){function g(a){c.$broadcast("$locationChangeSuccess",
79 | h.absUrl(),a)}var h,m=d.baseHref(),k=d.url();a?(m=k.substring(0,k.indexOf("/",k.indexOf("//")+2))+(m||"/"),e=e.history?kc:lc):(m=Ta(k),e=Fb);h=new e(m,"#"+b);h.$$parse(h.$$rewrite(k));f.on("click",function(a){if(!a.ctrlKey&&!a.metaKey&&2!=a.which){for(var b=x(a.target);"a"!==B(b[0].nodeName);)if(b[0]===f[0]||!(b=b.parent())[0])return;var e=b.prop("href"),g=h.$$rewrite(e);e&&(!b.attr("target")&&g&&!a.isDefaultPrevented())&&(a.preventDefault(),g!=d.url()&&(h.$$parse(g),c.$apply(),Y.angular["ff-684208-preventDefault"]=
80 | !0))}});h.absUrl()!=k&&d.url(h.absUrl(),!0);d.onUrlChange(function(a){h.absUrl()!=a&&(c.$broadcast("$locationChangeStart",a,h.absUrl()).defaultPrevented?d.url(h.absUrl()):(c.$evalAsync(function(){var b=h.absUrl();h.$$parse(a);g(b)}),c.$$phase||c.$digest()))});var l=0;c.$watch(function(){var a=d.url(),b=h.$$replace;l&&a==h.absUrl()||(l++,c.$evalAsync(function(){c.$broadcast("$locationChangeStart",h.absUrl(),a).defaultPrevented?h.$$parse(a):(d.url(h.absUrl(),b),g(a))}));h.$$replace=!1;return l});return h}]}
81 | function od(){var b=!0,a=this;this.debugEnabled=function(a){return w(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||v;return e.apply?function(){var a=[];p(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),
82 | info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}function qa(b,a){if("constructor"===b)throw xa("isecfld",a);return b}function fb(b,a){if(b&&b.constructor===b)throw xa("isecfn",a);if(b&&b.document&&b.location&&b.alert&&b.setInterval)throw xa("isecwindow",a);if(b&&(b.nodeName||b.on&&b.find))throw xa("isecdom",a);return b}function gb(b,a,c,d,e){e=e||{};a=a.split(".");for(var f,g=0;1
190 | A;)x.pop().element.remove()}for(;w.length>z;)w.pop()[0].element.remove()}var k;if(!(k=v.match(d)))throw ve("iexp",v,ga(f));var l=c(k[2]||k[1]),m=k[4]||k[6],n=k[5],q=c(k[3]||""),p=c(k[2]?k[1]:m),r=c(k[7]),u=k[8]?c(k[8]):null,w=[[{element:f,label:""}]];C&&(a(C)(e),C.removeClass("ng-scope"),C.remove());f.html("");f.on("change",function(){e.$apply(function(){var a,c=r(e)||[],d={},g,k,l,q,t,v,x;if(y)for(k=[],q=0,v=w.length;q
14 |
{{employee.firstName}} {{employee.lastName}}
15 | {{employee.title}}
16 | {{employee.city}}
17 |