├── server ├── .npmrc ├── views │ ├── error.pug │ └── layout.pug ├── public │ ├── api │ │ └── portraits │ │ │ ├── men │ │ │ ├── 0.jpg │ │ │ ├── 1.jpg │ │ │ ├── 10.jpg │ │ │ ├── 11.jpg │ │ │ ├── 12.jpg │ │ │ ├── 13.jpg │ │ │ ├── 14.jpg │ │ │ ├── 15.jpg │ │ │ ├── 16.jpg │ │ │ ├── 17.jpg │ │ │ ├── 18.jpg │ │ │ ├── 19.jpg │ │ │ ├── 2.jpg │ │ │ ├── 20.jpg │ │ │ ├── 21.jpg │ │ │ ├── 22.jpg │ │ │ ├── 23.jpg │ │ │ ├── 24.jpg │ │ │ ├── 25.jpg │ │ │ ├── 26.jpg │ │ │ ├── 3.jpg │ │ │ ├── 4.jpg │ │ │ ├── 5.jpg │ │ │ ├── 6.jpg │ │ │ ├── 7.jpg │ │ │ ├── 8.jpg │ │ │ └── 9.jpg │ │ │ └── women │ │ │ ├── 0.jpg │ │ │ ├── 1.jpg │ │ │ ├── 10.jpg │ │ │ ├── 11.jpg │ │ │ ├── 12.jpg │ │ │ ├── 13.jpg │ │ │ ├── 14.jpg │ │ │ ├── 15.jpg │ │ │ ├── 16.jpg │ │ │ ├── 17.jpg │ │ │ ├── 18.jpg │ │ │ ├── 19.jpg │ │ │ ├── 2.jpg │ │ │ ├── 20.jpg │ │ │ ├── 21.jpg │ │ │ ├── 22.jpg │ │ │ ├── 23.jpg │ │ │ ├── 3.jpg │ │ │ ├── 4.jpg │ │ │ ├── 5.jpg │ │ │ ├── 6.jpg │ │ │ ├── 7.jpg │ │ │ ├── 8.jpg │ │ │ └── 9.jpg │ └── stylesheets │ │ └── style.css ├── utils │ ├── config.js │ ├── session.js │ ├── errors.js │ └── data.js ├── data │ ├── Organizations.json │ └── Offices.json ├── package.json ├── api │ └── auth.js ├── config.json ├── models │ ├── organization.js │ ├── action.js │ ├── index.js │ └── office.js └── bin │ └── www ├── client ├── app │ ├── view │ │ ├── widgets │ │ │ ├── MapView.scss │ │ │ ├── Show.scss │ │ │ ├── Wizard.scss │ │ │ ├── ShowHeader.scss │ │ │ ├── ShowHeader.js │ │ │ ├── Browse.js │ │ │ ├── BrowseToolbar.js │ │ │ ├── Sidebar.js │ │ │ ├── HistoryView.js │ │ │ ├── ShowController.js │ │ │ ├── HistoryPanel.js │ │ │ ├── HistoryView.scss │ │ │ ├── Show.js │ │ │ ├── MapView.js │ │ │ ├── WizardController.js │ │ │ ├── Sidebar.scss │ │ │ └── BrowseController.js │ │ ├── office │ │ │ ├── Show.scss │ │ │ ├── ShowDetails.scss │ │ │ ├── Browse.js │ │ │ ├── ShowModel.js │ │ │ ├── BrowseController.js │ │ │ ├── BrowseModel.js │ │ │ ├── ShowDetails.js │ │ │ ├── ShowPeople.js │ │ │ ├── ShowController.js │ │ │ ├── Show.js │ │ │ └── Wizard.js │ │ ├── person │ │ │ ├── ShowDetails.scss │ │ │ ├── ShowOrg.scss │ │ │ ├── ShowModel.js │ │ │ ├── Browse.js │ │ │ ├── BrowseController.js │ │ │ ├── WizardModel.js │ │ │ ├── BrowseModel.js │ │ │ ├── ShowHeader.scss │ │ │ ├── Show.js │ │ │ ├── ShowOffice.js │ │ │ ├── ShowTools.scss │ │ │ ├── ShowHeader.js │ │ │ ├── ShowOrg.js │ │ │ ├── ShowController.js │ │ │ ├── ShowTools.js │ │ │ ├── WizardController.js │ │ │ └── ShowDetails.js │ │ ├── main │ │ │ ├── MainModel.js │ │ │ ├── Menu.scss │ │ │ ├── MenuController.js │ │ │ └── Menu.js │ │ ├── viewport │ │ │ └── ViewportModel.js │ │ ├── history │ │ │ ├── Browse.scss │ │ │ ├── Browse.js │ │ │ ├── BrowseController.js │ │ │ └── BrowseModel.js │ │ ├── phone │ │ │ ├── person │ │ │ │ ├── BrowseFilters.js │ │ │ │ ├── ListSwiperItem.js │ │ │ │ ├── BrowseController.js │ │ │ │ └── Browse.js │ │ │ ├── main │ │ │ │ ├── MainController.js │ │ │ │ └── Main.js │ │ │ ├── office │ │ │ │ └── Browse.js │ │ │ ├── organisation │ │ │ │ └── Browse.js │ │ │ └── history │ │ │ │ └── Browse.js │ │ ├── organization │ │ │ ├── ShowModel.js │ │ │ ├── WizardController.js │ │ │ ├── WizardModel.js │ │ │ ├── Browse.js │ │ │ ├── BrowseController.js │ │ │ ├── BrowseModel.js │ │ │ ├── ShowController.js │ │ │ ├── Show.js │ │ │ ├── ShowPeople.js │ │ │ └── Wizard.js │ │ ├── tablet │ │ │ ├── main │ │ │ │ └── Main.js │ │ │ ├── office │ │ │ │ ├── BrowseToolbar.js │ │ │ │ ├── BrowseController.js │ │ │ │ └── Browse.js │ │ │ ├── person │ │ │ │ ├── BrowseController.js │ │ │ │ ├── BrowseToolbar.js │ │ │ │ └── Browse.js │ │ │ ├── organization │ │ │ │ ├── BrowseToolbar.js │ │ │ │ ├── BrowseController.js │ │ │ │ └── Browse.js │ │ │ └── history │ │ │ │ ├── BrowseToolbar.js │ │ │ │ └── Browse.js │ │ ├── home │ │ │ ├── HomeModel.js │ │ │ ├── Home.js │ │ │ ├── HomeEvents.scss │ │ │ ├── HomeEvents.js │ │ │ ├── HomeHeader.js │ │ │ └── HomeHeader.scss │ │ └── auth │ │ │ ├── LoginController.js │ │ │ ├── Login.js │ │ │ └── Login.scss │ ├── store │ │ ├── Events.js │ │ ├── Offices.js │ │ ├── People.js │ │ ├── Organizations.js │ │ ├── Actions.js │ │ ├── Menu.js │ │ └── Filters.js │ ├── model │ │ ├── Filter.js │ │ ├── Organization.js │ │ ├── Action.js │ │ ├── Office.js │ │ ├── Event.js │ │ ├── Session.js │ │ ├── Base.js │ │ └── Person.js │ ├── util │ │ ├── State.js │ │ └── Errors.js │ ├── profile │ │ ├── Phone.scss │ │ ├── Phone.js │ │ └── Tablet.js │ ├── Application.js │ └── controller │ │ └── Action.js ├── src │ └── index.js ├── index.js ├── packages │ └── local │ │ └── coworkee │ │ ├── overrides │ │ ├── init.js │ │ ├── LoadMask.js │ │ ├── field │ │ │ └── Field.js │ │ └── dataview │ │ │ └── listswiper │ │ │ └── ListSwiper.js │ │ └── sass │ │ ├── src │ │ ├── grid │ │ │ └── column │ │ │ │ └── Column.scss │ │ ├── Mask.scss │ │ ├── Toolbar.scss │ │ ├── dataview │ │ │ ├── listswiper │ │ │ │ └── Stepper.scss │ │ │ ├── ListItem.scss │ │ │ └── DataView.scss │ │ ├── field │ │ │ └── Search.scss │ │ ├── tab │ │ │ └── Panel.scss │ │ ├── Panel.scss │ │ └── Button.scss │ │ └── etc │ │ └── all.scss ├── resources │ └── images │ │ ├── loading.png │ │ └── auth-background.jpg ├── .gitignore ├── index.html ├── app.js ├── package.json ├── workspace.json ├── extBackup │ └── package.json └── overrides │ └── util │ └── Format.js ├── .gitignore ├── LICENSE └── README.md /server/.npmrc: -------------------------------------------------------------------------------- 1 | package-lock=false -------------------------------------------------------------------------------- /client/app/view/widgets/MapView.scss: -------------------------------------------------------------------------------- 1 | .mapview { 2 | height: 192px; 3 | } 4 | -------------------------------------------------------------------------------- /client/src/index.js: -------------------------------------------------------------------------------- 1 | //this file exists so the webpack build process will succeed -------------------------------------------------------------------------------- /client/index.js: -------------------------------------------------------------------------------- 1 | //this file exists so the webpack build process will succeed 2 | Ext._find = require('lodash.find'); -------------------------------------------------------------------------------- /client/app/view/office/Show.scss: -------------------------------------------------------------------------------- 1 | .office-map { 2 | height: 32vh; 3 | max-height: 192px; 4 | min-height: 96px; 5 | } 6 | -------------------------------------------------------------------------------- /client/app/view/office/ShowDetails.scss: -------------------------------------------------------------------------------- 1 | .office-details { 2 | .block-section { 3 | min-width: 20%; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /client/app/view/person/ShowDetails.scss: -------------------------------------------------------------------------------- 1 | .person-details { 2 | .block-section { 3 | min-width: 25%; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /server/views/error.pug: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= message 5 | h2= error.status 6 | pre #{error.stack} 7 | -------------------------------------------------------------------------------- /client/packages/local/coworkee/overrides/init.js: -------------------------------------------------------------------------------- 1 | Ext.namespace('Ext.theme.is')['coworkee'] = true; 2 | Ext.theme.name = 'coworkee'; 3 | -------------------------------------------------------------------------------- /client/resources/images/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/client/resources/images/loading.png -------------------------------------------------------------------------------- /server/public/api/portraits/men/0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/0.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/1.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/10.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/11.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/12.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/13.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/14.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/15.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/16.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/17.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/18.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/19.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/2.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/20.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/21.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/22.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/23.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/24.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/24.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/25.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/25.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/26.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/26.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/3.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/4.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/5.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/6.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/7.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/8.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/men/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/men/9.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/0.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/1.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/10.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/11.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/12.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/13.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/14.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/15.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/16.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/17.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/18.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/19.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/2.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/20.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/21.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/22.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/23.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/3.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/4.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/5.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/6.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/7.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/8.jpg -------------------------------------------------------------------------------- /server/public/api/portraits/women/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/server/public/api/portraits/women/9.jpg -------------------------------------------------------------------------------- /client/resources/images/auth-background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sencha-extjs-examples/Coworkee/HEAD/client/resources/images/auth-background.jpg -------------------------------------------------------------------------------- /client/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /ext 3 | bootstrap.* 4 | classic.json* 5 | modern.json* 6 | .sencha 7 | /generatedFiles 8 | /cordova 9 | /node_modules 10 | -------------------------------------------------------------------------------- /client/app/view/widgets/Show.scss: -------------------------------------------------------------------------------- 1 | $show-header-padding: dynamic(8px); 2 | $show-header-spacing: dynamic(16px); 3 | $show-header-picture-size: dynamic(150px); 4 | -------------------------------------------------------------------------------- /server/public/stylesheets/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 50px; 3 | font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; 4 | } 5 | 6 | a { 7 | color: #00B7FF; 8 | } 9 | -------------------------------------------------------------------------------- /server/views/layout.pug: -------------------------------------------------------------------------------- 1 | doctype html 2 | html 3 | head 4 | title= title 5 | link(rel='stylesheet', href='/stylesheets/style.css') 6 | body 7 | block content 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.vscode 2 | /client/app.watch.lock 3 | /server/*.db 4 | /server/node_modules 5 | /client/node_modules 6 | *.log 7 | /server/package-lock.json 8 | /client/package-lock.json 9 | -------------------------------------------------------------------------------- /client/app/view/widgets/Wizard.scss: -------------------------------------------------------------------------------- 1 | .wizard-screen { 2 | align-items: center; 3 | 4 | > .x-body-el { 5 | max-width: $form-max-width; 6 | width: 100%; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /client/packages/local/coworkee/overrides/LoadMask.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.overrides.LoadMask', { 2 | override: 'Ext.LoadMask', 3 | 4 | config: { 5 | message: '' 6 | } 7 | }); 8 | -------------------------------------------------------------------------------- /client/app/view/main/MainModel.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.view.main.MainModel', { 2 | extend: 'Ext.app.ViewModel', 3 | alias: 'viewmodel.main', 4 | 5 | data: { 6 | user: null 7 | } 8 | }); 9 | -------------------------------------------------------------------------------- /client/app/view/viewport/ViewportModel.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.view.viewport.ViewportModel', { 2 | extend: 'Ext.app.ViewModel', 3 | alias: 'viewmodel.viewport', 4 | 5 | data: { 6 | user: null 7 | } 8 | }); 9 | -------------------------------------------------------------------------------- /client/app/store/Events.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.store.Events', { 2 | extend: 'Ext.data.Store', 3 | alias: 'store.events', 4 | 5 | model: 'App.model.Event', 6 | remoteFilter: true, 7 | remoteSort: true, 8 | autoLoad: false 9 | }); 10 | -------------------------------------------------------------------------------- /client/app/store/Offices.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.store.Offices', { 2 | extend: 'Ext.data.Store', 3 | alias: 'store.offices', 4 | 5 | model: 'App.model.Office', 6 | remoteFilter: true, 7 | remoteSort: true, 8 | sorters: 'name' 9 | }); 10 | -------------------------------------------------------------------------------- /client/app/store/People.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.store.People', { 2 | extend: 'Ext.data.Store', 3 | alias: 'store.people', 4 | 5 | model: 'App.model.Person', 6 | remoteFilter: true, 7 | remoteSort: true, 8 | sorters: 'lastname' 9 | }); 10 | -------------------------------------------------------------------------------- /client/app/view/history/Browse.scss: -------------------------------------------------------------------------------- 1 | .historybrowse { 2 | .x-list { 3 | .date, 4 | .time { 5 | text-align: right; 6 | } 7 | 8 | .time { 9 | font-weight: bold; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /client/packages/local/coworkee/sass/src/grid/column/Column.scss: -------------------------------------------------------------------------------- 1 | .x-gridcolumn { 2 | .x-title-el { 3 | @include single-text-shadow(); 4 | cursor: pointer; 5 | } 6 | 7 | .x-trigger-el { 8 | cursor: pointer; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /client/app/store/Organizations.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.store.Organizations', { 2 | extend: 'Ext.data.Store', 3 | alias: 'store.organizations', 4 | 5 | model: 'App.model.Organization', 6 | remoteFilter: true, 7 | remoteSort: true, 8 | sorters: 'name' 9 | }); 10 | -------------------------------------------------------------------------------- /client/app/view/person/ShowOrg.scss: -------------------------------------------------------------------------------- 1 | .person-org { 2 | .x-dataview-item { 3 | cursor: pointer; 4 | width: 20%; 5 | } 6 | .picture { 7 | @include border-radius(0); 8 | margin-top: -1px; 9 | padding-bottom: 100%; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /client/app/model/Filter.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.model.Filter', { 2 | extend: 'Ext.data.Model', 3 | 4 | idProperty: 'value', 5 | 6 | fields: [ 7 | { name: 'value', type: 'string' }, 8 | { name: 'label', type: 'string' }, 9 | { name: 'count', type: 'int' } 10 | ] 11 | }); 12 | -------------------------------------------------------------------------------- /client/app/store/Actions.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.store.Actions', { 2 | extend: 'Ext.data.Store', 3 | alias: 'store.actions', 4 | 5 | model: 'App.model.Action', 6 | remoteFilter: true, 7 | remoteSort: true, 8 | 9 | sorters: { 10 | property: 'created', 11 | direction: 'DESC' 12 | } 13 | }); 14 | -------------------------------------------------------------------------------- /client/app/view/phone/person/BrowseFilters.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.view.phone.person.BrowseFilters', { 2 | extend: 'Ext.Container', 3 | // xtype: 'personbrowsefilters', -- set by profile 4 | 5 | layout: 'vbox', 6 | 7 | items: [{ 8 | xtype: 'searchfield', 9 | placeholder: 'Search' 10 | }] 11 | }); 12 | 13 | 14 | -------------------------------------------------------------------------------- /client/packages/local/coworkee/sass/src/Mask.scss: -------------------------------------------------------------------------------- 1 | .x-mask { 2 | &.x-has-message { 3 | .x-loading-spinner-outer { 4 | height: auto; 5 | } 6 | } 7 | 8 | &.x-loading-mask { 9 | .x-mask-inner { 10 | background-color: transparent; 11 | } 12 | } 13 | } 14 | 15 | @include st-loading-spinner(26px, $loading-spinner-color, 4px, 2px); 16 | -------------------------------------------------------------------------------- /client/app/view/phone/main/MainController.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.view.phone.main.MainController', { 2 | extend: 'App.view.main.MainController', 3 | alias: 'controller.phone-main', 4 | 5 | getContainerForViewId: function(id) { 6 | var regex = /^(person|office|organization)(create|edit|show)$/; 7 | return this.lookup(id.match(regex)? 'navigation' : 'views'); 8 | } 9 | }); 10 | -------------------------------------------------------------------------------- /client/app/view/person/ShowModel.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.view.person.ShowModel', { 2 | extend: 'Ext.app.ViewModel', 3 | alias: 'viewmodel.personshow', 4 | 5 | stores: { 6 | coworkers: { 7 | type: 'people', 8 | pageSize: 12 9 | }, 10 | 11 | history: { 12 | type: 'actions', 13 | pageSize: 12 14 | } 15 | } 16 | }); 17 | -------------------------------------------------------------------------------- /client/app/view/organization/ShowModel.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.view.organization.ShowModel', { 2 | extend: 'Ext.app.ViewModel', 3 | alias: 'viewmodel.organizationshow', 4 | 5 | stores: { 6 | people: { 7 | type: 'people', 8 | pageSize: 12 9 | }, 10 | 11 | history: { 12 | type: 'actions', 13 | pageSize: 12 14 | } 15 | } 16 | }); 17 | -------------------------------------------------------------------------------- /client/app/view/organization/WizardController.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.view.organization.WizardController', { 2 | extend: 'App.view.widgets.WizardController', 3 | alias: 'controller.organizationwizard', 4 | 5 | control: { 6 | '#': { 7 | reset: 'refresh' 8 | } 9 | }, 10 | 11 | refresh: function() { 12 | this.getViewModel().getStore('managers').reload(); 13 | } 14 | }); 15 | -------------------------------------------------------------------------------- /client/app/model/Organization.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.model.Organization', { 2 | extend: 'App.model.Base', 3 | 4 | fields: [ 5 | { name: 'name', type: 'string' }, 6 | { name: 'manager_id', reference: 'Person' }, 7 | { name: 'headcount', type: 'int', persist: false } 8 | ], 9 | 10 | proxy: { 11 | api: { 12 | prefix: 'Server.organizations' 13 | } 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /client/app/view/office/Browse.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.view.office.Browse', { 2 | extend: 'App.view.widgets.Browse', 3 | 4 | fields: { 5 | country: { 6 | property: 'country' 7 | } 8 | }, 9 | 10 | controller: 'officebrowse', 11 | viewModel: { 12 | type: 'officebrowse' 13 | }, 14 | 15 | cls: 'officebrowse', 16 | bind: { 17 | store: '{offices}' 18 | } 19 | }); 20 | -------------------------------------------------------------------------------- /client/app/view/office/ShowModel.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.view.office.ShowModel', { 2 | extend: 'Ext.app.ViewModel', 3 | alias: 'viewmodel.officeshow', 4 | 5 | stores: { 6 | markers: {}, 7 | 8 | people: { 9 | type: 'people', 10 | pageSize: 12 11 | }, 12 | 13 | history: { 14 | type: 'actions', 15 | pageSize: 12 16 | } 17 | } 18 | }); 19 | -------------------------------------------------------------------------------- /server/utils/config.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | var merge = require('deepmerge'); 4 | var config = require('../config.json'); 5 | 6 | // Override main config (config.json) with potential local config (config.local.json): that's 7 | // useful when deploying the app on a server with different server url and port (Ext.Direct). 8 | try { 9 | config = merge(config, require('../config.local.json')); 10 | } catch (e) { 11 | } 12 | 13 | module.exports = config; 14 | -------------------------------------------------------------------------------- /client/app/view/organization/WizardModel.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.view.organization.WizardModel', { 2 | extend: 'Ext.app.ViewModel', 3 | alias: 'viewmodel.organizationwizard', 4 | 5 | stores: { 6 | managers: { 7 | type: 'filters', 8 | service: 'people', 9 | field: 'person.id', 10 | label: [ 11 | 'firstname', 12 | 'lastname' 13 | ] 14 | } 15 | } 16 | }); 17 | -------------------------------------------------------------------------------- /client/packages/local/coworkee/sass/src/Toolbar.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * This file contains Ext.Toolbar visual themes (ui) 3 | * http://docs.sencha.com/extjs/latest/modern/Ext.Toolbar.html#sass-mixins 4 | */ 5 | 6 | @include toolbar-ui( 7 | $ui: 'tools', 8 | $background-color: $neutral-light-color, 9 | $box-shadow: 0 4px 2px -3px rgba(black, 0.2) inset 10 | ); 11 | 12 | @include toolbar-ui( 13 | $ui: 'flat', 14 | $background-color: transparent 15 | ); 16 | -------------------------------------------------------------------------------- /client/app/view/organization/Browse.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.view.organization.Browse', { 2 | extend: 'App.view.widgets.Browse', 3 | 4 | fields: { 5 | manager: { 6 | property: 'manager_id' 7 | } 8 | }, 9 | 10 | controller: 'organizationbrowse', 11 | viewModel: { 12 | type: 'organizationbrowse' 13 | }, 14 | 15 | cls: 'organizationbrowse', 16 | bind: { 17 | store: '{organizations}' 18 | } 19 | }); 20 | -------------------------------------------------------------------------------- /client/packages/local/coworkee/sass/etc/all.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * This is is imported by virtue of "sass.etc" in "app.json". 3 | */ 4 | @function contrasted($color, $percent: 50%) { 5 | @if $percent < 0 { 6 | $dark: lighten($color, -$percent); 7 | $light: darken($color, -$percent); 8 | } @else { 9 | $dark: darken($color, $percent); 10 | $light: lighten($color, $percent); 11 | } 12 | 13 | @return if(brightness($color) > 50, $dark, $light); 14 | } 15 | -------------------------------------------------------------------------------- /client/app/view/person/Browse.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.view.person.Browse', { 2 | extend: 'App.view.widgets.Browse', 3 | 4 | fields: { 5 | office: { 6 | property: 'officeId' 7 | }, 8 | organization: { 9 | property: 'organizationId' 10 | } 11 | }, 12 | 13 | controller: 'personbrowse', 14 | viewModel: { 15 | type: 'personbrowse' 16 | }, 17 | 18 | cls: 'personbrowse', 19 | bind: { 20 | store: '{people}' 21 | } 22 | }); 23 | -------------------------------------------------------------------------------- /client/packages/local/coworkee/sass/src/dataview/listswiper/Stepper.scss: -------------------------------------------------------------------------------- 1 | .x-listswiperstepper { 2 | .x-text { 3 | line-height: 1.4; 4 | } 5 | 6 | .subject { 7 | @include transition-property(height); 8 | @include transition-duration(0.25s); 9 | @include ellipsis; 10 | 11 | display: block; 12 | font-size: 12px; 13 | height: 0; 14 | } 15 | 16 | &.x-active { 17 | .subject { 18 | height: 18px; 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /client/app/view/office/BrowseController.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.view.office.BrowseController', { 2 | extend: 'App.view.widgets.BrowseController', 3 | alias: 'controller.officebrowse', 4 | 5 | control: { 6 | '#': { 7 | reset: 'refresh' 8 | } 9 | }, 10 | 11 | refresh: function() { 12 | var vm = this.getViewModel(); 13 | vm.getStore('countries').reload(); 14 | }, 15 | 16 | onCreate: function() { 17 | this.redirectTo('office/create'); 18 | } 19 | }); 20 | -------------------------------------------------------------------------------- /client/app/view/tablet/main/Main.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.view.tablet.main.Main', { 2 | extend: 'Ext.Panel', 3 | // xtype: 'main', -- set by profile 4 | 5 | controller: 'main', 6 | 7 | layout: 'card', 8 | 9 | defaults: { 10 | header: { 11 | defaults: { 12 | ui: 'flat large' 13 | } 14 | } 15 | }, 16 | 17 | lbar: { 18 | xtype: 'mainmenu', 19 | reference: 'mainmenu', 20 | ui: 'dark micro', 21 | zIndex: 4 22 | } 23 | }); 24 | -------------------------------------------------------------------------------- /client/packages/local/coworkee/overrides/field/Field.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.override.field.Field', { 2 | override: 'Ext.field.Field', 3 | 4 | config: { 5 | requiredMessage: 'This field is required', 6 | 7 | labelTextAlign: 'right', 8 | 9 | errorTip: { 10 | anchor: true, 11 | align: 'l-r?', 12 | ui: 'tooltip invalid' 13 | } 14 | }, 15 | 16 | platformConfig: { 17 | phone: { 18 | errorTarget: 'under' 19 | } 20 | } 21 | }); 22 | -------------------------------------------------------------------------------- /client/app/view/organization/BrowseController.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.view.organization.BrowseController', { 2 | extend: 'App.view.widgets.BrowseController', 3 | alias: 'controller.organizationbrowse', 4 | 5 | control: { 6 | '#': { 7 | reset: 'refresh' 8 | } 9 | }, 10 | 11 | refresh: function() { 12 | var vm = this.getViewModel(); 13 | vm.getStore('managers').reload(); 14 | }, 15 | 16 | onCreate: function() { 17 | this.redirectTo('organization/create'); 18 | } 19 | }); 20 | -------------------------------------------------------------------------------- /client/app/view/phone/person/ListSwiperItem.js: -------------------------------------------------------------------------------- 1 | Ext.define('App.view.phone.person.ListSwiperItem', { 2 | extend: 'Ext.dataview.listswiper.Stepper', 3 | // xtype: 'personlistswiperitem', -- set by profile 4 | 5 | tpl: [ 6 | '