Bladeren bron

added precise proptype for <Card> + bugfix

Skylsmoi 6 jaren geleden
bovenliggende
commit
2645aec934

+ 2 - 1
package.json Bestand weergeven

@@ -5,7 +5,8 @@
5 5
   "main": "index.js",
6 6
   "scripts": {
7 7
     "mockapi": "node jsonserver/server.js",
8
-    "servdev": "NODE_ENV=development webpack-dashboard -- webpack-dev-server --watch --colors --inline --hot --progress",
8
+    "servdev": "NODE_ENV=development webpack-dev-server --watch --colors --inline --hot --progress",
9
+    "servdev-dashboard": "NODE_ENV=development webpack-dashboard -- webpack-dev-server --watch --colors --inline --hot --progress",
9 10
     "build": "NODE_ENV=production webpack -p",
10 11
     "test": "echo \"Error: no test specified\" && exit 1"
11 12
   },

+ 19 - 2
src/component/common/Card/Card.jsx Bestand weergeven

@@ -1,6 +1,8 @@
1 1
 import React from 'react'
2 2
 import PropTypes from 'prop-types'
3 3
 import classnames from 'classnames'
4
+import CardHeader from './CardHeader.jsx'
5
+import CardBody from './CardBody.jsx'
4 6
 
5 7
 const Card = props => {
6 8
   return (
@@ -11,8 +13,23 @@ const Card = props => {
11 13
 }
12 14
 export default Card
13 15
 
14
-Card.PropTypes = {
15
-  children: PropTypes.element.isRequired,
16
+Card.propTypes = {
17
+  // check https://stackoverflow.com/questions/27366077/only-allow-children-of-a-specific-type-in-a-react-component
18
+  // children: PropTypes.arrayOf( // children is an array
19
+  //   PropTypes.shape({ // of objects
20
+  //     type: PropTypes.oneOf([CardHeader, CardBody]) // that as an attribute 'type' equals to CardHeader or CardBody
21
+  //   })
22
+  // ),
23
+
24
+  // from http://www.mattzabriskie.com/blog/react-validating-children
25
+  children: PropTypes.arrayOf((propValue, key, componentName /* , location, propFullName */) => {
26
+    if (
27
+      key >= 3 ||
28
+      propValue.some(p => p.type !== CardHeader && p.type !== CardBody)
29
+    ) {
30
+      return new Error(`PropType Error: childrens of ${componentName} must be: 1 CardHeader and 1 CardBody.`)
31
+    }
32
+  }).isRequired,
16 33
   customClass: PropTypes.string
17 34
 }
18 35
 

+ 6 - 5
src/component/common/Input/InputCheckbox.jsx Bestand weergeven

@@ -4,12 +4,13 @@ import classnames from 'classnames'
4 4
 
5 5
 const InputGroupText = props => {
6 6
   return (
7
-    <div className={classnames(`${props.parentClassName}`, props.customClass, 'form-check')}>
8
-      <label className={classnames(`${props.parentClassName}__label`, 'form-check-label')}>
9
-        <input type='checkbox' className={classnames(`${props.parentClassName}__label__checkbox`, 'form-check-input')} />
7
+    <label className={classnames(`${props.parentClassName}`, props.customClass, 'custom-control custom-checkbox')}>
8
+      <input type='checkbox' className='custom-control-input' />
9
+      <span className={classnames(`${props.parentClassName}__checkbox`, 'custom-control-indicator')} />
10
+      <span className={classnames(`${props.parentClassName}__label`, 'custom-control-description')}>
10 11
         {props.label}
11
-      </label>
12
-    </div>
12
+      </span>
13
+    </label>
13 14
   )
14 15
 }
15 16
 

+ 3 - 1
src/component/common/Input/InputGroupText.jsx Bestand weergeven

@@ -12,6 +12,7 @@ const InputGroupText = props => {
12 12
         type={props.type}
13 13
         className={classnames(`${props.parentClassName}__input`, 'form-control')}
14 14
         placeholder={props.placeHolder}
15
+        value={props.value}
15 16
         onChange={props.onChange}
16 17
       />
17 18
       <div className={classnames(`${props.parentClassName}__msgerror`, 'invalid-feedback')}>
@@ -25,9 +26,10 @@ export default InputGroupText
25 26
 
26 27
 InputGroupText.PropTypes = {
27 28
   parentClassName: PropTypes.string.isRequired,
29
+  value: PropTypes.string.isRequired,
30
+  type: PropTypes.oneOf(['text', 'email', 'password', 'tel']).isRequired,
28 31
   customClass: PropTypes.string,
29 32
   icon: PropTypes.string,
30
-  type: PropTypes.oneOf(['text', 'email', 'password', 'tel']).isRequired,
31 33
   placeHolder: PropTypes.string,
32 34
   invalidMsg: PropTypes.string,
33 35
   onChange: PropTypes.func

+ 59 - 80
src/container/Login.jsx Bestand weergeven

@@ -26,94 +26,73 @@ class Login extends React.Component {
26 26
   handleClickSubmit = () => this.props.dispatch(userLogin(this.state.inputLogin, this.state.inputPassword))
27 27
 
28 28
   render () {
29
-    // const { user } = this.props
30
-    // return (
31
-    //   <div>
32
-    //     <ConnectionForm
33
-    //       user={user}
34
-    //       onChangeLogin={this.handleChangeLogin}
35
-    //       onChangePassword={this.handleChangePassword}
36
-    //       onClickSubmit={this.handleClickSubmit}
37
-    //     />
38
-    //   </div>
39
-    // )
40
-    const LoginWrapper = props => (
29
+    return (
41 30
       <section className='loginpage'>
42 31
         <div className='container-fluid'>
43
-          {props.children}
44
-        </div>
45
-      </section>
46
-    )
47
-    const LoginCardWrapper = props => (
48
-      <div className='row justify-content-center'>
49
-        <div className='col-12 col-sm-11 col-md-8 col-lg-6 col-xl-5'>
50
-          {props.children}
51
-        </div>
52
-      </div>
53
-    )
54
-    const LoginCardAction = props => (
55
-      <div className='row mt-4 mb-4'>
56
-        <div className='col-12 col-sm-6 col-md-6 col-lg-6 col-xl-6'>
57
-          {props.children[0]}
58
-        </div>
59
-        <div className='col-12 col-sm-6 col-md-6 col-lg-6 col-xl-6 text-sm-right'>
60
-          {props.children[1]}
61
-        </div>
62
-      </div>
63
-    )
64
-    return (
65
-      <LoginWrapper>
66
-        <LoginLogo customClass='loginpage__logo' logoSrc={LoginLogoImg} />
67 32
 
68
-        <LoginCardWrapper>
69
-          <Card customClass='loginpage__connection'>
70
-            <CardHeader customClass='connection__header text-center'>{'Connexion'}</CardHeader>
33
+          <LoginLogo customClass='loginpage__logo' logoSrc={LoginLogoImg} />
34
+
35
+          <div className='row justify-content-center'>
36
+            <div className='col-12 col-sm-11 col-md-8 col-lg-6 col-xl-5'>
37
+
38
+              <Card customClass='loginpage__connection'>
39
+                <CardHeader customClass='connection__header text-center'>{'Connexion'}</CardHeader>
71 40
 
72
-            <CardBody formClass='connection__form'>
73
-              <InputGroupText
74
-                parentClassName='connection__form__groupemail'
75
-                customClass='mb-3 mt-4'
76
-                icon='fa-envelope-open-o'
77
-                type='email'
78
-                placeHolder='Adresse Email'
79
-                invalidMsg='Email invalide.'
80
-                onChange={this.handleChangeLogin}
81
-              />
41
+                <CardBody formClass='connection__form'>
42
+                  <InputGroupText
43
+                    parentClassName='connection__form__groupemail'
44
+                    customClass='mb-3 mt-4'
45
+                    icon='fa-envelope-open-o'
46
+                    type='email'
47
+                    placeHolder='Adresse Email'
48
+                    invalidMsg='Email invalide.'
49
+                    value={this.state.inputLogin}
50
+                    onChange={this.handleChangeLogin}
51
+                  />
82 52
 
83
-              <InputGroupText
84
-                parentClassName='connection__form__groupepw'
85
-                customClass=''
86
-                icon='fa-lock'
87
-                type='password'
88
-                placeHolder='Mot de passe'
89
-                invalidMsg='Mot de passe invalide.'
90
-                onChange={this.handleChangePassword}
91
-              />
53
+                  <InputGroupText
54
+                    parentClassName='connection__form__groupepw'
55
+                    customClass=''
56
+                    icon='fa-lock'
57
+                    type='password'
58
+                    placeHolder='Mot de passe'
59
+                    invalidMsg='Mot de passe invalide.'
60
+                    value={this.state.inputPassword}
61
+                    onChange={this.handleChangePassword}
62
+                  />
92 63
 
93
-              <LoginCardAction>
94
-                <InputCheckbox
95
-                  parentClassName='connection__form__rememberme'
96
-                  customClass=''
97
-                  label='Se souvenir de moi'
98
-                />
64
+                  <div className='row mt-4 mb-4'>
65
+                    <div className='col-12 col-sm-6 col-md-6 col-lg-6 col-xl-6'>
66
+                      <InputCheckbox
67
+                        parentClassName='connection__form__rememberme'
68
+                        customClass=''
69
+                        label='Se souvenir de moi'
70
+                      />
71
+                    </div>
99 72
 
100
-                <LoginBtnForgotPw
101
-                  customClass='connection__form__pwforgot'
102
-                  label='Mot de passe oublié ?'
103
-                />
104
-              </LoginCardAction>
73
+                    <div className='col-12 col-sm-6 col-md-6 col-lg-6 col-xl-6 text-sm-right'>
74
+                      <LoginBtnForgotPw
75
+                        customClass='connection__form__pwforgot'
76
+                        label='Mot de passe oublié ?'
77
+                      />
78
+                    </div>
79
+                  </div>
105 80
 
106
-              <Button
107
-                htmlType='button'
108
-                bootstrapType='primary'
109
-                customClass='connection__form__btnsubmit'
110
-                label='Connexion'
111
-                onClick={this.handleClickSubmit}
112
-              />
113
-            </CardBody>
114
-          </Card>
115
-        </LoginCardWrapper>
116
-      </LoginWrapper>
81
+                  <Button
82
+                    htmlType='button'
83
+                    bootstrapType='primary'
84
+                    customClass='connection__form__btnsubmit'
85
+                    label='Connexion'
86
+                    onClick={this.handleClickSubmit}
87
+                  />
88
+                </CardBody>
89
+              </Card>
90
+
91
+            </div>
92
+          </div>
93
+
94
+        </div>
95
+      </section>
117 96
     )
118 97
   }
119 98
 }

+ 260 - 0
src/container/Sidebar.jsx Bestand weergeven

@@ -0,0 +1,260 @@
1
+import React from 'react'
2
+import { connect } from 'react-redux'
3
+import { userLogin } from '../action-creator.async.js'
4
+
5
+class Sidebar extends React.Component {
6
+  // constructor (props) {
7
+  //   super(props)
8
+  //   this.state = {
9
+  //     inputLogin: '',
10
+  //     inputPassword: ''
11
+  //   }
12
+  // }
13
+
14
+
15
+  // <div className='sidebar-expandbar'>
16
+  //   <i className='fa fa-minus-square-o sidebar-expandbar__icon' />
17
+  // </div>
18
+
19
+render () {
20
+    return (
21
+      <div className='sidebar d-none d-lg-table-cell'>
22
+        <nav className='sidebar__navigation navbar navbar-light'>
23
+        <div className='sidebar__navigation__menu'>
24
+        <ul className='sidebar__navigation__menu__workspace navbar-nav collapse navbar-collapse'>
25
+        <li className='sidebar__navigation__menu__workspace__item nav-item dropdown'>
26
+        <div className='sidebar__navigation__menu__workspace__item__number'>
27
+        01
28
+        </div>
29
+      <div className='sidebar__navigation__menu__workspace__item__name'>
30
+        Workspace 1
31
+      </div>
32
+
33
+      <div className='sidebar__navigation__menu__workspace__item__icon'>
34
+        <i className='fa fa-chevron-down' />
35
+        </div>
36
+      <ul className='sidebar__navigation__menu__workspace__item__submenu'>
37
+        <li className='sidebar__navigation__menu__workspace__item__submenu__dropdown'>
38
+          <div className='sidebar__navigation__menu__workspace__item__submenu__dropdown__showdropdown dropdown-toggle' role='button' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false'>
39
+            <div className='dropdown__icon'>
40
+              <i className='fa fa-th' />
41
+            </div>
42
+            <div className='dropdown__title' id='navbarDropdown'>
43
+              <div className='dropdown__title__text'>
44
+                Tous les fichiers
45
+              </div>
46
+            </div>
47
+          </div>
48
+          <div className='dropdown__subdropdown dropdown-menu' aria-labelledby='navbarDropdown'>
49
+            <div className='dropdown__subdropdown__item dropdown-item'>
50
+              <div className='dropdown__subdropdown__item__iconfile alignname'>
51
+                <i className='fa fa-file-text-o' />
52
+              </div>
53
+              <div className='dropdown__subdropdown__item__textfile alignname'>
54
+                Documents Archivés
55
+              </div>
56
+            </div>
57
+            <div className='dropdown__subdropdown__item dropdown-item'>
58
+              <div className='dropdown__subdropdown__item__iconfile alignname'>
59
+                <i className='fa fa-file-text-o' />
60
+              </div>
61
+              <div className='dropdown__subdropdown__item__textfile alignname'>
62
+                Documents Supprimés
63
+              </div>
64
+            </div>
65
+          </div>
66
+        </li>
67
+        <li className='sidebar__navigation__menu__workspace__item__submenu__dropdown'>
68
+          <div className='sidebar__navigation__menu__workspace__item__submenu__dropdown__showdropdown dropdown-toggle' role='button' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false'>
69
+            <div className='dropdown__icon'>
70
+              <i className='fa fa-signal dashboard-color' />
71
+            </div>
72
+            <div className='dropdown__title' id='navbarDropdown'>
73
+              <div className='dropdown__title__text'>
74
+                Tableau de bord
75
+              </div>
76
+            </div>
77
+          </div>
78
+          <div className='dropdown__subdropdown dropdown-menu' aria-labelledby='navbarDropdown'>
79
+            <div className='dropdown__subdropdown__item dropdown-item'>
80
+              <div className='dropdown__subdropdown__item__iconfile alignname'>
81
+                <i className='fa fa-file-text-o' />
82
+              </div>
83
+              <div className='dropdown__subdropdown__item__textfile alignname'>
84
+                Documents Archivés
85
+              </div>
86
+            </div>
87
+            <div className='dropdown__subdropdown__item dropdown-item'>
88
+              <div className='dropdown__subdropdown__item__iconfile alignname'>
89
+                <i className='fa fa-file-text-o' />
90
+              </div>
91
+              <div className='dropdown__subdropdown__item__textfile alignname'>
92
+                Documents Supprimés
93
+              </div>
94
+            </div>
95
+          </div>
96
+        </li>
97
+        <li className='sidebar__navigation__menu__workspace__item__submenu__dropdown'>
98
+          <div className='sidebar__navigation__menu__workspace__item__submenu__dropdown__showdropdown dropdown-toggle' role='button' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false'>
99
+            <div className='dropdown__icon'>
100
+              <i className='fa fa-list-ul task-color' />
101
+            </div>
102
+            <div className='dropdown__title'>
103
+              <div className='dropdown__title__text'>
104
+                Liste des tâches
105
+              </div>
106
+            </div>
107
+          </div>
108
+          <div className='dropdown__subdropdown dropdown-menu' aria-labelledby='navbarDropdown'>
109
+            <div className='dropdown__subdropdown__item dropdown-item'>
110
+              <div className='dropdown__subdropdown__item__iconfile alignname'>
111
+                <i className='fa fa-file-text-o' />
112
+              </div>
113
+              <div className='dropdown__subdropdown__item__textfile alignname'>
114
+                Documents Archivés
115
+              </div>
116
+            </div>
117
+            <div className='dropdown__subdropdown__item dropdown-item'>
118
+              <div className='dropdown__subdropdown__item__iconfile alignname'>
119
+                <i className='fa fa-file-text-o' />
120
+              </div>
121
+              <div className='dropdown__subdropdown__item__textfile alignname'>
122
+                Documents Supprimés
123
+              </div>
124
+            </div>
125
+          </div>
126
+        </li>
127
+        <li className='sidebar__navigation__menu__workspace__item__submenu__dropdown'>
128
+          <div className='sidebar__navigation__menu__workspace__item__submenu__dropdown__showdropdown dropdown-toggle' role='button' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false'>
129
+            <div className='dropdown__icon'>
130
+              <i className='fa fa-folder-o docandfile-color' />
131
+            </div>
132
+            <div className='dropdown__title'>
133
+              <div className='dropdown__title__text'>
134
+                Documents & fichiers
135
+              </div>
136
+            </div>
137
+          </div>
138
+          <div className='dropdown__subdropdown dropdown-menu' aria-labelledby='navbarDropdown'>
139
+            <div className='dropdown__subdropdown__item dropdown-item'>
140
+              <div className='dropdown__subdropdown__item__iconfile alignname'>
141
+                <i className='fa fa-file-text-o' />
142
+              </div>
143
+              <div className='dropdown__subdropdown__item__textfile alignname'>
144
+                Documents Archivés
145
+              </div>
146
+            </div>
147
+            <div className='dropdown__subdropdown__item dropdown-item'>
148
+              <div className='dropdown__subdropdown__item__iconfile alignname'>
149
+                <i className='fa fa-file-text-o' />
150
+              </div>
151
+              <div className='dropdown__subdropdown__item__textfile alignname'>
152
+                Documents Supprimés
153
+              </div>
154
+            </div>
155
+          </div>
156
+        </li>
157
+        <li className='sidebar__navigation__menu__workspace__item__submenu__dropdown'>
158
+          <div className='sidebar__navigation__menu__workspace__item__submenu__dropdown__showdropdown dropdown-toggle' role='button' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false'>
159
+            <div className='dropdown__icon'>
160
+              <i className='fa fa-comments talk-color' />
161
+            </div>
162
+            <div className='dropdown__title'>
163
+              <div className='dropdown__title__text'>
164
+                Discussions
165
+              </div>
166
+            </div>
167
+          </div>
168
+          <div className='dropdown__subdropdown dropdown-menu' aria-labelledby='navbarDropdown'>
169
+            <div className='dropdown__subdropdown__item dropdown-item'>
170
+              <div className='dropdown__subdropdown__item__iconfile alignname'>
171
+                <i className='fa fa-file-text-o' />
172
+              </div>
173
+              <div className='dropdown__subdropdown__item__textfile alignname'>
174
+                Documents Archivés
175
+              </div>
176
+            </div>
177
+            <div className='dropdown__subdropdown__item dropdown-item'>
178
+              <div className='dropdown__subdropdown__item__iconfile alignname'>
179
+                <i className='fa fa-file-text-o' />
180
+              </div>
181
+              <div className='dropdown__subdropdown__item__textfile alignname'>
182
+                Documents Supprimés
183
+              </div>
184
+            </div>
185
+          </div>
186
+        </li>
187
+        <li className='sidebar__navigation__menu__workspace__item__submenu__dropdown'>
188
+          <div className='sidebar__navigation__menu__workspace__item__submenu__dropdown__showdropdown dropdown-toggle' role='button' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false'>
189
+            <div className='dropdown__icon'>
190
+              <i className='fa fa-calendar calendar-color' />
191
+            </div>
192
+            <div className='dropdown__title'>
193
+              <div className='dropdown__title__text'>
194
+                Calendrier
195
+              </div>
196
+            </div>
197
+          </div>
198
+          <div className='dropdown__subdropdown dropdown-menu' aria-labelledby='navbarDropdown'>
199
+            <div className='dropdown__subdropdown__item dropdown-item'>
200
+              <div className='dropdown__subdropdown__item__iconfile alignname'>
201
+                <i className='fa fa-file-text-o' />
202
+              </div>
203
+              <div className='dropdown__subdropdown__item__textfile alignname'>
204
+                Documents Archivés
205
+              </div>
206
+            </div>
207
+            <div className='dropdown__subdropdown__item dropdown-item'>
208
+              <div className='dropdown__subdropdown__item__iconfile alignname'>
209
+                <i className='fa fa-file-text-o' />
210
+              </div>
211
+              <div className='dropdown__subdropdown__item__textfile alignname'>
212
+                Documents Supprimés
213
+              </div>
214
+            </div>
215
+          </div>
216
+        </li>
217
+      </ul>
218
+      </li>
219
+
220
+      <li className='sidebar__navigation__menu__workspace__item nav-item dropdown'>
221
+        <div className='sidebar__navigation__menu__workspace__item__number'>
222
+          02
223
+        </div>
224
+        <div className='sidebar__navigation__menu__workspace__item__name'>
225
+          Workspace 2
226
+        </div>
227
+
228
+        <div className='sidebar__navigation__menu__workspace__item__icon'>
229
+          <i className='fa fa-chevron-down' />
230
+        </div>
231
+      </li>
232
+
233
+      <li className='sidebar__navigation__menu__workspace__item nav-item dropdown'>
234
+        <div className='sidebar__navigation__menu__workspace__item__number'>
235
+        03
236
+        </div>
237
+      <div className='sidebar__navigation__menu__workspace__item__name'>
238
+        Workspace 3
239
+      </div>
240
+
241
+      <div className='sidebar__navigation__menu__workspace__item__icon'>
242
+        <i className='fa fa-chevron-down' />
243
+        </div>
244
+    </li>
245
+    </ul>
246
+    </div>
247
+
248
+    </nav>
249
+      <div className='sidebar__btnnewworkspace'>
250
+        <button className='sidebar__btnnewworkspace__btn btn btn-success'>
251
+          Créer un workspace
252
+        </button>
253
+      </div>
254
+    </div>
255
+    )
256
+  }
257
+}
258
+
259
+const mapStateToProps = ({ user }) => ({ user })
260
+export default connect(mapStateToProps)(Sidebar)

+ 2 - 0
src/container/Tracim.jsx Bestand weergeven

@@ -2,6 +2,7 @@ import React from 'react'
2 2
 import { connect } from 'react-redux'
3 3
 import Footer from '../component/Footer.jsx'
4 4
 import Header from './Header.jsx'
5
+// import Sidebar from './Sidebar.jsx'
5 6
 import Login from './Login.jsx'
6 7
 import Page from './Page.jsx'
7 8
 import Home from './Home.jsx'
@@ -17,6 +18,7 @@ class Tracim extends React.Component {
17 18
       <div>
18 19
         <Header />
19 20
 
21
+        {/* <Sidebar /> */}
20 22
         <PrivateRoute exact path='/' component={Home} />
21 23
         <Route path='/login' component={Login} />
22 24
         <PrivateRoute path='/page' component={Page} />

+ 118 - 0
src/css/Sidebar.styl Bestand weergeven

@@ -0,0 +1,118 @@
1
+.sidebar-expandbar
2
+  position absolute
3
+  left 0
4
+  display none
5
+  border 1px solid dark-blue
6
+  border-top-width 2px
7
+  padding 11px 15px
8
+  background-color blue
9
+  z-index 2
10
+  &__icon
11
+    font-size 18px
12
+    text-align center
13
+    cursor pointer
14
+    &:hover
15
+      color white
16
+
17
+.sidebar
18
+  display none
19
+  height 100%
20
+  background-color dark-blue
21
+  z-index 1
22
+
23
+sidebar-width = 300px
24
+.sidebar-visible
25
+  .sidebar-expandbar
26
+    left sidebar-width
27
+  .sidebar
28
+    display table-cell
29
+    vertical-align top
30
+  .containerdocument
31
+    display table-cell
32
+    vertical-align top
33
+
34
+.sidebar
35
+  padding-top 87px
36
+  &__btnnewworkspace
37
+    margin-top 40px
38
+    padding 10px
39
+    width 100%
40
+    &__btn
41
+      display block
42
+      margin 0 auto
43
+      padding 15px 30px
44
+  &__navigation
45
+    padding 0
46
+    &__menu
47
+      &__workspace
48
+        flex-direction column
49
+        &__item
50
+          position relative
51
+          margin-top 2px
52
+          width sidebar-width
53
+          background-color blue
54
+          cursor pointer
55
+          &__number
56
+            display inline-block
57
+            padding 5px 0 5px 0
58
+            width 50px
59
+            font-size 20px
60
+            letter-spacing 2px
61
+            text-align center
62
+            background-color light-blue
63
+          &__name
64
+            display inline-block
65
+            vertical-align top
66
+            padding 5px 5px
67
+            width 220px
68
+            font-size 20px
69
+            color white
70
+            white-space nowrap
71
+            overflow hidden
72
+            text-overflow ellipsis
73
+          &__icon
74
+            display inline-block
75
+            color white
76
+          &__submenu
77
+            margin-bottom 0
78
+            padding-left 0
79
+            list-style none
80
+            background-color opacity-blue
81
+            &__dropdown
82
+              border-top 1px solid dark-blue
83
+              &:hover
84
+                background-color light-blue
85
+              &__showdropdown
86
+                padding 10px 0
87
+              .dropdown__icon
88
+                display inline-block
89
+                margin 0 35px 0 15px
90
+                font-size 20px
91
+              .dropdown__title
92
+                position relative
93
+                display inline-block
94
+                font-size 18px
95
+                font-weight 400
96
+                color dark-grey
97
+                cursor pointer
98
+                &::after //bootstrap override
99
+                  position absolute
100
+                  top 10px
101
+                  left 100%
102
+                &__text
103
+                  display inline-block
104
+                  width 200px
105
+              .dropdown__subdropdown
106
+                border-radius 0
107
+                padding 0
108
+                .alignname
109
+                  display inline-block
110
+                  font-size 18px
111
+                &__item
112
+                  cursor pointer
113
+                  border-top 1px solid dark-blue
114
+                  padding 13px 0
115
+                  &__iconfile
116
+                    padding-left 18px
117
+                  &__textfile
118
+                    margin-left 38px

+ 1 - 0
src/css/index.styl Bestand weergeven

@@ -5,6 +5,7 @@ html, body, #content, #content > div
5 5
 
6 6
 @import 'Variable'
7 7
 
8
+@import 'Sidebar'
8 9
 @import 'Header'
9 10
 @import 'Footer'
10 11