groundworkcss-rails 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/app/helpers/breadcrumbs_helper.rb~ +5 -0
- data/app/helpers/flash_block_helper.rb~ +18 -0
- data/app/helpers/flash_helper.rb~ +21 -0
- data/app/helpers/groundwork_flash_helper.rb~ +21 -0
- data/app/helpers/modal_helper.rb~ +42 -0
- data/app/helpers/social_glyph_helper.rb~ +12 -0
- data/lib/generators/groundworkcss/install/install_generator.rb~ +44 -0
- data/lib/generators/groundworkcss/install/templates/application.css.scss~ +8 -0
- data/lib/generators/groundworkcss/install/templates/application.css~ +7 -0
- data/lib/generators/groundworkcss/install/templates/application.js~ +10 -0
- data/lib/generators/groundworkcss/install/templates/groundwork-and-overrides.scss~ +12 -0
- data/lib/generators/groundworkcss/install/templates/groundwork-overrides.scss~ +7 -0
- data/lib/generators/groundworkcss/install/templates/groundwork.coffee~ +0 -0
- data/lib/generators/groundworkcss/install/templates/groundwork.js~ +1 -0
- data/lib/generators/groundworkcss/layout/layout_generator.rb~ +1 -1
- data/lib/generators/groundworkcss/layout/templates/_header.html.erb~ +24 -0
- data/lib/generators/groundworkcss/layout/templates/_sidebar.html.erb~ +18 -0
- data/lib/generators/groundworkcss/layout/templates/layout.html.erb~ +44 -0
- data/lib/groundworkcss/rails/bootstrap.rb~ +2 -0
- data/lib/groundworkcss/rails/engine.rb~ +30 -0
- data/lib/groundworkcss/rails/version.rb +1 -1
- data/lib/groundworkcss/rails/version.rb~ +1 -1
- data/lib/twitter-bootstrap-rails.rb~ +10 -0
- data/vendor/assets/javascripts/groundwork.js~ +8 -0
- data/vendor/assets/javascripts/groundworkcss/groundwork.js +24 -217
- data/vendor/assets/javascripts/groundworkcss/groundwork.js~ +7 -0
- data/vendor/assets/javascripts/groundworkcss/plugins/jquery.modals.js +1 -1
- data/vendor/assets/javascripts/groundworkcss/plugins/jquery.popover.js +1 -1
- data/vendor/assets/javascripts/groundworkcss/plugins/jquery.responsiveTables.js +1 -1
- data/vendor/assets/javascripts/groundworkcss/plugins/jquery.responsiveText.js +1 -1
- data/vendor/assets/javascripts/groundworkcss/plugins/jquery.tooltip.js +24 -10
- data/vendor/assets/stylesheets/groundworkcss-scss/_buttons.scss +3 -0
- data/vendor/assets/stylesheets/groundworkcss-scss/_classes.scss +149 -0
- data/vendor/assets/stylesheets/groundworkcss-scss/_font-awesome.scss~ +534 -0
- data/vendor/assets/stylesheets/groundworkcss-scss/_grid.scss +46 -366
- data/vendor/assets/stylesheets/groundworkcss-scss/_layout.scss +11 -11
- data/vendor/assets/stylesheets/groundworkcss-scss/_mixins.scss +9 -0
- data/vendor/assets/stylesheets/groundworkcss-scss/_responsive.scss +4 -106
- data/vendor/assets/stylesheets/groundworkcss-scss/_social-icons.scss~ +92 -0
- data/vendor/assets/stylesheets/groundworkcss-scss/_tooltips.scss +5 -5
- data/vendor/assets/stylesheets/groundworkcss-scss/_typography.scss +48 -43
- data/vendor/assets/stylesheets/groundworkcss-scss/_variables.scss +47 -46
- data/vendor/assets/stylesheets/groundworkcss-scss/groundwork.scss +3 -0
- metadata +318 -299
- data/vendor/assets/javascripts/groundworkcss/coffee/groundwork.coffee +0 -207
- data/vendor/assets/javascripts/groundworkcss/coffee/plugins/jquery.modals.coffee +0 -162
- data/vendor/assets/javascripts/groundworkcss/coffee/plugins/jquery.popover.coffee +0 -198
- data/vendor/assets/javascripts/groundworkcss/coffee/plugins/jquery.responsiveTables.coffee +0 -56
- data/vendor/assets/javascripts/groundworkcss/coffee/plugins/jquery.responsiveText.coffee +0 -32
- data/vendor/assets/javascripts/groundworkcss/coffee/plugins/jquery.tooltip.coffee +0 -121
@@ -1,207 +0,0 @@
|
|
1
|
-
###
|
2
|
-
*
|
3
|
-
* GroundworkCSS JS by Gary Hepting - https://github.com/groundworkcss/groundwork
|
4
|
-
*
|
5
|
-
* Open source under the BSD License.
|
6
|
-
*
|
7
|
-
* Copyright © 2013 Gary Hepting. All rights reserved.
|
8
|
-
*
|
9
|
-
###
|
10
|
-
|
11
|
-
$(document).ready ->
|
12
|
-
|
13
|
-
# navigation menus
|
14
|
-
delay = ''
|
15
|
-
$('nav > ul > li.menu').on
|
16
|
-
mouseenter: (e) ->
|
17
|
-
if $(window).width() > 768
|
18
|
-
clearTimeout(delay)
|
19
|
-
$('nav > ul > li').removeClass('on')
|
20
|
-
$('nav > ul > li > ul').hide()
|
21
|
-
$(this).addClass('on')
|
22
|
-
mouseleave: (e) ->
|
23
|
-
if $(window).width() > 768
|
24
|
-
delay = setTimeout (->
|
25
|
-
$('nav > ul > li').removeClass('on')
|
26
|
-
$('nav > ul > li > ul').hide()
|
27
|
-
), 350
|
28
|
-
click: (e) ->
|
29
|
-
if $(window).width() < 768
|
30
|
-
if $(e.target).parent('li.menu').size() > 0
|
31
|
-
$this = $(this)
|
32
|
-
$(this).children('ul').slideToggle 300, ->
|
33
|
-
$this.toggleClass('on')
|
34
|
-
e.preventDefault()
|
35
|
-
return false
|
36
|
-
tap: (e) ->
|
37
|
-
if $(e.target).parent('li.menu').size() > 0
|
38
|
-
$this = $(this)
|
39
|
-
$(this).children('ul').slideToggle 300, ->
|
40
|
-
$this.toggleClass('on')
|
41
|
-
e.preventDefault()
|
42
|
-
return false
|
43
|
-
|
44
|
-
# dynamically adjust pagination items
|
45
|
-
limitPaginationItems()
|
46
|
-
# change active page
|
47
|
-
$('.pagination ul > li:not(.next, .prev) a').on 'click', ( (e) ->
|
48
|
-
$('.pagination ul > li:not(.next, .prev)').removeClass('active')
|
49
|
-
$(this).parent('li').addClass('active')
|
50
|
-
# toggle previous button state
|
51
|
-
if $(this).parent('li').hasClass('first')
|
52
|
-
$('.pagination ul > li.prev').addClass('disabled')
|
53
|
-
else
|
54
|
-
$('.pagination ul > li.prev').removeClass('disabled')
|
55
|
-
# toggle next button state
|
56
|
-
if $(this).parent('li').hasClass('last')
|
57
|
-
$('.pagination ul > li.next').addClass('disabled')
|
58
|
-
else
|
59
|
-
$('.pagination ul > li.next').removeClass('disabled')
|
60
|
-
# adjust pagination
|
61
|
-
limitPaginationItems()
|
62
|
-
e.preventDefault()
|
63
|
-
false
|
64
|
-
)
|
65
|
-
# handle previous pagination button
|
66
|
-
$('.pagination ul > li.prev:not(.disabled)').on 'click', ( (e) ->
|
67
|
-
# enable next button
|
68
|
-
$('.pagination ul > li.next').removeClass('disabled')
|
69
|
-
el = $('.pagination ul > li.active')
|
70
|
-
if !el.hasClass('first')
|
71
|
-
# set previous page active
|
72
|
-
el.removeClass('active')
|
73
|
-
el.prev().addClass('active')
|
74
|
-
# adjust pagination
|
75
|
-
limitPaginationItems()
|
76
|
-
# disable previous button if at first page
|
77
|
-
if $('.pagination ul > li.active').hasClass('first')
|
78
|
-
$(this).addClass('disabled')
|
79
|
-
e.preventDefault()
|
80
|
-
false
|
81
|
-
)
|
82
|
-
# handle next pagination button
|
83
|
-
$('.pagination ul > li.next:not(.disabled)').on 'click', ( (e) ->
|
84
|
-
# enable previous button
|
85
|
-
$('.pagination ul > li.prev').removeClass('disabled')
|
86
|
-
el = $('.pagination ul > li.active')
|
87
|
-
if !el.hasClass('last')
|
88
|
-
# set next page active
|
89
|
-
el.removeClass('active')
|
90
|
-
el.next().addClass('active')
|
91
|
-
# adjust pagination
|
92
|
-
limitPaginationItems()
|
93
|
-
# disable next button if at last page
|
94
|
-
if $('.pagination ul > li.active').hasClass('last')
|
95
|
-
$(this).addClass('disabled')
|
96
|
-
e.preventDefault()
|
97
|
-
false
|
98
|
-
)
|
99
|
-
# disable page jump for disabled pagination links
|
100
|
-
$('.pagination ul > li.disabled a').on 'click', ( (e) ->
|
101
|
-
e.preventDefault()
|
102
|
-
false
|
103
|
-
)
|
104
|
-
|
105
|
-
# select all text on invalid input field entries
|
106
|
-
$('.error input, .error textarea,
|
107
|
-
.invalid input, .invalid textarea,
|
108
|
-
input.error, textarea.error,
|
109
|
-
input.invalid, textarea.invalid').on
|
110
|
-
click: ->
|
111
|
-
$(this).focus()
|
112
|
-
$(this).select()
|
113
|
-
|
114
|
-
# polyfill select box placeholders
|
115
|
-
$('span.select select').each ->
|
116
|
-
if $(this).children('option').first().val() == '' and $(this).children('option').first().attr('selected')
|
117
|
-
$(this).addClass('unselected')
|
118
|
-
else
|
119
|
-
$(this).removeClass('unselected')
|
120
|
-
$('span.select select').on
|
121
|
-
change: ->
|
122
|
-
if $(this).children('option').first().val() == '' and $(this).children('option').first().attr('selected')
|
123
|
-
$(this).addClass('unselected')
|
124
|
-
else
|
125
|
-
$(this).removeClass('unselected')
|
126
|
-
|
127
|
-
# tabs
|
128
|
-
$('.tabs > ul > li > a').not('.disabled').click (e) ->
|
129
|
-
tabs = $(this).parents('.tabs')
|
130
|
-
tabs.find('> ul li a').removeClass('active')
|
131
|
-
$(this).addClass('active')
|
132
|
-
tabs.children('div').removeClass('active')
|
133
|
-
tabs.children($(this).attr('href')).addClass('active')
|
134
|
-
e.preventDefault()
|
135
|
-
return false
|
136
|
-
|
137
|
-
# responsive headings
|
138
|
-
$('.responsive').not('table').each (index, object) ->
|
139
|
-
compression = 10
|
140
|
-
min = 10
|
141
|
-
max = 200
|
142
|
-
compression = parseFloat $(this).attr('data-compression') || compression
|
143
|
-
min = parseFloat $(this).attr('data-min') || min
|
144
|
-
max = parseFloat $(this).attr('data-max') || max
|
145
|
-
$(object).responsiveText
|
146
|
-
compressor: compression,
|
147
|
-
minSize: min,
|
148
|
-
maxSize: max
|
149
|
-
|
150
|
-
# responsive tables
|
151
|
-
$('table.responsive').each (index, object) ->
|
152
|
-
compression = 30
|
153
|
-
min = 8
|
154
|
-
max = 13
|
155
|
-
padding = 0
|
156
|
-
compression = parseFloat $(this).attr('data-compression') || compression
|
157
|
-
min = parseFloat $(this).attr('data-min') || min
|
158
|
-
max = parseFloat $(this).attr('data-max') || max
|
159
|
-
padding = parseFloat $(this).attr('data-padding') || padding
|
160
|
-
$(object).responsiveTable
|
161
|
-
compressor: compression,
|
162
|
-
minSize: min,
|
163
|
-
maxSize: max,
|
164
|
-
padding: padding
|
165
|
-
|
166
|
-
# tooltips
|
167
|
-
$('.tooltip[title]').tooltip()
|
168
|
-
|
169
|
-
# modals
|
170
|
-
$('div.modal').modal()
|
171
|
-
|
172
|
-
|
173
|
-
$(window).load ->
|
174
|
-
$('.slider').orbit()
|
175
|
-
|
176
|
-
$(window).resize ->
|
177
|
-
limitPaginationItems()
|
178
|
-
|
179
|
-
# responsive pagination
|
180
|
-
limitPaginationItems = ->
|
181
|
-
#process pagination lists
|
182
|
-
$('.pagination ul').each ->
|
183
|
-
pagination = $(this)
|
184
|
-
# pagination dimensions
|
185
|
-
visibleSpace = pagination.outerWidth() - pagination.children('li.prev').outerWidth() - pagination.children('li.next').outerWidth()
|
186
|
-
# hide pages that don't fit
|
187
|
-
pagination.children('li').not('.prev, .next, .active').hide()
|
188
|
-
visibleItemsWidth = 0
|
189
|
-
pagination.children('li:visible').each ->
|
190
|
-
visibleItemsWidth += $(this).outerWidth()
|
191
|
-
# loop
|
192
|
-
while (visibleItemsWidth + 29) < visibleSpace
|
193
|
-
# show the next page number
|
194
|
-
pagination.children('li:visible').not('.next').last().next().show()
|
195
|
-
visibleItemsWidth = 0
|
196
|
-
pagination.children('li:visible').each ->
|
197
|
-
visibleItemsWidth += $(this).outerWidth()
|
198
|
-
if (visibleItemsWidth + 29) <= visibleSpace
|
199
|
-
# show the previous page number
|
200
|
-
pagination.children('li:visible').not('.prev').first().prev().show()
|
201
|
-
visibleItemsWidth = 0
|
202
|
-
pagination.children('li:visible').each ->
|
203
|
-
visibleItemsWidth += $(this).outerWidth()
|
204
|
-
# recalculate visibleItemsWidth
|
205
|
-
visibleItemsWidth = 0
|
206
|
-
pagination.children('li:visible').each ->
|
207
|
-
visibleItemsWidth += $(this).outerWidth()
|
@@ -1,162 +0,0 @@
|
|
1
|
-
###
|
2
|
-
*
|
3
|
-
* jQuery Modals by Gary Hepting
|
4
|
-
* https://github.com/ghepting/modal
|
5
|
-
*
|
6
|
-
* Based on Avgrund by Hakim El Hattab <3
|
7
|
-
*
|
8
|
-
###
|
9
|
-
|
10
|
-
(($) ->
|
11
|
-
|
12
|
-
# setup iframe modal
|
13
|
-
if $('div#iframeModal').length < 1
|
14
|
-
$('body').append('<div class="iframe modal" id="iframeModal"><iframe marginheight="0" marginwidth="0" frameborder="0"></iframe></div>')
|
15
|
-
$('div#iframeModal').prepend('<i class="close icon-remove"></i>').prepend('<i class="fullscreen icon-resize-full"></i>')
|
16
|
-
$('a.modal').each ->
|
17
|
-
$(this).attr('data-url',$(this).attr('href'))
|
18
|
-
$(this).attr('href','#iframeModal')
|
19
|
-
# bind external modal links to iframe modal
|
20
|
-
$('a.modal').on "click", (e) ->
|
21
|
-
$('div#iframeModal iframe').replaceWith('<iframe marginheight="0" marginwidth="0" frameborder="0" width="100%" height="100%" src="'+$(this).attr('data-url')+'"></iframe>')
|
22
|
-
e.preventDefault()
|
23
|
-
false
|
24
|
-
|
25
|
-
elems = []
|
26
|
-
$.fn.modal = ->
|
27
|
-
|
28
|
-
@each ->
|
29
|
-
$(this).not('#iframeModal').wrapInner('<div class="modal-content"></div>')
|
30
|
-
$(this).prepend('<i class="close icon-remove"></i>').prepend('<i class="fullscreen icon-resize-full"></i>').appendTo('body')
|
31
|
-
# bind each modal link to a modal
|
32
|
-
$('[href=#'+$(this).attr('id')+']').on "click", (e) ->
|
33
|
-
modals.open($(this).attr('href'))
|
34
|
-
e.preventDefault()
|
35
|
-
return false
|
36
|
-
|
37
|
-
# close button
|
38
|
-
$('div.modal .close').on "click", ->
|
39
|
-
modals.close()
|
40
|
-
# fullscreen button
|
41
|
-
$('div.modal .fullscreen').on "click", ->
|
42
|
-
modals.fullscreen($(this).parent('div.modal'))
|
43
|
-
|
44
|
-
modals = (->
|
45
|
-
|
46
|
-
# ready state
|
47
|
-
$('html').addClass('modal-ready')
|
48
|
-
|
49
|
-
# create overlay
|
50
|
-
if $("#overlay").length < 1
|
51
|
-
$('body').append('<div id="overlay"></div>')
|
52
|
-
|
53
|
-
# bind overlay to close
|
54
|
-
$('#overlay, div.modal .close').bind "click", (e) ->
|
55
|
-
close()
|
56
|
-
|
57
|
-
open = (elem) ->
|
58
|
-
# bind esc key
|
59
|
-
$(window).bind "keydown", (e) ->
|
60
|
-
keyCode = (if (e.which) then e.which else e.keyCode)
|
61
|
-
if keyCode is 27
|
62
|
-
close()
|
63
|
-
$(elem).addClass("active")
|
64
|
-
unless $(elem).hasClass('iframe')
|
65
|
-
$(elem).css
|
66
|
-
width: 'auto',
|
67
|
-
height: 'auto'
|
68
|
-
$(elem).css
|
69
|
-
height: $(elem).outerHeight(),
|
70
|
-
$(elem).css
|
71
|
-
top: '50%',
|
72
|
-
left: '50%',
|
73
|
-
'margin-top': ($(elem).outerHeight() / -2) + 'px',
|
74
|
-
'margin-left': ($(elem).outerWidth() / -2) + 'px'
|
75
|
-
setTimeout ->
|
76
|
-
$('html').addClass("modal-active")
|
77
|
-
, 0
|
78
|
-
setTimeout ->
|
79
|
-
$('html').removeClass('modal-ready')
|
80
|
-
, 400
|
81
|
-
return
|
82
|
-
|
83
|
-
close = ->
|
84
|
-
modal = $('div.modal.active')
|
85
|
-
$(window).unbind "keydown"
|
86
|
-
$('html').removeClass("modal-active").addClass('modal-ready')
|
87
|
-
if modal.hasClass('iframe')
|
88
|
-
$('div#iframeModal iframe').replaceWith('<iframe marginheight="0" marginwidth="0" frameborder="0"></iframe>')
|
89
|
-
modal.css
|
90
|
-
width: '80%',
|
91
|
-
height: '80%'
|
92
|
-
else
|
93
|
-
modal.css
|
94
|
-
width: 'auto',
|
95
|
-
height: 'auto'
|
96
|
-
modal.css
|
97
|
-
top: '10%',
|
98
|
-
left: '10%',
|
99
|
-
'max-width': '80%',
|
100
|
-
'max-height': '80%',
|
101
|
-
'margin-top': 0,
|
102
|
-
'margin-left': 0
|
103
|
-
modal.removeClass("active").removeClass("fullscreen")
|
104
|
-
$('i.fullscreen', modal).removeClass('icon-resize-small').addClass('icon-resize-full')
|
105
|
-
return
|
106
|
-
|
107
|
-
fullscreen = (elem) ->
|
108
|
-
if $('div.modal.active').hasClass('fullscreen')
|
109
|
-
$('div.modal i.fullscreen').removeClass('icon-resize-small').addClass('icon-resize-full')
|
110
|
-
if $('div.modal.active').hasClass('iframe')
|
111
|
-
$('div.modal.active').css
|
112
|
-
width: '80%',
|
113
|
-
height: '80%'
|
114
|
-
else
|
115
|
-
$('div.modal.active').css
|
116
|
-
width: 'auto',
|
117
|
-
height: 'auto'
|
118
|
-
$('div.modal.active').css
|
119
|
-
height: $('div.modal.active').outerHeight()
|
120
|
-
$('div.modal.active').removeClass('fullscreen').css
|
121
|
-
'max-width': '80%',
|
122
|
-
'max-height': '80%'
|
123
|
-
$('div.modal.active').delay(100).css
|
124
|
-
top: '50%',
|
125
|
-
left: '50%',
|
126
|
-
'margin-top': ($('div.modal.active').outerHeight() / -2) + 'px',
|
127
|
-
'margin-left': ($('div.modal.active').outerWidth() / -2) + 'px'
|
128
|
-
else
|
129
|
-
$('div.modal i.fullscreen').addClass('icon-resize-small').removeClass('icon-resize-full')
|
130
|
-
$('div.modal.active').addClass('fullscreen').css
|
131
|
-
top: 0,
|
132
|
-
left: 0,
|
133
|
-
'margin-top': 0,
|
134
|
-
'margin-left': 0,
|
135
|
-
width: '100%',
|
136
|
-
height: '100%',
|
137
|
-
'max-width': '100%',
|
138
|
-
'max-height': '100%'
|
139
|
-
return
|
140
|
-
|
141
|
-
open: open
|
142
|
-
close: close
|
143
|
-
fullscreen: fullscreen
|
144
|
-
)()
|
145
|
-
|
146
|
-
$(window).resize ->
|
147
|
-
$('div.modal.active').each ->
|
148
|
-
unless $(this).hasClass('fullscreen')
|
149
|
-
$(this).removeClass('active').css(
|
150
|
-
top: '50%',
|
151
|
-
left: '50%',
|
152
|
-
'margin-top': ($(this).outerHeight() / -2) + 'px',
|
153
|
-
'margin-left': ($(this).outerWidth() / -2) + 'px'
|
154
|
-
).addClass('active')
|
155
|
-
unless $(this).hasClass('iframe')
|
156
|
-
$(this).css
|
157
|
-
height: 'auto'
|
158
|
-
$(this).css
|
159
|
-
height: $(this).outerHeight()
|
160
|
-
|
161
|
-
|
162
|
-
) jQuery
|
@@ -1,198 +0,0 @@
|
|
1
|
-
###
|
2
|
-
*
|
3
|
-
* jQuery Popovers by Gary Hepting - https://github.com/ghepting/jquery-popovers
|
4
|
-
*
|
5
|
-
* Open source under the BSD License.
|
6
|
-
*
|
7
|
-
* Copyright © 2013 Gary Hepting. All rights reserved.
|
8
|
-
*
|
9
|
-
###
|
10
|
-
|
11
|
-
(($) ->
|
12
|
-
$.fn.popover = (options) ->
|
13
|
-
defaults =
|
14
|
-
hover: false # show popovers on hover
|
15
|
-
click: true # show popovers on click
|
16
|
-
resize: true # resize popovers on window resize/orientation change
|
17
|
-
scroll: true # reposition popovers on scroll
|
18
|
-
topOffset: 0 # top offset (accomodate for fixed navigation, etc.)
|
19
|
-
delay: 500 # delay before hiding (ms)
|
20
|
-
speed: 100 # animation speed (ms)
|
21
|
-
|
22
|
-
options = $.extend(defaults, options)
|
23
|
-
|
24
|
-
popover = $('#popover') # popover element
|
25
|
-
delayHide = '' # delay
|
26
|
-
delayAdjust = '' # delay
|
27
|
-
trigger = '' # trigger element
|
28
|
-
|
29
|
-
# get element position relative to the viewport
|
30
|
-
getElementPosition = (el) ->
|
31
|
-
offset = el.offset()
|
32
|
-
win = $(window)
|
33
|
-
top: top = offset.top - win.scrollTop()
|
34
|
-
left: left = offset.left - win.scrollLeft()
|
35
|
-
bottom: bottom = win.height() - top - el.outerHeight()
|
36
|
-
right: right = win.width() - left - el.outerWidth()
|
37
|
-
|
38
|
-
resetPopover = (resize) ->
|
39
|
-
popover.css
|
40
|
-
top: 'auto'
|
41
|
-
right: 'auto'
|
42
|
-
bottom: 'auto'
|
43
|
-
left: 'auto'
|
44
|
-
if resize
|
45
|
-
popover.css
|
46
|
-
width: 'auto'
|
47
|
-
popover.removeClass('top')
|
48
|
-
popover.removeClass('right')
|
49
|
-
popover.removeClass('bottom')
|
50
|
-
popover.removeClass('left')
|
51
|
-
|
52
|
-
setPosition = (trigger, skipAnimation, resize) ->
|
53
|
-
if trigger
|
54
|
-
if resize
|
55
|
-
resetPopover(true)
|
56
|
-
else
|
57
|
-
resetPopover()
|
58
|
-
# get trigger element coordinates
|
59
|
-
coords = getElementPosition(trigger)
|
60
|
-
# popover dimensions
|
61
|
-
if popover.outerWidth() > ($(window).width() - 20)
|
62
|
-
popover.css('width',$(window).width() - 20)
|
63
|
-
# adjust max width of popover
|
64
|
-
popover.css('max-width',
|
65
|
-
Math.min(
|
66
|
-
($(window).width()-parseInt($('body').css('padding-left'))-parseInt($('body').css('padding-right'))),
|
67
|
-
parseInt(popover.css('max-width'))
|
68
|
-
)
|
69
|
-
)
|
70
|
-
width = popover.outerWidth()
|
71
|
-
height = popover.outerHeight()
|
72
|
-
# horizontal positioning
|
73
|
-
attrs = {}
|
74
|
-
if coords.left <= coords.right # default position
|
75
|
-
popover.addClass('left')
|
76
|
-
attrs.left = coords.left
|
77
|
-
else # pin from right side
|
78
|
-
popover.addClass('right')
|
79
|
-
attrs.right = coords.right
|
80
|
-
# veritcal positioning
|
81
|
-
if (coords.top-options.topOffset) > (height+20) # top positioned popover
|
82
|
-
popover.addClass('top')
|
83
|
-
attrs.top = trigger.offset().top - height - 20
|
84
|
-
else # bottom positioned popover
|
85
|
-
popover.addClass('bottom')
|
86
|
-
attrs.top = trigger.offset().top + 15
|
87
|
-
popover.css attrs
|
88
|
-
# compensate for adjustment normally made by animation in init_popover()
|
89
|
-
if skipAnimation
|
90
|
-
popover.css
|
91
|
-
top: '+=10'
|
92
|
-
|
93
|
-
closePopover = ->
|
94
|
-
$('.popover-trigger').removeClass('popover-trigger')
|
95
|
-
popover.removeClass('sticky').remove()
|
96
|
-
|
97
|
-
showPopover = (e) ->
|
98
|
-
trigger = $(e.target) # trigger element
|
99
|
-
if !trigger.hasClass('popover-trigger')
|
100
|
-
closePopover() # close popover
|
101
|
-
trigger.addClass('popover-trigger')
|
102
|
-
# set popover content
|
103
|
-
tip = $('#'+trigger.attr('data-content')).html()
|
104
|
-
popover = $("<div id=\"popover\"></div>") # create popover DOM element
|
105
|
-
return false if not tip or tip is ""
|
106
|
-
# remove title to avoid overlapping default tooltips
|
107
|
-
trigger.removeAttr "title"
|
108
|
-
# add popover element to DOM
|
109
|
-
popover.css("opacity", 0).html(tip).appendTo "body"
|
110
|
-
# initialize popover
|
111
|
-
setPosition(trigger)
|
112
|
-
popover.animate
|
113
|
-
top: "+=10"
|
114
|
-
opacity: 1
|
115
|
-
, options.speed
|
116
|
-
|
117
|
-
# popover click
|
118
|
-
popover.bind "click", (e) ->
|
119
|
-
if(e.target.tagName != 'a')
|
120
|
-
popover.addClass('sticky')
|
121
|
-
e.stopPropagation()
|
122
|
-
e.preventDefault()
|
123
|
-
false
|
124
|
-
|
125
|
-
# close button click
|
126
|
-
popover.find('.close').bind "click", (e) ->
|
127
|
-
$('.popover-trigger').removeClass('popover-trigger')
|
128
|
-
popover.removeClass('sticky').remove()
|
129
|
-
e.stopPropagation()
|
130
|
-
e.preventDefault()
|
131
|
-
false
|
132
|
-
|
133
|
-
# hover into the popover
|
134
|
-
popover.bind
|
135
|
-
mouseenter: ->
|
136
|
-
# cancel closing popover
|
137
|
-
clearTimeout(delayHide)
|
138
|
-
mouseleave: ->
|
139
|
-
if(!popover.hasClass('sticky'))
|
140
|
-
# close popover on a delay if it's not sticky
|
141
|
-
delayHide = setTimeout (->
|
142
|
-
$('.popover-trigger').removeClass('popover-trigger')
|
143
|
-
popover.removeClass('sticky').remove()
|
144
|
-
), 500
|
145
|
-
|
146
|
-
|
147
|
-
@each ->
|
148
|
-
$this = $(this)
|
149
|
-
|
150
|
-
if options.hover
|
151
|
-
# hover on trigger element
|
152
|
-
$this.bind
|
153
|
-
mouseenter: (e) ->
|
154
|
-
trigger = $(e.target)
|
155
|
-
clearTimeout(delayHide) # cancel delayed close
|
156
|
-
if(!$this.hasClass('popover-trigger') && !popover.hasClass('sticky'))
|
157
|
-
showPopover(e) # show popover
|
158
|
-
mouseleave: ->
|
159
|
-
if(!popover.hasClass('sticky'))
|
160
|
-
# delay closing popover
|
161
|
-
delayHide = setTimeout ->
|
162
|
-
closePopover() #close popover
|
163
|
-
, options.delay
|
164
|
-
|
165
|
-
if options.click
|
166
|
-
# click trigger element
|
167
|
-
$this.bind "click", (e) ->
|
168
|
-
trigger = $(e.target)
|
169
|
-
if(!trigger.hasClass('popover-trigger'))
|
170
|
-
closePopover() #close popover
|
171
|
-
showPopover(e) # show popover
|
172
|
-
popover.addClass('sticky') # make popover sticky
|
173
|
-
e.preventDefault()
|
174
|
-
e.stopPropagation()
|
175
|
-
false
|
176
|
-
|
177
|
-
if options.resize
|
178
|
-
# handle viewport resize
|
179
|
-
$(window).resize ->
|
180
|
-
clearTimeout(delayAdjust) # cancel delayed adjustment
|
181
|
-
# attempt to wait until user finishes resizing the window
|
182
|
-
delayAdjust = setTimeout ->
|
183
|
-
setPosition(trigger, true, true)
|
184
|
-
, 100
|
185
|
-
|
186
|
-
if options.scroll
|
187
|
-
# handle window scroll
|
188
|
-
$(window).scroll ->
|
189
|
-
setPosition(trigger, true)
|
190
|
-
|
191
|
-
# close popover on body click
|
192
|
-
$('html, body').bind "click", (e) ->
|
193
|
-
$('.popover-trigger').removeClass('popover-trigger')
|
194
|
-
popover.removeClass('sticky').remove()
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
) jQuery
|