}
$attribs = $data['attribs'];
unset( $data['attribs'] );
- $attribs = wfArrayFilterByKey( $attribs, [ Sanitizer::class, 'isReservedDataAttribute' ] );
+ $attribs = wfArrayFilterByKey( $attribs, function( $key ) {
+ return $key === 'class' || Sanitizer::isReservedDataAttribute( $key );
+ } );
$line = Html::openElement( 'table', $attribs ) . Html::openElement( 'tr' );
$line .= '<td class="mw-enhanced-rc"><span class="mw-enhancedchanges-arrow-space"></span>';
}
# Split database and table into proper variables.
- # We reverse the explode so that database.table and table both output
- # the correct table.
+ list( $database, $schema, $prefix, $table ) = $this->qualifiedTableComponents( $name );
+
+ # Quote $table and apply the prefix if not quoted.
+ # $tableName might be empty if this is called from Database::replaceVars()
+ $tableName = "{$prefix}{$table}";
+ if ( $format === 'quoted'
+ && !$this->isQuotedIdentifier( $tableName )
+ && $tableName !== ''
+ ) {
+ $tableName = $this->addIdentifierQuotes( $tableName );
+ }
+
+ # Quote $schema and $database and merge them with the table name if needed
+ $tableName = $this->prependDatabaseOrSchema( $schema, $tableName, $format );
+ $tableName = $this->prependDatabaseOrSchema( $database, $tableName, $format );
+
+ return $tableName;
+ }
+
+ /**
+ * @param string $name Table name
+ * @return array (DB name, schema name, table prefix, table name)
+ */
+ protected function qualifiedTableComponents( $name ) {
+ # We reverse the explode so that database.table and table both output the correct table.
$dbDetails = explode( '.', $name, 3 );
if ( count( $dbDetails ) == 3 ) {
list( $database, $schema, $table ) = $dbDetails;
}
}
- # Quote $table and apply the prefix if not quoted.
- # $tableName might be empty if this is called from Database::replaceVars()
- $tableName = "{$prefix}{$table}";
- if ( $format === 'quoted'
- && !$this->isQuotedIdentifier( $tableName )
- && $tableName !== ''
- ) {
- $tableName = $this->addIdentifierQuotes( $tableName );
- }
-
- # Quote $schema and $database and merge them with the table name if needed
- $tableName = $this->prependDatabaseOrSchema( $schema, $tableName, $format );
- $tableName = $this->prependDatabaseOrSchema( $database, $tableName, $format );
-
- return $tableName;
+ return [ $database, $schema, $prefix, $table ];
}
/**
}
/**
- * Return whether the definition of a module corresponds to a simple ResourceLoaderFileModule.
+ * Return whether the definition of a module corresponds to a simple ResourceLoaderFileModule
+ * or one of its subclasses.
*
* @param string $name Module name
* @return bool
return false;
}
$info = $this->moduleInfos[$name];
+ if ( isset( $info['object'] ) ) {
+ return false;
+ }
if (
- isset( $info['object'] ) ||
- // This special case is dumb, but we need $wgResourceModuleSkinStyles
- // to work for 'oojs-ui-core.styles'. See T167042.
- ( isset( $info['class'] ) && $info['class'] !== 'ResourceLoaderOOUIFileModule' )
+ isset( $info['class'] ) &&
+ $info['class'] !== 'ResourceLoaderFileModule' &&
+ !is_subclass_of( $info['class'], 'ResourceLoaderFileModule' )
) {
return false;
}
* $titleText will be appended if it's not null. (since MW 1.26)
*/
public function __construct(
- $errorMessage = null, $titleText = null, $errorMessageParameters = []
+ $errorMessage, $titleText = null, $errorMessageParameters = []
) {
$this->errorMessage = $errorMessage;
$this->titleText = $titleText;
/**
* @since 1.26
- * @return string|null
+ * @return string
*/
public function getErrorMessage() {
return $this->errorMessage;
"rcfilters-filter-lastrevision-description": "أخر تعديل للصفحة.",
"rcfilters-filter-previousrevision-label": "نسخ سابقة",
"rcfilters-filter-previousrevision-description": "كل تعديلات الصفحة ما عدا التعديل الأخير.",
+ "rcfilters-tag-prefix-namespace-inverted": "<strong>:ليس</strong> $1",
+ "rcfilters-view-tags": "الوسوم",
"rcnotefrom": "بالأسفل {{PLURAL:$5|التغيير|التغييرات}} منذ <strong>$2</strong> (إلى <strong>$1</strong> معروضة).",
"rclistfromreset": "إعادة ضبط خيار التاريخ",
"rclistfrom": "أظهر التغييرات بدء من $3 $2",
"newimages-user": "عنوان الأيبي أو اسم المستخدم",
"newimages-showbots": "أظهر التحميلات بواسطة البوتات",
"newimages-hidepatrolled": "أخف المرفوعات المنظورة",
+ "newimages-mediatype": "نوع الوسيط:",
"noimages": "لا شيء للعرض.",
"gallery-slideshow-toggle": "تغيير الصور المصغرة",
"ilsubmit": "بحث",
"tags-create-reason": "السبب:",
"tags-create-submit": "أنشئ",
"tags-create-no-name": "عليك أن تحدد اسم الوسم.",
- "tags-create-invalid-chars": "أسماء الوسوم ينبغي ألا تحتوي على فواصل (<code>,</code>) أو forward slashes (<code>/</code>).",
+ "tags-create-invalid-chars": "ينبغي ألا تحتوي أسماء الوسوم على فواصل (<code>,</code>) أو عارضة عمودية (<code>|</code>) أو خط مائل للأمام (<code>/</code>).",
"tags-create-invalid-title-chars": "يجب أن لا تحتوي أسماء العلامات الأحرف التي لا يمكن استخدامها في عناوين الصفحات.",
"tags-create-already-exists": "الوسم \"$1\" موجود بالفعل.",
"tags-create-warnings-above": "{{PLURAL:$2|التحذير التالي حدث|التحذيرات التالية حدثت}} عند محاولة إنشاء الوسم \"$1\":",
"apisandbox-sending-request": "Адпраўка API-запыту…",
"apisandbox-loading-results": "Атрымліваем API-вынікі…",
"apisandbox-results-error": "Адбылася памылка пры загрузцы адказу на API-запыт: $1.",
+ "apisandbox-results-login-suppressed": "Гэты запыт быў апрацаваны, як выкананы ўдзельнікам, які не ўвайшоў у сыстэму, бо ён мог быць выкарыстаны, каб абысьці бясьпеку Same-Origin браўзэру. Заўважце, што аўтаматычная апрацоўка токенаў API-пясочніцы не працуе правільна з такімі запытамі, калі ласка, запаўняйце іх уручную.",
"apisandbox-request-selectformat-label": "Паказаць зьвесткі запыту як:",
"apisandbox-request-format-url-label": "Радок запыту URL",
"apisandbox-request-url-label": "URL-адрас запыту:",
"recentchanges": "Nedavne izmjene",
"recentchanges-legend": "Postavke nedavnih izmjena",
"recentchanges-summary": "Na ovoj stranici možete pratiti nedavne izmjene.",
- "recentchanges-noresult": "U zadanom vremenu nema promjena za zadane kriterije.",
+ "recentchanges-noresult": "Nema izmjena u zadanom vremenu za zadane kriterije.",
"recentchanges-feed-description": "Na ovoj stranici možete pratiti nedavne izmjene.",
"recentchanges-label-newpage": "Nova stranica",
"recentchanges-label-minor": "Manja izmjena",
"apisandbox-sending-request": "Odesílá se API požadavek…",
"apisandbox-loading-results": "Přijímají se API výsledky…",
"apisandbox-results-error": "Došlo k chybě při načítání odpovědi na API dotaz: $1.",
+ "apisandbox-results-login-suppressed": "Tento požadavek byl zpracován jako od nepřihlášeného uživatele, neboť by jinak mohl sloužit k obcházení bezpečnostních funkcionalit prohlížeče zajišťujících shodný původ. Automatická správa tokenů pro takové požadavky nefunguje, vyplňte je prosím ručně.",
"apisandbox-request-selectformat-label": "Zobrazit data požadavku jako:",
"apisandbox-request-format-url-label": "řetězec dotazu do URL",
"apisandbox-request-url-label": "URL požadavku:",
"apisandbox-sending-request": "Sende API-Anfrage …",
"apisandbox-loading-results": "Rufe API-Ergebnisse ab …",
"apisandbox-results-error": "Beim Laden der API-Anfragenantwort ist ein Fehler aufgetreten: $1.",
+ "apisandbox-results-login-suppressed": "Diese Anfrage wurde als ein abgemeldeter Benutzer verarbeitet, da sie zur Umgehung der Gleicher-Ursprung-Sicherheit des Browsers verwendet werden könnte. Beachte, dass die automatische Tokenbearbeitung der API-Spielwiese mit solchen Anfragen nicht ordnungsgemäß funktioniert. Bitte fülle sie manuell aus.",
"apisandbox-request-selectformat-label": "Anfragedaten anzeigen als:",
"apisandbox-request-format-url-label": "URL-Abfrage-Zeichenfolge",
"apisandbox-request-url-label": "Anforderungs-URL:",
"createacct-benefit-body2": "{{PLURAL:$1|Orrialde 1|$1 orrialde}}",
"createacct-benefit-body3": "azkeneko {{PLURAL:$1|egilea|egileak}}",
"badretype": "Idatzitako pasahitzak ez dira berdinak.",
+ "usernameinprogress": "Erabiltzaile honetarako kontu eraketa martxan dago jadanik. Mesedez, itxaron.",
"userexists": "Aukeratutako erabiltzaile izena hartuta dago.\nMesedez beste bat aukeratu.",
"loginerror": "Errorea saioa hastean",
"createacct-error": "Kontua sortzerakoan arazoa",
"botpasswords-created-title": "Botaren pasahitza sortu da",
"botpasswords-updated-title": "Botaren pasahitza eguneratu da",
"botpasswords-deleted-title": "Botaren pasahitza ezabatu da",
+ "botpasswords-no-provider": "BotPasswordsSessionProvider ez dago eskuragarri.",
+ "botpasswords-restriction-failed": "Errobot pasahitza murrizketek logina saihesten dute.",
"resetpass_forbidden": "Ezin dira pasahitzak aldatu",
"resetpass_forbidden-reason": "Ezin dira pasahitzak aldatu: $1",
"resetpass-no-info": "Orrialde honetara zuzenean sartzeko izena eman behar duzu.",
"userrights-unchangeable-col": "Aldatu ezin ditzakezun taldeak",
"userrights-expiry-none": "Ez da iraungitzen",
"userrights-expiry": "Iraungintze data:",
+ "userrights-expiry-othertime": "Beste denbora:",
"userrights-expiry-options": "Egun 1:Egun 1,Aste 1:Aste 1,Hilabete 1:Hilabete 1,3 hilabete:3 hilabete,6 hilabete:6 hilabete,Urte 1:Urte 1",
"userrights-conflict": "Gatazka gertatu da erabiltzaile eskubideak aldatzean. Mesedez, berrikusi eta baieztatu zure aldaketak.",
"group": "Taldea:",
"right-override-export-depth": "5eko sakonerararteko loturiko orrialdeak barne esportatu",
"right-sendemail": "Beste erabiltzaileei e-posta bidali",
"grant-group-page-interaction": "Orriekin elkarreragin",
+ "grant-group-file-interaction": "Mediarekin elkarreragin",
+ "grant-group-watchlist-interaction": "Zure ikus-zerrendarekin elkarreragin",
"grant-group-email": "E-posta bidali",
+ "grant-group-customization": "Pertsonalizazioa eta lehentasunak",
+ "grant-group-administration": "Akzio administratiboak aurrera eraman",
"grant-group-private-information": "Zure datu pribatuetara sartu",
+ "grant-group-other": "Denetariko ekintza",
+ "grant-blockusers": "Blokeatu eta desblokeatu erabiltzaileak",
"grant-createaccount": "Kontuak sortu",
"grant-createeditmovepage": "Orrialdeak sortu, aldatu eta mugitu",
+ "grant-delete": "Ezabatu orriak, berrikuspenak eta sarrerak",
"grant-editmycssjs": "Zure CSS/JavaScript aldatu",
"grant-editmyoptions": "Aldatu zure hobespenak",
"grant-editmywatchlist": "Zure jarraipen zerrenda aldatu",
"grant-editprotected": "Babestutako orriak aldatu",
"grant-highvolume": "Bolumen-handiko edizioa",
"grant-patrol": "Orrietako aldaketa patruilatu",
+ "grant-privateinfo": "Informazio pribatura sartu",
"grant-protect": "Orriak babestu eta babesgabetu",
"grant-sendemail": "Bidali mezu elektronikoa beste erabiltzailei",
"grant-uploadeditmovefile": "Fitxategiak igo, ordeztu eta mugitu",
"action-viewmywatchlist": "zure jarraipen zerrenda ikusi",
"action-viewmyprivateinfo": "zure informazio pribatua ikusi",
"action-editmyprivateinfo": "zure informazio pribatua aldatu",
+ "action-editcontentmodel": "Aldatu orri bateko eduki eredua",
"action-managechangetags": "Etiketak sortu eta (des)aktibatu",
+ "action-applychangetags": "Etiketak zure aldaketekin batera aplikatu",
"action-deletechangetags": "ezabatu etiketak datu-basetik",
"action-purge": "Orri hau purgatu",
"nchanges": "{{PLURAL:$1|aldaketa 1|$1 aldaketa}}",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ikus, gainera, [[Special:NewPages|orri berrien zerrenda]])",
"recentchanges-submit": "Erakutsi",
"rcfilters-activefilters": "Iragazki aktiboak",
- "rcfilters-quickfilters": "Lotura azkarrak",
+ "rcfilters-quickfilters": "Gordetako filtro ezarpenak",
+ "rcfilters-quickfilters-placeholder-title": "Ez dira oraindik Link-ak gorde",
"rcfilters-savedqueries-defaultlabel": "Gordetako iragazkiak",
+ "rcfilters-savedqueries-rename": "Berrizendatu",
"rcfilters-savedqueries-remove": "Kendu",
"rcfilters-savedqueries-new-name-label": "Izena",
"rcfilters-savedqueries-apply-label": "Konfigurazioa gorde",
"rcfilters-savedqueries-cancel-label": "Utzi",
- "rcfilters-savedqueries-add-new-title": "Gorde iragazkiak lotura azkarra gisa",
+ "rcfilters-savedqueries-add-new-title": "Gorde oraingo iragazki ezarpenak",
"rcfilters-restore-default-filters": "Leheneratu iragazki lehenetsiak",
"rcfilters-clear-all-filters": "Iragazki guztiak garbitu",
"rcfilters-search-placeholder": "Aldaketa berriak iragazi (nabigatu ala idatzi)",
+ "rcfilters-invalid-filter": "Balio ez duen iragazkia",
"rcfilters-filterlist-title": "Iragazkiak",
"rcfilters-filterlist-whatsthis": "Zer da hau?",
"rcfilters-highlightbutton-title": "Nabarmendu emaitzak",
"version-libraries-description": "Deskribapena",
"version-libraries-authors": "Egileak",
"redirect": "Birzuzendu fitxategi, kide, orri, berrikuspen edo IDaren arabera",
+ "redirect-summary": "Orri berezi honek artxibo batera (izena emanda) bidaliko zaitu, orri batera (egiaztatze ID edo orri ID-a emanez), erabiltzaile orrira (erabiltzaile ID numerikoa emanez) edota hasiera sarrera batera (Sarrera ID-a emanez). Erabilera: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], or [[{{#Special:Redirect}}/logid/186]].",
"redirect-submit": "Joan",
"redirect-lookup": "Ikuskatu:",
"redirect-value": "Balioa:",
"anontalk": "Diskussionssyste vo sellere IP",
"navigation": "Navigation",
"and": " un",
- "qbfind": "Finde",
- "qbbrowse": "Blättre",
- "qbedit": "Ändere",
- "qbpageoptions": "Sytenoptione",
- "qbmyoptions": "Ystellige",
"faq": "Froge, wo vilmol gstellt wäre",
- "faqpage": "Project:FAQ",
"actions": "Aktione",
"namespaces": "Namensryym",
"variants": "Variante",
"edit-local": "Lokali Bschrybig bearbeite",
"create": "Erstelle",
"create-local": "Lokali Bschrybig zuefiege",
- "editthispage": "Syte bearbeite",
- "create-this-page": "Die Syte afange",
"delete": "Lesche",
- "deletethispage": "Syte lösche",
- "undeletethispage": "Die Syte widerhärstelle",
"undelete_short": "{{PLURAL:$1|1 Version|$1 Versione}} widerherstelle",
"viewdeleted_short": "{{PLURAL:$1|ei gleschti Änderig|$1 gleschti Ändrige}} aaluege",
"protect": "Schütze",
"protect_change": "ändere",
- "protectthispage": "Artikel schütze",
"unprotect": "Syteschutz ändere",
- "unprotectthispage": "Syteschutz ändere",
"newpage": "Nöji Syte",
- "talkpage": "Iber die Syte dischputiere",
"talkpagelinktext": "Diskussion",
"specialpage": "Spezialsyte",
"personaltools": "Persönlichi Wärkzüg",
- "articlepage": "Syte",
"talk": "Diskussion",
"views": "Wievylmol agluegt",
"toolbox": "Wärchzyyg",
"tool-link-userrights": "{{GENDER:$1|Benutzergruppe}} ändere",
"tool-link-userrights-readonly": "{{GENDER:$1|Benutzergruppe}} aaluege",
"tool-link-emailuser": "E-Mail an {{GENDER:$1|dää Benutzer|die Benutzeri}} schicke",
- "userpage": "Benutzersyte",
- "projectpage": "Projektsyte azeige",
"imagepage": "Dateisyte",
"mediawikipage": "Inhaltssyte aazeige",
"templatepage": "Vorlagesyte aazeige",
"logentry-merge-merge": "{{GENDER:$2|Der $1|D $1|$1}} het $3 i $4 zämegfüert (Versione bis $5)",
"logentry-move-move": "{{GENDER:$2|Dr|D}} $1 het d Seite $3 uf $4 verschobe",
"logentry-move-move-noredirect": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 nooch $4 verschobe ohni e Wyterleitig aazlege",
- "logentry-move-move_redir": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 nooch $4 verschobe un het debi e Wyterleitig überschrybe",
- "logentry-move-move_redir-noredirect": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 nooch $4 verschobe un het debi e Wyterleitig überschrybe, ohni sälber eini aazlege",
+ "logentry-move-move_redir": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 nooch $4 verschobe un het deby e Wyterleitig überschribe",
+ "logentry-move-move_redir-noredirect": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 nooch $4 verschobe un het deby e Wyterleitig überschribe, ohni sälber eini aazlege",
"logentry-patrol-patrol": "{{GENDER:$2|Der $1|D $1|$1}} het Version $4 vo Syte $3 als kontrolliert markiert",
"logentry-patrol-patrol-auto": "{{GENDER:$2|Der $1|D $1|$1}} het Version $4 vor Syte $3 automatisch als kontrolliert markiert",
"logentry-newusers-newusers": "{{GENDER:$2|Benutzerkonto}} $1 isch aagleit wore.",
"apisandbox-sending-request": "בקשת ה־API בשליחה...",
"apisandbox-loading-results": "תוצאות ה־API בתהליך קבלה...",
"apisandbox-results-error": "אירעה שגיאה בעת טעינת תשובת ה־API לבקשה: $1.",
+ "apisandbox-results-login-suppressed": "בקשה זו טופלה כבקשה של משתמש אנונימי, כי היא עלולה הייתה לשמש לעקיפת מדיניות האבטחה \"מקור־זהה\" (Same-Origin) של הדפדפן. יש לציין שהטיפול האוטומטי באסימונים של ארגז החול של ה־API אינו עובד כראוי עם בקשות מסוג זה, לכן יש למלא אותם ידנית.",
"apisandbox-request-selectformat-label": "הצגת נתוני הבקשה בתור:",
"apisandbox-request-format-url-label": "מחרוזת השאילתה (query string) של כתובת ה־URL",
"apisandbox-request-url-label": "כתובת ה־URL של הבקשה:",
"anontalk": "वार्ता",
"navigation": "भ्रमण",
"and": " और",
- "qbfind": "खोजें",
- "qbbrowse": "ब्राउज़",
- "qbedit": "सम्पादन",
- "qbpageoptions": "यह पृष्ठ",
- "qbmyoptions": "मेरे पृष्ठ",
"faq": "बहुधा पूछे जाने वाले प्रश्न",
- "faqpage": "Project:बहुधा पूछे जाने वाले सवाल",
"actions": "क्रियाएँ",
"namespaces": "नामस्थान",
"variants": "संस्करण",
"edit-local": "स्थानीय विवरण सम्पादन करें",
"create": "बनाएँ",
"create-local": "स्थानीय विवरण जोड़ें",
- "editthispage": "यह पृष्ठ संपादन करें",
- "create-this-page": "यह पृष्ठ बनाएँ",
"delete": "हटाएँ",
- "deletethispage": "इस पृष्ठ को हटाएँ",
- "undeletethispage": "इस पृष्ठ को पुनर्स्थापित करें।",
"undelete_short": "{{PLURAL:$1|एक हटाया गया|$1 हटाए गए}} बदलाव वापस लायें",
"viewdeleted_short": "देखें {{PLURAL:$1|एक हटाया गया सम्पादन|$1 हटाए गए सम्पादन}}",
"protect": "सुरक्षित करें",
"protect_change": "बदलें",
- "protectthispage": "इस पृष्ठ को सुरक्षित करें",
"unprotect": "असुरक्षित",
- "unprotectthispage": "इस पृष्ठ का सुरक्षा स्तर बदलें",
"newpage": "नया पृष्ठ",
- "talkpage": "इस पृष्ठ के बारे में चर्चा करें",
"talkpagelinktext": "चर्चा",
"specialpage": "विशेष पृष्ठ",
"personaltools": "व्यक्तिगत उपकरण",
- "articlepage": "सामग्री पृष्ठ देखें",
"talk": "चर्चा",
"views": "दर्शाव",
"toolbox": "उपकरण",
"tool-link-userrights": "{{GENDER:$1|सदस्य}} समूह बदलें",
"tool-link-userrights-readonly": "{{GENDER:$1|सदस्य}} समूह देखें",
"tool-link-emailuser": "इस {{GENDER:$1|सदस्य}} को ई-मेल करें।",
- "userpage": "सदस्य पृष्ठ देखें",
- "projectpage": "परियोजना पृष्ठ देखें",
"imagepage": "फ़ाइल पृष्ठ देखें",
"mediawikipage": "सन्देश पृष्ठ देखें",
"templatepage": "साँचा पृष्ठ देखें",
"rcfilters-filter-lastrevision-description": "पृष्ठ का सबसे हाल में हुआ बदलाव",
"rcfilters-filter-previousrevision-label": "पहले के अवतरण",
"rcfilters-filter-previousrevision-description": "सभी परिवर्तन जो एक पृष्ठ में सबसे हाल के परिवर्तन नहीं हैं।",
+ "rcfilters-filter-excluded": "अपवर्जित",
+ "rcfilters-tag-prefix-namespace-inverted": " $1 <strong>:नहीं</strong>",
+ "rcfilters-view-tags": "चिप्पियाँ",
"rcnotefrom": "नीचे <strong>$2</strong> के बाद से (<strong>$1</strong> तक) {{PLURAL:$5|हुआ बदलाव दर्शाया गया है|हुए बदलाव दर्शाए गये हैं}}।",
"rclistfromreset": "चुने दिनांक पहले जैसा करें",
"rclistfrom": "$3 $2 से नये बदलाव दिखाएँ",
"newimages-legend": "छननी",
"newimages-label": "संचिका नाम (या उसका अंश):",
"newimages-user": "आईपी पता या सदस्यनाम",
+ "newimages-newbies": "केवल नये खातों के योगदान दिखायें",
"newimages-showbots": "बॉट के अपलोड दिखाइये",
"newimages-hidepatrolled": "जाँचा हुआ अपलोड छुपाएँ",
+ "newimages-mediatype": "मीडिया प्रकार:",
"noimages": "देखने के लिए कुछ नहीं है।",
"gallery-slideshow-toggle": "टॉगल थंबनेल",
"ilsubmit": "खोजें",
"tags-create-reason": "कारण:",
"tags-create-submit": "बनाएँ",
"tags-create-no-name": "आपको एक चिप्पि का नाम निर्दिष्ट करना चाहिए।",
- "tags-create-invalid-chars": "à¤\9fà¥\88à¤\97 नामà¥\8bà¤\82 à¤\95à¥\87 बà¥\80à¤\9a à¤\95à¥\89मा(<code>,</code>) या à¤\86à¤\97à¥\87 à¤\95à¥\87 सà¥\8dलà¥\88श नहà¥\80à¤\82 हà¥\8bनà¥\87 à¤\9aाहिà¤\8f। (<code>/</code>).",
+ "tags-create-invalid-chars": "à¤\9aिपà¥\8dपियà¥\8bà¤\82 à¤\95à¥\87 नाम मà¥\87à¤\82 à¤\95à¥\8bमा (<code>,</code>) à¤\85थवा à¤\86à¤\97à¥\87 à¤\95à¥\87 सà¥\8dलà¥\88श (<code>/</code>) नहà¥\80à¤\82 हà¥\8bनà¥\87 à¤\9aाहियà¥\87।",
"tags-create-invalid-title-chars": "टैग नामों में ऐसे कैरेक्टर नहीं होने चाहिए जो पृष्ठ के शीर्षक में नहीं इस्तेमाल हो सकते हैं।",
"tags-create-already-exists": "टैग \"$1\" पहले से ही उपस्थित है।",
"tags-create-warnings-above": "निम्न लिखित {{PLURAL:$2|चेतावनी देखी गई है|चेतावनियाँ देखी गई हैं}} जब टैग \"$1\" बनाने का प्रयास किया गया था:",
"gotointerwiki-invalid": "दिया गया शीर्षक अमान्य है।",
"gotointerwiki-external": "[[$2]] एक बाहरी वेबसाइट है, जिसमें जाने के लिए आप {{SITENAME}} को छोड़ रहे हैं।\n\n[$1 $1 पर जाने के लिए इस पर क्लिक करें]।",
"undelete-cantedit": "आप इस पन्ने को वापस नहीं ला सकते, क्योंकि आपको इस पन्ने पर सम्पादन की अनुमति नहीं है।",
- "undelete-cantcreate": "आप इस पन्ने को वापस नहीं ला सकते, क्योंकि यह पन्ना इस नाम से है ही नहीं और आपको इस पन्ने के निर्माण की अनुमति भी नहीं है।"
+ "undelete-cantcreate": "आप इस पन्ने को वापस नहीं ला सकते, क्योंकि यह पन्ना इस नाम से है ही नहीं और आपको इस पन्ने के निर्माण की अनुमति भी नहीं है।",
+ "pagedata-title": "पृष्ठ आँकड़े",
+ "pagedata-not-acceptable": "कोई अनुकूल प्रारूप नहीं मिला। सुमेलित ऍमआइऍमई प्रकार: $1",
+ "pagedata-bad-title": "अमान्य शीर्षक: $1"
}
],
],
'mediawiki.action.edit.styles' => [
+ 'targets' => [ 'desktop', 'mobile' ],
'styles' => 'resources/src/mediawiki.action/mediawiki.action.edit.styles.css',
],
'mediawiki.action.edit.collapsibleFooter' => [
$enhancedChangesList->recentChangesLine( $recentChange, false );
$html = $enhancedChangesList->endRecentChangesList();
- $this->assertContains( 'data-mw-revid="5"', $html );
+ $this->assertRegExp( '/data-mw-revid="5" class="[^"]*mw-enhanced-rc[^"]*"/', $html );
$recentChange2 = $this->getEditChange( '20131103092253' );
$enhancedChangesList->recentChangesLine( $recentChange2, false );
);
}
+ public function provideTestIsFileModule() {
+ $fileModuleObj = $this->getMockBuilder( ResourceLoaderFileModule::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+ return [
+ 'object' => [ false,
+ new ResourceLoaderTestModule()
+ ],
+ 'FileModule object' => [ false,
+ $fileModuleObj
+ ],
+ 'simple empty' => [ true,
+ []
+ ],
+ 'simple scripts' => [ true,
+ [ 'scripts' => 'example.js' ]
+ ],
+ 'simple scripts, raw and targets' => [ true, [
+ 'scripts' => [ 'a.js', 'b.js' ],
+ 'raw' => true,
+ 'targets' => [ 'desktop', 'mobile' ],
+ ] ],
+ 'FileModule' => [ true,
+ [ 'class' => ResourceLoaderFileModule::class, 'scripts' => 'example.js' ]
+ ],
+ 'TestModule' => [ false,
+ [ 'class' => ResourceLoaderTestModule::class, 'scripts' => 'example.js' ]
+ ],
+ 'SkinModule (FileModule subclass)' => [ true,
+ [ 'class' => ResourceLoaderSkinModule::class, 'scripts' => 'example.js' ]
+ ],
+ 'JqueryMsgModule (FileModule subclass)' => [ true, [
+ 'class' => ResourceLoaderJqueryMsgModule::class,
+ 'scripts' => 'example.js',
+ ] ],
+ 'WikiModule' => [ false, [
+ 'class' => ResourceLoaderWikiModule::class,
+ 'scripts' => [ 'MediaWiki:Example.js' ],
+ ] ],
+ ];
+ }
+
+ /**
+ * @dataProvider provideTestIsFileModule
+ * @covers ResourceLoader::isFileModule
+ */
+ public function testIsFileModule( $expected, $module ) {
+ $rl = TestingAccessWrapper::newFromObject( new EmptyResourceLoader() );
+ $rl->register( 'test', $module );
+ $this->assertSame( $expected, $rl->isFileModule( 'test' ) );
+ }
+
/**
* @covers ResourceLoader::isModuleRegistered
*/