1/*! 2 * Copyright 2012, Chris Wanstrath 3 * Released under the MIT License 4 * https://github.com/defunkt/jquery-pjax 5 */ 6(function($){function wdTrim(data){if(null==data){return''}else if('string'==typeof data){return data.trim()}else{return(data+'').replace('/^[\\s\uFEFF\xA0]+|[\\s\uFEFF\xA0]+$/g','')}} 7function fnPjax(selector,container,options){options=optionsFor(container,options);return this.on('click.pjax',selector,function(event){var opts=options;if(!opts.container){opts=$.extend({},options);opts.container=$(this).attr('data-pjax')} 8handleClick(event,opts)})} 9function handleClick(event,container,options){options=optionsFor(container,options);var link=event.currentTarget;var $link=$(link);if(link.tagName.toUpperCase()!=='A'){throw '$.fn.pjax or $.pjax.click requires an anchor element'} 10if(event.which>1||event.metaKey||event.ctrlKey||event.shiftKey||event.altKey){return} 11if(location.protocol!==link.protocol||location.hostname!==link.hostname){return} 12if(link.href.indexOf('#')>-1&&stripHash(link)==stripHash(location)){return} 13if(event.isDefaultPrevented()){return} 14var defaults={url:link.href,container:$link.attr('data-pjax'),target:link};var opts=$.extend({},defaults,options);var clickEvent=$.Event('pjax:click');$link.trigger(clickEvent,[opts]);if(!clickEvent.isDefaultPrevented()){pjax(opts);event.preventDefault();$link.trigger('pjax:clicked',[opts])}} 15function handleSubmit(event,container,options){options=optionsFor(container,options);var form=event.currentTarget;var $form=$(form);if(form.tagName.toUpperCase()!=='FORM'){throw '$.pjax.submit requires a form element'} 16var defaults={type:($form.attr('method')||'GET').toUpperCase(),url:$form.attr('action'),container:$form.attr('data-pjax'),target:form};if(defaults.type!=='GET'&&window.FormData!==undefined){defaults.data=new FormData(form);defaults.processData=!1;defaults.contentType=!1}else{if($form.find(':file').length){return} 17defaults.data=$form.serializeArray()} 18pjax($.extend({},defaults,options));event.preventDefault()} 19function pjax(options){options=$.extend(!0,{},$.ajaxSettings,pjax.defaults,options);if(typeof options.url==='function'){options.url=options.url()} 20var hash=parseURL(options.url).hash;var containerType=typeof options.container;if(containerType!=='string'){throw 'expected string value for \'container\' option; got '+containerType} 21var context=options.context=$(options.container);if(!context.length){throw 'the container selector \''+options.container+'\' did not match anything'} 22if(!options.data){options.data={}} 23if(Array.isArray(options.data)){options.data.push({name:'_pjax',value:options.container})}else{options.data._pjax=options.container} 24function fire(type,args,props){if(!props){props={}} 25props.relatedTarget=options.target;var event=$.Event(type,props);context.trigger(event,args);return!event.isDefaultPrevented()} 26var timeoutTimer;options.beforeSend=function(xhr,settings){if(settings.type!=='GET'){settings.timeout=0} 27xhr.setRequestHeader('X-PJAX','true');xhr.setRequestHeader('X-PJAX-Container',options.container);if(!fire('pjax:beforeSend',[xhr,settings])){return!1} 28if(settings.timeout>0){timeoutTimer=setTimeout(function(){if(fire('pjax:timeout',[xhr,options])){xhr.abort('timeout')}},settings.timeout);settings.timeout=0} 29var url=parseURL(settings.url);if(hash){url.hash=hash} 30options.requestUrl=stripInternalParams(url)};options.complete=function(xhr,textStatus){if(timeoutTimer){clearTimeout(timeoutTimer)} 31fire('pjax:complete',[xhr,textStatus,options]);fire('pjax:end',[xhr,options])};options.error=function(xhr,textStatus,errorThrown){var container=extractContainer('',xhr,options);var allowed=fire('pjax:error',[xhr,textStatus,errorThrown,options]);if(options.type=='GET'&&textStatus!=='abort'&&allowed){locationReplace(container.url)}};options.success=function(data,status,xhr){var previousState=pjax.state;var currentVersion=typeof $.pjax.defaults.version==='function'?$.pjax.defaults.version():$.pjax.defaults.version;var latestVersion=xhr.getResponseHeader('X-PJAX-Version');var container=extractContainer(data,xhr,options);var url=parseURL(container.url);if(hash){url.hash=hash;container.url=url.href} 32if(currentVersion&&latestVersion&¤tVersion!==latestVersion){locationReplace(container.url);return} 33if(!container.contents){locationReplace(container.url);return} 34pjax.state={id:options.id||uniqueId(),url:container.url,title:container.title,container:options.container,fragment:options.fragment,timeout:options.timeout};if(options.push||options.replace){window.history.replaceState(pjax.state,container.title,container.url)} 35var blurFocus=$.contains(context,document.activeElement);if(blurFocus){try{document.activeElement.blur()}catch(e){}} 36if(container.title){document.title=container.title} 37fire('pjax:beforeReplace',[container.contents,options],{state:pjax.state,previousState:previousState});if('function'===typeof options.renderCallback){options.renderCallback(context,container.contents,afterRender)}else{context.html(container.contents);
37afterRender()} 38function afterRender(){var autofocusEl=context.find('input[autofocus], textarea[autofocus]').last()[0];if(autofocusEl&&document.activeElement!==autofocusEl){autofocusEl.trigger('focus')} 39executeScriptTags(container.scripts);var scrollTo=options.scrollTo;if(hash){var name=decodeURIComponent(hash.slice(1));var target=document.getElementById(name)||document.getElementsByName(name)[0];if(target){scrollTo=$(target).offset().top}} 40if(typeof scrollTo=='number'){$(window).scrollTop(scrollTo)} 41fire('pjax:success',[data,status,xhr,options])}};if(!pjax.state){pjax.state={id:uniqueId(),url:window.location.href,title:document.title,container:options.container,fragment:options.fragment,timeout:options.timeout};window.history.replaceState(pjax.state,document.title)} 42abortXHR(pjax.xhr);pjax.options=options;var xhr=pjax.xhr=$.ajax(options);if(xhr.readyState>0){if(options.push&&!options.replace){cachePush(pjax.state.id,[options.container,cloneContents(context)]);window.history.pushState(null,'',options.requestUrl)} 43fire('pjax:start',[xhr,options]);fire('pjax:send',[xhr,options])} 44return pjax.xhr} 45function pjaxReload(container,options){var defaults={url:window.location.href,push:!1,replace:!0,scrollTo:!1};return pjax($.extend(defaults,optionsFor(container,options)))} 46function locationReplace(url){window.history.replaceState(null,'',pjax.state.url);window.location.replace(url)} 47var initialPop=!0;var initialURL=window.location.href;var initialState=window.history.state;if(initialState&&initialState.container){pjax.state=initialState} 48if('state' in window.history){initialPop=!1} 49function onPjaxPopstate(event){if(!initialPop){abortXHR(pjax.xhr)} 50var previousState=pjax.state;var state=event.state;var direction;if(state&&state.container){if(initialPop&&initialURL==state.url){return} 51if(previousState){if(previousState.id===state.id){return} 52direction=previousState.id<state.id?'forward':'back'} 53var cache=cacheMapping[state.id]||[];var containerSelector=cache[0]||state.container;var container=$(containerSelector),contents=cache[1];if(container.length){if(previousState){cachePop(direction,previousState.id,[containerSelector,cloneContents(container)])} 54var popstateEvent=$.Event('pjax:popstate',{state:state,direction:direction});container.trigger(popstateEvent);var options={id:state.id,url:state.url,container:containerSelector,push:!1,fragment:state.fragment,timeout:state.timeout,scrollTo:!1};if(contents){container.trigger('pjax:start',[null,options]);pjax.state=state;if(state.title){document.title=state.title} 55var beforeReplaceEvent=$.Event('pjax:beforeReplace',{state:state,previousState:previousState});container.trigger(beforeReplaceEvent,[contents,options]);container.html(contents);container.trigger('pjax:end',[null,options])}else{pjax(options)} 56container[0].offsetHeight}else{locationReplace(location.href)}} 57initialPop=!1} 58function fallbackPjax(options){var url=typeof options.url==='function'?options.url():options.url,method=options.type?options.type.toUpperCase():'GET';var form=$('<form>',{method:method==='GET'?'GET':'POST',action:url,style:'display:none'});if(method!=='GET'&&method!=='POST'){form.append($('<input>',{type:'hidden',name:'_method',value:method.toLowerCase()}))} 59var data=options.data;if(typeof data==='string'){$.each(data.split('&'),function(index,value){var pair=value.split('=');form.append($('<input>',{type:'hidden',name:pair[0],value:pair[1]}))})}else if(Array.isArray(data)){$.each(data,function(index,value){form.append($('<input>',{type:'hidden',name:value.name,value:value.value}))})}else if(typeof data==='object'){var key;for(key in data){form.append($('<input>',{type:'hidden',name:key,value:data[key]}))}} 60$(document.body).append(form);form.submit()} 61function abortXHR(xhr){if(xhr&&xhr.readyState<4){xhr.onreadystatechange=$.noop;xhr.abort()}} 62function uniqueId(){return(new Date).getTime()} 63function cloneContents(container){var cloned=container.clone();cloned.find('script').each(function(){if(!this.src){jQuery._data(this,'globalEval',!1)}});return cloned.contents()} 64function stripInternalParams(url){url.search=url.search.replace(/([?&])(_pjax|_)=[^&]*/g,'').replace(/^&/,'');return url.href.replace(/\?($|#)/,'$1')} 65function parseURL(url){var a=document.createElement('a');a.href=url;return a} 66function stripHash(location){return location.href.replace(/#.*/,'')} 67function optionsFor(container,options){if(container&&options){options=$.extend({},options);options.container=container;return options}else if($.isPlainObject(container)){return container}else{return{container:container}}
67} 68function findAll(elems,selector){return elems.filter(selector).add(elems.find(selector))} 69function parseHTML(html){return $.parseHTML(html,document,!0)} 70function extractContainer(data,xhr,options){var obj={},fullDocument=/<html/i.test(data);var serverUrl=xhr.getResponseHeader('X-PJAX-URL');obj.url=serverUrl?stripInternalParams(parseURL(serverUrl)):options.requestUrl;var $head,$body;if(fullDocument){$body=$(parseHTML(data.match(/<body[^>]*>([\s\S.]*)<\/body>/i)[0]));var head=data.match(/<head[^>]*>([\s\S.]*)<\/head>/i);$head=head!=null?$(parseHTML(head[0])):$body}else{$head=$body=$(parseHTML(data))} 71if($body.length===0){return obj} 72obj.title=findAll($head,'title').last().text();if(options.fragment){var $fragment=$body;if(options.fragment!=='body'){$fragment=findAll($fragment,options.fragment).first()} 73if($fragment.length){obj.contents=options.fragment==='body'?$fragment:$fragment.contents();if(!obj.title){obj.title=$fragment.attr('title')||$fragment.data('title')}}}else if(!fullDocument){obj.contents=$body} 74if(obj.contents){obj.contents=obj.contents.not(function(){return $(this).is('title')}
74);obj.contents.find('title').remove();obj.scripts=findAll(obj.contents,'script[src]').remove();obj.contents=obj.contents.not(obj.scripts)} 75if(obj.title){obj.title=wdTrim(obj.title)} 76return obj} 77function executeScriptTags(scripts){if(!scripts){return} 78var existingScripts=$('script[src]');scripts.each(function(){var src=this.src;var matchedScripts=existingScripts.filter(function(){return this.src===src});if(matchedScripts.length){return} 79var script=document.createElement('script');var type=$(this).attr('type');if(type){script.type=type} 80script.src=$(this).attr('src');document.head.appendChild(script)})} 81var cacheMapping={};var cacheForwardStack=[];var cacheBackStack=[];function cachePush(id,value){cacheMapping[id]=value;cacheBackStack.push(id);trimCacheStack(cacheForwardStack,0);trimCacheStack(cacheBackStack,pjax.defaults.maxCacheLength)} 82function cachePop(direction,id,value){var pushStack,popStack;cacheMapping[id]=value;if(direction==='forward'){pushStack=cacheBackStack;popStack=cacheForwardStack}else{pushStack=cacheForwardStack;popStack=cacheBackStack} 83pushStack.push(id);id=popStack.pop();if(id){delete cacheMapping[id]} 84trimCacheStack(pushStack,pjax.defaults.maxCacheLength)} 85function trimCacheStack(stack,length){while(stack.length>length){delete cacheMapping[stack.shift()]}} 86function findVersion(){return $('meta').filter(function(){var name=$(this).attr('http-equiv');return name&&name.toUpperCase()==='X-PJAX-VERSION'}).attr('content')} 87function enable(){$.fn.pjax=fnPjax;$.pjax=pjax;$.pjax.enable=$.noop;$.pjax.disable=disable;$.pjax.click=handleClick;$.pjax.submit=handleSubmit;$.pjax.reload=pjaxReload;$.pjax.defaults={timeout:650,push:!0,replace:!1,type:'GET',dataType:'html',scrollTo:0,maxCacheLength:20,version:findVersion};$(window).on('popstate.pjax',onPjaxPopstate)} 88function disable(){$.fn.pjax=function(){return this};$.pjax=fallbackPjax;$.pjax.enable=enable;$.pjax.disable=$.noop;$.pjax.click=$.noop;$.pjax.submit=$.noop;$.pjax.reload=function(){window.location.reload()};$(window).off('popstate.pjax',onPjaxPopstate)} 89if(!('state' in $.Event.prototype)){$.event.addProp('state')} 90$.support.pjax=window.history&&window.history.pushState&&window.history.replaceState&&!navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]\D|WebApps\/.+CFNetwork)/) 91if($.support.pjax){enable()}else{disable()}})(jQuery)
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.