Petar.petkovic has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/372846 )

Change subject: Support langlinkscount API
......................................................................

Support langlinkscount API

Add support for new langlinkscount API to mw.widgets
langlinkscount API was introduced in I8fffe5b2

Enable TitleOptionWidget to display number of languages article exists in
Enable TitleOptionWidget to display if article is missing in target language

Bug: T111094
Change-Id: I0c806d104ae43044104279a788abbd7231f76d8c
---
M languages/i18n/en.json
M languages/i18n/qqq.json
M resources/Resources.php
M resources/src/mediawiki.widgets/mw.widgets.TitleOptionWidget.js
M resources/src/mediawiki.widgets/mw.widgets.TitleWidget.js
M resources/src/mediawiki.widgets/mw.widgets.TitleWidget.less
6 files changed, 61 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/46/372846/1

diff --git a/languages/i18n/en.json b/languages/i18n/en.json
index 6126bbd..7d6dd0ff 100644
--- a/languages/i18n/en.json
+++ b/languages/i18n/en.json
@@ -4218,6 +4218,7 @@
        "mw-widgets-mediasearch-noresults": "No results found.",
        "mw-widgets-titleinput-description-new-page": "page does not exist yet",
        "mw-widgets-titleinput-description-redirect": "redirect to $1",
+       "mw-widgets-titleinput-missing-in-target-language": "Missing in $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Add a 
category...",
        "mw-widgets-usersmultiselect-placeholder": "Add more...",
        "date-range-from": "From date:",
diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json
index bc0fe2c..464f889 100644
--- a/languages/i18n/qqq.json
+++ b/languages/i18n/qqq.json
@@ -4408,6 +4408,7 @@
        "mw-widgets-mediasearch-noresults": "Label notifying the user no 
results were found for the media search.",
        "mw-widgets-titleinput-description-new-page": "Description label for a 
new page in the title input widget.",
        "mw-widgets-titleinput-description-redirect": "Description label for a 
redirect in the title input widget.",
+       "mw-widgets-titleinput-missing-in-target-language": "Label appended to 
search result in the title input widget, indicating that matching article is 
missing in target language.",
        "mw-widgets-categoryselector-add-category-placeholder": "Placeholder 
displayed in the category selector widget after the capsules of already added 
categories.",
        "mw-widgets-usersmultiselect-placeholder": "Placeholder displayed in 
the input field, where new usernames are entered",
        "date-range-from": "Label for an input field that specifies the start 
date of a date range filter.",
diff --git a/resources/Resources.php b/resources/Resources.php
index c0c5d9e..074463d 100644
--- a/resources/Resources.php
+++ b/resources/Resources.php
@@ -2381,6 +2381,7 @@
                        // TitleInputWidget
                        'mw-widgets-titleinput-description-new-page',
                        'mw-widgets-titleinput-description-redirect',
+                       'mw-widgets-titleinput-missing-in-target-language'
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
diff --git a/resources/src/mediawiki.widgets/mw.widgets.TitleOptionWidget.js 
b/resources/src/mediawiki.widgets/mw.widgets.TitleOptionWidget.js
index 51508ab..d5aed1b 100644
--- a/resources/src/mediawiki.widgets/mw.widgets.TitleOptionWidget.js
+++ b/resources/src/mediawiki.widgets/mw.widgets.TitleOptionWidget.js
@@ -24,7 +24,7 @@
         * @cfg {string} [query] Matching query string
         */
        mw.widgets.TitleOptionWidget = function MwWidgetsTitleOptionWidget( 
config ) {
-               var icon;
+               var icon, languageIcon, languageLabel;
 
                if ( config.missing ) {
                        icon = 'page-not-found';
@@ -91,6 +91,34 @@
                                        .attr( 'title', config.description )
                        );
                }
+
+               if ( config.numOfLanguages ) {
+                       languageIcon = new OO.ui.IconWidget( {
+                               icon: 'language',
+                               iconTitle: 'Number of languages'
+                       } );
+                       languageLabel = new OO.ui.LabelWidget( {
+                               label: config.numOfLanguages
+                       } );
+                       this.$element.append(
+                               $( '<span>' )
+                                       .addClass( 
'mw-widget-titleOptionWidget-numOfLanguages' )
+                                       .append(
+                                               languageIcon.$element,
+                                               languageLabel.$element
+                                       )
+                       );
+               }
+
+               if ( config.missingInTargetLanguage ) {
+                       this.$element.append(
+                               $( '<span>' )
+                                       .addClass( 
'mw-widget-titleOptionWidget-missing' )
+                                       .text( mw.msg( 
'mw-widgets-titleinput-missing-in-target-language',
+                                               $.uls.data.getAutonym( 
config.targetLanguage ) )
+                                       )
+                       );
+               }
        };
 
        /* Setup */
diff --git a/resources/src/mediawiki.widgets/mw.widgets.TitleWidget.js 
b/resources/src/mediawiki.widgets/mw.widgets.TitleWidget.js
index 9703eea..909549b 100644
--- a/resources/src/mediawiki.widgets/mw.widgets.TitleWidget.js
+++ b/resources/src/mediawiki.widgets/mw.widgets.TitleWidget.js
@@ -44,6 +44,8 @@
                this.showRedirectTargets = config.showRedirectTargets !== false;
                this.showImages = !!config.showImages;
                this.showDescriptions = !!config.showDescriptions;
+               this.showMissingInTargetLanguage = 
!!config.showMissingInTargetLanguage;
+               this.showLanguageCount = !!config.showLanguageCount;
                this.excludeCurrentPage = !!config.excludeCurrentPage;
                this.validateTitle = config.validateTitle !== undefined ? 
config.validateTitle : true;
                this.cache = config.cache;
@@ -162,6 +164,14 @@
                                                params.prop.push( 'pageterms' );
                                                params.wbptterms = 
'description';
                                        }
+                                       if ( widget.showMissingInTargetLanguage 
) {
+                                               params.prop.push( 'langlinks' );
+                                               // lllang is used to check if 
article exists in target language
+                                               params.lllang = 
widget.targetLanguage;
+                                       }
+                                       if ( widget.showLanguageCount ) {
+                                               params.prop.push( 
'langlinkscount' );
+                                       }
                                        req = api.get( params );
                                        promiseAbortObject.abort = 
req.abort.bind( req ); // TODO ew
                                        return req.then( function ( ret ) {
@@ -225,6 +235,8 @@
                                disambiguation: OO.getProp( suggestionPage, 
'pageprops', 'disambiguation' ) !== undefined,
                                imageUrl: OO.getProp( suggestionPage, 
'thumbnail', 'source' ),
                                description: OO.getProp( suggestionPage, 
'terms', 'description' ),
+                               langlinks: suggestionPage.langlinks,
+                               langlinkscount: suggestionPage.langlinkscount,
                                // Sort index
                                index: suggestionPage.index
                        };
@@ -243,6 +255,8 @@
                                        redirect: true,
                                        disambiguation: false,
                                        description: mw.msg( 
'mw-widgets-titleinput-description-redirect', suggestionPage.title ),
+                                       langlinks: suggestionPage.langlinks,
+                                       langlinkscount: 
suggestionPage.langlinkscount,
                                        // Sort index, just below its target
                                        index: suggestionPage.index + 0.5
                                };
@@ -280,6 +294,10 @@
                // Offer the exact text as a suggestion if the page exists
                if ( pageExists && !pageExistsExact ) {
                        titles.unshift( this.getQueryValue() );
+                       // Fix lowercase page titles (exact user input) to have 
same data as the
+                       // corresponding non-lowercase page returned as search 
result
+                       // Now both 'einstein' and 'Einstein' have the same 
'Missing in [target-language]' info
+                       pageData[ this.getQueryValue() ] = pageData[ 
titleObj.getPrefixedText() ];
                }
 
                for ( i = 0, len = titles.length; i < len; i++ ) {
diff --git a/resources/src/mediawiki.widgets/mw.widgets.TitleWidget.less 
b/resources/src/mediawiki.widgets/mw.widgets.TitleWidget.less
index bbffe28..730b0da 100644
--- a/resources/src/mediawiki.widgets/mw.widgets.TitleWidget.less
+++ b/resources/src/mediawiki.widgets/mw.widgets.TitleWidget.less
@@ -12,6 +12,15 @@
                &-description {
                        color: #888;
                }
+
+               &-numOfLanguages {
+                       padding-right: 1em;
+               }
+
+               &-missing {
+                       color: #00af89;
+                       font-weight: 500;
+               }
        }
 
        &-withImages {
@@ -36,6 +45,8 @@
                                        width: 3.75em;
                                        height: 3.75em;
                                        left: 0;
+                                       top: 50%;
+                                       margin-top: -1.875em;
                                        &:not( 
.mw-widget-titleOptionWidget-hasImage ) {
                                                background-color: #ccc;
                                                opacity: 0.4;

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0c806d104ae43044104279a788abbd7231f76d8c
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Petar.petkovic <[email protected]>

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

Reply via email to