root / snf-cyclades-app / synnefo / ui / new_ui / ui / javascripts / foundation / foundation.tooltips.js @ 65635b1b
History | View | Annotate | Download (6.6 kB)
1 | b3c1328b | Olga Brani | /*jslint unparam: true, browser: true, indent: 2 */
|
---|---|---|---|
2 | b3c1328b | Olga Brani | |
3 | b3c1328b | Olga Brani | ;(function ($, window, document, undefined) { |
4 | b3c1328b | Olga Brani | 'use strict';
|
5 | b3c1328b | Olga Brani | |
6 | b3c1328b | Olga Brani | Foundation.libs.tooltips = { |
7 | b3c1328b | Olga Brani | name: 'tooltips', |
8 | b3c1328b | Olga Brani | |
9 | b3c1328b | Olga Brani | version : '4.0.2', |
10 | b3c1328b | Olga Brani | |
11 | b3c1328b | Olga Brani | settings : {
|
12 | b3c1328b | Olga Brani | selector : '.has-tip', |
13 | b3c1328b | Olga Brani | additionalInheritableClasses : [],
|
14 | b3c1328b | Olga Brani | tooltipClass : '.tooltip', |
15 | 656c135b | Olga Brani | posBottom: 10, |
16 | b3c1328b | Olga Brani | tipTemplate : function (selector, content) { |
17 | b3c1328b | Olga Brani | return '<span data-selector="' + selector + '" class="' |
18 | b3c1328b | Olga Brani | + Foundation.libs.tooltips.settings.tooltipClass.substring(1)
|
19 | b3c1328b | Olga Brani | + '">' + content + '<span class="nub"></span></span>'; |
20 | b3c1328b | Olga Brani | } |
21 | b3c1328b | Olga Brani | }, |
22 | b3c1328b | Olga Brani | |
23 | b3c1328b | Olga Brani | cache : {},
|
24 | b3c1328b | Olga Brani | |
25 | b3c1328b | Olga Brani | init : function (scope, method, options) { |
26 | b3c1328b | Olga Brani | var self = this; |
27 | b3c1328b | Olga Brani | this.scope = scope || this.scope; |
28 | b3c1328b | Olga Brani | |
29 | b3c1328b | Olga Brani | if (typeof method === 'object') { |
30 | b3c1328b | Olga Brani | $.extend(true, this.settings, method); |
31 | b3c1328b | Olga Brani | } |
32 | b3c1328b | Olga Brani | |
33 | b3c1328b | Olga Brani | if (typeof method != 'string') { |
34 | b3c1328b | Olga Brani | if (Modernizr.touch) {
|
35 | b3c1328b | Olga Brani | $(this.scope) |
36 | b3c1328b | Olga Brani | .on('click.fndtn.tooltip touchstart.fndtn.tooltip touchend.fndtn.tooltip',
|
37 | b3c1328b | Olga Brani | '[data-tooltip]', function (e) { |
38 | b3c1328b | Olga Brani | e.preventDefault(); |
39 | b3c1328b | Olga Brani | $(self.settings.tooltipClass).hide();
|
40 | b3c1328b | Olga Brani | self.showOrCreateTip($(this)); |
41 | b3c1328b | Olga Brani | }) |
42 | b3c1328b | Olga Brani | .on('click.fndtn.tooltip touchstart.fndtn.tooltip touchend.fndtn.tooltip',
|
43 | b3c1328b | Olga Brani | this.settings.tooltipClass, function (e) { |
44 | b3c1328b | Olga Brani | e.preventDefault(); |
45 | b3c1328b | Olga Brani | $(this).fadeOut(150); |
46 | b3c1328b | Olga Brani | }); |
47 | b3c1328b | Olga Brani | } else {
|
48 | b3c1328b | Olga Brani | $(this.scope) |
49 | b3c1328b | Olga Brani | .on('mouseenter.fndtn.tooltip mouseleave.fndtn.tooltip',
|
50 | b3c1328b | Olga Brani | '[data-tooltip]', function (e) { |
51 | b3c1328b | Olga Brani | var $this = $(this); |
52 | b3c1328b | Olga Brani | |
53 | b3c1328b | Olga Brani | if (e.type === 'mouseover' || e.type === 'mouseenter') { |
54 | b3c1328b | Olga Brani | self.showOrCreateTip($this);
|
55 | b3c1328b | Olga Brani | } else if (e.type === 'mouseout' || e.type === 'mouseleave') { |
56 | b3c1328b | Olga Brani | self.hide($this);
|
57 | b3c1328b | Olga Brani | } |
58 | b3c1328b | Olga Brani | }); |
59 | b3c1328b | Olga Brani | } |
60 | b3c1328b | Olga Brani | |
61 | b3c1328b | Olga Brani | // $(this.scope).data('fndtn-tooltips', true);
|
62 | b3c1328b | Olga Brani | } else {
|
63 | b3c1328b | Olga Brani | return this[method].call(this, options); |
64 | b3c1328b | Olga Brani | } |
65 | b3c1328b | Olga Brani | |
66 | b3c1328b | Olga Brani | }, |
67 | b3c1328b | Olga Brani | |
68 | b3c1328b | Olga Brani | showOrCreateTip : function ($target) { |
69 | b3c1328b | Olga Brani | var $tip = this.getTip($target); |
70 | b3c1328b | Olga Brani | |
71 | b3c1328b | Olga Brani | if ($tip && $tip.length > 0) { |
72 | b3c1328b | Olga Brani | return this.show($target); |
73 | b3c1328b | Olga Brani | } |
74 | b3c1328b | Olga Brani | |
75 | b3c1328b | Olga Brani | return this.create($target); |
76 | b3c1328b | Olga Brani | }, |
77 | b3c1328b | Olga Brani | |
78 | b3c1328b | Olga Brani | getTip : function ($target) { |
79 | b3c1328b | Olga Brani | var selector = this.selector($target), |
80 | b3c1328b | Olga Brani | tip = null;
|
81 | b3c1328b | Olga Brani | |
82 | b3c1328b | Olga Brani | if (selector) {
|
83 | b3c1328b | Olga Brani | tip = $('span[data-selector=' + selector + ']' + this.settings.tooltipClass); |
84 | b3c1328b | Olga Brani | } |
85 | b3c1328b | Olga Brani | |
86 | b3c1328b | Olga Brani | return (typeof tip === 'object') ? tip : false; |
87 | b3c1328b | Olga Brani | }, |
88 | b3c1328b | Olga Brani | |
89 | b3c1328b | Olga Brani | selector : function ($target) { |
90 | b3c1328b | Olga Brani | var id = $target.attr('id'), |
91 | b3c1328b | Olga Brani | dataSelector = $target.attr('data-tooltip') || $target.attr('data-selector'); |
92 | b3c1328b | Olga Brani | |
93 | b3c1328b | Olga Brani | if ((id && id.length < 1 || !id) && typeof dataSelector != 'string') { |
94 | b3c1328b | Olga Brani | dataSelector = 'tooltip' + Math.random().toString(36).substring(7); |
95 | b3c1328b | Olga Brani | $target.attr('data-selector', dataSelector); |
96 | b3c1328b | Olga Brani | } |
97 | b3c1328b | Olga Brani | |
98 | b3c1328b | Olga Brani | return (id && id.length > 0) ? id : dataSelector; |
99 | b3c1328b | Olga Brani | }, |
100 | b3c1328b | Olga Brani | |
101 | b3c1328b | Olga Brani | create : function ($target) { |
102 | b3c1328b | Olga Brani | var $tip = $(this.settings.tipTemplate(this.selector($target), $('<div>').html($target.attr('title')).html())), |
103 | b3c1328b | Olga Brani | classes = this.inheritable_classes($target); |
104 | b3c1328b | Olga Brani | |
105 | b3c1328b | Olga Brani | $tip.addClass(classes).appendTo('body'); |
106 | b3c1328b | Olga Brani | if (Modernizr.touch) {
|
107 | b3c1328b | Olga Brani | $tip.append('<span class="tap-to-close">tap to close </span>'); |
108 | b3c1328b | Olga Brani | } |
109 | b3c1328b | Olga Brani | $target.removeAttr('title').attr('title',''); |
110 | b3c1328b | Olga Brani | this.show($target); |
111 | b3c1328b | Olga Brani | }, |
112 | b3c1328b | Olga Brani | |
113 | b3c1328b | Olga Brani | reposition : function (target, tip, classes) { |
114 | b3c1328b | Olga Brani | var width, nub, nubHeight, nubWidth, column, objPos;
|
115 | 656c135b | Olga Brani | var self = this; |
116 | b3c1328b | Olga Brani | |
117 | b3c1328b | Olga Brani | tip.css('visibility', 'hidden').show(); |
118 | b3c1328b | Olga Brani | |
119 | b3c1328b | Olga Brani | width = target.data('width');
|
120 | b3c1328b | Olga Brani | nub = tip.children('.nub');
|
121 | b3c1328b | Olga Brani | nubHeight = this.outerHeight(nub);
|
122 | b3c1328b | Olga Brani | nubWidth = this.outerHeight(nub);
|
123 | b3c1328b | Olga Brani | |
124 | b3c1328b | Olga Brani | objPos = function (obj, top, right, bottom, left, width) { |
125 | b3c1328b | Olga Brani | return obj.css({
|
126 | b3c1328b | Olga Brani | 'top' : (top) ? top : 'auto', |
127 | b3c1328b | Olga Brani | 'bottom' : (bottom) ? bottom : 'auto', |
128 | b3c1328b | Olga Brani | 'left' : (left) ? left : 'auto', |
129 | b3c1328b | Olga Brani | 'right' : (right) ? right : 'auto', |
130 | b3c1328b | Olga Brani | 'width' : (width) ? width : 'auto' |
131 | b3c1328b | Olga Brani | }).end(); |
132 | b3c1328b | Olga Brani | }; |
133 | b3c1328b | Olga Brani | |
134 | 656c135b | Olga Brani | objPos(tip, (target.offset().top + this.outerHeight(target) + self.settings.posBottom), 'auto', 'auto', target.offset().left, width); |
135 | b3c1328b | Olga Brani | |
136 | b3c1328b | Olga Brani | if ($(window).width() < 767) { |
137 | 656c135b | Olga Brani | objPos(tip, (target.offset().top + this.outerHeight(target) + self.settings.posBottom), 'auto', 'auto', 12.5, $(this.scope).width()); |
138 | b3c1328b | Olga Brani | tip.addClass('tip-override');
|
139 | b3c1328b | Olga Brani | objPos(nub, -nubHeight, 'auto', 'auto', target.offset().left); |
140 | b3c1328b | Olga Brani | } else {
|
141 | 656c135b | Olga Brani | objPos(tip, (target.offset().top + this.outerHeight(target) + self.settings.posBottom), 'auto', 'auto', target.offset().left, width); |
142 | b3c1328b | Olga Brani | tip.removeClass('tip-override');
|
143 | b3c1328b | Olga Brani | if (classes && classes.indexOf('tip-top') > -1) { |
144 | b3c1328b | Olga Brani | objPos(tip, (target.offset().top - this.outerHeight(tip)), 'auto', 'auto', target.offset().left, width) |
145 | b3c1328b | Olga Brani | .removeClass('tip-override');
|
146 | b3c1328b | Olga Brani | } else if (classes && classes.indexOf('tip-left') > -1) { |
147 | b3c1328b | Olga Brani | objPos(tip, (target.offset().top + (this.outerHeight(target) / 2) - nubHeight*2.5), 'auto', 'auto', (target.offset().left - this.outerWidth(tip) - nubHeight), width) |
148 | b3c1328b | Olga Brani | .removeClass('tip-override');
|
149 | b3c1328b | Olga Brani | } else if (classes && classes.indexOf('tip-right') > -1) { |
150 | b3c1328b | Olga Brani | objPos(tip, (target.offset().top + (this.outerHeight(target) / 2) - nubHeight*2.5), 'auto', 'auto', (target.offset().left + this.outerWidth(target) + nubHeight), width) |
151 | b3c1328b | Olga Brani | .removeClass('tip-override');
|
152 | b3c1328b | Olga Brani | } |
153 | b3c1328b | Olga Brani | } |
154 | b3c1328b | Olga Brani | |
155 | b3c1328b | Olga Brani | tip.css('visibility', 'visible').hide(); |
156 | b3c1328b | Olga Brani | }, |
157 | b3c1328b | Olga Brani | |
158 | b3c1328b | Olga Brani | inheritable_classes : function (target) { |
159 | b3c1328b | Olga Brani | var inheritables = ['tip-top', 'tip-left', 'tip-bottom', 'tip-right', 'noradius'].concat(this.settings.additionalInheritableClasses), |
160 | b3c1328b | Olga Brani | classes = target.attr('class'),
|
161 | b3c1328b | Olga Brani | filtered = classes ? $.map(classes.split(' '), function (el, i) { |
162 | b3c1328b | Olga Brani | if ($.inArray(el, inheritables) !== -1) { |
163 | b3c1328b | Olga Brani | return el;
|
164 | b3c1328b | Olga Brani | } |
165 | b3c1328b | Olga Brani | }).join(' ') : ''; |
166 | b3c1328b | Olga Brani | |
167 | b3c1328b | Olga Brani | return $.trim(filtered); |
168 | b3c1328b | Olga Brani | }, |
169 | b3c1328b | Olga Brani | |
170 | b3c1328b | Olga Brani | show : function ($target) { |
171 | b3c1328b | Olga Brani | var $tip = this.getTip($target); |
172 | b3c1328b | Olga Brani | |
173 | b3c1328b | Olga Brani | this.reposition($target, $tip, $target.attr('class')); |
174 | b3c1328b | Olga Brani | $tip.fadeIn(150); |
175 | b3c1328b | Olga Brani | }, |
176 | b3c1328b | Olga Brani | |
177 | b3c1328b | Olga Brani | hide : function ($target) { |
178 | b3c1328b | Olga Brani | var $tip = this.getTip($target); |
179 | b3c1328b | Olga Brani | |
180 | b3c1328b | Olga Brani | $tip.fadeOut(150); |
181 | b3c1328b | Olga Brani | }, |
182 | b3c1328b | Olga Brani | |
183 | b3c1328b | Olga Brani | // deprecate reload
|
184 | b3c1328b | Olga Brani | reload : function () { |
185 | b3c1328b | Olga Brani | var $self = $(this); |
186 | b3c1328b | Olga Brani | |
187 | b3c1328b | Olga Brani | return ($self.data('fndtn-tooltips')) ? $self.foundationTooltips('destroy').foundationTooltips('init') : $self.foundationTooltips('init'); |
188 | b3c1328b | Olga Brani | }, |
189 | b3c1328b | Olga Brani | |
190 | b3c1328b | Olga Brani | off : function () { |
191 | b3c1328b | Olga Brani | $(this.scope).off('.fndtn.tooltip'); |
192 | b3c1328b | Olga Brani | $(this.settings.tooltipClass).each(function (i) { |
193 | b3c1328b | Olga Brani | $('[data-tooltip]').get(i).attr('title', $(this).text()); |
194 | b3c1328b | Olga Brani | }).remove(); |
195 | b3c1328b | Olga Brani | } |
196 | b3c1328b | Olga Brani | }; |
197 | b3c1328b | Olga Brani | }(Foundation.zj, this, this.document)); |