sass-twitter-bootstrap-rails 0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +4 -0
  3. data/README.md +54 -0
  4. data/Rakefile +2 -0
  5. data/lib/sass-twitter-bootstrap-rails.rb +1 -0
  6. data/lib/sass-twitter-bootstrap/rails.rb +6 -0
  7. data/lib/sass-twitter-bootstrap/rails/engine.rb +6 -0
  8. data/lib/sass-twitter-bootstrap/rails/version.rb +7 -0
  9. data/sass-twitter-bootstrap-rails.gemspec +22 -0
  10. data/vendor/assets/javascripts/twitter/bootstrap-alerts.js +113 -0
  11. data/vendor/assets/javascripts/twitter/bootstrap-buttons.js +62 -0
  12. data/vendor/assets/javascripts/twitter/bootstrap-dropdown.js +55 -0
  13. data/vendor/assets/javascripts/twitter/bootstrap-modal.js +260 -0
  14. data/vendor/assets/javascripts/twitter/bootstrap-popover.js +86 -0
  15. data/vendor/assets/javascripts/twitter/bootstrap-scrollspy.js +107 -0
  16. data/vendor/assets/javascripts/twitter/bootstrap-tabs.js +80 -0
  17. data/vendor/assets/javascripts/twitter/bootstrap-twipsy.js +310 -0
  18. data/vendor/assets/javascripts/twitter/bootstrap.js +1 -0
  19. data/vendor/assets/stylesheets/twitter/bootstrap.scss +29 -0
  20. data/vendor/assets/stylesheets/twitter/forms.scss +478 -0
  21. data/vendor/assets/stylesheets/twitter/mixins.scss +220 -0
  22. data/vendor/assets/stylesheets/twitter/patterns.scss +1060 -0
  23. data/vendor/assets/stylesheets/twitter/reset.scss +141 -0
  24. data/vendor/assets/stylesheets/twitter/scaffolding.scss +108 -0
  25. data/vendor/assets/stylesheets/twitter/tables.scss +224 -0
  26. data/vendor/assets/stylesheets/twitter/type.scss +187 -0
  27. data/vendor/assets/stylesheets/twitter/variables.scss +60 -0
  28. metadata +84 -0
@@ -0,0 +1,86 @@
1
+ /* ===========================================================
2
+ * bootstrap-popover.js v1.4.0
3
+ * http://twitter.github.com/bootstrap/javascript.html#popover
4
+ * ===========================================================
5
+ * Copyright 2011 Twitter, Inc.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ * =========================================================== */
19
+
20
+
21
+ !function( $ ) {
22
+
23
+ "use strict"
24
+
25
+ var Popover = function ( element, options ) {
26
+ this.$element = $(element)
27
+ this.options = options
28
+ this.enabled = true
29
+ this.fixTitle()
30
+ }
31
+
32
+ /* NOTE: POPOVER EXTENDS BOOTSTRAP-TWIPSY.js
33
+ ========================================= */
34
+
35
+ Popover.prototype = $.extend({}, $.fn.twipsy.Twipsy.prototype, {
36
+
37
+ setContent: function () {
38
+ var $tip = this.tip()
39
+ $tip.find('.title')[this.options.html ? 'html' : 'text'](this.getTitle())
40
+ $tip.find('.content p')[this.options.html ? 'html' : 'text'](this.getContent())
41
+ $tip[0].className = 'popover'
42
+ }
43
+
44
+ , hasContent: function () {
45
+ return this.getTitle() || this.getContent()
46
+ }
47
+
48
+ , getContent: function () {
49
+ var content
50
+ , $e = this.$element
51
+ , o = this.options
52
+
53
+ if (typeof this.options.content == 'string') {
54
+ content = this.options.content
55
+ } else if (typeof this.options.content == 'function') {
56
+ content = this.options.content.call(this.$element[0])
57
+ }
58
+ return content
59
+ }
60
+
61
+ , tip: function() {
62
+ if (!this.$tip) {
63
+ this.$tip = $('<div class="popover" />')
64
+ .html(this.options.template)
65
+ }
66
+ return this.$tip
67
+ }
68
+
69
+ })
70
+
71
+
72
+ /* POPOVER PLUGIN DEFINITION
73
+ * ======================= */
74
+
75
+ $.fn.popover = function (options) {
76
+ if (typeof options == 'object') options = $.extend({}, $.fn.popover.defaults, options)
77
+ $.fn.twipsy.initWith.call(this, options, Popover, 'popover')
78
+ return this
79
+ }
80
+
81
+ $.fn.popover.defaults = $.extend({} , $.fn.twipsy.defaults, {
82
+ placement: 'right'
83
+ , template: '<div class="arrow"></div><div class="inner"><h3 class="title"></h3><div class="content"><p></p></div></div>'
84
+ })
85
+
86
+ }( window.jQuery || window.ender );
@@ -0,0 +1,107 @@
1
+ /* =============================================================
2
+ * bootstrap-scrollspy.js v1.4.0
3
+ * http://twitter.github.com/bootstrap/javascript.html#scrollspy
4
+ * =============================================================
5
+ * Copyright 2011 Twitter, Inc.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ * ============================================================== */
19
+
20
+
21
+ !function ( $ ) {
22
+
23
+ "use strict"
24
+
25
+ var $window = $(window)
26
+
27
+ function ScrollSpy( topbar, selector ) {
28
+ var processScroll = $.proxy(this.processScroll, this)
29
+ this.$topbar = $(topbar)
30
+ this.selector = selector || 'li > a'
31
+ this.refresh()
32
+ this.$topbar.delegate(this.selector, 'click', processScroll)
33
+ $window.scroll(processScroll)
34
+ this.processScroll()
35
+ }
36
+
37
+ ScrollSpy.prototype = {
38
+
39
+ refresh: function () {
40
+ this.targets = this.$topbar.find(this.selector).map(function () {
41
+ var href = $(this).attr('href')
42
+ return /^#\w/.test(href) && $(href).length ? href : null
43
+ })
44
+
45
+ this.offsets = $.map(this.targets, function (id) {
46
+ return $(id).offset().top
47
+ })
48
+ }
49
+
50
+ , processScroll: function () {
51
+ var scrollTop = $window.scrollTop() + 10
52
+ , offsets = this.offsets
53
+ , targets = this.targets
54
+ , activeTarget = this.activeTarget
55
+ , i
56
+
57
+ for (i = offsets.length; i--;) {
58
+ activeTarget != targets[i]
59
+ && scrollTop >= offsets[i]
60
+ && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
61
+ && this.activateButton( targets[i] )
62
+ }
63
+ }
64
+
65
+ , activateButton: function (target) {
66
+ this.activeTarget = target
67
+
68
+ this.$topbar
69
+ .find(this.selector).parent('.active')
70
+ .removeClass('active')
71
+
72
+ this.$topbar
73
+ .find(this.selector + '[href="' + target + '"]')
74
+ .parent('li')
75
+ .addClass('active')
76
+ }
77
+
78
+ }
79
+
80
+ /* SCROLLSPY PLUGIN DEFINITION
81
+ * =========================== */
82
+
83
+ $.fn.scrollSpy = function( options ) {
84
+ var scrollspy = this.data('scrollspy')
85
+
86
+ if (!scrollspy) {
87
+ return this.each(function () {
88
+ $(this).data('scrollspy', new ScrollSpy( this, options ))
89
+ })
90
+ }
91
+
92
+ if ( options === true ) {
93
+ return scrollspy
94
+ }
95
+
96
+ if ( typeof options == 'string' ) {
97
+ scrollspy[options]()
98
+ }
99
+
100
+ return this
101
+ }
102
+
103
+ $(document).ready(function () {
104
+ $('body').scrollSpy('[data-scrollspy] li > a')
105
+ })
106
+
107
+ }( window.jQuery || window.ender );
@@ -0,0 +1,80 @@
1
+ /* ========================================================
2
+ * bootstrap-tabs.js v1.4.0
3
+ * http://twitter.github.com/bootstrap/javascript.html#tabs
4
+ * ========================================================
5
+ * Copyright 2011 Twitter, Inc.
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ * ======================================================== */
19
+
20
+
21
+ !function( $ ){
22
+
23
+ "use strict"
24
+
25
+ function activate ( element, container ) {
26
+ container
27
+ .find('> .active')
28
+ .removeClass('active')
29
+ .find('> .dropdown-menu > .active')
30
+ .removeClass('active')
31
+
32
+ element.addClass('active')
33
+
34
+ if ( element.parent('.dropdown-menu') ) {
35
+ element.closest('li.dropdown').addClass('active')
36
+ }
37
+ }
38
+
39
+ function tab( e ) {
40
+ var $this = $(this)
41
+ , $ul = $this.closest('ul:not(.dropdown-menu)')
42
+ , href = $this.attr('href')
43
+ , previous
44
+ , $href
45
+
46
+ if ( /^#\w+/.test(href) ) {
47
+ e.preventDefault()
48
+
49
+ if ( $this.parent('li').hasClass('active') ) {
50
+ return
51
+ }
52
+
53
+ previous = $ul.find('.active a').last()[0]
54
+ $href = $(href)
55
+
56
+ activate($this.parent('li'), $ul)
57
+ activate($href, $href.parent())
58
+
59
+ $this.trigger({
60
+ type: 'change'
61
+ , relatedTarget: previous
62
+ })
63
+ }
64
+ }
65
+
66
+
67
+ /* TABS/PILLS PLUGIN DEFINITION
68
+ * ============================ */
69
+
70
+ $.fn.tabs = $.fn.pills = function ( selector ) {
71
+ return this.each(function () {
72
+ $(this).delegate(selector || '.tabs li > a, .pills > li > a', 'click', tab)
73
+ })
74
+ }
75
+
76
+ $(document).ready(function () {
77
+ $('body').tabs('ul[data-tabs] li > a, ul[data-pills] > li > a')
78
+ })
79
+
80
+ }( window.jQuery || window.ender );
@@ -0,0 +1,310 @@
1
+ /* ==========================================================
2
+ * bootstrap-twipsy.js v1.4.0
3
+ * http://twitter.github.com/bootstrap/javascript.html#twipsy
4
+ * Adapted from the original jQuery.tipsy by Jason Frame
5
+ * ==========================================================
6
+ * Copyright 2011 Twitter, Inc.
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ * ========================================================== */
20
+
21
+
22
+ !function( $ ) {
23
+
24
+ "use strict"
25
+
26
+ /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
27
+ * ======================================================= */
28
+
29
+ var transitionEnd
30
+
31
+ $(document).ready(function () {
32
+
33
+ $.support.transition = (function () {
34
+ var thisBody = document.body || document.documentElement
35
+ , thisStyle = thisBody.style
36
+ , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
37
+ return support
38
+ })()
39
+
40
+ // set CSS transition event type
41
+ if ( $.support.transition ) {
42
+ transitionEnd = "TransitionEnd"
43
+ if ( $.browser.webkit ) {
44
+ transitionEnd = "webkitTransitionEnd"
45
+ } else if ( $.browser.mozilla ) {
46
+ transitionEnd = "transitionend"
47
+ } else if ( $.browser.opera ) {
48
+ transitionEnd = "oTransitionEnd"
49
+ }
50
+ }
51
+
52
+ })
53
+
54
+
55
+ /* TWIPSY PUBLIC CLASS DEFINITION
56
+ * ============================== */
57
+
58
+ var Twipsy = function ( element, options ) {
59
+ this.$element = $(element)
60
+ this.options = options
61
+ this.enabled = true
62
+ this.fixTitle()
63
+ }
64
+
65
+ Twipsy.prototype = {
66
+
67
+ show: function() {
68
+ var pos
69
+ , actualWidth
70
+ , actualHeight
71
+ , placement
72
+ , $tip
73
+ , tp
74
+
75
+ if (this.hasContent() && this.enabled) {
76
+ $tip = this.tip()
77
+ this.setContent()
78
+
79
+ if (this.options.animate) {
80
+ $tip.addClass('fade')
81
+ }
82
+
83
+ $tip
84
+ .remove()
85
+ .css({ top: 0, left: 0, display: 'block' })
86
+ .prependTo(document.body)
87
+
88
+ pos = $.extend({}, this.$element.offset(), {
89
+ width: this.$element[0].offsetWidth
90
+ , height: this.$element[0].offsetHeight
91
+ })
92
+
93
+ actualWidth = $tip[0].offsetWidth
94
+ actualHeight = $tip[0].offsetHeight
95
+
96
+ placement = maybeCall(this.options.placement, this, [ $tip[0], this.$element[0] ])
97
+
98
+ switch (placement) {
99
+ case 'below':
100
+ tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}
101
+ break
102
+ case 'above':
103
+ tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2}
104
+ break
105
+ case 'left':
106
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset}
107
+ break
108
+ case 'right':
109
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset}
110
+ break
111
+ }
112
+
113
+ $tip
114
+ .css(tp)
115
+ .addClass(placement)
116
+ .addClass('in')
117
+ }
118
+ }
119
+
120
+ , setContent: function () {
121
+ var $tip = this.tip()
122
+ $tip.find('.twipsy-inner')[this.options.html ? 'html' : 'text'](this.getTitle())
123
+ $tip[0].className = 'twipsy'
124
+ }
125
+
126
+ , hide: function() {
127
+ var that = this
128
+ , $tip = this.tip()
129
+
130
+ $tip.removeClass('in')
131
+
132
+ function removeElement () {
133
+ $tip.remove()
134
+ }
135
+
136
+ $.support.transition && this.$tip.hasClass('fade') ?
137
+ $tip.bind(transitionEnd, removeElement) :
138
+ removeElement()
139
+ }
140
+
141
+ , fixTitle: function() {
142
+ var $e = this.$element
143
+ if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
144
+ $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
145
+ }
146
+ }
147
+
148
+ , hasContent: function () {
149
+ return this.getTitle()
150
+ }
151
+
152
+ , getTitle: function() {
153
+ var title
154
+ , $e = this.$element
155
+ , o = this.options
156
+
157
+ this.fixTitle()
158
+
159
+ if (typeof o.title == 'string') {
160
+ title = $e.attr(o.title == 'title' ? 'data-original-title' : o.title)
161
+ } else if (typeof o.title == 'function') {
162
+ title = o.title.call($e[0])
163
+ }
164
+
165
+ title = ('' + title).replace(/(^\s*|\s*$)/, "")
166
+
167
+ return title || o.fallback
168
+ }
169
+
170
+ , tip: function() {
171
+ if (!this.$tip) {
172
+ this.$tip = $('<div class="twipsy" />').html(this.options.template)
173
+ }
174
+ return this.$tip
175
+ }
176
+
177
+ , validate: function() {
178
+ if (!this.$element[0].parentNode) {
179
+ this.hide()
180
+ this.$element = null
181
+ this.options = null
182
+ }
183
+ }
184
+
185
+ , enable: function() {
186
+ this.enabled = true
187
+ }
188
+
189
+ , disable: function() {
190
+ this.enabled = false
191
+ }
192
+
193
+ , toggleEnabled: function() {
194
+ this.enabled = !this.enabled
195
+ }
196
+
197
+ }
198
+
199
+
200
+ /* TWIPSY PRIVATE METHODS
201
+ * ====================== */
202
+
203
+ function maybeCall ( thing, ctx, args ) {
204
+ return typeof thing == 'function' ? thing.apply(ctx, args) : thing
205
+ }
206
+
207
+ /* TWIPSY PLUGIN DEFINITION
208
+ * ======================== */
209
+
210
+ $.fn.twipsy = function (options) {
211
+ $.fn.twipsy.initWith.call(this, options, Twipsy, 'twipsy')
212
+ return this
213
+ }
214
+
215
+ $.fn.twipsy.initWith = function (options, Constructor, name) {
216
+ var twipsy
217
+ , binder
218
+ , eventIn
219
+ , eventOut
220
+
221
+ if (options === true) {
222
+ return this.data(name)
223
+ } else if (typeof options == 'string') {
224
+ twipsy = this.data(name)
225
+ if (twipsy) {
226
+ twipsy[options]()
227
+ }
228
+ return this
229
+ }
230
+
231
+ options = $.extend({}, $.fn[name].defaults, options)
232
+
233
+ function get(ele) {
234
+ var twipsy = $.data(ele, name)
235
+
236
+ if (!twipsy) {
237
+ twipsy = new Constructor(ele, $.fn.twipsy.elementOptions(ele, options))
238
+ $.data(ele, name, twipsy)
239
+ }
240
+
241
+ return twipsy
242
+ }
243
+
244
+ function enter() {
245
+ var twipsy = get(this)
246
+ twipsy.hoverState = 'in'
247
+
248
+ if (options.delayIn == 0) {
249
+ twipsy.show()
250
+ } else {
251
+ twipsy.fixTitle()
252
+ setTimeout(function() {
253
+ if (twipsy.hoverState == 'in') {
254
+ twipsy.show()
255
+ }
256
+ }, options.delayIn)
257
+ }
258
+ }
259
+
260
+ function leave() {
261
+ var twipsy = get(this)
262
+ twipsy.hoverState = 'out'
263
+ if (options.delayOut == 0) {
264
+ twipsy.hide()
265
+ } else {
266
+ setTimeout(function() {
267
+ if (twipsy.hoverState == 'out') {
268
+ twipsy.hide()
269
+ }
270
+ }, options.delayOut)
271
+ }
272
+ }
273
+
274
+ if (!options.live) {
275
+ this.each(function() {
276
+ get(this)
277
+ })
278
+ }
279
+
280
+ if (options.trigger != 'manual') {
281
+ binder = options.live ? 'live' : 'bind'
282
+ eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus'
283
+ eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur'
284
+ this[binder](eventIn, enter)[binder](eventOut, leave)
285
+ }
286
+
287
+ return this
288
+ }
289
+
290
+ $.fn.twipsy.Twipsy = Twipsy
291
+
292
+ $.fn.twipsy.defaults = {
293
+ animate: true
294
+ , delayIn: 0
295
+ , delayOut: 0
296
+ , fallback: ''
297
+ , placement: 'above'
298
+ , html: false
299
+ , live: false
300
+ , offset: 0
301
+ , title: 'title'
302
+ , trigger: 'hover'
303
+ , template: '<div class="twipsy-arrow"></div><div class="twipsy-inner"></div>'
304
+ }
305
+
306
+ $.fn.twipsy.elementOptions = function(ele, options) {
307
+ return $.extend({}, options, $(ele).data())
308
+ }
309
+
310
+ }( window.jQuery || window.ender );