var Dajaxice = { website: { node: function(callback_function, argv, custom_settings){ return Dajaxice.call('website.node', 'POST', callback_function, argv, custom_settings); }, code: function(callback_function, argv, custom_settings){ return Dajaxice.call('website.code', 'POST', callback_function, argv, custom_settings); }, chapters: function(callback_function, argv, custom_settings){ return Dajaxice.call('website.chapters', 'POST', callback_function, argv, custom_settings); }, bug_form: function(callback_function, argv, custom_settings){ return Dajaxice.call('website.bug_form', 'POST', callback_function, argv, custom_settings); }, books: function(callback_function, argv, custom_settings){ return Dajaxice.call('website.books', 'POST', callback_function, argv, custom_settings); }, bug_form_submit: function(callback_function, argv, custom_settings){ return Dajaxice.call('website.bug_form_submit', 'POST', callback_function, argv, custom_settings); }, contributor: function(callback_function, argv, custom_settings){ return Dajaxice.call('website.contributor', 'POST', callback_function, argv, custom_settings); }, examples: function(callback_function, argv, custom_settings){ return Dajaxice.call('website.examples', 'POST', callback_function, argv, custom_settings); } } , get_cookie: function(name) { var cookieValue = null; if (document.cookie && document.cookie != '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = cookies[i].toString().replace(/^\s+/, "").replace(/\s+$/, ""); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; }, call: function(dajaxice_function, method, dajaxice_callback, argv, custom_settings) { var custom_settings = custom_settings || {}, error_callback = Dajaxice.get_setting('default_exception_callback'); if('error_callback' in custom_settings && typeof(custom_settings['error_callback']) == 'function'){ error_callback = custom_settings['error_callback']; } var send_data = 'argv='+encodeURIComponent(JSON.stringify(argv)), oXMLHttpRequest = new XMLHttpRequest, endpoint = '/dajaxice/'+dajaxice_function+'/'; if(method == 'GET'){ endpoint = endpoint + '?' + send_data; } oXMLHttpRequest.open(method, endpoint); oXMLHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); oXMLHttpRequest.setRequestHeader("X-Requested-With", "XMLHttpRequest"); oXMLHttpRequest.setRequestHeader("X-CSRFToken", Dajaxice.get_cookie('csrftoken')); oXMLHttpRequest.onreadystatechange = function() { if (this.readyState == XMLHttpRequest.DONE) { if(this.responseText == Dajaxice.EXCEPTION || !(this.status in Dajaxice.valid_http_responses())){ error_callback(); } else{ var response; try { response = JSON.parse(this.responseText); } catch (exception) { response = this.responseText; } dajaxice_callback(response); } } } if(method == 'POST'){ oXMLHttpRequest.send(send_data); } else{ oXMLHttpRequest.send(); } return oXMLHttpRequest; }, setup: function(settings) { this.settings = settings; }, get_setting: function(key){ if(this.settings == undefined || this.settings[key] == undefined){ return Dajaxice.default_settings[key]; } return this.settings[key]; }, valid_http_responses: function(){ return {200: null, 301: null, 302: null, 304: null} }, EXCEPTION: 'DAJAXICE_EXCEPTION', default_settings: {'default_exception_callback': function(){ console.log('Dajaxice: Something went wrong.')}} }; window['Dajaxice'] = Dajaxice; (function(){function n(){this._object=h&&!p?new h:new window.ActiveXObject("Microsoft.XMLHTTP");this._listeners=[]}function a(){return new n}function j(b){a.onreadystatechange&&a.onreadystatechange.apply(b);b.dispatchEvent({type:"readystatechange",bubbles:!1,cancelable:!1,timeStamp:new Date+0})}function o(b){try{b.responseText=b._object.responseText}catch(a){}try{var d;var g=b._object,c=g.responseXML,f=g.responseText;i&&(f&&c&&!c.documentElement&&g.getResponseHeader("Content-Type").match(/[^\/]+\/[^\+]+\+xml/))&& (c=new window.ActiveXObject("Microsoft.XMLDOM"),c.async=!1,c.validateOnParse=!1,c.loadXML(f));d=c&&(i&&0!==c.parseError||!c.documentElement||c.documentElement&&"parsererror"==c.documentElement.tagName)?null:c;b.responseXML=d}catch(h){}try{b.status=b._object.status}catch(k){}try{b.statusText=b._object.statusText}catch(j){}}function l(b){b._object.onreadystatechange=new window.Function}var h=window.XMLHttpRequest,m=!!window.controllers,i=window.document.all&&!window.opera,p=i&&window.navigator.userAgent.match(/MSIE 7.0/); a.prototype=n.prototype;m&&h.wrapped&&(a.wrapped=h.wrapped);a.UNSENT=0;a.OPENED=1;a.HEADERS_RECEIVED=2;a.LOADING=3;a.DONE=4;a.prototype.readyState=a.UNSENT;a.prototype.responseText="";a.prototype.responseXML=null;a.prototype.status=0;a.prototype.statusText="";a.prototype.priority="NORMAL";a.prototype.onreadystatechange=null;a.onreadystatechange=null;a.onopen=null;a.onsend=null;a.onabort=null;a.prototype.open=function(b,e,d,g,c){delete this._headers;arguments.length<3&&(d=true);this._async=d;var f= this,h=this.readyState,k=null;if(i&&d){k=function(){if(h!=a.DONE){l(f);f.abort()}};window.attachEvent("onunload",k)}a.onopen&&a.onopen.apply(this,arguments);arguments.length>4?this._object.open(b,e,d,g,c):arguments.length>3?this._object.open(b,e,d,g):this._object.open(b,e,d);this.readyState=a.OPENED;j(this);this._object.onreadystatechange=function(){if(!m||d){f.readyState=f._object.readyState;o(f);if(f._aborted)f.readyState=a.UNSENT;else if(f.readyState==a.DONE){delete f._data;l(f);i&&d&&window.detachEvent("onunload", k);h!=f.readyState&&j(f);h=f.readyState}}}};a.prototype.send=function(b){a.onsend&&a.onsend.apply(this,arguments);arguments.length||(b=null);if(b&&b.nodeType){b=window.XMLSerializer?(new window.XMLSerializer).serializeToString(b):b.xml;this._headers["Content-Type"]||this._object.setRequestHeader("Content-Type","application/xml")}this._data=b;a:{this._object.send(this._data);if(m&&!this._async){this.readyState=a.OPENED;for(o(this);this.readyStatea.UNSENT)this._aborted=true;this._object.abort();l(this);this.readyState=a.UNSENT;delete this._data};a.prototype.getAllResponseHeaders=function(){return this._object.getAllResponseHeaders()};a.prototype.getResponseHeader=function(b){return this._object.getResponseHeader(b)};a.prototype.setRequestHeader=function(b,a){if(!this._headers)this._headers={};this._headers[b]=a;return this._object.setRequestHeader(b, a)};a.prototype.addEventListener=function(a,e,d){for(var g=0,c;c=this._listeners[g];g++)if(c[0]==a&&c[1]==e&&c[2]==d)return;this._listeners.push([a,e,d])};a.prototype.removeEventListener=function(a,e,d){for(var g=0,c;c=this._listeners[g];g++)if(c[0]==a&&c[1]==e&&c[2]==d)break;c&&this._listeners.splice(g,1)};a.prototype.dispatchEvent=function(a){a={type:a.type,target:this,currentTarget:this,eventPhase:2,bubbles:a.bubbles,cancelable:a.cancelable,timeStamp:a.timeStamp,stopPropagation:function(){},preventDefault:function(){}, initEvent:function(){}};a.type=="readystatechange"&&this.onreadystatechange&&(this.onreadystatechange.handleEvent||this.onreadystatechange).apply(this,[a]);for(var e=0,d;d=this._listeners[e];e++)d[0]==a.type&&!d[2]&&(d[1].handleEvent||d[1]).apply(this,[a])};a.prototype.toString=function(){return"[object XMLHttpRequest]"};a.toString=function(){return"[XMLHttpRequest]"};window.Function.prototype.apply||(window.Function.prototype.apply=function(a,e){e||(e=[]);a.__func=this;a.__func(e[0],e[1],e[2],e[3], e[4]);delete a.__func});window.XMLHttpRequest=a})(); var JSON;JSON||(JSON={}); (function(){function k(a){return 10>a?"0"+a:a}function o(a){p.lastIndex=0;return p.test(a)?'"'+a.replace(p,function(a){var c=r[a];return"string"===typeof c?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function m(a,j){var c,d,h,n,g=e,f,b=j[a];b&&("object"===typeof b&&"function"===typeof b.toJSON)&&(b=b.toJSON(a));"function"===typeof i&&(b=i.call(j,a,b));switch(typeof b){case "string":return o(b);case "number":return isFinite(b)?String(b):"null";case "boolean":case "null":return String(b);case "object":if(!b)return"null"; e+=l;f=[];if("[object Array]"===Object.prototype.toString.apply(b)){n=b.length;for(c=0;c