Jdrewniak has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/281983

Change subject: Guaranteeing the order in which search suggestions appear.
......................................................................

Guaranteeing the order in which search suggestions appear.

Bug: T129613
Change-Id: I16574aedb9321c7e002c501ed93fd29f0b81df39
---
M dev/wikipedia.org/assets/js/wm-typeahead.js
M dev/wikipedia.org/assets/rev-manifest.json
D prod/wikipedia.org/assets/js/index-08648b79d6.js
A prod/wikipedia.org/assets/js/index-99d106478c.js
M prod/wikipedia.org/index.html
5 files changed, 85 insertions(+), 50 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/wikimedia/portals 
refs/changes/83/281983/1

diff --git a/dev/wikipedia.org/assets/js/wm-typeahead.js 
b/dev/wikipedia.org/assets/js/wm-typeahead.js
index b769373..fa8c334 100644
--- a/dev/wikipedia.org/assets/js/wm-typeahead.js
+++ b/dev/wikipedia.org/assets/js/wm-typeahead.js
@@ -57,6 +57,32 @@
        }
 
        /**
+        * Keeps track of the search query callbacks. Consists of an array of
+        * callback functions and an index that keeps track of the order of 
requests.
+        * Callbacks are deleted by replacing the callback function with a 
no-op.
+        */
+       window.callbackStack = {
+               queue: [],
+               index: -1,
+               iterateIndex: function () {
+                       this.index += 1;
+               },
+               addCallback: function ( func ) {
+                       this.iterateIndex();
+                       this.queue.push( func( this.index ) );
+               },
+               deletePrevCallbacks: function ( j ) {
+                       for ( var i = 0; i <= j; i++ ) {
+                               this.queue[ i ]  = function ( ) {};
+                       }
+               },
+               clearQueue: function () {
+                       this.queue = [];
+                       this.index = -1;
+               }
+       };
+
+       /**
         * Removes the type-ahead suggestions from the DOM.
         * Reason for timeout: The typeahead is set to clear on input blur.
         * When a user clicks on a search suggestion, they triggers the input 
blur
@@ -71,6 +97,7 @@
                        typeAheadEl.innerHTML = '';
                        var searchScript = document.getElementById( 
'api_opensearch' );
                        if ( searchScript ) { searchScript.src = false; }
+                       window.callbackStack.clearQueue();
                }, 300 );
        }
 
@@ -81,6 +108,7 @@
         * @param {string} string - query string to search.
         * @param {string} lang - ISO code of language to search in.
         */
+
        function loadQueryScript( string, lang ) {
                // variables declared in parent function.
                searchLang = encodeURIComponent( lang ) || 'en';
@@ -102,6 +130,8 @@
                script = document.createElement( 'script' );
                script.id = 'api_opensearch';
 
+               window.callbackStack.addCallback( 
window.portalOpensearchCallback ) ;
+
                var searchQuery = {
                        action: 'query',
                        format: 'json',
@@ -116,7 +146,7 @@
                        gpssearch: string,
                        gpsnamespace: 0,
                        gpslimit: 6,
-                       callback: 'portalOpensearchCallback'
+                       callback: 'window.callbackStack.queue[' + 
window.callbackStack.index + ']'
                };
 
                script.src = hostname + serialize( searchQuery );
@@ -169,12 +199,11 @@
                        /**
                         * Indentation is used to express the DOM order of 
template.
                         */
-                       var suggestionItem,
-                                       suggestionLink,
-                                               suggestionThumbnail,
-                                               suggestionText,
-                                                       suggestionTitle,
-                                                       suggestionDescription,
+                       var suggestionLink,
+                                       suggestionThumbnail,
+                                       suggestionText,
+                                               suggestionTitle,
+                                               suggestionDescription,
                                page = suggestions[ i ],
                                sanitizedThumbURL = false;
 
@@ -209,46 +238,6 @@
        } // END generateTemplateString
 
        /**
-        * Search API callback.
-        *  - parses the search results
-        *  - generates the template String
-        *  - inserts the template string into the DOM
-        *  - attaches event listeners on each suggestion item.
-        *
-        * @param {Object} xhrResults
-        */
-       window.portalOpensearchCallback = function ( xhrResults ) {
-
-               if ( document.activeElement !== searchEl ) { return; }
-
-               var orderedResults = [],
-                       suggestions = ( xhrResults.query && 
xhrResults.query.pages ) ? xhrResults.query.pages : [] ;
-
-               for ( var item in suggestions ) {
-                       var result = suggestions[ item ];
-                       orderedResults[ result.index - 1 ] = result;
-               }
-
-               orderedResults = orderedResults.filter( function ( e ) { return 
e; } );
-
-               var templateDOMString = generateTemplateString( orderedResults 
);
-
-               typeAheadEl.innerHTML = templateDOMString;
-
-               typeAheadItems = typeAheadEl.childNodes[ 0 ].childNodes;
-
-               // attaching hover events
-               for ( var i = 0; i < typeAheadItems.length; i++ ) {
-                       var listEl = typeAheadItems[ i ];
-                       // Requires the addEvent global polyfill
-                       addEvent( listEl, 'mouseenter', toggleActiveClass.bind( 
this, listEl, typeAheadItems ) );
-                       addEvent( listEl, 'mouseleave', toggleActiveClass.bind( 
this, listEl, typeAheadItems ) );
-               }
-       };
-
-       /* Mouse and keyboard Events */
-
-       /**
         * - Removes 'active' class from a collection of elements.
         * - Adds 'active' class to an item if missing.
         * - Removes 'active' class from item if present.
@@ -280,6 +269,52 @@
        }
 
        /**
+        * Search API callback. Returns a closure that holds the index of the 
request.
+        * Deletes previous callbacks based on this index. This prevents 
callbacks for old
+        * requests from executing. Then:
+        *  - parses the search results
+        *  - generates the template String
+        *  - inserts the template string into the DOM
+        *  - attaches event listeners on each suggestion item.
+        *
+        * @param {Object} xhrResults
+        */
+       window.portalOpensearchCallback = function ( i ) {
+
+               var callbackIndex = i;
+
+               return function ( xhrResults ) {
+                       if ( document.activeElement !== searchEl ) {
+                               return;
+                       }
+
+                       window.callbackStack.deletePrevCallbacks( callbackIndex 
);
+
+                       var orderedResults = [],
+                               suggestions = ( xhrResults.query && 
xhrResults.query.pages ) ? xhrResults.query.pages : [];
+
+                       for ( var item in suggestions ) {
+                               var result = suggestions[ item ];
+                               orderedResults[ result.index - 1 ] = result;
+                       }
+
+                       var templateDOMString = generateTemplateString( 
orderedResults );
+
+                       typeAheadEl.innerHTML = templateDOMString;
+
+                       typeAheadItems = typeAheadEl.childNodes[ 0 ].childNodes;
+
+                       // attaching hover events
+                       for ( var i = 0; i < typeAheadItems.length; i++ ) {
+                               var listEl = typeAheadItems[ i ];
+                               // Requires the addEvent global polyfill
+                               addEvent( listEl, 'mouseenter', 
toggleActiveClass.bind( this, listEl, typeAheadItems ) );
+                               addEvent( listEl, 'mouseleave', 
toggleActiveClass.bind( this, listEl, typeAheadItems ) );
+                       }
+               };
+       };
+
+       /**
         * Increments a global 'keyboardIndex' variable
         *
         * @param {int} i - current index
diff --git a/dev/wikipedia.org/assets/rev-manifest.json 
b/dev/wikipedia.org/assets/rev-manifest.json
index 104fee6..fd846d7 100644
--- a/dev/wikipedia.org/assets/rev-manifest.json
+++ b/dev/wikipedia.org/assets/rev-manifest.json
@@ -1,5 +1,5 @@
 {
   "portal/wikipedia.org/assets/js/abtesting.js": 
"portal/wikipedia.org/assets/js/abtesting-1d13752bce.js",
   "portal/wikipedia.org/assets/js/gt-ie9.js": 
"portal/wikipedia.org/assets/js/gt-ie9-c84bf66d33.js",
-  "portal/wikipedia.org/assets/js/index.js": 
"portal/wikipedia.org/assets/js/index-08648b79d6.js"
+  "portal/wikipedia.org/assets/js/index.js": 
"portal/wikipedia.org/assets/js/index-99d106478c.js"
 }
\ No newline at end of file
diff --git a/prod/wikipedia.org/assets/js/index-08648b79d6.js 
b/prod/wikipedia.org/assets/js/index-08648b79d6.js
deleted file mode 100644
index 2390198..0000000
--- a/prod/wikipedia.org/assets/js/index-08648b79d6.js
+++ /dev/null
@@ -1 +0,0 @@
-function localizeTopTen(){function e(e){for(var t=[],n=0;n<e.length;n++){var 
a=e[n].getAttribute("lang");t.push(a)}return t}function 
t(){for(o=0;o<l.length;o++){var 
e=l[o],t=d.indexOf(e),n=t>=0,a=t===o;n?a||d.splice(o,0,d.splice(t,1)[0]):(d.splice(o,0,e),d.pop())}}function
 n(e,t){var n=wmStats[t];if(n){var 
a=e.getElementsByTagName("a")[0],r=n.name.replace(/<\/?[^>]+(>|$)/g,"");a.setAttribute("href","//"+n.url),a.setAttribute("title",r+"
 — "+n.siteName+" — 
"+(n.slogan||"")),e.setAttribute("lang",t),e.getElementsByTagName("strong")[0].textContent=r,e.getElementsByTagName("em")[0].textContent=n.slogan||"",e.getElementsByTagName("small")[0].textContent=n.numPages+"+
 "+(n.articles||"")}}function a(){for(o=0;o<d.length;o++){var 
e=document.querySelectorAll(".central-featured-lang"),t=d[o],a=document.querySelector(".central-featured-lang[lang="+t+"]");if(a){var
 r=Array.prototype.indexOf.call(e,a);r!==o&&c.insertBefore(a,e[o])}else{var 
i=e[e.length-1];n(i,t),c.insertBefore(i,e[o])}}}function 
r(){for(s=document.querySelectorAll(".central-featured-lang"),o=0;o<s.length;o++){var
 e=s[o],t=e.className,n="central-featured-lang 
lang"+(o+1);t!==n&&(e.className=n)}}function i(){var 
e=document.createElement("strong"),t=wmStats[l[0]].slogan||"The free 
encyclopedia";e.textContent=t,e.className="localized-slogan",u.appendChild(e)}var
 
o,l=wmTest.userLangs,s=document.querySelectorAll(".central-featured-lang"),c=document.querySelector(".central-featured"),u=document.querySelector(".central-textlogo"),d=e(s);t(),a(),i(),r(),c.style.visibility="visible"}"language-detection-b"===wmTest.group&&localizeTopTen();var
 _=_||{};_.now=Date.now||function(){return(new 
Date).getTime()},_.throttle=function(e,t,n){var a,r,i,o=null,l=0;n||(n={});var 
s=function(){l=n.leading===!1?0:_.now(),o=null,i=e.apply(a,r),o||(a=r=null)};return
 function(){var c=_.now();l||n.leading!==!1||(l=c);var u=t-(c-l);return 
a=this,r=arguments,0>=u||u>t?(o&&(clearTimeout(o),o=null),l=c,i=e.apply(a,r),o||(a=r=null)):o||n.trailing===!1||(o=setTimeout(s,u)),i}},_.debounce=function(e,t,n){var
 a,r,i,o,l,s=function(){var 
c=_.now()-o;t>c&&c>=0?a=setTimeout(s,t-c):(a=null,n||(l=e.apply(i,r),a||(i=r=null)))};return
 function(){i=this,r=arguments,o=_.now();var c=n&&!a;return 
a||(a=setTimeout(s,t)),c&&(l=e.apply(i,r),i=r=null),l}};var 
WMTypeAhead=function(e,t){function n(e){var t=[];for(var n in 
e)e.hasOwnProperty(n)&&t.push(n+"="+encodeURIComponent(e[n]));return 
t.join("&")}function a(){setTimeout(function(){p.innerHTML="";var 
e=document.getElementById("api_opensearch");e&&(e.src=!1)},300)}function 
r(e,t){if(u=encodeURIComponent(t)||"en",d=encodeURIComponent(e),0===d.length)return
 void a();var 
r=document.getElementById("api_opensearch"),i=document.getElementsByTagName("head")[0],o="//"+u+".wikipedia.org/w/api.php?";r&&i.removeChild(r),r=document.createElement("script"),r.id="api_opensearch";var
 
l={action:"query",format:"json",generator:"prefixsearch",prop:"pageprops|pageimages|pageterms",redirects:"",ppprop:"displaytitle",piprop:"thumbnail",pithumbsize:y,pilimit:6,wbptterms:"description",gpssearch:e,gpsnamespace:0,gpslimit:6,callback:"portalOpensearchCallback"};r.src=o+n(l),i.appendChild(r)}function
 i(e,t){var n=mw.html.escape(mw.RegExp.escape(t)),a=new 
RegExp(n,"i"),r=e.search(a),i=mw.html.escape(e);if(r>=0){var 
o=r+n.length,l=e.substring(r,o),s=e.substring(0,r),c=e.substring(o,e.length);i=s+mw.html.element("em",{"class":"suggestion-highlight"},l)+c}return
 i}function o(e){for(var t='<div 
class="suggestions-dropdown">',n=0;n<e.length;n++)if(e[n]){var 
a,r,o,l,s,c=e[n],g=!1;c.thumbnail&&c.thumbnail.source&&(g=c.thumbnail.source.replace(/\"/g,"%22"),g=g.replace(/'/g,"%27")),s=mw.html.element("p",{"class":"suggestion-description"},c.terms&&c.terms.description?c.terms.description.toString():""),l=mw.html.element("h3",{"class":"suggestion-title"},new
 
mw.html.Raw(i(c.title,d))),o=mw.html.element("div",{"class":"suggestion-text"},new
 
mw.html.Raw(l+s)),r=mw.html.element("div",{"class":"suggestion-thumbnail",style:g?"background-image:url("+g+")":!1},""),a=mw.html.element("a",{"class":"suggestion-link",href:"https://"+u+".wikipedia.org/wiki/"+encodeURIComponent(c.title.replace(/
 /gi,"_"))},new mw.html.Raw(o+r)),t+=a}return t+="</div>"}function 
l(e,t){for(var n=" active",a=0;a<t.length;a++){var 
r=t[a];r!==e?r.className=r.className.replace(n,""):/ 
active/.test(e.className)?e.className=e.className.replace(n,""):e.className+=n}}function
 s(e,t){w+=e,0>w&&(w=t-1),w>t-1&&(w=0)}function c(e){var 
t=e||window.event,n=t.which||t.keyCode;if(p.firstChild){if(40===n||38===n){var 
a=p.firstChild.childNodes,r=a.length;40===n?s(1,r):s(-1,r),m=p.firstChild?p.firstChild.childNodes[w]:!1,l(m,a)}13===n&&m&&(t.preventDefault?t.preventDefault():t.returnValue=!1,m.children[0].click())}}var
 
u,d,g,m,h="typeahead-suggestions",p=document.getElementById(h),f=document.getElementById(e),v=document.getElementById(t),w=-1,y=80*getDevicePixelRatio();return
 
p||(p=document.createElement("div"),p.id=h,f.appendChild(p)),window.portalOpensearchCallback=function(e){if(document.activeElement===v){var
 t=[],n=e.query&&e.query.pages?e.query.pages:[];for(var a in n){var 
r=n[a];t[r.index-1]=r}t=t.filter(function(e){return e});var 
i=o(t);p.innerHTML=i,g=p.childNodes[0].childNodes;for(var 
s=0;s<g.length;s++){var 
c=g[s];addEvent(c,"mouseenter",l.bind(this,c,g)),addEvent(c,"mouseleave",l.bind(this,c,g))}}},addEvent(v,"keydown",c),addEvent(v,"blur",a),{typeAheadEl:p,query:r}};!function(e,t){"use
 strict";function n(e,t){var n,a,r={};for(n=0;n<t.length;n++){var 
i=t[n].nodes;for(a=0;a<i.length;a++)i[a].contains(e)&&(r=t[n])}return 
r.name}function 
a(e){return"A"!==e.tagName&&e.parentElement?a(e.parentElement):e}function 
r(){u={event_type:"landing"},e.logEvent(l,u),u=null}function i(t){var 
r,i=t||window.event,o=i.target||i.srcElement;o.matches("a, a 
*")&&(r=a(o),u={event_type:"clickthrough",destination:r.href,section_used:n(r,s)},u.section_used&&e.logEvent(l,u))}function
 o(t){var 
a=t||window.event,r=a.target||a.srcElement;null===u&&(u={event_type:"clickthrough",section_used:n(r,s),destination:r.action}),u.section_used&&e.logEvent(l,u)}var
 
l,s,c,u,d=document.cookie.match(/GeoIP=.[^:]/);if("rejected"!==t.group&&!t.loggingDisabled){l={name:"WikipediaPortal",revision:14377354,defaults:{session_id:t.sessionId,event_type:"landing",referer:document.referrer||null,accept_language:t.userLangs.toString(),cohort:t.group},properties:{session_id:{type:"string",required:!0},event_type:{type:"string",required:!0,"enum":["landing","clickthrough"]},section_used:{type:"string",required:!1,"enum":["primary
 links","search","language search","secondary links","other languages","other 
projects"]},destination:{type:"string",required:!1},referer:{type:"string",required:!1},country:{type:"string",required:!1},accept_language:{type:"string",required:!0},cohort:{type:"string",required:!1}}},s=[{name:"primary
 links",nodes:document.querySelectorAll('[data-el-section="primary 
links"]')},{name:"search",nodes:document.querySelectorAll('[data-el-section="search"]')},{name:"language
 search",nodes:document.querySelectorAll('[data-el-section="language 
search"]')},{name:"secondary 
links",nodes:document.querySelectorAll('[data-el-section="secondary 
links"]')},{name:"other 
languages",nodes:document.querySelectorAll('[data-el-section="other 
languages"]')},{name:"other 
projects",nodes:document.querySelectorAll('[data-el-section="other 
projects"]')}],addEvent(document,"click",i),c=document.getElementsByTagName("form");for(var
 
g=0;g<c.length;g++)addEvent(c[g],"submit",o);d&&(l.defaults.country=d.toString().split("=")[1],addEvent(window,"load",r)),addEvent(window,"load",r)}}(eventLoggingLite,wmTest),function(){"use
 strict";function e(e){return document.getElementById(e)}function t(e){var 
t,n;document.querySelector&&"www-wiktionary-org"===document.body.id&&!e.match(/\W/)&&(t=document.querySelector('option[lang|="'+e+'"]'),n=t&&t.getAttribute("data-logo"),n&&document.body.setAttribute("data-logo",n))}function
 n(){var 
e=navigator.languages&&navigator.languages[0]||navigator.language||navigator.userLanguage||"";return
 e.toLowerCase().split("-")[0]}function a(){var 
e=document.cookie.match(/(?:^|\W)searchLang=([^;]+)/);return(e?e[1]:n()).toLowerCase()}function
 
r(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(t))}function
 i(t){var 
n,a,i="data-convert-hans",o="data-converttitle-hans";if(-1!=="zh-hans,zh-cn,zh-sg,zh-my,".indexOf(t+",")){var
 
l=["zh_art","zh_others","zh_search","zh_tag","zh_top10","zh-yue_wiki","gan_wiki","hak_wiki","wuu_wiki"];for(n=0;n<l.length;n+=1)a=e(l[n]),a&&(a.hasAttribute(i)&&r(a,a.getAttribute(i)),a.hasAttribute(o)&&(a.title=a.getAttribute(o)))}}function
 o(t){var 
n;0===t.indexOf("zh")&&(n=t.substring(3),"mo"===n?n="hk":"my"===n&&(n="sg"),n&&"cn,tw,hk,sg,".indexOf(n+",")>=0&&(e("zh_wiki").href+="zh-"+n+"/",e("zh_others").href=e("zh_others").href.replace("wiki/","zh-"+n+"/")),i(t))}function
 l(){if(void 0!==window.HTMLDataListElement){var 
t=document.createElement("datalist"),n=e("searchInput");t.id="suggestions",document.body.appendChild(t),n.autocomplete="off",n.setAttribute("list","suggestions"),addEvent(n,"input",_.debounce(function(){var
 
t,a=document.getElementsByTagName("head")[0],r=e("searchLanguage").value,i=e("api_opensearch"),o=encodeURIComponent(n.value);t=r+".wikipedia.org",i&&a.removeChild(i),i=document.createElement("script"),i.id="api_opensearch",i.src="//"+encodeURIComponent(t)+"/w/api.php?action=opensearch&limit=10&format=json&callback=portalOpensearchCallback&search="+o,a.appendChild(i)},200))}}function
 s(e){if(e){var a=n(),r=a.match(/^\w+/),i=new 
Date;t(e),r&&r[0]===e?i.setTime(i.getTime()-1):i.setFullYear(i.getFullYear()+1),document.cookie="searchLang="+e+";expires="+i.toUTCString()+";domain="+location.host+";"}}function
 c(e,t){var n,a,r,i,o={ratio:1};for(n=t.split(/ *, 
*/),r=0;r<n.length;r++)a=n[r].match(/\s*(\S+)(?:\s*([\d.]+)w)?(?:\s*([\d.]+)h)?(?:\s*([\d.]+)x)?\s*/),i=a[4]&&parseFloat(a[4]),e>=i&&i>o.ratio&&(o.ratio=i,o.src=a[1],o.width=a[2]&&parseFloat(a[2]),o.height=a[3]&&parseFloat(a[3]));return
 o}function u(){var e,t,n=getDevicePixelRatio(),a=new Image;if(n>1&&void 
0===a.srcset)for(e=document.getElementsByTagName("img"),t=0;t<e.length;t++){var 
r,i=e[t],o=i.getAttribute("srcset");"string"==typeof o&&""!==o&&(r=c(n,o),void 
0!==r.src&&(i.setAttribute("src",r.src),void 
0!==r.width&&i.setAttribute("width",r.width),void 
0!==r.height&&i.setAttribute("height",r.height)))}}doWhenReady(function(){var 
n,i,l,s,c,u,d,g,m,h=a();if(h&&(o(h),n=getIso639(h),i=e("searchLanguage"))){for(l=i.getElementsByTagName("option"),s=0,c=l.length;!u&&c>s;s+=1)l[s].value===n&&(u=n);!u&&document.querySelector&&(d=document.querySelector('.langlist
 
a[lang|="'+n+'"]'),d&&(u=n,g=document.createElement("option"),g.setAttribute("lang",n),g.setAttribute("value",n),m=d.textContent||d.innerText||n,r(g,m),i.appendChild(g))),u&&(i.value=u,t(u))}}),window.wmSuggestionsEL=null,window.portalOpensearchCallback=_.debounce(function(t){var
 
n,a=window.wmSuggestionsEL||e("suggestions"),r=a.children,i=document.createDocumentFragment();for(n=0;n<t[1].length;n+=1){var
 
o=r[n]||document.createElement("option");o.value=t[1][n],r[n]||i.appendChild(o)}a.appendChild(i.cloneNode(!0))},100),doWhenReady(function(){var
 
t,n,a,r=e("searchInput"),i=e("searchLanguage");if(r)for(r.setAttribute("results","10"),l(),void
 
0===r.autofocus?r.focus():window.scroll(0,0),t=location.search&&location.search.substr(1).split("&"),n=0;n<t.length;n+=1)if(a=t[n].split("="),"search"===a[0]&&a[1]){r.value=decodeURIComponent(a[1].replace(/\+/g,"
 
"));break}addEvent(i,"change",function(){i.blur(),s(i.value)})}),doWhenReady(function(){var
 
e=document.searchwiki&&document.searchwiki.elements.uselang;e&&(e.value=n())}),doWhenReady(u)}(),window.mw||(window.mw=window.mediaWiki={loader:{state:function(){}}}),function(e,t){doWhenReady(function(){var
 
e,n=document.getElementById("searchInput"),a=n.cloneNode(!0);n.parentNode.replaceChild(a,n),a.focus();var
 r=new t("search-input","searchInput");e="oninput"in 
document?"input":"propertychange",addEvent(a,e,_.debounce(function(){r.query(a.value,document.getElementById("searchLanguage").value)},100))})}(wmTest,WMTypeAhead);
\ No newline at end of file
diff --git a/prod/wikipedia.org/assets/js/index-99d106478c.js 
b/prod/wikipedia.org/assets/js/index-99d106478c.js
new file mode 100644
index 0000000..b554070
--- /dev/null
+++ b/prod/wikipedia.org/assets/js/index-99d106478c.js
@@ -0,0 +1 @@
+function localizeTopTen(){function e(e){for(var t=[],n=0;n<e.length;n++){var 
a=e[n].getAttribute("lang");t.push(a)}return t}function 
t(){for(o=0;o<l.length;o++){var 
e=l[o],t=d.indexOf(e),n=t>=0,a=t===o;n?a||d.splice(o,0,d.splice(t,1)[0]):(d.splice(o,0,e),d.pop())}}function
 n(e,t){var n=wmStats[t];if(n){var 
a=e.getElementsByTagName("a")[0],r=n.name.replace(/<\/?[^>]+(>|$)/g,"");a.setAttribute("href","//"+n.url),a.setAttribute("title",r+"
 — "+n.siteName+" — 
"+(n.slogan||"")),e.setAttribute("lang",t),e.getElementsByTagName("strong")[0].textContent=r,e.getElementsByTagName("em")[0].textContent=n.slogan||"",e.getElementsByTagName("small")[0].textContent=n.numPages+"+
 "+(n.articles||"")}}function a(){for(o=0;o<d.length;o++){var 
e=document.querySelectorAll(".central-featured-lang"),t=d[o],a=document.querySelector(".central-featured-lang[lang="+t+"]");if(a){var
 r=Array.prototype.indexOf.call(e,a);r!==o&&s.insertBefore(a,e[o])}else{var 
i=e[e.length-1];n(i,t),s.insertBefore(i,e[o])}}}function 
r(){for(c=document.querySelectorAll(".central-featured-lang"),o=0;o<c.length;o++){var
 e=c[o],t=e.className,n="central-featured-lang 
lang"+(o+1);t!==n&&(e.className=n)}}function i(){var 
e=document.createElement("strong"),t=wmStats[l[0]].slogan||"The free 
encyclopedia";e.textContent=t,e.className="localized-slogan",u.appendChild(e)}var
 
o,l=wmTest.userLangs,c=document.querySelectorAll(".central-featured-lang"),s=document.querySelector(".central-featured"),u=document.querySelector(".central-textlogo"),d=e(c);t(),a(),i(),r(),s.style.visibility="visible"}"language-detection-b"===wmTest.group&&localizeTopTen();var
 _=_||{};_.now=Date.now||function(){return(new 
Date).getTime()},_.throttle=function(e,t,n){var a,r,i,o=null,l=0;n||(n={});var 
c=function(){l=n.leading===!1?0:_.now(),o=null,i=e.apply(a,r),o||(a=r=null)};return
 function(){var s=_.now();l||n.leading!==!1||(l=s);var u=t-(s-l);return 
a=this,r=arguments,0>=u||u>t?(o&&(clearTimeout(o),o=null),l=s,i=e.apply(a,r),o||(a=r=null)):o||n.trailing===!1||(o=setTimeout(c,u)),i}},_.debounce=function(e,t,n){var
 a,r,i,o,l,c=function(){var 
s=_.now()-o;t>s&&s>=0?a=setTimeout(c,t-s):(a=null,n||(l=e.apply(i,r),a||(i=r=null)))};return
 function(){i=this,r=arguments,o=_.now();var s=n&&!a;return 
a||(a=setTimeout(c,t)),s&&(l=e.apply(i,r),i=r=null),l}};var 
WMTypeAhead=function(e,t){function n(e){var t=[];for(var n in 
e)e.hasOwnProperty(n)&&t.push(n+"="+encodeURIComponent(e[n]));return 
t.join("&")}function a(){setTimeout(function(){p.innerHTML="";var 
e=document.getElementById("api_opensearch");e&&(e.src=!1),window.callbackStack.clearQueue()},300)}function
 
r(e,t){if(u=encodeURIComponent(t)||"en",d=encodeURIComponent(e),0===d.length)return
 void a();var 
r=document.getElementById("api_opensearch"),i=document.getElementsByTagName("head")[0],o="//"+u+".wikipedia.org/w/api.php?";r&&i.removeChild(r),r=document.createElement("script"),r.id="api_opensearch",window.callbackStack.addCallback(window.portalOpensearchCallback);var
 
l={action:"query",format:"json",generator:"prefixsearch",prop:"pageprops|pageimages|pageterms",redirects:"",ppprop:"displaytitle",piprop:"thumbnail",pithumbsize:y,pilimit:6,wbptterms:"description",gpssearch:e,gpsnamespace:0,gpslimit:6,callback:"window.callbackStack.queue["+window.callbackStack.index+"]"};r.src=o+n(l),i.appendChild(r)}function
 i(e,t){var n=mw.html.escape(mw.RegExp.escape(t)),a=new 
RegExp(n,"i"),r=e.search(a),i=mw.html.escape(e);if(r>=0){var 
o=r+n.length,l=e.substring(r,o),c=e.substring(0,r),s=e.substring(o,e.length);i=c+mw.html.element("em",{"class":"suggestion-highlight"},l)+s}return
 i}function o(e){for(var t='<div 
class="suggestions-dropdown">',n=0;n<e.length;n++)if(e[n]){var 
a,r,o,l,c,s=e[n],g=!1;s.thumbnail&&s.thumbnail.source&&(g=s.thumbnail.source.replace(/\"/g,"%22"),g=g.replace(/'/g,"%27")),c=mw.html.element("p",{"class":"suggestion-description"},s.terms&&s.terms.description?s.terms.description.toString():""),l=mw.html.element("h3",{"class":"suggestion-title"},new
 
mw.html.Raw(i(s.title,d))),o=mw.html.element("div",{"class":"suggestion-text"},new
 
mw.html.Raw(l+c)),r=mw.html.element("div",{"class":"suggestion-thumbnail",style:g?"background-image:url("+g+")":!1},""),a=mw.html.element("a",{"class":"suggestion-link",href:"https://"+u+".wikipedia.org/wiki/"+encodeURIComponent(s.title.replace(/
 /gi,"_"))},new mw.html.Raw(o+r)),t+=a}return t+="</div>"}function 
l(e,t){for(var n=" active",a=0;a<t.length;a++){var 
r=t[a];r!==e?r.className=r.className.replace(n,""):/ 
active/.test(e.className)?e.className=e.className.replace(n,""):e.className+=n}}function
 c(e,t){w+=e,0>w&&(w=t-1),w>t-1&&(w=0)}function s(e){var 
t=e||window.event,n=t.which||t.keyCode;if(p.firstChild){if(40===n||38===n){var 
a=p.firstChild.childNodes,r=a.length;40===n?c(1,r):c(-1,r),m=p.firstChild?p.firstChild.childNodes[w]:!1,l(m,a)}13===n&&m&&(t.preventDefault?t.preventDefault():t.returnValue=!1,m.children[0].click())}}var
 
u,d,g,m,h="typeahead-suggestions",p=document.getElementById(h),f=document.getElementById(e),v=document.getElementById(t),w=-1,y=80*getDevicePixelRatio();return
 
p||(p=document.createElement("div"),p.id=h,f.appendChild(p)),window.callbackStack={queue:[],index:-1,iterateIndex:function(){this.index+=1},addCallback:function(e){this.iterateIndex(),this.queue.push(e(this.index))},deletePrevCallbacks:function(e){for(var
 
t=0;e>=t;t++)this.queue[t]=function(){}},clearQueue:function(){this.queue=[],this.index=-1}},window.portalOpensearchCallback=function(e){var
 t=e;return 
function(e){if(document.activeElement===v){window.callbackStack.deletePrevCallbacks(t);var
 n=[],a=e.query&&e.query.pages?e.query.pages:[];for(var r in a){var 
i=a[r];n[i.index-1]=i}var 
c=o(n);p.innerHTML=c,g=p.childNodes[0].childNodes;for(var 
s=0;s<g.length;s++){var 
u=g[s];addEvent(u,"mouseenter",l.bind(this,u,g)),addEvent(u,"mouseleave",l.bind(this,u,g))}}}},addEvent(v,"keydown",s),addEvent(v,"blur",a),{typeAheadEl:p,query:r}};!function(e,t){"use
 strict";function n(e,t){var n,a,r={};for(n=0;n<t.length;n++){var 
i=t[n].nodes;for(a=0;a<i.length;a++)i[a].contains(e)&&(r=t[n])}return 
r.name}function 
a(e){return"A"!==e.tagName&&e.parentElement?a(e.parentElement):e}function 
r(){u={event_type:"landing"},e.logEvent(l,u),u=null}function i(t){var 
r,i=t||window.event,o=i.target||i.srcElement;o.matches("a, a 
*")&&(r=a(o),u={event_type:"clickthrough",destination:r.href,section_used:n(r,c)},u.section_used&&e.logEvent(l,u))}function
 o(t){var 
a=t||window.event,r=a.target||a.srcElement;null===u&&(u={event_type:"clickthrough",section_used:n(r,c),destination:r.action}),u.section_used&&e.logEvent(l,u)}var
 
l,c,s,u,d=document.cookie.match(/GeoIP=.[^:]/);if("rejected"!==t.group&&!t.loggingDisabled){l={name:"WikipediaPortal",revision:14377354,defaults:{session_id:t.sessionId,event_type:"landing",referer:document.referrer||null,accept_language:t.userLangs.toString(),cohort:t.group},properties:{session_id:{type:"string",required:!0},event_type:{type:"string",required:!0,"enum":["landing","clickthrough"]},section_used:{type:"string",required:!1,"enum":["primary
 links","search","language search","secondary links","other languages","other 
projects"]},destination:{type:"string",required:!1},referer:{type:"string",required:!1},country:{type:"string",required:!1},accept_language:{type:"string",required:!0},cohort:{type:"string",required:!1}}},c=[{name:"primary
 links",nodes:document.querySelectorAll('[data-el-section="primary 
links"]')},{name:"search",nodes:document.querySelectorAll('[data-el-section="search"]')},{name:"language
 search",nodes:document.querySelectorAll('[data-el-section="language 
search"]')},{name:"secondary 
links",nodes:document.querySelectorAll('[data-el-section="secondary 
links"]')},{name:"other 
languages",nodes:document.querySelectorAll('[data-el-section="other 
languages"]')},{name:"other 
projects",nodes:document.querySelectorAll('[data-el-section="other 
projects"]')}],addEvent(document,"click",i),s=document.getElementsByTagName("form");for(var
 
g=0;g<s.length;g++)addEvent(s[g],"submit",o);d&&(l.defaults.country=d.toString().split("=")[1],addEvent(window,"load",r)),addEvent(window,"load",r)}}(eventLoggingLite,wmTest),function(){"use
 strict";function e(e){return document.getElementById(e)}function t(e){var 
t,n;document.querySelector&&"www-wiktionary-org"===document.body.id&&!e.match(/\W/)&&(t=document.querySelector('option[lang|="'+e+'"]'),n=t&&t.getAttribute("data-logo"),n&&document.body.setAttribute("data-logo",n))}function
 n(){var 
e=navigator.languages&&navigator.languages[0]||navigator.language||navigator.userLanguage||"";return
 e.toLowerCase().split("-")[0]}function a(){var 
e=document.cookie.match(/(?:^|\W)searchLang=([^;]+)/);return(e?e[1]:n()).toLowerCase()}function
 
r(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(t))}function
 i(t){var 
n,a,i="data-convert-hans",o="data-converttitle-hans";if(-1!=="zh-hans,zh-cn,zh-sg,zh-my,".indexOf(t+",")){var
 
l=["zh_art","zh_others","zh_search","zh_tag","zh_top10","zh-yue_wiki","gan_wiki","hak_wiki","wuu_wiki"];for(n=0;n<l.length;n+=1)a=e(l[n]),a&&(a.hasAttribute(i)&&r(a,a.getAttribute(i)),a.hasAttribute(o)&&(a.title=a.getAttribute(o)))}}function
 o(t){var 
n;0===t.indexOf("zh")&&(n=t.substring(3),"mo"===n?n="hk":"my"===n&&(n="sg"),n&&"cn,tw,hk,sg,".indexOf(n+",")>=0&&(e("zh_wiki").href+="zh-"+n+"/",e("zh_others").href=e("zh_others").href.replace("wiki/","zh-"+n+"/")),i(t))}function
 l(){if(void 0!==window.HTMLDataListElement){var 
t=document.createElement("datalist"),n=e("searchInput");t.id="suggestions",document.body.appendChild(t),n.autocomplete="off",n.setAttribute("list","suggestions"),addEvent(n,"input",_.debounce(function(){var
 
t,a=document.getElementsByTagName("head")[0],r=e("searchLanguage").value,i=e("api_opensearch"),o=encodeURIComponent(n.value);t=r+".wikipedia.org",i&&a.removeChild(i),i=document.createElement("script"),i.id="api_opensearch",i.src="//"+encodeURIComponent(t)+"/w/api.php?action=opensearch&limit=10&format=json&callback=portalOpensearchCallback&search="+o,a.appendChild(i)},200))}}function
 c(e){if(e){var a=n(),r=a.match(/^\w+/),i=new 
Date;t(e),r&&r[0]===e?i.setTime(i.getTime()-1):i.setFullYear(i.getFullYear()+1),document.cookie="searchLang="+e+";expires="+i.toUTCString()+";domain="+location.host+";"}}function
 s(e,t){var n,a,r,i,o={ratio:1};for(n=t.split(/ *, 
*/),r=0;r<n.length;r++)a=n[r].match(/\s*(\S+)(?:\s*([\d.]+)w)?(?:\s*([\d.]+)h)?(?:\s*([\d.]+)x)?\s*/),i=a[4]&&parseFloat(a[4]),e>=i&&i>o.ratio&&(o.ratio=i,o.src=a[1],o.width=a[2]&&parseFloat(a[2]),o.height=a[3]&&parseFloat(a[3]));return
 o}function u(){var e,t,n=getDevicePixelRatio(),a=new Image;if(n>1&&void 
0===a.srcset)for(e=document.getElementsByTagName("img"),t=0;t<e.length;t++){var 
r,i=e[t],o=i.getAttribute("srcset");"string"==typeof o&&""!==o&&(r=s(n,o),void 
0!==r.src&&(i.setAttribute("src",r.src),void 
0!==r.width&&i.setAttribute("width",r.width),void 
0!==r.height&&i.setAttribute("height",r.height)))}}doWhenReady(function(){var 
n,i,l,c,s,u,d,g,m,h=a();if(h&&(o(h),n=getIso639(h),i=e("searchLanguage"))){for(l=i.getElementsByTagName("option"),c=0,s=l.length;!u&&s>c;c+=1)l[c].value===n&&(u=n);!u&&document.querySelector&&(d=document.querySelector('.langlist
 
a[lang|="'+n+'"]'),d&&(u=n,g=document.createElement("option"),g.setAttribute("lang",n),g.setAttribute("value",n),m=d.textContent||d.innerText||n,r(g,m),i.appendChild(g))),u&&(i.value=u,t(u))}}),window.wmSuggestionsEL=null,window.portalOpensearchCallback=_.debounce(function(t){var
 
n,a=window.wmSuggestionsEL||e("suggestions"),r=a.children,i=document.createDocumentFragment();for(n=0;n<t[1].length;n+=1){var
 
o=r[n]||document.createElement("option");o.value=t[1][n],r[n]||i.appendChild(o)}a.appendChild(i.cloneNode(!0))},100),doWhenReady(function(){var
 
t,n,a,r=e("searchInput"),i=e("searchLanguage");if(r)for(r.setAttribute("results","10"),l(),void
 
0===r.autofocus?r.focus():window.scroll(0,0),t=location.search&&location.search.substr(1).split("&"),n=0;n<t.length;n+=1)if(a=t[n].split("="),"search"===a[0]&&a[1]){r.value=decodeURIComponent(a[1].replace(/\+/g,"
 
"));break}addEvent(i,"change",function(){i.blur(),c(i.value)})}),doWhenReady(function(){var
 
e=document.searchwiki&&document.searchwiki.elements.uselang;e&&(e.value=n())}),doWhenReady(u)}(),window.mw||(window.mw=window.mediaWiki={loader:{state:function(){}}}),function(e,t){doWhenReady(function(){var
 
e,n=document.getElementById("searchInput"),a=n.cloneNode(!0);n.parentNode.replaceChild(a,n),a.focus();var
 r=new t("search-input","searchInput");e="oninput"in 
document?"input":"propertychange",addEvent(a,e,_.debounce(function(){r.query(a.value,document.getElementById("searchLanguage").value)},100))})}(wmTest,WMTypeAhead);
\ No newline at end of file
diff --git a/prod/wikipedia.org/index.html b/prod/wikipedia.org/index.html
index 4f0e120..162f59a 100644
--- a/prod/wikipedia.org/index.html
+++ b/prod/wikipedia.org/index.html
@@ -648,7 +648,7 @@
 </div>
 <div style="text-align:center"><a 
href="//wikimediafoundation.org/wiki/Terms_of_Use">Terms of Use</a> | <a 
href="//wikimediafoundation.org/wiki/Privacy_policy">Privacy Policy</a></div>
 <![if gt IE 7]>
-<script src="portal/wikipedia.org/assets/js/index-08648b79d6.js"></script>
+<script src="portal/wikipedia.org/assets/js/index-99d106478c.js"></script>
 <![endif]>
 <![if gt IE 9]>
 <script src="portal/wikipedia.org/assets/js/gt-ie9-c84bf66d33.js"></script>

-- 
To view, visit https://gerrit.wikimedia.org/r/281983
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I16574aedb9321c7e002c501ed93fd29f0b81df39
Gerrit-PatchSet: 1
Gerrit-Project: wikimedia/portals
Gerrit-Branch: master
Gerrit-Owner: Jdrewniak <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to