jquery.loader.min.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. /**
  2. * jQuery.loader Plugin
  3. * @author Stéphan Zych <info@monkeymonk.be>
  4. * @copyriht 2010-2011 Stéphan Zych <info@monkeymonk.be>
  5. * @license New BSD License <http://creativecommons.org/licenses/BSD/>
  6. */
  7. (function ($) {
  8. "use strict";
  9. var render = function (template, data) {
  10. for (var k in data) {
  11. template = template.replace(new RegExp('{' + k + '}', 'g'), data[k]);
  12. }
  13. return template;
  14. }; // render
  15. var Loader = function () {
  16. var defaults = {
  17. className: 'loader',
  18. tpl: '<div class="{className} hide"><div class="{className}-load"></div><div class="{className}-overlay"></div></div>',
  19. delay: 200,
  20. loader: true,
  21. overlay: true,
  22. onHide: function () {},
  23. onShow: function () {}
  24. }; // defaults
  25. var init = function (oParams) {
  26. return this.each(function () {
  27. defaults = $.extend({}, defaults, oParams);
  28. var $self = $(this), $loader;
  29. $self.append(render(defaults.tpl, defaults));
  30. $loader = $('> .' + defaults.className, $self);
  31. if (defaults.overlay) {
  32. $loader.addClass('overlay');
  33. }
  34. if (defaults.loader) {
  35. $('.' + defaults.className + '-load', $loader)
  36. .on('click', function () {
  37. $self.loader('hide', defaults.onHide);
  38. });
  39. }
  40. });
  41. }; // init
  42. var show = function (oParams) {
  43. defaults = $.extend({}, defaults, oParams);
  44. var self = this, $self = $(self), $loader = $('> .' + defaults.className + ':first', $self);
  45. if (!$loader.length) {
  46. init.call(self, oParams);
  47. $loader = $('> .' + defaults.className + ':first', $self);
  48. }
  49. $loader.fadeIn(defaults.delay, function () {
  50. $loader.removeClass('hide');
  51. defaults.onShow(defaults);
  52. });
  53. }; // show
  54. var hide = function (onHide) {
  55. defaults = $.extend({}, defaults, {onHide: onHide});
  56. var self = this, $self = $(self), $loader = $('> .' + defaults.className + ':first', $self);
  57. if ($loader.length) {
  58. $loader.fadeOut(defaults.delay, function () {
  59. $loader.addClass('hide');
  60. defaults.onHide(defaults);
  61. });
  62. }
  63. }; // hide
  64. return {
  65. init: init,
  66. show: show,
  67. hide: hide
  68. };
  69. }; // Loader
  70. $.fn.loader = function (options) {
  71. if (!$.data(this, 'loader')) {
  72. $.data(this, 'loader', new Loader(this, options));
  73. }
  74. var plugin = $.data(this, 'loader');
  75. if (plugin[options]) {
  76. return plugin[options].apply(this, Array.prototype.slice.call(arguments, 1));
  77. } else if (typeof options === 'object' || !options) {
  78. return plugin.init.apply(this, arguments);
  79. } else {
  80. $.error('Method "' + arguments[0] + '" does not exist in $.loader plugin!');
  81. }
  82. }; // $.fn.loader
  83. } (jQuery)); // jQuery.loader() by Stéphan Zych (monkeymonk.be)