jquery-popover 1.1.0

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.
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.sublime-project
19
+ *.sublime-workspace
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in jquery-popover.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Andrei Misarca
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,107 @@
1
+ # jQuery Popover
2
+
3
+ A lightweight framework for positioning popovers against triggers links. It's a pretty thin wrapper for jQuery UI Position, which does most of the heavy lifting. It is a Rails ger version for https://github.com/crowdfavorite/jquery-popover
4
+
5
+ ## Requirements
6
+ - jquery-rails (>= 2.0.0)
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's Gemfile in the assets group:
11
+
12
+ gem 'jquery-popover'
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ You need to include the jQuery library jQuery UI position library, to be able to use this one
19
+
20
+ //= require jquery
21
+ //= require jquery-ui
22
+
23
+ or
24
+
25
+ //= require jquery
26
+ //= require jquery-ui/popover
27
+
28
+ In your application.js file add *after* including jQuery and jQuery UI
29
+
30
+ //= require jquery-popover
31
+
32
+ ## What it Does
33
+
34
+ - Visually positions the popover against the trigger element, regardless of where they are in the source order.
35
+ - Toggles the Popover with a fade effect when you click the trigger
36
+ - When clicking outside of the popover area, hides the popover.
37
+ - Repositions the popover after a window resize to make sure it stays pinned to the right place.
38
+ - Adds `.before` and `.after` empty elements to the popover. You can use these to create comic-bubble pointers using background images, or that type of thing.
39
+
40
+ ## How to Use It
41
+
42
+ Include the script and it's requirements.
43
+
44
+ Popover markup consist of two parts:
45
+
46
+ - The popover element which must have an ID
47
+ - A trigger link, with an anchor to the ID of the popover element.
48
+
49
+ Sample markup:
50
+
51
+ <a class="trigger" href="#popover1">Open Popover</a>
52
+ <div id="popover1">Popover FTW!</div>
53
+
54
+ The popover element can live anywhere on the page. The script will automatically position the popover against the trigger.
55
+
56
+ You will also typically want to add `position: absolute;` to your popover element, otherwise jQuery UI Position will try to use relative positioning.
57
+
58
+ #popover1 {
59
+ position: absolute;
60
+ }
61
+
62
+ Or better yet, use a generic class:
63
+
64
+ .popover {
65
+ position: absolute;
66
+ }
67
+
68
+ Invoke the script on the trigger elements:
69
+
70
+ $('.trigger').popover();
71
+
72
+ The popover script will find the associated popover for a trigger by looking at the value of the `href` attribute.
73
+
74
+ You can also pass options. This would make the popover appear at the right-top edge of the trigger:
75
+
76
+ $('.trigger').popover({
77
+ my: 'left bottom', // of popover
78
+ at: 'right top', // of trigger
79
+ });
80
+
81
+ ### Options
82
+
83
+ - `my`: position of popover. Can be [anything UI Position accepts](http://jqueryui.com/demos/position/).
84
+ - `at`: position of popover against trigger. Can be [anything UI Position accepts](http://jqueryui.com/demos/position/).
85
+ - `offset`: any tweaks you would like to make to the position. Can be [anything UI Position accepts](http://jqueryui.com/demos/position/).
86
+ - `collision`: the type of collision logic to run. Default "flop flop" -- a custom positioning plugin similar to "flip". Adds a `flopped-x` or `flopped-y` class to the popover when collision is in action. Can be [anything UI Position accepts](http://jqueryui.com/demos/position/).
87
+ - `using`: a functional option for tweaking positioning of the popover. Can be [anything UI Position accepts](http://jqueryui.com/demos/position/).
88
+ - `popover`: by default, the popover is found via the trigger's href attribute. If you absolutely have to, you can override this by setting the popover property. Pass in a selector, jQuery object or anything else `$()` accepts.
89
+
90
+ ### Advanced Use
91
+
92
+ You can access methods and data for a popover after it's been initialized via the data API.
93
+
94
+ $('.trigger').data('popover').hide(); // .hidePopover(event) can be used, but will stop propagation of the event
95
+ $('.trigger').data('popover').opts.my // value of 'my' option for this instance
96
+
97
+ Duck-typing the constructor function for popovers is possible by changing:
98
+
99
+ $.fn.popover.Popover
100
+
101
+ ## Contributing
102
+
103
+ 1. Fork it
104
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
105
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
106
+ 4. Push to the branch (`git push origin my-new-feature`)
107
+ 5. Create new Pull Request
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/jquery-popover/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Andrei Misarca"]
6
+ gem.email = ["andrei.misarca@gmail.com"]
7
+ gem.description = %q{Add popovers to your applications with only a few lines of code}
8
+ gem.summary = %q{jQuery popover}
9
+ gem.homepage = ""
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "jquery-popover"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Jquery::Popover::VERSION
17
+
18
+ gem.add_dependency 'jquery-rails', '>= 2.0.0'
19
+ end
@@ -0,0 +1,7 @@
1
+ require "jquery-popover/version"
2
+
3
+ module Jquery
4
+ module Popover
5
+ require 'jquery-popover/engine'
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Jquery
2
+ module Popover
3
+ class Engine < ::Rails::Engine
4
+ # Auto wire asset pipeline
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module Jquery
2
+ module Popover
3
+ VERSION = "1.1.0"
4
+ end
5
+ end
@@ -0,0 +1,229 @@
1
+ /*!
2
+ * CF Popover v1.1
3
+ * A lightweight framework for positioning iPad-style popover elements against triggers.
4
+ *
5
+ * Copyright 2011-2012, Crowd Favorite (http://crowdfavorite.com)
6
+ * Released under the MIT license.
7
+ * http://www.opensource.org/licenses/mit-license.php
8
+ */
9
+ ;(function ($) {
10
+ /* Proxy this once to save computation */
11
+ var uiPosition = $.ui.position;
12
+
13
+ /**
14
+ * Constructor function for popovers
15
+ */
16
+ var Popover = function ($trigger, opts) {
17
+ this.opts = $.extend({}, this.opts, opts);
18
+ this.$trigger = $($trigger.get(0));
19
+
20
+ this.$popover = $(( this.opts.popover || this.$trigger.attr('href') ));
21
+ this.$popover = $(this.$popover.get(0));
22
+
23
+ if (!this.$popover.hasClass('popover-before-after-applied')) {
24
+ this.$popover.addClass('popover-before-after-applied')
25
+ .prepend('<span role="presentation" class="before"/>')
26
+ .append('<span role="presentation" class="after"/>')
27
+ .hide();
28
+ }
29
+ };
30
+
31
+ Popover.prototype = {
32
+ timeout: null,
33
+ $win: $(window),
34
+
35
+ opts: {
36
+ my: 'center bottom',
37
+ at: 'center top',
38
+ offset: '0 0',
39
+ collision: 'flop flop',
40
+ popover: null,
41
+ thereCanBeOnlyOne: true
42
+ },
43
+
44
+ /**
45
+ * Custom collision handling for popovers (access via "flop" keyword)
46
+ * Identical to "flip", but adds class to element being flipped to let
47
+ * you know when it has been changed from default position.
48
+ * Functions get bound to this.$popover in the constructor.
49
+ * Used as a monkey patch below.
50
+ */
51
+ flop: {
52
+ left: function (position, data) {
53
+ var cPosition = data.collisionPosition,
54
+ $popover = $(this),
55
+ c = 'flopped-x',
56
+ out;
57
+
58
+ /* Run the original first -- it modifies position
59
+ and data by reference. Store return value
60
+ anyway, since we want to make sure if they do
61
+ decide to return something in future the API
62
+ isn't broken */
63
+ out = uiPosition.flip.left(position, data);
64
+
65
+ (cPosition.left !== position.left) ? $popover.addClass(c) : $popover.removeClass(c);
66
+
67
+ return out;
68
+ },
69
+ top: function (position, data) {
70
+ var cPosition = data.collisionPosition,
71
+ $popover = $(this),
72
+ c = 'flopped-y',
73
+ out;
74
+
75
+ /* Run the original first -- it modifies position
76
+ and data by reference. Store return value
77
+ anyway, since we want to make sure if they do
78
+ decide to return something in future the API
79
+ isn't broken */
80
+ out = uiPosition.flip.top(position, data);
81
+
82
+ (cPosition.top !== position.top) ? $popover.addClass(c) : $popover.removeClass(c);
83
+
84
+ return out;
85
+ }
86
+ },
87
+
88
+ bindEvents: function () {
89
+ this.$trigger.click($.proxy(function (e) {
90
+ if (this.popoverIsOpen()) {
91
+ this.hidePopover(e);
92
+ }
93
+ else {
94
+ this.showPopover(e);
95
+ };
96
+ if (this.opts.thereCanBeOnlyOne) {
97
+ $('body').trigger('popover-hide-all');
98
+ };
99
+ }, this));
100
+
101
+ $('body').click($.proxy(function (e) {
102
+ if (this.popoverIsOpen()) {
103
+ if (!$(this.$popover).has($(e.target)).size() && !$(this.$popover).filter($(e.target)).size()) {
104
+ this.hide();
105
+ }
106
+ };
107
+ }, this)).bind('popover-hide-all', $.proxy(function() {
108
+ if (this.popoverIsOpen() && !this.currentTrigger()) {
109
+ this.hide(true);
110
+ };
111
+ }, this));
112
+
113
+ this.$win.resize($.proxy(this.pinToTargetDebounced, this));
114
+ },
115
+
116
+ /* is the popover the this trigger open? */
117
+ popoverIsOpen: function() {
118
+ var opener = (this.$trigger.length == this.$trigger.filter(this.$popover.data('opener')).length);
119
+ return (this.$popover.is(':visible') && opener);
120
+ },
121
+
122
+ /* is this trigger the last trigger clicked? */
123
+ currentTrigger: function() {
124
+ return (this.$trigger.length == this.$trigger.filter($.fn.popover.lastTrigger).length);
125
+ },
126
+
127
+ /* Method for showing the popover */
128
+ show: function (e) {
129
+ $.fn.popover.lastTrigger = this.$trigger;
130
+ this.$popover.fadeIn('medium', $.proxy(function () {
131
+ this.$trigger.trigger('popover-show-animation-complete');
132
+ }, this)).data('opener', this.$trigger);
133
+ this.pinToTarget();
134
+ this.$trigger.trigger('popover-show');
135
+ },
136
+
137
+ /* Method for hiding the popover */
138
+ hide: function (immediate) {
139
+ var callback = $.proxy(function () {
140
+ this.$trigger.trigger('popover-hide-animation-complete');
141
+ }, this);
142
+ if (immediate) {
143
+ this.$popover.hide(0, callback);
144
+ }
145
+ else {
146
+ this.$popover.fadeOut('fast', callback);
147
+ };
148
+ this.$trigger.trigger('popover-hide');
149
+ },
150
+
151
+ toggle: function(immediate) {
152
+ if (this.popoverIsOpen()) {
153
+ this.hide(immediate);
154
+ }
155
+ else {
156
+ this.show();
157
+ }
158
+ },
159
+
160
+ /* Event handler for showing popover */
161
+ showPopover: function (e) {
162
+ e.preventDefault();
163
+ e.stopPropagation();
164
+ this.show(e);
165
+ },
166
+
167
+ /* Event handler for hiding popover */
168
+ hidePopover: function (e) {
169
+ e.preventDefault();
170
+ e.stopPropagation();
171
+ this.hide();
172
+ },
173
+
174
+ /* Calculate and position against trigger */
175
+ pinToTarget: function () {
176
+ if (!this.popoverIsOpen()) {
177
+ return;
178
+ }
179
+ var $popover = this.$popover,
180
+ posOpts = $.extend({
181
+ of: this.$trigger
182
+ }, this.opts),
183
+
184
+ /* Monkey-patch in our custom collision handling */
185
+ flop = {
186
+ /* Bind our custom collision handling to the popover element */
187
+ left: $.proxy(this.flop.left, this.$popover),
188
+ top: $.proxy(this.flop.top, this.$popover)
189
+ };
190
+
191
+ uiPosition.flop = flop;
192
+ $popover.position(posOpts);
193
+ uiPosition.flop = undefined;
194
+ },
195
+
196
+ /* Debounced to prevent hitting lots of times while resizing happens.
197
+ Will fire a maximum of 20x per second. Useful for binding to the window
198
+ resize event. */
199
+ pinToTargetDebounced: function () {
200
+ clearTimeout(this.timeout);
201
+ this.timeout = setTimeout($.proxy(this.pinToTarget, this), 50);
202
+ }
203
+ };
204
+
205
+ var fn = $.fn;
206
+
207
+ fn.popover = function (opts) {
208
+ var Popover = fn.popover.Popover;
209
+
210
+ this.each(function() {
211
+ var $this = $(this);
212
+ var popover = new Popover($this, opts);
213
+ popover.bindEvents();
214
+
215
+ /* Store Popover instance for easy method access.
216
+ See: http://alexsexton.com/?p=51
217
+
218
+ Example: $('.trigger').data('popover').hidePopover(); */
219
+ $this.data('popover', popover);
220
+ });
221
+
222
+ return this;
223
+ };
224
+
225
+ fn.popover.lastTrigger = null;
226
+
227
+ /* Expose constructor function for folks to duck-type when necessary */
228
+ fn.popover.Popover = Popover;
229
+ })(jQuery);
@@ -0,0 +1,9 @@
1
+ /*!
2
+ * CF Popover v1.1
3
+ * A lightweight framework for positioning iPad-style popover elements against triggers.
4
+ *
5
+ * Copyright 2011-2012, Crowd Favorite (http://crowdfavorite.com)
6
+ * Released under the MIT license.
7
+ * http://www.opensource.org/licenses/mit-license.php
8
+ */
9
+ (function(d){var a=d.ui.position;var c=function(e,f){this.opts=d.extend({},this.opts,f);this.$trigger=d(e.get(0));this.$popover=d((this.opts.popover||this.$trigger.attr("href")));this.$popover=d(this.$popover.get(0));if(!this.$popover.hasClass("popover-before-after-applied")){this.$popover.addClass("popover-before-after-applied").prepend('<span role="presentation" class="before"/>').append('<span role="presentation" class="after"/>').hide();}};c.prototype={timeout:null,$win:d(window),opts:{my:"center bottom",at:"center top",offset:"0 0",collision:"flop flop",popover:null,thereCanBeOnlyOne:true},flop:{left:function(f,i){var e=i.collisionPosition,h=d(this),j="flopped-x",g;g=a.flip.left(f,i);(e.left!==f.left)?h.addClass(j):h.removeClass(j);return g;},top:function(f,i){var e=i.collisionPosition,h=d(this),j="flopped-y",g;g=a.flip.top(f,i);(e.top!==f.top)?h.addClass(j):h.removeClass(j);return g;}},bindEvents:function(){this.$trigger.click(d.proxy(function(f){if(this.popoverIsOpen()){this.hidePopover(f);}else{this.showPopover(f);}if(this.opts.thereCanBeOnlyOne){d("body").trigger("popover-hide-all");}},this));d("body").click(d.proxy(function(f){if(this.popoverIsOpen()){if(!d(this.$popover).has(d(f.target)).size()&&!d(this.$popover).filter(d(f.target)).size()){this.hide();}}},this)).bind("popover-hide-all",d.proxy(function(){if(this.popoverIsOpen()&&!this.currentTrigger()){this.hide(true);}},this));this.$win.resize(d.proxy(this.pinToTargetDebounced,this));},popoverIsOpen:function(){var e=(this.$trigger.length==this.$trigger.filter(this.$popover.data("opener")).length);return(this.$popover.is(":visible")&&e);},currentTrigger:function(){return(this.$trigger.length==this.$trigger.filter(d.fn.popover.lastTrigger).length);},show:function(f){d.fn.popover.lastTrigger=this.$trigger;this.$popover.fadeIn("medium",d.proxy(function(){this.$trigger.trigger("popover-show-animation-complete");},this)).data("opener",this.$trigger);this.pinToTarget();this.$trigger.trigger("popover-show");},hide:function(e){var f=d.proxy(function(){this.$trigger.trigger("popover-hide-animation-complete");},this);if(e){this.$popover.hide(0,f);}else{this.$popover.fadeOut("fast",f);}this.$trigger.trigger("popover-hide");},toggle:function(e){if(this.popoverIsOpen()){this.hide(e);}else{this.show();}},showPopover:function(f){f.preventDefault();f.stopPropagation();this.show(f);},hidePopover:function(f){f.preventDefault();f.stopPropagation();this.hide();},pinToTarget:function(){if(!this.popoverIsOpen()){return;}var e=this.$popover,g=d.extend({of:this.$trigger},this.opts),f={left:d.proxy(this.flop.left,this.$popover),top:d.proxy(this.flop.top,this.$popover)};a.flop=f;e.position(g);a.flop=undefined;},pinToTargetDebounced:function(){clearTimeout(this.timeout);this.timeout=setTimeout(d.proxy(this.pinToTarget,this),50);}};var b=d.fn;b.popover=function(f){var e=b.popover.Popover;this.each(function(){var h=d(this);var g=new e(h,f);g.bindEvents();h.data("popover",g);});return this;};b.popover.lastTrigger=null;b.popover.Popover=c;})(jQuery);
@@ -0,0 +1,9 @@
1
+ /*
2
+ * jQuery UI Position 1.8.16
3
+ *
4
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5
+ * Dual licensed under the MIT or GPL Version 2 licenses.
6
+ * http://jquery.org/license
7
+ *
8
+ * http://docs.jquery.com/UI/Position
9
+ */(function(a,b){a.ui=a.ui||{};var c=/left|center|right/,d=/top|center|bottom/,e="center",f=a.fn.position,g=a.fn.offset;a.fn.position=function(b){if(!b||!b.of)return f.apply(this,arguments);b=a.extend({},b);var g=a(b.of),h=g[0],i=(b.collision||"flip").split(" "),j=b.offset?b.offset.split(" "):[0,0],k,l,m;return h.nodeType===9?(k=g.width(),l=g.height(),m={top:0,left:0}):h.setTimeout?(k=g.width(),l=g.height(),m={top:g.scrollTop(),left:g.scrollLeft()}):h.preventDefault?(b.at="left top",k=l=0,m={top:b.of.pageY,left:b.of.pageX}):(k=g.outerWidth(),l=g.outerHeight(),m=g.offset()),a.each(["my","at"],function(){var a=(b[this]||"").split(" ");a.length===1&&(a=c.test(a[0])?a.concat([e]):d.test(a[0])?[e].concat(a):[e,e]),a[0]=c.test(a[0])?a[0]:e,a[1]=d.test(a[1])?a[1]:e,b[this]=a}),i.length===1&&(i[1]=i[0]),j[0]=parseInt(j[0],10)||0,j.length===1&&(j[1]=j[0]),j[1]=parseInt(j[1],10)||0,b.at[0]==="right"?m.left+=k:b.at[0]===e&&(m.left+=k/2),b.at[1]==="bottom"?m.top+=l:b.at[1]===e&&(m.top+=l/2),m.left+=j[0],m.top+=j[1],this.each(function(){var c=a(this),d=c.outerWidth(),f=c.outerHeight(),g=parseInt(a.curCSS(this,"marginLeft",!0))||0,h=parseInt(a.curCSS(this,"marginTop",!0))||0,n=d+g+(parseInt(a.curCSS(this,"marginRight",!0))||0),o=f+h+(parseInt(a.curCSS(this,"marginBottom",!0))||0),p=a.extend({},m),q;b.my[0]==="right"?p.left-=d:b.my[0]===e&&(p.left-=d/2),b.my[1]==="bottom"?p.top-=f:b.my[1]===e&&(p.top-=f/2),p.left=Math.round(p.left),p.top=Math.round(p.top),q={left:p.left-g,top:p.top-h},a.each(["left","top"],function(c,e){a.ui.position[i[c]]&&a.ui.position[i[c]][e](p,{targetWidth:k,targetHeight:l,elemWidth:d,elemHeight:f,collisionPosition:q,collisionWidth:n,collisionHeight:o,offset:j,my:b.my,at:b.at})}),a.fn.bgiframe&&c.bgiframe(),c.offset(a.extend(p,{using:b.using}))})},a.ui.position={fit:{left:function(b,c){var d=a(window),e=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft();b.left=e>0?b.left-e:Math.max(b.left-c.collisionPosition.left,b.left)},top:function(b,c){var d=a(window),e=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop();b.top=e>0?b.top-e:Math.max(b.top-c.collisionPosition.top,b.top)}},flip:{left:function(b,c){if(c.at[0]===e)return;var d=a(window),f=c.collisionPosition.left+c.collisionWidth-d.width()-d.scrollLeft(),g=c.my[0]==="left"?-c.elemWidth:c.my[0]==="right"?c.elemWidth:0,h=c.at[0]==="left"?c.targetWidth:-c.targetWidth,i=-2*c.offset[0];b.left+=c.collisionPosition.left<0?g+h+i:f>0?g+h+i:0},top:function(b,c){if(c.at[1]===e)return;var d=a(window),f=c.collisionPosition.top+c.collisionHeight-d.height()-d.scrollTop(),g=c.my[1]==="top"?-c.elemHeight:c.my[1]==="bottom"?c.elemHeight:0,h=c.at[1]==="top"?c.targetHeight:-c.targetHeight,i=-2*c.offset[1];b.top+=c.collisionPosition.top<0?g+h+i:f>0?g+h+i:0}}},a.offset.setOffset||(a.offset.setOffset=function(b,c){/static/.test(a.curCSS(b,"position"))&&(b.style.position="relative");var d=a(b),e=d.offset(),f=parseInt(a.curCSS(b,"top",!0),10)||0,g=parseInt(a.curCSS(b,"left",!0),10)||0,h={top:c.top-e.top+f,left:c.left-e.left+g};"using"in c?c.using.call(b,h):d.css(h)},a.fn.offset=function(b){var c=this[0];return!c||!c.ownerDocument?null:b?this.each(function(){a.offset.setOffset(this,b)}):g.call(this)})})(jQuery)
metadata ADDED
@@ -0,0 +1,69 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jquery-popover
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Andrei Misarca
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-19 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: jquery-rails
16
+ requirement: &76512230 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 2.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *76512230
25
+ description: Add popovers to your applications with only a few lines of code
26
+ email:
27
+ - andrei.misarca@gmail.com
28
+ executables: []
29
+ extensions: []
30
+ extra_rdoc_files: []
31
+ files:
32
+ - .gitignore
33
+ - Gemfile
34
+ - LICENSE
35
+ - README.md
36
+ - Rakefile
37
+ - jquery-popover.gemspec
38
+ - lib/jquery-popover.rb
39
+ - lib/jquery-popover/engine.rb
40
+ - lib/jquery-popover/version.rb
41
+ - vendor/assets/javascripts/jquery-popover.js
42
+ - vendor/assets/javascripts/jquery-popover.min.js
43
+ - vendor/assets/javascripts/jquery-ui/position.js
44
+ homepage: ''
45
+ licenses: []
46
+ post_install_message:
47
+ rdoc_options: []
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubyforge_project:
64
+ rubygems_version: 1.8.11
65
+ signing_key:
66
+ specification_version: 3
67
+ summary: jQuery popover
68
+ test_files: []
69
+ has_rdoc: