/wp-content/plugins/wp-link-status/assets/js/lightboxed/jquery.lightboxed.js

https://github.com/livinglab/openlab · JavaScript · 280 lines · 167 code · 89 blank · 24 comment · 26 complexity · 974bf7523363decb101f8baa980fb755 MD5 · raw file

  1. /*
  2. * $ lightboxed 1.0
  3. * By Pau Iglesias on seedplugins.com
  4. *
  5. * Based on lightbox_me 2.4 by Buck Wilson
  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. (function($) {
  20. var zIndex = false, fronts = [];
  21. $(document).on('keyup', observeKeyPress);
  22. function observeKeyPress(e) {
  23. if (fronts.length && (e.keyCode == 27 || (e.DOM_VK_ESCAPE == 27 && e.which==0))) {
  24. fronts[fronts.length - 1].trigger('escPress');
  25. }
  26. }
  27. $.fn.wplnst_lightboxed = function(options) {
  28. return this.each(function() {
  29. var settings = $.extend({}, $.fn.wplnst_lightboxed.defaults, options);
  30. var $self = $(this), $overlay;
  31. function init() {
  32. fronts.push($self);
  33. $('body').append($self.hide());
  34. zIndex = (false === zIndex)? settings.zIndex : zIndex + 1;
  35. if (settings.showOverlay) {
  36. $overlay = $('<div class="' + settings.classPrefix + '_overlay"/>');
  37. $('body').append($overlay);
  38. setOverlayHeight();
  39. $(window).resize(setOverlayHeight);
  40. $overlay.css({
  41. position : 'absolute',
  42. width : '100%',
  43. top : 0,
  44. left : 0,
  45. right : 0,
  46. bottom : 0,
  47. zIndex : zIndex,
  48. display : 'none',
  49. });
  50. $overlay.css(settings.overlayCSS);
  51. $overlay.fadeIn(settings.overlaySpeed, function() {
  52. setSelfPosition();
  53. $self[settings.appearEffect](settings.lightboxSpeed, function() {
  54. raiseOnLoad();
  55. if (settings.closeClickOutside) {
  56. $overlay.click(function(e) {
  57. closeLightbox();
  58. e.preventDefault;
  59. return false;
  60. });
  61. }
  62. });
  63. });
  64. } else {
  65. setSelfPosition();
  66. $self[settings.appearEffect](settings.lightboxSpeed, function() {
  67. $self.show();
  68. raiseOnLoad();
  69. if (settings.closeClickOutside) {
  70. $(document).on('click', onClickOutside);
  71. }
  72. });
  73. }
  74. if (settings.parentLightbox) {
  75. settings.parentLightbox.fadeOut(200);
  76. }
  77. $(window).resize(setSelfPosition).scroll(setSelfPosition);
  78. $(document).on('click', settings.closeSelector, onCloseSelector);
  79. $self.on('close', closeLightbox);
  80. $self.on('escPress', onEscPress);
  81. $self.on('reposition', setSelfPosition);
  82. }
  83. function closeLightbox() {
  84. fronts.pop();
  85. if (settings.showOverlay) {
  86. $overlay.remove();
  87. $(window).unbind('resize', setOverlayHeight);
  88. } else if (settings.closeClickOutside) {
  89. $(document).off('click', onClickOutside);
  90. }
  91. if (settings.parentLightbox) {
  92. settings.parentLightbox.fadeIn(200);
  93. }
  94. if (settings.preventScroll) {
  95. $('body').css('overflow', '');
  96. }
  97. $(document).off('click', settings.closeSelector, onCloseSelector);
  98. $self.off('close', closeLightbox);
  99. $self.off('escPress', onEscPress);
  100. $self.off('reposition', setSelfPosition);
  101. $(window).unbind('resize', setSelfPosition);
  102. $(window).unbind('scroll', setSelfPosition);
  103. $self[settings.disappearEffect](settings.lightboxSpeed, function() {
  104. raiseOnClose();
  105. });
  106. //$self.hide();
  107. }
  108. function setOverlayHeight() {
  109. ($(window).height() < $(document).height())? $overlay.css({ height : $(document).height() + 'px' }) : $overlay.css({ height : '100%' });
  110. }
  111. function setSelfPosition() {
  112. $self.css({
  113. left : '50%',
  114. marginLeft : ($self.outerWidth() / 2) * -1,
  115. zIndex : zIndex + 1
  116. });
  117. if (($self.height() + 80 >= $(window).height()) && ($self.css('position') != 'absolute')) {
  118. var topOffset = $(document).scrollTop() + 40;
  119. $self.css({
  120. position : 'absolute',
  121. top : topOffset + 'px',
  122. marginTop : 0
  123. });
  124. } else if ($self.height() + 80 < $(window).height()) {
  125. settings.centered? $self.css({
  126. position : 'fixed',
  127. top : '50%',
  128. marginTop : ($self.outerHeight() / 2) * -1
  129. }) : $self.css({
  130. position : 'fixed'
  131. }).css(settings.modalCSS);
  132. if (settings.preventScroll) {
  133. $('body').css('overflow', 'hidden');
  134. }
  135. }
  136. }
  137. function onEscPress() {
  138. if (settings.closeEsc) {
  139. closeLightbox();
  140. }
  141. }
  142. function onClickOutside(e) {
  143. if (!$self.is(e.target) && 0 === $self.has(e.target).length) {
  144. closeLightbox();
  145. e.preventDefault;
  146. return false;
  147. }
  148. }
  149. function onCloseSelector(e) {
  150. if ($self.has(e.target).length) {
  151. closeLightbox();
  152. e.preventDefault();
  153. return false;
  154. }
  155. }
  156. function raiseOnLoad() {
  157. $self.trigger('lightboxedLoad');
  158. $self.off('lightboxedLoad');
  159. }
  160. function raiseOnClose() {
  161. $self.trigger('lightboxedClose');
  162. $self.off('lightboxedClose');
  163. }
  164. // Start
  165. init();
  166. });
  167. };
  168. $.fn.wplnst_lightboxed.defaults = {
  169. // Animation
  170. appearEffect : 'fadeIn',
  171. appearEase : '',
  172. disappearEffect : 'fadeOut',
  173. disappearEase : '',
  174. lightboxSpeed : 200,
  175. overlaySpeed : 250,
  176. // Close
  177. closeSelector : '.wplnst_lightboxed_close',
  178. closeClickOutside : true,
  179. closeEsc : true,
  180. // Behavior
  181. showOverlay : true,
  182. parentLightbox : false,
  183. preventScroll : true,
  184. // Style
  185. centered : false,
  186. classPrefix : 'wplnst_lbx',
  187. zIndex : 9999,
  188. modalCSS : { top : '40px' },
  189. overlayCSS : { background : 'black', opacity : .3 }
  190. }
  191. })(jQuery);