1/** 2 * @name Floating Module CK 3 * @package mod_floatingmoduleck 4 * @copyright Copyright (C) 2015. All rights reserved. 5 * @license GNU General Public License version 2 or later; see LICENSE.txt 6 * @author Cedric Keiflin - http://www.template-creator.com - http://www.joomlack.fr 7 * @version 1.1.12 8 */ 9 10(function($) { 11 $.fn.FloatingModuleCK = function(options) { 12 var defaults = { 13 time: 200, 14 zIndex: '1000', 15 minResolution: '640' 16 }; 17 18 var opts = $.extend(defaults, options); 19 var mods = this; 20 var $window = $(window); 21 // check the resolution to disable the floating 22 var doFloating = true; 23 var timeout; 24 25 mods.each(function(options) { 26 var mod = $(this); 27 if (mod.attr('data-float') == '1') return; 28 mod.attr('data-float', '1'); 29 mod.data('isfloatingckbottom', false); 30 toggleButton(); 31 if (mod.attr('data-method') == 'onscroll') { 32 clearTimeout(timeout); 33 timeout = setTimeout(function() { 34 floatModule(mod); 35 }, 500); 36 $window.scroll(function() { floatModule(mod); }); 37 $window.resize(function() { resizeModule(mod); }); 38 } 39 if (mod.attr('data-method') == 'always') { 40 $(document.body).prepend(mod); 41 mod.css({position: 'absolute', zIndex: opts.zIndex, top: parseInt(mod.attr('data-y')), width: mod.attr('data-w'), backgroundColor: mod.attr('data-bg')}).addClass(mod.attr('data-css')); 42 switch (mod.attr('data-pos')) { 43 case 'right': 44 mod.css({right : parseInt(mod.attr('data-x'))}).css('left', 'auto'); 45 break; 46 case 'bottom': 47 mod.css({bottom : parseInt(mod.attr('data-y'))}).css('top', 'auto').css('left', 'auto').css('right', parseInt(mod.attr('data-x'))); 48 break; 49 case 'bottomleft': 50 mod.css({bottom : parseInt(mod.attr('data-y'))}).css('top', 'auto').css('left', parseInt(mod.attr('data-x'))).css('right', 'auto'); 51 break; 52 case 'left': 53 default: 54 mod.css({left : parseInt(mod.attr('data-x'))}).css('right', 'auto'); 55 break; 56 } 57 fixedModule(mod); 58 $window.scroll(function() { fixedModule(mod); }); 59 $window.on('resize load', function() { checkDofloating(); if(doFloating) {mod.css('display', 'block');} else {mod.css('display', 'none');} }); 60 } 61 }); 62 63 function toggleButton() { 64 $('.floatingmoduleck-button').on('click', function() { 65 var module = $(this).next('.floatingmoduleck-inner').get(0); 66 if (module.style.display === 'block') { 67 module.style.display = ''; 68 } else { 69 module.style.display = 'block'; 70 } 71 }); 72 } 73 74 function floatModule(mod) { 75 if (mod.attr('data-onscrollpos') == 'top') { 76 checkDofloating(); 77 var winY = $window.scrollTop(); 78 if(!mod.data('isfloatingck')) { 79 mod.data('floatingckTop', mod.offset().top); 80 mod.data('floatingckLeft', mod.offset().left); 81 mod.data('floatingckWidth', mod.width()); 82 mod.data('floatingckHeight', mod.height()); 83 mod.data('floatingckIniW',(mod[0].style.width ? mod[0].style.width : '')); 84 mod.data('floatingckIniH',(mod[0].style.height ? mod[0].style.height : '')); 85 } 86 modTop = mod.data('floatingckTop'); 87 88 // float the module 89 var bottomlimit = mod.attr('data-bottomlimit') && $(mod.attr('data-bottomlimit')).length ? $(mod.attr('data-bottomlimit')).offset().top + parseFloat(mod.attr('data-bottomoffset')) : 0; 90 var modTop2 = mod.offset().top; 91 var modBottom = modTop2 + mod.height(); 92 var topvalue = bottomlimit - (winY + mod.height()); 93 94 if (mod.attr('data-bottomlimit') && $(mod.attr('data-bottomlimit')).length 95 && modBottom >= bottomlimit 96 && mod.data('isfloatingckbottom') == false 97 && doFloating 98 ) { 99 mod.css({position: 'fixed', top: parseFloat(topvalue) +'px'}).data('isfloatingckbottom', true); 100 } else if (mod.data('isfloatingckbottom') == true) { 101 mod.css({position: 'fixed', top: parseFloat(topvalue) +'px'}); 102 if (mod.position().top >= parseInt(mod.attr('data-y'))) { 103 mod.data('isfloatingckbottom', false) 104 .css('top' , parseInt(mod.attr('data-y'))); 105 } 106 } else if (modTop < (winY - parseInt(mod.attr('data-offsety')) + parseInt(mod.attr('data-y'))) && !mod.data('isfloatingck') && doFloating) { 107 mod.after('<div id="'+mod.attr('id')+'tmp"></div>') 108 var modtmp = $('#'+mod.attr('id')+'tmp'); 109 modtmp 110 .css('visibility', 'hidden') 111 .height(mod.outerHeight()); 112 mod.css({position: 'fixed', zIndex: opts.zIndex, marginTop: -parseInt(mod.attr('data-offsety'))+'px',top: parseInt(mod.attr('data-y'))+'px', left: 'auto', width: mod.data('floatingckWidth'), backgroundColor: mod.attr('data-bg')}).data('isfloatingck', true).addClass('isfloatingck').addClass(mod.attr('data-css')); 113 mod.attr('data-offset', modTop); 114 mod.animate({marginTop: 0}, parseInt(opts.time)); 115 // else the module is not in the scope, don't float 116 } else if (modTop >= (winY - parseInt(mod.attr('data-offsety')) + parseInt(mod.attr('data-y'))) && mod.data('isfloatingck') || (!doFloating && $('#'+mod.attr('id')+'tmp').length)) { 117 var modtmp = $('#'+mod.attr('id')+'tmp'); 118 mod.data('floatingckTop', modtmp.offset().top); 119 mod.data('floatingckLeft', modtmp.offset().left); 120 mod.css({position: '', marginTop: '', backgroundColor: '', top: ''}).data('isfloatingck', false).removeClass('isfloatingck').removeClass(mod.attr('data-css')); 121 mod.width(mod.data('floatingckIniW')).height(mod.data('floatingckIniH')); 122 modtmp.remove(); 123 } 124 // if bottom 125 } else { 126 checkDofloating(); 127 var winY = $window.scrollTop(); 128 if(!mod.data('isfloatingck')) { 129 mod.data('floatingckBottom', mod.offset().top + mod.height()); 130 mod.data('floatingckLeft', mod.offset().left); 131 mod.data('floatingckWidth', mod.width()); 132 mod.data('floatingckHeight', mod.height()); 133 mod.data('floatingckIniW',(mod[0].style.width ? mod[0].style.width : '')); 134 mod.data('floatingckIniH',(mod[0].style.height ? mod[0].style.height : '')); 135 } 136 modBottom = mod.data('floatingckBottom'); 137 138 // var modBottom = mod.offset().top + mod.height(); 139 var winBottom = winY + $window.height(); 140 141 if (winBottom < (modBottom - parseInt(mod.attr('data-offsety')) + parseInt(mod.attr('data-y'))) && !mod.data('isfloatingck') && doFloating) { 142 mod.after('<div id="'+mod.attr('id')+'tmp"></div>') 143 var modtmp = $('#'+mod.attr('id')+'tmp'); 144 modtmp 145 .css('visibility', 'hidden') 146 .height(mod.outerHeight()); 147 mod.css({position: 'fixed', zIndex: opts.zIndex, marginTop: -parseInt(mod.attr('data-offsety'))+'px',bottom: parseInt(mod.attr('data-y'))+'px', left: 'auto', width: mod.data('floatingckWidth'), backgroundColor: mod.attr('data-bg')}).data('isfloatingck', true).addClass('isfloatingck').addClass(mod.attr('data-css')); 148 mod.attr('data-offset', modBottom); 149 mod.animate({marginTop: 0}, parseInt(opts.time)); 150 // else the module is not in the scope, don't float 151 } else if (winBottom >= (modBottom - parseInt(mod.attr('data-offsety')) + parseInt(mod.attr('data-y'))) && mod.data('isfloatingck') || (!doFloating && $('#'+mod.attr('id')+'tmp').length)) { 152 var modtmp = $('#'+mod.attr('id')+'tmp'); 153 mod.data('floatingckTop', modtmp.offset().top); 154 mod.data('floatingckLeft', modtmp.offset().left); 155 mod.css({position: '', marginTop: '', backgroundColor: '', bottom: ''}).data('isfloatingck', false).removeClass('isfloatingck').removeClass(mod.attr('data-css')); 156 mod.width(mod.data('floatingckIniW')).height(mod.data('floatingckIniH')); 157 modtmp.remove(); 158 } 159 } 160 } 161 162 function resizeModule(mod) { 163 if (!mod.data('isfloatingck')) return; 164 var modtmp = $('#'+mod.attr('id')+'tmp'); 165 mod.data('floatingckTop', modtmp.offset().top); 166 mod.data('floatingckLeft', modtmp.offset().left); 167 floatModule(mod); 168 if ($('#'+mod.attr('id')+'tmp').length) { 169 mod.width(modtmp.width()); 170 modtmp.height(mod.height()); 171 } 172 } 173 174 function fixedModule(mod) { 175 var winY = $window.scrollTop(); 176 var modTop = mod.offset().top; 177 switch (mod.attr('data-pos')) { 178 case 'bottom': 179 mod.css({position: 'fixed', bottom : parseInt(mod.attr('data-y')), top: 'auto', left: 'auto', right: parseInt(mod.attr('data-x'))}); 180 break; 181 case 'bottomleft': 182 mod.css({position: 'fixed', bottom : parseInt(mod.attr('data-y')), top: 'auto', left: parseInt(mod.attr('data-x')), right: 'auto'}); 183 break; 184 case 'right': 185 case 'left': 186 default: 187 mod.animate({top: winY + parseInt(mod.attr('data-y'))}, parseInt(opts.time)/10); 188 break; 189 } 190 191 } 192 193 function checkDofloating() { 194 if ($window.width() <= opts.minResolution) { 195 doFloating = false;
196 } else { 197 doFloating = true; 198 } 199 } 200 } 201})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.