rails-bootstrap-ui 0.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.
data/.gitignore ADDED
@@ -0,0 +1,6 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .DS_Store
6
+ **/.DS_Store
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in rails-bootstrap-ui.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,19 @@
1
+ # Rails Boostrap UI
2
+
3
+ This project adds several UI elements to Rails 3.1. Included are:
4
+
5
+ * Twitter Bootstrap CSS
6
+ * Twitter Bootstrap JavaScript
7
+ * JQuery Hotkeys
8
+ * JQuery JScrollPane (Scrollable divs)
9
+ * Styling for will_paginate
10
+
11
+ # Installation
12
+
13
+ Add the following to app/assets/javascripts/application.js
14
+
15
+ //= require bootstrap
16
+
17
+ Add the following to app/assets/javascripts/application.js
18
+
19
+ *= require bootstrap
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,10 @@
1
+ module Rails
2
+ module Bootstrap
3
+ module UI
4
+ class Engine < Rails::Engine
5
+ # Do Nothing
6
+ end
7
+ end
8
+ end
9
+ end
10
+
@@ -0,0 +1,7 @@
1
+ module Rails
2
+ module Bootstrap
3
+ module UI
4
+ VERSION = "0.0.1"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,32 @@
1
+ require 'will_paginate/view_helpers/link_renderer'
2
+
3
+ module WillPaginate
4
+ module ActionView
5
+ def will_paginate(collection = nil, options = {})
6
+ options[:renderer] ||= BootstrapLinkRenderer
7
+ super.try :html_safe
8
+ end
9
+
10
+ class BootstrapLinkRenderer < WillPaginate::ViewHelpers::LinkRenderer
11
+ protected
12
+
13
+ def html_container(html)
14
+ tag :div, tag(:ul, html), container_attributes
15
+ end
16
+
17
+ def gap
18
+ text = @template.will_paginate_translate(:page_gap) { '&hellip;' }
19
+ %(<li class="disabled"><a href="#" class="no-link">#{text}</a></li>)
20
+ end
21
+
22
+ def page_number(page)
23
+ tag :li, link(page, page, :rel => rel_value(page)), :class => ('active' if page == current_page)
24
+ end
25
+
26
+ def previous_or_next_page(page, text, classname)
27
+ tag :li, link(text, page || '#'), :class => [classname[0..3], classname, ('disabled' unless page)].join(' ')
28
+ end
29
+ end
30
+ end
31
+ end
32
+
@@ -0,0 +1,3 @@
1
+ require "rails-bootstrap-ui/version"
2
+ require "rails-bootstrap-ui/engine"
3
+ require "rails-bootstrap-ui/will_paginate"
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "rails-bootstrap-ui/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "rails-bootstrap-ui"
7
+ s.version = Rails::Bootstrap::UI::VERSION
8
+ s.authors = ["Darian Shimy"]
9
+ s.email = ["dshimy@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Rails 3.1 gem to get a core set of JS and CSS files}
12
+ s.description = %q{Rails 3.1 gem that installs Twitter Bootstrap CSS and JS files, patches for will_paginate, and JQuery libraries for hotkeys and scrollable divs.}
13
+
14
+ s.rubyforge_project = "rails-bootstrap-ui"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_dependency 'will_paginate', "~> 3.0"
22
+ end
@@ -0,0 +1,113 @@
1
+ /* ==========================================================
2
+ * bootstrap-alerts.js v1.4.0
3
+ * http://twitter.github.com/bootstrap/javascript.html#alerts
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
+ /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
26
+ * ======================================================= */
27
+
28
+ var transitionEnd
29
+
30
+ $(document).ready(function () {
31
+
32
+ $.support.transition = (function () {
33
+ var thisBody = document.body || document.documentElement
34
+ , thisStyle = thisBody.style
35
+ , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
36
+ return support
37
+ })()
38
+
39
+ // set CSS transition event type
40
+ if ( $.support.transition ) {
41
+ transitionEnd = "TransitionEnd"
42
+ if ( $.browser.webkit ) {
43
+ transitionEnd = "webkitTransitionEnd"
44
+ } else if ( $.browser.mozilla ) {
45
+ transitionEnd = "transitionend"
46
+ } else if ( $.browser.opera ) {
47
+ transitionEnd = "oTransitionEnd"
48
+ }
49
+ }
50
+
51
+ })
52
+
53
+ /* ALERT CLASS DEFINITION
54
+ * ====================== */
55
+
56
+ var Alert = function ( content, options ) {
57
+ this.settings = $.extend({}, $.fn.alert.defaults, options)
58
+ this.$element = $(content)
59
+ .delegate(this.settings.selector, 'click', this.close)
60
+ }
61
+
62
+ Alert.prototype = {
63
+
64
+ close: function (e) {
65
+ var $element = $(this).parent('.alert-message')
66
+
67
+ e && e.preventDefault()
68
+ $element.removeClass('in')
69
+
70
+ function removeElement () {
71
+ $element.remove()
72
+ }
73
+
74
+ $.support.transition && $element.hasClass('fade') ?
75
+ $element.bind(transitionEnd, removeElement) :
76
+ removeElement()
77
+ }
78
+
79
+ }
80
+
81
+
82
+ /* ALERT PLUGIN DEFINITION
83
+ * ======================= */
84
+
85
+ $.fn.alert = function ( options ) {
86
+
87
+ if ( options === true ) {
88
+ return this.data('alert')
89
+ }
90
+
91
+ return this.each(function () {
92
+ var $this = $(this)
93
+
94
+ if ( typeof options == 'string' ) {
95
+ return $this.data('alert')[options]()
96
+ }
97
+
98
+ $(this).data('alert', new Alert( this, options ))
99
+
100
+ })
101
+ }
102
+
103
+ $.fn.alert.defaults = {
104
+ selector: '.close'
105
+ }
106
+
107
+ $(document).ready(function () {
108
+ new Alert($('body'), {
109
+ selector: '.alert-message[data-alert] .close'
110
+ })
111
+ })
112
+
113
+ }( window.jQuery || window.ender );
@@ -0,0 +1,62 @@
1
+ /* ============================================================
2
+ * bootstrap-buttons.js v1.4.0
3
+ * http://twitter.github.com/bootstrap/javascript.html#buttons
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
+ !function( $ ){
21
+
22
+ "use strict"
23
+
24
+ function setState(el, state) {
25
+ var d = 'disabled'
26
+ , $el = $(el)
27
+ , data = $el.data()
28
+
29
+ state = state + 'Text'
30
+ data.resetText || $el.data('resetText', $el.html())
31
+
32
+ $el.html( data[state] || $.fn.button.defaults[state] )
33
+
34
+ state == 'loadingText' ?
35
+ $el.addClass(d).attr(d, d) :
36
+ $el.removeClass(d).removeAttr(d)
37
+ }
38
+
39
+ function toggle(el) {
40
+ $(el).toggleClass('active')
41
+ }
42
+
43
+ $.fn.button = function(options) {
44
+ return this.each(function () {
45
+ if (options == 'toggle') {
46
+ return toggle(this)
47
+ }
48
+ options && setState(this, options)
49
+ })
50
+ }
51
+
52
+ $.fn.button.defaults = {
53
+ loadingText: 'loading...'
54
+ }
55
+
56
+ $(function () {
57
+ $('body').delegate('.btn[data-toggle]', 'click', function () {
58
+ $(this).button('toggle')
59
+ })
60
+ })
61
+
62
+ }( window.jQuery || window.ender );
@@ -0,0 +1,55 @@
1
+ /* ============================================================
2
+ * bootstrap-dropdown.js v1.4.0
3
+ * http://twitter.github.com/bootstrap/javascript.html#dropdown
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
+ /* DROPDOWN PLUGIN DEFINITION
26
+ * ========================== */
27
+
28
+ $.fn.dropdown = function ( selector ) {
29
+ return this.each(function () {
30
+ $(this).delegate(selector || d, 'click', function (e) {
31
+ var li = $(this).parent('li')
32
+ , isActive = li.hasClass('open')
33
+
34
+ clearMenus()
35
+ !isActive && li.toggleClass('open')
36
+ return false
37
+ })
38
+ })
39
+ }
40
+
41
+ /* APPLY TO STANDARD DROPDOWN ELEMENTS
42
+ * =================================== */
43
+
44
+ var d = 'a.menu, .dropdown-toggle'
45
+
46
+ function clearMenus() {
47
+ $(d).parent('li').removeClass('open')
48
+ }
49
+
50
+ $(function () {
51
+ $('html').bind("click", clearMenus)
52
+ $('body').dropdown( '[data-dropdown] a.menu, [data-dropdown] .dropdown-toggle' )
53
+ })
54
+
55
+ }( window.jQuery || window.ender );
@@ -0,0 +1,260 @@
1
+ /* =========================================================
2
+ * bootstrap-modal.js v1.4.0
3
+ * http://twitter.github.com/bootstrap/javascript.html#modal
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
+ /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
26
+ * ======================================================= */
27
+
28
+ var transitionEnd
29
+
30
+ $(document).ready(function () {
31
+
32
+ $.support.transition = (function () {
33
+ var thisBody = document.body || document.documentElement
34
+ , thisStyle = thisBody.style
35
+ , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
36
+ return support
37
+ })()
38
+
39
+ // set CSS transition event type
40
+ if ( $.support.transition ) {
41
+ transitionEnd = "TransitionEnd"
42
+ if ( $.browser.webkit ) {
43
+ transitionEnd = "webkitTransitionEnd"
44
+ } else if ( $.browser.mozilla ) {
45
+ transitionEnd = "transitionend"
46
+ } else if ( $.browser.opera ) {
47
+ transitionEnd = "oTransitionEnd"
48
+ }
49
+ }
50
+
51
+ })
52
+
53
+
54
+ /* MODAL PUBLIC CLASS DEFINITION
55
+ * ============================= */
56
+
57
+ var Modal = function ( content, options ) {
58
+ this.settings = $.extend({}, $.fn.modal.defaults, options)
59
+ this.$element = $(content)
60
+ .delegate('.close', 'click.modal', $.proxy(this.hide, this))
61
+
62
+ if ( this.settings.show ) {
63
+ this.show()
64
+ }
65
+
66
+ return this
67
+ }
68
+
69
+ Modal.prototype = {
70
+
71
+ toggle: function () {
72
+ return this[!this.isShown ? 'show' : 'hide']()
73
+ }
74
+
75
+ , show: function () {
76
+ var that = this
77
+ this.isShown = true
78
+ this.$element.trigger('show')
79
+
80
+ escape.call(this)
81
+ backdrop.call(this, function () {
82
+ var transition = $.support.transition && that.$element.hasClass('fade')
83
+
84
+ that.$element
85
+ .appendTo(document.body)
86
+ .show()
87
+
88
+ if (transition) {
89
+ that.$element[0].offsetWidth // force reflow
90
+ }
91
+
92
+ that.$element.addClass('in')
93
+
94
+ transition ?
95
+ that.$element.one(transitionEnd, function () { that.$element.trigger('shown') }) :
96
+ that.$element.trigger('shown')
97
+
98
+ })
99
+
100
+ return this
101
+ }
102
+
103
+ , hide: function (e) {
104
+ e && e.preventDefault()
105
+
106
+ if ( !this.isShown ) {
107
+ return this
108
+ }
109
+
110
+ var that = this
111
+ this.isShown = false
112
+
113
+ escape.call(this)
114
+
115
+ this.$element
116
+ .trigger('hide')
117
+ .removeClass('in')
118
+
119
+ $.support.transition && this.$element.hasClass('fade') ?
120
+ hideWithTransition.call(this) :
121
+ hideModal.call(this)
122
+
123
+ return this
124
+ }
125
+
126
+ }
127
+
128
+
129
+ /* MODAL PRIVATE METHODS
130
+ * ===================== */
131
+
132
+ function hideWithTransition() {
133
+ // firefox drops transitionEnd events :{o
134
+ var that = this
135
+ , timeout = setTimeout(function () {
136
+ that.$element.unbind(transitionEnd)
137
+ hideModal.call(that)
138
+ }, 500)
139
+
140
+ this.$element.one(transitionEnd, function () {
141
+ clearTimeout(timeout)
142
+ hideModal.call(that)
143
+ })
144
+ }
145
+
146
+ function hideModal (that) {
147
+ this.$element
148
+ .hide()
149
+ .trigger('hidden')
150
+
151
+ backdrop.call(this)
152
+ }
153
+
154
+ function backdrop ( callback ) {
155
+ var that = this
156
+ , animate = this.$element.hasClass('fade') ? 'fade' : ''
157
+ if ( this.isShown && this.settings.backdrop ) {
158
+ var doAnimate = $.support.transition && animate
159
+
160
+ this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
161
+ .appendTo(document.body)
162
+
163
+ if ( this.settings.backdrop != 'static' ) {
164
+ this.$backdrop.click($.proxy(this.hide, this))
165
+ }
166
+
167
+ if ( doAnimate ) {
168
+ this.$backdrop[0].offsetWidth // force reflow
169
+ }
170
+
171
+ this.$backdrop.addClass('in')
172
+
173
+ doAnimate ?
174
+ this.$backdrop.one(transitionEnd, callback) :
175
+ callback()
176
+
177
+ } else if ( !this.isShown && this.$backdrop ) {
178
+ this.$backdrop.removeClass('in')
179
+
180
+ $.support.transition && this.$element.hasClass('fade')?
181
+ this.$backdrop.one(transitionEnd, $.proxy(removeBackdrop, this)) :
182
+ removeBackdrop.call(this)
183
+
184
+ } else if ( callback ) {
185
+ callback()
186
+ }
187
+ }
188
+
189
+ function removeBackdrop() {
190
+ this.$backdrop.remove()
191
+ this.$backdrop = null
192
+ }
193
+
194
+ function escape() {
195
+ var that = this
196
+ if ( this.isShown && this.settings.keyboard ) {
197
+ $(document).bind('keyup.modal', function ( e ) {
198
+ if ( e.which == 27 ) {
199
+ that.hide()
200
+ }
201
+ })
202
+ } else if ( !this.isShown ) {
203
+ $(document).unbind('keyup.modal')
204
+ }
205
+ }
206
+
207
+
208
+ /* MODAL PLUGIN DEFINITION
209
+ * ======================= */
210
+
211
+ $.fn.modal = function ( options ) {
212
+ var modal = this.data('modal')
213
+
214
+ if (!modal) {
215
+
216
+ if (typeof options == 'string') {
217
+ options = {
218
+ show: /show|toggle/.test(options)
219
+ }
220
+ }
221
+
222
+ return this.each(function () {
223
+ $(this).data('modal', new Modal(this, options))
224
+ })
225
+ }
226
+
227
+ if ( options === true ) {
228
+ return modal
229
+ }
230
+
231
+ if ( typeof options == 'string' ) {
232
+ modal[options]()
233
+ } else if ( modal ) {
234
+ modal.toggle()
235
+ }
236
+
237
+ return this
238
+ }
239
+
240
+ $.fn.modal.Modal = Modal
241
+
242
+ $.fn.modal.defaults = {
243
+ backdrop: false
244
+ , keyboard: false
245
+ , show: false
246
+ }
247
+
248
+
249
+ /* MODAL DATA- IMPLEMENTATION
250
+ * ========================== */
251
+
252
+ $(document).ready(function () {
253
+ $('body').delegate('[data-controls-modal]', 'click', function (e) {
254
+ e.preventDefault()
255
+ var $this = $(this).data('show', true)
256
+ $('#' + $this.attr('data-controls-modal')).modal( $this.data() )
257
+ })
258
+ })
259
+
260
+ }( window.jQuery || window.ender );
@@ -0,0 +1,90 @@
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 = $e.attr(this.options.content)
55
+ } else if (typeof this.options.content == 'function') {
56
+ content = this.options.content.call(this.$element[0])
57
+ }
58
+
59
+ return content
60
+ }
61
+
62
+ , tip: function() {
63
+ if (!this.$tip) {
64
+ this.$tip = $('<div class="popover" />')
65
+ .html(this.options.template)
66
+ }
67
+ return this.$tip
68
+ }
69
+
70
+ })
71
+
72
+
73
+ /* POPOVER PLUGIN DEFINITION
74
+ * ======================= */
75
+
76
+ $.fn.popover = function (options) {
77
+ if (typeof options == 'object') options = $.extend({}, $.fn.popover.defaults, options)
78
+ $.fn.twipsy.initWith.call(this, options, Popover, 'popover')
79
+ return this
80
+ }
81
+
82
+ $.fn.popover.defaults = $.extend({} , $.fn.twipsy.defaults, {
83
+ placement: 'right'
84
+ , content: 'data-content'
85
+ , template: '<div class="arrow"></div><div class="inner"><h3 class="title"></h3><div class="content"><p></p></div></div>'
86
+ })
87
+
88
+ $.fn.twipsy.rejectAttrOptions.push( 'content' )
89
+
90
+ }( window.jQuery || window.ender );