/* webSqlTracer v1.0.3 01-08-2015 (C) 2015 Terikon Apps */ !function(a,b){"use strict";"function"==typeof define&&define.amd?define(["underscore","jquery"],b.bind(null,a)):"undefined"!=typeof module&&null!==module&&null!=module.exports?module.exports.webSqlTracer=b(a,require("underscore"),require("jquery")):a.webSqlTracer=b(a,a._,a.jQuery)}(this,function(a,b,c){"use strict";var d,e,f,g,h=!1,i=[],j=[],k=!1,l={};return{traceOnOpen:function(c,d){var e,f=this;if(h)throw new Error("Call stopTraceOnOpen() before calling traceOnOpen() for second time.");h=!0,g||(g=a.openDatabase),b.isString(c)&&(e=c,c=function(a){return a===e}),a.openDatabase=function(a,b){var e=g.apply(this,arguments);return c(a)&&f.startTrace(e,a,b).then(function(){d&&d(e)}),e}},stopTraceOnOpen:function(){if(!h)throw new Error("Cannot call stopTraceOnOpen() before calling traceOnOpen().");h=!1,a.openDatabase=g},startTrace:function(a,g,h){var m,n,o=new c.Deferred;if(g&&(n=l[g],b.isUndefined(n)&&(n=0),l[g]=n+1,n>0&&(g=g+"("+n+")"),console.log("SQL TRACE : started tracing database "+g+(b.isUndefined(h)?"":" version '"+h+"'"))),b.indexOf(i,a)>=0)throw new Error("startTrace was already started for this db");if(k)o.resolve();else{a.transaction(function(a){var c=Object.getPrototypeOf(a);d||(d=c.executeSql),c.executeSql=function(a,c){var e,f,g=this,h=g._transactionDb,k=b.indexOf(i,h);k>=0&&(e=j[k],f=e||"",console.log("SQL TRACE "+f+": '"+a+"'"+(c&&!b.isEmpty(c)?", args="+JSON.stringify(c):""))),d.apply(this,arguments)},setTimeout(function(){o.resolve()},0)}),m=Object.getPrototypeOf(a),e||(e=m.transaction,f=m.readTransaction);var p=function(a){return function(b,c,d){var e=this;a.call(this,function(a){a._transactionDb=e,b(a)},c,d)}};m.transaction=p(e),m.readTransaction=p(f),k=!0}return i.push(a),j.push(g),o.promise()},stopTrace:function(a){var g,h,l=new c.Deferred,m=b.indexOf(i,a);if(0>m)throw new Error("cannot stopTrace, trace was not started for this db");if(g=1===i.length){var n=Object.getPrototypeOf(a);n.transaction=e,n.readTransaction=f,a.transaction(function(a){var b=Object.getPrototypeOf(a);b.executeSql=d,l.resolve()}),k=!1}return h=j[m],console.log("SQL TRACE : stopped tracing database"+(h?" "+h:"")),i.splice(m,1),j.splice(m,1),g||l.resolve(),l.promise()}}}); //# sourceMappingURL=webSqlTracer.min.js.map