1import 'jquery';import elgg from 'elgg';import spinner from 'elgg/spinner';import system_messages from 'elgg/system_messages';import security from 'elgg/security';import i18n from 'elgg/i18n';import hooks from 'elgg/hooks';var site_url=elgg.get_site_url(),action_base=site_url+'action/',fragment_pattern=/#.*$/,query_pattern=/\?.*$/,leading_slash_pattern=/^\//,slashes_pattern=/(^\/|\/$)/g;function Ajax(use_spinner){use_spinner=(use_spinner==null)?!0:!!use_spinner;var that=this;var spinner_starts=0;function fetch(options,hook_type){var orig_options,params,jqXHR,metadata_extracted=!1,error_displayed=!1;function extract_metadata(data,status_code){status_code=status_code||200;if(!metadata_extracted){const m=data._elgg_msgs;if(m&&m.error){data.error=m.error} 2if(data.error&&options.showErrorMessages){system_messages.error(data.error);error_displayed=!0} 3if(data.error||status_code!==200){data.status=-1}else{data.status=0} 4m&&m.success&&options.showSuccessMessages&&system_messages.success(m.success);delete data._elgg_msgs;const deps=data._elgg_deps;if(deps&&deps.js){deps.js.forEach((dep)=>import(dep))} 5if(deps&&deps.css){deps.css.forEach(function(dep){if($('link[rel="stylesheet"][data-name="'+dep.name+'"]').length){return} 6let link=document.createElement('link');link.type='text/css';link.rel='stylesheet';link.href=dep.href;link.setAttribute('data-name',dep.name);if(dep.integrity){link.integrity=dep.integrity;link.crossorigin='anonymous'} 7document.head.appendChild(link)})} 8delete data._elgg_deps;metadata_extracted=!0}} 9that._fetch_args={options:options,hook_type:hook_type};hook_type=hook_type||'';if(!$.isPlainObject(options)){throw new Error('options must be a plain object with key "url"')} 10if(!options.url&&hook_type!=='path:'){throw new Error('options must be a plain object with key "url"')} 11if(options.data===undefined){options.data={}} 12if(options.showSuccessMessages===undefined){options.showSuccessMessages=!0} 13if(options.showErrorMessages===undefined){options.showErrorMessages=!0} 14if($.isPlainObject(options.data)){options.data=options.data||{}}else if(options.data instanceof FormData){options.processData=!1;options.contentType=!1}else{if(typeof options.data!=='string'){throw new Error('if defined, options.data must be a plain object or string')}} 15options.dataType='json';orig_options=$.extend({},options);params={options:options};if(hook_type&&typeof options.data!=='string'){options.data=hooks.trigger(Ajax.REQUEST_DATA_HOOK,hook_type,params,options.data)} 16if(!options.method){options.method='GET';if(options.data&&!$.isEmptyObject(options.data)){options.method='POST'}} 17if(use_spinner){options.beforeSend=function(){orig_options.beforeSend&&orig_options.beforeSend.apply(null,arguments);spinner_starts++;spinner.start()};options.complete=function(){spinner_starts--;if(spinner_starts<1){spinner.stop()} 18orig_options.complete&&orig_options.complete.apply(null,arguments)}} 19var custom_error=function(){};if(options.error){custom_error=options.error} 20options.error=function(jqXHR,textStatus,errorThrown){if(!jqXHR.getAllResponseHeaders()){custom_error(jqXHR,textStatus,errorThrown);return} 21try{var data=$.parseJSON(jqXHR.responseText);if($.isPlainObject(data)){extract_metadata(data,jqXHR.status)}}catch(e){if(window.console){console.warn(e.message)}} 22if(!error_displayed&&options.showErrorMessages){system_messages.error(i18n.echo('ajax:error'))} 23custom_error(jqXHR,textStatus,errorThrown)};options.dataFilter=function(data,type){if(type!=='json'){return data} 24data=$.parseJSON(data);extract_metadata(data,200);var params={options:orig_options};if(hook_type){data=hooks.trigger(Ajax.RESPONSE_DATA_HOOK,hook_type,params,data)} 25jqXHR.AjaxData=data;if(data.value!==undefined){return JSON.stringify(data.value)} 26return JSON.stringify(data)};options.url=elgg.normalize_url(options.url);options.headers={'X-Elgg-Ajax-API':'2'};that._ajax_options=options;jqXHR=$.ajax(options);return jqXHR} 27this.path=function(path,options){elgg.assertTypeOf('string',path);if(path.indexOf(site_url)===0){path=path.substring(site_url.length)} 28path=path.replace(fragment_pattern,'');assertNotUrl(path);options=options||{};options.url=path;path=path.replace(query_pattern,'').replace(slashes_pattern,'');return fetch(options,'path:'+path)};this.view=function(view,options){elgg.assertTypeOf('string',view);if(view===''){throw new Error('view cannot be empty')} 29assertNotUrl(view);options=options||{};options.url='ajax/view/'+view;options.method=options.method||'GET';view=view.replace(query_pattern,'').replace(slashes_pattern,'');return fetch(options,'view:'+view)};this.form=function(action,options){elgg.assertTypeOf('string',action);if(action===''){throw new Error('action cannot be empty')} 30action=action.replace(leading_slash_pattern,'').replace(fragment_pattern,'');assertNotUrl(action);options=options||{};options.url='ajax/form/'+action;options.method=options.method||'GET';action=action.replace(query_pattern,'').replace(slashes_pattern,'');return fetch(options,'form:'+action)};this.action=function(action,options){elgg.assertTypeOf('string',action);if(action===''){throw new Error('action cannot be empty')} 31if(action.indexOf(action_base)===0){action=action.substring(action_base.length)} 32action=action.replace(leading_slash_pattern,'').replace(fragment_pattern,'');assertNotUrl(action);options=options||{};options.data=options.data||{};var m=action.match(/\?(.+)$/);if(m&&/(^|&)__elgg_ts=/.test(m[1])){}else{options.data=security.addToken(options.data)} 33options.method=options.method||'POST';options.url='action/'+action;action=action.replace(query_pattern,'').replace(slashes_pattern,'');return fetch(options,'action:'+action)};this.objectify=function(el){$(el).trigger('elgg-ajax-objectify');return new FormData($(el)[0])};this.forward=function(destination){spinner_starts++;spinner.start();elgg.forward(destination)}} 34function assertNotUrl(arg){if(/^https?:/.test(arg)){throw new Error('elgg/Ajax cannot be used with external URLs')}} 35Ajax.REQUEST_DATA_HOOK='ajax_request_data';Ajax.RESPONSE_DATA_HOOK='ajax_response_data';export default Ajax
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.