Commit c4d3e07d0fe924ffef30abd83dce85b192f45d77

Authored by Deepak
1 parent 39d8f536dc
Exists in master

added login/reset and forgot password

Showing 49 changed files with 2040 additions and 557 deletions   Show diff stats
1 import '/imports/startup/client'; 1 import '/imports/client/app/index';
2 2
imports/client/app/index.js
File was created 1 import _ from 'lodash';
2 import moment from 'moment';
3 import { Meteor } from 'meteor/meteor';
4 import { Router, browserHistory } from 'react-router';
5
6 import { Orgs } from '/imports/collections/orgs/index';
7 import { Users } from '/imports/collections/users/index';;
8
9
10 import { Bert } from 'meteor/themeteorchef:bert';
11 import './routes.js';
12 import './shelf.js';
13 // import 'react-quill/dist/quill.snow.css';
14
15 Bert.defaults = {
16 hideDelay: 3500,
17 // Accepts: a number in milliseconds.
18 style: 'fixed-top',
19 // Accepts: fixed-top, fixed-bottom, growl-top-left, growl-top-right,
20 // growl-bottom-left, growl-bottom-right.
21 type: 'default'
22 // Accepts: default, success, info, warning, danger.
23 };
24
25 _.assign(window, {
26 _,
27 });
28
29 if(Meteor.settings.public.environment === 'development') {
30 _.assign(window, {
31 Meteor,
32 Shelf,
33
34 Orgs,
35 Users,
36 });
37 }
38
imports/client/app/routes.js
File was created 1 /* eslint-disable max-len */
2
3 import React from 'react';
4 import { render } from 'react-dom';
5 import { Router, Route,
6 IndexRoute, browserHistory } from 'react-router';
7 import { Meteor } from 'meteor/meteor';
8
9 /**
10 * General Components
11 */
12 import Index from '/imports/client/views/app/module/Index';
13
14 /**
15 * Org Components
16 */
17
18 import { App } from '/imports/client/layouts/OrgApp';
19 import { AppModule } from '/imports/client/views/org/app/module/Index';
20 import { Orgs } from '/imports/collections/orgs/index';
21 import NotFound from '/imports/client/views/org/NotFound';
22
23 /**
24 * NonOrg Components
25 */
26 import Signup from '/imports/client/views/nonOrg/enter/SignupView';
27
28 /**
29 * Invalid Org Components
30 */
31
32 const authenticate = (nextState, replace) => {
33 if (!Meteor.loggingIn() && !Meteor.userId()) {
34 replace({
35 pathname: '/login',
36 state: { nextPathname: nextState.location.pathname },
37 });
38 }
39 };
40
41
42 const detectOrg = () => {
43 orgSlug = "";
44 var hostnameArray = document.location.hostname.split( "." );
45 if(hostnameArray[1]=='localhost'){
46 orgSlug = hostnameArray[0];
47 }
48 if(orgSlug!=""){
49 Meteor.call('checkExistingOrg', {slug:orgSlug}, function(err, res) {
50 if(res){
51 Session.set('orgId', res._id._str);
52 Session.set('orgSlug', orgSlug);
53 render(getOrgRoutes(),document.getElementById('app'));
54 }else{
55 render(getInvalidOrgRoute(),document.getElementById('app'));
56 }
57 });
58 }else{
59 render(getNonOrgRoutes(),document.getElementById('app'));
60 }
61 }
62 const checkSlug = (nextState, replace) => {
63 orgId = Session.get('orgId');
64 }
65
66 /**
67 There are three types of routes
68 1)getOrgRoutes: all the routes that should be present for a registered org
69 2)getInvalidOrgRoute: all the routes where someone tries to enter a subdomain which hasn't been registered yet (404 mostly :D)
70 3)getNonOrgRoutes: all routes linked to normal site, ie signing up a new org. CHeking out demo and everything internal
71 **/
72 const getOrgRoutes = () => (
73 <Router history={ browserHistory }>
74 <Route path="/" component={ App }>
75 <IndexRoute name="index" component={ AppModule } />
76 <Route path="*" component={ NotFound } />
77 </Route>
78 </Router>
79 )
80
81
82 const getInvalidOrgRoute = () => (
83 <Router history={ browserHistory }>
84 <Route path="/" component={ App }>
85 <IndexRoute name="index" component={ NotFound } />
86 <Route path="*" component={ NotFound } />
87 </Route>
88 </Router>
89 )
90
91 const getNonOrgRoutes = () => (
92 <Router history={ browserHistory }>
93 <Route path="/" component={ App }>
94 <IndexRoute name="index" component={ Index } />
95 <Route name="signup" path="/signup" component={ Signup } />
96 <Route path="*" component={ NotFound } />
97 </Route>
98 </Router>
99 )
100
101
102 Meteor.startup(() => {
103 detectOrg();
104 });
105
imports/client/app/shelf.js
File was created 1 import { ReactiveVar } from 'meteor/reactive-var'
2
3
4 window.Shelf = {};
5
6 Shelf.layout = new ReactiveVar({});
7 // {
8 // bulb: new ReactiveVar(''), // Active menu tab
9 // subbulb: new ReactiveVar(''), // Active submenu tab
10 // };
11
12
13
imports/client/app/utils/changePassword.js
File was created 1 import $ from 'jquery';
2 import 'jquery-validation';
3 import { Accounts } from 'meteor/accounts-base';
4 import { Bert } from 'meteor/themeteorchef:bert';
5 import { getInputValue } from './get-input-value';
6
7 let component;
8
imports/client/app/utils/get-input-value.js
File was created 1 // TODO WTF: what is this thing? -H
2
3 import ReactDOM from 'react-dom';
4
5 export const getInputValue = (component) => ReactDOM.findDOMNode(component).value;
6
imports/client/app/utils/login.js
File was created 1 import $ from 'jquery';
2 import 'jquery-validation';
3 import { browserHistory } from 'react-router';
4 import { Meteor } from 'meteor/meteor';
5 import { Bert } from 'meteor/themeteorchef:bert';
6 import { getInputValue } from './get-input-value';
7
8 let component;
9
10 const login = () => {
11 const email = getInputValue(component.refs.emailAddress);
12 const password = getInputValue(component.refs.password);
13
14 Meteor.call('checkEmailVerification', email, ( error, data ) => {
15 if ( error ) {
16 Bert.alert( error.reason, 'danger' );
17 }
18 else {
19 if ( data == "verified" ) {
20 Meteor.loginWithPassword(email, password, (error) => {
21 if ( error ) {
22 Bert.alert(error.reason, 'warning');
23 } else {
24 Bert.alert('Logged in!', 'success');
25
26 const { location } = component.props;
27 if (location.state && location.state.nextPathname) {
28 browserHistory.push(location.state.nextPathname);
29 } else {
30 browserHistory.push('/');
31 }
32 }
33 });
34 } else if ( data == "unverified" ){
35 Bert.alert("Check your email for a verification link");
36 } else {
37 Bert.alert("Either email or password is incorrect");
38 }
39 }
40 });
41 };
42
43 const validate = () => {
44 $(component.refs.login).validate({
45 rules: {
46 emailAddress: {
47 required: true,
48 email: true,
49 },
50 password: {
51 required: true,
52 },
53 },
54 messages: {
55 emailAddress: {
56 required: 'Need an email address here.',
57 email: 'Is this email address legit?',
58 },
59 password: {
60 required: 'Need a password here.',
61 },
62 },
63 submitHandler() { login(); },
64 });
65 };
66
67 export const handleLogin = (options) => {
68 component = options.component;
69 validate();
70 };
71
imports/client/app/utils/loginMethods.js
File was created 1 import { browserHistory } from 'react-router';
2
3
4 export const logout = () => {
5 Meteor.logout();
6 browserHistory.push('/');
7 };
8
9
10
11
imports/client/app/utils/rate-limit.js
File was created 1 import { _ } from 'meteor/underscore';
2 import { Meteor } from 'meteor/meteor';
3 import { DDPRateLimiter } from 'meteor/ddp-rate-limiter';
4
5 const fetchMethodNames = (methods) => _.pluck(methods, 'name');
6
7 const assignLimits = ({ methods, limit, timeRange }) => {
8 const methodNames = fetchMethodNames(methods);
9
10 if (Meteor.isServer) {
11 DDPRateLimiter.addRule({
12 name(name) { return _.contains(methodNames, name); },
13 connectionId() { return true; },
14 }, limit, timeRange);
15 }
16 };
17
18 export const rateLimit = (options) => assignLimits(options);
19
imports/client/app/utils/recover-password.js
File was created 1 import $ from 'jquery';
2 import 'jquery-validation';
3 import { Accounts } from 'meteor/accounts-base';
4 import { Bert } from 'meteor/themeteorchef:bert';
5 import { getInputValue } from './get-input-value';
6
7 let component;
8
9 const handleRecovery = () => {
10 Accounts.forgotPassword({
11 email: getInputValue(component.refs.emailAddress),
12 }, (error) => {
13 if (error) {
14 Bert.alert(error.reason, 'warning');
15 } else {
16 Bert.alert('Check your inbox for a reset link!', 'success');
17 }
18 });
19 };
20
21 const validate = () => {
22 $(component.refs.recoverPassword).validate({
23 rules: {
24 emailAddress: {
25 required: true,
26 email: true,
27 },
28 },
29 messages: {
30 emailAddress: {
31 required: 'Need an email address here.',
32 email: 'Is this email address legit?',
33 },
34 },
35 submitHandler() { handleRecovery(); },
36 });
37 };
38
39 export const handleRecoverPassword = (options) => {
40 component = options.component;
41 validate();
42 };
43
imports/client/app/utils/reset-password.js
File was created 1 import $ from 'jquery';
2 import 'jquery-validation';
3 import { browserHistory } from 'react-router';
4 import { Accounts } from 'meteor/accounts-base';
5 import { Bert } from 'meteor/themeteorchef:bert';
6 import { getInputValue } from './get-input-value';
7
8 let component;
9 let token;
10
11 const handleReset = () => {
12 const password = getInputValue(component.refs.newPassword);
13 Accounts.resetPassword(token, password, (error) => {
14 if (error) {
15 Bert.alert(error.reason, 'danger');
16 } else {
17 browserHistory.push('/');
18 Bert.alert('Password reset!', 'success');
19 }
20 });
21 };
22
23 const validate = () => {
24 $(component.refs.resetPassword).validate({
25 rules: {
26 newPassword: {
27 required: true,
28 minlength: 6,
29 },
30 repeatNewPassword: {
31 required: true,
32 minlength: 6,
33 equalTo: '[name="newPassword"]',
34 },
35 },
36 messages: {
37 newPassword: {
38 required: 'Enter a new password, please.',
39 minlength: 'Use at least six characters, please.',
40 },
41 repeatNewPassword: {
42 required: 'Repeat your new password, please.',
43 equalTo: 'Hmm, your passwords don\'t match. Try again?',
44 },
45 },
46 submitHandler() { handleReset(); },
47 });
48 };
49
50 export const handleResetPassword = (options) => {
51 component = options.component;
52 token = options.token;
53 validate();
54 };
55
imports/client/app/utils/setQueryParam.js
File was created 1 import _ from 'lodash';
2
3 export const setQueryParam = (location, query) => ({
4 pathname: location.pathname,
5 hash: location.hash,
6 query: _.assign({}, location.query, query),
7 });
8
9
10
imports/client/app/utils/signup.js
File was created 1 import $ from 'jquery';
2 import 'jquery-validation';
3 import { browserHistory } from 'react-router';
4 import { Accounts } from 'meteor/accounts-base';
5 import { Bert } from 'meteor/themeteorchef:bert';
6 import { getInputValue } from './get-input-value';
7
8 let component;
9
10 const getUserData = () => ({
11 email: getInputValue(component.refs.emailAddress),
12 password: getInputValue(component.refs.password),
13 profile: {
14 name: {
15 first: getInputValue(component.refs.firstName),
16 last: getInputValue(component.refs.lastName),
17 },
18 },
19 });
20
21 const signUp = () => {
22 const user = getUserData();
23
24 Accounts.createUser(user, (error) => {
25 if (error) {
26 Bert.alert(error.reason, 'danger');
27 } else {
28 Bert.alert( 'Welcome!', 'success' );
29 Session.set('signedEmail', user.email);
30 browserHistory.push('/users/verify');
31 }
32 });
33 };
34
35 const validate = () => {
36 $(component.refs.signup).validate({
37 rules: {
38 firstName: {
39 required: true,
40 },
41 lastName: {
42 required: true,
43 },
44 emailAddress: {
45 required: true,
46 email: true,
47 },
48 password: {
49 required: true,
50 minlength: 6,
51 },
52 },
53 messages: {
54 firstName: {
55 required: 'First name?',
56 },
57 lastName: {
58 required: 'Last name?',
59 },
60 emailAddress: {
61 required: 'Need an email address here.',
62 email: 'Is this email address legit?',
63 },
64 password: {
65 required: 'Need a password here.',
66 minlength: 'Use at least six characters, please.',
67 },
68 },
69 submitHandler() { signUp(); },
70 });
71 };
72
73 export const handleSignup = (options) => {
74 component = options.component;
75 validate();
76 };
77
imports/client/assets/css/icons/icomoon/styles.css
1 @font-face { 1 @font-face {
2 font-family: 'icomoon'; 2 font-family: 'icomoon';
3 src:url('fonts/icomoon.eot?3p0rtw'); 3 src:url('fonts/icomoon.eot?3p0rtw');
4 src:url('fonts/icomoon.eot?#iefix3p0rtw') format('embedded-opentype'), 4 src:url('fonts/icomoon.eot?#iefix3p0rtw') format('embedded-opentype'),
5 url('fonts/icomoon.woff?3p0rtw') format('woff'), 5 url('fonts/icomoon.woff?3p0rtw') format('font-woff'),
6 url('fonts/icomoon.ttf?3p0rtw') format('truetype'), 6 url('fonts/icomoon.ttf?3p0rtw') format('truetype'),
7 url('fonts/icomoon.svg?3p0rtw#icomoon') format('svg'); 7 url('fonts/icomoon.svg?3p0rtw#icomoon') format('svg');
8 font-weight: normal; 8 font-weight: normal;
9 font-style: normal; 9 font-style: normal;
10 } 10 }
11 11
12 [class^="icon-"], [class*=" icon-"] { 12 [class^="icon-"], [class*=" icon-"] {
13 font-family: 'icomoon'; 13 font-family: 'icomoon';
14 speak: none; 14 speak: none;
15 font-style: normal; 15 font-style: normal;
16 font-weight: normal; 16 font-weight: normal;
17 font-variant: normal; 17 font-variant: normal;
18 text-transform: none; 18 text-transform: none;
19 line-height: 1; 19 line-height: 1;
20 min-width: 1em; 20 min-width: 1em;
21 display: inline-block; 21 display: inline-block;
22 text-align: center; 22 text-align: center;
23 font-size: 16px; 23 font-size: 16px;
24 vertical-align: middle; 24 vertical-align: middle;
25 position: relative; 25 position: relative;
26 top: -1px; 26 top: -1px;
27 27
28 /* Better Font Rendering =========== */ 28 /* Better Font Rendering =========== */
29 -webkit-font-smoothing: antialiased; 29 -webkit-font-smoothing: antialiased;
30 -moz-osx-font-smoothing: grayscale; 30 -moz-osx-font-smoothing: grayscale;
31 } 31 }
32 32
33 .icon-2x { 33 .icon-2x {
34 font-size: 32px; 34 font-size: 32px;
35 } 35 }
36 .icon-3x { 36 .icon-3x {
37 font-size: 48px; 37 font-size: 48px;
38 } 38 }
39 39
40 .icon-bordered { 40 .icon-bordered {
41 padding: 5px; 41 padding: 5px;
42 border: 2px solid; 42 border: 2px solid;
43 border-radius: 50%; 43 border-radius: 50%;
44 } 44 }
45 45
46 .icon-home:before{content:"\e900";} 46 .icon-home:before{content:"\e900";}
47 .icon-home2:before{content:"\e901";} 47 .icon-home2:before{content:"\e901";}
48 .icon-home5:before{content:"\e904";} 48 .icon-home5:before{content:"\e904";}
49 .icon-home7:before{content:"\e906";} 49 .icon-home7:before{content:"\e906";}
50 .icon-home8:before{content:"\e907";} 50 .icon-home8:before{content:"\e907";}
51 .icon-home9:before{content:"\e908";} 51 .icon-home9:before{content:"\e908";}
52 .icon-office:before{content:"\e909";} 52 .icon-office:before{content:"\e909";}
53 .icon-city:before{content:"\e90a";} 53 .icon-city:before{content:"\e90a";}
54 .icon-newspaper:before{content:"\e90b";} 54 .icon-newspaper:before{content:"\e90b";}
55 .icon-magazine:before{content:"\e90c";} 55 .icon-magazine:before{content:"\e90c";}
56 .icon-design:before{content:"\e90d";} 56 .icon-design:before{content:"\e90d";}
57 .icon-pencil:before{content:"\e90e";} 57 .icon-pencil:before{content:"\e90e";}
58 .icon-pencil3:before{content:"\e910";} 58 .icon-pencil3:before{content:"\e910";}
59 .icon-pencil4:before{content:"\e911";} 59 .icon-pencil4:before{content:"\e911";}
60 .icon-pencil5:before{content:"\e912";} 60 .icon-pencil5:before{content:"\e912";}
61 .icon-pencil6:before{content:"\e913";} 61 .icon-pencil6:before{content:"\e913";}
62 .icon-pencil7:before{content:"\e914";} 62 .icon-pencil7:before{content:"\e914";}
63 .icon-eraser:before{content:"\e915";} 63 .icon-eraser:before{content:"\e915";}
64 .icon-eraser2:before{content:"\e916";} 64 .icon-eraser2:before{content:"\e916";}
65 .icon-eraser3:before{content:"\e917";} 65 .icon-eraser3:before{content:"\e917";}
66 .icon-quill2:before{content:"\e919";} 66 .icon-quill2:before{content:"\e919";}
67 .icon-quill4:before{content:"\e91b";} 67 .icon-quill4:before{content:"\e91b";}
68 .icon-pen:before{content:"\e91c";} 68 .icon-pen:before{content:"\e91c";}
69 .icon-pen-plus:before{content:"\e91d";} 69 .icon-pen-plus:before{content:"\e91d";}
70 .icon-pen-minus:before{content:"\e91e";} 70 .icon-pen-minus:before{content:"\e91e";}
71 .icon-pen2:before{content:"\e91f";} 71 .icon-pen2:before{content:"\e91f";}
72 .icon-blog:before{content:"\e925";} 72 .icon-blog:before{content:"\e925";}
73 .icon-pen6:before{content:"\e927";} 73 .icon-pen6:before{content:"\e927";}
74 .icon-brush:before{content:"\e928";} 74 .icon-brush:before{content:"\e928";}
75 .icon-spray:before{content:"\e929";} 75 .icon-spray:before{content:"\e929";}
76 .icon-color-sampler:before{content:"\e92c";} 76 .icon-color-sampler:before{content:"\e92c";}
77 .icon-toggle:before{content:"\e92d";} 77 .icon-toggle:before{content:"\e92d";}
78 .icon-bucket:before{content:"\e92e";} 78 .icon-bucket:before{content:"\e92e";}
79 .icon-gradient:before{content:"\e930";} 79 .icon-gradient:before{content:"\e930";}
80 .icon-eyedropper:before{content:"\e931";} 80 .icon-eyedropper:before{content:"\e931";}
81 .icon-eyedropper2:before{content:"\e932";} 81 .icon-eyedropper2:before{content:"\e932";}
82 .icon-eyedropper3:before{content:"\e933";} 82 .icon-eyedropper3:before{content:"\e933";}
83 .icon-droplet:before{content:"\e934";} 83 .icon-droplet:before{content:"\e934";}
84 .icon-droplet2:before{content:"\e935";} 84 .icon-droplet2:before{content:"\e935";}
85 .icon-color-clear:before{content:"\e937";} 85 .icon-color-clear:before{content:"\e937";}
86 .icon-paint-format:before{content:"\e938";} 86 .icon-paint-format:before{content:"\e938";}
87 .icon-stamp:before{content:"\e939";} 87 .icon-stamp:before{content:"\e939";}
88 .icon-image2:before{content:"\e93c";} 88 .icon-image2:before{content:"\e93c";}
89 .icon-image-compare:before{content:"\e93d";} 89 .icon-image-compare:before{content:"\e93d";}
90 .icon-images2:before{content:"\e93e";} 90 .icon-images2:before{content:"\e93e";}
91 .icon-image3:before{content:"\e93f";} 91 .icon-image3:before{content:"\e93f";}
92 .icon-images3:before{content:"\e940";} 92 .icon-images3:before{content:"\e940";}
93 .icon-image4:before{content:"\e941";} 93 .icon-image4:before{content:"\e941";}
94 .icon-image5:before{content:"\e942";} 94 .icon-image5:before{content:"\e942";}
95 .icon-camera:before{content:"\e944";} 95 .icon-camera:before{content:"\e944";}
96 .icon-shutter:before{content:"\e947";} 96 .icon-shutter:before{content:"\e947";}
97 .icon-headphones:before{content:"\e948";} 97 .icon-headphones:before{content:"\e948";}
98 .icon-headset:before{content:"\e949";} 98 .icon-headset:before{content:"\e949";}
99 .icon-music:before{content:"\e94a";} 99 .icon-music:before{content:"\e94a";}
100 .icon-album:before{content:"\e950";} 100 .icon-album:before{content:"\e950";}
101 .icon-tape:before{content:"\e952";} 101 .icon-tape:before{content:"\e952";}
102 .icon-piano:before{content:"\e953";} 102 .icon-piano:before{content:"\e953";}
103 .icon-speakers:before{content:"\e956";} 103 .icon-speakers:before{content:"\e956";}
104 .icon-play:before{content:"\e957";} 104 .icon-play:before{content:"\e957";}
105 .icon-clapboard-play:before{content:"\e959";} 105 .icon-clapboard-play:before{content:"\e959";}
106 .icon-clapboard:before{content:"\e95a";} 106 .icon-clapboard:before{content:"\e95a";}
107 .icon-media:before{content:"\e95b";} 107 .icon-media:before{content:"\e95b";}
108 .icon-presentation:before{content:"\e95c";} 108 .icon-presentation:before{content:"\e95c";}
109 .icon-movie:before{content:"\e95d";} 109 .icon-movie:before{content:"\e95d";}
110 .icon-film:before{content:"\e95e";} 110 .icon-film:before{content:"\e95e";}
111 .icon-film2:before{content:"\e95f";} 111 .icon-film2:before{content:"\e95f";}
112 .icon-film3:before{content:"\e960";} 112 .icon-film3:before{content:"\e960";}
113 .icon-film4:before{content:"\e961";} 113 .icon-film4:before{content:"\e961";}
114 .icon-video-camera:before{content:"\e962";} 114 .icon-video-camera:before{content:"\e962";}
115 .icon-video-camera2:before{content:"\e963";} 115 .icon-video-camera2:before{content:"\e963";}
116 .icon-video-camera-slash:before{content:"\e964";} 116 .icon-video-camera-slash:before{content:"\e964";}
117 .icon-video-camera3:before{content:"\e965";} 117 .icon-video-camera3:before{content:"\e965";}
118 .icon-dice:before{content:"\e96a";} 118 .icon-dice:before{content:"\e96a";}
119 .icon-chess-king:before{content:"\e972";} 119 .icon-chess-king:before{content:"\e972";}
120 .icon-chess-queen:before{content:"\e973";} 120 .icon-chess-queen:before{content:"\e973";}
121 .icon-chess:before{content:"\e978";} 121 .icon-chess:before{content:"\e978";}
122 .icon-megaphone:before{content:"\e97a";} 122 .icon-megaphone:before{content:"\e97a";}
123 .icon-new:before{content:"\e97b";} 123 .icon-new:before{content:"\e97b";}
124 .icon-connection:before{content:"\e97c";} 124 .icon-connection:before{content:"\e97c";}
125 .icon-station:before{content:"\e981";} 125 .icon-station:before{content:"\e981";}
126 .icon-satellite-dish2:before{content:"\e98a";} 126 .icon-satellite-dish2:before{content:"\e98a";}
127 .icon-feed:before{content:"\e9b3";} 127 .icon-feed:before{content:"\e9b3";}
128 .icon-mic2:before{content:"\e9ce";} 128 .icon-mic2:before{content:"\e9ce";}
129 .icon-mic-off2:before{content:"\e9e0";} 129 .icon-mic-off2:before{content:"\e9e0";}
130 .icon-book:before{content:"\e9e1";} 130 .icon-book:before{content:"\e9e1";}
131 .icon-book2:before{content:"\e9e9";} 131 .icon-book2:before{content:"\e9e9";}
132 .icon-book-play:before{content:"\e9fd";} 132 .icon-book-play:before{content:"\e9fd";}
133 .icon-book3:before{content:"\ea01";} 133 .icon-book3:before{content:"\ea01";}
134 .icon-bookmark:before{content:"\ea02";} 134 .icon-bookmark:before{content:"\ea02";}
135 .icon-books:before{content:"\ea03";} 135 .icon-books:before{content:"\ea03";}
136 .icon-archive:before{content:"\ea04";} 136 .icon-archive:before{content:"\ea04";}
137 .icon-reading:before{content:"\ea05";} 137 .icon-reading:before{content:"\ea05";}
138 .icon-library2:before{content:"\ea06";} 138 .icon-library2:before{content:"\ea06";}
139 .icon-graduation2:before{content:"\ea07";} 139 .icon-graduation2:before{content:"\ea07";}
140 .icon-file-text:before{content:"\ea08";} 140 .icon-file-text:before{content:"\ea08";}
141 .icon-profile:before{content:"\ea09";} 141 .icon-profile:before{content:"\ea09";}
142 .icon-file-empty:before{content:"\ea0a";} 142 .icon-file-empty:before{content:"\ea0a";}
143 .icon-file-empty2:before{content:"\ea0b";} 143 .icon-file-empty2:before{content:"\ea0b";}
144 .icon-files-empty:before{content:"\ea0c";} 144 .icon-files-empty:before{content:"\ea0c";}
145 .icon-files-empty2:before{content:"\ea0d";} 145 .icon-files-empty2:before{content:"\ea0d";}
146 .icon-file-plus:before{content:"\ea0e";} 146 .icon-file-plus:before{content:"\ea0e";}
147 .icon-file-plus2:before{content:"\ea0f";} 147 .icon-file-plus2:before{content:"\ea0f";}
148 .icon-file-minus:before{content:"\ea10";} 148 .icon-file-minus:before{content:"\ea10";}
149 .icon-file-minus2:before{content:"\ea11";} 149 .icon-file-minus2:before{content:"\ea11";}
150 .icon-file-download:before{content:"\ea12";} 150 .icon-file-download:before{content:"\ea12";}
151 .icon-file-download2:before{content:"\ea13";} 151 .icon-file-download2:before{content:"\ea13";}
152 .icon-file-upload:before{content:"\ea14";} 152 .icon-file-upload:before{content:"\ea14";}
153 .icon-file-upload2:before{content:"\ea15";} 153 .icon-file-upload2:before{content:"\ea15";}
154 .icon-file-check:before{content:"\ea16";} 154 .icon-file-check:before{content:"\ea16";}
155 .icon-file-check2:before{content:"\ea17";} 155 .icon-file-check2:before{content:"\ea17";}
156 .icon-file-eye:before{content:"\ea18";} 156 .icon-file-eye:before{content:"\ea18";}
157 .icon-file-eye2:before{content:"\ea19";} 157 .icon-file-eye2:before{content:"\ea19";}
158 .icon-file-text2:before{content:"\ea1a";} 158 .icon-file-text2:before{content:"\ea1a";}
159 .icon-file-text3:before{content:"\ea1b";} 159 .icon-file-text3:before{content:"\ea1b";}
160 .icon-file-picture:before{content:"\ea1c";} 160 .icon-file-picture:before{content:"\ea1c";}
161 .icon-file-picture2:before{content:"\ea1d";} 161 .icon-file-picture2:before{content:"\ea1d";}
162 .icon-file-music:before{content:"\ea1e";} 162 .icon-file-music:before{content:"\ea1e";}
163 .icon-file-music2:before{content:"\ea1f";} 163 .icon-file-music2:before{content:"\ea1f";}
164 .icon-file-play:before{content:"\ea20";} 164 .icon-file-play:before{content:"\ea20";}
165 .icon-file-play2:before{content:"\ea21";} 165 .icon-file-play2:before{content:"\ea21";}
166 .icon-file-video:before{content:"\ea22";} 166 .icon-file-video:before{content:"\ea22";}
167 .icon-file-video2:before{content:"\ea23";} 167 .icon-file-video2:before{content:"\ea23";}
168 .icon-copy:before{content:"\ea24";} 168 .icon-copy:before{content:"\ea24";}
169 .icon-copy2:before{content:"\ea25";} 169 .icon-copy2:before{content:"\ea25";}
170 .icon-file-zip:before{content:"\ea26";} 170 .icon-file-zip:before{content:"\ea26";}
171 .icon-file-zip2:before{content:"\ea27";} 171 .icon-file-zip2:before{content:"\ea27";}
172 .icon-file-xml:before{content:"\ea28";} 172 .icon-file-xml:before{content:"\ea28";}
173 .icon-file-xml2:before{content:"\ea29";} 173 .icon-file-xml2:before{content:"\ea29";}
174 .icon-file-css:before{content:"\ea2a";} 174 .icon-file-css:before{content:"\ea2a";}
175 .icon-file-css2:before{content:"\ea2b";} 175 .icon-file-css2:before{content:"\ea2b";}
176 .icon-file-presentation:before{content:"\ea2c";} 176 .icon-file-presentation:before{content:"\ea2c";}
177 .icon-file-presentation2:before{content:"\ea2d";} 177 .icon-file-presentation2:before{content:"\ea2d";}
178 .icon-file-stats:before{content:"\ea2e";} 178 .icon-file-stats:before{content:"\ea2e";}
179 .icon-file-stats2:before{content:"\ea2f";} 179 .icon-file-stats2:before{content:"\ea2f";}
180 .icon-file-locked:before{content:"\ea30";} 180 .icon-file-locked:before{content:"\ea30";}
181 .icon-file-locked2:before{content:"\ea31";} 181 .icon-file-locked2:before{content:"\ea31";}
182 .icon-file-spreadsheet:before{content:"\ea32";} 182 .icon-file-spreadsheet:before{content:"\ea32";}
183 .icon-file-spreadsheet2:before{content:"\ea33";} 183 .icon-file-spreadsheet2:before{content:"\ea33";}
184 .icon-copy3:before{content:"\ea34";} 184 .icon-copy3:before{content:"\ea34";}
185 .icon-copy4:before{content:"\ea35";} 185 .icon-copy4:before{content:"\ea35";}
186 .icon-paste:before{content:"\ea36";} 186 .icon-paste:before{content:"\ea36";}
187 .icon-paste2:before{content:"\ea37";} 187 .icon-paste2:before{content:"\ea37";}
188 .icon-paste3:before{content:"\ea38";} 188 .icon-paste3:before{content:"\ea38";}
189 .icon-paste4:before{content:"\ea39";} 189 .icon-paste4:before{content:"\ea39";}
190 .icon-stack:before{content:"\ea3a";} 190 .icon-stack:before{content:"\ea3a";}
191 .icon-stack2:before{content:"\ea3b";} 191 .icon-stack2:before{content:"\ea3b";}
192 .icon-stack3:before{content:"\ea3c";} 192 .icon-stack3:before{content:"\ea3c";}
193 .icon-folder:before{content:"\ea3d";} 193 .icon-folder:before{content:"\ea3d";}
194 .icon-folder-search:before{content:"\ea3e";} 194 .icon-folder-search:before{content:"\ea3e";}
195 .icon-folder-download:before{content:"\ea3f";} 195 .icon-folder-download:before{content:"\ea3f";}
196 .icon-folder-upload:before{content:"\ea40";} 196 .icon-folder-upload:before{content:"\ea40";}
197 .icon-folder-plus:before{content:"\ea41";} 197 .icon-folder-plus:before{content:"\ea41";}
198 .icon-folder-plus2:before{content:"\ea42";} 198 .icon-folder-plus2:before{content:"\ea42";}
199 .icon-folder-minus:before{content:"\ea43";} 199 .icon-folder-minus:before{content:"\ea43";}
200 .icon-folder-minus2:before{content:"\ea44";} 200 .icon-folder-minus2:before{content:"\ea44";}
201 .icon-folder-check:before{content:"\ea45";} 201 .icon-folder-check:before{content:"\ea45";}
202 .icon-folder-heart:before{content:"\ea46";} 202 .icon-folder-heart:before{content:"\ea46";}
203 .icon-folder-remove:before{content:"\ea47";} 203 .icon-folder-remove:before{content:"\ea47";}
204 .icon-folder2:before{content:"\ea48";} 204 .icon-folder2:before{content:"\ea48";}
205 .icon-folder-open:before{content:"\ea49";} 205 .icon-folder-open:before{content:"\ea49";}
206 .icon-folder3:before{content:"\ea4a";} 206 .icon-folder3:before{content:"\ea4a";}
207 .icon-folder4:before{content:"\ea4b";} 207 .icon-folder4:before{content:"\ea4b";}
208 .icon-folder-plus3:before{content:"\ea4c";} 208 .icon-folder-plus3:before{content:"\ea4c";}
209 .icon-folder-minus3:before{content:"\ea4d";} 209 .icon-folder-minus3:before{content:"\ea4d";}
210 .icon-folder-plus4:before{content:"\ea4e";} 210 .icon-folder-plus4:before{content:"\ea4e";}
211 .icon-folder-minus4:before{content:"\ea4f";} 211 .icon-folder-minus4:before{content:"\ea4f";}
212 .icon-folder-download2:before{content:"\ea50";} 212 .icon-folder-download2:before{content:"\ea50";}
213 .icon-folder-upload2:before{content:"\ea51";} 213 .icon-folder-upload2:before{content:"\ea51";}
214 .icon-folder-download3:before{content:"\ea52";} 214 .icon-folder-download3:before{content:"\ea52";}
215 .icon-folder-upload3:before{content:"\ea53";} 215 .icon-folder-upload3:before{content:"\ea53";}
216 .icon-folder5:before{content:"\ea54";} 216 .icon-folder5:before{content:"\ea54";}
217 .icon-folder-open2:before{content:"\ea55";} 217 .icon-folder-open2:before{content:"\ea55";}
218 .icon-folder6:before{content:"\ea56";} 218 .icon-folder6:before{content:"\ea56";}
219 .icon-folder-open3:before{content:"\ea57";} 219 .icon-folder-open3:before{content:"\ea57";}
220 .icon-certificate:before{content:"\ea58";} 220 .icon-certificate:before{content:"\ea58";}
221 .icon-cc:before{content:"\ea59";} 221 .icon-cc:before{content:"\ea59";}
222 .icon-price-tag:before{content:"\ea5a";} 222 .icon-price-tag:before{content:"\ea5a";}
223 .icon-price-tag2:before{content:"\ea5b";} 223 .icon-price-tag2:before{content:"\ea5b";}
224 .icon-price-tags:before{content:"\ea5c";} 224 .icon-price-tags:before{content:"\ea5c";}
225 .icon-price-tag3:before{content:"\ea5d";} 225 .icon-price-tag3:before{content:"\ea5d";}
226 .icon-price-tags2:before{content:"\ea5e";} 226 .icon-price-tags2:before{content:"\ea5e";}
227 .icon-barcode2:before{content:"\ea5f";} 227 .icon-barcode2:before{content:"\ea5f";}
228 .icon-qrcode:before{content:"\ea60";} 228 .icon-qrcode:before{content:"\ea60";}
229 .icon-ticket:before{content:"\ea61";} 229 .icon-ticket:before{content:"\ea61";}
230 .icon-theater:before{content:"\ea62";} 230 .icon-theater:before{content:"\ea62";}
231 .icon-store:before{content:"\ea63";} 231 .icon-store:before{content:"\ea63";}
232 .icon-store2:before{content:"\ea64";} 232 .icon-store2:before{content:"\ea64";}
233 .icon-cart:before{content:"\ea65";} 233 .icon-cart:before{content:"\ea65";}
234 .icon-cart2:before{content:"\ea66";} 234 .icon-cart2:before{content:"\ea66";}
235 .icon-cart4:before{content:"\ea67";} 235 .icon-cart4:before{content:"\ea67";}
236 .icon-cart5:before{content:"\ea68";} 236 .icon-cart5:before{content:"\ea68";}
237 .icon-cart-add:before{content:"\ea69";} 237 .icon-cart-add:before{content:"\ea69";}
238 .icon-cart-add2:before{content:"\ea6a";} 238 .icon-cart-add2:before{content:"\ea6a";}
239 .icon-cart-remove:before{content:"\ea6b";} 239 .icon-cart-remove:before{content:"\ea6b";}
240 .icon-basket:before{content:"\ea6c";} 240 .icon-basket:before{content:"\ea6c";}
241 .icon-bag:before{content:"\ea6d";} 241 .icon-bag:before{content:"\ea6d";}
242 .icon-percent:before{content:"\ea6f";} 242 .icon-percent:before{content:"\ea6f";}
243 .icon-coins:before{content:"\ea70";} 243 .icon-coins:before{content:"\ea70";}
244 .icon-coin-dollar:before{content:"\ea71";} 244 .icon-coin-dollar:before{content:"\ea71";}
245 .icon-coin-euro:before{content:"\ea72";} 245 .icon-coin-euro:before{content:"\ea72";}
246 .icon-coin-pound:before{content:"\ea73";} 246 .icon-coin-pound:before{content:"\ea73";}
247 .icon-coin-yen:before{content:"\ea74";} 247 .icon-coin-yen:before{content:"\ea74";}
248 .icon-piggy-bank:before{content:"\ea75";} 248 .icon-piggy-bank:before{content:"\ea75";}
249 .icon-wallet:before{content:"\ea76";} 249 .icon-wallet:before{content:"\ea76";}
250 .icon-cash:before{content:"\ea77";} 250 .icon-cash:before{content:"\ea77";}
251 .icon-cash2:before{content:"\ea78";} 251 .icon-cash2:before{content:"\ea78";}
252 .icon-cash3:before{content:"\ea79";} 252 .icon-cash3:before{content:"\ea79";}
253 .icon-cash4:before{content:"\ea7a";} 253 .icon-cash4:before{content:"\ea7a";}
254 .icon-credit-card:before{content:"\ea6e";} 254 .icon-credit-card:before{content:"\ea6e";}
255 .icon-credit-card2:before{content:"\ea7b";} 255 .icon-credit-card2:before{content:"\ea7b";}
256 .icon-calculator4:before{content:"\ea7c";} 256 .icon-calculator4:before{content:"\ea7c";}
257 .icon-calculator2:before{content:"\ea7d";} 257 .icon-calculator2:before{content:"\ea7d";}
258 .icon-calculator3:before{content:"\ea7e";} 258 .icon-calculator3:before{content:"\ea7e";}
259 .icon-chip:before{content:"\ea7f";} 259 .icon-chip:before{content:"\ea7f";}
260 .icon-lifebuoy:before{content:"\ea80";} 260 .icon-lifebuoy:before{content:"\ea80";}
261 .icon-phone:before{content:"\ea81";} 261 .icon-phone:before{content:"\ea81";}
262 .icon-phone2:before{content:"\ea82";} 262 .icon-phone2:before{content:"\ea82";}
263 .icon-phone-slash:before{content:"\ea83";} 263 .icon-phone-slash:before{content:"\ea83";}
264 .icon-phone-wave:before{content:"\ea84";} 264 .icon-phone-wave:before{content:"\ea84";}
265 .icon-phone-plus:before{content:"\ea85";} 265 .icon-phone-plus:before{content:"\ea85";}
266 .icon-phone-minus:before{content:"\ea86";} 266 .icon-phone-minus:before{content:"\ea86";}
267 .icon-phone-plus2:before{content:"\ea87";} 267 .icon-phone-plus2:before{content:"\ea87";}
268 .icon-phone-minus2:before{content:"\ea88";} 268 .icon-phone-minus2:before{content:"\ea88";}
269 .icon-phone-incoming:before{content:"\ea89";} 269 .icon-phone-incoming:before{content:"\ea89";}
270 .icon-phone-outgoing:before{content:"\ea8a";} 270 .icon-phone-outgoing:before{content:"\ea8a";}
271 .icon-phone-hang-up:before{content:"\ea8e";} 271 .icon-phone-hang-up:before{content:"\ea8e";}
272 .icon-address-book:before{content:"\ea90";} 272 .icon-address-book:before{content:"\ea90";}
273 .icon-address-book2:before{content:"\ea91";} 273 .icon-address-book2:before{content:"\ea91";}
274 .icon-address-book3:before{content:"\ea92";} 274 .icon-address-book3:before{content:"\ea92";}
275 .icon-notebook:before{content:"\ea93";} 275 .icon-notebook:before{content:"\ea93";}
276 .icon-envelop:before{content:"\ea94";} 276 .icon-envelop:before{content:"\ea94";}
277 .icon-envelop2:before{content:"\ea95";} 277 .icon-envelop2:before{content:"\ea95";}
278 .icon-envelop3:before{content:"\ea96";} 278 .icon-envelop3:before{content:"\ea96";}
279 .icon-envelop4:before{content:"\ea97";} 279 .icon-envelop4:before{content:"\ea97";}
280 .icon-envelop5:before{content:"\ea98";} 280 .icon-envelop5:before{content:"\ea98";}
281 .icon-mailbox:before{content:"\ea99";} 281 .icon-mailbox:before{content:"\ea99";}
282 .icon-pushpin:before{content:"\ea9a";} 282 .icon-pushpin:before{content:"\ea9a";}
283 .icon-location3:before{content:"\ea9d";} 283 .icon-location3:before{content:"\ea9d";}
284 .icon-location4:before{content:"\ea9e";} 284 .icon-location4:before{content:"\ea9e";}
285 .icon-compass4:before{content:"\ea9f";} 285 .icon-compass4:before{content:"\ea9f";}
286 .icon-map:before{content:"\eaa0";} 286 .icon-map:before{content:"\eaa0";}
287 .icon-map4:before{content:"\eaa1";} 287 .icon-map4:before{content:"\eaa1";}
288 .icon-map5:before{content:"\eaa2";} 288 .icon-map5:before{content:"\eaa2";}
289 .icon-direction:before{content:"\eaa3";} 289 .icon-direction:before{content:"\eaa3";}
290 .icon-reset:before{content:"\eaa4";} 290 .icon-reset:before{content:"\eaa4";}
291 .icon-history:before{content:"\eaa5";} 291 .icon-history:before{content:"\eaa5";}
292 .icon-watch:before{content:"\eaa6";} 292 .icon-watch:before{content:"\eaa6";}
293 .icon-watch2:before{content:"\eaa7";} 293 .icon-watch2:before{content:"\eaa7";}
294 .icon-alarm:before{content:"\eaa8";} 294 .icon-alarm:before{content:"\eaa8";}
295 .icon-alarm-add:before{content:"\eaa9";} 295 .icon-alarm-add:before{content:"\eaa9";}
296 .icon-alarm-check:before{content:"\eaaa";} 296 .icon-alarm-check:before{content:"\eaaa";}
297 .icon-alarm-cancel:before{content:"\eaab";} 297 .icon-alarm-cancel:before{content:"\eaab";}
298 .icon-bell2:before{content:"\eaac";} 298 .icon-bell2:before{content:"\eaac";}
299 .icon-bell3:before{content:"\eaad";} 299 .icon-bell3:before{content:"\eaad";}
300 .icon-bell-plus:before{content:"\eaae";} 300 .icon-bell-plus:before{content:"\eaae";}
301 .icon-bell-minus:before{content:"\eaaf";} 301 .icon-bell-minus:before{content:"\eaaf";}
302 .icon-bell-check:before{content:"\eab0";} 302 .icon-bell-check:before{content:"\eab0";}
303 .icon-bell-cross:before{content:"\eab1";} 303 .icon-bell-cross:before{content:"\eab1";}
304 .icon-calendar:before{content:"\eab2";} 304 .icon-calendar:before{content:"\eab2";}
305 .icon-calendar2:before{content:"\eab3";} 305 .icon-calendar2:before{content:"\eab3";}
306 .icon-calendar3:before{content:"\eab4";} 306 .icon-calendar3:before{content:"\eab4";}
307 .icon-calendar52:before{content:"\eab6";} 307 .icon-calendar52:before{content:"\eab6";}
308 .icon-printer:before{content:"\eab7";} 308 .icon-printer:before{content:"\eab7";}
309 .icon-printer2:before{content:"\eab8";} 309 .icon-printer2:before{content:"\eab8";}
310 .icon-printer4:before{content:"\eab9";} 310 .icon-printer4:before{content:"\eab9";}
311 .icon-shredder:before{content:"\eaba";} 311 .icon-shredder:before{content:"\eaba";}
312 .icon-mouse:before{content:"\eabb";} 312 .icon-mouse:before{content:"\eabb";}
313 .icon-mouse-left:before{content:"\eabc";} 313 .icon-mouse-left:before{content:"\eabc";}
314 .icon-mouse-right:before{content:"\eabd";} 314 .icon-mouse-right:before{content:"\eabd";}
315 .icon-keyboard:before{content:"\eabe";} 315 .icon-keyboard:before{content:"\eabe";}
316 .icon-typewriter:before{content:"\eabf";} 316 .icon-typewriter:before{content:"\eabf";}
317 .icon-display:before{content:"\eac0";} 317 .icon-display:before{content:"\eac0";}
318 .icon-display4:before{content:"\eac1";} 318 .icon-display4:before{content:"\eac1";}
319 .icon-laptop:before{content:"\eac2";} 319 .icon-laptop:before{content:"\eac2";}
320 .icon-mobile:before{content:"\eac3";} 320 .icon-mobile:before{content:"\eac3";}
321 .icon-mobile2:before{content:"\eac4";} 321 .icon-mobile2:before{content:"\eac4";}
322 .icon-tablet:before{content:"\eac5";} 322 .icon-tablet:before{content:"\eac5";}
323 .icon-mobile3:before{content:"\eac6";} 323 .icon-mobile3:before{content:"\eac6";}
324 .icon-tv:before{content:"\eac7";} 324 .icon-tv:before{content:"\eac7";}
325 .icon-radio:before{content:"\eac8";} 325 .icon-radio:before{content:"\eac8";}
326 .icon-cabinet:before{content:"\eac9";} 326 .icon-cabinet:before{content:"\eac9";}
327 .icon-drawer:before{content:"\eaca";} 327 .icon-drawer:before{content:"\eaca";}
328 .icon-drawer2:before{content:"\eacb";} 328 .icon-drawer2:before{content:"\eacb";}
329 .icon-drawer-out:before{content:"\eacc";} 329 .icon-drawer-out:before{content:"\eacc";}
330 .icon-drawer-in:before{content:"\eacd";} 330 .icon-drawer-in:before{content:"\eacd";}
331 .icon-drawer3:before{content:"\eace";} 331 .icon-drawer3:before{content:"\eace";}
332 .icon-box:before{content:"\eacf";} 332 .icon-box:before{content:"\eacf";}
333 .icon-box-add:before{content:"\ead0";} 333 .icon-box-add:before{content:"\ead0";}
334 .icon-box-remove:before{content:"\ead1";} 334 .icon-box-remove:before{content:"\ead1";}
335 .icon-download:before{content:"\ead2";} 335 .icon-download:before{content:"\ead2";}
336 .icon-upload:before{content:"\ead3";} 336 .icon-upload:before{content:"\ead3";}
337 .icon-floppy-disk:before{content:"\ead4";} 337 .icon-floppy-disk:before{content:"\ead4";}
338 .icon-floppy-disks:before{content:"\ead5";} 338 .icon-floppy-disks:before{content:"\ead5";}
339 .icon-usb-stick:before{content:"\ead6";} 339 .icon-usb-stick:before{content:"\ead6";}
340 .icon-drive:before{content:"\ead7";} 340 .icon-drive:before{content:"\ead7";}
341 .icon-server:before{content:"\ead8";} 341 .icon-server:before{content:"\ead8";}
342 .icon-database:before{content:"\ead9";} 342 .icon-database:before{content:"\ead9";}
343 .icon-database2:before{content:"\eada";} 343 .icon-database2:before{content:"\eada";}
344 .icon-database4:before{content:"\eadb";} 344 .icon-database4:before{content:"\eadb";}
345 .icon-database-menu:before{content:"\eadc";} 345 .icon-database-menu:before{content:"\eadc";}
346 .icon-database-add:before{content:"\eadd";} 346 .icon-database-add:before{content:"\eadd";}
347 .icon-database-remove:before{content:"\eade";} 347 .icon-database-remove:before{content:"\eade";}
348 .icon-database-insert:before{content:"\eadf";} 348 .icon-database-insert:before{content:"\eadf";}
349 .icon-database-export:before{content:"\eae0";} 349 .icon-database-export:before{content:"\eae0";}
350 .icon-database-upload:before{content:"\eae1";} 350 .icon-database-upload:before{content:"\eae1";}
351 .icon-database-refresh:before{content:"\eae2";} 351 .icon-database-refresh:before{content:"\eae2";}
352 .icon-database-diff:before{content:"\eae3";} 352 .icon-database-diff:before{content:"\eae3";}
353 .icon-database-edit2:before{content:"\eae5";} 353 .icon-database-edit2:before{content:"\eae5";}
354 .icon-database-check:before{content:"\eae6";} 354 .icon-database-check:before{content:"\eae6";}
355 .icon-database-arrow:before{content:"\eae7";} 355 .icon-database-arrow:before{content:"\eae7";}
356 .icon-database-time2:before{content:"\eae9";} 356 .icon-database-time2:before{content:"\eae9";}
357 .icon-undo:before{content:"\eaea";} 357 .icon-undo:before{content:"\eaea";}
358 .icon-redo:before{content:"\eaeb";} 358 .icon-redo:before{content:"\eaeb";}
359 .icon-rotate-ccw:before{content:"\eaec";} 359 .icon-rotate-ccw:before{content:"\eaec";}
360 .icon-rotate-cw:before{content:"\eaed";} 360 .icon-rotate-cw:before{content:"\eaed";}
361 .icon-rotate-ccw2:before{content:"\eaee";} 361 .icon-rotate-ccw2:before{content:"\eaee";}
362 .icon-rotate-cw2:before{content:"\eaef";} 362 .icon-rotate-cw2:before{content:"\eaef";}
363 .icon-rotate-ccw3:before{content:"\eaf0";} 363 .icon-rotate-ccw3:before{content:"\eaf0";}
364 .icon-rotate-cw3:before{content:"\eaf1";} 364 .icon-rotate-cw3:before{content:"\eaf1";}
365 .icon-flip-vertical2:before{content:"\eaf2";} 365 .icon-flip-vertical2:before{content:"\eaf2";}
366 .icon-flip-horizontal2:before{content:"\eaf3";} 366 .icon-flip-horizontal2:before{content:"\eaf3";}
367 .icon-flip-vertical3:before{content:"\eaf4";} 367 .icon-flip-vertical3:before{content:"\eaf4";}
368 .icon-flip-vertical4:before{content:"\eaf5";} 368 .icon-flip-vertical4:before{content:"\eaf5";}
369 .icon-angle:before{content:"\eaf6";} 369 .icon-angle:before{content:"\eaf6";}
370 .icon-shear:before{content:"\eaf7";} 370 .icon-shear:before{content:"\eaf7";}
371 .icon-align-left:before{content:"\eafc";} 371 .icon-align-left:before{content:"\eafc";}
372 .icon-align-center-horizontal:before{content:"\eafd";} 372 .icon-align-center-horizontal:before{content:"\eafd";}
373 .icon-align-right:before{content:"\eafe";} 373 .icon-align-right:before{content:"\eafe";}
374 .icon-align-top:before{content:"\eaff";} 374 .icon-align-top:before{content:"\eaff";}
375 .icon-align-center-vertical:before{content:"\eb00";} 375 .icon-align-center-vertical:before{content:"\eb00";}
376 .icon-align-bottom:before{content:"\eb01";} 376 .icon-align-bottom:before{content:"\eb01";}
377 .icon-undo2:before{content:"\eb02";} 377 .icon-undo2:before{content:"\eb02";}
378 .icon-redo2:before{content:"\eb03";} 378 .icon-redo2:before{content:"\eb03";}
379 .icon-forward:before{content:"\eb04";} 379 .icon-forward:before{content:"\eb04";}
380 .icon-reply:before{content:"\eb05";} 380 .icon-reply:before{content:"\eb05";}
381 .icon-reply-all:before{content:"\eb06";} 381 .icon-reply-all:before{content:"\eb06";}
382 .icon-bubble:before{content:"\eb07";} 382 .icon-bubble:before{content:"\eb07";}
383 .icon-bubbles:before{content:"\eb08";} 383 .icon-bubbles:before{content:"\eb08";}
384 .icon-bubbles2:before{content:"\eb09";} 384 .icon-bubbles2:before{content:"\eb09";}
385 .icon-bubble2:before{content:"\eb0a";} 385 .icon-bubble2:before{content:"\eb0a";}
386 .icon-bubbles3:before{content:"\eb0b";} 386 .icon-bubbles3:before{content:"\eb0b";}
387 .icon-bubbles4:before{content:"\eb0c";} 387 .icon-bubbles4:before{content:"\eb0c";}
388 .icon-bubble-notification:before{content:"\eb0d";} 388 .icon-bubble-notification:before{content:"\eb0d";}
389 .icon-bubbles5:before{content:"\eb0e";} 389 .icon-bubbles5:before{content:"\eb0e";}
390 .icon-bubbles6:before{content:"\eb0f";} 390 .icon-bubbles6:before{content:"\eb0f";}
391 .icon-bubble6:before{content:"\eb10";} 391 .icon-bubble6:before{content:"\eb10";}
392 .icon-bubbles7:before{content:"\eb11";} 392 .icon-bubbles7:before{content:"\eb11";}
393 .icon-bubble7:before{content:"\eb12";} 393 .icon-bubble7:before{content:"\eb12";}
394 .icon-bubbles8:before{content:"\eb13";} 394 .icon-bubbles8:before{content:"\eb13";}
395 .icon-bubble8:before{content:"\eb14";} 395 .icon-bubble8:before{content:"\eb14";}
396 .icon-bubble-dots3:before{content:"\eb15";} 396 .icon-bubble-dots3:before{content:"\eb15";}
397 .icon-bubble-lines3:before{content:"\eb16";} 397 .icon-bubble-lines3:before{content:"\eb16";}
398 .icon-bubble9:before{content:"\eb17";} 398 .icon-bubble9:before{content:"\eb17";}
399 .icon-bubble-dots4:before{content:"\eb18";} 399 .icon-bubble-dots4:before{content:"\eb18";}
400 .icon-bubble-lines4:before{content:"\eb19";} 400 .icon-bubble-lines4:before{content:"\eb19";}
401 .icon-bubbles9:before{content:"\eb1a";} 401 .icon-bubbles9:before{content:"\eb1a";}
402 .icon-bubbles10:before{content:"\eb1b";} 402 .icon-bubbles10:before{content:"\eb1b";}
403 .icon-user:before{content:"\eb33";} 403 .icon-user:before{content:"\eb33";}
404 .icon-users:before{content:"\eb34";} 404 .icon-users:before{content:"\eb34";}
405 .icon-user-plus:before{content:"\eb35";} 405 .icon-user-plus:before{content:"\eb35";}
406 .icon-user-minus:before{content:"\eb36";} 406 .icon-user-minus:before{content:"\eb36";}
407 .icon-user-cancel:before{content:"\eb37";} 407 .icon-user-cancel:before{content:"\eb37";}
408 .icon-user-block:before{content:"\eb38";} 408 .icon-user-block:before{content:"\eb38";}
409 .icon-user-lock:before{content:"\eb39";} 409 .icon-user-lock:before{content:"\eb39";}
410 .icon-user-check:before{content:"\eb3a";} 410 .icon-user-check:before{content:"\eb3a";}
411 .icon-users2:before{content:"\eb3b";} 411 .icon-users2:before{content:"\eb3b";}
412 .icon-users4:before{content:"\eb44";} 412 .icon-users4:before{content:"\eb44";}
413 .icon-user-tie:before{content:"\eb45";} 413 .icon-user-tie:before{content:"\eb45";}
414 .icon-collaboration:before{content:"\eb46";} 414 .icon-collaboration:before{content:"\eb46";}
415 .icon-vcard:before{content:"\eb47";} 415 .icon-vcard:before{content:"\eb47";}
416 .icon-hat:before{content:"\ebb8";} 416 .icon-hat:before{content:"\ebb8";}
417 .icon-bowtie:before{content:"\ebb9";} 417 .icon-bowtie:before{content:"\ebb9";}
418 .icon-quotes-left:before{content:"\eb49";} 418 .icon-quotes-left:before{content:"\eb49";}
419 .icon-quotes-right:before{content:"\eb4a";} 419 .icon-quotes-right:before{content:"\eb4a";}
420 .icon-quotes-left2:before{content:"\eb4b";} 420 .icon-quotes-left2:before{content:"\eb4b";}
421 .icon-quotes-right2:before{content:"\eb4c";} 421 .icon-quotes-right2:before{content:"\eb4c";}
422 .icon-hour-glass:before{content:"\eb4d";} 422 .icon-hour-glass:before{content:"\eb4d";}
423 .icon-hour-glass2:before{content:"\eb4e";} 423 .icon-hour-glass2:before{content:"\eb4e";}
424 .icon-hour-glass3:before{content:"\eb4f";} 424 .icon-hour-glass3:before{content:"\eb4f";}
425 .icon-spinner:before{content:"\eb50";} 425 .icon-spinner:before{content:"\eb50";}
426 .icon-spinner2:before{content:"\eb51";} 426 .icon-spinner2:before{content:"\eb51";}
427 .icon-spinner3:before{content:"\eb52";} 427 .icon-spinner3:before{content:"\eb52";}
428 .icon-spinner4:before{content:"\eb53";} 428 .icon-spinner4:before{content:"\eb53";}
429 .icon-spinner6:before{content:"\eb54";} 429 .icon-spinner6:before{content:"\eb54";}
430 .icon-spinner9:before{content:"\eb55";} 430 .icon-spinner9:before{content:"\eb55";}
431 .icon-spinner10:before{content:"\eb56";} 431 .icon-spinner10:before{content:"\eb56";}
432 .icon-spinner11:before{content:"\eb57";} 432 .icon-spinner11:before{content:"\eb57";}
433 .icon-microscope:before{content:"\eb58";} 433 .icon-microscope:before{content:"\eb58";}
434 .icon-enlarge:before{content:"\eb59";} 434 .icon-enlarge:before{content:"\eb59";}
435 .icon-shrink:before{content:"\eb5a";} 435 .icon-shrink:before{content:"\eb5a";}
436 .icon-enlarge3:before{content:"\eb5b";} 436 .icon-enlarge3:before{content:"\eb5b";}
437 .icon-shrink3:before{content:"\eb5c";} 437 .icon-shrink3:before{content:"\eb5c";}
438 .icon-enlarge5:before{content:"\eb5d";} 438 .icon-enlarge5:before{content:"\eb5d";}
439 .icon-shrink5:before{content:"\eb5e";} 439 .icon-shrink5:before{content:"\eb5e";}
440 .icon-enlarge6:before{content:"\eb5f";} 440 .icon-enlarge6:before{content:"\eb5f";}
441 .icon-shrink6:before{content:"\eb60";} 441 .icon-shrink6:before{content:"\eb60";}
442 .icon-enlarge7:before{content:"\eb61";} 442 .icon-enlarge7:before{content:"\eb61";}
443 .icon-shrink7:before{content:"\eb62";} 443 .icon-shrink7:before{content:"\eb62";}
444 .icon-key:before{content:"\eb63";} 444 .icon-key:before{content:"\eb63";}
445 .icon-lock:before{content:"\eb65";} 445 .icon-lock:before{content:"\eb65";}
446 .icon-lock2:before{content:"\eb66";} 446 .icon-lock2:before{content:"\eb66";}
447 .icon-lock4:before{content:"\eb67";} 447 .icon-lock4:before{content:"\eb67";}
448 .icon-unlocked:before{content:"\eb68";} 448 .icon-unlocked:before{content:"\eb68";}
449 .icon-lock5:before{content:"\eb69";} 449 .icon-lock5:before{content:"\eb69";}
450 .icon-unlocked2:before{content:"\eb6a";} 450 .icon-unlocked2:before{content:"\eb6a";}
451 .icon-safe:before{content:"\eb6b";} 451 .icon-safe:before{content:"\eb6b";}
452 .icon-wrench:before{content:"\eb6c";} 452 .icon-wrench:before{content:"\eb6c";}
453 .icon-wrench2:before{content:"\eb6d";} 453 .icon-wrench2:before{content:"\eb6d";}
454 .icon-wrench3:before{content:"\eb6e";} 454 .icon-wrench3:before{content:"\eb6e";}
455 .icon-equalizer:before{content:"\eb6f";} 455 .icon-equalizer:before{content:"\eb6f";}
456 .icon-equalizer2:before{content:"\eb70";} 456 .icon-equalizer2:before{content:"\eb70";}
457 .icon-equalizer3:before{content:"\eb71";} 457 .icon-equalizer3:before{content:"\eb71";}
458 .icon-equalizer4:before{content:"\eb72";} 458 .icon-equalizer4:before{content:"\eb72";}
459 .icon-cog:before{content:"\eb73";} 459 .icon-cog:before{content:"\eb73";}
460 .icon-cogs:before{content:"\eb74";} 460 .icon-cogs:before{content:"\eb74";}
461 .icon-cog2:before{content:"\eb75";} 461 .icon-cog2:before{content:"\eb75";}
462 .icon-cog3:before{content:"\eb76";} 462 .icon-cog3:before{content:"\eb76";}
463 .icon-cog4:before{content:"\eb77";} 463 .icon-cog4:before{content:"\eb77";}
464 .icon-cog52:before{content:"\eb78";} 464 .icon-cog52:before{content:"\eb78";}
465 .icon-cog6:before{content:"\eb79";} 465 .icon-cog6:before{content:"\eb79";}
466 .icon-cog7:before{content:"\eb7a";} 466 .icon-cog7:before{content:"\eb7a";}
467 .icon-hammer:before{content:"\eb7c";} 467 .icon-hammer:before{content:"\eb7c";}
468 .icon-hammer-wrench:before{content:"\eb7d";} 468 .icon-hammer-wrench:before{content:"\eb7d";}
469 .icon-magic-wand:before{content:"\eb7e";} 469 .icon-magic-wand:before{content:"\eb7e";}
470 .icon-magic-wand2:before{content:"\eb7f";} 470 .icon-magic-wand2:before{content:"\eb7f";}
471 .icon-pulse2:before{content:"\eb80";} 471 .icon-pulse2:before{content:"\eb80";}
472 .icon-aid-kit:before{content:"\eb81";} 472 .icon-aid-kit:before{content:"\eb81";}
473 .icon-bug2:before{content:"\eb83";} 473 .icon-bug2:before{content:"\eb83";}
474 .icon-construction:before{content:"\eb85";} 474 .icon-construction:before{content:"\eb85";}
475 .icon-traffic-cone:before{content:"\eb86";} 475 .icon-traffic-cone:before{content:"\eb86";}
476 .icon-traffic-lights:before{content:"\eb87";} 476 .icon-traffic-lights:before{content:"\eb87";}
477 .icon-pie-chart:before{content:"\eb88";} 477 .icon-pie-chart:before{content:"\eb88";}
478 .icon-pie-chart2:before{content:"\eb89";} 478 .icon-pie-chart2:before{content:"\eb89";}
479 .icon-pie-chart3:before{content:"\eb8a";} 479 .icon-pie-chart3:before{content:"\eb8a";}
480 .icon-pie-chart4:before{content:"\eb8b";} 480 .icon-pie-chart4:before{content:"\eb8b";}
481 .icon-pie-chart5:before{content:"\eb8c";} 481 .icon-pie-chart5:before{content:"\eb8c";}
482 .icon-pie-chart6:before{content:"\eb8d";} 482 .icon-pie-chart6:before{content:"\eb8d";}
483 .icon-pie-chart7:before{content:"\eb8e";} 483 .icon-pie-chart7:before{content:"\eb8e";}
484 .icon-stats-dots:before{content:"\eb8f";} 484 .icon-stats-dots:before{content:"\eb8f";}
485 .icon-stats-bars:before{content:"\eb90";} 485 .icon-stats-bars:before{content:"\eb90";}
486 .icon-pie-chart8:before{content:"\eb91";} 486 .icon-pie-chart8:before{content:"\eb91";}
487 .icon-stats-bars2:before{content:"\eb92";} 487 .icon-stats-bars2:before{content:"\eb92";}
488 .icon-stats-bars3:before{content:"\eb93";} 488 .icon-stats-bars3:before{content:"\eb93";}
489 .icon-stats-bars4:before{content:"\eb94";} 489 .icon-stats-bars4:before{content:"\eb94";}
490 .icon-chart:before{content:"\eb97";} 490 .icon-chart:before{content:"\eb97";}
491 .icon-stats-growth:before{content:"\eb98";} 491 .icon-stats-growth:before{content:"\eb98";}
492 .icon-stats-decline:before{content:"\eb99";} 492 .icon-stats-decline:before{content:"\eb99";}
493 .icon-stats-growth2:before{content:"\eb9a";} 493 .icon-stats-growth2:before{content:"\eb9a";}
494 .icon-stats-decline2:before{content:"\eb9b";} 494 .icon-stats-decline2:before{content:"\eb9b";}
495 .icon-stairs-up:before{content:"\eb9c";} 495 .icon-stairs-up:before{content:"\eb9c";}
496 .icon-stairs-down:before{content:"\eb9d";} 496 .icon-stairs-down:before{content:"\eb9d";}
497 .icon-stairs:before{content:"\eb9e";} 497 .icon-stairs:before{content:"\eb9e";}
498 .icon-ladder:before{content:"\eba0";} 498 .icon-ladder:before{content:"\eba0";}
499 .icon-rating:before{content:"\eba1";} 499 .icon-rating:before{content:"\eba1";}
500 .icon-rating2:before{content:"\eba2";} 500 .icon-rating2:before{content:"\eba2";}
501 .icon-rating3:before{content:"\eba3";} 501 .icon-rating3:before{content:"\eba3";}
502 .icon-podium:before{content:"\eba5";} 502 .icon-podium:before{content:"\eba5";}
503 .icon-stars:before{content:"\eba6";} 503 .icon-stars:before{content:"\eba6";}
504 .icon-medal-star:before{content:"\eba7";} 504 .icon-medal-star:before{content:"\eba7";}
505 .icon-medal:before{content:"\eba8";} 505 .icon-medal:before{content:"\eba8";}
506 .icon-medal2:before{content:"\eba9";} 506 .icon-medal2:before{content:"\eba9";}
507 .icon-medal-first:before{content:"\ebaa";} 507 .icon-medal-first:before{content:"\ebaa";}
508 .icon-medal-second:before{content:"\ebab";} 508 .icon-medal-second:before{content:"\ebab";}
509 .icon-medal-third:before{content:"\ebac";} 509 .icon-medal-third:before{content:"\ebac";}
510 .icon-crown:before{content:"\ebad";} 510 .icon-crown:before{content:"\ebad";}
511 .icon-trophy2:before{content:"\ebaf";} 511 .icon-trophy2:before{content:"\ebaf";}
512 .icon-trophy3:before{content:"\ebb0";} 512 .icon-trophy3:before{content:"\ebb0";}
513 .icon-diamond:before{content:"\ebb1";} 513 .icon-diamond:before{content:"\ebb1";}
514 .icon-trophy4:before{content:"\ebb2";} 514 .icon-trophy4:before{content:"\ebb2";}
515 .icon-gift:before{content:"\ebb3";} 515 .icon-gift:before{content:"\ebb3";}
516 .icon-pipe:before{content:"\ebb6";} 516 .icon-pipe:before{content:"\ebb6";}
517 .icon-mustache:before{content:"\ebb7";} 517 .icon-mustache:before{content:"\ebb7";}
518 .icon-cup2:before{content:"\ebc6";} 518 .icon-cup2:before{content:"\ebc6";}
519 .icon-coffee:before{content:"\ebc8";} 519 .icon-coffee:before{content:"\ebc8";}
520 .icon-paw:before{content:"\ebd5";} 520 .icon-paw:before{content:"\ebd5";}
521 .icon-footprint:before{content:"\ebd6";} 521 .icon-footprint:before{content:"\ebd6";}
522 .icon-rocket:before{content:"\ebda";} 522 .icon-rocket:before{content:"\ebda";}
523 .icon-meter2:before{content:"\ebdc";} 523 .icon-meter2:before{content:"\ebdc";}
524 .icon-meter-slow:before{content:"\ebdd";} 524 .icon-meter-slow:before{content:"\ebdd";}
525 .icon-meter-fast:before{content:"\ebdf";} 525 .icon-meter-fast:before{content:"\ebdf";}
526 .icon-hammer2:before{content:"\ebe1";} 526 .icon-hammer2:before{content:"\ebe1";}
527 .icon-balance:before{content:"\ebe2";} 527 .icon-balance:before{content:"\ebe2";}
528 .icon-fire:before{content:"\ebe5";} 528 .icon-fire:before{content:"\ebe5";}
529 .icon-fire2:before{content:"\ebe6";} 529 .icon-fire2:before{content:"\ebe6";}
530 .icon-lab:before{content:"\ebe7";} 530 .icon-lab:before{content:"\ebe7";}
531 .icon-atom:before{content:"\ebe8";} 531 .icon-atom:before{content:"\ebe8";}
532 .icon-atom2:before{content:"\ebe9";} 532 .icon-atom2:before{content:"\ebe9";}
533 .icon-bin:before{content:"\ebfa";} 533 .icon-bin:before{content:"\ebfa";}
534 .icon-bin2:before{content:"\ebfb";} 534 .icon-bin2:before{content:"\ebfb";}
535 .icon-briefcase:before{content:"\ebff";} 535 .icon-briefcase:before{content:"\ebff";}
536 .icon-briefcase3:before{content:"\ec01";} 536 .icon-briefcase3:before{content:"\ec01";}
537 .icon-airplane2:before{content:"\ec03";} 537 .icon-airplane2:before{content:"\ec03";}
538 .icon-airplane3:before{content:"\ec04";} 538 .icon-airplane3:before{content:"\ec04";}
539 .icon-airplane4:before{content:"\ec05";} 539 .icon-airplane4:before{content:"\ec05";}
540 .icon-paperplane:before{content:"\ec06";} 540 .icon-paperplane:before{content:"\ec06";}
541 .icon-car:before{content:"\ec07";} 541 .icon-car:before{content:"\ec07";}
542 .icon-steering-wheel:before{content:"\ec08";} 542 .icon-steering-wheel:before{content:"\ec08";}
543 .icon-car2:before{content:"\ec09";} 543 .icon-car2:before{content:"\ec09";}
544 .icon-gas:before{content:"\ec0a";} 544 .icon-gas:before{content:"\ec0a";}
545 .icon-bus:before{content:"\ec0b";} 545 .icon-bus:before{content:"\ec0b";}
546 .icon-truck:before{content:"\ec0c";} 546 .icon-truck:before{content:"\ec0c";}
547 .icon-bike:before{content:"\ec0d";} 547 .icon-bike:before{content:"\ec0d";}
548 .icon-road:before{content:"\ec0e";} 548 .icon-road:before{content:"\ec0e";}
549 .icon-train:before{content:"\ec0f";} 549 .icon-train:before{content:"\ec0f";}
550 .icon-train2:before{content:"\ec10";} 550 .icon-train2:before{content:"\ec10";}
551 .icon-ship:before{content:"\ec11";} 551 .icon-ship:before{content:"\ec11";}
552 .icon-boat:before{content:"\ec12";} 552 .icon-boat:before{content:"\ec12";}
553 .icon-chopper:before{content:"\ec13";} 553 .icon-chopper:before{content:"\ec13";}
554 .icon-cube:before{content:"\ec15";} 554 .icon-cube:before{content:"\ec15";}
555 .icon-cube2:before{content:"\ec16";} 555 .icon-cube2:before{content:"\ec16";}
556 .icon-cube3:before{content:"\ec17";} 556 .icon-cube3:before{content:"\ec17";}
557 .icon-cube4:before{content:"\ec18";} 557 .icon-cube4:before{content:"\ec18";}
558 .icon-pyramid:before{content:"\ec19";} 558 .icon-pyramid:before{content:"\ec19";}
559 .icon-pyramid2:before{content:"\ec1a";} 559 .icon-pyramid2:before{content:"\ec1a";}
560 .icon-package:before{content:"\ec1b";} 560 .icon-package:before{content:"\ec1b";}
561 .icon-puzzle:before{content:"\ec1c";} 561 .icon-puzzle:before{content:"\ec1c";}
562 .icon-puzzle2:before{content:"\ec1d";} 562 .icon-puzzle2:before{content:"\ec1d";}
563 .icon-puzzle3:before{content:"\ec1e";} 563 .icon-puzzle3:before{content:"\ec1e";}
564 .icon-puzzle4:before{content:"\ec1f";} 564 .icon-puzzle4:before{content:"\ec1f";}
565 .icon-glasses-3d2:before{content:"\ec21";} 565 .icon-glasses-3d2:before{content:"\ec21";}
566 .icon-brain:before{content:"\ec24";} 566 .icon-brain:before{content:"\ec24";}
567 .icon-accessibility:before{content:"\ec25";} 567 .icon-accessibility:before{content:"\ec25";}
568 .icon-accessibility2:before{content:"\ec26";} 568 .icon-accessibility2:before{content:"\ec26";}
569 .icon-strategy:before{content:"\ec27";} 569 .icon-strategy:before{content:"\ec27";}
570 .icon-target:before{content:"\ec28";} 570 .icon-target:before{content:"\ec28";}
571 .icon-target2:before{content:"\ec29";} 571 .icon-target2:before{content:"\ec29";}
572 .icon-shield-check:before{content:"\ec2f";} 572 .icon-shield-check:before{content:"\ec2f";}
573 .icon-shield-notice:before{content:"\ec30";} 573 .icon-shield-notice:before{content:"\ec30";}
574 .icon-shield2:before{content:"\ec31";} 574 .icon-shield2:before{content:"\ec31";}
575 .icon-racing:before{content:"\ec40";} 575 .icon-racing:before{content:"\ec40";}
576 .icon-finish:before{content:"\ec41";} 576 .icon-finish:before{content:"\ec41";}
577 .icon-power2:before{content:"\ec46";} 577 .icon-power2:before{content:"\ec46";}
578 .icon-power3:before{content:"\ec47";} 578 .icon-power3:before{content:"\ec47";}
579 .icon-switch:before{content:"\ec48";} 579 .icon-switch:before{content:"\ec48";}
580 .icon-switch22:before{content:"\ec49";} 580 .icon-switch22:before{content:"\ec49";}
581 .icon-power-cord:before{content:"\ec4a";} 581 .icon-power-cord:before{content:"\ec4a";}
582 .icon-clipboard:before{content:"\ec4d";} 582 .icon-clipboard:before{content:"\ec4d";}
583 .icon-clipboard2:before{content:"\ec4e";} 583 .icon-clipboard2:before{content:"\ec4e";}
584 .icon-clipboard3:before{content:"\ec4f";} 584 .icon-clipboard3:before{content:"\ec4f";}
585 .icon-clipboard4:before{content:"\ec50";} 585 .icon-clipboard4:before{content:"\ec50";}
586 .icon-clipboard5:before{content:"\ec51";} 586 .icon-clipboard5:before{content:"\ec51";}
587 .icon-clipboard6:before{content:"\ec52";} 587 .icon-clipboard6:before{content:"\ec52";}
588 .icon-playlist:before{content:"\ec53";} 588 .icon-playlist:before{content:"\ec53";}
589 .icon-playlist-add:before{content:"\ec54";} 589 .icon-playlist-add:before{content:"\ec54";}
590 .icon-list-numbered:before{content:"\ec55";} 590 .icon-list-numbered:before{content:"\ec55";}
591 .icon-list:before{content:"\ec56";} 591 .icon-list:before{content:"\ec56";}
592 .icon-list2:before{content:"\ec57";} 592 .icon-list2:before{content:"\ec57";}
593 .icon-more:before{content:"\ec58";} 593 .icon-more:before{content:"\ec58";}
594 .icon-more2:before{content:"\ec59";} 594 .icon-more2:before{content:"\ec59";}
595 .icon-grid:before{content:"\ec5a";} 595 .icon-grid:before{content:"\ec5a";}
596 .icon-grid2:before{content:"\ec5b";} 596 .icon-grid2:before{content:"\ec5b";}
597 .icon-grid3:before{content:"\ec5c";} 597 .icon-grid3:before{content:"\ec5c";}
598 .icon-grid4:before{content:"\ec5d";} 598 .icon-grid4:before{content:"\ec5d";}
599 .icon-grid52:before{content:"\ec5e";} 599 .icon-grid52:before{content:"\ec5e";}
600 .icon-grid6:before{content:"\ec5f";} 600 .icon-grid6:before{content:"\ec5f";}
601 .icon-grid7:before{content:"\ec60";} 601 .icon-grid7:before{content:"\ec60";}
602 .icon-tree5:before{content:"\ec61";} 602 .icon-tree5:before{content:"\ec61";}
603 .icon-tree6:before{content:"\ec62";} 603 .icon-tree6:before{content:"\ec62";}
604 .icon-tree7:before{content:"\ec63";} 604 .icon-tree7:before{content:"\ec63";}
605 .icon-lan:before{content:"\ec64";} 605 .icon-lan:before{content:"\ec64";}
606 .icon-lan2:before{content:"\ec65";} 606 .icon-lan2:before{content:"\ec65";}
607 .icon-lan3:before{content:"\ec66";} 607 .icon-lan3:before{content:"\ec66";}
608 .icon-menu:before{content:"\ec67";} 608 .icon-menu:before{content:"\ec67";}
609 .icon-circle-small:before{content:"\ec68";} 609 .icon-circle-small:before{content:"\ec68";}
610 .icon-menu2:before{content:"\ec69";} 610 .icon-menu2:before{content:"\ec69";}
611 .icon-menu3:before{content:"\ec6a";} 611 .icon-menu3:before{content:"\ec6a";}
612 .icon-menu4:before{content:"\ec6b";} 612 .icon-menu4:before{content:"\ec6b";}
613 .icon-menu5:before{content:"\ec6c";} 613 .icon-menu5:before{content:"\ec6c";}
614 .icon-menu62:before{content:"\ec6d";} 614 .icon-menu62:before{content:"\ec6d";}
615 .icon-menu7:before{content:"\ec6e";} 615 .icon-menu7:before{content:"\ec6e";}
616 .icon-menu8:before{content:"\ec6f";} 616 .icon-menu8:before{content:"\ec6f";}
617 .icon-menu9:before{content:"\ec70";} 617 .icon-menu9:before{content:"\ec70";}
618 .icon-menu10:before{content:"\ec71";} 618 .icon-menu10:before{content:"\ec71";}
619 .icon-cloud:before{content:"\ec72";} 619 .icon-cloud:before{content:"\ec72";}
620 .icon-cloud-download:before{content:"\ec73";} 620 .icon-cloud-download:before{content:"\ec73";}
621 .icon-cloud-upload:before{content:"\ec74";} 621 .icon-cloud-upload:before{content:"\ec74";}
622 .icon-cloud-check:before{content:"\ec75";} 622 .icon-cloud-check:before{content:"\ec75";}
623 .icon-cloud2:before{content:"\ec76";} 623 .icon-cloud2:before{content:"\ec76";}
624 .icon-cloud-download2:before{content:"\ec77";} 624 .icon-cloud-download2:before{content:"\ec77";}
625 .icon-cloud-upload2:before{content:"\ec78";} 625 .icon-cloud-upload2:before{content:"\ec78";}
626 .icon-cloud-check2:before{content:"\ec79";} 626 .icon-cloud-check2:before{content:"\ec79";}
627 .icon-import:before{content:"\ec7e";} 627 .icon-import:before{content:"\ec7e";}
628 .icon-download4:before{content:"\ec80";} 628 .icon-download4:before{content:"\ec80";}
629 .icon-upload4:before{content:"\ec81";} 629 .icon-upload4:before{content:"\ec81";}
630 .icon-download7:before{content:"\ec86";} 630 .icon-download7:before{content:"\ec86";}
631 .icon-upload7:before{content:"\ec87";} 631 .icon-upload7:before{content:"\ec87";}
632 .icon-download10:before{content:"\ec8c";} 632 .icon-download10:before{content:"\ec8c";}
633 .icon-upload10:before{content:"\ec8d";} 633 .icon-upload10:before{content:"\ec8d";}
634 .icon-sphere:before{content:"\ec8e";} 634 .icon-sphere:before{content:"\ec8e";}
635 .icon-sphere3:before{content:"\ec90";} 635 .icon-sphere3:before{content:"\ec90";}
636 .icon-earth:before{content:"\ec93";} 636 .icon-earth:before{content:"\ec93";}
637 .icon-link:before{content:"\ec96";} 637 .icon-link:before{content:"\ec96";}
638 .icon-unlink:before{content:"\ec97";} 638 .icon-unlink:before{content:"\ec97";}
639 .icon-link2:before{content:"\ec98";} 639 .icon-link2:before{content:"\ec98";}
640 .icon-unlink2:before{content:"\ec99";} 640 .icon-unlink2:before{content:"\ec99";}
641 .icon-anchor:before{content:"\eca0";} 641 .icon-anchor:before{content:"\eca0";}
642 .icon-flag3:before{content:"\eca3";} 642 .icon-flag3:before{content:"\eca3";}
643 .icon-flag4:before{content:"\eca4";} 643 .icon-flag4:before{content:"\eca4";}
644 .icon-flag7:before{content:"\eca7";} 644 .icon-flag7:before{content:"\eca7";}
645 .icon-flag8:before{content:"\eca8";} 645 .icon-flag8:before{content:"\eca8";}
646 .icon-attachment:before{content:"\eca9";} 646 .icon-attachment:before{content:"\eca9";}
647 .icon-attachment2:before{content:"\ecaa";} 647 .icon-attachment2:before{content:"\ecaa";}
648 .icon-eye:before{content:"\ecab";} 648 .icon-eye:before{content:"\ecab";}
649 .icon-eye-plus:before{content:"\ecac";} 649 .icon-eye-plus:before{content:"\ecac";}
650 .icon-eye-minus:before{content:"\ecad";} 650 .icon-eye-minus:before{content:"\ecad";}
651 .icon-eye-blocked:before{content:"\ecae";} 651 .icon-eye-blocked:before{content:"\ecae";}
652 .icon-eye2:before{content:"\ecaf";} 652 .icon-eye2:before{content:"\ecaf";}
653 .icon-eye-blocked2:before{content:"\ecb0";} 653 .icon-eye-blocked2:before{content:"\ecb0";}
654 .icon-eye4:before{content:"\ecb3";} 654 .icon-eye4:before{content:"\ecb3";}
655 .icon-bookmark2:before{content:"\ecb4";} 655 .icon-bookmark2:before{content:"\ecb4";}
656 .icon-bookmark3:before{content:"\ecb5";} 656 .icon-bookmark3:before{content:"\ecb5";}
657 .icon-bookmarks:before{content:"\ecb6";} 657 .icon-bookmarks:before{content:"\ecb6";}
658 .icon-bookmark4:before{content:"\ecb7";} 658 .icon-bookmark4:before{content:"\ecb7";}
659 .icon-spotlight2:before{content:"\ecb8";} 659 .icon-spotlight2:before{content:"\ecb8";}
660 .icon-starburst:before{content:"\ecb9";} 660 .icon-starburst:before{content:"\ecb9";}
661 .icon-snowflake:before{content:"\ecba";} 661 .icon-snowflake:before{content:"\ecba";}
662 .icon-weather-windy:before{content:"\ecd0";} 662 .icon-weather-windy:before{content:"\ecd0";}
663 .icon-fan:before{content:"\ecd1";} 663 .icon-fan:before{content:"\ecd1";}
664 .icon-umbrella:before{content:"\ecd2";} 664 .icon-umbrella:before{content:"\ecd2";}
665 .icon-sun3:before{content:"\ecd3";} 665 .icon-sun3:before{content:"\ecd3";}
666 .icon-contrast:before{content:"\ecd4";} 666 .icon-contrast:before{content:"\ecd4";}
667 .icon-bed2:before{content:"\ecda";} 667 .icon-bed2:before{content:"\ecda";}
668 .icon-furniture:before{content:"\ecdb";} 668 .icon-furniture:before{content:"\ecdb";}
669 .icon-chair:before{content:"\ecdc";} 669 .icon-chair:before{content:"\ecdc";}
670 .icon-star-empty3:before{content:"\ece0";} 670 .icon-star-empty3:before{content:"\ece0";}
671 .icon-star-half:before{content:"\ece1";} 671 .icon-star-half:before{content:"\ece1";}
672 .icon-star-full2:before{content:"\ece2";} 672 .icon-star-full2:before{content:"\ece2";}
673 .icon-heart5:before{content:"\ece9";} 673 .icon-heart5:before{content:"\ece9";}
674 .icon-heart6:before{content:"\ecea";} 674 .icon-heart6:before{content:"\ecea";}
675 .icon-heart-broken2:before{content:"\eceb";} 675 .icon-heart-broken2:before{content:"\eceb";}
676 .icon-thumbs-up2:before{content:"\ecf2";} 676 .icon-thumbs-up2:before{content:"\ecf2";}
677 .icon-thumbs-down2:before{content:"\ecf4";} 677 .icon-thumbs-down2:before{content:"\ecf4";}
678 .icon-thumbs-up3:before{content:"\ecf5";} 678 .icon-thumbs-up3:before{content:"\ecf5";}
679 .icon-thumbs-down3:before{content:"\ecf6";} 679 .icon-thumbs-down3:before{content:"\ecf6";}
680 .icon-height:before{content:"\ecf7";} 680 .icon-height:before{content:"\ecf7";}
681 .icon-man:before{content:"\ecf8";} 681 .icon-man:before{content:"\ecf8";}
682 .icon-woman:before{content:"\ecf9";} 682 .icon-woman:before{content:"\ecf9";}
683 .icon-man-woman:before{content:"\ecfa";} 683 .icon-man-woman:before{content:"\ecfa";}
684 .icon-yin-yang:before{content:"\ecfe";} 684 .icon-yin-yang:before{content:"\ecfe";}
685 .icon-cursor:before{content:"\ed23";} 685 .icon-cursor:before{content:"\ed23";}
686 .icon-cursor2:before{content:"\ed24";} 686 .icon-cursor2:before{content:"\ed24";}
687 .icon-lasso2:before{content:"\ed26";} 687 .icon-lasso2:before{content:"\ed26";}
688 .icon-select2:before{content:"\ed28";} 688 .icon-select2:before{content:"\ed28";}
689 .icon-point-up:before{content:"\ed29";} 689 .icon-point-up:before{content:"\ed29";}
690 .icon-point-right:before{content:"\ed2a";} 690 .icon-point-right:before{content:"\ed2a";}
691 .icon-point-down:before{content:"\ed2b";} 691 .icon-point-down:before{content:"\ed2b";}
692 .icon-point-left:before{content:"\ed2c";} 692 .icon-point-left:before{content:"\ed2c";}
693 .icon-pointer:before{content:"\ed2d";} 693 .icon-pointer:before{content:"\ed2d";}
694 .icon-reminder:before{content:"\ed2e";} 694 .icon-reminder:before{content:"\ed2e";}
695 .icon-drag-left-right:before{content:"\ed2f";} 695 .icon-drag-left-right:before{content:"\ed2f";}
696 .icon-drag-left:before{content:"\ed30";} 696 .icon-drag-left:before{content:"\ed30";}
697 .icon-drag-right:before{content:"\ed31";} 697 .icon-drag-right:before{content:"\ed31";}
698 .icon-touch:before{content:"\ed32";} 698 .icon-touch:before{content:"\ed32";}
699 .icon-multitouch:before{content:"\ed33";} 699 .icon-multitouch:before{content:"\ed33";}
700 .icon-touch-zoom:before{content:"\ed34";} 700 .icon-touch-zoom:before{content:"\ed34";}
701 .icon-touch-pinch:before{content:"\ed35";} 701 .icon-touch-pinch:before{content:"\ed35";}
702 .icon-hand:before{content:"\ed36";} 702 .icon-hand:before{content:"\ed36";}
703 .icon-grab:before{content:"\ed37";} 703 .icon-grab:before{content:"\ed37";}
704 .icon-stack-empty:before{content:"\ed38";} 704 .icon-stack-empty:before{content:"\ed38";}
705 .icon-stack-plus:before{content:"\ed39";} 705 .icon-stack-plus:before{content:"\ed39";}
706 .icon-stack-minus:before{content:"\ed3a";} 706 .icon-stack-minus:before{content:"\ed3a";}
707 .icon-stack-star:before{content:"\ed3b";} 707 .icon-stack-star:before{content:"\ed3b";}
708 .icon-stack-picture:before{content:"\ed3c";} 708 .icon-stack-picture:before{content:"\ed3c";}
709 .icon-stack-down:before{content:"\ed3d";} 709 .icon-stack-down:before{content:"\ed3d";}
710 .icon-stack-up:before{content:"\ed3e";} 710 .icon-stack-up:before{content:"\ed3e";}
711 .icon-stack-cancel:before{content:"\ed3f";} 711 .icon-stack-cancel:before{content:"\ed3f";}
712 .icon-stack-check:before{content:"\ed40";} 712 .icon-stack-check:before{content:"\ed40";}
713 .icon-stack-text:before{content:"\ed41";} 713 .icon-stack-text:before{content:"\ed41";}
714 .icon-stack4:before{content:"\ed47";} 714 .icon-stack4:before{content:"\ed47";}
715 .icon-stack-music:before{content:"\ed48";} 715 .icon-stack-music:before{content:"\ed48";}
716 .icon-stack-play:before{content:"\ed49";} 716 .icon-stack-play:before{content:"\ed49";}
717 .icon-move:before{content:"\ed4a";} 717 .icon-move:before{content:"\ed4a";}
718 .icon-dots:before{content:"\ed4b";} 718 .icon-dots:before{content:"\ed4b";}
719 .icon-warning:before{content:"\ed4c";} 719 .icon-warning:before{content:"\ed4c";}
720 .icon-warning22:before{content:"\ed4d";} 720 .icon-warning22:before{content:"\ed4d";}
721 .icon-notification2:before{content:"\ed4f";} 721 .icon-notification2:before{content:"\ed4f";}
722 .icon-question3:before{content:"\ed52";} 722 .icon-question3:before{content:"\ed52";}
723 .icon-question4:before{content:"\ed53";} 723 .icon-question4:before{content:"\ed53";}
724 .icon-plus3:before{content:"\ed5a";} 724 .icon-plus3:before{content:"\ed5a";}
725 .icon-minus3:before{content:"\ed5b";} 725 .icon-minus3:before{content:"\ed5b";}
726 .icon-plus-circle2:before{content:"\ed5e";} 726 .icon-plus-circle2:before{content:"\ed5e";}
727 .icon-minus-circle2:before{content:"\ed5f";} 727 .icon-minus-circle2:before{content:"\ed5f";}
728 .icon-cancel-circle2:before{content:"\ed63";} 728 .icon-cancel-circle2:before{content:"\ed63";}
729 .icon-blocked:before{content:"\ed64";} 729 .icon-blocked:before{content:"\ed64";}
730 .icon-cancel-square:before{content:"\ed65";} 730 .icon-cancel-square:before{content:"\ed65";}
731 .icon-cancel-square2:before{content:"\ed66";} 731 .icon-cancel-square2:before{content:"\ed66";}
732 .icon-spam:before{content:"\ed68";} 732 .icon-spam:before{content:"\ed68";}
733 .icon-cross2:before{content:"\ed6a";} 733 .icon-cross2:before{content:"\ed6a";}
734 .icon-cross3:before{content:"\ed6b";} 734 .icon-cross3:before{content:"\ed6b";}
735 .icon-checkmark:before{content:"\ed6c";} 735 .icon-checkmark:before{content:"\ed6c";}
736 .icon-checkmark3:before{content:"\ed6e";} 736 .icon-checkmark3:before{content:"\ed6e";}
737 .icon-checkmark2:before{content:"\e372";} 737 .icon-checkmark2:before{content:"\e372";}
738 .icon-checkmark4:before{content:"\ed6f";} 738 .icon-checkmark4:before{content:"\ed6f";}
739 .icon-spell-check:before{content:"\ed71";} 739 .icon-spell-check:before{content:"\ed71";}
740 .icon-spell-check2:before{content:"\ed72";} 740 .icon-spell-check2:before{content:"\ed72";}
741 .icon-enter:before{content:"\ed73";} 741 .icon-enter:before{content:"\ed73";}
742 .icon-exit:before{content:"\ed74";} 742 .icon-exit:before{content:"\ed74";}
743 .icon-enter2:before{content:"\ed75";} 743 .icon-enter2:before{content:"\ed75";}
744 .icon-exit2:before{content:"\ed76";} 744 .icon-exit2:before{content:"\ed76";}
745 .icon-enter3:before{content:"\ed77";} 745 .icon-enter3:before{content:"\ed77";}
746 .icon-exit3:before{content:"\ed78";} 746 .icon-exit3:before{content:"\ed78";}
747 .icon-wall:before{content:"\ed79";} 747 .icon-wall:before{content:"\ed79";}
748 .icon-fence:before{content:"\ed7a";} 748 .icon-fence:before{content:"\ed7a";}
749 .icon-play3:before{content:"\ed7b";} 749 .icon-play3:before{content:"\ed7b";}
750 .icon-pause:before{content:"\ed7c";} 750 .icon-pause:before{content:"\ed7c";}
751 .icon-stop:before{content:"\ed7d";} 751 .icon-stop:before{content:"\ed7d";}
752 .icon-previous:before{content:"\ed7e";} 752 .icon-previous:before{content:"\ed7e";}
753 .icon-next:before{content:"\ed7f";} 753 .icon-next:before{content:"\ed7f";}
754 .icon-backward:before{content:"\ed80";} 754 .icon-backward:before{content:"\ed80";}
755 .icon-forward2:before{content:"\ed81";} 755 .icon-forward2:before{content:"\ed81";}
756 .icon-play4:before{content:"\ed82";} 756 .icon-play4:before{content:"\ed82";}
757 .icon-pause2:before{content:"\ed83";} 757 .icon-pause2:before{content:"\ed83";}
758 .icon-stop2:before{content:"\ed84";} 758 .icon-stop2:before{content:"\ed84";}
759 .icon-backward2:before{content:"\ed85";} 759 .icon-backward2:before{content:"\ed85";}
760 .icon-forward3:before{content:"\ed86";} 760 .icon-forward3:before{content:"\ed86";}
761 .icon-first:before{content:"\ed87";} 761 .icon-first:before{content:"\ed87";}
762 .icon-last:before{content:"\ed88";} 762 .icon-last:before{content:"\ed88";}
763 .icon-previous2:before{content:"\ed89";} 763 .icon-previous2:before{content:"\ed89";}
764 .icon-next2:before{content:"\ed8a";} 764 .icon-next2:before{content:"\ed8a";}
765 .icon-eject:before{content:"\ed8b";} 765 .icon-eject:before{content:"\ed8b";}
766 .icon-volume-high:before{content:"\ed8c";} 766 .icon-volume-high:before{content:"\ed8c";}
767 .icon-volume-medium:before{content:"\ed8d";} 767 .icon-volume-medium:before{content:"\ed8d";}
768 .icon-volume-low:before{content:"\ed8e";} 768 .icon-volume-low:before{content:"\ed8e";}
769 .icon-volume-mute:before{content:"\ed8f";} 769 .icon-volume-mute:before{content:"\ed8f";}
770 .icon-speaker-left:before{content:"\ed90";} 770 .icon-speaker-left:before{content:"\ed90";}
771 .icon-speaker-right:before{content:"\ed91";} 771 .icon-speaker-right:before{content:"\ed91";}
772 .icon-volume-mute2:before{content:"\ed92";} 772 .icon-volume-mute2:before{content:"\ed92";}
773 .icon-volume-increase:before{content:"\ed93";} 773 .icon-volume-increase:before{content:"\ed93";}
774 .icon-volume-decrease:before{content:"\ed94";} 774 .icon-volume-decrease:before{content:"\ed94";}
775 .icon-volume-mute5:before{content:"\eda4";} 775 .icon-volume-mute5:before{content:"\eda4";}
776 .icon-loop:before{content:"\eda5";} 776 .icon-loop:before{content:"\eda5";}
777 .icon-loop3:before{content:"\eda7";} 777 .icon-loop3:before{content:"\eda7";}
778 .icon-infinite-square:before{content:"\eda8";} 778 .icon-infinite-square:before{content:"\eda8";}
779 .icon-infinite:before{content:"\eda9";} 779 .icon-infinite:before{content:"\eda9";}
780 .icon-loop4:before{content:"\edab";} 780 .icon-loop4:before{content:"\edab";}
781 .icon-shuffle:before{content:"\edac";} 781 .icon-shuffle:before{content:"\edac";}
782 .icon-wave:before{content:"\edae";} 782 .icon-wave:before{content:"\edae";}
783 .icon-wave2:before{content:"\edaf";} 783 .icon-wave2:before{content:"\edaf";}
784 .icon-split:before{content:"\edb0";} 784 .icon-split:before{content:"\edb0";}
785 .icon-merge:before{content:"\edb1";} 785 .icon-merge:before{content:"\edb1";}
786 .icon-arrow-up5:before{content:"\edc4";} 786 .icon-arrow-up5:before{content:"\edc4";}
787 .icon-arrow-right5:before{content:"\edc5";} 787 .icon-arrow-right5:before{content:"\edc5";}
788 .icon-arrow-down5:before{content:"\edc6";} 788 .icon-arrow-down5:before{content:"\edc6";}
789 .icon-arrow-left5:before{content:"\edc7";} 789 .icon-arrow-left5:before{content:"\edc7";}
790 .icon-arrow-up-left2:before{content:"\edd0";} 790 .icon-arrow-up-left2:before{content:"\edd0";}
791 .icon-arrow-up7:before{content:"\edd1";} 791 .icon-arrow-up7:before{content:"\edd1";}
792 .icon-arrow-up-right2:before{content:"\edd2";} 792 .icon-arrow-up-right2:before{content:"\edd2";}
793 .icon-arrow-right7:before{content:"\edd3";} 793 .icon-arrow-right7:before{content:"\edd3";}
794 .icon-arrow-down-right2:before{content:"\edd4";} 794 .icon-arrow-down-right2:before{content:"\edd4";}
795 .icon-arrow-down7:before{content:"\edd5";} 795 .icon-arrow-down7:before{content:"\edd5";}
796 .icon-arrow-down-left2:before{content:"\edd6";} 796 .icon-arrow-down-left2:before{content:"\edd6";}
797 .icon-arrow-left7:before{content:"\edd7";} 797 .icon-arrow-left7:before{content:"\edd7";}
798 .icon-arrow-up-left3:before{content:"\edd8";} 798 .icon-arrow-up-left3:before{content:"\edd8";}
799 .icon-arrow-up8:before{content:"\edd9";} 799 .icon-arrow-up8:before{content:"\edd9";}
800 .icon-arrow-up-right3:before{content:"\edda";} 800 .icon-arrow-up-right3:before{content:"\edda";}
801 .icon-arrow-right8:before{content:"\eddb";} 801 .icon-arrow-right8:before{content:"\eddb";}
802 .icon-arrow-down-right3:before{content:"\eddc";} 802 .icon-arrow-down-right3:before{content:"\eddc";}
803 .icon-arrow-down8:before{content:"\eddd";} 803 .icon-arrow-down8:before{content:"\eddd";}
804 .icon-arrow-down-left3:before{content:"\edde";} 804 .icon-arrow-down-left3:before{content:"\edde";}
805 .icon-arrow-left8:before{content:"\eddf";} 805 .icon-arrow-left8:before{content:"\eddf";}
806 .icon-circle-up2:before{content:"\ede4";} 806 .icon-circle-up2:before{content:"\ede4";}
807 .icon-circle-right2:before{content:"\ede5";} 807 .icon-circle-right2:before{content:"\ede5";}
808 .icon-circle-down2:before{content:"\ede6";} 808 .icon-circle-down2:before{content:"\ede6";}
809 .icon-circle-left2:before{content:"\ede7";} 809 .icon-circle-left2:before{content:"\ede7";}
810 .icon-arrow-resize7:before{content:"\edfe";} 810 .icon-arrow-resize7:before{content:"\edfe";}
811 .icon-arrow-resize8:before{content:"\edff";} 811 .icon-arrow-resize8:before{content:"\edff";}
812 .icon-square-up-left:before{content:"\ee00";} 812 .icon-square-up-left:before{content:"\ee00";}
813 .icon-square-up:before{content:"\ee01";} 813 .icon-square-up:before{content:"\ee01";}
814 .icon-square-up-right:before{content:"\ee02";} 814 .icon-square-up-right:before{content:"\ee02";}
815 .icon-square-right:before{content:"\ee03";} 815 .icon-square-right:before{content:"\ee03";}
816 .icon-square-down-right:before{content:"\ee04";} 816 .icon-square-down-right:before{content:"\ee04";}
817 .icon-square-down:before{content:"\ee05";} 817 .icon-square-down:before{content:"\ee05";}
818 .icon-square-down-left:before{content:"\ee06";} 818 .icon-square-down-left:before{content:"\ee06";}
819 .icon-square-left:before{content:"\ee07";} 819 .icon-square-left:before{content:"\ee07";}
820 .icon-arrow-up15:before{content:"\ee30";} 820 .icon-arrow-up15:before{content:"\ee30";}
821 .icon-arrow-right15:before{content:"\ee31";} 821 .icon-arrow-right15:before{content:"\ee31";}
822 .icon-arrow-down15:before{content:"\ee32";} 822 .icon-arrow-down15:before{content:"\ee32";}
823 .icon-arrow-left15:before{content:"\ee33";} 823 .icon-arrow-left15:before{content:"\ee33";}
824 .icon-arrow-up16:before{content:"\ee34";} 824 .icon-arrow-up16:before{content:"\ee34";}
825 .icon-arrow-right16:before{content:"\ee35";} 825 .icon-arrow-right16:before{content:"\ee35";}
826 .icon-arrow-down16:before{content:"\ee36";} 826 .icon-arrow-down16:before{content:"\ee36";}
827 .icon-arrow-left16:before{content:"\ee37";} 827 .icon-arrow-left16:before{content:"\ee37";}
828 .icon-menu-open:before{content:"\ee38";} 828 .icon-menu-open:before{content:"\ee38";}
829 .icon-menu-open2:before{content:"\ee39";} 829 .icon-menu-open2:before{content:"\ee39";}
830 .icon-menu-close:before{content:"\ee3a";} 830 .icon-menu-close:before{content:"\ee3a";}
831 .icon-menu-close2:before{content:"\ee3b";} 831 .icon-menu-close2:before{content:"\ee3b";}
832 .icon-enter5:before{content:"\ee3d";} 832 .icon-enter5:before{content:"\ee3d";}
833 .icon-esc:before{content:"\ee3e";} 833 .icon-esc:before{content:"\ee3e";}
834 .icon-enter6:before{content:"\ee3f";} 834 .icon-enter6:before{content:"\ee3f";}
835 .icon-backspace:before{content:"\ee40";} 835 .icon-backspace:before{content:"\ee40";}
836 .icon-backspace2:before{content:"\ee41";} 836 .icon-backspace2:before{content:"\ee41";}
837 .icon-tab:before{content:"\ee42";} 837 .icon-tab:before{content:"\ee42";}
838 .icon-transmission:before{content:"\ee43";} 838 .icon-transmission:before{content:"\ee43";}
839 .icon-sort:before{content:"\ee45";} 839 .icon-sort:before{content:"\ee45";}
840 .icon-move-up2:before{content:"\ee47";} 840 .icon-move-up2:before{content:"\ee47";}
841 .icon-move-down2:before{content:"\ee48";} 841 .icon-move-down2:before{content:"\ee48";}
842 .icon-sort-alpha-asc:before{content:"\ee49";} 842 .icon-sort-alpha-asc:before{content:"\ee49";}
843 .icon-sort-alpha-desc:before{content:"\ee4a";} 843 .icon-sort-alpha-desc:before{content:"\ee4a";}
844 .icon-sort-numeric-asc:before{content:"\ee4b";} 844 .icon-sort-numeric-asc:before{content:"\ee4b";}
845 .icon-sort-numberic-desc:before{content:"\ee4c";} 845 .icon-sort-numberic-desc:before{content:"\ee4c";}
846 .icon-sort-amount-asc:before{content:"\ee4d";} 846 .icon-sort-amount-asc:before{content:"\ee4d";}
847 .icon-sort-amount-desc:before{content:"\ee4e";} 847 .icon-sort-amount-desc:before{content:"\ee4e";}
848 .icon-sort-time-asc:before{content:"\ee4f";} 848 .icon-sort-time-asc:before{content:"\ee4f";}
849 .icon-sort-time-desc:before{content:"\ee50";} 849 .icon-sort-time-desc:before{content:"\ee50";}
850 .icon-battery-6:before{content:"\ee51";} 850 .icon-battery-6:before{content:"\ee51";}
851 .icon-battery-0:before{content:"\ee57";} 851 .icon-battery-0:before{content:"\ee57";}
852 .icon-battery-charging:before{content:"\ee58";} 852 .icon-battery-charging:before{content:"\ee58";}
853 .icon-command:before{content:"\ee5f";} 853 .icon-command:before{content:"\ee5f";}
854 .icon-shift:before{content:"\ee60";} 854 .icon-shift:before{content:"\ee60";}
855 .icon-ctrl:before{content:"\ee61";} 855 .icon-ctrl:before{content:"\ee61";}
856 .icon-opt:before{content:"\ee62";} 856 .icon-opt:before{content:"\ee62";}
857 .icon-checkbox-checked:before{content:"\ee63";} 857 .icon-checkbox-checked:before{content:"\ee63";}
858 .icon-checkbox-unchecked:before{content:"\ee64";} 858 .icon-checkbox-unchecked:before{content:"\ee64";}
859 .icon-checkbox-partial:before{content:"\ee65";} 859 .icon-checkbox-partial:before{content:"\ee65";}
860 .icon-square:before{content:"\ee66";} 860 .icon-square:before{content:"\ee66";}
861 .icon-triangle:before{content:"\ee67";} 861 .icon-triangle:before{content:"\ee67";}
862 .icon-triangle2:before{content:"\ee68";} 862 .icon-triangle2:before{content:"\ee68";}
863 .icon-diamond3:before{content:"\ee69";} 863 .icon-diamond3:before{content:"\ee69";}
864 .icon-diamond4:before{content:"\ee6a";} 864 .icon-diamond4:before{content:"\ee6a";}
865 .icon-checkbox-checked2:before{content:"\ee6b";} 865 .icon-checkbox-checked2:before{content:"\ee6b";}
866 .icon-checkbox-unchecked2:before{content:"\ee6c";} 866 .icon-checkbox-unchecked2:before{content:"\ee6c";}
867 .icon-checkbox-partial2:before{content:"\ee6d";} 867 .icon-checkbox-partial2:before{content:"\ee6d";}
868 .icon-radio-checked:before{content:"\ee6e";} 868 .icon-radio-checked:before{content:"\ee6e";}
869 .icon-radio-checked2:before{content:"\ee6f";} 869 .icon-radio-checked2:before{content:"\ee6f";}
870 .icon-radio-unchecked:before{content:"\ee70";} 870 .icon-radio-unchecked:before{content:"\ee70";}
871 .icon-checkmark-circle:before{content:"\ee73";} 871 .icon-checkmark-circle:before{content:"\ee73";}
872 .icon-circle:before{content:"\ee74";} 872 .icon-circle:before{content:"\ee74";}
873 .icon-circle2:before{content:"\ee75";} 873 .icon-circle2:before{content:"\ee75";}
874 .icon-circles:before{content:"\ee76";} 874 .icon-circles:before{content:"\ee76";}
875 .icon-circles2:before{content:"\ee77";} 875 .icon-circles2:before{content:"\ee77";}
876 .icon-crop:before{content:"\ee78";} 876 .icon-crop:before{content:"\ee78";}
877 .icon-crop2:before{content:"\ee79";} 877 .icon-crop2:before{content:"\ee79";}
878 .icon-make-group:before{content:"\ee7a";} 878 .icon-make-group:before{content:"\ee7a";}
879 .icon-ungroup:before{content:"\ee7b";} 879 .icon-ungroup:before{content:"\ee7b";}
880 .icon-vector:before{content:"\ee7c";} 880 .icon-vector:before{content:"\ee7c";}
881 .icon-vector2:before{content:"\ee7d";} 881 .icon-vector2:before{content:"\ee7d";}
882 .icon-rulers:before{content:"\ee7e";} 882 .icon-rulers:before{content:"\ee7e";}
883 .icon-pencil-ruler:before{content:"\ee80";} 883 .icon-pencil-ruler:before{content:"\ee80";}
884 .icon-scissors:before{content:"\ee81";} 884 .icon-scissors:before{content:"\ee81";}
885 .icon-filter3:before{content:"\ee88";} 885 .icon-filter3:before{content:"\ee88";}
886 .icon-filter4:before{content:"\ee89";} 886 .icon-filter4:before{content:"\ee89";}
887 .icon-font:before{content:"\ee8a";} 887 .icon-font:before{content:"\ee8a";}
888 .icon-ampersand2:before{content:"\ee8b";} 888 .icon-ampersand2:before{content:"\ee8b";}
889 .icon-ligature:before{content:"\ee8c";} 889 .icon-ligature:before{content:"\ee8c";}
890 .icon-font-size:before{content:"\ee8e";} 890 .icon-font-size:before{content:"\ee8e";}
891 .icon-typography:before{content:"\ee8f";} 891 .icon-typography:before{content:"\ee8f";}
892 .icon-text-height:before{content:"\ee90";} 892 .icon-text-height:before{content:"\ee90";}
893 .icon-text-width:before{content:"\ee91";} 893 .icon-text-width:before{content:"\ee91";}
894 .icon-height2:before{content:"\ee92";} 894 .icon-height2:before{content:"\ee92";}
895 .icon-width:before{content:"\ee93";} 895 .icon-width:before{content:"\ee93";}
896 .icon-strikethrough2:before{content:"\ee98";} 896 .icon-strikethrough2:before{content:"\ee98";}
897 .icon-font-size2:before{content:"\ee99";} 897 .icon-font-size2:before{content:"\ee99";}
898 .icon-bold2:before{content:"\ee9a";} 898 .icon-bold2:before{content:"\ee9a";}
899 .icon-underline2:before{content:"\ee9b";} 899 .icon-underline2:before{content:"\ee9b";}
900 .icon-italic2:before{content:"\ee9c";} 900 .icon-italic2:before{content:"\ee9c";}
901 .icon-strikethrough3:before{content:"\ee9d";} 901 .icon-strikethrough3:before{content:"\ee9d";}
902 .icon-omega:before{content:"\ee9e";} 902 .icon-omega:before{content:"\ee9e";}
903 .icon-sigma:before{content:"\ee9f";} 903 .icon-sigma:before{content:"\ee9f";}
904 .icon-nbsp:before{content:"\eea0";} 904 .icon-nbsp:before{content:"\eea0";}
905 .icon-page-break:before{content:"\eea1";} 905 .icon-page-break:before{content:"\eea1";}
906 .icon-page-break2:before{content:"\eea2";} 906 .icon-page-break2:before{content:"\eea2";}
907 .icon-superscript:before{content:"\eea3";} 907 .icon-superscript:before{content:"\eea3";}
908 .icon-subscript:before{content:"\eea4";} 908 .icon-subscript:before{content:"\eea4";}
909 .icon-superscript2:before{content:"\eea5";} 909 .icon-superscript2:before{content:"\eea5";}
910 .icon-subscript2:before{content:"\eea6";} 910 .icon-subscript2:before{content:"\eea6";}
911 .icon-text-color:before{content:"\eea7";} 911 .icon-text-color:before{content:"\eea7";}
912 .icon-highlight:before{content:"\eea8";} 912 .icon-highlight:before{content:"\eea8";}
913 .icon-pagebreak:before{content:"\eea9";} 913 .icon-pagebreak:before{content:"\eea9";}
914 .icon-clear-formatting:before{content:"\eeaa";} 914 .icon-clear-formatting:before{content:"\eeaa";}
915 .icon-table:before{content:"\eeab";} 915 .icon-table:before{content:"\eeab";}
916 .icon-table2:before{content:"\eeac";} 916 .icon-table2:before{content:"\eeac";}
917 .icon-insert-template:before{content:"\eead";} 917 .icon-insert-template:before{content:"\eead";}
918 .icon-pilcrow:before{content:"\eeae";} 918 .icon-pilcrow:before{content:"\eeae";}
919 .icon-ltr:before{content:"\eeaf";} 919 .icon-ltr:before{content:"\eeaf";}
920 .icon-rtl:before{content:"\eeb0";} 920 .icon-rtl:before{content:"\eeb0";}
921 .icon-ltr2:before{content:"\eeb1";} 921 .icon-ltr2:before{content:"\eeb1";}
922 .icon-rtl2:before{content:"\eeb2";} 922 .icon-rtl2:before{content:"\eeb2";}
923 .icon-section:before{content:"\eeb3";} 923 .icon-section:before{content:"\eeb3";}
924 .icon-paragraph-left2:before{content:"\eeb8";} 924 .icon-paragraph-left2:before{content:"\eeb8";}
925 .icon-paragraph-center2:before{content:"\eeb9";} 925 .icon-paragraph-center2:before{content:"\eeb9";}
926 .icon-paragraph-right2:before{content:"\eeba";} 926 .icon-paragraph-right2:before{content:"\eeba";}
927 .icon-paragraph-justify2:before{content:"\eebb";} 927 .icon-paragraph-justify2:before{content:"\eebb";}
928 .icon-indent-increase:before{content:"\eebc";} 928 .icon-indent-increase:before{content:"\eebc";}
929 .icon-indent-decrease:before{content:"\eebd";} 929 .icon-indent-decrease:before{content:"\eebd";}
930 .icon-paragraph-left3:before{content:"\eebe";} 930 .icon-paragraph-left3:before{content:"\eebe";}
931 .icon-paragraph-center3:before{content:"\eebf";} 931 .icon-paragraph-center3:before{content:"\eebf";}
932 .icon-paragraph-right3:before{content:"\eec0";} 932 .icon-paragraph-right3:before{content:"\eec0";}
933 .icon-paragraph-justify3:before{content:"\eec1";} 933 .icon-paragraph-justify3:before{content:"\eec1";}
934 .icon-indent-increase2:before{content:"\eec2";} 934 .icon-indent-increase2:before{content:"\eec2";}
935 .icon-indent-decrease2:before{content:"\eec3";} 935 .icon-indent-decrease2:before{content:"\eec3";}
936 .icon-share:before{content:"\eec4";} 936 .icon-share:before{content:"\eec4";}
937 .icon-share2:before{content:"\eec5";} 937 .icon-share2:before{content:"\eec5";}
938 .icon-new-tab:before{content:"\eec6";} 938 .icon-new-tab:before{content:"\eec6";}
939 .icon-new-tab2:before{content:"\eec7";} 939 .icon-new-tab2:before{content:"\eec7";}
940 .icon-popout:before{content:"\eec8";} 940 .icon-popout:before{content:"\eec8";}
941 .icon-embed:before{content:"\eec9";} 941 .icon-embed:before{content:"\eec9";}
942 .icon-embed2:before{content:"\eeca";} 942 .icon-embed2:before{content:"\eeca";}
943 .icon-markup:before{content:"\eecb";} 943 .icon-markup:before{content:"\eecb";}
944 .icon-regexp:before{content:"\eecc";} 944 .icon-regexp:before{content:"\eecc";}
945 .icon-regexp2:before{content:"\eecd";} 945 .icon-regexp2:before{content:"\eecd";}
946 .icon-code:before{content:"\eece";} 946 .icon-code:before{content:"\eece";}
947 .icon-circle-css:before{content:"\eecf";} 947 .icon-circle-css:before{content:"\eecf";}
948 .icon-circle-code:before{content:"\eed0";} 948 .icon-circle-code:before{content:"\eed0";}
949 .icon-terminal:before{content:"\eed1";} 949 .icon-terminal:before{content:"\eed1";}
950 .icon-unicode:before{content:"\eed2";} 950 .icon-unicode:before{content:"\eed2";}
951 .icon-seven-segment-0:before{content:"\eed3";} 951 .icon-seven-segment-0:before{content:"\eed3";}
952 .icon-seven-segment-1:before{content:"\eed4";} 952 .icon-seven-segment-1:before{content:"\eed4";}
953 .icon-seven-segment-2:before{content:"\eed5";} 953 .icon-seven-segment-2:before{content:"\eed5";}
954 .icon-seven-segment-3:before{content:"\eed6";} 954 .icon-seven-segment-3:before{content:"\eed6";}
955 .icon-seven-segment-4:before{content:"\eed7";} 955 .icon-seven-segment-4:before{content:"\eed7";}
956 .icon-seven-segment-5:before{content:"\eed8";} 956 .icon-seven-segment-5:before{content:"\eed8";}
957 .icon-seven-segment-6:before{content:"\eed9";} 957 .icon-seven-segment-6:before{content:"\eed9";}
958 .icon-seven-segment-7:before{content:"\eeda";} 958 .icon-seven-segment-7:before{content:"\eeda";}
959 .icon-seven-segment-8:before{content:"\eedb";} 959 .icon-seven-segment-8:before{content:"\eedb";}
960 .icon-seven-segment-9:before{content:"\eedc";} 960 .icon-seven-segment-9:before{content:"\eedc";}
961 .icon-share3:before{content:"\eedd";} 961 .icon-share3:before{content:"\eedd";}
962 .icon-share4:before{content:"\eede";} 962 .icon-share4:before{content:"\eede";}
963 .icon-google:before{content:"\eee3";} 963 .icon-google:before{content:"\eee3";}
964 .icon-google-plus:before{content:"\eee4";} 964 .icon-google-plus:before{content:"\eee4";}
965 .icon-google-plus2:before{content:"\eee5";} 965 .icon-google-plus2:before{content:"\eee5";}
966 .icon-google-drive:before{content:"\eee7";} 966 .icon-google-drive:before{content:"\eee7";}
967 .icon-facebook:before{content:"\eee8";} 967 .icon-facebook:before{content:"\eee8";}
968 .icon-facebook2:before{content:"\eee9";} 968 .icon-facebook2:before{content:"\eee9";}
969 .icon-instagram:before{content:"\eeec";} 969 .icon-instagram:before{content:"\eeec";}
970 .icon-twitter:before{content:"\eeed";} 970 .icon-twitter:before{content:"\eeed";}
971 .icon-twitter2:before{content:"\eeee";} 971 .icon-twitter2:before{content:"\eeee";}
972 .icon-feed2:before{content:"\eef0";} 972 .icon-feed2:before{content:"\eef0";}
973 .icon-feed3:before{content:"\eef1";} 973 .icon-feed3:before{content:"\eef1";}
974 .icon-youtube:before{content:"\eef3";} 974 .icon-youtube:before{content:"\eef3";}
975 .icon-youtube2:before{content:"\eef4";} 975 .icon-youtube2:before{content:"\eef4";}
976 .icon-youtube3:before{content:"\eef5";} 976 .icon-youtube3:before{content:"\eef5";}
977 .icon-vimeo:before{content:"\eef8";} 977 .icon-vimeo:before{content:"\eef8";}
978 .icon-vimeo2:before{content:"\eef9";} 978 .icon-vimeo2:before{content:"\eef9";}
979 .icon-lanyrd:before{content:"\eefb";} 979 .icon-lanyrd:before{content:"\eefb";}
980 .icon-flickr:before{content:"\eefc";} 980 .icon-flickr:before{content:"\eefc";}
981 .icon-flickr2:before{content:"\eefd";} 981 .icon-flickr2:before{content:"\eefd";}
982 .icon-flickr3:before{content:"\eefe";} 982 .icon-flickr3:before{content:"\eefe";}
983 .icon-picassa:before{content:"\ef00";} 983 .icon-picassa:before{content:"\ef00";}
984 .icon-picassa2:before{content:"\ef01";} 984 .icon-picassa2:before{content:"\ef01";}
985 .icon-dribbble:before{content:"\ef02";} 985 .icon-dribbble:before{content:"\ef02";}
986 .icon-dribbble2:before{content:"\ef03";} 986 .icon-dribbble2:before{content:"\ef03";}
987 .icon-dribbble3:before{content:"\ef04";} 987 .icon-dribbble3:before{content:"\ef04";}
988 .icon-forrst:before{content:"\ef05";} 988 .icon-forrst:before{content:"\ef05";}
989 .icon-forrst2:before{content:"\ef06";} 989 .icon-forrst2:before{content:"\ef06";}
990 .icon-deviantart:before{content:"\ef07";} 990 .icon-deviantart:before{content:"\ef07";}
991 .icon-deviantart2:before{content:"\ef08";} 991 .icon-deviantart2:before{content:"\ef08";}
992 .icon-steam:before{content:"\ef09";} 992 .icon-steam:before{content:"\ef09";}
993 .icon-steam2:before{content:"\ef0a";} 993 .icon-steam2:before{content:"\ef0a";}
994 .icon-dropbox:before{content:"\ef0b";} 994 .icon-dropbox:before{content:"\ef0b";}
995 .icon-onedrive:before{content:"\ef0c";} 995 .icon-onedrive:before{content:"\ef0c";}
996 .icon-github:before{content:"\ef0d";} 996 .icon-github:before{content:"\ef0d";}
997 .icon-github4:before{content:"\ef10";} 997 .icon-github4:before{content:"\ef10";}
998 .icon-github5:before{content:"\ef11";} 998 .icon-github5:before{content:"\ef11";}
999 .icon-wordpress:before{content:"\ef12";} 999 .icon-wordpress:before{content:"\ef12";}
1000 .icon-wordpress2:before{content:"\ef13";} 1000 .icon-wordpress2:before{content:"\ef13";}
1001 .icon-joomla:before{content:"\ef14";} 1001 .icon-joomla:before{content:"\ef14";}
1002 .icon-blogger:before{content:"\ef15";} 1002 .icon-blogger:before{content:"\ef15";}
1003 .icon-blogger2:before{content:"\ef16";} 1003 .icon-blogger2:before{content:"\ef16";}
1004 .icon-tumblr:before{content:"\ef17";} 1004 .icon-tumblr:before{content:"\ef17";}
1005 .icon-tumblr2:before{content:"\ef18";} 1005 .icon-tumblr2:before{content:"\ef18";}
1006 .icon-yahoo:before{content:"\ef19";} 1006 .icon-yahoo:before{content:"\ef19";}
1007 .icon-tux:before{content:"\ef1a";} 1007 .icon-tux:before{content:"\ef1a";}
1008 .icon-apple2:before{content:"\ef1b";} 1008 .icon-apple2:before{content:"\ef1b";}
1009 .icon-finder:before{content:"\ef1c";} 1009 .icon-finder:before{content:"\ef1c";}
1010 .icon-android:before{content:"\ef1d";} 1010 .icon-android:before{content:"\ef1d";}
1011 .icon-windows:before{content:"\ef1e";} 1011 .icon-windows:before{content:"\ef1e";}
1012 .icon-windows8:before{content:"\ef1f";} 1012 .icon-windows8:before{content:"\ef1f";}
1013 .icon-soundcloud:before{content:"\ef20";} 1013 .icon-soundcloud:before{content:"\ef20";}
1014 .icon-soundcloud2:before{content:"\ef21";} 1014 .icon-soundcloud2:before{content:"\ef21";}
1015 .icon-skype:before{content:"\ef22";} 1015 .icon-skype:before{content:"\ef22";}
1016 .icon-reddit:before{content:"\ef23";} 1016 .icon-reddit:before{content:"\ef23";}
1017 .icon-linkedin:before{content:"\ef24";} 1017 .icon-linkedin:before{content:"\ef24";}
1018 .icon-linkedin2:before{content:"\ef25";} 1018 .icon-linkedin2:before{content:"\ef25";}
1019 .icon-lastfm:before{content:"\ef26";} 1019 .icon-lastfm:before{content:"\ef26";}
1020 .icon-lastfm2:before{content:"\ef27";} 1020 .icon-lastfm2:before{content:"\ef27";}
1021 .icon-delicious:before{content:"\ef28";} 1021 .icon-delicious:before{content:"\ef28";}
1022 .icon-stumbleupon:before{content:"\ef29";} 1022 .icon-stumbleupon:before{content:"\ef29";}
1023 .icon-stumbleupon2:before{content:"\ef2a";} 1023 .icon-stumbleupon2:before{content:"\ef2a";}
1024 .icon-stackoverflow:before{content:"\ef2b";} 1024 .icon-stackoverflow:before{content:"\ef2b";}
1025 .icon-pinterest2:before{content:"\ef2d";} 1025 .icon-pinterest2:before{content:"\ef2d";}
1026 .icon-xing:before{content:"\ef2e";} 1026 .icon-xing:before{content:"\ef2e";}
1027 .icon-flattr:before{content:"\ef30";} 1027 .icon-flattr:before{content:"\ef30";}
1028 .icon-foursquare:before{content:"\ef31";} 1028 .icon-foursquare:before{content:"\ef31";}
1029 .icon-paypal:before{content:"\ef32";} 1029 .icon-paypal:before{content:"\ef32";}
1030 .icon-paypal2:before{content:"\ef33";} 1030 .icon-paypal2:before{content:"\ef33";}
1031 .icon-yelp:before{content:"\ef35";} 1031 .icon-yelp:before{content:"\ef35";}
1032 .icon-file-pdf:before{content:"\ef36";} 1032 .icon-file-pdf:before{content:"\ef36";}
1033 .icon-file-openoffice:before{content:"\ef37";} 1033 .icon-file-openoffice:before{content:"\ef37";}
1034 .icon-file-word:before{content:"\ef38";} 1034 .icon-file-word:before{content:"\ef38";}
1035 .icon-file-excel:before{content:"\ef39";} 1035 .icon-file-excel:before{content:"\ef39";}
1036 .icon-libreoffice:before{content:"\ef3a";} 1036 .icon-libreoffice:before{content:"\ef3a";}
1037 .icon-html5:before{content:"\ef3b";} 1037 .icon-html5:before{content:"\ef3b";}
1038 .icon-html52:before{content:"\ef3c";} 1038 .icon-html52:before{content:"\ef3c";}
1039 .icon-css3:before{content:"\ef3d";} 1039 .icon-css3:before{content:"\ef3d";}
1040 .icon-git:before{content:"\ef3e";} 1040 .icon-git:before{content:"\ef3e";}
1041 .icon-svg:before{content:"\ef3f";} 1041 .icon-svg:before{content:"\ef3f";}
1042 .icon-codepen:before{content:"\ef40";} 1042 .icon-codepen:before{content:"\ef40";}
1043 .icon-chrome:before{content:"\ef41";} 1043 .icon-chrome:before{content:"\ef41";}
1044 .icon-firefox:before{content:"\ef42";} 1044 .icon-firefox:before{content:"\ef42";}
1045 .icon-IE:before{content:"\ef43";} 1045 .icon-IE:before{content:"\ef43";}
1046 .icon-opera:before{content:"\ef44";} 1046 .icon-opera:before{content:"\ef44";}
1047 .icon-safari:before{content:"\ef45";} 1047 .icon-safari:before{content:"\ef45";}
1048 .icon-check2:before{content:"\e601";} 1048 .icon-check2:before{content:"\e601";}
1049 .icon-home4:before{content:"\e603";} 1049 .icon-home4:before{content:"\e603";}
1050 .icon-people:before{content:"\e81b";} 1050 .icon-people:before{content:"\e81b";}
1051 .icon-checkmark-circle2:before{content:"\e853";} 1051 .icon-checkmark-circle2:before{content:"\e853";}
1052 .icon-arrow-up-left32:before{content:"\e8ae";} 1052 .icon-arrow-up-left32:before{content:"\e8ae";}
1053 .icon-arrow-up52:before{content:"\e8af";} 1053 .icon-arrow-up52:before{content:"\e8af";}
1054 .icon-arrow-up-right32:before{content:"\e8b0";} 1054 .icon-arrow-up-right32:before{content:"\e8b0";}
1055 .icon-arrow-right6:before{content:"\e8b1";} 1055 .icon-arrow-right6:before{content:"\e8b1";}
1056 .icon-arrow-down-right32:before{content:"\e8b2";} 1056 .icon-arrow-down-right32:before{content:"\e8b2";}
1057 .icon-arrow-down52:before{content:"\e8b3";} 1057 .icon-arrow-down52:before{content:"\e8b3";}
1058 .icon-arrow-down-left32:before{content:"\e8b4";} 1058 .icon-arrow-down-left32:before{content:"\e8b4";}
1059 .icon-arrow-left52:before{content:"\e8b5";} 1059 .icon-arrow-left52:before{content:"\e8b5";}
1060 .icon-calendar5:before{content:"\e985";} 1060 .icon-calendar5:before{content:"\e985";}
1061 .icon-move-alt1:before{content:"\e986";} 1061 .icon-move-alt1:before{content:"\e986";}
1062 .icon-reload-alt:before{content:"\e987";} 1062 .icon-reload-alt:before{content:"\e987";}
1063 .icon-move-vertical:before{content:"\e988";} 1063 .icon-move-vertical:before{content:"\e988";}
1064 .icon-move-horizontal:before{content:"\e989";} 1064 .icon-move-horizontal:before{content:"\e989";}
1065 .icon-hash:before{content:"\e98b";} 1065 .icon-hash:before{content:"\e98b";}
1066 .icon-bars-alt:before{content:"\e98c";} 1066 .icon-bars-alt:before{content:"\e98c";}
1067 .icon-eye8:before{content:"\e98d";} 1067 .icon-eye8:before{content:"\e98d";}
1068 .icon-search4:before{content:"\e98e";} 1068 .icon-search4:before{content:"\e98e";}
1069 .icon-zoomin3:before{content:"\e98f";} 1069 .icon-zoomin3:before{content:"\e98f";}
1070 .icon-zoomout3:before{content:"\e990";} 1070 .icon-zoomout3:before{content:"\e990";}
1071 .icon-add:before{content:"\e991";} 1071 .icon-add:before{content:"\e991";}
1072 .icon-subtract:before{content:"\e992";} 1072 .icon-subtract:before{content:"\e992";}
1073 .icon-exclamation:before{content:"\e993";} 1073 .icon-exclamation:before{content:"\e993";}
1074 .icon-question6:before{content:"\e994";} 1074 .icon-question6:before{content:"\e994";}
1075 .icon-close2:before{content:"\e995";} 1075 .icon-close2:before{content:"\e995";}
1076 .icon-task:before{content:"\e996";} 1076 .icon-task:before{content:"\e996";}
1077 .icon-inbox:before{content:"\e997";} 1077 .icon-inbox:before{content:"\e997";}
1078 .icon-inbox-alt:before{content:"\e998";} 1078 .icon-inbox-alt:before{content:"\e998";}
1079 .icon-envelope:before{content:"\e999";} 1079 .icon-envelope:before{content:"\e999";}
1080 .icon-compose:before{content:"\e99a";} 1080 .icon-compose:before{content:"\e99a";}
1081 .icon-newspaper2:before{content:"\e99b";} 1081 .icon-newspaper2:before{content:"\e99b";}
1082 .icon-calendar22:before{content:"\e99c";} 1082 .icon-calendar22:before{content:"\e99c";}
1083 .icon-hyperlink:before{content:"\e99d";} 1083 .icon-hyperlink:before{content:"\e99d";}
1084 .icon-trash:before{content:"\e99e";} 1084 .icon-trash:before{content:"\e99e";}
1085 .icon-trash-alt:before{content:"\e99f";} 1085 .icon-trash-alt:before{content:"\e99f";}
1086 .icon-grid5:before{content:"\e9a0";} 1086 .icon-grid5:before{content:"\e9a0";}
1087 .icon-grid-alt:before{content:"\e9a1";} 1087 .icon-grid-alt:before{content:"\e9a1";}
1088 .icon-menu6:before{content:"\e9a2";} 1088 .icon-menu6:before{content:"\e9a2";}
1089 .icon-list3:before{content:"\e9a3";} 1089 .icon-list3:before{content:"\e9a3";}
1090 .icon-gallery:before{content:"\e9a4";} 1090 .icon-gallery:before{content:"\e9a4";}
1091 .icon-calculator:before{content:"\e9a5";} 1091 .icon-calculator:before{content:"\e9a5";}
1092 .icon-windows2:before{content:"\e9a6";} 1092 .icon-windows2:before{content:"\e9a6";}
1093 .icon-browser:before{content:"\e9a7";} 1093 .icon-browser:before{content:"\e9a7";}
1094 .icon-portfolio:before{content:"\e9a8";} 1094 .icon-portfolio:before{content:"\e9a8";}
1095 .icon-comments:before{content:"\e9a9";} 1095 .icon-comments:before{content:"\e9a9";}
1096 .icon-screen3:before{content:"\e9aa";} 1096 .icon-screen3:before{content:"\e9aa";}
1097 .icon-iphone:before{content:"\e9ab";} 1097 .icon-iphone:before{content:"\e9ab";}
1098 .icon-ipad:before{content:"\e9ac";} 1098 .icon-ipad:before{content:"\e9ac";}
1099 .icon-googleplus5:before{content:"\e9ad";} 1099 .icon-googleplus5:before{content:"\e9ad";}
1100 .icon-pin:before{content:"\e9ae";} 1100 .icon-pin:before{content:"\e9ae";}
1101 .icon-pin-alt:before{content:"\e9af";} 1101 .icon-pin-alt:before{content:"\e9af";}
1102 .icon-cog5:before{content:"\e9b0";} 1102 .icon-cog5:before{content:"\e9b0";}
1103 .icon-graduation:before{content:"\e9b1";} 1103 .icon-graduation:before{content:"\e9b1";}
1104 .icon-air:before{content:"\e9b2";} 1104 .icon-air:before{content:"\e9b2";}
1105 .icon-droplets:before{content:"\e7ee";} 1105 .icon-droplets:before{content:"\e7ee";}
1106 .icon-statistics:before{content:"\e9b4";} 1106 .icon-statistics:before{content:"\e9b4";}
1107 .icon-pie5:before{content:"\e7ef";} 1107 .icon-pie5:before{content:"\e7ef";}
1108 .icon-cross:before{content:"\e9b6";} 1108 .icon-cross:before{content:"\e9b6";}
1109 .icon-minus2:before{content:"\e9b7";} 1109 .icon-minus2:before{content:"\e9b7";}
1110 .icon-plus2:before{content:"\e9b8";} 1110 .icon-plus2:before{content:"\e9b8";}
1111 .icon-info3:before{content:"\e9b9";} 1111 .icon-info3:before{content:"\e9b9";}
1112 .icon-info22:before{content:"\e9ba";} 1112 .icon-info22:before{content:"\e9ba";}
1113 .icon-question7:before{content:"\e9bb";} 1113 .icon-question7:before{content:"\e9bb";}
1114 .icon-help:before{content:"\e9bc";} 1114 .icon-help:before{content:"\e9bc";}
1115 .icon-warning2:before{content:"\e9bd";} 1115 .icon-warning2:before{content:"\e9bd";}
1116 .icon-add-to-list:before{content:"\e9bf";} 1116 .icon-add-to-list:before{content:"\e9bf";}
1117 .icon-arrow-left12:before{content:"\e9c0";} 1117 .icon-arrow-left12:before{content:"\e9c0";}
1118 .icon-arrow-down12:before{content:"\e9c1";} 1118 .icon-arrow-down12:before{content:"\e9c1";}
1119 .icon-arrow-up12:before{content:"\e9c2";} 1119 .icon-arrow-up12:before{content:"\e9c2";}
1120 .icon-arrow-right13:before{content:"\e9c3";} 1120 .icon-arrow-right13:before{content:"\e9c3";}
1121 .icon-arrow-left22:before{content:"\e9c4";} 1121 .icon-arrow-left22:before{content:"\e9c4";}
1122 .icon-arrow-down22:before{content:"\e9c5";} 1122 .icon-arrow-down22:before{content:"\e9c5";}
1123 .icon-arrow-up22:before{content:"\e9c6";} 1123 .icon-arrow-up22:before{content:"\e9c6";}
1124 .icon-arrow-right22:before{content:"\e9c7";} 1124 .icon-arrow-right22:before{content:"\e9c7";}
1125 .icon-arrow-left32:before{content:"\e9c8";} 1125 .icon-arrow-left32:before{content:"\e9c8";}
1126 .icon-arrow-down32:before{content:"\e9c9";} 1126 .icon-arrow-down32:before{content:"\e9c9";}
1127 .icon-arrow-up32:before{content:"\e9ca";} 1127 .icon-arrow-up32:before{content:"\e9ca";}
1128 .icon-arrow-right32:before{content:"\e9cb";} 1128 .icon-arrow-right32:before{content:"\e9cb";}
1129 .icon-switch2:before{content:"\e647";} 1129 .icon-switch2:before{content:"\e647";}
1130 .icon-checkmark5:before{content:"\e600";} 1130 .icon-checkmark5:before{content:"\e600";}
1131 .icon-ampersand:before{content:"\e9cc";} 1131 .icon-ampersand:before{content:"\e9cc";}
1132 .icon-alert:before{content:"\e9cf";} 1132 .icon-alert:before{content:"\e9cf";}
1133 .icon-alignment-align:before{content:"\e9d0";} 1133 .icon-alignment-align:before{content:"\e9d0";}
1134 .icon-alignment-aligned-to:before{content:"\e9d1";} 1134 .icon-alignment-aligned-to:before{content:"\e9d1";}
1135 .icon-alignment-unalign:before{content:"\e9d2";} 1135 .icon-alignment-unalign:before{content:"\e9d2";}
1136 .icon-arrow-down132:before{content:"\e9d3";} 1136 .icon-arrow-down132:before{content:"\e9d3";}
1137 .icon-arrow-up13:before{content:"\e9da";} 1137 .icon-arrow-up13:before{content:"\e9da";}
1138 .icon-arrow-left13:before{content:"\e9d4";} 1138 .icon-arrow-left13:before{content:"\e9d4";}
1139 .icon-arrow-right14:before{content:"\e9d5";} 1139 .icon-arrow-right14:before{content:"\e9d5";}
1140 .icon-arrow-small-down:before{content:"\e9d6";} 1140 .icon-arrow-small-down:before{content:"\e9d6";}
1141 .icon-arrow-small-left:before{content:"\e9d7";} 1141 .icon-arrow-small-left:before{content:"\e9d7";}
1142 .icon-arrow-small-right:before{content:"\e9d8";} 1142 .icon-arrow-small-right:before{content:"\e9d8";}
1143 .icon-arrow-small-up:before{content:"\e9d9";} 1143 .icon-arrow-small-up:before{content:"\e9d9";}
1144 .icon-check:before{content:"\e9db";} 1144 .icon-check:before{content:"\e9db";}
1145 .icon-chevron-down:before{content:"\e9dc";} 1145 .icon-chevron-down:before{content:"\e9dc";}
1146 .icon-chevron-left:before{content:"\e9dd";} 1146 .icon-chevron-left:before{content:"\e9dd";}
1147 .icon-chevron-right:before{content:"\e9de";} 1147 .icon-chevron-right:before{content:"\e9de";}
1148 .icon-chevron-up:before{content:"\e9df";} 1148 .icon-chevron-up:before{content:"\e9df";}
1149 .icon-clippy:before{content:"\f035";} 1149 .icon-clippy:before{content:"\f035";}
1150 .icon-comment:before{content:"\f02b";} 1150 .icon-comment:before{content:"\f02b";}
1151 .icon-comment-discussion:before{content:"\f04f";} 1151 .icon-comment-discussion:before{content:"\f04f";}
1152 .icon-dash:before{content:"\e9e2";} 1152 .icon-dash:before{content:"\e9e2";}
1153 .icon-diff:before{content:"\e9e3";} 1153 .icon-diff:before{content:"\e9e3";}
1154 .icon-diff-added:before{content:"\e9e4";} 1154 .icon-diff-added:before{content:"\e9e4";}
1155 .icon-diff-ignored:before{content:"\e9e5";} 1155 .icon-diff-ignored:before{content:"\e9e5";}
1156 .icon-diff-modified:before{content:"\e9e6";} 1156 .icon-diff-modified:before{content:"\e9e6";}
1157 .icon-diff-removed:before{content:"\e9e7";} 1157 .icon-diff-removed:before{content:"\e9e7";}
1158 .icon-diff-renamed:before{content:"\e9e8";} 1158 .icon-diff-renamed:before{content:"\e9e8";}
1159 .icon-file-media:before{content:"\f012";} 1159 .icon-file-media:before{content:"\f012";}
1160 .icon-fold:before{content:"\e9ea";} 1160 .icon-fold:before{content:"\e9ea";}
1161 .icon-gear:before{content:"\e9eb";} 1161 .icon-gear:before{content:"\e9eb";}
1162 .icon-git-branch:before{content:"\e9ec";} 1162 .icon-git-branch:before{content:"\e9ec";}
1163 .icon-git-commit:before{content:"\e9ed";} 1163 .icon-git-commit:before{content:"\e9ed";}
1164 .icon-git-compare:before{content:"\e9ee";} 1164 .icon-git-compare:before{content:"\e9ee";}
1165 .icon-git-merge:before{content:"\e9ef";} 1165 .icon-git-merge:before{content:"\e9ef";}
1166 .icon-git-pull-request:before{content:"\e9f0";} 1166 .icon-git-pull-request:before{content:"\e9f0";}
1167 .icon-graph:before{content:"\f043";} 1167 .icon-graph:before{content:"\f043";}
1168 .icon-law:before{content:"\e9f1";} 1168 .icon-law:before{content:"\e9f1";}
1169 .icon-list-ordered:before{content:"\e9f2";} 1169 .icon-list-ordered:before{content:"\e9f2";}
1170 .icon-list-unordered:before{content:"\e9f3";} 1170 .icon-list-unordered:before{content:"\e9f3";}
1171 .icon-mail5:before{content:"\e9f4";} 1171 .icon-mail5:before{content:"\e9f4";}
1172 .icon-mail-read:before{content:"\e9f5";} 1172 .icon-mail-read:before{content:"\e9f5";}
1173 .icon-mention:before{content:"\e9f6";} 1173 .icon-mention:before{content:"\e9f6";}
1174 .icon-mirror:before{content:"\f024";} 1174 .icon-mirror:before{content:"\f024";}
1175 .icon-move-down:before{content:"\f0a8";} 1175 .icon-move-down:before{content:"\f0a8";}
1176 .icon-move-left:before{content:"\f074";} 1176 .icon-move-left:before{content:"\f074";}
1177 .icon-move-right:before{content:"\f0a9";} 1177 .icon-move-right:before{content:"\f0a9";}
1178 .icon-move-up:before{content:"\f0a7";} 1178 .icon-move-up:before{content:"\f0a7";}
1179 .icon-person:before{content:"\f018";} 1179 .icon-person:before{content:"\f018";}
1180 .icon-plus22:before{content:"\e9f7";} 1180 .icon-plus22:before{content:"\e9f7";}
1181 .icon-primitive-dot:before{content:"\f052";} 1181 .icon-primitive-dot:before{content:"\f052";}
1182 .icon-primitive-square:before{content:"\f053";} 1182 .icon-primitive-square:before{content:"\f053";}
1183 .icon-repo-forked:before{content:"\e9f8";} 1183 .icon-repo-forked:before{content:"\e9f8";}
1184 .icon-screen-full:before{content:"\e9f9";} 1184 .icon-screen-full:before{content:"\e9f9";}
1185 .icon-screen-normal:before{content:"\e9fa";} 1185 .icon-screen-normal:before{content:"\e9fa";}
1186 .icon-sync:before{content:"\e9fb";} 1186 .icon-sync:before{content:"\e9fb";}
1187 .icon-three-bars:before{content:"\e9fc";} 1187 .icon-three-bars:before{content:"\e9fc";}
1188 .icon-unfold:before{content:"\e9fe";} 1188 .icon-unfold:before{content:"\e9fe";}
1189 .icon-versions:before{content:"\e9ff";} 1189 .icon-versions:before{content:"\e9ff";}
1190 .icon-x:before{content:"\ea00";} 1190 .icon-x:before{content:"\ea00";}
1191 1191
imports/client/layouts/OrgApp.js
1 import React from 'react'; 1 import React, { Component } from 'react';
2 import { Grid } from 'react-bootstrap'; 2 import { Grid } from 'react-bootstrap';
3 import AppNavigation from '/imports/client/views/org/app/module/navigation/AppNavigation'; 3 import {AppNavigationController} from '/imports/client/views/org/app/module/navigation/index';
4 /**
5 * user based redirection will take place here
6 */
7 export class App extends Component {
8 constructor(props) {
9 super(props);
10 this.state = {
4 11
5 const App = ({ children }) => ( 12 };
6 <div> 13 };
7 <AppNavigation /> 14 render(){
8 <Grid> 15 return (
9 { children } 16 <div>
10 </Grid> 17 <AppNavigationController />
11 </div> 18 <Grid>
12 ); 19 { this.props.children }
13 20 </Grid>
14 App.propTypes = { 21 </div>
15 children: React.PropTypes.node, 22 )
16 }; 23 }
17 24 }
18 export default App;
imports/client/views/etc/index.js
1 // import { InviteSignupController } from '/imports/client/views/invite/signup/index' 1 // import { InviteSignupController } from '/imports/client/views/invite/signup/index'
2 import _ from 'lodash'; 2 import _ from 'lodash';
3 import { 3 import {
4 composeWithTracker, 4 composeWithTracker,
5 compose, 5 compose,
6 composeAll 6 composeAll
7 } from 'react-komposer'; 7 } from 'react-komposer';
8 import { InviteSignupView } from './InviteSignupView';
9 import { Loading } from '/imports/client/components/Loading'; 8 import { Loading } from '/imports/client/components/Loading';
10 9
11 import { Invitations } from '/imports/collections/invitations/index';
12 import { Orgs } from '/imports/collections/orgs/index'; 10 import { Orgs } from '/imports/collections/orgs/index';
11 import { Users } from '/imports/collections/users/index';
13 12
14 const meteorTick = (props, onData) => { 13 const meteorTick = (props, onData) => {
15 14
16 const handles = [ 15 const handles = [
17 Meteor.subscribe('invitations.withToken') 16 Meteor.subscribe('users.current')
18 ]; 17 ];
19 18
20 if(_.every(handles, (handle) => (handle.ready()) )) { 19 if(_.every(handles, (handle) => (handle.ready()) )) {
21 const invitation = Invitations.findOne({}); 20 const user = Users.current();
22 onData(null, { 21 onData(null, {
23 data: { 22 data: {
23 user: user,
24 }, 24 },
25 }); 25 });
26 } 26 }
27 27
28 return () => { 28 return () => {
29 _.each(handles, (handle) => handle.stop() ); 29 _.each(handles, (handle) => handle.stop() );
30 }; 30 };
31 }; 31 };
32 32
33 33
34 const reduxTick = (props, onData) => { 34 const reduxTick = (props, onData) => {
35 onData(null, { 35 onData(null, {
36 data: {} 36 data: {}
37 }); 37 });
38 }; 38 };
39 39
40 40
41 export const InviteSignupController = composeAll( 41 export const InviteSignupController = composeAll(
42 composeWithTracker(meteorTick, Loading), 42 composeWithTracker(meteorTick, Loading),
43 compose(reduxTick, Loading), 43 compose(reduxTick, Loading),
imports/client/views/org/app/module/AppLayout.js
1 import _ from 'lodash'; 1 import _ from 'lodash';
2 import { Meteor } from 'meteor/meteor'; 2 import { Meteor } from 'meteor/meteor';
3 import React, { Component } from 'react'; 3 import React, { Component } from 'react';
4 import { Link } from 'react-router'; 4 import { Link } from 'react-router';
5 import { Avatar } from '/imports/client/components/Avatar'; 5 import { Avatar } from '/imports/client/components/Avatar';
6 import { Icon } from '/imports/client/components/Icon'; 6 import { Icon } from '/imports/client/components/Icon';
7 import classNames from 'classnames'; 7 import classNames from 'classnames';
8 import { EnterModule } from '/imports/client/views/org/enter/module/index';
9 // import { VerifyModule } from '/imports/client/views/verify/module/index';
8 10
9 11
10 export class AppLayout extends Component { 12 export class AppLayout extends Component {
11 13
12
13
14
15
16
17 render() { 14 render() {
15 console.log(this.props);
18 const {user} = this.props.data; 16 const {user} = this.props.data;
19 17
20 if(!user) { 18 if(!user) {
21 return ( 19 return (
22 <div className="NotLoggedIn"></div> 20 <EnterModule
21 pane = {this.props.location.query.enter}
22 location = {this.props.location}
23 />
23 ); 24 );
24 } 25 }
25 return ( 26 return (
26 <div className = "appLayout-box"> 27 <div className = "appLayout-box">
27 28
28 <div className = "appLayout-wrapOuter"> 29 <div className = "appLayout-wrapOuter">
29 <div className = "appLayout-wrapInner"> 30 <div className = "appLayout-wrapInner">
30 <div className = "appLayout-menuWrap"> 31 <div className = "appLayout-menuWrap">
31 32
32 </div> 33 </div>
33 <div className = "appLayout-contentWrap"> 34 <div className = "appLayout-contentWrap">
34 <div className = "appLayout-content"> 35 <div className = "appLayout-content">
35 { this.props.children } 36 { this.props.children }
36 </div> 37 </div>
37 </div> 38 </div>
38 </div> 39 </div>
39 </div> 40 </div>
40 </div> 41 </div>
imports/client/views/org/app/module/navigation/AppNavigation.js
1 import React from 'react'; 1 import React, { Component } from 'react';
2 import { Navbar } from 'react-bootstrap'; 2 import { Navbar } from 'react-bootstrap';
3 import { Link } from 'react-router'; 3 import { Link } from 'react-router';
4 import PublicNavigation from './PublicNavigation.js'; 4 import {PublicNavigation} from './PublicNavigation.js';
5 import AuthenticatedNavigation from './AuthenticatedNavigation.js'; 5 import {AuthenticatedNavigation} from './AuthenticatedNavigation.js';
6 import '/imports/client/assets/css/icons/icomoon/styles.css'; 6 import '/imports/client/assets/css/icons/icomoon/styles.css';
7 import '/imports/client/assets/css/bootstrap.css'; 7 import '/imports/client/assets/css/bootstrap.css';
8 import '/imports/client/assets/css/core.css'; 8 import '/imports/client/assets/css/core.css';
9 import '/imports/client/assets/css/components.css'; 9 import '/imports/client/assets/css/components.css';
10 import '/imports/client/assets/css/colors.css'; 10 import '/imports/client/assets/css/colors.css';
11 const renderNavigation = hasUser => (hasUser ? <AuthenticatedNavigation /> : <PublicNavigation />); 11 import '/imports/client/assets/css/colors.css';
12 const AppNavigation = ({ hasUser }) => ( 12 export class AppNavigation extends Component {
13 <Navbar className="navbar-inverse bg-crimson">
14 <Navbar.Header>
15 <Navbar.Brand>
16 <Link to="/">Home</Link>
17 </Navbar.Brand>
18 <Navbar.Toggle />
19 </Navbar.Header>
20 <Navbar.Collapse>
21 { renderNavigation(hasUser) }
22 </Navbar.Collapse>
23 </Navbar>
24 );
25 13
26 AppNavigation.propTypes = { 14 constructor(props) {
27 hasUser: React.PropTypes.object, 15 super(props);
28 }; 16 this.state = {
17
18 };
19 };
20
21 onUpdate(key, value) {
22 this.setState({[key]: value});
23 };
24 render() {
25 const {user} = this.props.data;
26 if(user){
27 return(
28 <AuthenticatedNavigation
29 data = {this.props.data}
30 />
31 )
32 }else{
33 return(
34 <Navbar>
35 <Navbar.Header>
36 <Navbar.Brand>
37 <Link to="/">Application Name</Link>
38 </Navbar.Brand>
39 <Navbar.Toggle />
40 </Navbar.Header>
41 <Navbar.Collapse>
42 <PublicNavigation />
43 </Navbar.Collapse>
imports/client/views/org/app/module/navigation/AuthenticatedNavigation.js
1 import React from 'react'; 1 import React, { Component } from 'react';
2 import { browserHistory } from 'react-router'; 2 import { browserHistory } from 'react-router';
3 import { LinkContainer } from 'react-router-bootstrap'; 3 import { LinkContainer } from 'react-router-bootstrap';
4 import { Nav, NavItem, NavDropdown, MenuItem } from 'react-bootstrap'; 4 import { Nav, NavItem,
5 import { Meteor } from 'meteor/meteor'; 5 NavDropdown, MenuItem } from 'react-bootstrap';
6 import { Meteor } from 'meteor/meteor';
6 7
7 const handleLogout = () => Meteor.logout(() => browserHistory.push('/login')); 8 const handleLogout = () => Meteor.logout(() => browserHistory.push('/login'));
8 9
9 const userName = () => { 10 export class AuthenticatedNavigation extends Component {
10 const user = Meteor.user(); 11 constructor(props) {
11 const name = user && user.profile ? user.profile.name : ''; 12 super(props);
12 return user ? `${name.first} ${name.last}` : ''; 13 this.state = {
13 };
14 14
15 const AuthenticatedNavigation = () => ( 15 };
16 };
17 render(){
18 const {user} = this.props.data;
19 return(
16 <div> 20 <div>
17 <Nav> 21 <div className="navbar navbar-inverse bg-crimson">
18 <LinkContainer to="/documents"> 22 <div className="navbar-header">
19 <NavItem eventKey={ 2 } href="/documents">Documents</NavItem> 23 <a className="navbar-brand" href="index.html"><span className="glyphicon glyphicon-link"></span>
20 </LinkContainer> 24 <span> YOUNGDESK </span>
21 </Nav> 25 </a>
22 <Nav pullRight> 26
23 <NavDropdown eventKey={ 3 } title={ userName() } id="basic-nav-dropdown"> 27 <ul className="nav navbar-nav visible-xs-block">
24 <MenuItem eventKey={ 3.1 } onClick={ handleLogout }>Logout</MenuItem> 28 <li><a data-toggle="collapse" data-target="#navbar-mobile"><i className="icon-tree5"></i></a></li>
25 </NavDropdown> 29 <li><a className="sidebar-mobile-main-toggle"><i className="icon-paragraph-justify3"></i></a></li>
26 </Nav> 30 </ul>
31 </div>
32
33 <div className="navbar-collapse collapse" id="navbar-mobile">
34 <ul className="nav navbar-nav">
35 <li><a className="sidebar-control sidebar-main-toggle hidden-xs"><i className="icon-paragraph-justify3"></i></a></li>
36
37 <li className="dropdown">
38 <a href="#" className="dropdown-toggle" data-toggle="dropdown">
39 <i className="icon-puzzle3"></i>
40 <span className="visible-xs-inline-block position-right">Git updates</span>
41 <span className="status-mark border-orange-400"></span>
42 </a>
43
44 <div className="dropdown-menu dropdown-content">
45 <div className="dropdown-content-heading">
46 Git updates
47 <ul className="icons-list">
48 <li><a href="#"><i className="icon-sync"></i></a></li>
49 </ul>
50 </div>
51
52 <ul className="media-list dropdown-content-body width-350">
53 <li className="media">
54 <div className="media-left">
55 <a href="#" className="btn border-primary text-primary btn-flat btn-rounded btn-icon btn-sm"><i className="icon-git-pull-request"></i></a>
56 </div>
57
58 <div className="media-body">
59 Drop the IE <a href="#">specific hacks</a> for temporal inputs
60 <div className="media-annotation">4 minutes ago</div>
61 </div>
62 </li>
63
64 <li className="media">
65 <div className="media-left">
66 <a href="#" className="btn border-warning text-warning btn-flat btn-rounded btn-icon btn-sm"><i className="icon-git-commit"></i></a>
67 </div>
68
69 <div className="media-body">
70 Add full font overrides for popovers and tooltips
71 <div className="media-annotation">36 minutes ago</div>
72 </div>
73 </li>
74
75 <li className="media">
76 <div className="media-left">
77 <a href="#" className="btn border-info text-info btn-flat btn-rounded btn-icon btn-sm"><i className="icon-git-branch"></i></a>
78 </div>
79
80 <div className="media-body">
81 <a href="#">Chris Arney</a> created a new <span className="text-semibold">Design</span> branch
82 <div className="media-annotation">2 hours ago</div>
83 </div>
84 </li>
85
86 <li className="media">
87 <div className="media-left">
88 <a href="#" className="btn border-success text-success btn-flat btn-rounded btn-icon btn-sm"><i className="icon-git-merge"></i></a>
89 </div>
90
91 <div className="media-body">
92 <a href="#">Eugene Kopyov</a> merged <span className="text-semibold">Master</span> and <span className="text-semibold">Dev</span> branches
93 <div className="media-annotation">Dec 18, 18:36</div>
94 </div>
95 </li>
96
97 <li className="media">
98 <div className="media-left">
99 <a href="#" className="btn border-primary text-primary btn-flat btn-rounded btn-icon btn-sm"><i className="icon-git-pull-request"></i></a>
100 </div>
101
102 <div className="media-body">
103 Have Carousel ignore keyboard events
104 <div className="media-annotation">Dec 12, 05:46</div>
105 </div>
106 </li>
107 </ul>
108
109 <div className="dropdown-content-footer">
110 <a href="#" data-popup="tooltip" title="All activity"><i className="icon-menu display-block"></i></a>
111 </div>
112 </div>
113 </li>
114 </ul>
115
116 <div className="navbar-right">
117 <p className="navbar-text">Hello {`${user.firstName} ${user.lastName}`}!</p>
118 <p className="navbar-text"><span className="label bg-success-400">Online</span></p>
119
120 <ul className="nav navbar-nav">
121 <li className="dropdown">
122 <a href="#" className="dropdown-toggle" data-toggle="dropdown">
123 <i className="icon-bell2"></i>
124 <span className="visible-xs-inline-block position-right">Activity</span>
125 <span className="status-mark border-orange-400"></span>
126 </a>
127
128 <div className="dropdown-menu dropdown-content">
129 <div className="dropdown-content-heading">
130 Activity
131 <ul className="icons-list">
132 <li><a href="#"><i className="icon-menu7"></i></a></li>
133 </ul>
134 </div>
135
136 <ul className="media-list dropdown-content-body width-350">
137 <li className="media">
138 <div className="media-left">
139 <a href="#" className="btn bg-success-400 btn-rounded btn-icon btn-xs"><i className="icon-mention"></i></a>
140 </div>
141
142 <div className="media-body">
143 <a href="#">Taylor Swift</a> mentioned you in a post "Angular JS. Tips and tricks"
144 <div className="media-annotation">4 minutes ago</div>
145 </div>
146 </li>
147
148 <li className="media">
149 <div className="media-left">
150 <a href="#" className="btn bg-pink-400 btn-rounded btn-icon btn-xs"><i className="icon-paperplane"></i></a>
151 </div>
152
153 <div className="media-body">
154 Special offers have been sent to subscribed users by <a href="#">Donna Gordon</a>
155 <div className="media-annotation">36 minutes ago</div>
156 </div>
157 </li>
158
159 <li className="media">
160 <div className="media-left">
161 <a href="#" className="btn bg-blue btn-rounded btn-icon btn-xs"><i className="icon-plus3"></i></a>
162 </div>
163
164 <div className="media-body">
165 <a href="#">Chris Arney</a> created a new <span className="text-semibold">Design</span> branch in <span className="text-semibold">Limitless</span> repository
166 <div className="media-annotation">2 hours ago</div>
167 </div>
168 </li>
169
170 <li className="media">
171 <div className="media-left">
172 <a href="#" className="btn bg-purple-300 btn-rounded btn-icon btn-xs"><i className="icon-truck"></i></a>
173 </div>
174
175 <div className="media-body">
176 Shipping cost to the Netherlands has been reduced, database updated
177 <div className="media-annotation">Feb 8, 11:30</div>
178 </div>
179 </li>
180
181 <li className="media">
182 <div className="media-left">
183 <a href="#" className="btn bg-warning-400 btn-rounded btn-icon btn-xs"><i className="icon-bubble8"></i></a>
184 </div>
185
186 <div className="media-body">
187 New review received on <a href="#">Server side integration</a> services
188 <div className="media-annotation">Feb 2, 10:20</div>
189 </div>
190 </li>
191
192 <li className="media">
193 <div className="media-left">
194 <a href="#" className="btn bg-teal-400 btn-rounded btn-icon btn-xs"><i className="icon-spinner11"></i></a>
195 </div>
196
197 <div className="media-body">
198 <strong>January, 2016</strong> - 1320 new users, 3284 orders, $49,390 revenue
199 <div className="media-annotation">Feb 1, 05:46</div>
200 </div>
201 </li>
202 </ul>
203 </div>
204 </li>
205
206 <li className="dropdown">
207 <a href="#" className="dropdown-toggle" data-toggle="dropdown">
208 <i className="icon-bubble8"></i>
209 <span className="visible-xs-inline-block position-right">Messages</span>
210 <span className="status-mark border-orange-400"></span>
211 </a>
212
213 <div className="dropdown-menu dropdown-content width-350">
214 <div className="dropdown-content-heading">
215 Messages
216 <ul className="icons-list">
217 <li><a href="#"><i className="icon-compose"></i></a></li>
218 </ul>
219 </div>
220
221 <ul className="media-list dropdown-content-body">
222 <li className="media">
223 <div className="media-left">
224 <img src="assets/images/placeholder.jpg" className="img-circle img-sm" alt="" />
225 <span className="badge bg-danger-400 media-badge">5</span>
226 </div>
227
228 <div className="media-body">
229 <a href="#" className="media-heading">
230 <span className="text-semibold">James Alexander</span>
231 <span className="media-annotation pull-right">04:58</span>
232 </a>
233
234 <span className="text-muted">who knows, maybe that would be the best thing for me...</span>
235 </div>
236 </li>
237
238 <li className="media">
239 <div className="media-left">
240 <img src="assets/images/placeholder.jpg" className="img-circle img-sm" alt="" />
241 <span className="badge bg-danger-400 media-badge">4</span>
242 </div>
243
244 <div className="media-body">
245 <a href="#" className="media-heading">
246 <span className="text-semibold">Margo Baker</span>
247 <span className="media-annotation pull-right">12:16</span>
248 </a>
249
250 <span className="text-muted">That was something he was unable to do because...</span>
251 </div>
252 </li>
253
254 <li className="media">
255 <div className="media-left"><img src="assets/images/placeholder.jpg" className="img-circle img-sm" alt="" /></div>
256 <div className="media-body">
257 <a href="#" className="media-heading">
258 <span className="text-semibold">Jeremy Victorino</span>
259 <span className="media-annotation pull-right">22:48</span>
260 </a>
261
262 <span className="text-muted">But that would be extremely strained and suspicious...</span>
263 </div>
264 </li>
265
266 <li className="media">
267 <div className="media-left"><img src="assets/images/placeholder.jpg" className="img-circle img-sm" alt="" /></div>
268 <div className="media-body">
269 <a href="#" className="media-heading">
270 <span className="text-semibold">Beatrix Diaz</span>
271 <span className="media-annotation pull-right">Tue</span>
272 </a>
273
274 <span className="text-muted">What a strenuous career it is that I have chosen...</span>
275 </div>
276 </li>
277
278 <li className="media">
279 <div className="media-left"><img src="assets/images/placeholder.jpg" className="img-circle img-sm" alt="" /></div>
280 <div className="media-body">
281 <a href="#" className="media-heading">
282 <span className="text-semibold">Richard Vango</span>
283 <span className="media-annotation pull-right">Mon</span>
284 </a>
285
286 <span className="text-muted">Other travelling salesmen live a life of luxury...</span>
287 </div>
288 </li>
289 </ul>
290
291 <div className="dropdown-content-footer">
292 <a href="#" data-popup="tooltip" title="All messages"><i className="icon-menu display-block"></i></a>
293 </div>
294 </div>
295 </li>
296 </ul>
297 </div>
298 </div>
299 </div>
27 </div> 300 </div>
28 ); 301 );
29 302 }
30 export default AuthenticatedNavigation; 303 }
imports/client/views/org/app/module/navigation/PublicNavigation.js
1 import React from 'react'; 1 import React, { Component } from 'react';
2 import { LinkContainer } from 'react-router-bootstrap'; 2 import { LinkContainer } from 'react-router-bootstrap';
3 import { Nav, NavItem } from 'react-bootstrap'; 3 import { setQueryParam } from '/imports/client/app/utils/setQueryParam';
4 import { browserHistory } from 'react-router';
5 import { Nav, NavItem } from 'react-bootstrap';
4 6
5 const PublicNavigation = () => (
6 <Nav pullRight>
7 <LinkContainer to="signup">
8 <NavItem eventKey={ 1 } href="/signup">Sign Up</NavItem>
9 </LinkContainer>
10 <LinkContainer to="login">
11 <NavItem eventKey={ 2 } href="/login">Log In</NavItem>
12 </LinkContainer>
13 </Nav>
14 );
15 7
16 export default PublicNavigation; 8 export class PublicNavigation extends Component {
9 constructor(props) {
10 super(props);
11 this.state = {
12
13 };
14 };
15 render(){
16 console.log(this.props);
17 var mainSite = document.location.hostname.split( "." )[1];
18 var signup = `http://${mainSite}/signup`;
imports/client/views/org/app/module/navigation/index.js
1 import { composeWithTracker } from 'react-komposer'; 1 // import { InviteSignupController } from '/imports/client/views/invite/signup/index'
2 import { Meteor } from 'meteor/meteor'; 2 import _ from 'lodash';
3 import AppNavigation from '../components/AppNavigation.js'; 3 import {
4 composeWithTracker,
5 compose,
6 composeAll
7 } from 'react-komposer';
8 import { Loading } from '/imports/client/components/Loading';
4 9
5 const composer = (props, onData) => onData(null, { hasUser: Meteor.user() }); 10 import { Orgs } from '/imports/collections/orgs/index';
11 import { Users } from '/imports/collections/users/index';
6 12
7 export default composeWithTracker(composer, {}, {}, { pure: false })(AppNavigation); 13 import { AppNavigation } from './AppNavigation';
14
15 const meteorTick = (props, onData) => {
16
17 const handles = [
18 Meteor.subscribe('users.current')
19 ];
20
21 if(_.every(handles, (handle) => (handle.ready()) )) {
22 const user = Users.current();
23 onData(null, {
24 data: {
25 user: user,
26 },
27 });
28 }
29
30 return () => {
31 _.each(handles, (handle) => handle.stop() );
32 };
33 };
34
35
36 const reduxTick = (props, onData) => {
37 onData(null, {
38 data: {}
39 });
40 };
41
42
43 export const AppNavigationController = composeAll(
44 composeWithTracker(meteorTick, Loading),
45 compose(reduxTick, Loading),
46 )(AppNavigation);
8 47
imports/client/views/org/enter/ForgotPane.js
File was created 1 import React from 'react';
2 import { Link } from 'react-router';
3 import { ActionButton } from '/imports/client/components/ActionButton';
4 import { setQueryParam } from '/imports/client/app/utils/setQueryParam';
5 import { Button, Form, FormGroup, Label, Input, FormText, Col } from 'reactstrap';
6 import { Alert } from 'reactstrap';
7 import 'velocity-animate';
8 import 'velocity-animate/velocity.ui';
9 import { VelocityComponent, VelocityTransitionGroup, velocityHelpers } from 'velocity-react';
10 import ReactSVG from 'react-svg'
11
12 export class ForgotPane extends React.Component {
13
14 render() {
15 return (
16 <Col lg={{ size: 6, pull: 2, push: 2, offset: 1 }} md={{ size: 9, pull: 1, push: 1 }} sm={{ size: 10, push: 1, pull: 1 }}>
17 <VelocityTransitionGroup enter={{ animation: "transition.slideRightIn"}} leave={{animation: "transition.fadeOut" }} runOnMount={true}>
18 <div className="enterPane__centerVerticallyWrapper">
19 <Link
20 to={ setQueryParam(this.props.location, { enter: 'login' }) }>
21 <ReactSVG
22 path="/files/images/svg/logo2--white.svg"
23 className="enterPane__logo"
24 />
25 </Link>
26 <div className="enterPane__box">
27 <div className="enterPane__header">
28 Reset your password
29 </div>
30 <Alert color="danger" isOpen={ this.props.data.error.length !== 0 }>
31 { this.props.data.error }
32 </Alert>
33 <Alert color="success" isOpen={ this.props.data.message.length !== 0 }>
34 { this.props.data.message }
35 </Alert>
36 <Form onSubmit={ (e) => this.props.onForgot(e) }>
37 <FormGroup>
38 <Input type="email" size="lg"
39 value={ this.props.data.email }
40 onChange={ (e) => this.props.onUpdate('email', e.currentTarget.value) }
41 name="email"
42 id="email"
43 placeholder="Enter your email" />
44 </FormGroup>
45 <FormGroup>
46 <ActionButton
47 loading={ this.props.data.loading }>
48 <Button
49 color="success" size="lg"
50 type="submit"
51 block>
52 Reset password
53 </Button>
54 </ActionButton>
55 </FormGroup>
56 <FormGroup className="enterPane__formGroup--center">
57 <Link className="enterPane__link"
58 to={ setQueryParam(this.props.location, { enter: 'login' }) }>
59 Log In
60 </Link>
61 </FormGroup>
62 </Form>
63 </div>
64 </div>
65 </VelocityTransitionGroup>
66 </Col>
67 );
68 }
69 }
70
imports/client/views/org/enter/LoginPane.js
File was created 1 import React from 'react';
2 import { Link } from 'react-router';
3 import { ActionButton } from '/imports/client/components/ActionButton';
4 import { setQueryParam } from '/imports/client/app/utils/setQueryParam';
5 import { Button, Form, FormGroup, Label, Input, FormText, Col } from 'reactstrap';
6 import { Alert } from 'reactstrap';
7 import 'velocity-animate';
8 import 'velocity-animate/velocity.ui';
9 import { VelocityComponent, VelocityTransitionGroup, velocityHelpers } from 'velocity-react';
10 import ReactSVG from 'react-svg'
11
12
13 export class LoginPane extends React.Component {
14
15 render() {
16 return (
17 <Col lg={{ size: 6, pull: 2, push: 2, offset: 1 }} md={{ size: 9, pull: 1, push: 1 }} sm={{ size: 10, push: 1, pull: 1 }}>
18 <VelocityTransitionGroup enter={{ animation: "transition.slideRightIn"}} leave={{animation: "transition.fadeOut" }} runOnMount={true}>
19 <div className="enterPane__centerVerticallyWrapper">
20 <Link
21 to={ setQueryParam(this.props.location, { enter: 'login' }) }>
22 <ReactSVG
23 path="/files/images/svg/logo2--white.svg"
24 className="enterPane__logo"
25 />
26 </Link>
27 <div className="enterPane__box">
28 <div className="enterPane__header">
29 Login
30 </div>
31 <Alert color="danger" isOpen={ this.props.data.visible || this.props.data.error.length !== 0 }>
32 { this.props.data.error }
33 </Alert>
34 <Alert color="success" isOpen={ this.props.data.visible || this.props.data.message.length !== 0 }>
35 { this.props.data.message }
36 </Alert>
37 <Form onSubmit={ (e) => this.props.onLogin(e) }>
38 <FormGroup>
39 <Input type="email" size="lg"
40 value={ this.props.data.email }
41 onChange={ (e) => this.props.onUpdate('email', e.currentTarget.value) }
42 name="email"
43 id="email"
44 placeholder="Enter your email" />
45 </FormGroup>
46 <FormGroup>
47 <Input type="password" size="lg"
48 value={ this.props.data.password }
49 onChange={ (e) => this.props.onUpdate('password', e.currentTarget.value) }
50 name="password"
51 id="password"
52 placeholder="Enter your password" />
53 </FormGroup>
54 <FormGroup>
55 <ActionButton
56 loading={ this.props.data.loading }>
57 <Button
58 color="success" size="lg"
59 type="submit"
60 block>
61 Log in
62 </Button>
63 </ActionButton>
64 </FormGroup>
65 <FormGroup className="enterPane__formGroupLogin--center">
66 <Link className="enterPane__link"
67 to={ setQueryParam(this.props.location, { enter: 'forgot' }) }>
68 Forgotten password?
69 </Link>
70 </FormGroup>
71 </Form>
72 </div>
73 </div>
74 </VelocityTransitionGroup>
75 </Col>
76 );
77 }
78 }
79
imports/client/views/org/enter/RecoverPassword.js
1 import React from 'react'; File was deleted
2 import { Row, Col, Alert, FormGroup, FormControl, Button } from 'react-bootstrap';
3 import handleRecoverPassword from './module/recover-password';
4
5 export default class RecoverPassword extends React.Component {
6 componentDidMount() {
7 handleRecoverPassword({ component: this });
8 }
9
10 handleSubmit(event) {
11 event.preventDefault();
12 }
13
14 render() {
15 return (
16 <div className="RecoverPassword">
17 <Row>
18 <Col xs={ 12 } sm={ 6 } md={ 4 }>
19 <h4 className="page-header">Recover Password</h4>
20 <Alert bsStyle="info">
21 Enter your email address below to receive a link to reset your password.
22 </Alert>
23 <form
24 ref={ form => (this.recoverPasswordForm = form) }
25 className="recover-password"
26 onSubmit={ this.handleSubmit }
27 >
28 <FormGroup>
29 <FormControl
30 type="email"
31 ref="emailAddress"
32 name="emailAddress"
33 placeholder="Email Address"
34 />
35 </FormGroup>
36 <Button type="submit" bsStyle="success">Recover Password</Button>
37 </form>
38 </Col>
39 </Row>
40 </div>
41 );
42 }
43 }
44 1 import React from 'react';
imports/client/views/org/enter/ResetPane.js
File was created 1 import React from 'react';
2 import { Link } from 'react-router';
3 import { ActionButton } from '/imports/client/components/ActionButton';
4 import { setQueryParam } from '/imports/client/app/utils/setQueryParam';
5 import { Button, Form, FormGroup, Label, Input, FormText, Col } from 'reactstrap';
6 import { Alert } from 'reactstrap';
7 import 'velocity-animate';
8 import 'velocity-animate/velocity.ui';
9 import { VelocityComponent, VelocityTransitionGroup, velocityHelpers } from 'velocity-react';
10 import ReactSVG from 'react-svg'
11
12
13 export class ResetPane extends React.Component {
14
15 render() {
16 return (
17 <Col lg={{ size: 6, pull: 2, push: 2, offset: 1 }} md={{ size: 9, pull: 1, push: 1 }} sm={{ size: 10, push: 1, pull: 1 }}>
18 <VelocityTransitionGroup enter={{ animation: "transition.slideRightIn"}} leave={{animation: "transition.fadeOut" }} runOnMount={true}>
19 <div className="enterPane__centerVerticallyWrapper">
20 <Link
21 to={ setQueryParam(this.props.location, { enter: 'login' }) }>
22 <ReactSVG
23 path="/files/images/svg/logo2--white.svg"
24 className="enterPane__logo"
25 />
26 </Link>
27 <div className = "enterPane__box">
28 <div className = "enterPane__header">
29 Set new password
30 </div>
31 <Alert color="danger" isOpen={ this.props.data.error.length !== 0 }>
32 { this.props.data.error }
33 </Alert>
34 <Alert color="success" isOpen={ this.props.data.message.length !== 0 }>
35 { this.props.data.message }
36 </Alert>
37 <Form onSubmit={ (e) => this.props.onReset(e) }>
38 <FormGroup>
39 <Input type="password"
40 value={ this.props.data.password }
41 onChange={ (e) => this.props.onUpdate('password', e.currentTarget.value) }
42 name="password"
43 id="password"
44 placeholder="Set new password" />
45 </FormGroup>
46 <FormGroup>
47 <ActionButton
48 loading={ this.props.data.loading }>
49 <Button color="success" size="lg"
50 type="submit"
51 block>
52 Reset password
53 </Button>
54 </ActionButton>
55 </FormGroup>
56 </Form>
57 </div>
58 </div>
59 </VelocityTransitionGroup>
60 </Col>
61 );
62 }
63 }
64
imports/client/views/org/enter/ResetPassword.js
1 import React from 'react'; File was deleted
2 import { Row, Col, Alert, FormGroup, ControlLabel, FormControl, Button } from 'react-bootstrap';
3 import handleResetPassword from './module/reset-password';
4
5 export default class ResetPassword extends React.Component {
6 componentDidMount() {
7 handleResetPassword({ component: this, token: this.props.params.token });
8 }
9
10 handleSubmit(event) {
11 event.preventDefault();
12 }
13
14 render() {
15 return (
16 <div className="ResetPassword">
17 <Row>
18 <Col xs={ 12 } sm={ 6 } md={ 4 }>
19 <h4 className="page-header">Reset Password</h4>
20 <Alert bsStyle="info">
21 To reset your password, enter a new one below. You will be logged in
22 with your new password.
23 </Alert>
24 <form
25 ref={ form => (this.resetPasswordForm = form) }
26 className="reset-password"
27 onSubmit={ this.handleSubmit }
28 >
29 <FormGroup>
30 <ControlLabel>New Password</ControlLabel>
31 <FormControl
32 type="password"
33 ref="newPassword"
34 name="newPassword"
35 placeholder="New Password"
36 />
37 </FormGroup>
38 <FormGroup>
39 <ControlLabel>Repeat New Password</ControlLabel>
40 <FormControl
41 type="password"
42 ref="repeatNewPassword"
43 name="repeatNewPassword"
44 placeholder="Repeat New Password"
45 />
46 </FormGroup>
47 <Button type="submit" bsStyle="success">Reset Password &amp; Login</Button>
48 </form>
49 </Col>
50 </Row>
51 </div>
52 );
53 }
54 }
55
56 ResetPassword.propTypes = {
57 params: React.PropTypes.object,
58 };
59 1 import React from 'react';
imports/client/views/org/enter/SignupPane.js
File was created 1 import React from 'react';
2 import { Link } from 'react-router';
3 import { ActionButton } from '/imports/client/components/ActionButton';
4 import { setQueryParam } from '/imports/client/app/utils/setQueryParam';
5 import { Button, Form, FormGroup, Label, Input, FormText, Col } from 'reactstrap';
6 import 'velocity-animate';
7 import 'velocity-animate/velocity.ui';
8 import { VelocityComponent, VelocityTransitionGroup, velocityHelpers } from 'velocity-react';
9 import ReactSVG from 'react-svg'
10
11
12 export class SignupPane extends React.Component {
13
14 render() {
15 return (
16 <Col lg={{ size: 6, pull: 2, push: 2, offset: 1 }} md={{ size: 9, pull: 1, push: 1 }} sm={{ size: 10, push: 1, pull: 1 }}>
17 <VelocityTransitionGroup enter={{animation: "transition.slideRightIn"}} leave={{animation: "transition.fadeOut"}} runOnMount={true}>
18 <div className="enterPane__centerVerticallyWrapper">
19 <Link
20 to={ setQueryParam(this.props.location, { enter: 'login' }) }>
21 <ReactSVG
22 path="/files/images/svg/logo--white.svg"
23 className="enterPane__logo"
24 />
25 </Link>
26 <div className = "enterPane__box">
27 <div className = "enterPane__header">
28 Start a free 30-day trial
29 </div>
30 <Form onSubmit={ (e) => this.props.onSignup(e) }>
31 <FormGroup>
32 <Input type="text" size="lg"
33 value={ this.props.data.firstName }
34 onChange={ (e) => this.props.onUpdate('firstName', e.currentTarget.value) }
35 name="firstname"
36 id="firstname"
37 placeholder="Enter your first name" />
38 </FormGroup>
39 <FormGroup>
40 <Input type="text" size="lg"
41 value={ this.props.data.lastName }
42 onChange={ (e) => this.props.onUpdate('lastName', e.currentTarget.value) }
43 name="lastname"
44 id="lastname"
45 placeholder="Enter your last name" />
46 </FormGroup>
47 <FormGroup>
48 <Input type="text" size="lg"
49 value={ this.props.data.orgName }
50 onChange={ (e) => this.props.onUpdate('orgName', e.currentTarget.value) }
51 name="companyname"
52 id="companyname"
53 placeholder="Enter your company name" />
54 </FormGroup>
55 <FormGroup>
56 <Input type="email" size="lg"
57 value={ this.props.data.email }
58 onChange={ (e) => this.props.onUpdate('email', e.currentTarget.value) }
59 name="email"
60 id="email"
61 placeholder="Enter your email address" />
62 </FormGroup>
63 <FormGroup>
64 <Input type="password" size="lg"
65 value={ this.props.data.password }
66 onChange={ (e) => this.props.onUpdate('password', e.currentTarget.value) }
67 name="password"
68 id="password"
69 placeholder="Your password" />
70 </FormGroup>
71 <FormGroup>
72 <Button color="success" size="lg"
73 type="submit"
74 block>
75 Create Account
76 </Button>
77 </FormGroup>
78 </Form>
79 </div>
80 <FormGroup className="enterPane__formGroup--center">
81 <Link className="enterPane__login"
82 to={ setQueryParam(this.props.location, { enter: 'login' }) }>
83 Already have an account? Log in.
84 </Link>
85 </FormGroup>
86 </div>
87 </VelocityTransitionGroup>
88 </Col>
89 );
90 }
91 }
92
imports/client/views/org/enter/_old/check-email.js
File was created 1 import React from 'react';
2 import { Link } from 'react-router';
3 import { Row, Col } from 'react-bootstrap';
4
5 export class CheckEmail extends React.Component {
6 handleSubmit(event) {
7 event.preventDefault();
8 }
9
10 render() {
11 const signedEmail = Session.get('signedEmail', '');
12
13 return <Row>
14 <Col xs={ 12 } sm={ 12 } md={ 12 }>
15 <div className="check-email" >
16 <img src="/email_verify.png" width="100" />
17 <h1>Verify Your Email</h1>
18 <h4 className="page-header">We sent a verification email to <b>{signedEmail}</b>. Click the link in the email to get started!</h4>
19 <Link to='/'>Email did not arrive or want to use a different email?</Link>
20 </div>
21 </Col>
22 </Row>;
23 }
24 }
25
imports/client/views/org/enter/_old/recover-password.js
File was created 1 import React from 'react';
2 import { Row, Col, Alert, FormGroup, FormControl, Button } from 'react-bootstrap';
3 import { handleRecoverPassword } from '../../modules/recover-password';
4
5 export class RecoverPassword extends React.Component {
6 componentDidMount() {
7 handleRecoverPassword({ component: this });
8 }
9
10 handleSubmit(event) {
11 event.preventDefault();
12 }
13
14 render() {
15 return <Row>
16 <Col xs={ 12 } sm={ 6 } md={ 4 }>
17 <h4 className="page-header">Recover Password</h4>
18 <Alert bsStyle="info">
19 Enter your email address below to receive a link to reset your password.
20 </Alert>
21 <form ref="recoverPassword" className="recover-password" onSubmit={ this.handleSubmit }>
22 <FormGroup>
23 <FormControl
24 type="email"
25 ref="emailAddress"
26 name="emailAddress"
27 placeholder="Email Address"
28 />
29 </FormGroup>
30 <Button type="submit" bsStyle="success">Recover Password</Button>
31 </form>
32 </Col>
33 </Row>;
34 }
35 }
36
imports/client/views/org/enter/_old/reset-password.js
File was created 1 import React from 'react';
2 import { Row, Col, Alert, FormGroup, ControlLabel, FormControl, Button } from 'react-bootstrap';
3 import { handleResetPassword } from '../../modules/reset-password';
4
5 export class ResetPassword extends React.Component {
6 componentDidMount() {
7 handleResetPassword({
8 component: this,
9 token: this.props.params.token,
10 });
11 }
12
13 handleSubmit(event) {
14 event.preventDefault();
15 }
16
17 render() {
18 return <Row>
19 <Col xs={ 12 } sm={ 6 } md={ 4 }>
20 <h4 className="page-header">Reset Password</h4>
21 <Alert bsStyle="info">
22 To reset your password, enter a new one below. You will be logged in
23 with your new password.
24 </Alert>
25 <form ref="resetPassword" className="reset-password" onSubmit={ this.handleSubmit }>
26 <FormGroup>
27 <ControlLabel>New Password</ControlLabel>
28 <FormControl
29 type="password"
30 ref="newPassword"
31 name="newPassword"
32 placeholder="New Password"
33 />
34 </FormGroup>
35 <FormGroup>
36 <ControlLabel>Repeat New Password</ControlLabel>
37 <FormControl
38 type="password"
39 ref="repeatNewPassword"
40 name="repeatNewPassword"
41 placeholder="Repeat New Password"
42 />
43 </FormGroup>
44 <Button type="submit" bsStyle="success">Reset Password &amp; Login</Button>
45 </form>
46 </Col>
47 </Row>;
48 }
49 }
50
51 ResetPassword.propTypes = {
52 params: React.PropTypes.object,
53 };
54
imports/client/views/org/enter/_old/signup.js
File was created 1 import React from 'react';
2 import { Link } from 'react-router';
3 import { Row, Col, FormGroup, ControlLabel, FormControl, Button } from 'react-bootstrap';
4 import { handleSignup } from '../../modules/signup';
5
6 export class Signup extends React.Component {
7 componentDidMount() {
8 handleSignup({ component: this });
9 }
10
11 handleSubmit(event) {
12 event.preventDefault();
13 }
14
15 render() {
16 return <Row>
17 <Col xs={ 12 } sm={ 6 } md={ 4 }>
18 <h4 className="page-header">Sign Up</h4>
19 <form ref="signup" className="signup" onSubmit={ this.handleSubmit }>
20 <Row>
21 <Col xs={ 6 } sm={ 6 }>
22 <FormGroup>
23 <ControlLabel>First Name</ControlLabel>
24 <FormControl
25 type="text"
26 ref="firstName"
27 name="firstName"
28 placeholder="First Name"
29 />
30 </FormGroup>
31 </Col>
32 <Col xs={ 6 } sm={ 6 }>
33 <FormGroup>
34 <ControlLabel>Last Name</ControlLabel>
35 <FormControl
36 type="text"
37 ref="lastName"
38 name="lastName"
39 placeholder="Last Name"
40 />
41 </FormGroup>
42 </Col>
43 </Row>
44 <FormGroup>
45 <ControlLabel>Email Address</ControlLabel>
46 <FormControl
47 type="text"
48 ref="emailAddress"
49 name="emailAddress"
50 placeholder="Email Address"
51 />
52 </FormGroup>
53 <FormGroup>
54 <ControlLabel>Password</ControlLabel>
55 <FormControl
56 type="password"
57 ref="password"
58 name="password"
59 placeholder="Password"
60 />
61 </FormGroup>
62 <Button type="submit" bsStyle="success">Sign Up</Button>
63 </form>
64 <p>Already have an account? <Link to="/login">Log In</Link>.</p>
65 </Col>
66 </Row>;
67 }
68 }
69
imports/client/views/org/enter/login/LoginView.js
1 import React,{ Component } from 'react'; File was deleted
2 import { Link } from 'react-router';
3 import { Row, Col, FormGroup,
4 ControlLabel, FormControl,
5 Button } from 'react-bootstrap';
6 import handleLogin from './login';
7
8 export class LoginView extends React.Component {
9 componentDidMount() {
10 handleLogin({ component: this });
11 }
12
13 handleSubmit(event) {
14 event.preventDefault();
15 }
16
17 render() {
18 return (
19 <div className="Login">
20 <Row>
21 <Col xs={ 12 } sm={ 6 } md={ 4 }>
22 <h4 className="page-header">Login</h4>
23 <form
24 ref={ form => (this.loginForm = form) }
25 className="login"
26 onSubmit={ this.handleSubmit }
27 >
28 <FormGroup>
29 <ControlLabel>Email Address</ControlLabel>
30 <FormControl
31 type="email"
32 ref="emailAddress"
33 name="emailAddress"
34 placeholder="Email Address"
35 />
36 </FormGroup>
37 <FormGroup>
38 <ControlLabel>
39 <span className="pull-left">Password</span>
40 <Link className="pull-right" to="/recover-password">Forgot Password?</Link>
41 </ControlLabel>
42 <FormControl
43 type="password"
44 ref="password"
45 name="password"
46 placeholder="Password"
47 />
48 </FormGroup>
49 <Button type="submit" bsStyle="success">Login</Button>
50 </form>
51 </Col>
52 </Row>
53 </div>
54 );
55 }
56 }
57 1 import React,{ Component } from 'react';
imports/client/views/org/enter/login/index.js
1 // import { InviteSignupController } from '/imports/client/views/invite/signup/index' File was deleted
2 import _ from 'lodash';
3 import {
4 composeWithTracker,
5 compose,
6 composeAll
7 } from 'react-komposer';
8 import { Loading } from '/imports/client/components/Loading';
9 import { Orgs } from '/imports/collections/orgs/index';
10 import { LoginView } from './LoginView'
11
12 const meteorTick = (props, onData) => {
13
14 const handles = [
15 ];
16
17 if(_.every(handles, (handle) => (handle.ready()) )) {
18 onData(null, {
19 data: {
20 },
21 });
22 }
23
24 return () => {
25 _.each(handles, (handle) => handle.stop() );
26 };
27 };
28
29
30 const reduxTick = (props, onData) => {
31 onData(null, {
32 data: {}
33 });
34 };
35
36
37 export const orgLoginController = composeAll(
38 composeWithTracker(meteorTick, Loading),
39 compose(reduxTick, Loading),
40 )(LoginView);
41 1 // import { InviteSignupController } from '/imports/client/views/invite/signup/index'
imports/client/views/org/enter/login/login.js
1 /* eslint-disable no-undef */ File was deleted
2
3 import { browserHistory } from 'react-router';
4 import { Meteor } from 'meteor/meteor';
5 import { Bert } from 'meteor/themeteorchef:bert';
6 import '/imports/client/components/validation';
7
8 let component;
9
10 const login = () => {
11 const email = document.querySelector('[name="emailAddress"]').value;
12 const password = document.querySelector('[name="password"]').value;
13
14 Meteor.loginWithPassword(email, password, (error) => {
15 if (error) {
16 Bert.alert(error.reason, 'warning');
17 } else {
18 Bert.alert('Logged in!', 'success');
19
20 const { location } = component.props;
21 if (location.state && location.state.nextPathname) {
22 browserHistory.push(location.state.nextPathname);
23 } else {
24 browserHistory.push('/');
25 }
26 }
27 });
28 };
29
30 const validate = () => {
31 $(component.loginForm).validate({
32 rules: {
33 emailAddress: {
34 required: true,
35 email: true,
36 },
37 password: {
38 required: true,
39 },
40 },
41 messages: {
42 emailAddress: {
43 required: 'Need an email address here.',
44 email: 'Is this email address legit?',
45 },
46 password: {
47 required: 'Need a password here.',
48 },
49 },
50 submitHandler() { login(); },
51 });
52 };
53
54 export default function handleLogin(options) {
55 component = options.component;
56 validate();
57 }
58 1 /* eslint-disable no-undef */
imports/client/views/org/enter/module/EnterLayout.js
File was created 1 import _ from 'lodash';
2 import { Meteor } from 'meteor/meteor';
3 import { SimpleSchema } from 'meteor/aldeed:simple-schema';
4 import { Bert } from 'meteor/themeteorchef:bert';
5
6 import React from 'react';
7 import { Container, Row, Col } from 'reactstrap';
8 import { Link } from 'react-router';
9 import { If, Case } from '/imports/client/components/Logic';
10
11 import { LoginPane } from '/imports/client/views/org/enter/LoginPane';
12 import { ForgotPane } from '/imports/client/views/org/enter/ForgotPane';
13 import { ResetPane } from '/imports/client/views/org/enter/ResetPane';
14 import Validation from '/imports/validation/validationMethods';
15
16 // const signupSchemaValidator = new SimpleSchema({
17 // email: { type: String, regEx: SimpleSchema.RegEx.Email},
18 // firstName: { type: String, },
19 // lastName: { type: String, },
20 // password: { type: String, min: 6},
21 // }).validator();
22
23 let validation = new Validation();
24
25 export class EnterLayout extends React.Component {
26
27
28 constructor(props) {
29 super(props);
30 this.state = {
31 email: '',
32 password: '',
33 firstName: '',
34 lastName: '',
35 orgName: '',
36 loading: false,
37 error: '',
38 message: '',
39 };
40 };
41
42 componentWillReceiveProps(nextProps) {
43 console.log(this.props.pane);
44 console.log("this.props.pane");
45 if(this.props.pane !== nextProps.pane) {
46 this.onClearState();
47 }
48 };
49
50
51 onClearState(loading) {
52 this.setState({
53 loading: loading || false,
54 error: '',
55 message: '',
56 });
57 };
58
59 onUpdate(key, value) {
60 this.setState({[key]: value});
61 };
62
63 onForgot(e) {
64 e.preventDefault();
65 this.onClearState(true);
66
67 Accounts.forgotPassword({email: this.state.email || '...'}, (error) => {
68 this.onClearState();
69 if(error) {
70 this.setState({error: 'An error occured.'});
71 } else {
72 this.setState({message: 'Reset email has been sent. Check your inbox.'});
73 }
74 });
75 };
76
77 onReset(e) {
78 e.preventDefault();
79 this.onClearState(true);
80 if(!validation.passwordValidation(this.state.password)){
81 Bert.alert('Password must be a minimum of 6 characters in length.', 'danger');
82 this.onClearState();
83 return false;
84 }else if(!validation.noQwertysAllowed(this.state.password)){
85 Bert.alert('No qwertys allowed!', 'danger');
86 this.onClearState();
87 return false;
88 } else{
89 Accounts.resetPassword(
90 this.props.location.query.token,
91 this.state.password,
92 (error) => {
93 this.onClearState();
94 if(error) {
95 this.setState({error: 'An error occured.'});
96 }
97 }
98 );
99 }
100 };
101
102 onLogin(e) {
103 e.preventDefault();
104 this.onClearState(true);
105 if(this.state.email.trim() == '' || !validation.validateEmail(this.state.email)){
106 this.onClearState();
107 Bert.alert('Please enter a valid email address!', 'danger');
108 return false;
109 }
110 if(this.state.password.trim() == ''){
111 Bert.alert('Please enter your password!', 'danger');
112 this.onClearState();
113 return false;
114 }
115 Meteor.loginWithPassword(
116 this.state.email,
117 this.state.password,
118 (e, r) => {
119 this.onClearState();
120 if(e) {
121 this.setState({error: 'Wrong email or password.'})
122 }
123 }
124 );
125 };
126
127 render() {
128 return (
129 <div className = "enterLayout__content--bg">
130 <Container>
131 <Row>
132 <Case
133 switch = {this.props.pane}
134 case0 = "forgot"
135 then0 = {() => (
136 <ForgotPane
137 data = {this.state}
138 location = {this.props.location}
139 onUpdate = {(...a) => this.onUpdate(...a)}
140 onForgot = {(...a) => this.onForgot(...a)}
141 />
142 )}
143 case1 = "reset"
144 then1 = {() => (
145 <ResetPane
146 data = {this.state}
147 location = {this.props.location}
148 onUpdate = {(...a) => this.onUpdate(...a)}
149 onReset = {(...a) => this.onReset(...a)}
150 />
151 )}
152 else = {() => (
153 <LoginPane
154 data = {this.state}
155 location = {this.props.location}
156 onUpdate = {(...a) => this.onUpdate(...a)}
157 onLogin = {(...a) => this.onLogin(...a)}
158 />
159 )}
160 />
161 </Row>
162 </Container>
163 </div>
164 );
165 };
166 };
167
imports/client/views/org/enter/module/index.js
File was created 1 // import { EnterModule } from '/imports/client/views/enter/module/index'
2 import {
3 composeWithTracker,
4 compose,
5 composeAll
6 } from 'react-komposer';
7 import { EnterLayout } from './EnterLayout';
8 import { Loading } from '/imports/client/components/Loading';
9
10
11 const meteorTick = (props, onData) => {
12
13 const handles = [
14 ];
15
16 if(_.every(handles, (handle) => (handle.ready()) )) {
17 onData(null, {
18 location: props.location,
19 data: {
20 },
21 });
22 }
23
24 return () => {
25 _.each(handles, (handle) => handle.stop() );
26 };
27 };
28
29
30 const reduxTick = (props, onData) => {
31 onData(null, {
32 data: {}
33 });
34 };
35
36
37 export const EnterModule = composeAll(
38 composeWithTracker(meteorTick, Loading),
39 compose(reduxTick, Loading),
40 )(EnterLayout);
41
42
43
44
45
46
47
imports/client/views/org/enter/module/recover-password.js
1 /* eslint-disable no-undef */ File was deleted
2
3 import { Accounts } from 'meteor/accounts-base';
4 import { Bert } from 'meteor/themeteorchef:bert';
5 import '/imports/client/components/validation';
6
7 let component;
8
9 const handleRecovery = () => {
10 Accounts.forgotPassword({
11 email: document.querySelector('[name="emailAddress"]').value,
12 }, (error) => {
13 if (error) {
14 Bert.alert(error.reason, 'warning');
15 } else {
16 Bert.alert('Check your inbox for a reset link!', 'success');
17 }
18 });
19 };
20
21 const validate = () => {
22 $(component.recoverPasswordForm).validate({
23 rules: {
24 emailAddress: {
25 required: true,
26 email: true,
27 },
28 },
29 messages: {
30 emailAddress: {
31 required: 'Need an email address here.',
32 email: 'Is this email address legit?',
33 },
34 },
35 submitHandler() { handleRecovery(); },
36 });
37 };
38
39 export default function handleRecoverPassword(options) {
40 component = options.component;
41 validate();
42 }
43 1 /* eslint-disable no-undef */
imports/client/views/org/enter/module/reset-password.js
1 /* eslint-disable no-undef */ File was deleted
2
3 import { browserHistory } from 'react-router';
4 import { Accounts } from 'meteor/accounts-base';
5 import { Bert } from 'meteor/themeteorchef:bert';
6 import '/imports/client/components/validation';
7
8 let component;
9 let token;
10
11 const handleReset = () => {
12 const password = document.querySelector('[name="newPassword"]').value;
13 Accounts.resetPassword(token, password, (error) => {
14 if (error) {
15 Bert.alert(error.reason, 'danger');
16 } else {
17 browserHistory.push('/');
18 Bert.alert('Password reset!', 'success');
19 }
20 });
21 };
22
23 const validate = () => {
24 $(component.resetPasswordForm).validate({
25 rules: {
26 newPassword: {
27 required: true,
28 minlength: 6,
29 },
30 repeatNewPassword: {
31 required: true,
32 minlength: 6,
33 equalTo: '[name="newPassword"]',
34 },
35 },
36 messages: {
37 newPassword: {
38 required: 'Enter a new password, please.',
39 minlength: 'Use at least six characters, please.',
40 },
41 repeatNewPassword: {
42 required: 'Repeat your new password, please.',
43 equalTo: 'Hmm, your passwords don\'t match. Try again?',
44 },
45 },
46 submitHandler() { handleReset(); },
47 });
48 };
49
50 export default function handleResetPassword(options) {
51 component = options.component;
52 token = options.token;
53 validate();
54 }
55 1 /* eslint-disable no-undef */
imports/client/views/org/enter_1/RecoverPassword.js
File was created 1 import React from 'react';
2 import { Row, Col, Alert, FormGroup, FormControl, Button } from 'react-bootstrap';
3 import handleRecoverPassword from './module/recover-password';
4
5 export default class RecoverPassword extends React.Component {
6 componentDidMount() {
7 handleRecoverPassword({ component: this });
8 }
9
10 handleSubmit(event) {
11 event.preventDefault();
12 }
13
14 render() {
15 return (
16 <div className="RecoverPassword">
17 <Row>
18 <Col xs={ 12 } sm={ 6 } md={ 4 }>
19 <h4 className="page-header">Recover Password</h4>
20 <Alert bsStyle="info">
21 Enter your email address below to receive a link to reset your password.
22 </Alert>
23 <form
24 ref={ form => (this.recoverPasswordForm = form) }
25 className="recover-password"
26 onSubmit={ this.handleSubmit }
27 >
28 <FormGroup>
29 <FormControl
30 type="email"
31 ref="emailAddress"
32 name="emailAddress"
33 placeholder="Email Address"
34 />
35 </FormGroup>
36 <Button type="submit" bsStyle="success">Recover Password</Button>
37 </form>
38 </Col>
39 </Row>
40 </div>
41 );
42 }
43 }
44
imports/client/views/org/enter_1/ResetPassword.js
File was created 1 import React from 'react';
2 import { Row, Col, Alert, FormGroup, ControlLabel, FormControl, Button } from 'react-bootstrap';
3 import handleResetPassword from './module/reset-password';
4
5 export default class ResetPassword extends React.Component {
6 componentDidMount() {
7 handleResetPassword({ component: this, token: this.props.params.token });
8 }
9
10 handleSubmit(event) {
11 event.preventDefault();
12 }
13
14 render() {
15 return (
16 <div className="ResetPassword">
17 <Row>
18 <Col xs={ 12 } sm={ 6 } md={ 4 }>
19 <h4 className="page-header">Reset Password</h4>
20 <Alert bsStyle="info">
21 To reset your password, enter a new one below. You will be logged in
22 with your new password.
23 </Alert>
24 <form
25 ref={ form => (this.resetPasswordForm = form) }
26 className="reset-password"
27 onSubmit={ this.handleSubmit }
28 >
29 <FormGroup>
30 <ControlLabel>New Password</ControlLabel>
31 <FormControl
32 type="password"
33 ref="newPassword"
34 name="newPassword"
35 placeholder="New Password"
36 />
37 </FormGroup>
38 <FormGroup>
39 <ControlLabel>Repeat New Password</ControlLabel>
40 <FormControl
41 type="password"
42 ref="repeatNewPassword"
43 name="repeatNewPassword"
44 placeholder="Repeat New Password"
45 />
46 </FormGroup>
47 <Button type="submit" bsStyle="success">Reset Password &amp; Login</Button>
48 </form>
49 </Col>
50 </Row>
51 </div>
52 );
53 }
54 }
55
56 ResetPassword.propTypes = {
57 params: React.PropTypes.object,
58 };
59
imports/client/views/org/enter_1/login/LoginView.js
File was created 1 import React,{ Component } from 'react';
2 import { Link } from 'react-router';
3 import { Row, Col, FormGroup,
4 ControlLabel, FormControl,
5 Button } from 'react-bootstrap';
6 import handleLogin from './login';
7
8 export class LoginView extends React.Component {
9 componentDidMount() {
10 handleLogin({ component: this });
11 }
12
13 handleSubmit(event) {
14 event.preventDefault();
15 }
16
17 render() {
18 return (
19 <div className="Login">
20 <Row>
21 <Col xs={ 12 } sm={ 6 } md={ 4 }>
22 <h4 className="page-header">Login</h4>
23 <form
24 ref={ form => (this.loginForm = form) }
25 className="login"
26 onSubmit={ this.handleSubmit }
27 >
28 <FormGroup>
29 <ControlLabel>Email Address</ControlLabel>
30 <FormControl
31 type="email"
32 ref="emailAddress"
33 name="emailAddress"
34 placeholder="Email Address"
35 />
36 </FormGroup>
37 <FormGroup>
38 <ControlLabel>
39 <span className="pull-left">Password</span>
40 <Link className="pull-right" to="/recover-password">Forgot Password?</Link>
41 </ControlLabel>
42 <FormControl
43 type="password"
44 ref="password"
45 name="password"
46 placeholder="Password"
47 />
48 </FormGroup>
49 <Button type="submit" bsStyle="success">Login</Button>
50 </form>
51 </Col>
52 </Row>
53 </div>
54 );
55 }
56 }
57
imports/client/views/org/enter_1/login/index.js
File was created 1 // import { orgLoginController } from '/imports/client/views/org/enter/login/index';
2 import _ from 'lodash';
3 import {
4 composeWithTracker,
5 compose,
6 composeAll
7 } from 'react-komposer';
8 import { Loading } from '/imports/client/components/Loading';
9 import { Orgs } from '/imports/collections/orgs/index';
10 import { LoginView } from './LoginView'
11
12 const meteorTick = (props, onData) => {
13
14 const handles = [
15 ];
16
17 if(_.every(handles, (handle) => (handle.ready()) )) {
18 onData(null, {
19 data: {
20 },
21 });
22 }
23
24 return () => {
25 _.each(handles, (handle) => handle.stop() );
26 };
27 };
28
29
30 const reduxTick = (props, onData) => {
31 onData(null, {
32 data: {}
33 });
34 };
35
36
37 export const orgLoginController = composeAll(
38 composeWithTracker(meteorTick, Loading),
39 compose(reduxTick, Loading),
40 )(LoginView);
41
imports/client/views/org/enter_1/login/login.js
File was created 1 /* eslint-disable no-undef */
2
3 import { browserHistory } from 'react-router';
4 import { Meteor } from 'meteor/meteor';
5 import { Bert } from 'meteor/themeteorchef:bert';
6 import '/imports/client/components/validation';
7
8 let component;
9
10 const login = () => {
11 const email = document.querySelector('[name="emailAddress"]').value;
12 const password = document.querySelector('[name="password"]').value;
13
14 Meteor.loginWithPassword(email, password, (error) => {
15 if (error) {
16 Bert.alert(error.reason, 'warning');
17 } else {
18 Bert.alert('Logged in!', 'success');
19
20 const { location } = component.props;
21 if (location.state && location.state.nextPathname) {
22 browserHistory.push(location.state.nextPathname);
23 } else {
24 browserHistory.push('/');
25 }
26 }
27 });
28 };
29
30 const validate = () => {
31 $(component.loginForm).validate({
32 rules: {
33 emailAddress: {
34 required: true,
35 email: true,
36 },
37 password: {
38 required: true,
39 },
40 },
41 messages: {
42 emailAddress: {
43 required: 'Need an email address here.',
44 email: 'Is this email address legit?',
45 },
46 password: {
47 required: 'Need a password here.',
48 },
49 },
50 submitHandler() { login(); },
51 });
52 };
53
54 export default function handleLogin(options) {
55 component = options.component;
56 validate();
57 }
58
imports/client/views/org/enter_1/module/recover-password.js
File was created 1 /* eslint-disable no-undef */
2
3 import { Accounts } from 'meteor/accounts-base';
4 import { Bert } from 'meteor/themeteorchef:bert';
5 import '/imports/client/components/validation';
6
7 let component;
8
9 const handleRecovery = () => {
10 Accounts.forgotPassword({
11 email: document.querySelector('[name="emailAddress"]').value,
12 }, (error) => {
13 if (error) {
14 Bert.alert(error.reason, 'warning');
15 } else {
16 Bert.alert('Check your inbox for a reset link!', 'success');
17 }
18 });
19 };
20
21 const validate = () => {
22 $(component.recoverPasswordForm).validate({
23 rules: {
24 emailAddress: {
25 required: true,
26 email: true,
27 },
28 },
29 messages: {
30 emailAddress: {
31 required: 'Need an email address here.',
32 email: 'Is this email address legit?',
33 },
34 },
35 submitHandler() { handleRecovery(); },
36 });
37 };
38
39 export default function handleRecoverPassword(options) {
40 component = options.component;
41 validate();
42 }
43
imports/client/views/org/enter_1/module/reset-password.js
File was created 1 /* eslint-disable no-undef */
2
3 import { browserHistory } from 'react-router';
4 import { Accounts } from 'meteor/accounts-base';
5 import { Bert } from 'meteor/themeteorchef:bert';
6 import '/imports/client/components/validation';
7
8 let component;
9 let token;
10
11 const handleReset = () => {
12 const password = document.querySelector('[name="newPassword"]').value;
13 Accounts.resetPassword(token, password, (error) => {
14 if (error) {
15 Bert.alert(error.reason, 'danger');
16 } else {
17 browserHistory.push('/');
18 Bert.alert('Password reset!', 'success');
19 }
20 });
21 };
22
23 const validate = () => {
24 $(component.resetPasswordForm).validate({
25 rules: {
26 newPassword: {
27 required: true,
28 minlength: 6,
29 },
30 repeatNewPassword: {
31 required: true,
32 minlength: 6,
33 equalTo: '[name="newPassword"]',
34 },
35 },
36 messages: {
37 newPassword: {
38 required: 'Enter a new password, please.',
39 minlength: 'Use at least six characters, please.',
40 },
41 repeatNewPassword: {
42 required: 'Repeat your new password, please.',
43 equalTo: 'Hmm, your passwords don\'t match. Try again?',
44 },
45 },
46 submitHandler() { handleReset(); },
47 });
48 };
49
50 export default function handleResetPassword(options) {
51 component = options.component;
52 token = options.token;
53 validate();
54 }
55
imports/startup/client/index.js
1 import { Bert } from 'meteor/themeteorchef:bert'; File was deleted
2 import 'bootstrap/dist/css/bootstrap.min.css';
3 import './routes.js';
4
5 Bert.defaults.style = 'growl-top-right';
6 1 import { Bert } from 'meteor/themeteorchef:bert';
imports/startup/client/routes.js
1 /* eslint-disable max-len */ File was deleted
2
3 import React from 'react';
4 import { render } from 'react-dom';
5 import { Router, Route,
6 IndexRoute, browserHistory } from 'react-router';
7 import { Meteor } from 'meteor/meteor';
8
9 /**
10 * General Components
11 */
12 import Index from '/imports/client/views/app/module/Index';
13
14 /**
15 * Org Components
16 */
17
18 import App from '/imports/client/layouts/OrgApp';
19 import { AppModule } from '/imports/client/views/org/app/module/Index';
20 import { orgLoginController } from '/imports/client/views/org/enter/login/index';
21 import RecoverPassword from '/imports/client/views/org/enter/RecoverPassword';
22 import ResetPassword from '/imports/client/views/org/enter/ResetPassword';
23 import { Orgs } from '/imports/collections/orgs/index';
24 import NotFound from '/imports/client/views/org/NotFound';
25
26 /**
27 * NonOrg Components
28 */
29 import Signup from '/imports/client/views/nonOrg/enter/SignupView';
30
31 /**
32 * Invalid Org Components
33 */
34
35 const authenticate = (nextState, replace) => {
36 if (!Meteor.loggingIn() && !Meteor.userId()) {
37 replace({
38 pathname: '/login',
39 state: { nextPathname: nextState.location.pathname },
40 });
41 }
42 };
43
44
45 const detectOrg = () => {
46 orgSlug = "";
47 var hostnameArray = document.location.hostname.split( "." );
48 if(hostnameArray[1]=='localhost'){
49 orgSlug = hostnameArray[0];
50 }
51 if(orgSlug!=""){
52 Meteor.call('checkExistingOrg', {slug:orgSlug}, function(err, res) {
53 if(res){
54 Session.set('orgId', res._id._str);
55 render(getOrgRoutes(),document.getElementById('app'));
56 }else{
57 render(getInvalidOrgRoute(),document.getElementById('app'));
58 }
59 });
60 }else{
61 render(getNonOrgRoutes(),document.getElementById('app'));
62 }
63 }
64 const checkSlug = (nextState, replace) => {
65 orgId = Session.get('orgId');
66 }
67
68 /**
69 There are three types of routes
70 1)getOrgRoutes: all the routes that should be present for a registered org
71 2)getInvalidOrgRoute: all the routes where someone tries to enter a subdomain which hasn't been registered yet (404 mostly :D)
72 3)getNonOrgRoutes: all routes linked to normal site, ie signing up a new org. CHeking out demo and everything internal
73 **/
74 const getOrgRoutes = () => (
75 <Router history={ browserHistory }>
76 <Route path="/" component={ App }>
77 <IndexRoute name="index" component={ AppModule } />
78 <Route name="login" path="/login" component={ orgLoginController } />
79 <Route name="recover-password" path="/recover-password" component={ RecoverPassword } />
80 <Route name="reset-password" path="/reset-password/:token" component={ ResetPassword } />
81 <Route path="*" component={ NotFound } />
82 </Route>
83 </Router>
84 )
85
86
87 const getInvalidOrgRoute = () => (
88 <Router history={ browserHistory }>
89 <Route path="/" component={ App }>
90 <IndexRoute name="index" component={ NotFound } />
91 <Route path="*" component={ NotFound } />
92 </Route>
93 </Router>
94 )
95
96 const getNonOrgRoutes = () => (
97 <Router history={ browserHistory }>
98 <Route path="/" component={ App }>
99 <IndexRoute name="index" component={ Index } />
100 <Route name="signup" path="/signup" component={ Signup } />
101 <Route path="*" component={ NotFound } />
102 </Route>
103 </Router>
104 )
105
106
107 Meteor.startup(() => {
108 detectOrg();
109 });
110 1 /* eslint-disable max-len */
imports/validation/validationMethods.js
File was created 1 export default class Validation{
2
3 validateEmail (value) {
4 // regex from http://stackoverflow.com/questions/46155/validate-email-address-in-javascript
5 var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
6 return re.test(value);
7 };
8
9 // containsNoSpecialCharacters(str){
10 // return !/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(str);
11 // }
12
13 noSpecialChars(str){
14 str = String(str);
15 return !/[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g.test(str);
16 }
17
18 noQwertysAllowed (str){
19 str = str.toLowerCase();
20 if(str.toLowerCase().indexOf("qwerty") >-1){
21 return false;
22 } else{
23 return true;
24 }
25 }
26
27 passwordValidation (str){
28 if(str.length <6){
29 return false;
30 } else{
31 return true;
32 }
33 }
34
35 isNumberOnly(str){
36 if(!/^\d+$/.test(str)){
37 return false;
38 }else {
39 return true;
40 }
41 }
42 isPositiveNotZeroNumber(str){
43 str = parseFloat(str);
44 if(str <=0){
45 return false;
46 }else {
47 return true;
48 }
49 }
50 isNumeric(n) {
51 return !isNaN(parseFloat(n)) && isFinite(n);
52 }
53
54 isValidACN(str){
55 str = String(str);
56 //Remove any whitespace.
57 str = str.replace(/\s+/g, '');
58 console.log(str);
59 console.log(str.length);
60 if(/^\d+$/.test(str) && str.length ==9){
61 return true;
62 } else{
63 return false;
64 }
65 }
66 isValidShortCode(str){
67 str = String(str);
68 console.log(str);
69 if(str.length < 5 && str.length >2){
70 return true;
71 } else{
72 return false;
73 }
74 }
75 containsNumbers (str){
76 if(/\d/g.test(str)){
77 return true;
78 }else{
79 return false;
80 }
81 }
82 isInt(n){
83 console.log(typeof Number(n));
84 return Number(n) % 1 === 0;
85 }
86
87 isFloat(n){
88 return Number(n) % 1 !== 0;
89 }
90 decimalPlaces(num) {
91 num = parseFloat(num);
92 var match = (''+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
93 if (!match) { return 0; }
94 return Math.max(
95 0,
96 // Number of digits right of decimal point.
97 (match[1] ? match[1].length : 0)
98 // Adjust for scientific notation.
99 - (match[2] ? +match[2] : 0));
100 }
101 };
102
1 { 1 {
2 "name": "application-name", 2 "name": "application-name",
3 "version": "1.0.0", 3 "version": "1.0.0",
4 "description": "Application description.", 4 "description": "Application description.",
5 "scripts": { 5 "scripts": {
6 "start": "meteor --settings settings-development.json", 6 "start": "meteor --settings settings-development.json",
7 "test": "meteor test --driver-package practicalmeteor:mocha --port 5000", 7 "test": "meteor test --driver-package practicalmeteor:mocha --port 5000",
8 "chimp-watch": "chimp --ddp=http://localhost:3000 --watch --mocha --path=tests", 8 "chimp-watch": "chimp --ddp=http://localhost:3000 --watch --mocha --path=tests",
9 "chimp-test": "chimp --ddp=http://localhost:3000 --mocha --path=tests", 9 "chimp-test": "chimp --ddp=http://localhost:3000 --mocha --path=tests",
10 "staging": "meteor deploy staging.meteor.com --settings settings-development.json", 10 "staging": "meteor deploy staging.meteor.com --settings settings-development.json",
11 "production": "meteor deploy production.meteor.com --settings settings-production.json" 11 "production": "meteor deploy production.meteor.com --settings settings-production.json"
12 }, 12 },
13 "devDependencies": { 13 "devDependencies": {
14 "chimp": "^0.41.2", 14 "chimp": "^0.41.2",
15 "eslint": "^3.8.1", 15 "eslint": "^3.8.1",
16 "eslint-config-airbnb": "^12.0.0", 16 "eslint-config-airbnb": "^12.0.0",
17 "eslint-plugin-import": "^1.16.0", 17 "eslint-plugin-import": "^1.16.0",
18 "eslint-plugin-jsx-a11y": "^2.2.3", 18 "eslint-plugin-jsx-a11y": "^2.2.3",
19 "eslint-plugin-meteor": "^4.0.1", 19 "eslint-plugin-meteor": "^4.0.1",
20 "eslint-plugin-react": "^6.4.1" 20 "eslint-plugin-react": "^6.4.1"
21 }, 21 },
22 "eslintConfig": { 22 "eslintConfig": {
23 "parserOptions": { 23 "parserOptions": {
24 "ecmaFeatures": { 24 "ecmaFeatures": {
25 "jsx": true 25 "jsx": true
26 } 26 }
27 }, 27 },
28 "plugins": [ 28 "plugins": [
29 "meteor", 29 "meteor",
30 "react" 30 "react"
31 ], 31 ],
32 "extends": [ 32 "extends": [
33 "airbnb/base", 33 "airbnb/base",
34 "plugin:meteor/guide", 34 "plugin:meteor/guide",
35 "plugin:react/recommended" 35 "plugin:react/recommended"
36 ], 36 ],
37 "env": { 37 "env": {
38 "browser": true 38 "browser": true
39 }, 39 },
40 "globals": { 40 "globals": {
41 "server": false, 41 "server": false,
42 "browser": false, 42 "browser": false,
43 "expect": false 43 "expect": false
44 }, 44 },
45 "rules": { 45 "rules": {
46 "import/no-unresolved": 0, 46 "import/no-unresolved": 0,
47 "import/no-extraneous-dependencies": 0, 47 "import/no-extraneous-dependencies": 0,
48 "import/extensions": 0, 48 "import/extensions": 0,
49 "no-underscore-dangle": [ 49 "no-underscore-dangle": [
50 "error", 50 "error",
51 { 51 {
52 "allow": [ 52 "allow": [
53 "_id", 53 "_id",
54 "_ensureIndex", 54 "_ensureIndex",
55 "_verifyEmailToken", 55 "_verifyEmailToken",
56 "_resetPasswordToken", 56 "_resetPasswordToken",
57 "_name" 57 "_name"
58 ] 58 ]
59 } 59 }
60 ], 60 ],
61 "class-methods-use-this": 0 61 "class-methods-use-this": 0
62 } 62 }
63 }, 63 },
64 "dependencies": { 64 "dependencies": {
65 "babel-runtime": "^6.18.0", 65 "babel-runtime": "^6.18.0",
66 "bcrypt": "^0.8.7", 66 "bcrypt": "^0.8.7",
67 "bootstrap": "^3.3.7", 67 "bootstrap": "^3.3.7",
68 "jquery": "^2.2.4", 68 "jquery": "^2.2.4",
69 "jquery-validation": "^1.15.1", 69 "jquery-validation": "^1.15.1",
70 "react": "^15.3.2", 70 "react": "^15.3.2",
71 "react-addons-css-transition-group": "^15.4.2",
71 "react-addons-pure-render-mixin": "^15.3.2", 72 "react-addons-pure-render-mixin": "^15.3.2",
73 "react-addons-transition-group": "^15.4.2",
72 "react-bootstrap": "^0.30.5", 74 "react-bootstrap": "^0.30.5",
73 "react-dom": "^15.3.2", 75 "react-dom": "^15.3.2",
74 "react-komposer": "^1.13.1", 76 "react-komposer": "^1.13.1",
75 "react-router": "^2.6.1", 77 "react-router": "^2.6.1",
76 "react-router-bootstrap": "^0.23.1", 78 "react-router-bootstrap": "^0.23.1",
77 "react-svg": "^2.1.19" 79 "react-svg": "^2.1.19",
80 "reactstrap": "^4.2.0",
81 "velocity-animate": "^1.4.3",
82 "velocity-react": "^1.2.1"
78 } 83 }
79 } 84 }
80 85