/* BoxRefresh() * ========= * Adds AJAX content control to a box. * * @Usage: $('#my-box').boxRefresh(options) * or add [data-widget="box-refresh"] to the box element * Pass any option as data-option="value" */ +function ($) { 'use strict'; var DataKey = 'lte.boxrefresh'; var Default = { source : '', params : {}, trigger : '.refresh-btn', content : '.box-body', loadInContent : true, responseType : '', overlayTemplate: '
', onLoadStart : function () { }, onLoadDone : function (response) { return response; } }; var Selector = { data: '[data-widget="box-refresh"]' }; // BoxRefresh Class Definition // ========================= var BoxRefresh = function (element, options) { this.element = element; this.options = options; this.$overlay = $(options.overlayTemplate); if (options.source === '') { throw new Error('Source url was not defined. Please specify a url in your BoxRefresh source option.'); } this._setUpListeners(); this.load(); }; BoxRefresh.prototype.load = function () { this._addOverlay(); this.options.onLoadStart.call($(this)); $.get(this.options.source, this.options.params, function (response) { if (this.options.loadInContent) { $(this.element).find(this.options.content).html(response); } this.options.onLoadDone.call($(this), response); this._removeOverlay(); }.bind(this), this.options.responseType !== '' && this.options.responseType); }; // Private BoxRefresh.prototype._setUpListeners = function () { $(this.element).on('click', this.options.trigger, function (event) { if (event) event.preventDefault(); this.load(); }.bind(this)); }; BoxRefresh.prototype._addOverlay = function () { $(this.element).append(this.$overlay); }; BoxRefresh.prototype._removeOverlay = function () { $(this.$overlay).remove(); }; // Plugin Definition // ================= function Plugin(option) { return this.each(function () { var $this = $(this); var data = $this.data(DataKey); if (!data) { var options = $.extend({}, Default, $this.data(), typeof option == 'object' && option); $this.data(DataKey, (data = new BoxRefresh($this, options))); } if (typeof data == 'string') { if (typeof data[option] == 'undefined') { throw new Error('No method named ' + option); } data[option](); } }); } var old = $.fn.boxRefresh; $.fn.boxRefresh = Plugin; $.fn.boxRefresh.Constructor = BoxRefresh; // No Conflict Mode // ================ $.fn.boxRefresh.noConflict = function () { $.fn.boxRefresh = old; return this; }; // BoxRefresh Data API // ================= $(window).on('load', function () { $(Selector.data).each(function () { Plugin.call($(this)); }); }); }(jQuery);