iconly 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +76 -0
  4. data/Rakefile +33 -0
  5. data/app/assets/config/iconly_manifest.js +2 -0
  6. data/app/assets/images/iconly/Noto-Sans-700.eot +0 -0
  7. data/app/assets/images/iconly/Noto-Sans-700.svg +336 -0
  8. data/app/assets/images/iconly/Noto-Sans-700.ttf +0 -0
  9. data/app/assets/images/iconly/Noto-Sans-700.woff +0 -0
  10. data/app/assets/images/iconly/Noto-Sans-700.woff2 +0 -0
  11. data/app/assets/images/iconly/Noto-Sans-regular.eot +0 -0
  12. data/app/assets/images/iconly/Noto-Sans-regular.svg +335 -0
  13. data/app/assets/images/iconly/Noto-Sans-regular.ttf +0 -0
  14. data/app/assets/images/iconly/Noto-Sans-regular.woff +0 -0
  15. data/app/assets/images/iconly/Noto-Sans-regular.woff2 +0 -0
  16. data/app/assets/images/iconly/Source-Sans-Pro-600.eot +0 -0
  17. data/app/assets/images/iconly/Source-Sans-Pro-600.svg +339 -0
  18. data/app/assets/images/iconly/Source-Sans-Pro-600.ttf +0 -0
  19. data/app/assets/images/iconly/Source-Sans-Pro-600.woff +0 -0
  20. data/app/assets/images/iconly/Source-Sans-Pro-600.woff2 +0 -0
  21. data/app/assets/images/iconly/Source-Sans-Pro-regular.eot +0 -0
  22. data/app/assets/images/iconly/Source-Sans-Pro-regular.svg +345 -0
  23. data/app/assets/images/iconly/Source-Sans-Pro-regular.ttf +0 -0
  24. data/app/assets/images/iconly/Source-Sans-Pro-regular.woff +0 -0
  25. data/app/assets/images/iconly/Source-Sans-Pro-regular.woff2 +0 -0
  26. data/app/assets/images/iconly/favicon.png +0 -0
  27. data/app/assets/images/iconly/iconly.eot +0 -0
  28. data/app/assets/images/iconly/iconly.svg +157 -0
  29. data/app/assets/images/iconly/iconly.ttf +0 -0
  30. data/app/assets/images/iconly/iconly.woff +0 -0
  31. data/app/assets/javascripts/iconly/application.js +24 -0
  32. data/app/assets/javascripts/iconly/iconly.coffee +5 -0
  33. data/app/assets/javascripts/iconly/jquery.sticky.js +268 -0
  34. data/app/assets/javascripts/iconly/package.coffee +25 -0
  35. data/app/assets/javascripts/iconly/project.coffee +68 -0
  36. data/app/assets/javascripts/iconly/scroller.coffee +17 -0
  37. data/app/assets/stylesheets/iconly/application.scss +21 -0
  38. data/app/assets/stylesheets/iconly/buttons.scss +314 -0
  39. data/app/assets/stylesheets/iconly/file_input.scss +25 -0
  40. data/app/assets/stylesheets/iconly/header.scss +179 -0
  41. data/app/assets/stylesheets/iconly/iconly.scss.erb +61 -0
  42. data/app/assets/stylesheets/iconly/layout.scss +269 -0
  43. data/app/assets/stylesheets/iconly/overrides.scss +58 -0
  44. data/app/assets/stylesheets/iconly/typography.scss.erb +48 -0
  45. data/app/controllers/iconly/application_controller.rb +8 -0
  46. data/app/controllers/iconly/packages_controller.rb +54 -0
  47. data/app/controllers/iconly/project_icons_controller.rb +24 -0
  48. data/app/controllers/iconly/projects_controller.rb +67 -0
  49. data/app/helpers/iconly/application_helper.rb +35 -0
  50. data/app/helpers/iconly/packages_helper.rb +29 -0
  51. data/app/helpers/iconly/project_icons_helper.rb +4 -0
  52. data/app/helpers/iconly/projects_helper.rb +4 -0
  53. data/app/helpers/iconly/sessions_helper.rb +43 -0
  54. data/app/jobs/iconly/application_job.rb +4 -0
  55. data/app/mailers/iconly/application_mailer.rb +6 -0
  56. data/app/models/iconly/application_record.rb +5 -0
  57. data/app/models/iconly/icon.rb +44 -0
  58. data/app/models/iconly/package.rb +5 -0
  59. data/app/models/iconly/project.rb +5 -0
  60. data/app/models/iconly/project/downloader.rb +50 -0
  61. data/app/models/iconly/project/font_generator.rb +65 -0
  62. data/app/models/iconly/project_icon.rb +23 -0
  63. data/app/models/iconly/user.rb +5 -0
  64. data/app/uploaders/iconly/svg_uploader.rb +51 -0
  65. data/app/views/iconly/packages/_form.html.erb +48 -0
  66. data/app/views/iconly/packages/new.html.erb +5 -0
  67. data/app/views/iconly/projects/_form.html.erb +25 -0
  68. data/app/views/iconly/projects/_packages.html.erb +91 -0
  69. data/app/views/iconly/projects/edit.html.erb +5 -0
  70. data/app/views/iconly/projects/index.html.erb +37 -0
  71. data/app/views/iconly/projects/new.html.erb +5 -0
  72. data/app/views/iconly/projects/show.html.erb +53 -0
  73. data/app/views/layouts/iconly/_footer.html.erb +18 -0
  74. data/app/views/layouts/iconly/_header.html.erb +89 -0
  75. data/app/views/layouts/iconly/application.html.erb +29 -0
  76. data/config/fontcustom/fontcustom_manifest.yml +53 -0
  77. data/config/fontcustom/templates/iconly.css +28 -0
  78. data/config/routes.rb +13 -0
  79. data/db/migrate/20170130210746_enable_uuid_extension.rb +5 -0
  80. data/db/migrate/20170130211049_create_iconly_users.rb +9 -0
  81. data/db/migrate/20170130220400_create_iconly_packages.rb +12 -0
  82. data/db/migrate/20170131002414_create_iconly_icons.rb +13 -0
  83. data/db/migrate/20170131081131_create_iconly_projects.rb +11 -0
  84. data/db/migrate/20170131084626_create_iconly_project_icons.rb +10 -0
  85. data/db/migrate/20170203144731_add_icon_count_to_packages.rb +5 -0
  86. data/lib/iconly.rb +22 -0
  87. data/lib/iconly/concerns/models/package.rb +41 -0
  88. data/lib/iconly/concerns/models/project.rb +27 -0
  89. data/lib/iconly/concerns/models/user.rb +23 -0
  90. data/lib/iconly/engine.rb +5 -0
  91. data/lib/iconly/version.rb +3 -0
  92. data/lib/iconly/zip_file_generator.rb +58 -0
  93. data/lib/tasks/iconly_tasks.rake +4 -0
  94. metadata +374 -0
@@ -0,0 +1,24 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file. JavaScript code in this file should be added after the last require_* statement.
9
+ //
10
+ // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require jquery
14
+ //= require jquery_ujs
15
+ //= require turbolinks
16
+ //= require tether
17
+ //= require bootstrap-sprockets
18
+ //
19
+ //= require iconly/jquery.sticky
20
+ //= require iconly/iconly
21
+ //= require iconly/project
22
+ //= require iconly/package
23
+ //= require iconly/scroller
24
+
@@ -0,0 +1,5 @@
1
+ window.iconly =
2
+ start: ->
3
+ return if @_started
4
+ $(document).tooltip(selector: '[data-toggle="iconly-tooltip"]')
5
+ @_started = true
@@ -0,0 +1,268 @@
1
+ // Sticky Plugin v1.0.3 for jQuery
2
+ // =============
3
+ // Author: Anthony Garand
4
+ // Improvements by German M. Bravo (Kronuz) and Ruud Kamphuis (ruudk)
5
+ // Improvements by Leonardo C. Daronco (daronco)
6
+ // Created: 02/14/2011
7
+ // Date: 07/20/2015
8
+ // Website: http://stickyjs.com/
9
+ // Description: Makes an element on the page stick on the screen as you scroll
10
+ // It will only set the 'top' and 'position' of your element, you
11
+ // might need to adjust the width in some cases.
12
+
13
+ (function (factory) {
14
+ if (typeof define === 'function' && define.amd) {
15
+ // AMD. Register as an anonymous module.
16
+ define(['jquery'], factory);
17
+ } else if (typeof module === 'object' && module.exports) {
18
+ // Node/CommonJS
19
+ module.exports = factory(require('jquery'));
20
+ } else {
21
+ // Browser globals
22
+ factory(jQuery);
23
+ }
24
+ }(function ($) {
25
+ var slice = Array.prototype.slice; // save ref to original slice()
26
+ var splice = Array.prototype.splice; // save ref to original slice()
27
+
28
+ var defaults = {
29
+ topSpacing: 0,
30
+ bottomSpacing: 0,
31
+ className: 'is-sticky',
32
+ wrapperClassName: 'sticky-wrapper',
33
+ center: false,
34
+ getWidthFrom: '',
35
+ widthFromWrapper: true, // works only when .getWidthFrom is empty
36
+ responsiveWidth: false
37
+ },
38
+ $window = $(window),
39
+ $document = $(document),
40
+ sticked = [],
41
+ windowHeight = $window.height(),
42
+ scroller = function() {
43
+ var scrollTop = $window.scrollTop(),
44
+ documentHeight = $document.height(),
45
+ dwh = documentHeight - windowHeight,
46
+ extra = (scrollTop > dwh) ? dwh - scrollTop : 0;
47
+
48
+ for (var i = 0, l = sticked.length; i < l; i++) {
49
+ var s = sticked[i],
50
+ elementTop = s.stickyWrapper.offset().top,
51
+ etse = elementTop - s.topSpacing - extra;
52
+
53
+ //update height in case of dynamic content
54
+ s.stickyWrapper.css('height', s.stickyElement.outerHeight());
55
+
56
+ if (scrollTop <= etse) {
57
+ if (s.currentTop !== null) {
58
+ s.stickyElement
59
+ .css({
60
+ 'width': '',
61
+ 'position': '',
62
+ 'top': ''
63
+ });
64
+ s.stickyElement.parent().removeClass(s.className);
65
+ s.stickyElement.trigger('sticky-end', [s]);
66
+ s.currentTop = null;
67
+ }
68
+ }
69
+ else {
70
+ var newTop = documentHeight - s.stickyElement.outerHeight()
71
+ - s.topSpacing - s.bottomSpacing - scrollTop - extra;
72
+ if (newTop < 0) {
73
+ newTop = newTop + s.topSpacing;
74
+ } else {
75
+ newTop = s.topSpacing;
76
+ }
77
+ if (s.currentTop !== newTop) {
78
+ var newWidth;
79
+ if (s.getWidthFrom) {
80
+ newWidth = $(s.getWidthFrom).width() || null;
81
+ } else if (s.widthFromWrapper) {
82
+ newWidth = s.stickyWrapper.width();
83
+ }
84
+ if (newWidth == null) {
85
+ newWidth = s.stickyElement.width();
86
+ }
87
+ s.stickyElement
88
+ .css('width', newWidth)
89
+ .css('position', 'fixed')
90
+ .css('top', newTop);
91
+
92
+ s.stickyElement.parent().addClass(s.className);
93
+
94
+ if (s.currentTop === null) {
95
+ s.stickyElement.trigger('sticky-start', [s]);
96
+ } else {
97
+ // sticky is started but it have to be repositioned
98
+ s.stickyElement.trigger('sticky-update', [s]);
99
+ }
100
+
101
+ if (s.currentTop === s.topSpacing && s.currentTop > newTop || s.currentTop === null && newTop < s.topSpacing) {
102
+ // just reached bottom || just started to stick but bottom is already reached
103
+ s.stickyElement.trigger('sticky-bottom-reached', [s]);
104
+ } else if(s.currentTop !== null && newTop === s.topSpacing && s.currentTop < newTop) {
105
+ // sticky is started && sticked at topSpacing && overflowing from top just finished
106
+ s.stickyElement.trigger('sticky-bottom-unreached', [s]);
107
+ }
108
+
109
+ s.currentTop = newTop;
110
+ }
111
+
112
+ // Check if sticky has reached end of container and stop sticking
113
+ var stickyWrapperContainer = s.stickyWrapper.parent();
114
+ var unstick = (s.stickyElement.offset().top + s.stickyElement.outerHeight() >= stickyWrapperContainer.offset().top + stickyWrapperContainer.outerHeight()) && (s.stickyElement.offset().top <= s.topSpacing);
115
+
116
+ if( unstick ) {
117
+ s.stickyElement
118
+ .css('position', 'absolute')
119
+ .css('top', '')
120
+ .css('bottom', 0);
121
+ } else {
122
+ s.stickyElement
123
+ .css('position', 'fixed')
124
+ .css('top', newTop)
125
+ .css('bottom', '');
126
+ }
127
+ }
128
+ }
129
+ },
130
+ resizer = function() {
131
+ windowHeight = $window.height();
132
+
133
+ for (var i = 0, l = sticked.length; i < l; i++) {
134
+ var s = sticked[i];
135
+ var newWidth = null;
136
+ if (s.getWidthFrom) {
137
+ if (s.responsiveWidth) {
138
+ newWidth = $(s.getWidthFrom).width();
139
+ }
140
+ } else if(s.widthFromWrapper) {
141
+ newWidth = s.stickyWrapper.width();
142
+ }
143
+ if (newWidth != null) {
144
+ s.stickyElement.css('width', newWidth);
145
+ }
146
+ }
147
+ },
148
+ methods = {
149
+ init: function(options) {
150
+ var o = $.extend({}, defaults, options);
151
+ return this.each(function() {
152
+ var stickyElement = $(this);
153
+
154
+ var stickyId = stickyElement.attr('id');
155
+ var wrapperId = stickyId ? stickyId + '-' + defaults.wrapperClassName : defaults.wrapperClassName;
156
+ var wrapper = $('<div></div>')
157
+ .attr('id', wrapperId)
158
+ .addClass(o.wrapperClassName);
159
+
160
+ stickyElement.wrapAll(wrapper);
161
+
162
+ var stickyWrapper = stickyElement.parent();
163
+
164
+ if (o.center) {
165
+ stickyWrapper.css({width:stickyElement.outerWidth(),marginLeft:"auto",marginRight:"auto"});
166
+ }
167
+
168
+ if (stickyElement.css("float") === "right") {
169
+ stickyElement.css({"float":"none"}).parent().css({"float":"right"});
170
+ }
171
+
172
+ o.stickyElement = stickyElement;
173
+ o.stickyWrapper = stickyWrapper;
174
+ o.currentTop = null;
175
+
176
+ sticked.push(o);
177
+
178
+ methods.setWrapperHeight(this);
179
+ methods.setupChangeListeners(this);
180
+ });
181
+ },
182
+
183
+ setWrapperHeight: function(stickyElement) {
184
+ var element = $(stickyElement);
185
+ var stickyWrapper = element.parent();
186
+ if (stickyWrapper) {
187
+ stickyWrapper.css('height', element.outerHeight());
188
+ }
189
+ },
190
+
191
+ setupChangeListeners: function(stickyElement) {
192
+ if (window.MutationObserver) {
193
+ var mutationObserver = new window.MutationObserver(function(mutations) {
194
+ if (mutations[0].addedNodes.length || mutations[0].removedNodes.length) {
195
+ methods.setWrapperHeight(stickyElement);
196
+ }
197
+ });
198
+ mutationObserver.observe(stickyElement, {subtree: true, childList: true});
199
+ } else {
200
+ stickyElement.addEventListener('DOMNodeInserted', function() {
201
+ methods.setWrapperHeight(stickyElement);
202
+ }, false);
203
+ stickyElement.addEventListener('DOMNodeRemoved', function() {
204
+ methods.setWrapperHeight(stickyElement);
205
+ }, false);
206
+ }
207
+ },
208
+ update: scroller,
209
+ unstick: function(options) {
210
+ return this.each(function() {
211
+ var that = this;
212
+ var unstickyElement = $(that);
213
+
214
+ var removeIdx = -1;
215
+ var i = sticked.length;
216
+ while (i-- > 0) {
217
+ if (sticked[i].stickyElement.get(0) === that) {
218
+ splice.call(sticked,i,1);
219
+ removeIdx = i;
220
+ }
221
+ }
222
+ if(removeIdx !== -1) {
223
+ unstickyElement.unwrap();
224
+ unstickyElement
225
+ .css({
226
+ 'width': '',
227
+ 'position': '',
228
+ 'top': '',
229
+ 'float': ''
230
+ })
231
+ ;
232
+ }
233
+ });
234
+ }
235
+ };
236
+
237
+ // should be more efficient than using $window.scroll(scroller) and $window.resize(resizer):
238
+ if (window.addEventListener) {
239
+ window.addEventListener('scroll', scroller, false);
240
+ window.addEventListener('resize', resizer, false);
241
+ } else if (window.attachEvent) {
242
+ window.attachEvent('onscroll', scroller);
243
+ window.attachEvent('onresize', resizer);
244
+ }
245
+
246
+ $.fn.sticky = function(method) {
247
+ if (methods[method]) {
248
+ return methods[method].apply(this, slice.call(arguments, 1));
249
+ } else if (typeof method === 'object' || !method ) {
250
+ return methods.init.apply( this, arguments );
251
+ } else {
252
+ $.error('Method ' + method + ' does not exist on jQuery.sticky');
253
+ }
254
+ };
255
+
256
+ $.fn.unstick = function(method) {
257
+ if (methods[method]) {
258
+ return methods[method].apply(this, slice.call(arguments, 1));
259
+ } else if (typeof method === 'object' || !method ) {
260
+ return methods.unstick.apply( this, arguments );
261
+ } else {
262
+ $.error('Method ' + method + ' does not exist on jQuery.sticky');
263
+ }
264
+ };
265
+ $(function() {
266
+ setTimeout(scroller, 0);
267
+ });
268
+ }));
@@ -0,0 +1,25 @@
1
+ class iconly.Package
2
+ constructor: (@fileInputSelector, @messageSelector) ->
3
+ $(document).on 'change', @fileInputSelector, (e) => @_addFiles(e)
4
+
5
+ _addFiles: (e) ->
6
+ @_showMessage $.map(e.target.files, (f) => @_badge(f.name))
7
+
8
+ _showMessage: (fileNames) ->
9
+ $(@messageSelector).html """
10
+ <h4 class="mt-0">#{fileNames.length} #{@_pluralize(fileNames.length, 'file')} selected</h4>
11
+ #{fileNames.join('')}
12
+ """
13
+
14
+ _badge: (fileName) ->
15
+ """
16
+ <span class="badge badge-pale">#{fileName}</span>
17
+ """
18
+
19
+ _pluralize: (count, text) ->
20
+ message = text
21
+ message += 's' if count != 1
22
+ message
23
+
24
+ @start: (fileInputSelector, messageSelector) ->
25
+ iconly.package ||= new iconly.Package(fileInputSelector, messageSelector)
@@ -0,0 +1,68 @@
1
+ class iconly.Project
2
+ constructor: (@projectId, @rootUrl) ->
3
+ self = this
4
+ $(document)
5
+ .on('click', '[data-action="add-to-project"]', -> self._toggleInProject(this))
6
+ .on('click', '[data-action="remove-from-project"]', -> self._toggleInProject(this, true))
7
+ .on('click', '[data-action="share-package"]', (e) -> self._sharePackage(e, this))
8
+
9
+ _toggleInProject: (target, remove) ->
10
+ target = $(target)
11
+ iconId = target.data('id')
12
+ if remove || target.hasClass('selected')
13
+ target.removeClass 'selected'
14
+ @_remove iconId
15
+ if remove
16
+ target.remove()
17
+ $("[data-id='#{iconId}']").removeClass('selected')
18
+ else
19
+ el = $("[data-id='#{iconId}'][data-action='remove-from-project']")
20
+ el.fadeOut -> el.remove()
21
+ @_updateIconCount(-1)
22
+ else
23
+ target.addClass 'selected'
24
+ @_add iconId
25
+ @_updateIconCount(1)
26
+ @_addToProjectIcons(target.html(), iconId)
27
+
28
+ _add: (iconId) ->
29
+ $.post @rootUrl,
30
+ project_id: @projectId,
31
+ icon_id: iconId
32
+
33
+ _remove: (iconId) ->
34
+ $.post "#{@rootUrl}/#{iconId}",
35
+ _method: 'DELETE'
36
+ project_id: @projectId
37
+
38
+ _updateIconCount: (factor) ->
39
+ el = $('#project-icons-count')
40
+ count = parseInt(el.text())
41
+ el.text Math.max(count + factor, 0)
42
+
43
+ _addToProjectIcons: (svg, iconId)->
44
+ markup = """
45
+ <div class="btn btn-svg btn-sm float-left remove" title="Remove from project" data-action="remove-from-project" data-id="#{iconId}">
46
+ #{svg}
47
+ <i class="bg-danger text-white rm"></i>
48
+ </div>
49
+ """
50
+ $(markup)
51
+ .css(display: 'none')
52
+ .appendTo($('#project-icons'))
53
+ .fadeIn()
54
+
55
+ _sharePackage: (e, target) ->
56
+ e.preventDefault()
57
+ url = target.href
58
+ target = $(target)
59
+ shared = true
60
+ if target.hasClass('shared')
61
+ shared = false
62
+ target.removeClass 'shared'
63
+ else
64
+ target.addClass 'shared'
65
+ $.post url
66
+
67
+ @start: (projectId, rootUrl) ->
68
+ iconly.project ||= new iconly.Project(projectId, rootUrl)
@@ -0,0 +1,17 @@
1
+ class iconly.Scroller
2
+ constructor: (options = {}) ->
3
+ @_topSpacing = options.topSpacing
4
+ @_root = $('html body')
5
+ that = this
6
+ $('[data-scroll-to]').on 'click', (e) -> that._onScroll(e, this)
7
+
8
+ _onScroll: (e, link) ->
9
+ el = $(link.hash)
10
+
11
+ return unless el.length
12
+ e.preventDefault()
13
+
14
+ @_root.animate({
15
+ scrollTop: el.offset().top - @_topSpacing
16
+ }, 200)
17
+
@@ -0,0 +1,21 @@
1
+ $brand-primary: #5d9cec;
2
+ $brand-success: #81c868;
3
+ $brand-info: #34d3eb;
4
+ $brand-warning: #ffbd4a;
5
+ $brand-danger: #f05050;
6
+ $brand-default: #5fbeaa;
7
+
8
+ $color-dark: #505458;
9
+ $color-pale: #98a6ad;
10
+
11
+ $body-font: 'Noto Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
12
+ $heading-font: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif;
13
+
14
+ @import 'bootstrap';
15
+ @import 'overrides';
16
+ @import 'buttons';
17
+ @import 'typography';
18
+ @import 'iconly';
19
+ @import 'layout';
20
+ @import 'header';
21
+ @import 'file_input';
@@ -0,0 +1,314 @@
1
+ .btn {
2
+ border-radius: 3px;
3
+ outline: none !important;
4
+ }
5
+ .btn-md {
6
+ padding: 8px 16px;
7
+ }
8
+ .btn-primary,
9
+ .btn-success,
10
+ .btn-default,
11
+ .btn-info,
12
+ .btn-warning,
13
+ .btn-danger,
14
+ .btn-inverse,
15
+ .btn-purple,
16
+ .btn-pink {
17
+ color: #fff !important;
18
+ }
19
+ .btn-default,
20
+ .btn-default:hover,
21
+ .btn-default:focus,
22
+ .btn-default:active,
23
+ .btn-default.active,
24
+ .btn-default.focus,
25
+ .btn-default:active,
26
+ .btn-default:focus,
27
+ .btn-default:hover,
28
+ .open > .dropdown-toggle.btn-default {
29
+ background-color: $brand-default !important;
30
+ border: 1px solid $brand-default !important;
31
+ }
32
+ .btn-white,
33
+ .btn-white:hover,
34
+ .btn-white:focus,
35
+ .btn-white:active,
36
+ .btn-white.active,
37
+ .btn-white.focus,
38
+ .btn-white:active,
39
+ .btn-white:focus,
40
+ .btn-white:hover,
41
+ .open > .dropdown-toggle.btn-white {
42
+ border: 1px solid #eaeaea !important;
43
+ background-color: #ffffff;
44
+ color: #4c5667;
45
+ }
46
+ .btn-white:hover,
47
+ .btn-white:hover:hover,
48
+ .btn-white:focus:hover,
49
+ .btn-white:active:hover,
50
+ .btn-white.active:hover,
51
+ .btn-white.focus:hover,
52
+ .btn-white:active:hover,
53
+ .btn-white:focus:hover,
54
+ .btn-white:hover:hover,
55
+ .open > .dropdown-toggle.btn-white:hover {
56
+ background-color: #f9f9f9;
57
+ }
58
+ .btn-white:focus,
59
+ .btn-white:hover:focus,
60
+ .btn-white:focus:focus,
61
+ .btn-white:active:focus,
62
+ .btn-white.active:focus,
63
+ .btn-white.focus:focus,
64
+ .btn-white:active:focus,
65
+ .btn-white:focus:focus,
66
+ .btn-white:hover:focus,
67
+ .open > .dropdown-toggle.btn-white:focus {
68
+ background-color: #f9f9f9;
69
+ }
70
+ .btn-white:active,
71
+ .btn-white:hover:active,
72
+ .btn-white:focus:active,
73
+ .btn-white:active:active,
74
+ .btn-white.active:active,
75
+ .btn-white.focus:active,
76
+ .btn-white:active:active,
77
+ .btn-white:focus:active,
78
+ .btn-white:hover:active,
79
+ .open > .dropdown-toggle.btn-white:active {
80
+ background-color: #f9f9f9;
81
+ }
82
+ .btn-primary,
83
+ .btn-primary:hover,
84
+ .btn-primary:focus,
85
+ .btn-primary:active,
86
+ .btn-primary.active,
87
+ .btn-primary.focus,
88
+ .btn-primary:active,
89
+ .btn-primary:focus,
90
+ .btn-primary:hover,
91
+ .open > .dropdown-toggle.btn-primary {
92
+ background-color: #5d9cec !important;
93
+ border: 1px solid #5d9cec !important;
94
+ }
95
+ .btn-success,
96
+ .btn-success:hover,
97
+ .btn-success:focus,
98
+ .btn-success:active,
99
+ .btn-success.active,
100
+ .btn-success.focus,
101
+ .btn-success:active,
102
+ .btn-success:focus,
103
+ .btn-success:hover,
104
+ .open > .dropdown-toggle.btn-success {
105
+ background-color: #81c868 !important;
106
+ border: 1px solid #81c868 !important;
107
+ }
108
+ .btn-info,
109
+ .btn-info:hover,
110
+ .btn-info:focus,
111
+ .btn-info:active,
112
+ .btn-info.active,
113
+ .btn-info.focus,
114
+ .btn-info:active,
115
+ .btn-info:focus,
116
+ .btn-info:hover,
117
+ .open > .dropdown-toggle.btn-info {
118
+ background-color: #34d3eb !important;
119
+ border: 1px solid #34d3eb !important;
120
+ }
121
+ .btn-warning,
122
+ .btn-warning:hover,
123
+ .btn-warning:focus,
124
+ .btn-warning:active,
125
+ .btn-warning.active,
126
+ .btn-warning.focus,
127
+ .btn-warning:active,
128
+ .btn-warning:focus,
129
+ .btn-warning:hover,
130
+ .open > .dropdown-toggle.btn-warning {
131
+ background-color: #ffbd4a !important;
132
+ border: 1px solid #ffbd4a !important;
133
+ }
134
+ .btn-danger,
135
+ .btn-danger:active,
136
+ .btn-danger:focus,
137
+ .btn-danger:hover,
138
+ .btn-danger.active,
139
+ .btn-danger.focus,
140
+ .btn-danger:active,
141
+ .btn-danger:focus,
142
+ .btn-danger:hover,
143
+ .open > .dropdown-toggle.btn-danger {
144
+ background-color: #f05050 !important;
145
+ border: 1px solid #f05050 !important;
146
+ }
147
+ .btn-inverse,
148
+ .btn-inverse:hover,
149
+ .btn-inverse:focus,
150
+ .btn-inverse:active,
151
+ .btn-inverse.active,
152
+ .btn-inverse.focus,
153
+ .btn-inverse:active,
154
+ .btn-inverse:focus,
155
+ .btn-inverse:hover,
156
+ .open > .dropdown-toggle.btn-inverse {
157
+ background-color: #4c5667 !important;
158
+ border: 1px solid #4c5667 !important;
159
+ color: #ffffff;
160
+ }
161
+ .btn-purple,
162
+ .btn-purple:hover,
163
+ .btn-purple:focus,
164
+ .btn-purple:active {
165
+ background-color: #7266ba !important;
166
+ border: 1px solid #7266ba !important;
167
+ color: #ffffff;
168
+ }
169
+ .btn-pink,
170
+ .btn-pink:hover,
171
+ .btn-pink:focus,
172
+ .btn-pink:active {
173
+ background-color: #fb6d9d !important;
174
+ border: 1px solid #fb6d9d !important;
175
+ color: #ffffff;
176
+ }
177
+ .open > .dropdown-toggle.btn-primary.btn-custom,
178
+ .open > .dropdown-toggle.btn-success.btn-custom,
179
+ .open > .dropdown-toggle.btn-info.btn-custom,
180
+ .open > .dropdown-toggle.btn-warning.btn-custom,
181
+ .open > .dropdown-toggle.btn-danger.btn-custom,
182
+ .open > .dropdown-toggle.btn-default.btn-custom {
183
+ border-width: 2px !important;
184
+ color: #ffffff !important;
185
+ }
186
+ .open > .dropdown-toggle.btn-white.btn-custom {
187
+ border-width: 2px !important;
188
+ }
189
+ .btn-custom.btn-default {
190
+ color: #5fbeaa !important;
191
+ }
192
+ .btn-custom.btn-primary {
193
+ color: #5d9cec !important;
194
+ }
195
+ .btn-custom.btn-success {
196
+ color: #81c868 !important;
197
+ }
198
+ .btn-custom.btn-info {
199
+ color: #34d3eb !important;
200
+ }
201
+ .btn-custom.btn-warning {
202
+ color: #ffbd4a !important;
203
+ }
204
+ .btn-custom.btn-danger {
205
+ color: #f05050 !important;
206
+ }
207
+ .btn-custom.btn-inverse {
208
+ color: #4c5667 !important;
209
+ }
210
+ .btn-custom.btn-purple {
211
+ color: #7266ba !important;
212
+ }
213
+ .btn-custom.btn-white {
214
+ color: #4c5667 !important;
215
+ }
216
+ .btn-custom.btn-white:hover,
217
+ .btn-custom.btn-white:focus,
218
+ .btn-custom.btn-white:active {
219
+ color: #4c5667 !important;
220
+ background-color: #f4f8fb !important;
221
+ }
222
+ .btn-custom.btn-pink {
223
+ color: #fb6d9d !important;
224
+ }
225
+ .btn-rounded {
226
+ border-radius: 2em !important;
227
+ padding: 6px 20px;
228
+ }
229
+ .btn-rounded .btn-label {
230
+ padding: 7px 15px 7px 20px;
231
+ margin-left: -20px;
232
+ }
233
+ .btn-rounded .btn-label-right {
234
+ margin-right: -20px;
235
+ margin-left: 12px;
236
+ }
237
+ .btn-custom {
238
+ -moz-border-radius: 2px;
239
+ -moz-transition: all 400ms ease-in-out;
240
+ -o-transition: all 400ms ease-in-out;
241
+ -webkit-border-radius: 2px;
242
+ -webkit-transition: all 400ms ease-in-out;
243
+ background: transparent;
244
+ background-color: transparent !important;
245
+ -webkit-border-radius: 5px;
246
+ border-radius: 5px;
247
+ -moz-border-radius: 5px;
248
+ background-clip: padding-box;
249
+ border-width: 2px !important;
250
+ font-weight: 600;
251
+ transition: all 400ms ease-in-out;
252
+ background-clip: inherit;
253
+ }
254
+ .btn-custom:hover {
255
+ color: #ffffff !important;
256
+ border-width: 2px !important;
257
+ }
258
+ .btn-custom:focus {
259
+ color: #ffffff !important;
260
+ border-width: 2px !important;
261
+ }
262
+ .btn-label {
263
+ background: rgba(0, 0, 0, 0.05);
264
+ display: inline-block;
265
+ padding: 7px 15px;
266
+ border-radius: 3px 0 0 3px;
267
+ margin: -7px -13px;
268
+ margin-right: 12px;
269
+ }
270
+ .btn-label-right {
271
+ margin-left: 12px;
272
+ margin-right: -13px;
273
+ border-radius: 0px 3px 3px 0px;
274
+ }
275
+ .btn-group.open .dropdown-toggle {
276
+ box-shadow: none;
277
+ }
278
+ /* File Upload */
279
+ .fileupload {
280
+ overflow: hidden;
281
+ position: relative;
282
+ }
283
+ .fileupload input.upload {
284
+ cursor: pointer;
285
+ filter: alpha(opacity=0);
286
+ font-size: 20px;
287
+ margin: 0;
288
+ opacity: 0;
289
+ padding: 0;
290
+ position: absolute;
291
+ right: 0;
292
+ top: 0;
293
+ }
294
+ /* Social Buttons */
295
+ .btn-facebook {
296
+ color: #ffffff !important;
297
+ background-color: #3b5998 !important;
298
+ }
299
+ .btn-twitter {
300
+ color: #ffffff !important;
301
+ background-color: #00aced !important;
302
+ }
303
+ .btn-linkedin {
304
+ color: #ffffff !important;
305
+ background-color: #007bb6 !important;
306
+ }
307
+ .btn-dribbble {
308
+ color: #ffffff !important;
309
+ background-color: #ea4c89 !important;
310
+ }
311
+ .btn-googleplus {
312
+ color: #ffffff !important;
313
+ background-color: #dd4b39 !important;
314
+ }