Commit c4d3e07d0fe924ffef30abd83dce85b192f45d77
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
client/main.js
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 & 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 & 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 & 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 |
package.json
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 |