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