Skip to content

Instantly share code, notes, and snippets.

@LeonardoCA
Created June 18, 2012 05:21
Show Gist options
  • Save LeonardoCA/2946969 to your computer and use it in GitHub Desktop.
Save LeonardoCA/2946969 to your computer and use it in GitHub Desktop.
nette.ajax.js Experimental Extension - displays some FireLogger info as flash message
(function($, undefined) {
/**
* Shows HTTP Error Statuses and some FireLogger info from Ajax request
*/
$.nette.ext('httpStatusToFlash', {
start: function (xhr) {
xhr.setRequestHeader("X-FireLogger", '1.2');
return xhr;
},
error: function (payload) {
var flashMessages = $('#snippet--flashMessages');
var html = "";
if (payload.status != 200) {
html += '<h4>'+payload.status+' '+payload.statusText+'</h4>';
}
var headers = payload.getAllResponseHeaders();
var matches = headers.match(/FireLogger[-a-z0-9]+/);
if (matches != null) {
for (var i=0;i<matches.length;i++)
{
var firelog = jQuery.parseJSON(this.base64decode(payload.getResponseHeader(matches[i])));
//console.log(firelog);
firelog = firelog.logs[0];
html += '<p>'+firelog.template+'</p><p>'+this.editorLink(firelog.pathname,firelog.lineno)+'</p>';
}
}
flashMessages.html('<div class="alert alert-error"><a class="close" data-dismiss="alert">×</a>'+html+'</div>');
}
}, {
editorLink: function (link,lineno) {
return '<b>File:</b> <a title="'+link+':'+lineno+'" href="editor://open/?file='+encodeURIComponent(link)+'&line='+lineno+'">'+link+'</a> <b>Line:</b> '+lineno;
},
/* http://www.webtoolkit.info/javascript-base64.html */
_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
// base64 decode
base64decode : function (input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = this._keyStr.indexOf(input.charAt(i++));
enc2 = this._keyStr.indexOf(input.charAt(i++));
enc3 = this._keyStr.indexOf(input.charAt(i++));
enc4 = this._keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if (enc3 != 64) {
output = output + String.fromCharCode(chr2);
}
if (enc4 != 64) {
output = output + String.fromCharCode(chr3);
}
}
output = this._utf8_decode(output);
return output;
},
_utf8_decode : function (utftext) {
var string = "";
var i = 0;
var c = c1 = c2 = 0;
while ( i < utftext.length ) {
c = utftext.charCodeAt(i);
if (c < 128) {
string += String.fromCharCode(c);
i++;
}
else if((c > 191) && (c < 224)) {
c2 = utftext.charCodeAt(i+1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
}
else {
c2 = utftext.charCodeAt(i+1);
c3 = utftext.charCodeAt(i+2);
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}
}
return string;
}
});
})(jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment