flatui 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,20 @@
1
+ Copyright 2011 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,29 @@
1
+ # Flatui
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'flatui'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install flatui
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
@@ -0,0 +1,8 @@
1
+ require "flatui/version"
2
+
3
+ module Flatui
4
+ module Rails
5
+ class Engine < ::Rails::Engine
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ module Flatui
2
+ module Rails
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,353 @@
1
+ /* ===========================================================
2
+ * bootstrap-tooltip.js v2.3.0
3
+ * http://twitter.github.com/bootstrap/javascript.html#tooltips
4
+ * Inspired by the original jQuery.tipsy by Jason Frame
5
+ * ===========================================================
6
+ * Copyright 2012 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"; // jshint ;_;
25
+
26
+
27
+ /* TOOLTIP PUBLIC CLASS DEFINITION
28
+ * =============================== */
29
+
30
+ var Tooltip = function (element, options) {
31
+ this.init('tooltip', element, options)
32
+ }
33
+
34
+ Tooltip.prototype = {
35
+
36
+ constructor: Tooltip
37
+
38
+ , init: function (type, element, options) {
39
+ var eventIn
40
+ , eventOut
41
+ , triggers
42
+ , trigger
43
+ , i
44
+
45
+ this.type = type
46
+ this.$element = $(element)
47
+ this.options = this.getOptions(options)
48
+ this.enabled = true
49
+
50
+ triggers = this.options.trigger.split(' ')
51
+
52
+ for (i = triggers.length; i--;) {
53
+ trigger = triggers[i]
54
+ if (trigger == 'click') {
55
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
56
+ } else if (trigger != 'manual') {
57
+ eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
58
+ eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
59
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
60
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
61
+ }
62
+ }
63
+
64
+ this.options.selector ?
65
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
66
+ this.fixTitle()
67
+ }
68
+
69
+ , getOptions: function (options) {
70
+ options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options)
71
+
72
+ if (options.delay && typeof options.delay == 'number') {
73
+ options.delay = {
74
+ show: options.delay
75
+ , hide: options.delay
76
+ }
77
+ }
78
+
79
+ return options
80
+ }
81
+
82
+ , enter: function (e) {
83
+ var self = $(e.currentTarget)[this.type](this._options).data(this.type)
84
+
85
+ if (!self.options.delay || !self.options.delay.show) return self.show()
86
+
87
+ clearTimeout(this.timeout)
88
+ self.hoverState = 'in'
89
+ this.timeout = setTimeout(function() {
90
+ if (self.hoverState == 'in') self.show()
91
+ }, self.options.delay.show)
92
+ }
93
+
94
+ , leave: function (e) {
95
+ var self = $(e.currentTarget)[this.type](this._options).data(this.type)
96
+
97
+ if (this.timeout) clearTimeout(this.timeout)
98
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
99
+
100
+ self.hoverState = 'out'
101
+ this.timeout = setTimeout(function() {
102
+ if (self.hoverState == 'out') self.hide()
103
+ }, self.options.delay.hide)
104
+ }
105
+
106
+ , show: function () {
107
+ var $tip
108
+ , pos
109
+ , actualWidth
110
+ , actualHeight
111
+ , placement
112
+ , tp
113
+ , e = $.Event('show')
114
+
115
+ if (this.hasContent() && this.enabled) {
116
+ this.$element.trigger(e)
117
+ if (e.isDefaultPrevented()) return
118
+ $tip = this.tip()
119
+ this.setContent()
120
+
121
+ if (this.options.animation) {
122
+ $tip.addClass('fade')
123
+ }
124
+
125
+ placement = typeof this.options.placement == 'function' ?
126
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
127
+ this.options.placement
128
+
129
+ $tip
130
+ .detach()
131
+ .css({ top: 0, left: 0, display: 'block' })
132
+
133
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
134
+
135
+ pos = this.getPosition()
136
+
137
+ actualWidth = $tip[0].offsetWidth
138
+ actualHeight = $tip[0].offsetHeight
139
+
140
+ switch (placement) {
141
+ case 'bottom':
142
+ tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
143
+ break
144
+ case 'top':
145
+ tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
146
+ break
147
+ case 'left':
148
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
149
+ break
150
+ case 'right':
151
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
152
+ break
153
+ }
154
+
155
+ this.applyPlacement(tp, placement)
156
+ this.$element.trigger('shown')
157
+ }
158
+ }
159
+
160
+ , applyPlacement: function(offset, placement){
161
+ var $tip = this.tip()
162
+ , width = $tip[0].offsetWidth
163
+ , height = $tip[0].offsetHeight
164
+ , actualWidth
165
+ , actualHeight
166
+ , delta
167
+ , replace
168
+
169
+ $tip
170
+ .offset(offset)
171
+ .addClass(placement)
172
+ .addClass('in')
173
+
174
+ actualWidth = $tip[0].offsetWidth
175
+ actualHeight = $tip[0].offsetHeight
176
+
177
+ if (placement == 'top' && actualHeight != height) {
178
+ offset.top = offset.top + height - actualHeight
179
+ replace = true
180
+ }
181
+
182
+ if (placement == 'bottom' || placement == 'top') {
183
+ delta = 0
184
+
185
+ if (offset.left < 0){
186
+ delta = offset.left * -2
187
+ offset.left = 0
188
+ $tip.offset(offset)
189
+ actualWidth = $tip[0].offsetWidth
190
+ actualHeight = $tip[0].offsetHeight
191
+ }
192
+
193
+ this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
194
+ } else {
195
+ this.replaceArrow(actualHeight - height, actualHeight, 'top')
196
+ }
197
+
198
+ if (replace) $tip.offset(offset)
199
+ }
200
+
201
+ , replaceArrow: function(delta, dimension, position){
202
+ this
203
+ .arrow()
204
+ .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '')
205
+ }
206
+
207
+ , setContent: function () {
208
+ var $tip = this.tip()
209
+ , title = this.getTitle()
210
+
211
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
212
+ $tip.removeClass('fade in top bottom left right')
213
+ }
214
+
215
+ , hide: function () {
216
+ var that = this
217
+ , $tip = this.tip()
218
+ , e = $.Event('hide')
219
+
220
+ this.$element.trigger(e)
221
+ if (e.isDefaultPrevented()) return
222
+
223
+ $tip.removeClass('in')
224
+
225
+ function removeWithAnimation() {
226
+ var timeout = setTimeout(function () {
227
+ $tip.off($.support.transition.end).detach()
228
+ }, 500)
229
+
230
+ $tip.one($.support.transition.end, function () {
231
+ clearTimeout(timeout)
232
+ $tip.detach()
233
+ })
234
+ }
235
+
236
+ $.support.transition && this.$tip.hasClass('fade') ?
237
+ removeWithAnimation() :
238
+ $tip.detach()
239
+
240
+ this.$element.trigger('hidden')
241
+
242
+ return this
243
+ }
244
+
245
+ , fixTitle: function () {
246
+ var $e = this.$element
247
+ if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
248
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
249
+ }
250
+ }
251
+
252
+ , hasContent: function () {
253
+ return this.getTitle()
254
+ }
255
+
256
+ , getPosition: function () {
257
+ var el = this.$element[0]
258
+ return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
259
+ width: el.offsetWidth
260
+ , height: el.offsetHeight
261
+ }, this.$element.offset())
262
+ }
263
+
264
+ , getTitle: function () {
265
+ var title
266
+ , $e = this.$element
267
+ , o = this.options
268
+
269
+ title = $e.attr('data-original-title')
270
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
271
+
272
+ return title
273
+ }
274
+
275
+ , tip: function () {
276
+ return this.$tip = this.$tip || $(this.options.template)
277
+ }
278
+
279
+ , arrow: function(){
280
+ return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
281
+ }
282
+
283
+ , validate: function () {
284
+ if (!this.$element[0].parentNode) {
285
+ this.hide()
286
+ this.$element = null
287
+ this.options = null
288
+ }
289
+ }
290
+
291
+ , enable: function () {
292
+ this.enabled = true
293
+ }
294
+
295
+ , disable: function () {
296
+ this.enabled = false
297
+ }
298
+
299
+ , toggleEnabled: function () {
300
+ this.enabled = !this.enabled
301
+ }
302
+
303
+ , toggle: function (e) {
304
+ var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this
305
+ self.tip().hasClass('in') ? self.hide() : self.show()
306
+ }
307
+
308
+ , destroy: function () {
309
+ this.hide().$element.off('.' + this.type).removeData(this.type)
310
+ }
311
+
312
+ }
313
+
314
+
315
+ /* TOOLTIP PLUGIN DEFINITION
316
+ * ========================= */
317
+
318
+ var old = $.fn.tooltip
319
+
320
+ $.fn.tooltip = function ( option ) {
321
+ return this.each(function () {
322
+ var $this = $(this)
323
+ , data = $this.data('tooltip')
324
+ , options = typeof option == 'object' && option
325
+ if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
326
+ if (typeof option == 'string') data[option]()
327
+ })
328
+ }
329
+
330
+ $.fn.tooltip.Constructor = Tooltip
331
+
332
+ $.fn.tooltip.defaults = {
333
+ animation: true
334
+ , placement: 'top'
335
+ , selector: false
336
+ , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
337
+ , trigger: 'hover focus'
338
+ , title: ''
339
+ , delay: 0
340
+ , html: false
341
+ , container: false
342
+ }
343
+
344
+
345
+ /* TOOLTIP NO CONFLICT
346
+ * =================== */
347
+
348
+ $.fn.tooltip.noConflict = function () {
349
+ $.fn.tooltip = old
350
+ return this
351
+ }
352
+
353
+ }(window.jQuery);
@@ -0,0 +1,53 @@
1
+ // Custom checkbox and radios
2
+ function setupLabel() {
3
+ // Checkbox
4
+ var checkBox = ".checkbox";
5
+ var checkBoxInput = checkBox + " input[type='checkbox']";
6
+ var checkBoxChecked = "checked";
7
+ var checkBoxDisabled = "disabled";
8
+
9
+ // Radio
10
+ var radio = ".radio";
11
+ var radioInput = radio + " input[type='radio']";
12
+ var radioOn = "checked";
13
+ var radioDisabled = "disabled";
14
+
15
+ // Checkboxes
16
+ if ($(checkBoxInput).length) {
17
+ $(checkBox).each(function(){
18
+ $(this).removeClass(checkBoxChecked);
19
+ });
20
+ $(checkBoxInput + ":checked").each(function(){
21
+ $(this).parent(checkBox).addClass(checkBoxChecked);
22
+ });
23
+ $(checkBoxInput + ":disabled").each(function(){
24
+ $(this).parent(checkBox).addClass(checkBoxDisabled);
25
+ });
26
+ };
27
+
28
+ // Radios
29
+ if ($(radioInput).length) {
30
+ $(radio).each(function(){
31
+ $(this).removeClass(radioOn);
32
+ });
33
+ $(radioInput + ":checked").each(function(){
34
+ $(this).parent(radio).addClass(radioOn);
35
+ });
36
+ $(radioInput + ":disabled").each(function(){
37
+ $(this).parent(radio).addClass(radioDisabled);
38
+ });
39
+ };
40
+ };
41
+
42
+ $(document).ready(function(){
43
+ $("html").addClass("has-js");
44
+
45
+ // First let's prepend icons (needed for effects)
46
+ $(".checkbox, .radio").prepend("<span class='icon'></span><span class='icon-to-fade'></span>");
47
+
48
+ $(".checkbox, .radio").click(function(){
49
+ setupLabel();
50
+ });
51
+ setupLabel();
52
+ });
53
+