mw.loader.implement("mediawiki.api",function($,jQuery){(function(mw,$){var defaultOptions={parameters:{action:'query',format:'json'},ajax:{url:mw.util.wikiScript('api'),timeout:30*1000,dataType:'json'}},promises={};promises[defaultOptions.ajax.url]={};$.each(mw.user.tokens.get(),function(key,value){promises[defaultOptions.ajax.url][key]=$.Deferred().resolve(value).promise({abort:function(){}});});mw.Api=function(options){if(options===undefined){options={};}if(options.ajax&&options.ajax.url!==undefined){options.ajax.url=String(options.ajax.url);}options.parameters=$.extend({},defaultOptions.parameters,options.parameters);options.ajax=$.extend({},defaultOptions.ajax,options.ajax);this.defaults=options;};mw.Api.prototype={get:function(parameters,ajaxOptions){ajaxOptions=ajaxOptions||{};ajaxOptions.type='GET';return this.ajax(parameters,ajaxOptions);},post:function(parameters,ajaxOptions){ajaxOptions=ajaxOptions||{};ajaxOptions.type='POST';return this.ajax(parameters,ajaxOptions);},ajax: function(parameters,ajaxOptions){var token,apiDeferred=$.Deferred(),xhr,key,formData;parameters=$.extend({},this.defaults.parameters,parameters);ajaxOptions=$.extend({},this.defaults.ajax,ajaxOptions);if(parameters.token){token=parameters.token;delete parameters.token;}for(key in parameters){if($.isArray(parameters[key])){parameters[key]=parameters[key].join('|');}}if(ajaxOptions.type==='POST'&&window.FormData&&ajaxOptions.contentType==='multipart/form-data'){formData=new FormData();for(key in parameters){formData.append(key,parameters[key]);}if(token){formData.append('token',token);}ajaxOptions.data=formData;ajaxOptions.processData=false;ajaxOptions.contentType=false;}else{ajaxOptions.data=$.param(parameters).replace(/\./g,'%2E');if(token){ajaxOptions.data+='&token='+encodeURIComponent(token);}if(ajaxOptions.contentType==='multipart/form-data'){delete ajaxOptions.contentType;}}xhr=$.ajax(ajaxOptions).fail(function(xhr,textStatus,exception){apiDeferred.reject('http',{xhr:xhr,textStatus :textStatus,exception:exception});}).done(function(result,textStatus,jqXHR){if(result===undefined||result===null||result===''){apiDeferred.reject('ok-but-empty','OK response but empty result (check HTTP headers?)');}else if(result.error){var code=result.error.code===undefined?'unknown':result.error.code;apiDeferred.reject(code,result);}else{apiDeferred.resolve(result,jqXHR);}});return apiDeferred.promise({abort:xhr.abort}).fail(function(code,details){if(!(code==='http'&&details&&details.textStatus==='abort')){mw.log('mw.Api error: ',code,details);}});},postWithToken:function(tokenType,params,ajaxOptions){var api=this;return api.getToken(tokenType,params.assert).then(function(token){params.token=token;return api.post(params,ajaxOptions).then(null,function(code){if(code==='badtoken'){promises[api.defaults.ajax.url][tokenType+'Token']=params.token=undefined;return api.getToken(tokenType,params.assert).then(function(token){params.token=token;return api.post(params,ajaxOptions);});}return this ;});});},getToken:function(type,assert){var apiPromise,promiseGroup=promises[this.defaults.ajax.url],d=promiseGroup&&promiseGroup[type+'Token'];if(!d){apiPromise=this.get({action:'tokens',type:type,assert:assert});d=apiPromise.then(function(data){if(data.tokens&&data.tokens[type+'token']){return data.tokens[type+'token'];}return $.Deferred().reject('token-missing',data);},function(){delete promiseGroup[type+'Token'];return this;}).promise({abort:apiPromise.abort});if(!promiseGroup){promiseGroup=promises[this.defaults.ajax.url]={};}promiseGroup[type+'Token']=d;}return d;}};mw.Api.errors=['ok-but-empty','timeout','duplicate','duplicate-archive','noimageinfo','uploaddisabled','nomodule','mustbeposted','badaccess-groups','missingresult','missingparam','invalid-file-key','copyuploaddisabled','mustbeloggedin','empty-file','file-too-large','filetype-missing','filetype-banned','filetype-banned-type','filename-tooshort','illegal-filename','verification-error','hookaborted','unknown-error', 'internal-error','overwrite','badtoken','fetchfileerror','fileexists-shared-forbidden','invalidtitle','notloggedin','stashfailed','stasherror','stashedfilenotfound','stashpathinvalid','stashfilestorage','stashzerolength','stashnotloggedin','stashwrongowner','stashnosuchfilekey'];mw.Api.warnings=['duplicate','exists'];}(mediaWiki,jQuery));},{},{},{}); /* cache key: enwiki:resourceloader:filter:minify-js:7:6548ab026f12c5c9675aa0732e873064 */