├── .bowerrc ├── .gitignore ├── LICENSE ├── README.md ├── app.js ├── bootcards-functions.js ├── bower.json ├── data ├── data.json └── index.js ├── package.json ├── public ├── bootcards-demo-app │ ├── css │ │ └── bootcards-demo-app.css │ ├── images │ │ ├── apple-touch-icon-120x120.png │ │ ├── apple-touch-icon-152x152.png │ │ ├── bootcards-splash-1024x748.png │ │ ├── bootcards-splash-1024x748@2x.png │ │ ├── bootcards-splash-320x460.png │ │ ├── bootcards-splash-320x460@2x.png │ │ ├── bootcards-splash-320x548.png │ │ ├── bootcards-splash-320x548@2x.png │ │ ├── bootcards-splash-768x1004.png │ │ └── bootcards-splash-768x1004@2x.png │ └── js │ │ └── bootcards-demo-app.js ├── images │ ├── Annabelle Malcomb.jpg │ ├── Arthur Dube.jpg │ ├── Arthur Edge.jpg │ ├── Brandon Aponte.jpg │ ├── Carlos Stuart.jpg │ ├── Chiam See Tong.jpg │ ├── Chris Grocott.jpg │ ├── Chris Massie.jpg │ ├── Christian Szot.jpg │ ├── Clinton Quincy.jpg │ ├── Cody Swinford.jpg │ ├── Curtis Rowland.jpg │ ├── Danny Shin.jpg │ ├── Darren Sizelove.jpg │ ├── Darryl Thornell.jpg │ ├── David Peters.jpg │ ├── David Tay.jpg │ ├── Donna Mazzola.jpg │ ├── Earl Saub.jpg │ ├── Elsie Garner.jpg │ ├── Evelyn Dwyer.jpg │ ├── Fred Hafer.jpg │ ├── Gideon Henry.jpg │ ├── Gregory Gant.jpg │ ├── Gurmit Sim.jpg │ ├── Harry Harkins.jpg │ ├── Jack Floyd.jpg │ ├── Jack Levy.jpg │ ├── Jack Ortiz.jpg │ ├── Jacob Monte.jpg │ ├── James Smith.jpg │ ├── Jamie Biddy.jpg │ ├── Janet Helman.jpg │ ├── Janet McKnight.jpg │ ├── Jay Muir.jpg │ ├── Jeffery Kahle.jpg │ ├── Jerry Bess.jpg │ ├── Jerry Greeley.jpg │ ├── Jerry Williamson.jpg │ ├── John Randle.jpg │ ├── Joseph Barish.jpg │ ├── Josephine Driscoll.jpg │ ├── Kelly Palin.jpg │ ├── Kelly Podesta.jpg │ ├── Kristin Rayner.jpg │ ├── Lance McHaney.jpg │ ├── Larry Drury.jpg │ ├── Laura Johnson.jpg │ ├── Laura Tejada.jpg │ ├── Lee Seng Choh.jpg │ ├── Lim Yew Jin.jpg │ ├── Lois Brush.jpg │ ├── Louisa Coale.jpg │ ├── Manuel Mills.jpg │ ├── Margaret Fielding.jpeg │ ├── Mark Booth.jpg │ ├── Mathew Salone.jpg │ ├── Matthew Shipster.jpg │ ├── Max Cuthbert.jpeg │ ├── Nelson Raia.jpg │ ├── Noreen Mends.jpg │ ├── Norman Weimer.jpg │ ├── Poh Seng Miang.jpg │ ├── Richard Bailey.jpg │ ├── Ricky Lee.jpg │ ├── Robert Caban.jpg │ ├── Robert Jarrell.jpg │ ├── Ronald Tee.jpg │ ├── Roy Moultrie.jpeg │ ├── Roy Rock.jpeg │ ├── Ryan Smith.jpg │ ├── Ryan Sydnor.jpg │ ├── Sharon Burns.jpg │ ├── Simon Primm.jpg │ ├── Sofia Acey.jpg │ ├── Stacy Korner.jpg │ ├── Stanley Marchese.jpg │ ├── Tara Wasserman.jpg │ ├── Teddy Skolnik.jpg │ ├── Terri Donner.jpg │ ├── Tony Hensley.jpg │ ├── Tyrone Studdard.jpg │ ├── Wayne Sherman.jpg │ └── Wee Kim Yaw.jpg └── snippets │ ├── base-card-form.html │ ├── chart.html │ ├── file-card.html │ ├── form-card.html │ ├── list-card.html │ ├── list-detailed.html │ ├── media-card.html │ ├── summary.html │ └── table.html ├── routes ├── company.js ├── contact.js ├── dashboard.js ├── docs.js ├── media.js ├── note.js └── settings.js └── views ├── activities_for_company.html ├── activities_for_contact.html ├── activity_edit.html ├── activity_form.html ├── charts.html ├── charts ├── closed_sales.html ├── current_month_forecast.html ├── database_size.html └── sales_product_type.html ├── companies.html ├── company.html ├── company_activity_edit.html ├── company_edit.html ├── contact.html ├── contact_activity_edit.html ├── contact_edit.html ├── contacts.html ├── contacts_for_parent.html ├── dashboard.html ├── dialog_buttons.html ├── docs.html ├── layout.hbs ├── notes.html ├── notes ├── file.html ├── media.html ├── text.html └── todo.html ├── settings.html └── settings_edit.html /.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory" : "public/bower_components", 3 | "storage": { 4 | "packages": ".bower-cache", 5 | "registry": ".bower-registry" 6 | }, 7 | "tmp": ".bower-tmp" 8 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | lib-cov 2 | *.seed 3 | *.log 4 | *.csv 5 | *.dat 6 | *.out 7 | *.pid 8 | *.gz 9 | 10 | pids 11 | logs 12 | results 13 | 14 | npm-debug.log 15 | node_modules/ 16 | bower_components/ 17 | .bower-cache/ 18 | .bower-registry/ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014, 2015 Bootcards 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | bootcards-demo-app 2 | ================== 3 | 4 | Sample application to showcase the Bootcards UI framework. It can be viewed live at demo.bootcards.org. 5 | 6 | View the app with different devices (iOS, Android, PC) to see the near-native look. 7 | 8 | Important: Not all functions have been implemented: you cannot save, add or delete items for instance. 9 | 10 | This demo application uses the following Node plugins: 11 | 12 | Express (for the web app) 13 | express-hbs (using handlebar templates server side) 14 | express-pjax (pjax partials with express) 15 | moment (date/time handling) 16 | bower (clientside libraries package manager) 17 | 18 | The following client libraries are used: 19 | 20 | - jQuery 21 | - Bootstrap v3.3 22 | - jQuery UI (slide animations) 23 | - Font Awesome (icons) 24 | - morris.js (chart demos) 25 | - Raphael 26 | - Sizzle -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Bootcards Customers demo application 3 | */ 4 | 5 | var express = require('express'); 6 | 7 | //routes 8 | var company = require('./routes/company'); 9 | var contact = require('./routes/contact'); 10 | var note = require('./routes/note'); 11 | var media = require('./routes/media'); 12 | var settings = require('./routes/settings'); 13 | var dashboard = require('./routes/dashboard'); 14 | var snippets = require('./routes/docs'); 15 | var sampleData = require('./data'); 16 | 17 | var pjson = require('./package.json'); //read the package.json file to get the current version 18 | 19 | var bc = require('./bootcards-functions'); //bootcards functions 20 | 21 | var http = require('http'); 22 | var path = require('path'); //work with paths 23 | var pjax = require('express-pjax'); //express pjax (partial reloads) 24 | var hbs = require('express-hbs'); //express handlebars 25 | var moment = require('moment'); //moment date formatting lib 26 | var app = express(); 27 | 28 | //app.use(express.compress()); 29 | //enable Express session support 30 | app.use( express.cookieParser() ); 31 | app.use( express.session({secret : 'QWERTY'})); 32 | 33 | app.set('port', 3000); 34 | app.engine( 'html', hbs.express3({ 35 | partialsDir : __dirname + '/views' 36 | })); 37 | app.set('view engine', 'html'); 38 | app.set('views', path.join(__dirname, 'views')); 39 | 40 | //pjax middleware for partials 41 | app.use(pjax()); 42 | 43 | //send session info to handlebars, check OS used to send correct stylesheet 44 | app.use(function(req, res, next){ 45 | 46 | var ua = req.headers['user-agent']; 47 | req.session.isAndroid = (ua.match(/Android/i) != null); 48 | req.session.isIos = (ua.match(/iPhone|iPad|iPod/i) != null); 49 | req.session.isDev = (process.env.NODE_ENV !='production'); 50 | req.session.test = (process.env.NODE_ENV); 51 | 52 | res.locals.session = req.session; 53 | 54 | next(); 55 | }); 56 | 57 | app.use(express.favicon()); 58 | app.use(express.urlencoded()); 59 | app.use(express.methodOverride()); 60 | app.use(app.router); 61 | 62 | var fiveDays = 5*86400000; 63 | 64 | app.use(express.static(path.join(__dirname, 'public'), { maxAge: fiveDays } ) ); 65 | 66 | //register a helper for date formatting using handlebars 67 | hbs.registerHelper("formatDate", function(datetime, format) { 68 | if (moment) { 69 | f = "ddd DD MMM YYYY HH:mm" 70 | return moment(datetime).format(f); 71 | } 72 | else { 73 | return datetime; 74 | } 75 | }); 76 | 77 | //helper to get the icon for a item type 78 | hbs.registerHelper("getIconForType", function(type) { 79 | return bc.getIconForType(type); 80 | }); 81 | 82 | //helper to get the number of data elements 83 | hbs.registerHelper('count', function(type) { 84 | switch (type) { 85 | case 'companies': 86 | return companies.length; 87 | case 'contacts': 88 | return contacts.length; 89 | case 'notes': 90 | return notes.length; 91 | case 'charts': 92 | return 4; 93 | } 94 | 95 | return 0; 96 | }); 97 | 98 | //helper to get the stylesheet for the current user agent 99 | hbs.registerHelper("getCSSforOS", function(session) { 100 | var bootCardsBase = "//cdnjs.cloudflare.com/ajax/libs/bootcards/1.1.2/css/"; 101 | if (session.isAndroid) { 102 | return ''; 103 | } else if (session.isIos) { 104 | return ''; 105 | } else { 106 | return ''; 107 | } 108 | }); 109 | 110 | hbs.registerHelper("isMobile", function(session) { 111 | return ''; 112 | }); 113 | 114 | //helper to get the app version 115 | hbs.registerHelper("getAppVersion", function() { 116 | return pjson.version; 117 | }); 118 | 119 | //read sample data 120 | companies = []; 121 | notes = []; 122 | contacts = []; 123 | 124 | sampleData.read(); 125 | 126 | //setup menu 127 | menu = [ 128 | { id : 'dashboard', name : 'Dashboard', title : 'Customers', icon : "fa-dashboard", active : false, url : '/dashboard'}, 129 | { id : 'companies', name : "Companies", title : 'Companies', icon : "fa-building-o", active : false, url : '/companies'}, 130 | { id : 'contacts', name : "Contacts", title : 'Contacts', icon : "fa-users", active : true, url : '/contacts'}, 131 | { id : 'notes', name : "Notes", title : 'Notes', icon : "fa-clipboard", active : false, url : '/notes'}, 132 | { id : 'charts', name : "Charts", title : 'Charts', icon : "fa-bar-chart-o", active : false, url : '/charts'}, 133 | { id : 'settings', name : "Settings", title : 'Settings', icon : "fa-gears", active : false, url : '/settings'} 134 | ]; 135 | 136 | // development only 137 | if ('development' == app.get('env')) { 138 | app.use(express.errorHandler()); 139 | } 140 | 141 | //routes 142 | app.get('/', dashboard.list); 143 | app.get('/dashboard', dashboard.list); 144 | 145 | app.get('/companies', company.list); 146 | app.get('/companies/add', company.add); 147 | app.get('/companies/:id', company.read); 148 | app.put('/companies/:id', company.save); 149 | app.get('/companies/:id/edit', company.edit); 150 | 151 | app.get('/companies/:id/notes', company.listNotes); 152 | app.get('/companies/:id/notes/add', company.addNote); 153 | app.get('/companies/:id/notes/:noteId', company.readNote); 154 | app.get('/companies/:id/notes/:noteId/edit', company.editNote); 155 | app.put('/companies/:id/notes', company.saveNote); //save new note 156 | app.put('/companies/:id/notes/:noteId', company.saveNote); 157 | 158 | app.get('/companies/:id/contacts/add', company.addContact); 159 | 160 | app.get('/contacts', contact.list); //list 161 | app.put('/contacts', contact.save); //save new contact 162 | app.get('/contacts/add', contact.add); 163 | app.get('/contacts/:id', contact.read); //read a contact 164 | app.put('/contacts/:id', contact.save); //save a specific contact 165 | app.get('/contacts/:id/edit', contact.edit); 166 | 167 | app.get('/contacts/:id/notes', contact.listNotes); 168 | app.get('/contacts/:id/notes/add', contact.addNote); 169 | app.get('/contacts/:id/notes/:noteId', contact.readNote); 170 | app.get('/contacts/:id/notes/:noteId/edit', contact.editNote); 171 | app.put('/contacts/:id/notes', contact.saveNote); //save new note in contact 172 | app.put('/contacts/:id/notes/:noteId', contact.saveNote); 173 | 174 | app.get('/notes', note.list); 175 | app.get('/notes/add/:contactId', note.add); 176 | app.get('/notes/add', note.add); 177 | app.get('/notes/:id', note.read); 178 | app.get('/notes/:id/edit', note.edit); 179 | app.put('/notes', note.save); 180 | 181 | app.get('/charts', media.list); 182 | 183 | app.get('/settings', settings.read); 184 | app.get('/settings/edit', settings.edit); 185 | 186 | app.get('/snippets/:id', snippets.show); 187 | 188 | http 189 | .createServer(app) 190 | .listen(app.get('port'), function(){ 191 | console.log('Bootcards demo app listening on port ' + app.get('port')); 192 | } 193 | ); 194 | -------------------------------------------------------------------------------- /bootcards-functions.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | //sort an object by a property 4 | exports.sortByField = function(data, field) { 5 | 6 | return data.sort( 7 | 8 | function(a,b) { 9 | return ( (a[field] > b[field]) ? 1 : ((a[field] < b[field]) ? -1 : 0)); 10 | } 11 | 12 | ); 13 | 14 | } 15 | 16 | //set the active menu 17 | exports.getActiveMenu = function(menu, id) { 18 | 19 | for (var i=0; i" 6 | ], 7 | "license": "MIT", 8 | "ignore": [ 9 | "**/.*", 10 | "node_modules", 11 | "bower_components", 12 | "test", 13 | "tests" 14 | ], 15 | "dependencies": { 16 | "bootcards": "1.1.2", 17 | "jquery": "2.x", 18 | "jquery.ui": "*", 19 | "jquery-pjax": "1.9.2", 20 | "morris.js": "~0.5.1" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /data/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "contacts": [ 3 | { 4 | "lastName": "Acey", 5 | "department": "Finance", 6 | "profileImage": "Sofia Acey.jpg", 7 | "salutation": "mrs", 8 | "jobTitle": "Finance Director (ZCT)", 9 | "firstName": "Sofia", 10 | "id": "VBMJHwcLX3Vx", 11 | "email": "Sofia.Acey@masung.com", 12 | "company": "Masung Corp.", 13 | "phone": "+1 650-555-0055", 14 | "parentIds": [ 15 | "bxo811h6xclc" 16 | ] 17 | }, 18 | { 19 | "lastName": "Barish", 20 | "department": "IT", 21 | "profileImage": "Joseph Barish.jpg", 22 | "salutation": "", 23 | "jobTitle": "Engineer", 24 | "firstName": "Joseph", 25 | "id": "sH5PxrdzkZ3T", 26 | "email": "Joseph.Barish@masung.com", 27 | "company": "Masung Corp.", 28 | "phone": "+1 650-555-0029", 29 | "parentIds": [ 30 | "bxo811h6xclc" 31 | ] 32 | }, 33 | 34 | { 35 | "lastName": "Bess", 36 | "department": "IT", 37 | "profileImage": "Jerry Bess.jpg", 38 | "salutation": "", 39 | "jobTitle": "Project Lead (Dragon Team)", 40 | "firstName": "Jerry", 41 | "id": "s9RSWs87B4qv", 42 | "email": "Jerry.Bess@zetacomm.com", 43 | "company": "ZetaComm", 44 | "phone": "+1 650-555-0021", 45 | "parentIds": [ 46 | "99kkk8tvfxts" 47 | ] 48 | }, 49 | { 50 | "lastName": "Biddy", 51 | "department": "IT", 52 | "profileImage": "Jamie Biddy.jpg", 53 | "salutation": "", 54 | "jobTitle": "Senior Engineer", 55 | "firstName": "Jamie", 56 | "id": "eNK2QXWJa8E3", 57 | "email": "Jamie.Biddy@masung.com", 58 | "company": "Masung Corp.", 59 | "phone": "+44 118 496 0005", 60 | "parentIds": [ 61 | "bxo811h6xclc" 62 | ] 63 | }, 64 | { 65 | "lastName": "Booth", 66 | "department": "IT", 67 | "profileImage": "Mark Booth.jpg", 68 | "salutation": "", 69 | "jobTitle": "Engineer", 70 | "firstName": "Mark", 71 | "id": "kNQv7Urv7AzX", 72 | "email": "Mark.Booth@burningcore.com", 73 | "company": "Burning Core", 74 | "phone": "+44 118 496 0012", 75 | "parentIds": [ 76 | "o8v9urr7vchs" 77 | ] 78 | }, 79 | 80 | 81 | 82 | 83 | { 84 | "lastName": "Burns", 85 | "department": "Sales", 86 | "profileImage": "Sharon Burns.jpg", 87 | "salutation": "", 88 | "jobTitle": "Account Director, EMEA (ZCT)", 89 | "firstName": "Sharon", 90 | "id": "HZTBeGFQCzPs", 91 | "email": "Sharon.Burns@derenden.com", 92 | "company": "Derenden Systems", 93 | "phone": "+44 118 496 0015", 94 | "parentIds": [ 95 | "1btyjc1z2juo0" 96 | ] 97 | }, 98 | 99 | { 100 | "lastName": "Donner", 101 | "department": "Sales", 102 | "profileImage": "Terri Donner.jpg", 103 | "salutation": "", 104 | "jobTitle": "Account Manager, North America", 105 | "firstName": "Terri", 106 | "id": "3D6vqH8yZrD4", 107 | "email": "Terri.Donner@elparvis.com", 108 | "company": "Elparvis", 109 | "phone": "+1 339-555-0110", 110 | "parentIds": [ 111 | "18hd5uqmx2ark" 112 | ] 113 | }, 114 | 115 | { 116 | "lastName": "Driscoll", 117 | "department": "IT", 118 | "profileImage": "Josephine Driscoll.jpg", 119 | "salutation": "", 120 | "jobTitle": "Engineer", 121 | "firstName": "Josephine", 122 | "id": "rvQv8GcxZFaN", 123 | "email": "Josephine.Driscoll@enmarismobile.com", 124 | "company": "Enmaris Mobile", 125 | "phone": "+1 339-555-0106", 126 | "parentIds": [ 127 | "c37lx4rahhc0" 128 | ] 129 | }, 130 | { 131 | "lastName": "Dwyer", 132 | "department": "IT", 133 | "profileImage": "Evelyn Dwyer.jpg", 134 | "salutation": "", 135 | "jobTitle": "Engineer", 136 | "firstName": "Evelyn", 137 | "id": "K4NWfXGSPPWk", 138 | "email": "Evelyn.Dwyer@entekra.com", 139 | "company": "Entekra Inc.", 140 | "phone": "+1 650-555-0037", 141 | "parentIds": [ 142 | "15elgz2vp03r4" 143 | ] 144 | }, 145 | 146 | 147 | 148 | { 149 | "lastName": "Floyd", 150 | "department": "IT", 151 | "profileImage": "Jack Floyd.jpg", 152 | "salutation": "", 153 | "jobTitle": "Engineer", 154 | "firstName": "Jack", 155 | "id": "FpTLcabz7TFs", 156 | "email": "Jack.Floyd@ferakon.com", 157 | "company": "Ferakon", 158 | "phone": "+65 6755 1218", 159 | "parentIds": [ 160 | "glhmx077n1ts" 161 | ] 162 | }, 163 | 164 | { 165 | "lastName": "Grocott", 166 | "department": "IT", 167 | "profileImage": "Chris Grocott.jpg", 168 | "salutation": "", 169 | "jobTitle": "Engineer", 170 | "firstName": "Chris", 171 | "id": "RpGBhrAXGP8S", 172 | "email": "Chris.Grocott@ganonite.com", 173 | "company": "Ganonite Corp.", 174 | "phone": "+44 118 496 0009", 175 | "parentIds": [ 176 | "qcrpoxmvwvsw" 177 | ] 178 | }, 179 | { 180 | "lastName": "Hafer", 181 | "department": "Sales", 182 | "profileImage": "Fred Hafer.jpg", 183 | "salutation": "", 184 | "jobTitle": "Senior account manager", 185 | "firstName": "Fred", 186 | "id": "Gv8h6f4UDL84", 187 | "email": "Fred.Hafer@GVSB.com", 188 | "company": "GVSB Corp.", 189 | "phone": "+1 650-555-0023", 190 | "parentIds": [ 191 | "ee3kc2fsa134" 192 | ] 193 | }, 194 | { 195 | "lastName": "Harkins", 196 | "department": "", 197 | "profileImage": "Harry Harkins.jpg", 198 | "salutation": "", 199 | "jobTitle": "Senior Engineer", 200 | "firstName": "Harry", 201 | "id": "6BegTWK928p1", 202 | "email": "Harry.Harkins@haven.com", 203 | "company": "Haven Inc.", 204 | "phone": "+65 6755 1217", 205 | "parentIds": [ 206 | "i5upi7vvgj5s" 207 | ] 208 | }, 209 | 210 | 211 | 212 | { 213 | "lastName": "Jarrell", 214 | "department": "", 215 | "profileImage": "Robert Jarrell.jpg", 216 | "salutation": "", 217 | "jobTitle": "Online Analytics Manager", 218 | "firstName": "Robert", 219 | "id": "cNqW3fUXdrhB", 220 | "email": "Robert.Jarrell@losslesssystems.com", 221 | "company": "Lossless Systems", 222 | "phone": "+1 650-555-0049", 223 | "parentIds": [ 224 | "1dsfd8h8k0a9s" 225 | ] 226 | }, 227 | { 228 | "lastName": "Johnson", 229 | "department": "", 230 | "profileImage": "Laura Johnson.jpg", 231 | "salutation": "", 232 | "jobTitle": "Engineer", 233 | "firstName": "Laura", 234 | "id": "cA2vBwEZmx88", 235 | "email": "Laura.Johnson@losslesssystems.com", 236 | "company": "Lossless Systems", 237 | "phone": "+1 650-555-0046", 238 | "parentIds": [ 239 | "1dsfd8h8k0a9s" 240 | ] 241 | }, 242 | { 243 | "lastName": "Korner", 244 | "department": "", 245 | "profileImage": "Stacy Korner.jpg", 246 | "salutation": "", 247 | "jobTitle": "Engineer", 248 | "firstName": "Stacy", 249 | "id": "zBeGXPFzns4a", 250 | "email": "Stacy.Korner@mecharta.com", 251 | "company": "Mecharta Corp.", 252 | "phone": "+1 650-555-0027", 253 | "parentIds": [ 254 | "whaadxwp8g00" 255 | ] 256 | }, 257 | { 258 | "lastName": "Lee", 259 | "department": "", 260 | "profileImage": "Ricky Lee.jpg", 261 | "salutation": "", 262 | "jobTitle": "Senior Engineer", 263 | "firstName": "Ricky", 264 | "id": "C7eztra8Hb5x", 265 | "email": "Ricky.Lee@NoHi.com", 266 | "company": "NoHi Corp.", 267 | "phone": "+65 6755 1211", 268 | "parentIds": [ 269 | "chi34a7vmmtc" 270 | ] 271 | }, 272 | 273 | 274 | 275 | { 276 | "lastName": "Malcomb", 277 | "department": "", 278 | "profileImage": "Annabelle Malcomb.jpg", 279 | "salutation": "", 280 | "jobTitle": "Engineer", 281 | "firstName": "Annabelle", 282 | "id": "fAZM3gmKtw9T", 283 | "email": "Annabelle.Malcomb@peranos.com", 284 | "company": "Peranos Inc.", 285 | "phone": "+1 650-555-0063", 286 | "parentIds": [ 287 | "sf2xn0pqeccg" 288 | ] 289 | }, 290 | 291 | { 292 | "lastName": "Massie", 293 | "department": "", 294 | "profileImage": "Chris Massie.jpg", 295 | "salutation": "", 296 | "jobTitle": "Engineer", 297 | "firstName": "Chris", 298 | "id": "yV6ZbrhAGpfZ", 299 | "email": "Chris.Massie@sayad.com", 300 | "company": "Sayad Mobile", 301 | "phone": "+1 650-555-0043", 302 | "parentIds": [ 303 | "1k5oekr8m2akg" 304 | ] 305 | }, 306 | 307 | 308 | { 309 | "lastName": "Ortiz", 310 | "department": "", 311 | "profileImage": "Jack Ortiz.jpg", 312 | "salutation": "", 313 | "jobTitle": "Project Lead (MSM Team)", 314 | "firstName": "Jack", 315 | "id": "Jdacn3J62x73", 316 | "email": "Jack.Ortiz@silverrocket.com", 317 | "company": "Silver Rocket Inc.", 318 | "phone": "+1 650-555-0044", 319 | "parentIds": [ 320 | "1f98tdka89tz4" 321 | ] 322 | }, 323 | 324 | 325 | 326 | { 327 | "lastName": "Peters", 328 | "department": "", 329 | "profileImage": "David Peters.jpg", 330 | "salutation": "", 331 | "jobTitle": "Engineer", 332 | "firstName": "David", 333 | "id": "M2B8Nd3rMey5", 334 | "email": "David.Peters@techtractus.com", 335 | "company": "Techtractus Inc.", 336 | "phone": "+44 118 496 0004", 337 | "parentIds": [ 338 | "1x4u7i4g1gcg0" 339 | ] 340 | }, 341 | 342 | { 343 | "lastName": "Podesta", 344 | "department": "", 345 | "profileImage": "Kelly Podesta.jpg", 346 | "salutation": "", 347 | "jobTitle": "Engineer", 348 | "firstName": "Kelly", 349 | "id": "3DTWzkqktNSG", 350 | "email": "Kelly.Podesta@telkon.com", 351 | "company": "Telkon Corp.", 352 | "phone": "+1 650-555-0031", 353 | "parentIds": [ 354 | "693otga0nrpc" 355 | ] 356 | }, 357 | { 358 | "lastName": "Primm", 359 | "department": "", 360 | "profileImage": "Simon Primm.jpg", 361 | "salutation": "", 362 | "jobTitle": "Senior Engineer", 363 | "firstName": "Simon", 364 | "id": "zPBpZLWrbSq8", 365 | "email": "Simon.Primm@telkon.com", 366 | "company": "Telkon Corp.", 367 | "phone": "+44 118 496 0000", 368 | "parentIds": [ 369 | "693otga0nrpc" 370 | ] 371 | }, 372 | 373 | { 374 | "lastName": "Quincy", 375 | "department": "", 376 | "profileImage": "Clinton Quincy.jpg", 377 | "salutation": "", 378 | "jobTitle": "SVP, ZCT Division", 379 | "firstName": "Clinton", 380 | "id": "MgGUaVg4Jy41", 381 | "email": "Clinton.Quincy@terrestria.com", 382 | "company": "Terrestria Inc.", 383 | "phone": "+1 650-555-0201", 384 | "parentIds": [ 385 | "1wxmpmsfy6by8" 386 | ] 387 | }, 388 | { 389 | "lastName": "Raia", 390 | "department": "", 391 | "profileImage": "Nelson Raia.jpg", 392 | "salutation": "", 393 | "jobTitle": "Engineer", 394 | "firstName": "Nelson", 395 | "id": "RmNmSEeDWaUK", 396 | "email": "Nelson.Raia@tidus.com", 397 | "company": "Tidus International", 398 | "phone": "+44 118 496 0021", 399 | "parentIds": [ 400 | "soltv3tewuf4" 401 | ] 402 | }, 403 | { 404 | "lastName": "Rayner", 405 | "department": "", 406 | "profileImage": "Kristin Rayner.jpg", 407 | "salutation": "", 408 | "jobTitle": "Senior Engineer", 409 | "firstName": "Kristin", 410 | "id": "vMUT6KnAq3Lt", 411 | "email": "Kristin.Rayner@trantion.com", 412 | "company": "Trantion Systems", 413 | "phone": "+1 650-555-0022", 414 | "parentIds": [ 415 | "1msqiu39cn9j4" 416 | ] 417 | }, 418 | { 419 | "lastName": "Rowland", 420 | "department": "", 421 | "profileImage": "Curtis Rowland.jpg", 422 | "salutation": "", 423 | "jobTitle": "Project Lead (Multimedia Solutions)", 424 | "firstName": "Curtis", 425 | "id": "bAvdNCMLFDwP", 426 | "email": "Curtis.Rowland@travanus.com", 427 | "company": "Travanus", 428 | "phone": "+1 650-555-0038", 429 | "parentIds": [ 430 | "1tthlkjdy53pc" 431 | ] 432 | }, 433 | { 434 | "lastName": "Salone", 435 | "department": "", 436 | "profileImage": "Mathew Salone.jpg", 437 | "salutation": "", 438 | "jobTitle": "Engineer", 439 | "firstName": "Mathew", 440 | "id": "1H4bs81t1mBp", 441 | "email": "Mathew.Salone@yoracle.com", 442 | "company": "Yoracle Inc.", 443 | "phone": "+1 650-555-0060", 444 | "parentIds": [ 445 | "raf5cjru4ef4" 446 | ] 447 | }, 448 | 449 | { 450 | "lastName": "See Tong", 451 | "department": "", 452 | "profileImage": "Chiam See Tong.jpg", 453 | "salutation": "", 454 | "jobTitle": "Senior Engineer", 455 | "firstName": "Chiam", 456 | "id": "nuer1hQbtEwr", 457 | "email": "Chiam.See.Tong@yunalesca.com", 458 | "company": "Yunalesca", 459 | "phone": "+65 6755 1200", 460 | "parentIds": [ 461 | "mco1ecpaxp8g" 462 | ] 463 | }, 464 | { 465 | "lastName": "Sherman", 466 | "department": "", 467 | "profileImage": "Wayne Sherman.jpg", 468 | "salutation": "", 469 | "jobTitle": "Senior Engineer", 470 | "firstName": "Wayne", 471 | "id": "Zum5QaksnT38", 472 | "email": "Wayne.Sherman@burningcore.com", 473 | "company": "Burning Core", 474 | "phone": "+44 118 496 0008", 475 | "parentIds": [ 476 | "o8v9urr7vchs" 477 | ] 478 | }, 479 | { 480 | "lastName": "Shin", 481 | "department": "", 482 | "profileImage": "Danny Shin.jpg", 483 | "salutation": "", 484 | "jobTitle": "Engineer", 485 | "firstName": "Danny", 486 | "id": "ftBZ9u64tAgq", 487 | "email": "Danny.Shin@burningcore.com", 488 | "company": "Burning Core", 489 | "phone": "+65 6755 1212", 490 | "parentIds": [ 491 | "o8v9urr7vchs" 492 | ] 493 | }, 494 | { 495 | "lastName": "Shipster", 496 | "department": "", 497 | "profileImage": "Matthew Shipster.jpg", 498 | "salutation": "", 499 | "jobTitle": "Finance Manager, APAC (ZCT)", 500 | "firstName": "Matthew", 501 | "id": "puSBydW5xgup", 502 | "email": "Matthew.Shipster@materella.com", 503 | "company": "Materella Inc.", 504 | "phone": "+65 6755 1216", 505 | "parentIds": [ 506 | "l483t0vx6vwg" 507 | ] 508 | }, 509 | { 510 | "lastName": "Sizelove", 511 | "department": "", 512 | "profileImage": "Darren Sizelove.jpg", 513 | "salutation": "", 514 | "jobTitle": "HR Manager (ZCT)", 515 | "firstName": "Darren", 516 | "id": "QQkRbSVxfARv", 517 | "email": "Darren.Sizelove@camion.com", 518 | "company": "Camion Corp.", 519 | "phone": "+1 650-555-0054", 520 | "parentIds": [ 521 | "189e4u76bqh34" 522 | ] 523 | }, 524 | { 525 | "lastName": "Skolnik", 526 | "department": "", 527 | "profileImage": "Teddy Skolnik.jpg", 528 | "salutation": "", 529 | "jobTitle": "Senior Engineer", 530 | "firstName": "Teddy", 531 | "id": "BHTmv2NpG3eU", 532 | "email": "Teddy.Skolnik@camion.com", 533 | "company": "Camion Corp.", 534 | "phone": "+1 339-555-0100", 535 | "parentIds": [ 536 | "189e4u76bqh34" 537 | ] 538 | }, 539 | { 540 | "lastName": "Smith", 541 | "department": "", 542 | "profileImage": "James Smith.jpg", 543 | "salutation": "", 544 | "jobTitle": "Engineer", 545 | "firstName": "James", 546 | "id": "nAhPG98D29yU", 547 | "email": "James.Smith@derenden.com", 548 | "company": "Derenden Systems", 549 | "phone": "+44 118 496 0002", 550 | "parentIds": [ 551 | "1btyjc1z2juo0" 552 | ] 553 | }, 554 | { 555 | "lastName": "Smith", 556 | "department": "", 557 | "profileImage": "Ryan Smith.jpg", 558 | "salutation": "", 559 | "jobTitle": "Account Manager, EMEA", 560 | "firstName": "Ryan", 561 | "id": "WJTQPvwJx8ZH", 562 | "email": "Ryan.Smith@elparvis.com", 563 | "company": "Elparvis", 564 | "phone": "+44 118 496 0016", 565 | "parentIds": [ 566 | "18hd5uqmx2ark" 567 | ] 568 | }, 569 | { 570 | "lastName": "Swinford", 571 | "department": "", 572 | "profileImage": "Cody Swinford.jpg", 573 | "salutation": "", 574 | "jobTitle": "SVP, ZES Division", 575 | "firstName": "Cody", 576 | "id": "HTJey62NEsuR", 577 | "email": "Cody.Swinford@elparvis.com", 578 | "company": "Elparvis", 579 | "phone": "+1 650-555-0202", 580 | "parentIds": [ 581 | "18hd5uqmx2ark" 582 | ] 583 | }, 584 | 585 | { 586 | "lastName": "Tay", 587 | "department": "", 588 | "profileImage": "David Tay.jpg", 589 | "salutation": "", 590 | "jobTitle": "Senior Engineer", 591 | "firstName": "David", 592 | "id": "tRzSwETzMVbT", 593 | "email": "David.Tay@enmarismobile.com", 594 | "company": "Enmaris Mobile", 595 | "phone": "+65 6755 1209", 596 | "parentIds": [ 597 | "c37lx4rahhc0" 598 | ] 599 | }, 600 | 601 | 602 | { 603 | "lastName": "Williamson", 604 | "department": "", 605 | "profileImage": "Jerry Williamson.jpg", 606 | "salutation": "", 607 | "jobTitle": "Account Director, North America (ZCT)", 608 | "firstName": "Jerry", 609 | "id": "rT3zaDLrzfSK", 610 | "email": "Jerry.Williamson@ferakon.com", 611 | "company": "Ferakon", 612 | "phone": "+1 650-555-0051", 613 | "parentIds": [ 614 | "glhmx077n1ts" 615 | ] 616 | }, 617 | { 618 | "lastName": "Yew Jin", 619 | "department": "", 620 | "profileImage": "Lim Yew Jin.jpg", 621 | "salutation": "", 622 | "jobTitle": "Engineer", 623 | "firstName": "Lim", 624 | "id": "vhVqL5KRyhp2", 625 | "email": "Lim.Yew.Jin@ferakon.com", 626 | "company": "Ferakon", 627 | "phone": "+65 6755 1202", 628 | "parentIds": [ 629 | "glhmx077n1ts" 630 | ] 631 | } 632 | ], 633 | "companies": [ 634 | { 635 | "type":"", 636 | "website": "", 637 | "location": "", 638 | "country": "USA", 639 | "city": "Washington, D.C.", 640 | "name": "ZetaComm", 641 | "id": "99kkk8tvfxts", 642 | "email": "contactus@zetacomm.com", 643 | "address1": "", 644 | "zipCode": "", 645 | "address2": "", 646 | "phone": "202-555-5555" 647 | }, 648 | { 649 | "type":"", 650 | "website": "", 651 | "location": "", 652 | "country": "Japan", 653 | "city": "Tokyo", 654 | "name": "Masung Corp.", 655 | "id": "bxo811h6xclc", 656 | "email": "", 657 | "address1": "", 658 | "zipCode": "", 659 | "address2": "", 660 | "phone": "" 661 | }, 662 | { 663 | "type":"", 664 | "website": "", 665 | "location": "", 666 | "country": "USA", 667 | "city": "Seattle", 668 | "name": "Materella Inc.", 669 | "id": "l483t0vx6vwg", 670 | "email": "", 671 | "address1": "", 672 | "zipCode": "", 673 | "address2": "", 674 | "phone": "" 675 | }, 676 | { 677 | "type":"", 678 | "website": "", 679 | "location": "", 680 | "country": "USA", 681 | "city": "Portland", 682 | "name": "Trantion Systems", 683 | "id": "1msqiu39cn9j4", 684 | "email": "", 685 | "address1": "", 686 | "zipCode": "", 687 | "address2": "", 688 | "phone": "" 689 | }, 690 | { 691 | "type":"", 692 | "website": "", 693 | "location": "", 694 | "country": "USA", 695 | "city": "Miami", 696 | "name": "Peranos Inc.", 697 | "id": "sf2xn0pqeccg", 698 | "email": "", 699 | "address1": "", 700 | "zipCode": "", 701 | "address2": "", 702 | "phone": "" 703 | }, 704 | { 705 | "type":"", 706 | "website": "", 707 | "location": "", 708 | "country": "USA", 709 | "city": "Austin", 710 | "name": "GVSB Corp.", 711 | "id": "ee3kc2fsa134", 712 | "email": "", 713 | "address1": "", 714 | "zipCode": "", 715 | "address2": "", 716 | "phone": "" 717 | }, 718 | { 719 | "type":"", 720 | "website": "", 721 | "location": "", 722 | "country": "USA", 723 | "city": "Los Angeles", 724 | "name": "Silver Rocket Inc.", 725 | "id": "1f98tdka89tz4", 726 | "email": "", 727 | "address1": "", 728 | "zipCode": "", 729 | "address2": "", 730 | "phone": "" 731 | }, 732 | { 733 | "type":"", 734 | "website": "", 735 | "location": "", 736 | "country": "UAE", 737 | "city": "Abu Dhabi", 738 | "name": "Sayad Mobile", 739 | "id": "1k5oekr8m2akg", 740 | "email": "", 741 | "address1": "", 742 | "zipCode": "", 743 | "address2": "", 744 | "phone": "" 745 | }, 746 | { 747 | "type":"", 748 | "website": "", 749 | "location": "", 750 | "country": "China", 751 | "city": "Hong Kong", 752 | "name": "Yunalesca", 753 | "id": "mco1ecpaxp8g", 754 | "email": "", 755 | "address1": "", 756 | "zipCode": "", 757 | "address2": "", 758 | "phone": "" 759 | }, 760 | { 761 | "type":"", 762 | "website": "", 763 | "location": "", 764 | "country": "Japan", 765 | "city": "Tokyo", 766 | "name": "NoHi Corp.", 767 | "id": "chi34a7vmmtc", 768 | "email": "", 769 | "address1": "", 770 | "zipCode": "", 771 | "address2": "", 772 | "phone": "" 773 | }, 774 | { 775 | "type":"", 776 | "website": "", 777 | "location": "", 778 | "country": "USA", 779 | "city": "New York", 780 | "name": "Tidus International", 781 | "id": "soltv3tewuf4", 782 | "email": "", 783 | "address1": "", 784 | "zipCode": "", 785 | "address2": "", 786 | "phone": "" 787 | }, 788 | { 789 | "type":"", 790 | "website": "", 791 | "location": "", 792 | "country": "USA", 793 | "city": "Boston", 794 | "name": "Ferakon", 795 | "id": "glhmx077n1ts", 796 | "email": "", 797 | "address1": "", 798 | "zipCode": "", 799 | "address2": "", 800 | "phone": "" 801 | }, 802 | { 803 | "type":"", 804 | "website": "", 805 | "location": "", 806 | "country": "USA", 807 | "city": "Sacramento", 808 | "name": "Terrestria Inc.", 809 | "id": "1wxmpmsfy6by8", 810 | "email": "", 811 | "address1": "", 812 | "zipCode": "", 813 | "address2": "", 814 | "phone": "" 815 | }, 816 | { 817 | "type":"", 818 | "website": "", 819 | "location": "", 820 | "country": "England", 821 | "city": "London", 822 | "name": "Ganonite Corp.", 823 | "id": "qcrpoxmvwvsw", 824 | "email": "", 825 | "address1": "", 826 | "zipCode": "", 827 | "address2": "", 828 | "phone": "" 829 | }, 830 | { 831 | "type":"", 832 | "website": "", 833 | "location": "", 834 | "country": "China", 835 | "city": "Hong Kong", 836 | "name": "Yoracle Inc.", 837 | "id": "raf5cjru4ef4", 838 | "email": "", 839 | "address1": "", 840 | "zipCode": "", 841 | "address2": "", 842 | "phone": "" 843 | }, 844 | { 845 | "type":"", 846 | "website": "", 847 | "location": "", 848 | "country": "Japan", 849 | "city": "Tokyo", 850 | "name": "Elparvis", 851 | "id": "18hd5uqmx2ark", 852 | "email": "", 853 | "address1": "", 854 | "zipCode": "", 855 | "address2": "", 856 | "phone": "" 857 | }, 858 | { 859 | "type":"", 860 | "website": "", 861 | "location": "", 862 | "country": "USA", 863 | "city": "New York", 864 | "name": "Haven Inc.", 865 | "id": "i5upi7vvgj5s", 866 | "email": "", 867 | "address1": "", 868 | "zipCode": "", 869 | "address2": "", 870 | "phone": "" 871 | }, 872 | { 873 | "type":"", 874 | "website": "", 875 | "location": "", 876 | "country": "USA", 877 | "city": "Boston", 878 | "name": "Incantata", 879 | "id": "1f2jqp9rh105c", 880 | "email": "", 881 | "address1": "", 882 | "zipCode": "", 883 | "address2": "", 884 | "phone": "" 885 | }, 886 | { 887 | "type":"", 888 | "website": "", 889 | "location": "", 890 | "country": "USA", 891 | "city": "Sacramento", 892 | "name": "Travanus", 893 | "id": "1tthlkjdy53pc", 894 | "email": "", 895 | "address1": "", 896 | "zipCode": "", 897 | "address2": "", 898 | "phone": "" 899 | }, 900 | { 901 | "type":"", 902 | "website": "", 903 | "location": "", 904 | "country": "Japan", 905 | "city": "Tokyo", 906 | "name": "Orlitz Corp.", 907 | "id": "1b69hxm8bxxq8", 908 | "email": "", 909 | "address1": "", 910 | "zipCode": "", 911 | "address2": "", 912 | "phone": "" 913 | }, 914 | { 915 | "type":"", 916 | "website": "", 917 | "location": "", 918 | "country": "England", 919 | "city": "London", 920 | "name": "Enmaris Mobile", 921 | "id": "c37lx4rahhc0", 922 | "email": "", 923 | "address1": "", 924 | "zipCode": "", 925 | "address2": "", 926 | "phone": "" 927 | }, 928 | { 929 | "type":"", 930 | "website": "", 931 | "location": "", 932 | "country": "USA", 933 | "city": "Boston", 934 | "name": "Telkon Corp.", 935 | "id": "693otga0nrpc", 936 | "email": "", 937 | "address1": "", 938 | "zipCode": "", 939 | "address2": "", 940 | "phone": "" 941 | }, 942 | { 943 | "type":"", 944 | "website": "", 945 | "location": "", 946 | "country": "England", 947 | "city": "London", 948 | "name": "Shearven Inc.", 949 | "id": "jnpn87e459mo", 950 | "email": "", 951 | "address1": "", 952 | "zipCode": "", 953 | "address2": "", 954 | "phone": "" 955 | }, 956 | { 957 | "type":"", 958 | "website": "", 959 | "location": "", 960 | "country": "USA", 961 | "city": "Albuquerque", 962 | "name": "Derenden Systems", 963 | "id": "1btyjc1z2juo0", 964 | "email": "", 965 | "address1": "", 966 | "zipCode": "", 967 | "address2": "", 968 | "phone": "" 969 | }, 970 | { 971 | "type":"", 972 | "website": "", 973 | "location": "", 974 | "country": "USA", 975 | "city": "Boston", 976 | "name": "House & Hawk", 977 | "id": "1qhfv0phqlbls", 978 | "email": "", 979 | "address1": "", 980 | "zipCode": "", 981 | "address2": "", 982 | "phone": "" 983 | }, 984 | { 985 | "type":"", 986 | "website": "", 987 | "location": "", 988 | "country": "China", 989 | "city": "Hong Kong", 990 | "name": "Fyre Corp.", 991 | "id": "17cuf2o37sao0", 992 | "email": "", 993 | "address1": "", 994 | "zipCode": "", 995 | "address2": "", 996 | "phone": "" 997 | }, 998 | { 999 | "type":"", 1000 | "website": "", 1001 | "location": "", 1002 | "country": "Germany", 1003 | "city": "Frankfurt", 1004 | "name": "Luke Ltd.", 1005 | "id": "hzrmm25z7f9c", 1006 | "email": "", 1007 | "address1": "", 1008 | "zipCode": "", 1009 | "address2": "", 1010 | "phone": "" 1011 | }, 1012 | { 1013 | "type":"", 1014 | "website": "", 1015 | "location": "", 1016 | "country": "USA", 1017 | "city": "New York", 1018 | "name": "Zing International", 1019 | "id": "9r6e6fl7ak8w", 1020 | "email": "", 1021 | "address1": "", 1022 | "zipCode": "", 1023 | "address2": "", 1024 | "phone": "" 1025 | }, 1026 | { 1027 | "type":"", 1028 | "website": "", 1029 | "location": "", 1030 | "country": "India", 1031 | "city": "New Delhi", 1032 | "name": "Entekra Inc.", 1033 | "id": "15elgz2vp03r4", 1034 | "email": "", 1035 | "address1": "", 1036 | "zipCode": "", 1037 | "address2": "", 1038 | "phone": "" 1039 | }, 1040 | { 1041 | "type":"", 1042 | "website": "", 1043 | "location": "", 1044 | "country": "Spain", 1045 | "city": "Madrid", 1046 | "name": "Techyon", 1047 | "id": "c1ajubcvbf28", 1048 | "email": "", 1049 | "address1": "", 1050 | "zipCode": "", 1051 | "address2": "", 1052 | "phone": "" 1053 | }, 1054 | { 1055 | "type":"", 1056 | "website": "", 1057 | "location": "", 1058 | "country": "China", 1059 | "city": "Beijing", 1060 | "name": "Lossless Systems", 1061 | "id": "1dsfd8h8k0a9s", 1062 | "email": "", 1063 | "address1": "", 1064 | "zipCode": "", 1065 | "address2": "", 1066 | "phone": "" 1067 | }, 1068 | { 1069 | "type":"", 1070 | "website": "", 1071 | "location": "", 1072 | "country": "Netherlands", 1073 | "city": "Amsterdam", 1074 | "name": "Seventh Level", 1075 | "id": "yvtlvb2hog00", 1076 | "email": "", 1077 | "address1": "", 1078 | "zipCode": "", 1079 | "address2": "", 1080 | "phone": "" 1081 | }, 1082 | { 1083 | "type":"", 1084 | "website": "", 1085 | "location": "", 1086 | "country": "USA", 1087 | "city": "Boston", 1088 | "name": "Expressway Mobile", 1089 | "id": "4shzy32qcwzk", 1090 | "email": "", 1091 | "address1": "", 1092 | "zipCode": "", 1093 | "address2": "", 1094 | "phone": "" 1095 | }, 1096 | { 1097 | "type":"", 1098 | "website": "", 1099 | "location": "", 1100 | "country": "England", 1101 | "city": "city", 1102 | "name": "Burning Core", 1103 | "id": "o8v9urr7vchs", 1104 | "email": "info@burningcore.com", 1105 | "address1": "a1", 1106 | "zipCode": "zip", 1107 | "address2": "a2", 1108 | "phone": "5551234" 1109 | }, 1110 | { 1111 | "type":"", 1112 | "website": "", 1113 | "location": "", 1114 | "country": "Kenya", 1115 | "city": "Nairobi", 1116 | "name": "Techtractus Inc.", 1117 | "id": "1x4u7i4g1gcg0", 1118 | "email": "", 1119 | "address1": "", 1120 | "zipCode": "", 1121 | "address2": "", 1122 | "phone": "" 1123 | }, 1124 | { 1125 | "type":"", 1126 | "website": "", 1127 | "location": "", 1128 | "country": "USA", 1129 | "city": "Seattle", 1130 | "name": "Northern Sting", 1131 | "id": "1oodcnkjc5xc", 1132 | "email": "", 1133 | "address1": "", 1134 | "zipCode": "", 1135 | "address2": "", 1136 | "phone": "" 1137 | }, 1138 | { 1139 | "type":"", 1140 | "website": "", 1141 | "location": "", 1142 | "country": "USA", 1143 | "city": "Boston", 1144 | "name": "Mecharta Corp.", 1145 | "id": "whaadxwp8g00", 1146 | "email": "", 1147 | "address1": "", 1148 | "zipCode": "", 1149 | "address2": "", 1150 | "phone": "" 1151 | }, 1152 | { 1153 | "type":"", 1154 | "website": "", 1155 | "location": "", 1156 | "country": "England", 1157 | "city": "Manchester", 1158 | "name": "KXROSS Inc.", 1159 | "id": "1sfuwcfuetr0g", 1160 | "email": "", 1161 | "address1": "", 1162 | "zipCode": "", 1163 | "address2": "", 1164 | "phone": "" 1165 | }, 1166 | { 1167 | "type":"", 1168 | "website": "", 1169 | "location": "", 1170 | "country": "Japan", 1171 | "city": "Tokyo", 1172 | "name": "Camion Corp.", 1173 | "id": "189e4u76bqh34", 1174 | "email": "", 1175 | "address1": "", 1176 | "zipCode": "", 1177 | "address2": "", 1178 | "phone": "" 1179 | }, 1180 | { 1181 | "type":"", 1182 | "website": "", 1183 | "location": "", 1184 | "country": "USA", 1185 | "city": "New York", 1186 | "name": "Lariatta Inc.", 1187 | "id": "1q99345mcxds0", 1188 | "email": "", 1189 | "address1": "", 1190 | "zipCode": "", 1191 | "address2": "", 1192 | "phone": "" 1193 | } 1194 | ], 1195 | "notes": [ 1196 | { 1197 | "details": "Send him the tracking number for their order.", 1198 | "type": "todo", 1199 | "id": "ucw9gtbjq7ls", 1200 | "subject": "Send tracking Number", 1201 | "date": "2013-12-02T22:27+0000", 1202 | "parentIds": [ 1203 | "o8v9urr7vchs", 1204 | "VBMJHwcLX3Vx" 1205 | ] 1206 | }, 1207 | { 1208 | "details": "Called today happy with the improved load time from Project SMSTP.", 1209 | "type": "text", 1210 | "id": "1rhen4xigta0w", 1211 | "subject": "Improved Load Time", 1212 | "date": "2013-12-02T22:26+0000", 1213 | "parentIds": [ 1214 | "o8v9urr7vchs", 1215 | "VBMJHwcLX3Vx" 1216 | ] 1217 | }, 1218 | { 1219 | "details": "Productsheet for Stingray describing all the features.", 1220 | "type": "file", 1221 | "id": "1rhen4xigta0z", 1222 | "subject": "Stingray.pdf", 1223 | "date": "2013-12-02T22:26+0000", 1224 | "parentIds": [ 1225 | "o8v9urr7vchs", 1226 | "VBMJHwcLX3Vx" 1227 | ], 1228 | "size": "5.3 MB", 1229 | "fileType": "PDF", 1230 | "createdBy": "Jack Herbert" 1231 | }, 1232 | { 1233 | "details": "Product image.", 1234 | "type": "media", 1235 | "src": "http://www.teamstudio.com/Portals/218295/images/istock_000001242290small.jpg", 1236 | "id": "uywr1g2fnvuo", 1237 | "subject": "Product image", 1238 | "date": "2013-12-02T22:26+0000", 1239 | "parentIds": [ 1240 | "kNQv7Urv7AzX", 1241 | "VBMJHwcLX3Vx" 1242 | ] 1243 | }, 1244 | { 1245 | "details": "Attended a meeting today and gave them version 5 product demos. I will follow-up next week.", 1246 | "type": "text", 1247 | "id": "iru6qw5g660w", 1248 | "subject": "Product Demos", 1249 | "date": "2013-12-02T22:25+0000", 1250 | "parentIds": [ 1251 | "glhmx077n1ts", 1252 | "vhVqL5KRyhp2" 1253 | ] 1254 | }, 1255 | { 1256 | "details": "Discuss improvements they made using our product.", 1257 | "type": "dodo", 1258 | "id": "m543xqq73mkg", 1259 | "subject": "Discuss product improvements", 1260 | "date": "2013-12-02T22:25+0000", 1261 | "parentIds": [ 1262 | "glhmx077n1ts", 1263 | "rT3zaDLrzfSK" 1264 | ] 1265 | }, 1266 | { 1267 | "details": "Scheduled a round of golf for next week.", 1268 | "type": "todo", 1269 | "id": "nlrxvfge0ao0", 1270 | "subject": "Golf", 1271 | "date": "2013-12-02T22:24+0000", 1272 | "parentIds": [ 1273 | "4shzy32qcwzk", 1274 | "VPLDJDhw5sKy" 1275 | ] 1276 | }, 1277 | { 1278 | "details": "Called and left a message about scheduling a demo.", 1279 | "type": "text", 1280 | "id": "1n1ws6am6ox6o", 1281 | "subject": "Demo", 1282 | "date": "2013-12-02T22:23+0000", 1283 | "parentIds": [ 1284 | "15elgz2vp03r4", 1285 | "H3rxwS7PBgyH" 1286 | ] 1287 | }, 1288 | { 1289 | "details": "Called requesting a seven-day extension on their invoice. I approved.", 1290 | "type": "text", 1291 | "id": "hg3kdwd6vb40", 1292 | "subject": "Invoice Extension", 1293 | "date": "2013-12-02T22:22+0000", 1294 | "parentIds": [ 1295 | "15elgz2vp03r4", 1296 | "tRzSwETzMVbT" 1297 | ] 1298 | }, 1299 | { 1300 | "details": "Invited me for drinks with his developers tonight at Hanks Tavern.", 1301 | "type": "text", 1302 | "id": "10xgsxu78kni8", 1303 | "subject": "Social Op", 1304 | "date": "2013-12-02T22:22+0000", 1305 | "parentIds": [ 1306 | "c37lx4rahhc0", 1307 | "tRzSwETzMVbT" 1308 | ] 1309 | }, 1310 | { 1311 | "details": "Had a conference call about utilizing our new model in their upcoming smartphone.", 1312 | "type": "text", 1313 | "id": "t7b395ps5j4", 1314 | "subject": "Conference Call", 1315 | "date": "2013-12-02T22:21+0000", 1316 | "parentIds": [ 1317 | "c37lx4rahhc0", 1318 | "PJsNxBhfG7rm" 1319 | ] 1320 | }, 1321 | { 1322 | "details": "Made follow-up call about our new model.", 1323 | "type": "text", 1324 | "id": "ecdzjo895eyo", 1325 | "subject": "New Model", 1326 | "date": "2013-12-02T22:21+0000", 1327 | "parentIds": [ 1328 | "18hd5uqmx2ark", 1329 | "HTJey62NEsuR" 1330 | ] 1331 | }, 1332 | { 1333 | "details": "Met about our new unit and will follow-up with a phone call on Tuesday.", 1334 | "type": "text", 1335 | "id": "14p6x4ipsvfgg", 1336 | "subject": "New Unit Visit", 1337 | "date": "2013-12-02T22:20+0000", 1338 | "parentIds": [ 1339 | "18hd5uqmx2ark", 1340 | "WJTQPvwJx8ZH" 1341 | ] 1342 | }, 1343 | { 1344 | "details": "Made a call and talked to him about using our new model in their upcoming smartphone release.", 1345 | "type": "text", 1346 | "id": "1eqjcx4js9la8", 1347 | "subject": "Smartphone Release", 1348 | "date": "2013-12-02T22:20+0000", 1349 | "parentIds": [ 1350 | "1btyjc1z2juo0", 1351 | "nAhPG98D29yU" 1352 | ] 1353 | }, 1354 | { 1355 | "details": "RMA'ed two units and ordered replacements.", 1356 | "type": "ticket", 1357 | "id": "10ukkltuoikg0", 1358 | "subject": "RMA's", 1359 | "date": "2013-12-02T22:19+0000", 1360 | "parentIds": [ 1361 | "189e4u76bqh34", 1362 | "BHTmv2NpG3eU" 1363 | ] 1364 | }, 1365 | { 1366 | "details": "Scheduled delivery of new units for next Tuesday.", 1367 | "type": "text", 1368 | "id": "v208y6xswsg0", 1369 | "subject": "Delivery Scheduled", 1370 | "date": "2013-12-02T22:18+0000", 1371 | "parentIds": [ 1372 | "189e4u76bqh34", 1373 | "QQkRbSVxfARv" 1374 | ] 1375 | }, 1376 | { 1377 | "details": "He approved order for 300 units.", 1378 | "type": "text", 1379 | "id": "1td2ke5yv8rgg", 1380 | "subject": "Order Approved", 1381 | "date": "2013-12-02T22:17+0000", 1382 | "parentIds": [ 1383 | "l483t0vx6vwg", 1384 | "9F6qbRsVTAdM" 1385 | ] 1386 | }, 1387 | { 1388 | "details": "Closed the deal at 18% over cost.", 1389 | "type": "text", 1390 | "id": "u9jjywxvh62o", 1391 | "subject": "Deal Closed", 1392 | "date": "2013-12-02T22:17+0000", 1393 | "parentIds": [ 1394 | "l483t0vx6vwg", 1395 | "puSBydW5xgup" 1396 | ] 1397 | }, 1398 | { 1399 | "details": "Scheduled chip presentation for Jan. 18th at 9:30 a.m.", 1400 | "type": "text", 1401 | "id": "1i9wzyz6po45c", 1402 | "subject": "Chip Presentation", 1403 | "date": "2013-12-02T22:16+0000", 1404 | "parentIds": [ 1405 | "o8v9urr7vchs", 1406 | "ftBZ9u64tAgq" 1407 | ] 1408 | }, 1409 | { 1410 | "details": "Went to their office today and chatted about upgrading their contract.", 1411 | "type": "text", 1412 | "id": "1f30c639s1534", 1413 | "subject": "Contract Upgrade", 1414 | "date": "2013-12-02T22:15+0000", 1415 | "parentIds": [ 1416 | "o8v9urr7vchs", 1417 | "Zum5QaksnT38" 1418 | ] 1419 | }, 1420 | { 1421 | "details": "Called reminding me to bring the demo units to the conference on Monday.", 1422 | "type": "text", 1423 | "id": "aeeyzx6j73eo", 1424 | "subject": "Demo Units", 1425 | "date": "2013-12-02T22:15+0000", 1426 | "parentIds": [ 1427 | "9r6e6fl7ak8w", 1428 | "tRzSwETzMVbT" 1429 | ] 1430 | }, 1431 | { 1432 | "details": "I called to thank them for their recent order and offer a free services session.", 1433 | "type": "text", 1434 | "id": "oowjlontmc5c", 1435 | "subject": "Thank You Call", 1436 | "date": "2013-12-02T22:14+0000", 1437 | "parentIds": [ 1438 | "9r6e6fl7ak8w", 1439 | "mwRSQRGftaPr" 1440 | ] 1441 | }, 1442 | { 1443 | "details": "I received a phone call asking that we add 10,000 more units to their order.", 1444 | "type": "text", 1445 | "id": "vy049qq81r7k", 1446 | "subject": "Add 10,000 Units", 1447 | "date": "2013-12-02T22:13+0000", 1448 | "parentIds": [ 1449 | "mco1ecpaxp8g", 1450 | "nuer1hQbtEwr" 1451 | ] 1452 | }, 1453 | { 1454 | "details": "He dropped by to discuss improvements they have made using our product.", 1455 | "type": "text", 1456 | "id": "1pv2ant5sxv5s", 1457 | "subject": "Improvements", 1458 | "date": "2013-12-02T22:12+0000", 1459 | "parentIds": [ 1460 | "mco1ecpaxp8g", 1461 | "N8TLVwqWdRcZ" 1462 | ] 1463 | }, 1464 | { 1465 | "details": "Scheduled a round of golf for next week.", 1466 | "type": "text", 1467 | "id": "brj1yzmrojk0", 1468 | "subject": "Golf Next Week", 1469 | "date": "2013-12-02T22:12+0000", 1470 | "parentIds": [ 1471 | "raf5cjru4ef4", 1472 | "1H4bs81t1mBp" 1473 | ] 1474 | }, 1475 | { 1476 | "details": "Called and left a message about scheduling a demo.", 1477 | "type": "text", 1478 | "id": "72xkyj4shybk", 1479 | "subject": "Demo Schedule", 1480 | "date": "2013-12-02T22:11+0000", 1481 | "parentIds": [ 1482 | "raf5cjru4ef4", 1483 | "2gTp9WDBbyF1" 1484 | ] 1485 | }, 1486 | { 1487 | "details": "Had a discussion about the phone demos. He wants the head of development to sit in next time.", 1488 | "type": "mail", 1489 | "id": "5h8z37qrevwg", 1490 | "subject": "Phone Demos", 1491 | "date": "2013-12-02T22:10+0000", 1492 | "parentIds": [ 1493 | "1tthlkjdy53pc", 1494 | "bAvdNCMLFDwP" 1495 | ] 1496 | }, 1497 | { 1498 | "details": "Attended a meeting today and gave them version 5 product demos. I will follow-up next week.", 1499 | "type": "text", 1500 | "id": "rau62q45uoe8", 1501 | "subject": "V5 Product Demos", 1502 | "date": "2013-12-02T22:08+0000", 1503 | "parentIds": [ 1504 | "1tthlkjdy53pc", 1505 | "11RRshkW6L7n" 1506 | ] 1507 | }, 1508 | { 1509 | "details": "I called to let her know their last order would be four days late, and she was ok with that.", 1510 | "type": "text", 1511 | "id": "101ptu9v52l1c", 1512 | "subject": "Four Days Late", 1513 | "date": "2013-12-02T22:07+0000", 1514 | "parentIds": [ 1515 | "1msqiu39cn9j4", 1516 | "vMUT6KnAq3Lt" 1517 | ] 1518 | }, 1519 | { 1520 | "details": "Wants to have dinner at the Japanese restaurant next week to discuss a new opportunity.", 1521 | "type": "todo", 1522 | "id": "ey92hkjp8n40", 1523 | "subject": "Dinner Next Week", 1524 | "date": "2013-12-02T22:06+0000", 1525 | "parentIds": [ 1526 | "1msqiu39cn9j4", 1527 | "FTC9cC4SdhGU" 1528 | ] 1529 | }, 1530 | { 1531 | "details": "I received a formal request to discontinue their services contract.", 1532 | "type": "text", 1533 | "id": "2l3sywfu31fk", 1534 | "subject": "Discontinue Services", 1535 | "date": "2013-12-02T22:05+0000", 1536 | "parentIds": [ 1537 | "soltv3tewuf4", 1538 | "RmNmSEeDWaUK" 1539 | ] 1540 | }, 1541 | { 1542 | "details": "She called and asked how much it would cost for them to continue using our NFC technology. I worked up a contract with production prices.", 1543 | "type": "offer", 1544 | "id": "1xcj2kcnszc3k", 1545 | "subject": "Contract for Production", 1546 | "date": "2013-12-02T22:05+0000", 1547 | "parentIds": [ 1548 | "soltv3tewuf4", 1549 | "dSwTPp52MDex" 1550 | ] 1551 | }, 1552 | { 1553 | "details": "Left a message asking if they’re interested in upgrading.", 1554 | "type": "text", 1555 | "id": "xd0nximynhts", 1556 | "subject": "Voicemail", 1557 | "date": "2013-12-02T22:04+0000", 1558 | "parentIds": [ 1559 | "1wxmpmsfy6by8", 1560 | "MgGUaVg4Jy41" 1561 | ] 1562 | }, 1563 | { 1564 | "details": "Met with his system engineers today to find out if we could supply them with a docking device.", 1565 | "type": "text", 1566 | "id": "ibw5h3dh0xs", 1567 | "subject": "Docking Device", 1568 | "date": "2013-12-02T22:03+0000", 1569 | "parentIds": [ 1570 | "1wxmpmsfy6by8", 1571 | "x7ZJmmwSD9Kx" 1572 | ] 1573 | }, 1574 | { 1575 | "details": "Gave him our Manager of Communications' details to arrange a sponsorship.", 1576 | "type": "mail", 1577 | "id": "1kkkqjoo5ex34", 1578 | "subject": "Sponsorship", 1579 | "date": "2013-12-02T22:02+0000", 1580 | "parentIds": [ 1581 | "693otga0nrpc", 1582 | "CHmMPz3U5nH7" 1583 | ] 1584 | }, 1585 | { 1586 | "details": "Called today happy with the improved load time from Project SMSTP.", 1587 | "type": "text", 1588 | "id": "1ltf194o0xz40", 1589 | "subject": "Improved Load Time", 1590 | "date": "2013-12-02T22:01+0000", 1591 | "parentIds": [ 1592 | "693otga0nrpc", 1593 | "3DTWzkqktNSG" 1594 | ] 1595 | }, 1596 | { 1597 | "details": "I explained that we would begin rolling out updates next week, and to look for an email at that time.", 1598 | "type": "text", 1599 | "id": "xgl6buczpfy8", 1600 | "subject": "Updates", 1601 | "date": "2013-12-02T22:01+0000", 1602 | "parentIds": [ 1603 | "c1ajubcvbf28", 1604 | "zPBpZLWrbSq8" 1605 | ] 1606 | }, 1607 | { 1608 | "details": "Met in the office to talk to her about their development department’s needs.", 1609 | "type": "text", 1610 | "id": "1a6w81pemf4sg", 1611 | "subject": "Development Needs", 1612 | "date": "2013-12-02T22:00+0000", 1613 | "parentIds": [ 1614 | "c1ajubcvbf28", 1615 | "VGbedmAzeBkF" 1616 | ] 1617 | }, 1618 | { 1619 | "details": "Said he wasn’t interested in updating their units.", 1620 | "type": "info", 1621 | "id": "1nllo9m3mwsu8", 1622 | "subject": "Uninterested in Updates", 1623 | "date": "2013-12-02T21:59+0000", 1624 | "parentIds": [ 1625 | "1x4u7i4g1gcg0", 1626 | "M2B8Nd3rMey5" 1627 | ] 1628 | }, 1629 | { 1630 | "details": "I called and left a voicemail message about the new systems.", 1631 | "type": "text", 1632 | "id": "yubh4cs2x2bk", 1633 | "subject": "Left Voicemail", 1634 | "date": "2013-12-02T21:58+0000", 1635 | "parentIds": [ 1636 | "1x4u7i4g1gcg0", 1637 | "t7Z2ZCDdzs9D" 1638 | ] 1639 | } 1640 | ] 1641 | } -------------------------------------------------------------------------------- /data/index.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); //work with filesystem 2 | var bc = require('../bootcards-functions.js'); 3 | 4 | exports.read = function() { 5 | 6 | var dataFile = __dirname + '/data.json'; 7 | fs.readFile(dataFile, 'utf8', function (err, data) { 8 | 9 | if (err) { 10 | console.log('Error reading data file: ' + err); 11 | return; 12 | } 13 | 14 | var jsonContents = JSON.parse(data); 15 | 16 | contacts = jsonContents.contacts; 17 | companies = bc.sortByField( jsonContents.companies, 'name'); 18 | notes = jsonContents.notes; 19 | 20 | console.log("Sample data read. Found " + contacts.length + " contacts, " + companies.length + " companies, " + notes.length + " notes"); 21 | }); 22 | 23 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootcards-demo-app", 3 | "version": "1.1.2", 4 | "private": true, 5 | "scripts": { 6 | "start": "node app.js", 7 | "postinstall": "./node_modules/bower/bin/bower install" 8 | }, 9 | "dependencies": { 10 | "express": "3.5.1", 11 | "express-hbs": "~0.7.8", 12 | "express-pjax": "0.0.1", 13 | "moment": "~2.5.1", 14 | "bower": ">=1.3" 15 | }, 16 | "engines": { 17 | "node": "0.10.26" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /public/bootcards-demo-app/css/bootcards-demo-app.css: -------------------------------------------------------------------------------- 1 | /* don't push main content away; use overlay */ 2 | .bootcards-container { 3 | -webkit-transform: translate3d(0px, 0px, 0px); 4 | -moz-transform: translate3d(0px, 0px, 0px); 5 | -o-transform: translate3d(0px, 0px, 0px); 6 | -ms-transform: translate3d(0px, 0px, 0px); 7 | transform: translate3d(0px, 0px, 0px); 8 | -webkit-transition: all 0 ease 0; 9 | -moz-transition: all 0 ease 0; 10 | -o-transition: all 0 ease 0; 11 | transition: all 0 ease 0; 12 | } 13 | .bootcards-container.active-left { 14 | -webkit-transform: none; 15 | -moz-transform: none; 16 | -o-transform: none; 17 | -ms-transform: none; 18 | transform: none; 19 | } 20 | 21 | @media only screen 22 | and (orientation : portrait) { 23 | 24 | .bootcards-summary-item h4 { 25 | font-size: 16px; 26 | } 27 | 28 | 29 | } 30 | 31 | .nav > li > a { 32 | padding: 15px 14px; 33 | } 34 | 35 | 36 | /*fullscreen class for iOS web apps that have been added to the home screen*/ 37 | body.fullscreen { 38 | padding-top: 64px; 39 | } 40 | .fullscreen .offcanvas-list-title { 41 | margin-top: 20px; 42 | } 43 | .fullscreen .navbar-fixed-top { 44 | height: 64px; 45 | min-height: 64px; 46 | padding-top: 20px; 47 | } 48 | .fullscreen .offcanvas { 49 | margin-top:65px; 50 | } 51 | .fullscreen > .statusbar { 52 | background:black; 53 | height:20px; 54 | position:absolute; 55 | top:0; 56 | width:100%; 57 | z-index:1000; 58 | } 59 | -------------------------------------------------------------------------------- /public/bootcards-demo-app/images/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/bootcards-demo-app/images/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /public/bootcards-demo-app/images/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/bootcards-demo-app/images/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /public/bootcards-demo-app/images/bootcards-splash-1024x748.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/bootcards-demo-app/images/bootcards-splash-1024x748.png -------------------------------------------------------------------------------- /public/bootcards-demo-app/images/bootcards-splash-1024x748@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/bootcards-demo-app/images/bootcards-splash-1024x748@2x.png -------------------------------------------------------------------------------- /public/bootcards-demo-app/images/bootcards-splash-320x460.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/bootcards-demo-app/images/bootcards-splash-320x460.png -------------------------------------------------------------------------------- /public/bootcards-demo-app/images/bootcards-splash-320x460@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/bootcards-demo-app/images/bootcards-splash-320x460@2x.png -------------------------------------------------------------------------------- /public/bootcards-demo-app/images/bootcards-splash-320x548.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/bootcards-demo-app/images/bootcards-splash-320x548.png -------------------------------------------------------------------------------- /public/bootcards-demo-app/images/bootcards-splash-320x548@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/bootcards-demo-app/images/bootcards-splash-320x548@2x.png -------------------------------------------------------------------------------- /public/bootcards-demo-app/images/bootcards-splash-768x1004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/bootcards-demo-app/images/bootcards-splash-768x1004.png -------------------------------------------------------------------------------- /public/bootcards-demo-app/images/bootcards-splash-768x1004@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/bootcards-demo-app/images/bootcards-splash-768x1004@2x.png -------------------------------------------------------------------------------- /public/bootcards-demo-app/js/bootcards-demo-app.js: -------------------------------------------------------------------------------- 1 | /* toggle between the chart and data */ 2 | function toggleChartData(event, chart) { 3 | 4 | var $ev = $(event.target); 5 | var $chart = $ev.parents('.bootcards-chart'); 6 | 7 | if ($chart.length>0) { 8 | 9 | $chart.fadeOut( 'fast', function() { 10 | $chart 11 | .siblings('.bootcards-table') 12 | .fadeIn('fast'); 13 | }); 14 | 15 | } else { 16 | 17 | var $data = $ev.parents('.bootcards-table'); 18 | $data.fadeOut( 'fast', function() { 19 | $data 20 | .siblings('.bootcards-chart') 21 | .fadeIn('fast', function() { 22 | if (typeof chart != 'undefined' && chart != null) { chart.redraw();} 23 | }); 24 | }); 25 | 26 | } 27 | 28 | } 29 | 30 | /* 31 | * Add click handlers to links to force a pjax (partial) load 32 | * http://pjax.heroku.com/ 33 | */ 34 | bootcards.addPJaxHandlers = function(pjaxTarget) { 35 | 36 | //add pjax click handler to links 37 | $('a.pjax').off().on('click', function(e) { 38 | var $this = $(this); 39 | var tgtUrl = $this.attr('href'); 40 | 41 | $.pjax( { 42 | container : pjaxTarget, 43 | url : tgtUrl 44 | }); 45 | 46 | //add active class if this is a list item (removing it from all siblings) 47 | if ($this.hasClass('list-group-item')) { 48 | $this 49 | .addClass('active') 50 | .siblings() 51 | .removeClass('active'); 52 | } 53 | 54 | e.preventDefault(); 55 | }); 56 | 57 | }; 58 | 59 | /* 60 | * Setup publish/ subscribe mechanism for changing main menu option 61 | * Based on jQuery Callbacks 62 | * https://api.jquery.com/jQuery.Callbacks/ 63 | */ 64 | bootcards.topics = {}; 65 | 66 | jQuery.Topic = function( id ) { 67 | var callbacks, method, 68 | topic = id && bootcards.topics[ id ]; 69 | 70 | if ( !topic ) { 71 | callbacks = jQuery.Callbacks(); 72 | topic = { 73 | publish: callbacks.fire, 74 | subscribe: callbacks.add, 75 | unsubscribe: callbacks.remove 76 | }; 77 | if ( id ) { 78 | bootcards.topics[ id ] = topic; 79 | } 80 | } 81 | return topic; 82 | }; 83 | 84 | //pjax on all a's that have the data-pjax attribute (the attribute's value is the pjax target container) 85 | $(document).ready( function() { 86 | 87 | //publish event when changing main menu option 88 | $("a[data-title]").on("click", function() { 89 | $.Topic( "navigateTo" ).publish( $(this).data("title") ); 90 | }); 91 | 92 | var $body = $("body"); 93 | 94 | //fix for status bar bug in iOS 8 95 | if (bootcards.isFullScreen) { 96 | $body 97 | .prepend("
") 98 | .addClass("fullscreen"); 99 | } 100 | 101 | //destroy modals on close (to reload the contents when using the remote property) 102 | $body.on('hidden.bs.modal', '.modal', function () { 103 | $(this).removeData('bs.modal'); 104 | }); 105 | 106 | var pjaxTarget = (bootcards.isXS() ? '#list' : '#listDetails'); 107 | 108 | if (bootcards.isXS() ) { 109 | 110 | //restrict footer to only 4 items 111 | var $footer = $(".navbar-fixed-bottom .btn-group"); 112 | if ($footer.length>0) { 113 | var $links = $('a', $footer); 114 | 115 | if ($links.length > 4) { 116 | $links.each( function(idx) { 117 | if (idx >= 4) { this.remove(); } 118 | }); 119 | } 120 | } 121 | 122 | } 123 | 124 | bootcards.addPJaxHandlers(pjaxTarget); 125 | 126 | $(document) 127 | .pjax('a[data-pjax]') 128 | .on('submit', 'form[data-pjax]', function(event) { 129 | //use pjax to submit forms 130 | $.pjax.submit(event); 131 | }) 132 | .on('pjax:start', function(event) { 133 | 134 | //hide the offcanvas menu 135 | $("#offCanvasMenu").removeClass("active"); 136 | $("#main").removeClass("active"); 137 | 138 | }) 139 | .on('pjax:end', function(event) { 140 | 141 | var $tgt = $(event.target); 142 | var tgtId = $tgt.attr('id'); 143 | 144 | if ( bootcards.isXS() ) { 145 | //function only performed on small screens (smartphones) 146 | 147 | //we only use the list column 148 | var details = $('#listDetails'); 149 | if (details.length>0) { 150 | details.remove(); 151 | } 152 | 153 | //change class on container elements (list>card and vice versa) 154 | if ( tgtId == 'main') { 155 | 156 | $('#list') 157 | .removeClass('bootcards-cards') 158 | .addClass('bootcards-list'); 159 | 160 | //show the back button 161 | $('.btn-menu').removeClass('hidden'); 162 | $('.btn-back').addClass('hidden'); 163 | 164 | //get the panel 165 | var $main = $("#main"); 166 | var $panel = $("#main > .panel"); 167 | if ($panel.length>0) { 168 | 169 | var row = $('
'); 170 | var container = $('
') 171 | .appendTo(row); 172 | 173 | $panel.appendTo(container); 174 | 175 | row.appendTo($main); 176 | } 177 | 178 | } else if (tgtId == 'list') { 179 | 180 | var $list = $('#list'); 181 | 182 | if ( !$list.hasClass('bootcards-cards')) { 183 | 184 | $list 185 | .addClass('bootcards-cards') 186 | .removeClass('bootcards-list'); 187 | 188 | //show the menu button 189 | $('.btn-menu').addClass('hidden'); 190 | $('.btn-back').removeClass('hidden'); 191 | 192 | //scroll to the top of the card 193 | $list.animate({scrollTop:0}, '500', 'easeOutExpo'); 194 | } 195 | 196 | } 197 | 198 | } 199 | 200 | bootcards.addPJaxHandlers(pjaxTarget); 201 | 202 | //highlight first list group option (if non active yet) 203 | if ( $('.list-group a.active').length === 0 ) { 204 | $('.list-group a').first().addClass('active'); 205 | } 206 | 207 | //enable single pane portrait mode when loading content with pjax 208 | if ( tgtId == 'main' && bootcards.portraitModeEnabled ) { 209 | 210 | //do some cleaning up first 211 | if (bootcards.listOffcanvasToggle) { 212 | bootcards.listOffcanvasToggle.remove(); 213 | bootcards.listTitleEl.remove(); 214 | Bootcards.OffCanvas.$menuTitleEl.remove(); 215 | } 216 | bootcards.listOffcanvasToggle = null; 217 | bootcards.listTitleEl = null; 218 | Bootcards.OffCanvas.$menuTitleEl = null; 219 | bootcards.listEl = null; 220 | bootcards.cardsEl = null; 221 | 222 | bootcards._setOrientation(true); 223 | 224 | if (bootcards.listTitleEl) { 225 | bootcards.listTitleEl.find('button').show(); 226 | } 227 | 228 | //add the resize events again 229 | $(window) 230 | .off() 231 | .on( 'resize', function() { 232 | setTimeout( function() { 233 | bootcards._setOrientation(false); 234 | if (chartSalesProductType !== null) { chartSalesProductType.redraw(); } 235 | if (closedSalesChart !== null) { closedSalesChart.redraw(); } 236 | if (dbSizeChart !== null) { dbSizeChart.redraw(); } 237 | if (barChartClosedSales !== null) { barChartClosedSales.redraw(); } 238 | } , 250); 239 | } ); 240 | 241 | } 242 | 243 | }) 244 | .on('pjax:complete', function(event) { 245 | //called after a pjax content update 246 | 247 | //check for any modals to close 248 | var modal = $(event.relatedTarget).closest('.modal'); 249 | if (modal.length) { 250 | modal.modal('hide'); 251 | } 252 | 253 | }); 254 | 255 | }); 256 | 257 | //show a confirmation dialog before NOT deleting an item: this is a demo app after all... 258 | bootcards.confirmDelete = function(type) { 259 | 260 | if ( confirm('Are you sure?') ) { 261 | var modal = $(event.target).closest('.modal'); 262 | if (modal.length>0) { 263 | modal.modal('hide'); 264 | } 265 | } 266 | return false; 267 | 268 | }; 269 | 270 | /* 271 | * Enable FTLabs' FastClick 272 | * https://github.com/ftlabs/fastclick 273 | */ 274 | window.addEventListener('load', function() { 275 | FastClick.attach(document.body); 276 | }, false); 277 | 278 | //functions to perform if the main menu option has changed 279 | $.Topic( "navigateTo" ).subscribe( function(value) { 280 | 281 | //change header title - only on mobile 282 | if (!isDesktop ) { 283 | $('.navbar-brand').text(value); 284 | } 285 | 286 | //change active menu option in all navigation menus 287 | $("a[data-title='" + value + "']").each( function() { 288 | 289 | var $this = $(this); 290 | var $li = $this.parent('li'); 291 | 292 | //add active class to either a parent LI or current A 293 | ($li.length>0 ? $li : $this) 294 | .addClass('active') 295 | .siblings('.active') 296 | .removeClass('active'); 297 | }); 298 | 299 | } ); 300 | 301 | -------------------------------------------------------------------------------- /public/images/Annabelle Malcomb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Annabelle Malcomb.jpg -------------------------------------------------------------------------------- /public/images/Arthur Dube.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Arthur Dube.jpg -------------------------------------------------------------------------------- /public/images/Arthur Edge.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Arthur Edge.jpg -------------------------------------------------------------------------------- /public/images/Brandon Aponte.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Brandon Aponte.jpg -------------------------------------------------------------------------------- /public/images/Carlos Stuart.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Carlos Stuart.jpg -------------------------------------------------------------------------------- /public/images/Chiam See Tong.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Chiam See Tong.jpg -------------------------------------------------------------------------------- /public/images/Chris Grocott.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Chris Grocott.jpg -------------------------------------------------------------------------------- /public/images/Chris Massie.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Chris Massie.jpg -------------------------------------------------------------------------------- /public/images/Christian Szot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Christian Szot.jpg -------------------------------------------------------------------------------- /public/images/Clinton Quincy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Clinton Quincy.jpg -------------------------------------------------------------------------------- /public/images/Cody Swinford.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Cody Swinford.jpg -------------------------------------------------------------------------------- /public/images/Curtis Rowland.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Curtis Rowland.jpg -------------------------------------------------------------------------------- /public/images/Danny Shin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Danny Shin.jpg -------------------------------------------------------------------------------- /public/images/Darren Sizelove.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Darren Sizelove.jpg -------------------------------------------------------------------------------- /public/images/Darryl Thornell.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Darryl Thornell.jpg -------------------------------------------------------------------------------- /public/images/David Peters.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/David Peters.jpg -------------------------------------------------------------------------------- /public/images/David Tay.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/David Tay.jpg -------------------------------------------------------------------------------- /public/images/Donna Mazzola.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Donna Mazzola.jpg -------------------------------------------------------------------------------- /public/images/Earl Saub.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Earl Saub.jpg -------------------------------------------------------------------------------- /public/images/Elsie Garner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Elsie Garner.jpg -------------------------------------------------------------------------------- /public/images/Evelyn Dwyer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Evelyn Dwyer.jpg -------------------------------------------------------------------------------- /public/images/Fred Hafer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Fred Hafer.jpg -------------------------------------------------------------------------------- /public/images/Gideon Henry.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Gideon Henry.jpg -------------------------------------------------------------------------------- /public/images/Gregory Gant.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Gregory Gant.jpg -------------------------------------------------------------------------------- /public/images/Gurmit Sim.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Gurmit Sim.jpg -------------------------------------------------------------------------------- /public/images/Harry Harkins.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Harry Harkins.jpg -------------------------------------------------------------------------------- /public/images/Jack Floyd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Jack Floyd.jpg -------------------------------------------------------------------------------- /public/images/Jack Levy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Jack Levy.jpg -------------------------------------------------------------------------------- /public/images/Jack Ortiz.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Jack Ortiz.jpg -------------------------------------------------------------------------------- /public/images/Jacob Monte.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Jacob Monte.jpg -------------------------------------------------------------------------------- /public/images/James Smith.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/James Smith.jpg -------------------------------------------------------------------------------- /public/images/Jamie Biddy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Jamie Biddy.jpg -------------------------------------------------------------------------------- /public/images/Janet Helman.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Janet Helman.jpg -------------------------------------------------------------------------------- /public/images/Janet McKnight.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Janet McKnight.jpg -------------------------------------------------------------------------------- /public/images/Jay Muir.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Jay Muir.jpg -------------------------------------------------------------------------------- /public/images/Jeffery Kahle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Jeffery Kahle.jpg -------------------------------------------------------------------------------- /public/images/Jerry Bess.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Jerry Bess.jpg -------------------------------------------------------------------------------- /public/images/Jerry Greeley.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Jerry Greeley.jpg -------------------------------------------------------------------------------- /public/images/Jerry Williamson.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Jerry Williamson.jpg -------------------------------------------------------------------------------- /public/images/John Randle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/John Randle.jpg -------------------------------------------------------------------------------- /public/images/Joseph Barish.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Joseph Barish.jpg -------------------------------------------------------------------------------- /public/images/Josephine Driscoll.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Josephine Driscoll.jpg -------------------------------------------------------------------------------- /public/images/Kelly Palin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Kelly Palin.jpg -------------------------------------------------------------------------------- /public/images/Kelly Podesta.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Kelly Podesta.jpg -------------------------------------------------------------------------------- /public/images/Kristin Rayner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Kristin Rayner.jpg -------------------------------------------------------------------------------- /public/images/Lance McHaney.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Lance McHaney.jpg -------------------------------------------------------------------------------- /public/images/Larry Drury.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Larry Drury.jpg -------------------------------------------------------------------------------- /public/images/Laura Johnson.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Laura Johnson.jpg -------------------------------------------------------------------------------- /public/images/Laura Tejada.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Laura Tejada.jpg -------------------------------------------------------------------------------- /public/images/Lee Seng Choh.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Lee Seng Choh.jpg -------------------------------------------------------------------------------- /public/images/Lim Yew Jin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Lim Yew Jin.jpg -------------------------------------------------------------------------------- /public/images/Lois Brush.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Lois Brush.jpg -------------------------------------------------------------------------------- /public/images/Louisa Coale.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Louisa Coale.jpg -------------------------------------------------------------------------------- /public/images/Manuel Mills.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Manuel Mills.jpg -------------------------------------------------------------------------------- /public/images/Margaret Fielding.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Margaret Fielding.jpeg -------------------------------------------------------------------------------- /public/images/Mark Booth.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Mark Booth.jpg -------------------------------------------------------------------------------- /public/images/Mathew Salone.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Mathew Salone.jpg -------------------------------------------------------------------------------- /public/images/Matthew Shipster.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Matthew Shipster.jpg -------------------------------------------------------------------------------- /public/images/Max Cuthbert.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Max Cuthbert.jpeg -------------------------------------------------------------------------------- /public/images/Nelson Raia.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Nelson Raia.jpg -------------------------------------------------------------------------------- /public/images/Noreen Mends.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Noreen Mends.jpg -------------------------------------------------------------------------------- /public/images/Norman Weimer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Norman Weimer.jpg -------------------------------------------------------------------------------- /public/images/Poh Seng Miang.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Poh Seng Miang.jpg -------------------------------------------------------------------------------- /public/images/Richard Bailey.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Richard Bailey.jpg -------------------------------------------------------------------------------- /public/images/Ricky Lee.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Ricky Lee.jpg -------------------------------------------------------------------------------- /public/images/Robert Caban.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Robert Caban.jpg -------------------------------------------------------------------------------- /public/images/Robert Jarrell.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Robert Jarrell.jpg -------------------------------------------------------------------------------- /public/images/Ronald Tee.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Ronald Tee.jpg -------------------------------------------------------------------------------- /public/images/Roy Moultrie.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Roy Moultrie.jpeg -------------------------------------------------------------------------------- /public/images/Roy Rock.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Roy Rock.jpeg -------------------------------------------------------------------------------- /public/images/Ryan Smith.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Ryan Smith.jpg -------------------------------------------------------------------------------- /public/images/Ryan Sydnor.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Ryan Sydnor.jpg -------------------------------------------------------------------------------- /public/images/Sharon Burns.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Sharon Burns.jpg -------------------------------------------------------------------------------- /public/images/Simon Primm.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Simon Primm.jpg -------------------------------------------------------------------------------- /public/images/Sofia Acey.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Sofia Acey.jpg -------------------------------------------------------------------------------- /public/images/Stacy Korner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Stacy Korner.jpg -------------------------------------------------------------------------------- /public/images/Stanley Marchese.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Stanley Marchese.jpg -------------------------------------------------------------------------------- /public/images/Tara Wasserman.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Tara Wasserman.jpg -------------------------------------------------------------------------------- /public/images/Teddy Skolnik.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Teddy Skolnik.jpg -------------------------------------------------------------------------------- /public/images/Terri Donner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Terri Donner.jpg -------------------------------------------------------------------------------- /public/images/Tony Hensley.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Tony Hensley.jpg -------------------------------------------------------------------------------- /public/images/Tyrone Studdard.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Tyrone Studdard.jpg -------------------------------------------------------------------------------- /public/images/Wayne Sherman.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Wayne Sherman.jpg -------------------------------------------------------------------------------- /public/images/Wee Kim Yaw.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bootcards/demoapp/9c1b2a497489fd5501a94da3d999c8bb1b76b7cd/public/images/Wee Kim Yaw.jpg -------------------------------------------------------------------------------- /public/snippets/base-card-form.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |

Company Details

5 | 13 | 14 |
15 | 16 |
17 | 18 | 19 |

Value

20 |
21 | 22 |
23 | 24 |

Value

25 |
26 | 27 | ... 28 | 29 |
30 | 31 |
-------------------------------------------------------------------------------- /public/snippets/chart.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 |
6 |

Closed sales by team member - $000s (December)

7 |
8 | 9 |
10 | 11 | 12 |
13 | 14 | 20 |
21 | 22 | 25 | 26 |
27 | 28 | 29 | 56 | 57 |
-------------------------------------------------------------------------------- /public/snippets/file-card.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |

File

5 |
6 |
7 |
8 | 9 | 10 | 11 |

12 | Title 13 |

14 |

PDF

15 |

3.2Mb

16 |
17 |
18 |

Added by Jack Herbert on 5 Mar 2014

19 |
20 |
21 |

Description...

22 |
23 |
24 | 46 | 49 | 50 |
-------------------------------------------------------------------------------- /public/snippets/form-card.html: -------------------------------------------------------------------------------- 1 | 62 | -------------------------------------------------------------------------------- /public/snippets/list-card.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |

Notes

5 | 6 | 14 | 15 |
16 | 17 | 34 | 35 | 38 | 39 |
-------------------------------------------------------------------------------- /public/snippets/list-detailed.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/snippets/media-card.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

Media

4 | 5 | 6 | 14 | 15 | 16 | 22 | 23 |
24 |
25 | Details here... 26 |
27 | 28 | 29 | 30 | 33 | 34 |
-------------------------------------------------------------------------------- /public/snippets/summary.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |

Summary Card Heading

5 |
6 | 7 |
8 | 28 | 29 |
30 | 31 | 34 | 35 |
-------------------------------------------------------------------------------- /public/snippets/table.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |

Closed sales by member

5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
NameSales value
Guy Bardsley550
Adam Callahan1500
Arlo Geist3750
Sheila Hutchins3500
Jeanette Quijano1250
Simon Sweet5250
Total15800
23 | 24 | 30 | 31 | 34 | 35 |
-------------------------------------------------------------------------------- /routes/company.js: -------------------------------------------------------------------------------- 1 | var bc = require('../bootcards-functions.js'); 2 | var moment = require('moment'); 3 | var note = require('./note'); 4 | 5 | exports.list = function(req, res) { 6 | 7 | var firstId = companies[0].id; 8 | 9 | res.renderPjax('companies', { 10 | companies : companies, 11 | company : bc.getCompanyById(firstId), 12 | menu: bc.getActiveMenu(menu, 'companies') 13 | }); 14 | }; 15 | 16 | exports.read = function(req, res) { 17 | 18 | res.renderPjax('company', { 19 | companies : companies, 20 | menu:menu, 21 | company: bc.getCompanyById(req.params.id), 22 | menu: bc.getActiveMenu(menu, 'companies') 23 | }); 24 | 25 | } 26 | 27 | exports.add = function(req, res) { 28 | 29 | res.renderPjax('company_edit', { 30 | companies:companies, 31 | company : { 32 | isNew : true 33 | }, 34 | menu: bc.getActiveMenu(menu, 'companies') 35 | }); 36 | 37 | }; 38 | 39 | exports.edit = function(req, res) { 40 | 41 | res.renderPjax('company_edit', { 42 | companies : companies, 43 | menu: bc.getActiveMenu(menu, 'companies'), 44 | company: bc.getCompanyById(req.params.id) 45 | }); 46 | 47 | } 48 | 49 | exports.save = function(req,res) { 50 | 51 | var company = bc.getCompanyById(req.params.id); 52 | 53 | if (company != null) { 54 | //found the company: update it 55 | company.name = req.body.name; 56 | company.city = req.body.city; 57 | company.country = req.body.country; 58 | company.email = req.body.email; 59 | company.phone = req.body.phone; 60 | company.type = req.body.type; 61 | company.website = req.body.website; 62 | company.location = req.body.location; 63 | } 64 | 65 | res.renderPjax('companies', { 66 | companies : companies, 67 | menu: bc.getActiveMenu(menu, 'companies'), 68 | company: company 69 | }); 70 | 71 | } 72 | 73 | /* NOTES */ 74 | 75 | exports.listNotes = function(req, res) { 76 | 77 | res.renderPjax('activities_for_company', { 78 | company : bc.getCompanyById(req.params.id) 79 | }); 80 | 81 | } 82 | 83 | exports.readNote = function(req, res) { 84 | 85 | var company = bc.getCompanyById( req.params.id); 86 | company.isCompany = true; 87 | 88 | var tgtNote = bc.getNoteById(req.params.noteId); 89 | 90 | res.renderPjax( note.getNotePartialRenderer(tgtNote.type), { 91 | company : company, 92 | note : tgtNote 93 | }); 94 | } 95 | exports.editNote = function(req, res) { 96 | 97 | var company = bc.getCompanyById( req.params.id); 98 | company.isCompany = true; 99 | 100 | var note = bc.getNoteById( req.params.noteId); 101 | 102 | res.renderPjax('company_activity_edit', { 103 | company : company, 104 | activity : note 105 | }); 106 | } 107 | exports.addNote = function(req, res) { 108 | 109 | var company = bc.getCompanyById(req.params.id); 110 | 111 | res.renderPjax('company_activity_edit', { 112 | company: company, 113 | activity : { 114 | date : moment().format("DD/MM/YYYY HH:mm"), 115 | isNew : true 116 | } 117 | }); 118 | } 119 | 120 | exports.saveNote = function(req, res) { 121 | 122 | var note; 123 | var company = bc.getCompanyById(req.params.id); 124 | 125 | if (req.params.noteId) { 126 | 127 | note = bc.getNoteById(req.params.noteId); 128 | note.type = req.body.type; 129 | note.subject = req.body.subject; 130 | note.date = moment(req.body.date, "DD/MM/YYYY HH:mm"); 131 | 132 | } else { 133 | 134 | note = { 135 | id: bc.getUniqueId(), 136 | parentIds : [req.params.id], 137 | type: req.body.type, 138 | subject: req.body.subject, 139 | date: moment(req.body.date, "DD/MM/YYYY HH:mm") 140 | } 141 | 142 | notes.push(note); 143 | company.notes.push(note); 144 | 145 | } 146 | 147 | if (company != null) { 148 | 149 | res.renderPjax('activities_for_company', { 150 | company : company 151 | }); 152 | } 153 | 154 | } 155 | 156 | 157 | exports.addContact = function(req, res) { 158 | 159 | var company = bc.getCompanyById(req.params.id); 160 | 161 | res.renderPjax('contact_edit', { 162 | company: company, 163 | contact : { 164 | isNew : true 165 | 166 | } 167 | }); 168 | } -------------------------------------------------------------------------------- /routes/contact.js: -------------------------------------------------------------------------------- 1 | var bc = require('../bootcards-functions.js'); 2 | var moment = require('moment'); 3 | var note = require('./note'); 4 | 5 | exports.list = function(req, res){ 6 | 7 | var firstId = contacts[0].id; 8 | 9 | res.renderPjax('contacts', { 10 | contacts : contacts, 11 | contact : bc.getContactById(firstId), 12 | menu: bc.getActiveMenu(menu, 'contacts') 13 | }); 14 | }; 15 | 16 | exports.read = function(req, res) { 17 | 18 | res.renderPjax('contact', { 19 | contacts:contacts, 20 | contact: bc.getContactById(req.params.id), 21 | menu: bc.getActiveMenu(menu, 'contacts') 22 | }); 23 | 24 | } 25 | 26 | exports.edit = function(req, res) { 27 | 28 | res.renderPjax('contact_edit', { 29 | contacts:contacts, 30 | menu: bc.getActiveMenu(menu, 'contacts'), 31 | contact: bc.getContactById(req.params.id) 32 | }); 33 | 34 | } 35 | 36 | exports.add = function(req, res) { 37 | 38 | if (req.params.companyId) { 39 | 40 | var company = (req.params.companyId ? bc.getCompanyById(req.params.companyId) : null); 41 | 42 | res.renderPjax('contact_edit', { 43 | contacts:contacts, 44 | contact : { 45 | isNew : true, 46 | companyId : (company ? company.id : null) 47 | }, 48 | menu: bc.getActiveMenu(menu, 'contacts') 49 | }); 50 | } else { 51 | res.renderPjax('contact_edit', { 52 | contacts:contacts, 53 | contact : { 54 | isNew : true 55 | }, 56 | menu: bc.getActiveMenu(menu, 'contacts') 57 | }); 58 | } 59 | }; 60 | 61 | exports.save = function(req,res) { 62 | 63 | var contact = bc.getContactById(req.params.id); 64 | 65 | if (contact != null) { 66 | //found the contact: update it 67 | contact.firstName = req.body.firstName; 68 | contact.lastName = req.body.lastName; 69 | contact.email = req.body.email; 70 | contact.phone = req.body.phone; 71 | contact.jobTitle = req.body.jobTitle; 72 | contact.department = req.body.department; 73 | contact.salutation = req.body.salutation; 74 | } 75 | 76 | res.renderPjax('contacts', { 77 | contacts:contacts, 78 | menu: bc.getActiveMenu(menu, 'contacts'), 79 | contact: contact 80 | }); 81 | 82 | } 83 | 84 | /* NOTES */ 85 | 86 | exports.listNotes = function(req, res) { 87 | 88 | res.renderPjax('activities_for_contact', { 89 | contact : bc.getContactById(req.params.id) 90 | }); 91 | 92 | } 93 | 94 | exports.readNote = function(req, res) { 95 | 96 | var contact = bc.getContactById( req.params.id); 97 | contact.isContact = true; 98 | 99 | var tgtNote = bc.getNoteById(req.params.noteId); 100 | 101 | res.renderPjax( note.getNotePartialRenderer(tgtNote.type), { 102 | contact : contact, 103 | note : tgtNote 104 | }); 105 | } 106 | exports.editNote = function(req, res) { 107 | 108 | var contact = bc.getContactById( req.params.id); 109 | contact.isContact = true; 110 | 111 | var note = bc.getNoteById( req.params.noteId); 112 | 113 | res.renderPjax('contact_activity_edit', { 114 | contact : contact, 115 | activity : note 116 | }); 117 | } 118 | exports.addNote = function(req, res) { 119 | 120 | var contact = bc.getContactById(req.params.id); 121 | 122 | res.renderPjax('contact_activity_edit', { 123 | contact: contact, 124 | activity : { 125 | date : moment().format("DD/MM/YYYY HH:mm"), 126 | isNew : true 127 | } 128 | }); 129 | } 130 | 131 | exports.saveNote = function(req, res) { 132 | 133 | var note; 134 | var contact = bc.getContactById(req.params.id); 135 | 136 | if (req.params.noteId) { 137 | 138 | note = bc.getNoteById(req.params.noteId); 139 | note.type = req.body.type; 140 | note.subject = req.body.subject; 141 | note.date = moment(req.body.date, "DD/MM/YYYY HH:mm"); 142 | note.details = req.body.details; 143 | 144 | } else { 145 | 146 | note = { 147 | id: bc.getUniqueId(), 148 | parentIds : [req.params.id], 149 | type: req.body.type, 150 | subject: req.body.subject, 151 | date: moment(req.body.date, "DD/MM/YYYY HH:mm"), 152 | details: req.body.details 153 | } 154 | 155 | notes.push(note); 156 | contact.notes.push(note); 157 | 158 | } 159 | 160 | if (contact != null) { 161 | 162 | res.renderPjax('activities_for_contact', { 163 | contact : contact 164 | }); 165 | } 166 | 167 | } -------------------------------------------------------------------------------- /routes/dashboard.js: -------------------------------------------------------------------------------- 1 | var bc = require('../bootcards-functions.js'); 2 | 3 | exports.list = function(req, res) { 4 | res.renderPjax('dashboard', { 5 | menu: bc.getActiveMenu(menu, 'dashboard') 6 | }); 7 | }; -------------------------------------------------------------------------------- /routes/docs.js: -------------------------------------------------------------------------------- 1 | var bc = require('../bootcards-functions.js'); 2 | var fs = require('fs'); //work with filesystem 3 | var path = require('path'); 4 | 5 | exports.show = function(req, res){ 6 | 7 | var appDir = path.dirname(require.main.filename); 8 | var dataFile = appDir + '/public/snippets/' + req.params.id + '.html'; 9 | fs.readFile(dataFile, 'utf8', function (err, data) { 10 | 11 | if (err) { 12 | console.log('Error reading data file: ' + err); 13 | return; 14 | } 15 | 16 | data = data.replace(//g, '>'); 17 | 18 | res.renderPjax('docs', { 19 | content: '
' + data + '
' 20 | }); 21 | 22 | 23 | }); 24 | 25 | }; -------------------------------------------------------------------------------- /routes/media.js: -------------------------------------------------------------------------------- 1 | var bc = require('../bootcards-functions.js'); 2 | 3 | exports.list = function(req, res){ 4 | 5 | res.renderPjax('charts', { 6 | menu: bc.getActiveMenu(menu, 'charts') 7 | }); 8 | 9 | }; -------------------------------------------------------------------------------- /routes/note.js: -------------------------------------------------------------------------------- 1 | var bc = require('../bootcards-functions.js'); 2 | var moment = require('moment'); 3 | 4 | exports.list = function(req, res) { 5 | res.renderPjax('notes', { 6 | activities: notes, 7 | note : notes[0], 8 | menu: bc.getActiveMenu(menu, 'notes') 9 | }); 10 | }; 11 | 12 | exports.read = function(req, res) { 13 | 14 | var note = bc.getNoteById(req.params.id); 15 | 16 | if (note != null) { 17 | 18 | 19 | 20 | res.renderPjax( exports.getNotePartialRenderer(note.type) , { 21 | activities : notes, 22 | note: note, 23 | menu: bc.getActiveMenu(menu, 'notes') 24 | }); 25 | 26 | } 27 | 28 | } 29 | 30 | exports.edit = function(req, res) { 31 | 32 | res.renderPjax('activity_edit', { 33 | activities : notes, 34 | activity: bc.getNoteById(req.params.id), 35 | menu: bc.getActiveMenu(menu, 'notes') 36 | }); 37 | 38 | } 39 | 40 | /*a note can be added to a contact or company*/ 41 | exports.add = function(req, res) { 42 | 43 | if (req.params.contactId) { 44 | 45 | var contact = bc.getContactById(req.params.contactId); 46 | 47 | res.renderPjax('activity_edit', { 48 | activities: notes, 49 | activity : { 50 | date : new Date(), 51 | isNew : true 52 | }, 53 | contact: contact, 54 | menu: bc.getActiveMenu(menu, 'notes') 55 | }); 56 | } else { 57 | 58 | res.renderPjax('activity_edit', { 59 | activities: notes, 60 | activity : { 61 | date : new Date(), 62 | isNew : true 63 | }, 64 | menu: bc.getActiveMenu(menu, 'notes') 65 | }); 66 | 67 | } 68 | }; 69 | 70 | exports.save = function(req, res) { 71 | 72 | //retrieve the parent contact 73 | var contact = bc.getContactById(req.body.contactId); 74 | 75 | if (contact != null) { 76 | //found the contact: add new note 77 | 78 | var note = { 79 | type: req.body.type, 80 | subject: req.body.subject, 81 | date: moment(req.body.date), 82 | parentIds : [contact.id], 83 | details: req.body.details 84 | } 85 | 86 | notes.push(note); 87 | 88 | res.renderPjax('contact', { 89 | contacts:contacts, 90 | menu: bc.getActiveMenu(menu, 'notes'), 91 | contact: contact, 92 | activities : bc.getNotesForParent(contact.id), 93 | }); 94 | } 95 | 96 | } 97 | 98 | //returns the name of a partial used to render a specific note type 99 | exports.getNotePartialRenderer = function(type) { 100 | var renderWith = 'notes/text'; //default template 101 | 102 | if (type == 'file') { 103 | renderWith = 'notes/file'; 104 | } else if (type == 'todo') { 105 | renderWith = 'notes/todo'; 106 | } else if (type == 'text') { 107 | renderWith = 'notes/text'; 108 | } else if (type == 'media') { 109 | renderWith = 'notes/media'; 110 | } 111 | 112 | return renderWith; 113 | 114 | } 115 | 116 | -------------------------------------------------------------------------------- /routes/settings.js: -------------------------------------------------------------------------------- 1 | var bc = require('../bootcards-functions.js'); 2 | 3 | exports.read = function(req, res){ 4 | 5 | res.renderPjax('settings', { 6 | menu: bc.getActiveMenu(menu, 'settings') 7 | }); 8 | 9 | }; 10 | 11 | exports.edit = function(req, res){ 12 | 13 | res.renderPjax('settings_edit', { 14 | menu: bc.getActiveMenu(menu, 'settings') 15 | }); 16 | 17 | }; -------------------------------------------------------------------------------- /views/activities_for_company.html: -------------------------------------------------------------------------------- 1 | {{!< layout}} 2 | 3 |
4 | 5 |
6 |
7 |

Notes

8 | 16 |
17 |
18 | {{#each company.notes}} 19 | 21 | 22 |

{{this.subject}}

23 |

{{formatDate this.date "long"}}

24 |
25 | {{else}} 26 |
No notes found
27 | {{/each}} 28 |
29 | 37 |
38 | 39 |
-------------------------------------------------------------------------------- /views/activities_for_contact.html: -------------------------------------------------------------------------------- 1 | {{!< layout}} 2 | 3 |
4 | 5 |
6 |
7 |

Notes

8 | 16 |
17 |
18 | {{#each contact.notes}} 19 | 21 | 22 |

{{this.subject}}

23 |

{{formatDate this.date "long"}}

24 |
25 | {{else}} 26 |
No notes found
27 | {{/each}} 28 |
29 | 37 |
38 | 39 |
-------------------------------------------------------------------------------- /views/activity_edit.html: -------------------------------------------------------------------------------- 1 | {{#if activity.isNew}} 2 |
3 | {{else}} 4 | 5 | {{/if}} 6 | 7 | 19 | 20 | 30 |
31 | 32 | {{#unless activity.isNew}} 33 | 40 | {{/unless}} 41 | 42 | 50 | -------------------------------------------------------------------------------- /views/activity_form.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 10 |
11 |
12 |
13 | 14 |
15 | 17 |
18 |
19 |
20 | 21 |
22 | 24 |
25 |
26 |
27 | 28 |
29 | 30 |
31 |
32 | -------------------------------------------------------------------------------- /views/charts.html: -------------------------------------------------------------------------------- 1 | {{!< layout}} 2 | 3 |
4 | 5 |
6 | 7 |
8 | 9 | {{>charts/closed_sales}} 10 | 11 | {{>charts/sales_product_type}} 12 | 13 |
14 |
15 | 16 | {{>charts/database_size}} 17 | 18 | {{>charts/current_month_forecast}} 19 | 20 |
21 |
22 |
23 | -------------------------------------------------------------------------------- /views/charts/closed_sales.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 |
6 |

Closed sales by team member - $000s (December)

7 |
8 | 9 |
10 | 11 | 12 |
13 | 14 | 21 |
22 | 23 | 31 | 32 |
33 | 34 | 35 | 68 | 69 |
70 | 71 | -------------------------------------------------------------------------------- /views/charts/current_month_forecast.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 |
6 |

Current month forecast vs quota - $000s

7 |
8 | 9 |
10 | 11 | 12 |
13 | 14 | 21 |
22 | 23 | 31 | 32 |
33 | 34 | 35 | 68 | 69 |
70 | 71 | -------------------------------------------------------------------------------- /views/charts/database_size.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 |
6 |

Database size - no of records

7 |
8 | 9 |
10 | 11 | 12 |
13 | 14 | 21 |
22 | 23 | 31 | 32 |
33 | 34 | 35 | 65 | 66 |
67 | 68 | -------------------------------------------------------------------------------- /views/charts/sales_product_type.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 |
6 |

Sales by product type - $m

7 |
8 | 9 |
10 | 11 | 12 |
13 | 14 | 21 |
22 | 23 | 31 | 32 |
33 | 34 | 35 | 68 | 69 |
70 | 71 | -------------------------------------------------------------------------------- /views/companies.html: -------------------------------------------------------------------------------- 1 | {{!< layout}} 2 | 3 |
4 | 5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | 13 | 14 |
15 |
16 | 24 |
25 |
26 |
27 | 47 | 55 |
56 |
57 | 58 |
59 | 60 | 61 | {{> company}} 62 | 63 |
64 |
65 | 66 | -------------------------------------------------------------------------------- /views/company.html: -------------------------------------------------------------------------------- 1 | {{!< layout}} 2 | 3 |
4 | 5 |
6 |
7 |

Company Details

8 | 16 | 22 |
23 |
24 |
25 | 26 | 27 |

{{company.name}}

28 |
29 | {{#if company.type}} 30 |
31 | 32 |

{{company.type}}

33 |
34 | {{/if}} 35 | {{#if company.website}} 36 | 37 | 38 |

{{company.website}}

39 |
40 | {{/if}} 41 | {{#if company.city}} 42 |
43 | 44 |

{{company.city}}

45 |
46 | {{/if}} 47 | {{#if company.country}} 48 |
49 | 50 |

{{company.country}}

51 |
52 | {{/if}} 53 | {{#if company.location}} 54 |
55 | 56 |

{{company.location}}

57 |
58 | {{/if}} 59 |
60 | 68 |
69 | 70 |
71 | 72 | 73 | {{>contacts_for_parent this}} 74 | 75 | 76 | {{>activities_for_company this}} 77 | -------------------------------------------------------------------------------- /views/company_activity_edit.html: -------------------------------------------------------------------------------- 1 | {{#if activity.isNew}} 2 |
3 | {{else}} 4 | 5 | {{/if}} 6 | 7 | 20 | 21 | 28 | 29 |
30 | 31 | -------------------------------------------------------------------------------- /views/company_edit.html: -------------------------------------------------------------------------------- 1 |
2 | 15 | 80 |
81 | 82 | {{#unless company.isNew}} 83 | 90 | {{/unless}} 91 | 92 | 100 | -------------------------------------------------------------------------------- /views/contact.html: -------------------------------------------------------------------------------- 1 | {{!< layout}} 2 | 3 |
4 | 5 |
6 |
7 |

Contact Details

8 | 16 | 22 |
23 |
24 |
25 | 26 | 27 |

{{contact.lastName}}, {{contact.firstName}}

28 |
29 | {{#if contact.company}} 30 |
31 | 32 |

{{contact.company}}

33 |
34 | {{/if}} 35 | {{#if contact.jobTitle}} 36 |
37 | 38 |

{{contact.jobTitle}}

39 |
40 | {{/if}} 41 | {{#if contact.department}} 42 |
43 | 44 |

{{contact.department}}

45 |
46 | {{/if}} 47 | {{#if contact.phone}} 48 | 49 | 50 |

{{contact.phone}}

51 |
52 | {{/if}} 53 | {{#if contact.email}} 54 | 55 | 56 |

{{contact.email}}

57 |
58 | {{/if}} 59 |
60 | 68 |
69 | 70 |
71 | 72 | 73 | {{>activities_for_contact this}} 74 | 75 | -------------------------------------------------------------------------------- /views/contact_activity_edit.html: -------------------------------------------------------------------------------- 1 | {{#if activity.isNew}} 2 |
3 | {{else}} 4 | 5 | {{/if}} 6 | 7 | 20 | 21 | 28 | 29 |
30 | 31 | 39 | -------------------------------------------------------------------------------- /views/contact_edit.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 15 | 70 |
71 | 72 | {{#unless contact.isNew}} 73 | 80 | {{/unless}} 81 | 82 | 90 | -------------------------------------------------------------------------------- /views/contacts.html: -------------------------------------------------------------------------------- 1 | {{!< layout}} 2 | 3 | 4 |
5 | 6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | 14 | 15 |
16 |
17 | 25 |
26 |
27 |
28 |
29 | 30 | {{#each contacts}} 31 | 33 | 34 |

{{this.lastName}}, {{this.firstName}}

35 |

{{this.company}}

36 |
37 | {{/each}} 38 | 39 |
40 | 48 |
49 |
50 | 51 | 57 |
58 | 59 | -------------------------------------------------------------------------------- /views/contacts_for_parent.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

Contacts

5 | 13 |
14 |
15 | {{#each company.contacts}} 16 | 17 | 19 | 20 |

{{this.lastName}}, {{this.firstName}}

21 |

{{this.company}}

22 |
23 | 24 | {{else}} 25 | 26 |
No contacts found
27 | 28 | {{/each}} 29 |
30 | 38 | 39 |
40 |
-------------------------------------------------------------------------------- /views/dashboard.html: -------------------------------------------------------------------------------- 1 | {{!< layout}} 2 | 3 |
4 | 5 |
6 | 7 |
8 | 9 | 79 | 80 |
81 | 82 |
83 | 84 | {{>charts/closed_sales}} 85 | 86 |
87 | 88 |
89 | 90 |
91 | 92 | -------------------------------------------------------------------------------- /views/dialog_buttons.html: -------------------------------------------------------------------------------- 1 |
2 | 5 |
6 | 7 |
8 | 11 |
-------------------------------------------------------------------------------- /views/docs.html: -------------------------------------------------------------------------------- 1 | 12 | 13 | -------------------------------------------------------------------------------- /views/layout.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | {{#if session.isIos}} 9 | 10 | 11 | 12 | 13 | {{else}} 14 | 15 | 16 | {{/if}} 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 32 | 33 | 34 | 39 | 40 | 41 | 46 | 47 | 48 | 53 | 54 | 55 | 59 | 60 | 61 | 65 | 66 | 67 | 71 | 72 | 73 | Customers 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | {{{getCSSforOS session}}} 83 | 84 | 85 | 86 | 87 | 88 | {{{isMobile session}}} 89 | 90 | 91 | 92 | 93 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 143 | 144 | 145 | 163 | 164 |
165 | {{{body}}} 166 |
167 | 168 | 169 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 211 | 216 | 217 | 246 | 247 | 248 | -------------------------------------------------------------------------------- /views/notes.html: -------------------------------------------------------------------------------- 1 | {{!< layout}} 2 | 3 |
4 | 5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | 13 | 14 |
15 |
16 | 24 |
25 |
26 |
27 |
28 | {{#each activities}} 29 | 31 | 32 |

{{this.subject}}

33 |

{{formatDate this.date "long"}} 34 |

35 |
36 | {{else}} 37 |
No notes found
38 | {{/each}} 39 |
40 | 48 |
49 |
50 | 51 |
52 | 53 | {{>notes/todo}} 54 | 55 |
56 |
57 | 58 | -------------------------------------------------------------------------------- /views/notes/file.html: -------------------------------------------------------------------------------- 1 | {{!< ../layout}} 2 | 3 |
4 | 5 |
6 |

File

7 |
8 |
9 |
10 | 11 | 12 | 13 |

14 | 15 | {{note.subject}} 16 | 17 |

18 |

{{note.fileType}}

19 |

3.2Mb

20 |
21 |
22 |

Added by Jack Herbert on 5 Mar 2014

23 |
24 |
25 |

{{note.details}}

26 |
27 |
28 | 50 | 58 | 59 |
-------------------------------------------------------------------------------- /views/notes/media.html: -------------------------------------------------------------------------------- 1 | {{!< ../layout}} 2 | 3 |
4 | 5 |
6 |
7 |

Media

8 | 9 | 10 |
11 | {{#if parent}} 12 | {{#if parent.isContact}} 13 | 16 | {{else}} 17 | 20 | {{/if}} 21 | {{else}} 22 | 25 | {{/if}} 26 | 27 | Edit 28 | 29 |
30 | 31 | 32 | {{#if parent}} 33 | {{#if parent.isContact}} 34 | 50 | 51 |
52 |
53 | {{{note.details}}} 54 |
55 | 56 | 64 |
65 | 66 |
67 | 68 | -------------------------------------------------------------------------------- /views/notes/text.html: -------------------------------------------------------------------------------- 1 | {{!< ../layout}} 2 | 3 |
4 | 5 |
6 |
7 |

Text note

8 | 9 | 10 |
11 | {{#if parent}} 12 | {{#if parent.isContact}} 13 | 16 | {{else}} 17 | 20 | {{/if}} 21 | {{else}} 22 | 25 | {{/if}} 26 | 27 | Edit 28 | 29 |
30 | 31 | 32 | {{#if parent}} 33 | {{#if parent.isContact}} 34 | 50 | 51 |
52 |
53 | {{#if note.subject}} 54 |
55 | 56 |

{{note.subject}}

57 |
58 | {{/if}} 59 | {{#if note.date}} 60 |
61 | 62 |

{{{formatDate note.date}}}

63 |
64 | {{/if}} 65 | {{#if note.details}} 66 |
67 | 68 |

{{{note.details}}}

69 |
70 | {{/if}} 71 |
72 | 80 |
81 | 82 |
83 | 84 | -------------------------------------------------------------------------------- /views/notes/todo.html: -------------------------------------------------------------------------------- 1 | {{!< ../layout}} 2 | 3 |
4 | 5 |
6 |
7 |

To Do

8 | 9 | 10 |
11 | {{#if parent}} 12 | {{#if parent.isContact}} 13 | 16 | {{else}} 17 | 20 | {{/if}} 21 | {{else}} 22 | 25 | {{/if}} 26 | 27 | Edit 28 | 29 |
30 | 31 | 32 | {{#if parent}} 33 | {{#if parent.isContact}} 34 | 50 | 51 |
52 |
53 | {{#if note.subject}} 54 |
55 | 56 |

{{note.subject}}

57 |
58 | {{/if}} 59 | {{#if note.date}} 60 |
61 | 62 |

{{{formatDate note.date}}}

63 |
64 | {{/if}} 65 | {{#if note.details}} 66 |
67 | 68 |

{{{note.details}}}

69 |
70 | {{/if}} 71 |
72 | 80 |
81 | 82 |
83 | 84 | -------------------------------------------------------------------------------- /views/settings.html: -------------------------------------------------------------------------------- 1 | {{!< layout}} 2 | 3 |
4 | 5 |
6 |
7 |
8 |

Settings

9 | 10 | 11 | Edit 12 | 13 |
14 | 15 |
16 |
17 |

Username

18 |

username

19 |
20 |
21 |

Password

22 |

••••••••

23 |
24 |
25 |

Type

26 |

Customer

27 |
28 |
29 | 30 | 38 | 39 | 40 |
41 | 42 |
-------------------------------------------------------------------------------- /views/settings_edit.html: -------------------------------------------------------------------------------- 1 | {{!< layout}} 2 | 3 |
4 | 5 |
6 |
7 |
8 |

Settings

9 | 10 | Save 11 | 12 |
13 | 14 |
15 |
16 | 17 |
18 | 20 |
21 |
22 |
23 | 24 |
25 | 27 |
28 |
29 |
30 | 31 |
32 | 38 |
39 |
40 | 41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------