idlesign/django-xross

View on GitHub
xross/static/js/xross/xross.min.js

Summary

Maintainability
A
0 mins
Test Coverage
/**
 * django-xross
 * https://github.com/idlesign/django-xross
 *
 * Distributed under BSD License.
 */
var xross=function(){"use strict";return{_handlersRegistry:{},_defaultHandler:"ajax",dataItemsPrefix:"x",debug:!1,automate:function(e,t){void 0===e&&(e="xross"),$(function(){$.each($("."+e),function(e,r){xross.describe($(r),t)})})},bootstrap:function(){this.registerHandler("ajax",this.handlers.ajax)},registerHandler:function(e,t,r){"object"==typeof t&&(r=t.params,t=t.attach),void 0===r&&(r={}),this.utils.log(function(){return"Registering `"+e+"` handler."}),this._handlersRegistry[e]={func:t,params:r}},describe:function(e,t,r){"string"!=typeof t&&(r=t,t=this._defaultHandler),void 0===r&&(r={});var n=this._handlersRegistry[t];if(void 0===n){if(t!==this._defaultHandler)throw"You are trying to use an unregistered handler:  `"+n+"`.";xross.bootstrap(),n=this._handlersRegistry[t]}$(function(){e instanceof Array||(e=[e]),$.each(e,function(e,o){var s=$(o);xross.utils.log(function(){return"Describing `#"+s.attr("id")+"` using `"+t+"` handler."}),n.func(s,$.extend({},n.params,r))})})},utils:{evaluate:function(e,t){return e instanceof Function?e(t):e},log:function(e){xross.debug&&console.log("xross: "+e())},getFunction:function(e,t){var r,n=e.split("."),o=n.pop(),s=function(){return"Unable to find `"+e+"` function."};for(r=0;r<n.length;r+=1)if(t=t[n[r]],void 0===t)return void xross.utils.log(s);return t[o]},getElementData:function(e){var t={},r=xross.dataItemsPrefix;return $.each(e.data(),function(e,n){var o=typeof n;$.inArray(o,["string","number","boolean"])>-1&&(e.slice(0,r.length)===r&&(e=e.slice(r.length)),t[e]=n)}),t},resolveFuncFromParam:function(e,t){if("string"==typeof e){var r=e,n=xross.utils.getFunction(r,t);return void 0===n&&(n=xross.utils.getFunction(r,window)),n}return e}},handlers:{ajax:{_resolveFuncComplete:function(e,t,r){var n=xross.utils.resolveFuncFromParam(e.complete,window);e.complete=function(){xross.utils.log(function(){return"Running `"+n+"` complete function for `"+r+"` element."}),n&&n(),t.trigger($.Event("xrossajaxafter"))}},_resolveFuncError:function(e,t,r){var n=xross.utils.resolveFuncFromParam(e.error,{log:function(e,t,r){xross.utils.log(function(){return"Request failed `"+r+"`: `"+e.responseText+"`."})}});e.error=function(e,t,o){xross.utils.log(function(){return"Running `"+n+"` error function for `"+r+"` element."}),n&&n(e,t,o)}},_resolveFuncSuccess:function(e,t,r){var n=xross.utils.resolveFuncFromParam(e.success,{remove:function(e,t,r,n){n.remove()},empty:function(e,t,r,n){n.empty()},fill:function(e,t,r,n){n.html(e)},replace:function(e,t,r,n){n.replaceWith(e)},append:function(e,t,r,n){n.append(e)},prepend:function(e,t,r,n){n.prepend(e)}});e.success=function(o,s,i){xross.utils.log(function(){return"Running `"+n+"` success function for `"+r+"` element."}),n&&n(o,s,i,$(xross.utils.evaluate(e.target,t)))}},_resolveEvent:function(e,t,r){var n=r,o=e.event;if("auto"===o&&(o="ready",t.length)){var s=t.prop("tagName").toLowerCase(),i={button:"click",a:"click"},a=i[s];void 0!==a&&(o=a)}if("ready"===o){if(!t.length)return void xross.utils.log(function(){return"Skipping binding `ready` to an unknown `"+r+"` element."});n={}}return{event:o,source:n}},_resolveTarget:function(e,t,r){var n;if("string"==typeof e.target)if("this"===e.target){if(n=r,"#undefined"===n)return void xross.utils.log(function(){return"Skipping: `#undefined` element can't be a target."});e.target=n}else n="#"+e.target,e.target=function(){return $(n)};return n},attach:function(e,t){var r=e.attr("id"),n="#"+r,o=$.extend({},t,xross.utils.getElementData(e));if(o.op&&(r=o.op),!r)throw"No operation name supplied for element.";var s=xross.handlers.ajax._resolveEvent(o,e,n),i=s.event,a=s.source,u=xross.handlers.ajax._resolveTarget(o,e,n);xross.handlers.ajax._resolveFuncComplete(o,e,n),xross.handlers.ajax._resolveFuncSuccess(o,e,n),xross.handlers.ajax._resolveFuncError(o,e,n),xross.utils.log(function(){return"Binding `"+i+"` to `"+n+"` targeting `"+u+"`."}),$(document).on(i,a,function(e){var t=$(n),s=$.extend({},{op:r},xross.utils.getElementData(t)),a=o.form,u={};if(xross.utils.log(function(){return"Triggering `"+i+"` for `"+n+"` with `"+$.param(s)+"`."}),a&&("string"==typeof a&&(a=$("#"+a)),a.length)){if(a[0].checkValidity&&!a[0].checkValidity())return;u=a.serializeArray()}var l=$.Event("xrossajaxbefore",{xrossData:s,xrossFormData:u});t.trigger(l)&&($.isEmptyObject(u)||(s=$.param(s)+"&"+$.param(u)),$.ajax({type:o.method,data:s,success:o.success,error:o.error,complete:o.complete,cache:!1}),e.preventDefault())})},params:{method:"GET",event:"auto",target:"this",success:"fill",error:"log",complete:null,form:null,op:null}}}}}();