lanes 0.6.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/client/lanes/Config.coffee +26 -9
  3. data/client/lanes/access/screens/user-management/UserManagement.cjsx +1 -1
  4. data/client/lanes/components/grid/EditingMixin.cjsx +8 -4
  5. data/client/lanes/components/grid/PopOverMixin.cjsx +7 -1
  6. data/client/lanes/components/modal/Modal.cjsx +11 -1
  7. data/client/lanes/components/record-finder/RecordFinder.cjsx +8 -4
  8. data/client/lanes/components/shared/DateTime.cjsx +8 -6
  9. data/client/lanes/components/shared/FieldMixin.cjsx +3 -3
  10. data/client/lanes/components/shared/Icon.cjsx +1 -1
  11. data/client/lanes/components/shared/ImageAsset.cjsx +23 -11
  12. data/client/lanes/components/shared/NetworkActivityOverlay.cjsx +2 -0
  13. data/client/lanes/extension/Base.coffee +2 -0
  14. data/client/lanes/fonts/fontawesome-webfont.woff +0 -0
  15. data/client/lanes/fonts/fontawesome-webfont.woff2 +0 -0
  16. data/client/lanes/lib/RequestAssets.coffee +30 -0
  17. data/client/lanes/lib/all.js +1 -0
  18. data/client/lanes/lib/loader.js +93 -0
  19. data/client/lanes/lib/utilFunctions.coffee +12 -0
  20. data/client/lanes/models/Asset.coffee +3 -4
  21. data/client/lanes/models/AssociationMap.coffee +17 -6
  22. data/client/lanes/models/Base.coffee +20 -13
  23. data/client/lanes/models/Collection.coffee +4 -1
  24. data/client/lanes/models/PubSub.coffee +2 -3
  25. data/client/lanes/models/SmtpSettings.coffee +7 -0
  26. data/client/lanes/models/Sync.coffee +2 -2
  27. data/client/lanes/react/Viewport.coffee +14 -10
  28. data/client/lanes/react/mixins/FieldErrors.coffee +3 -4
  29. data/client/lanes/react/mixins/ReadEditingState.coffee +1 -0
  30. data/client/lanes/remote/Bootstrap.coffee +85 -0
  31. data/client/lanes/remote/api.coffee +2 -1
  32. data/client/lanes/remote/onDocumentReady.coffee +12 -0
  33. data/client/lanes/screens/Definitions.coffee +29 -12
  34. data/client/lanes/screens/SystemSettings.cjsx +12 -3
  35. data/client/lanes/styles/fonts/_bordered-pulled.scss +9 -0
  36. data/client/lanes/styles/fonts/_core.scss +1 -2
  37. data/client/lanes/styles/fonts/_icons.scss +56 -0
  38. data/client/lanes/styles/fonts/_mixins.scss +37 -4
  39. data/client/lanes/styles/fonts/_path.scss +2 -2
  40. data/client/lanes/styles/fonts/_screen-reader.scss +5 -0
  41. data/client/lanes/styles/fonts/_variables.scss +58 -2
  42. data/client/lanes/styles/fonts/font-awesome.scss +3 -1
  43. data/client/lanes/vendor/development/calendar.js +56 -57
  44. data/client/lanes/vendor/development/commons.js +31319 -29618
  45. data/client/lanes/vendor/development/data.js +8468 -7607
  46. data/client/lanes/vendor/development/helpers.js +265 -131
  47. data/client/lanes/vendor/development/toggle.js +288 -184
  48. data/client/lanes/vendor/development/ui.js +3387 -3492
  49. data/client/lanes/vendor/development/widgets.js +972 -1229
  50. data/client/lanes/vendor/production/calendar.js +60 -61
  51. data/client/lanes/vendor/production/commons.js +30695 -29032
  52. data/client/lanes/vendor/production/data.js +8457 -7598
  53. data/client/lanes/vendor/production/toggle.js +288 -184
  54. data/client/lanes/vendor/production/ui.js +3264 -3373
  55. data/client/lanes/vendor/production/widgets.js +972 -1229
  56. data/client/lanes/vendor/standalone/index.js +21106 -18761
  57. data/client/lanes/vendor/styles/toggle.scss +4 -3
  58. data/client/lanes/workspace/ScreenView.cjsx +2 -2
  59. data/client/lanes/workspace/styles/header.scss +4 -0
  60. data/config/routes.rb +0 -2
  61. data/db/migrate/01_create_system_settings.rb +1 -1
  62. data/db/migrate/02_create_assets.rb +1 -1
  63. data/lanes.gemspec +1 -0
  64. data/lib/lanes.rb +1 -0
  65. data/lib/lanes/access/track_modifications.rb +4 -2
  66. data/lib/lanes/api.rb +1 -0
  67. data/lib/lanes/api/cable.rb +11 -3
  68. data/lib/lanes/api/controller_base.rb +23 -19
  69. data/lib/lanes/api/default_routes.rb +9 -1
  70. data/lib/lanes/api/generic_controller.rb +1 -1
  71. data/lib/lanes/api/handlers/asset.rb +2 -3
  72. data/lib/lanes/api/helper_methods.rb +5 -11
  73. data/lib/lanes/api/pub_sub.rb +13 -7
  74. data/lib/lanes/api/request_wrapper.rb +1 -1
  75. data/lib/lanes/api/routing.rb +10 -7
  76. data/lib/lanes/api/to_json.rb +7 -0
  77. data/lib/lanes/asset.rb +4 -1
  78. data/lib/lanes/concerns/set_attribute_data.rb +2 -1
  79. data/lib/lanes/extension.rb +3 -1
  80. data/lib/lanes/mailer.rb +40 -0
  81. data/lib/lanes/rake_tasks.rb +4 -0
  82. data/lib/lanes/spec_helper.rb +11 -3
  83. data/lib/lanes/system_settings.rb +22 -9
  84. data/lib/lanes/version.rb +1 -1
  85. data/lib/lanes/workspace/extension.rb +5 -0
  86. data/npm-build/package.json +2 -2
  87. data/npm-build/react-toggle.js +1 -1
  88. data/npm-build/standalone.js +3 -0
  89. data/spec/command-reference-files/initial/Gemfile +1 -1
  90. data/spec/command-reference-files/initial/client/appy-app/Extension.coffee +2 -1
  91. data/spec/command-reference-files/model/db/migrate/20150218032025_create_test_tests.rb +1 -1
  92. data/spec/command-reference-files/screen/client/appy-app/Extension.coffee +2 -1
  93. data/spec/fixtures/system_settings.yml +8 -1
  94. data/spec/server/mailer_spec.rb +33 -0
  95. data/spec/server/system_settings_spec.rb +16 -0
  96. data/templates/client/Extension.coffee +2 -1
  97. data/templates/config/database.yml +1 -1
  98. data/templates/db/create_table_migration.rb +1 -1
  99. metadata +27 -6
  100. data/client/fonts/fontawesome-webfont.woff +0 -0
  101. data/client/fonts/fontawesome-webfont.woff2 +0 -0
  102. data/client/lanes/lib/loader.coffee +0 -100
  103. data/client/lanes/workspace/Modal.cjsx +0 -47
@@ -65,9 +65,7 @@ class ScreenDefinition extends Lanes.Models.BasicModel
65
65
  else
66
66
  "#{@extension.toLowerCase()}/screens"
67
67
  @assets.map (asset) ->
68
- "//#{Lanes.config.api_host}" +
69
- "#{Lanes.config.assets_path_prefix}/#{prefix}/#{asset}"
70
-
68
+ Lanes.config.api_host + "#{Lanes.config.assets_path_prefix}/#{prefix}/#{asset}"
71
69
  extension_path:
72
70
  deps: ['extension', 'model'], fn: ->
73
71
  _.classify(@extension) + ".Screens." + @view
@@ -90,11 +88,15 @@ class ScreenDefinition extends Lanes.Models.BasicModel
90
88
  return new _.Promise( (resolve, reject) ->
91
89
  me.loading = true
92
90
  attempt = 0
93
- done = ->
91
+ onViewLoaded = (view) ->
94
92
  me.loading = false
93
+ resolve(view)
94
+ done = ->
95
95
  viewModel = me.getScreen()
96
96
  if viewModel
97
- resolve(me)
97
+ _.delay ->
98
+ onViewLoaded(viewModel)
99
+ 100
98
100
  else if attempt < 3
99
101
  attempt += 1
100
102
  _.delay(done, 500 * attempt)
@@ -110,10 +112,18 @@ class ScreenDefinition extends Lanes.Models.BasicModel
110
112
 
111
113
  display: (props) ->
112
114
  props = _.extend({}, props, screen: this)
113
- this.ensureLoaded().then ->
115
+ display = (resolve) ->
114
116
  sv = new ScreenView(props)
115
117
  sv.active = true
116
- sv
118
+ resolve(sv)
119
+ this.ensureLoaded().then ->
120
+ new _.Promise (resolve) ->
121
+ if Lanes.current_user.isLoggedIn
122
+ display(resolve)
123
+ else
124
+ Lanes.current_user.on('change:isLoggedIn', ->
125
+ display(resolve)
126
+ )
117
127
 
118
128
 
119
129
  class ScreenViewSet extends Lanes.Models.BasicCollection
@@ -172,7 +182,7 @@ class ScreenSet extends Lanes.Models.BasicCollection
172
182
  screen.set(active:true)
173
183
 
174
184
  isLoading: ->
175
- !!Lanes.Screens.Definitions.all.findWhere({loading: true})
185
+ !!@findWhere(loading: true)
176
186
 
177
187
  class MenuGroup extends Lanes.Models.BasicModel
178
188
 
@@ -185,7 +195,6 @@ class MenuGroup extends Lanes.Models.BasicModel
185
195
 
186
196
  constructor: ->
187
197
  super
188
- Lanes.current_user.on "change:isLoggedIn", => delete @cache
189
198
 
190
199
  screens: ->
191
200
  @cache ||= new Lanes.Models.SubCollection( Lanes.Screens.Definitions.all, {
@@ -201,9 +210,6 @@ class MenuGroupSet extends Lanes.Models.BasicCollection
201
210
 
202
211
  constructor: ->
203
212
  super
204
- Lanes.current_user.on("change:isLoggedIn", =>
205
- delete @cache
206
- )
207
213
 
208
214
  available: ->
209
215
  @cache ||= new Lanes.Models.SubCollection(this, {
@@ -219,6 +225,8 @@ Lanes.Screens.display_id = (screen_id) ->
219
225
  else
220
226
  Lanes.warn "Unable to find definition for screen #{screen_id}"
221
227
 
228
+
229
+
222
230
  Lanes.Screens.Definitions = {
223
231
  all: new ScreenSet
224
232
  displaying: new ScreenViewSet([], { single_active_only: true })
@@ -228,9 +236,18 @@ Lanes.Screens.Definitions = {
228
236
  setBrowserLocation: (location) ->
229
237
  [instanceId, screenId, args...] = _.compact(location.pathname.split('/'))
230
238
  return unless screenId
239
+
231
240
  if instanceId and ( instance = @displaying.findInstance(screenId, instanceId) )
232
241
  instance.active = true
233
242
  else
234
243
  @all.get(screenId)?.display(id: instanceId, props: {args: args})
235
244
 
236
245
  }
246
+
247
+ Lanes.current_user.on "change:isLoggedIn", (user) ->
248
+ Lanes.Screens.Definitions.groups.each (group) ->
249
+ delete group.cache
250
+ delete Lanes.Screens.Definitions.groups.cache
251
+
252
+ unless user.isLoggedIn
253
+ Lanes.Screens.Definitions.displaying.reset()
@@ -55,9 +55,18 @@ class Lanes.Screens.SystemSettings extends Lanes.React.Screen
55
55
  </BS.NavItem>
56
56
  </BS.Nav>
57
57
  <BS.Row>
58
-
59
- <LC.ImageAsset sm=4 asset={@config.logo}
60
- label='Logo' size='thumb' />
58
+ <LC.FieldSet title="Logos" sm=9>
59
+ <LC.ImageAsset sm=6 asset={@config.logo}
60
+ label='Primary' size='thumb' />
61
+ <LC.ImageAsset sm=6 asset={@config.print_logo}
62
+ label='Print' size='thumb' />
63
+ </LC.FieldSet>
64
+ <LC.FieldSet title="Email Server" sm=3>
65
+ <LC.Input sm=12 label='From Email Address' name='from' model={@config.smtp} />
66
+ <LC.Input sm=12 name='server' model={@config.smtp} />
67
+ <LC.Input sm=12 name='login' model={@config.smtp} />
68
+ <LC.Input sm=12 type='password' name='password' model={@config.smtp} />
69
+ </LC.FieldSet>
61
70
  </BS.Row>
62
71
  {for id, Ext of Lanes.Extensions.instances when Ext.getSettingsElement
63
72
  Ext.getSettingsElement(ref: id, key: id, settings: @config.settings[id] || {})}
@@ -7,6 +7,15 @@
7
7
  border-radius: .1em;
8
8
  }
9
9
 
10
+ .#{$fa-css-prefix}-pull-left { float: left; }
11
+ .#{$fa-css-prefix}-pull-right { float: right; }
12
+
13
+ .#{$fa-css-prefix} {
14
+ &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
15
+ &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
16
+ }
17
+
18
+ /* Deprecated as of 4.4.0 */
10
19
  .pull-right { float: right; }
11
20
  .pull-left { float: left; }
12
21
 
@@ -3,11 +3,10 @@
3
3
 
4
4
  .#{$fa-css-prefix} {
5
5
  display: inline-block;
6
- font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration
6
+ font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
7
7
  font-size: inherit; // can't have font-size inherit on line above, so need to override
8
8
  text-rendering: auto; // optimizelegibility throws things off #1094
9
9
  -webkit-font-smoothing: antialiased;
10
10
  -moz-osx-font-smoothing: grayscale;
11
- transform: translate(0, 0); // ensures no half-pixel rendering in firefox
12
11
 
13
12
  }
@@ -605,6 +605,7 @@
605
605
  .#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; }
606
606
  .#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; }
607
607
  .#{$fa-css-prefix}-battery-4:before,
608
+ .#{$fa-css-prefix}-battery:before,
608
609
  .#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; }
609
610
  .#{$fa-css-prefix}-battery-3:before,
610
611
  .#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; }
@@ -731,3 +732,58 @@
731
732
  .#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; }
732
733
  .#{$fa-css-prefix}-fa:before,
733
734
  .#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; }
735
+ .#{$fa-css-prefix}-handshake-o:before { content: $fa-var-handshake-o; }
736
+ .#{$fa-css-prefix}-envelope-open:before { content: $fa-var-envelope-open; }
737
+ .#{$fa-css-prefix}-envelope-open-o:before { content: $fa-var-envelope-open-o; }
738
+ .#{$fa-css-prefix}-linode:before { content: $fa-var-linode; }
739
+ .#{$fa-css-prefix}-address-book:before { content: $fa-var-address-book; }
740
+ .#{$fa-css-prefix}-address-book-o:before { content: $fa-var-address-book-o; }
741
+ .#{$fa-css-prefix}-vcard:before,
742
+ .#{$fa-css-prefix}-address-card:before { content: $fa-var-address-card; }
743
+ .#{$fa-css-prefix}-vcard-o:before,
744
+ .#{$fa-css-prefix}-address-card-o:before { content: $fa-var-address-card-o; }
745
+ .#{$fa-css-prefix}-user-circle:before { content: $fa-var-user-circle; }
746
+ .#{$fa-css-prefix}-user-circle-o:before { content: $fa-var-user-circle-o; }
747
+ .#{$fa-css-prefix}-user-o:before { content: $fa-var-user-o; }
748
+ .#{$fa-css-prefix}-id-badge:before { content: $fa-var-id-badge; }
749
+ .#{$fa-css-prefix}-drivers-license:before,
750
+ .#{$fa-css-prefix}-id-card:before { content: $fa-var-id-card; }
751
+ .#{$fa-css-prefix}-drivers-license-o:before,
752
+ .#{$fa-css-prefix}-id-card-o:before { content: $fa-var-id-card-o; }
753
+ .#{$fa-css-prefix}-quora:before { content: $fa-var-quora; }
754
+ .#{$fa-css-prefix}-free-code-camp:before { content: $fa-var-free-code-camp; }
755
+ .#{$fa-css-prefix}-telegram:before { content: $fa-var-telegram; }
756
+ .#{$fa-css-prefix}-thermometer-4:before,
757
+ .#{$fa-css-prefix}-thermometer:before,
758
+ .#{$fa-css-prefix}-thermometer-full:before { content: $fa-var-thermometer-full; }
759
+ .#{$fa-css-prefix}-thermometer-3:before,
760
+ .#{$fa-css-prefix}-thermometer-three-quarters:before { content: $fa-var-thermometer-three-quarters; }
761
+ .#{$fa-css-prefix}-thermometer-2:before,
762
+ .#{$fa-css-prefix}-thermometer-half:before { content: $fa-var-thermometer-half; }
763
+ .#{$fa-css-prefix}-thermometer-1:before,
764
+ .#{$fa-css-prefix}-thermometer-quarter:before { content: $fa-var-thermometer-quarter; }
765
+ .#{$fa-css-prefix}-thermometer-0:before,
766
+ .#{$fa-css-prefix}-thermometer-empty:before { content: $fa-var-thermometer-empty; }
767
+ .#{$fa-css-prefix}-shower:before { content: $fa-var-shower; }
768
+ .#{$fa-css-prefix}-bathtub:before,
769
+ .#{$fa-css-prefix}-s15:before,
770
+ .#{$fa-css-prefix}-bath:before { content: $fa-var-bath; }
771
+ .#{$fa-css-prefix}-podcast:before { content: $fa-var-podcast; }
772
+ .#{$fa-css-prefix}-window-maximize:before { content: $fa-var-window-maximize; }
773
+ .#{$fa-css-prefix}-window-minimize:before { content: $fa-var-window-minimize; }
774
+ .#{$fa-css-prefix}-window-restore:before { content: $fa-var-window-restore; }
775
+ .#{$fa-css-prefix}-times-rectangle:before,
776
+ .#{$fa-css-prefix}-window-close:before { content: $fa-var-window-close; }
777
+ .#{$fa-css-prefix}-times-rectangle-o:before,
778
+ .#{$fa-css-prefix}-window-close-o:before { content: $fa-var-window-close-o; }
779
+ .#{$fa-css-prefix}-bandcamp:before { content: $fa-var-bandcamp; }
780
+ .#{$fa-css-prefix}-grav:before { content: $fa-var-grav; }
781
+ .#{$fa-css-prefix}-etsy:before { content: $fa-var-etsy; }
782
+ .#{$fa-css-prefix}-imdb:before { content: $fa-var-imdb; }
783
+ .#{$fa-css-prefix}-ravelry:before { content: $fa-var-ravelry; }
784
+ .#{$fa-css-prefix}-eercast:before { content: $fa-var-eercast; }
785
+ .#{$fa-css-prefix}-microchip:before { content: $fa-var-microchip; }
786
+ .#{$fa-css-prefix}-snowflake-o:before { content: $fa-var-snowflake-o; }
787
+ .#{$fa-css-prefix}-superpowers:before { content: $fa-var-superpowers; }
788
+ .#{$fa-css-prefix}-wpexplorer:before { content: $fa-var-wpexplorer; }
789
+ .#{$fa-css-prefix}-meetup:before { content: $fa-var-meetup; }
@@ -3,25 +3,58 @@
3
3
 
4
4
  @mixin fa-icon() {
5
5
  display: inline-block;
6
- font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration
6
+ font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
7
7
  font-size: inherit; // can't have font-size inherit on line above, so need to override
8
8
  text-rendering: auto; // optimizelegibility throws things off #1094
9
9
  -webkit-font-smoothing: antialiased;
10
10
  -moz-osx-font-smoothing: grayscale;
11
- transform: translate(0, 0); // ensures no half-pixel rendering in firefox
12
11
 
13
12
  }
14
13
 
15
14
  @mixin fa-icon-rotate($degrees, $rotation) {
16
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
15
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})";
17
16
  -webkit-transform: rotate($degrees);
18
17
  -ms-transform: rotate($degrees);
19
18
  transform: rotate($degrees);
20
19
  }
21
20
 
22
21
  @mixin fa-icon-flip($horiz, $vert, $rotation) {
23
- filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
22
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)";
24
23
  -webkit-transform: scale($horiz, $vert);
25
24
  -ms-transform: scale($horiz, $vert);
26
25
  transform: scale($horiz, $vert);
27
26
  }
27
+
28
+
29
+ // Only display content to screen readers. A la Bootstrap 4.
30
+ //
31
+ // See: http://a11yproject.com/posts/how-to-hide-content/
32
+
33
+ @mixin sr-only {
34
+ position: absolute;
35
+ width: 1px;
36
+ height: 1px;
37
+ padding: 0;
38
+ margin: -1px;
39
+ overflow: hidden;
40
+ clip: rect(0,0,0,0);
41
+ border: 0;
42
+ }
43
+
44
+ // Use in conjunction with .sr-only to only display content when it's focused.
45
+ //
46
+ // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
47
+ //
48
+ // Credit: HTML5 Boilerplate
49
+
50
+ @mixin sr-only-focusable {
51
+ &:active,
52
+ &:focus {
53
+ position: static;
54
+ width: auto;
55
+ height: auto;
56
+ margin: 0;
57
+ overflow: visible;
58
+ clip: auto;
59
+ }
60
+ }
@@ -5,6 +5,6 @@
5
5
  font-family: 'FontAwesome';
6
6
  font-weight: normal;
7
7
  font-style: normal;
8
- src: url(font-path('fonts/fontawesome-webfont.woff2')) format('woff2'),
9
- url(font-path('fonts/fontawesome-webfont.woff')) format('woff');
8
+ src: url(font-path('lanes/fonts/fontawesome-webfont.woff2')) format('woff2'),
9
+ url(font-path('lanes/fonts/fontawesome-webfont.woff')) format('woff');
10
10
  }
@@ -0,0 +1,5 @@
1
+ // Screen Readers
2
+ // -------------------------
3
+
4
+ .sr-only { @include sr-only(); }
5
+ .sr-only-focusable { @include sr-only-focusable(); }
@@ -4,14 +4,18 @@
4
4
  $fa-font-path: "../fonts" !default;
5
5
  $fa-font-size-base: 14px !default;
6
6
  $fa-line-height-base: 1 !default;
7
- //$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.6.3/fonts" !default; // for referencing Bootstrap CDN font files directly
7
+ //$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts" !default; // for referencing Bootstrap CDN font files directly
8
8
  $fa-css-prefix: fa !default;
9
- $fa-version: "4.6.3" !default;
9
+ $fa-version: "4.7.0" !default;
10
10
  $fa-border-color: #eee !default;
11
11
  $fa-inverse: #fff !default;
12
12
  $fa-li-width: (30em / 14) !default;
13
13
 
14
14
  $fa-var-500px: "\f26e";
15
+ $fa-var-address-book: "\f2b9";
16
+ $fa-var-address-book-o: "\f2ba";
17
+ $fa-var-address-card: "\f2bb";
18
+ $fa-var-address-card-o: "\f2bc";
15
19
  $fa-var-adjust: "\f042";
16
20
  $fa-var-adn: "\f170";
17
21
  $fa-var-align-center: "\f037";
@@ -60,11 +64,15 @@ $fa-var-automobile: "\f1b9";
60
64
  $fa-var-backward: "\f04a";
61
65
  $fa-var-balance-scale: "\f24e";
62
66
  $fa-var-ban: "\f05e";
67
+ $fa-var-bandcamp: "\f2d5";
63
68
  $fa-var-bank: "\f19c";
64
69
  $fa-var-bar-chart: "\f080";
65
70
  $fa-var-bar-chart-o: "\f080";
66
71
  $fa-var-barcode: "\f02a";
67
72
  $fa-var-bars: "\f0c9";
73
+ $fa-var-bath: "\f2cd";
74
+ $fa-var-bathtub: "\f2cd";
75
+ $fa-var-battery: "\f240";
68
76
  $fa-var-battery-0: "\f244";
69
77
  $fa-var-battery-1: "\f243";
70
78
  $fa-var-battery-2: "\f242";
@@ -214,19 +222,25 @@ $fa-var-dollar: "\f155";
214
222
  $fa-var-dot-circle-o: "\f192";
215
223
  $fa-var-download: "\f019";
216
224
  $fa-var-dribbble: "\f17d";
225
+ $fa-var-drivers-license: "\f2c2";
226
+ $fa-var-drivers-license-o: "\f2c3";
217
227
  $fa-var-dropbox: "\f16b";
218
228
  $fa-var-drupal: "\f1a9";
219
229
  $fa-var-edge: "\f282";
220
230
  $fa-var-edit: "\f044";
231
+ $fa-var-eercast: "\f2da";
221
232
  $fa-var-eject: "\f052";
222
233
  $fa-var-ellipsis-h: "\f141";
223
234
  $fa-var-ellipsis-v: "\f142";
224
235
  $fa-var-empire: "\f1d1";
225
236
  $fa-var-envelope: "\f0e0";
226
237
  $fa-var-envelope-o: "\f003";
238
+ $fa-var-envelope-open: "\f2b6";
239
+ $fa-var-envelope-open-o: "\f2b7";
227
240
  $fa-var-envelope-square: "\f199";
228
241
  $fa-var-envira: "\f299";
229
242
  $fa-var-eraser: "\f12d";
243
+ $fa-var-etsy: "\f2d7";
230
244
  $fa-var-eur: "\f153";
231
245
  $fa-var-euro: "\f153";
232
246
  $fa-var-exchange: "\f0ec";
@@ -294,6 +308,7 @@ $fa-var-fort-awesome: "\f286";
294
308
  $fa-var-forumbee: "\f211";
295
309
  $fa-var-forward: "\f04e";
296
310
  $fa-var-foursquare: "\f180";
311
+ $fa-var-free-code-camp: "\f2c5";
297
312
  $fa-var-frown-o: "\f119";
298
313
  $fa-var-futbol-o: "\f1e3";
299
314
  $fa-var-gamepad: "\f11b";
@@ -326,6 +341,7 @@ $fa-var-google-plus-square: "\f0d4";
326
341
  $fa-var-google-wallet: "\f1ee";
327
342
  $fa-var-graduation-cap: "\f19d";
328
343
  $fa-var-gratipay: "\f184";
344
+ $fa-var-grav: "\f2d6";
329
345
  $fa-var-group: "\f0c0";
330
346
  $fa-var-h-square: "\f0fd";
331
347
  $fa-var-hacker-news: "\f1d4";
@@ -342,6 +358,7 @@ $fa-var-hand-rock-o: "\f255";
342
358
  $fa-var-hand-scissors-o: "\f257";
343
359
  $fa-var-hand-spock-o: "\f259";
344
360
  $fa-var-hand-stop-o: "\f256";
361
+ $fa-var-handshake-o: "\f2b5";
345
362
  $fa-var-hard-of-hearing: "\f2a4";
346
363
  $fa-var-hashtag: "\f292";
347
364
  $fa-var-hdd-o: "\f0a0";
@@ -365,8 +382,12 @@ $fa-var-hourglass-start: "\f251";
365
382
  $fa-var-houzz: "\f27c";
366
383
  $fa-var-html5: "\f13b";
367
384
  $fa-var-i-cursor: "\f246";
385
+ $fa-var-id-badge: "\f2c1";
386
+ $fa-var-id-card: "\f2c2";
387
+ $fa-var-id-card-o: "\f2c3";
368
388
  $fa-var-ils: "\f20b";
369
389
  $fa-var-image: "\f03e";
390
+ $fa-var-imdb: "\f2d8";
370
391
  $fa-var-inbox: "\f01c";
371
392
  $fa-var-indent: "\f03c";
372
393
  $fa-var-industry: "\f275";
@@ -404,6 +425,7 @@ $fa-var-line-chart: "\f201";
404
425
  $fa-var-link: "\f0c1";
405
426
  $fa-var-linkedin: "\f0e1";
406
427
  $fa-var-linkedin-square: "\f08c";
428
+ $fa-var-linode: "\f2b8";
407
429
  $fa-var-linux: "\f17c";
408
430
  $fa-var-list: "\f03a";
409
431
  $fa-var-list-alt: "\f022";
@@ -436,8 +458,10 @@ $fa-var-maxcdn: "\f136";
436
458
  $fa-var-meanpath: "\f20c";
437
459
  $fa-var-medium: "\f23a";
438
460
  $fa-var-medkit: "\f0fa";
461
+ $fa-var-meetup: "\f2e0";
439
462
  $fa-var-meh-o: "\f11a";
440
463
  $fa-var-mercury: "\f223";
464
+ $fa-var-microchip: "\f2db";
441
465
  $fa-var-microphone: "\f130";
442
466
  $fa-var-microphone-slash: "\f131";
443
467
  $fa-var-minus: "\f068";
@@ -502,6 +526,7 @@ $fa-var-plus: "\f067";
502
526
  $fa-var-plus-circle: "\f055";
503
527
  $fa-var-plus-square: "\f0fe";
504
528
  $fa-var-plus-square-o: "\f196";
529
+ $fa-var-podcast: "\f2ce";
505
530
  $fa-var-power-off: "\f011";
506
531
  $fa-var-print: "\f02f";
507
532
  $fa-var-product-hunt: "\f288";
@@ -511,10 +536,12 @@ $fa-var-qrcode: "\f029";
511
536
  $fa-var-question: "\f128";
512
537
  $fa-var-question-circle: "\f059";
513
538
  $fa-var-question-circle-o: "\f29c";
539
+ $fa-var-quora: "\f2c4";
514
540
  $fa-var-quote-left: "\f10d";
515
541
  $fa-var-quote-right: "\f10e";
516
542
  $fa-var-ra: "\f1d0";
517
543
  $fa-var-random: "\f074";
544
+ $fa-var-ravelry: "\f2d9";
518
545
  $fa-var-rebel: "\f1d0";
519
546
  $fa-var-recycle: "\f1b8";
520
547
  $fa-var-reddit: "\f1a1";
@@ -541,6 +568,7 @@ $fa-var-rss-square: "\f143";
541
568
  $fa-var-rub: "\f158";
542
569
  $fa-var-ruble: "\f158";
543
570
  $fa-var-rupee: "\f156";
571
+ $fa-var-s15: "\f2cd";
544
572
  $fa-var-safari: "\f267";
545
573
  $fa-var-save: "\f0c7";
546
574
  $fa-var-scissors: "\f0c4";
@@ -565,6 +593,7 @@ $fa-var-shirtsinbulk: "\f214";
565
593
  $fa-var-shopping-bag: "\f290";
566
594
  $fa-var-shopping-basket: "\f291";
567
595
  $fa-var-shopping-cart: "\f07a";
596
+ $fa-var-shower: "\f2cc";
568
597
  $fa-var-sign-in: "\f090";
569
598
  $fa-var-sign-language: "\f2a7";
570
599
  $fa-var-sign-out: "\f08b";
@@ -581,6 +610,7 @@ $fa-var-smile-o: "\f118";
581
610
  $fa-var-snapchat: "\f2ab";
582
611
  $fa-var-snapchat-ghost: "\f2ac";
583
612
  $fa-var-snapchat-square: "\f2ad";
613
+ $fa-var-snowflake-o: "\f2dc";
584
614
  $fa-var-soccer-ball-o: "\f1e3";
585
615
  $fa-var-sort: "\f0dc";
586
616
  $fa-var-sort-alpha-asc: "\f15d";
@@ -626,6 +656,7 @@ $fa-var-subscript: "\f12c";
626
656
  $fa-var-subway: "\f239";
627
657
  $fa-var-suitcase: "\f0f2";
628
658
  $fa-var-sun-o: "\f185";
659
+ $fa-var-superpowers: "\f2dd";
629
660
  $fa-var-superscript: "\f12b";
630
661
  $fa-var-support: "\f1cd";
631
662
  $fa-var-table: "\f0ce";
@@ -635,6 +666,7 @@ $fa-var-tag: "\f02b";
635
666
  $fa-var-tags: "\f02c";
636
667
  $fa-var-tasks: "\f0ae";
637
668
  $fa-var-taxi: "\f1ba";
669
+ $fa-var-telegram: "\f2c6";
638
670
  $fa-var-television: "\f26c";
639
671
  $fa-var-tencent-weibo: "\f1d5";
640
672
  $fa-var-terminal: "\f120";
@@ -644,6 +676,17 @@ $fa-var-th: "\f00a";
644
676
  $fa-var-th-large: "\f009";
645
677
  $fa-var-th-list: "\f00b";
646
678
  $fa-var-themeisle: "\f2b2";
679
+ $fa-var-thermometer: "\f2c7";
680
+ $fa-var-thermometer-0: "\f2cb";
681
+ $fa-var-thermometer-1: "\f2ca";
682
+ $fa-var-thermometer-2: "\f2c9";
683
+ $fa-var-thermometer-3: "\f2c8";
684
+ $fa-var-thermometer-4: "\f2c7";
685
+ $fa-var-thermometer-empty: "\f2cb";
686
+ $fa-var-thermometer-full: "\f2c7";
687
+ $fa-var-thermometer-half: "\f2c9";
688
+ $fa-var-thermometer-quarter: "\f2ca";
689
+ $fa-var-thermometer-three-quarters: "\f2c8";
647
690
  $fa-var-thumb-tack: "\f08d";
648
691
  $fa-var-thumbs-down: "\f165";
649
692
  $fa-var-thumbs-o-down: "\f088";
@@ -653,6 +696,8 @@ $fa-var-ticket: "\f145";
653
696
  $fa-var-times: "\f00d";
654
697
  $fa-var-times-circle: "\f057";
655
698
  $fa-var-times-circle-o: "\f05c";
699
+ $fa-var-times-rectangle: "\f2d3";
700
+ $fa-var-times-rectangle-o: "\f2d4";
656
701
  $fa-var-tint: "\f043";
657
702
  $fa-var-toggle-down: "\f150";
658
703
  $fa-var-toggle-left: "\f191";
@@ -693,11 +738,16 @@ $fa-var-upload: "\f093";
693
738
  $fa-var-usb: "\f287";
694
739
  $fa-var-usd: "\f155";
695
740
  $fa-var-user: "\f007";
741
+ $fa-var-user-circle: "\f2bd";
742
+ $fa-var-user-circle-o: "\f2be";
696
743
  $fa-var-user-md: "\f0f0";
744
+ $fa-var-user-o: "\f2c0";
697
745
  $fa-var-user-plus: "\f234";
698
746
  $fa-var-user-secret: "\f21b";
699
747
  $fa-var-user-times: "\f235";
700
748
  $fa-var-users: "\f0c0";
749
+ $fa-var-vcard: "\f2bb";
750
+ $fa-var-vcard-o: "\f2bc";
701
751
  $fa-var-venus: "\f221";
702
752
  $fa-var-venus-double: "\f226";
703
753
  $fa-var-venus-mars: "\f228";
@@ -722,10 +772,16 @@ $fa-var-wheelchair: "\f193";
722
772
  $fa-var-wheelchair-alt: "\f29b";
723
773
  $fa-var-wifi: "\f1eb";
724
774
  $fa-var-wikipedia-w: "\f266";
775
+ $fa-var-window-close: "\f2d3";
776
+ $fa-var-window-close-o: "\f2d4";
777
+ $fa-var-window-maximize: "\f2d0";
778
+ $fa-var-window-minimize: "\f2d1";
779
+ $fa-var-window-restore: "\f2d2";
725
780
  $fa-var-windows: "\f17a";
726
781
  $fa-var-won: "\f159";
727
782
  $fa-var-wordpress: "\f19a";
728
783
  $fa-var-wpbeginner: "\f297";
784
+ $fa-var-wpexplorer: "\f2de";
729
785
  $fa-var-wpforms: "\f298";
730
786
  $fa-var-wrench: "\f0ad";
731
787
  $fa-var-xing: "\f168";