diff options
131 files changed, 2028 insertions, 2175 deletions
@@ -2,5 +2,5 @@ host=gerrit.wikimedia.org port=29418 project=mediawiki/core.git -defaultbranch=master +defaultbranch=REL1_22 defaultrebase=0 diff --git a/RELEASE-NOTES-1.22 b/RELEASE-NOTES-1.22 index dad24388..ff858e91 100644 --- a/RELEASE-NOTES-1.22 +++ b/RELEASE-NOTES-1.22 @@ -1,22 +1,48 @@ += MediaWiki release notes = + Security reminder: MediaWiki does not require PHP's register_globals. If you have it on, turn it '''off''' if you can. -== MediaWiki 1.22 == - -THIS IS NOT A RELEASE YET - -MediaWiki 1.22 is an alpha-quality branch and is not recommended for use in -production. - -* Breaking Changes in 1.22 -* New features in 1.22 -* Configuration changes in 1.22 -* Bug fixes in 1.22 -* API changes in 1.22 -* Languages updated in 1.22 -* Other changes in 1.22 - -=== Breaking Changes in 1.22 === +== MediaWiki 1.22.1 == + +This is a security and maintenance release of the MediaWiki 1.22 branch. + +=== Changes since 1.22.0 === + +* (bug 57550) SECURITY: Disallow stylesheets in SVG Uploads +* (bug 58088) SECURITY: Don't normalize U+FF3C to \ in CSS Checks +* (bug 58472) SECURITY: Disallow -o-link in styles +* (bug 58553) SECURITY: Return error on invalid XML for SVG Uploads +* (bug 58699) SECURITY: Fix RevDel log entry information leaks +* (bug 58178) Restore compatibility with curl < 7.16.2. +* (bug 56931) Updated the plural rules to CLDR 24. They are in new format + which is detailed in UTS 35 Rev 33. The PHP parser and evaluator as well as + the JavaScript evaluator were updated to support the new format. Plural rules + for some languages have changed, most notably Russian. Affected software + messages have been updated and marked for review at translatewiki.net. + This change is backported from the development branch of MediaWiki 1.23. +* (bug 58434) The broken installer for database backend Oracle was fixed. +* (bug 58167) The web installer no longer throws an exception when PHP is + compiled without support for MySQL yet with support for another DBMS. +* (bug 58640) Fixed a compatibility issue with PCRE 8.34 that caused pages + to appear blank or with missing text. +* (bug 47055) Changed FOR UPDATE handling in Postgresql +* (bug 57026) Avoid extra parsing in prepareContentForEdit() + +== MediaWiki 1.22.0 == + +MediaWiki 1.22.0 is the stable branch and is recommended for use in production. +MediaWiki 1.22.0 is a large release that contains many new features and bug fixes. + +* Breaking Changes in 1.22.0 +* New features in 1.22.0 +* Configuration changes in 1.22.0 +* Bug fixes in 1.22.0 +* API changes in 1.22.0 +* Languages updated in 1.22.0 +* Other changes in 1.22.0 + +=== Breaking Changes in 1.22.0 === * BREAKING CHANGE: (bug 41729) Display editsection links next to headings. Also change their class name from .editsection to .mw-editsection and place them at the end of the heading element instead of the beginning. Client-side code and @@ -74,7 +100,7 @@ production. 'mediawiki.legacy.wikibits' (which IEFixes depends on) and that will import IEFixes automatically if user agent conditions are met. -=== New features in 1.22 === +=== New features in 1.22.0 === * You can now install extensions using Composer. See https://www.mediawiki.org/wiki/Composer * (bug 44525) mediawiki.jqueryMsg can now parse (whitelisted) HTML elements and attributes. @@ -267,7 +293,7 @@ production. prefix. Also fixed PHPUnit test suite when using a MySQL backend containing views. -=== Configuration changes in 1.22 === +=== Configuration changes in 1.22.0 === * $wgRedirectScript was removed. It was unused. * Removed $wgLocalMessageCacheSerialized, it is now always true. * $wgVectorUseIconWatch is now enabled by default. @@ -325,7 +351,7 @@ production. script they were added for. * Default value of $wgMaxShellMemory has been tripled (it's now 300 MB). -=== Bug fixes in 1.22 === +=== Bug fixes in 1.22.0 === * (bug 47271) $wgContentHandlerUseDB should be set to false during the upgrade * Disable Special:PasswordReset when $wgEnableEmail is false. Previously one could still navigate to the page by entering the URL directly. @@ -413,7 +439,7 @@ production. * (bug 56707) Correct tooltip of "Next n results" on query special pages. * (bug 56770) mw.util.addPortletLink: Check length before access array index. -=== API changes in 1.22 === +=== API changes in 1.22.0 === * (bug 25553) The JSON output formatter now leaves forward slashes unescaped to improve human readability of URLs and similar strings. Also, a "utf8" option is now provided to use UTF-8 encoding instead of hex escape codes @@ -467,16 +493,20 @@ production. file repositories, and related ForeignAPIRepo methods getInfo and getApiUrl. * The new query module list=allfileusages to enumerate file usages was added. -=== Languages updated in 1.22 === +=== Languages updated in 1.22.0 === MediaWiki supports over 350 languages. Many localisations are updated regularly. Below only new and removed languages are listed, as well as changes to languages because of Bugzilla reports. +* (bug 47099) Plural rules were updated to those from CLDR 24 for Manx (gv). +* (bug 54514) Explicit plural forms now work for Russian. +* (bug 46422) Explicit plural forms for languages that use a custom + implementation for Language::convertPlural now work correctly. * Batak Toba (bbc-latn) added. * (bug 46751) Made Buryat (Russia) (буряад) (bxr) fallback to Russian. -=== Other changes in 1.22 === +=== Other changes in 1.22.0 === * redirect.php was removed. It was unused. * ClickTracking integration was dropped from the mediaWiki.user.bucket JavaScript function. The 'tracked' option is now ignored. @@ -547,7 +577,7 @@ changes to languages because of Bugzilla reports. == Compatibility == -MediaWiki 1.22 requires PHP 5.3.2 or later. +MediaWiki 1.22.0 requires PHP 5.3.2 or later. MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but support for them is somewhat less mature. There is experimental support for @@ -562,7 +592,7 @@ The supported versions are: == Upgrading == -1.22 has several database changes since 1.21, and will not work without schema +1.22.0 has several database changes since 1.21, and will not work without schema updates. Note that due to changes to some very large tables like the revision table, the schema update may take quite long (minutes on a medium sized site, many hours on a large site). @@ -608,3 +638,4 @@ going to run a public MediaWiki, so you can be notified of security fixes. == IRC help == There's usually someone online in #mediawiki on irc.freenode.net. + diff --git a/docs/memcached.txt b/docs/memcached.txt index f54a4e7a..a2b4a949 100644 --- a/docs/memcached.txt +++ b/docs/memcached.txt @@ -78,7 +78,7 @@ usage evenly), make its entry a subarray: == PHP client for memcached == MediaWiki uses a fork of Ryan T. Dean's pure-PHP memcached client. -The newer PECL module is not yet supported. +The newer PECL module is supported. MediaWiki uses three object for object caching: * $wgMemc, controlled by $wgMainCacheType diff --git a/extensions/Cite/Cite.i18n.php b/extensions/Cite/Cite.i18n.php index 2dc51f42..2f204203 100644 --- a/extensions/Cite/Cite.i18n.php +++ b/extensions/Cite/Cite.i18n.php @@ -980,14 +980,12 @@ Definěruj dalšne w powěsći <nowiki>[[MediaWiki:$2]]</nowiki>.', za ref z mjenim <code>$1</code> njejo se tekst pódał', 'cite_error_included_ref' => 'Kóńceca toflicka <code></ref></code> felujo za toflicku <code><ref></code>', 'cite_error_refs_without_references' => 'Toflicki <code><ref></code> eksistěruju, ale toflicka <code><references/></code> njejo se namakała', - 'cite_error_group_refs_without_references' => 'Toflicki <code><ref></code> eksistěruju za kupku z mjenim "$1", ale wótpowědujuca toflicka <code><references group="$1"/></code> njejo se namakała abo zacynjacy <code></ref></code> felujo', + 'cite_error_group_refs_without_references' => 'Toflicki <code><ref></code> eksistěruju za kupku z mjenim "$1", ale wótpowědujuca toflicka <code><references group="$1"/></code> njejo se namakała', # Fuzzy 'cite_error_references_group_mismatch' => 'Toflicka <code><ref></code> w <code><references></code> jo ze kupkowym atributom "$1" w konflikśe.', 'cite_error_references_missing_group' => 'Toflicka <code><ref></code>, kótaraž jo w <code><references></code> definěrowana, ma kupkowy atribut "$1", kótaryž njepokazujo se w pjerwjejšnem teksće.', 'cite_error_references_missing_key' => 'Toflicka <code><ref></code> z mjenim "$1", kótaraž jo w <code><references></code> definěrowana, njewužywa se w pjerwjejšnem teksće.', 'cite_error_references_no_key' => 'Toflicka <code><ref></code>, kótaraž jo w <code><references></code> definěrowana, njama mjenjowy atribut.', 'cite_error_empty_references_define' => 'Toflicka <code><ref></code>, kótaraž jo w <code><references></code> z mjenim "$1" definěrowana, njama wopśimjeśe.', - 'cite_references_link_accessibility_label' => 'Górjej skócyś', - 'cite_references_link_many_accessibility_label' => 'Górjej skócys do:', ); /** Greek (Ελληνικά) @@ -1072,9 +1070,7 @@ neniu teksto estis donita por ref-oj nomataj <code>$1</code>', * @author Crazymadlover * @author Drini * @author Erdemaslancan - * @author Fitoschido * @author Gustronico - * @author Ihojose * @author Locos epraix * @author Manuelt15 * @author McDutchie @@ -1108,15 +1104,13 @@ Define más en el mensaje <nowiki>[[MediaWiki:$2]]</nowiki>.', no se ha definido el contenido de las referencias llamadas <code>$1</code>', 'cite_error_included_ref' => 'Etiqueta de apertura <code><ref></code> sin su correspondiente cierre <code></ref></code>', 'cite_error_refs_without_references' => 'Existen etiquetas <code><ref></code>, pero no se encontró una etiqueta <code><references /></code>', - 'cite_error_group_refs_without_references' => 'Existen etiquetas <code><ref></code> para un grupo llamado «$1», pero no se encontró la etiqueta <code><references group="$1"/></code> correspondiente, o falta la etiqueta <code></ref></code> de cierre', + 'cite_error_group_refs_without_references' => 'Existen etiquetas <code><ref></code> para un grupo llamado "$1", pero no se encontró una etiqueta <code><references group="$1"/></code>', # Fuzzy 'cite_error_references_group_mismatch' => 'La etiqueta <code><ref></code> en <code><references></code> presenta el atributo de grupo "$1" en conflicto.', 'cite_error_references_missing_group' => 'La etiqueta <code><ref></code> definida en <code><references></code> pertenece al grupo "$1" no declarado en el texto precedente.', 'cite_error_references_missing_key' => 'La etiqueta <code><ref></code> con nombre "$1" definida en <code><references></code> no se utiliza en el texto precedente.', 'cite_error_references_no_key' => 'La etiqueta <code><ref></code> definida en <code><references></code> no tiene atributo de nombre.', 'cite_error_empty_references_define' => 'La etiqueta <code><ref></code> definida en <code><references></code> con nombre "$1" no tiene contenido.', 'cite_references_link_many_format_backlink_labels' => 'a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay az ba bb bc bd be bf bg bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz ca cb cc cd ce cf cg ch ci cj ck cl cm cn co cp cq cr cs ct cu cv cw cx cy cz da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz ea eb ec ed ee ef eg eh ei ej ek el em en eo ep eq er es et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq gr gs gt gu gv gw gx gy gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc pd pe pf pg ph pi pj pk pl pm pn po pp pq pr ps pt pu pv pw px py pz qa qb qc qd qe qf qg qh qi qj qk ql qm qn qo qp qq qr qs qt qu qv qw qx qy qz ra rb rc rd re rf rg rh ri rj rk rl rm rn ro rp rq rr rs rt ru rv rw rx ry rz sa sb sc sd se sf sg sh si sj sk sl sm sn so sp sq sr ss st su sv sw sx sy sz ta tb tc td te tf tg th ti tj tk tl tm tn to tp tq tr ts tt tu tv tw tx ty tz ua ub uc ud ue uf ug uh ui uj uk ul um un uo up uq ur us ut uu uv uw ux uy uz va vb vc vd ve vf vg vh vi vj vk vl vm vn vo vp vq vr vs vt vu vv vw vx vy vz wa wb wc wd we wf wg wh wi wj wk wl wm wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb xc xd xe xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz ya yb yc yd ye yf yg yh yi yj yk yl ym yn yo yp yq yr ys yt yu yv yw yx yy yz za zb zc zd ze zf zg zh zi zj zk zl zm zn zo zp zq zr zs zt zu zv zw zx zy zz', - 'cite_references_link_accessibility_label' => 'Ir a', - 'cite_references_link_many_accessibility_label' => 'Ir a:', ); /** Estonian (eesti) @@ -1186,7 +1180,7 @@ $messages['fa'] = array( 'cite_error_references_no_text' => 'برچسب <code><ref></code> نامجاز؛ متنی برای یادکردهای با نام <code>$1</code> وارد نشدهاست', 'cite_error_included_ref' => 'برچسب تمام کنندهٔ <code></ref></code> بدون برچسب <code><ref></code>', 'cite_error_refs_without_references' => 'برچسب <code><ref></code> وجود دارد اما برچسب <code><references/></code> پیدا نشد', - 'cite_error_group_refs_without_references' => 'برچسب <code><ref></code> برای گروهی به نام «$1» وجود دارد، اما برچسب متناظر با <code><references group="$1"/></code> یافت نشد یا <code></ref></code> بسته جا گذاشته شدهاست.', + 'cite_error_group_refs_without_references' => 'برچسب <code><ref></code> برای گروهی به نام «$1» وجود دارد، اما برچسب <code><references group="$1"/></code> متناظر پیدا نشد', # Fuzzy 'cite_error_references_group_mismatch' => 'برچسپ <code><ref></code> درون <code><references></code> در تضاد با ویژگیهای گروه «$1» است.', 'cite_error_references_missing_group' => 'برچسپ <code><ref></code> در <code><references></code> تعریف شده، ویژگیهای گروهی «$1» را دارد که درون متن قبل از آن ظاهر نمیشود.', 'cite_error_references_missing_key' => 'پرچسپ <code><ref></code> که با نام «$1» درون <code><references></code> تعریف شده، در متن قبل از آن استفاده نشدهاست.', @@ -1194,8 +1188,6 @@ $messages['fa'] = array( 'cite_error_empty_references_define' => 'برچسپ <code><ref></code> تعریف شده درون <code><references></code> با نام «$1» محتوایی ندارد.', 'cite_reference_link_key_with_num' => '$1_$2', 'cite_reference_link_prefix' => 'cite_ref-', - 'cite_references_link_accessibility_label' => 'پرش به بالا', - 'cite_references_link_many_accessibility_label' => 'پرش به بالا به:', ); /** Finnish (suomi) @@ -1587,14 +1579,12 @@ Definuj dalše w zdźělence <nowiki>[[MediaWiki:$2]]</nowiki>.', 'cite_error_references_no_text' => 'Njepłaćiwa referenca formy <code><ref></code>; žadyn tekst za referency z mjenom <code>$1</code> podaty.', 'cite_error_included_ref' => 'Kónčny <code></ref></code> za tafličku <code><ref></code> faluje', 'cite_error_refs_without_references' => 'Taflički <code><ref></code> ekistuja, ale žana taflička code><references/></code> je so namakała', - 'cite_error_group_refs_without_references' => 'Taflički <code><ref></code> eksistuja za skupinu z mjenom "$1", ale njeje so wotpowědowaca taflička <code><references group="$1"/></code> namakała abo začinjacy <code></ref></code> faluje', + 'cite_error_group_refs_without_references' => 'Taflički <code><ref></code> eksistuja za skupinu z mjenom "$1", ale njeje so wotpowědowaca taflička <code><references group="$1"/></code> namakała', # Fuzzy 'cite_error_references_group_mismatch' => 'Taflička <code><ref></code> w <code><references></code> je ze skupinskim atributom "$1" w konflikće.', 'cite_error_references_missing_group' => 'Taflička <code><ref></code>, kotraž je w <code><references></code> definowana, ma skupinski atribut "$1", kotryž so w prjedawšim teksće njejewi.', 'cite_error_references_missing_key' => 'Taflička <code><ref></code> z mjenom "$1", kotraž je w <code><references></code> definowana, so w prjedawšim teksće njewužiwa.', 'cite_error_references_no_key' => 'Taflička <code><ref></code>, kotraž je w <code><references></code> definowana, mjenowy atribut nima.', 'cite_error_empty_references_define' => 'Taflička <code><ref></code>, kotraž je w <code><references></code> z mjenom "$1" definowana, wobsah nima.', - 'cite_references_link_accessibility_label' => 'Horje skočić', - 'cite_references_link_many_accessibility_label' => 'Horje skočić do:', ); /** Haitian (Kreyòl ayisyen) @@ -1744,38 +1734,38 @@ $messages['ig'] = array( * @author Lam-ang */ $messages['ilo'] = array( - 'cite-desc' => 'Aginayon kadagiti etiketa ti <nowiki><ref[ name=id]></nowiki> ken <nowiki><references/></nowiki>, para kadagiti panagdakamat', + 'cite-desc' => 'Agnayon ti <nowiki><ref[ name=id]></nowiki> ken <nowiki><references/></nowiki> nga etiketa, para kadagiti pagdakamat', 'cite_error' => 'Biddut ti dakamat: $1', - 'cite_error_ref_numeric_key' => 'Imbalido ti etiketa ti <code><ref></code>; -ti nagan ket saan a mabalin a nalaka a sibubukel. Agusar ti makaipalawag a titulo', - 'cite_error_ref_no_key' => 'Imbalido nga etiketa ti <code><ref></code> ; -dagita ref nga awan nagyanna ket masapul nga adda naganna', - 'cite_error_ref_too_many_keys' => 'Imbalido nga etiketa ti <code><ref></code> ; + 'cite_error_ref_numeric_key' => 'Imbalido a <code><ref></code> nga etiketa; +ti nagan ket saan a mabalin a nalaka a sibubukel. Agusar ti agipalpalawag a titulo', + 'cite_error_ref_no_key' => 'Imbalido a <code><ref></code> nga etiketa; +dagita ref nga awan nagyanna ket masapul a managanan', + 'cite_error_ref_too_many_keys' => 'Imbalido a <code><ref></code> nga etiketa; imbalido a nag-nagan, a kas adu unay', - 'cite_error_ref_no_input' => 'Imbalido nga etiketa ti <code><ref></code> ; + 'cite_error_ref_no_input' => 'Imbalido a <code><ref></code> nga etiketa; dagiti ref nga awan ti naganna ket masapul nga addaan ti nagyan', - 'cite_error_references_invalid_parameters' => 'Imbalido nga etiketa ti <code><references></code>; -saan a maipalubos dagiti parametro. + 'cite_error_references_invalid_parameters' => 'Imbalido a <code><references></code> nga etiketa +awan dagiti parametro a maipalubos. Usaren ti <code><references /></code>', - 'cite_error_references_invalid_parameters_group' => 'Imbalido nga etiketa ti <code><references></code> ; -maipalubos laeng ti parametro ti "grupo" . + 'cite_error_references_invalid_parameters_group' => 'Imbalido a <code><references></code> nga etiketa; +parametro a "grupo" ket ti maipalubos laeng. Usaren ti <code><references /></code> , wenno<code><references group="..." /></code>', - 'cite_error_references_no_backlink_label' => 'Naibusan kadagiti etiketa ti naisangayan a silpo ti likud. -Ipalawag pay ti adu idiay mensahe ti <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki>', - 'cite_error_no_link_label_group' => 'Naibusan kadagiti etiketa ti nangruna a silpo para iti grupo ti "$1". -Ipalawag pay ti adu idiay mensahe ti <nowiki>[[MediaWiki:$2]]</nowiki> .', - 'cite_error_references_no_text' => 'Imbalido nga etiketa ti <code><ref></code> ; -awan ti testo a naited para kadagiti ref a nanaganan <code>$1</code>', - 'cite_error_included_ref' => 'Irikepen ti <code></ref></code> napukaw para iti etiketa ti <code><ref></code>', - 'cite_error_refs_without_references' => 'Ti etiketa ti <code><ref></code> ket addan, ngem awan ti etiketa ti <code><references/></code> a nabirukan', - 'cite_error_group_refs_without_references' => 'Adda dagiti etiketa ti <code><ref></code> para iti grupo a nanaganan ti "$1", ngem awan ti kapada nga etiketa ti <code><references group="$1"/></code> a nabirukan, wenno awan ti pangrikep ti <code></ref></code>', - 'cite_error_references_group_mismatch' => 'Ti etiketa ti <code><ref></code> iday <code><references></code> ket addan ti kasinnungat a gupit ti grupo ti "$1".', - 'cite_error_references_missing_group' => 'Ti etiketa ti <code><ref></code> a naipalawag idiay <code><references></code> ket addaan ti gupit ti grupo ti "$1" a saan nga agparang iti napalabas a testo.', - 'cite_error_references_missing_key' => 'Ti etiketa ti <code><ref></code> nga addaan ti nagan ti "$1" a naipalawag idiay <code><references></code> ket saan a nausar iti napalabas a testo.', - 'cite_error_references_no_key' => 'Ti etiketa ti <code><ref></code> a naipalawag idiay <code><references></code> ket awan ti nainagan a gupit.', - 'cite_error_empty_references_define' => 'Ti etiketa ti <code><ref></code> a naipalawag idiay <code><references></code> nga addaan ti nagan a "$1" ket awan ti nagyanna.', - 'cite_references_link_accessibility_label' => 'Mapan iti ngato', - 'cite_references_link_many_accessibility_label' => 'Mapan aginggana iti:', + 'cite_error_references_no_backlink_label' => 'Naibusan kadagiti nagrunaan a likud ti silpo nga etiketa. +Ipalawag pay ti adu idiay <nowiki>[[MediaWiki:Cite references link many format backlink labels]]</nowiki> a mensahe', + 'cite_error_no_link_label_group' => 'Naibusan ti nangruna a silpo nga etiketa para iti grupo ti "$1". +Ipalawag pay ti adu idiay <nowiki>[[MediaWiki:$2]]</nowiki> a mensahe.', + 'cite_error_references_no_text' => 'Imbalido a <code><ref></code> nga etiketa; +awan ti testo a naited para dagiti ref a nanaganan <code>$1</code>', + 'cite_error_included_ref' => 'Irikrikep ti <code></ref></code> napukaw para iti <code><ref></code> nga etiketa', + 'cite_error_refs_without_references' => 'Ti <code><ref></code> nga etiketa ket addan, ngem awan ti <code><references/></code> nga etiketa a nabirukan', + 'cite_error_group_refs_without_references' => 'Adda dagiti <code><ref></code> para iti grupo a nanaganan ti "$1", ngem awan ti kapada a <code><references group="$1"/></code> nga etiketa ti nabirukan, wenno pangrikep a <code></ref></code> ket awan', + 'cite_error_references_group_mismatch' => 'Ti <code><ref></code> nga etiketa iday <code><references></code> ket addan ti nagsungat a gupit ti grupo "$1".', + 'cite_error_references_missing_group' => 'Ti <code><ref></code> nga etiketa a naipalawag idiay <code><references></code> ket addaan ti gupit ti grupo ti "$1" a saan nga agparang iti napalabas a testo.', + 'cite_error_references_missing_key' => 'Ti <code><ref></code> nga etiketa nga addaan ti nagan ti "$1" a naipalawag idiay <code><references></code> ket saan a nausar iti napalabas a testo.', + 'cite_error_references_no_key' => 'Ti <code><ref></code> nga etiketa a naipalawag idiay <code><references></code> ket awan ti nainagan a gupit.', + 'cite_error_empty_references_define' => 'Ti <code><ref></code> nga etiketa a naipalawag idiay <code><references></code> nga addaan ti nagan a "$1" ket awan ti nagyanna.', + 'cite_references_link_accessibility_label' => 'Lumagto ti ngato', + 'cite_references_link_many_accessibility_label' => 'Lumagto ti ngato iti:', ); /** Ido (Ido) @@ -1888,8 +1878,6 @@ $messages['ja'] = array( 'cite_error_references_missing_key' => '<code><references></code> で定義されている <code><ref></code> タグ (name="$1") は、先行するテキスト内で使用されていません。', 'cite_error_references_no_key' => '<code><references></code> で定義されている <code><ref></code> タグに name 属性がありません。', 'cite_error_empty_references_define' => '<code><references></code> で定義されている <code><ref></code> タグ (name="$1") に内容がありません。', - 'cite_references_link_accessibility_label' => '元の位置に戻る', - 'cite_references_link_many_accessibility_label' => '以下の位置に戻る:', ); /** Jutish (jysk) @@ -1983,7 +1971,7 @@ $messages['ka'] = array( სქოლიოსათვის <code>$1</code> არ არის მითითებული ტექსტი', 'cite_error_included_ref' => 'დამხურავი ტეგი <code></ref></code> დაკარგულია', 'cite_error_refs_without_references' => 'არსებული ტეგისათვის <code><ref></code> ვერ მოიძებნა შესაბამისი ტეგი <code><references/></code>', - 'cite_error_group_refs_without_references' => 'ჯგუფი „$1“ არსებული ტეგებისათვის <code><ref></code> ვერ მოიძებნა შესაბამისი ტეგი <code><references group="$1"/></code>, ან გამოტოვებულია დამხურავი ტეგი <code></ref></code>', + 'cite_error_group_refs_without_references' => 'ჯგუფი „$1“ არსებული ტეგებისათვის <code><ref></code> ვერ მოიძებნა შესაბამისი ტეგი <code><references group="$1"/></code>', # Fuzzy 'cite_error_references_group_mismatch' => 'ტეგს <code><ref></code> <code><references></code>-ში გააჩნია ატრიბუტთა კონფლიქტური ჯგუფები „$1“.', 'cite_error_references_missing_group' => 'ტეგს <code><ref></code>, განმარტებულს <code><references></code>-ში, გააჩნია ჯგუფის ატრიბუტი „$1“, რომელიც ადრეულ ტექსტში არ მოიხსენიება.', 'cite_error_references_missing_key' => 'ტეგი <code><ref></code> სახელად „$1“, გარკვეული <code><references></code>-ში, არ გამოიყენება წინა ტექსტში.', @@ -2207,15 +2195,6 @@ Doe kans d\'r mier insjtelle in \'t sysyeemberich <nowiki>[[MediaWiki:$2]]</nowi 'cite_error_empty_references_define' => 'De tag <code><ref></code> dae is gedefinieerd in <code><references></code> mit de naam "$1" haet geinen inhawd.', ); -/** لوری (لوری) - * @author Mogoeilor - */ -$messages['lrc'] = array( - 'cite_error' => 'خطا جاگه:$1', - 'cite_references_link_accessibility_label' => 'بالا پرسن', - 'cite_references_link_many_accessibility_label' => 'پرستن د', -); - /** Lithuanian (lietuvių) * @author Garas * @author Homo @@ -2374,8 +2353,6 @@ $messages['ml'] = array( 'cite_error_empty_references_define' => ' <code><references></code> ആവശ്യത്തിനായി "$1" എന്ന പേരിൽ നിർവചിക്കപ്പെട്ട <code><ref></code> റ്റാഗിന് ഉള്ളടക്കമൊന്നുമില്ല.', 'cite_reference_link_prefix' => 'ഉദ്ധരിണി_അവലംബം-', 'cite_references_link_prefix' => 'ഉദ്ധരിണി_കുറിപ്പ്-', - 'cite_references_link_accessibility_label' => 'മുകളിലേയ്ക്ക്', - 'cite_references_link_many_accessibility_label' => 'മുകളിൽ ഇവിടേയ്ക്ക്:', ); /** Mongolian (монгол) @@ -2393,7 +2370,7 @@ $messages['mn'] = array( * @author V.narsikar */ $messages['mr'] = array( - 'cite-desc' => '<nowiki><ref[ name=id]></nowiki> व <nowiki><references/></nowiki> हे दोन संदर्भ देण्यासाठी वापरण्यात येणारे शब्द जोडल्या जातील.', + 'cite-desc' => '<nowiki><ref[ name=id]></nowiki> व <nowiki><references/></nowiki> हे दोन संदर्भ देण्यासाठी वापरण्यात येणारे शब्द वाढविले जातील.', 'cite_error' => 'त्रूटी उधृत करा: $1', 'cite_error_ref_numeric_key' => '<code><ref></code> चुकीचा कोड; नाव हे पूर्णांकी संख्या असू शकत नाही, कृपया माहितीपूर्ण शीर्षक द्या', 'cite_error_ref_no_key' => '<code><ref></code> चुकीचा कोड; रिकाम्या संदर्भांना नाव असणे गरजेचे आहे', @@ -2406,17 +2383,14 @@ $messages['mr'] = array( 'cite_error_no_link_label_group' => '"$1" करिता नमूदकेलेल्या कस्टम लिंक खूणा संपल्या . <nowiki>[[MediaWiki:$2]]</nowiki> संदेशात अधिक खूणा नमूद करा', 'cite_error_references_no_text' => '<code><ref></code> चुकीचा कोड; <code>$1</code> नावाने दिलेल्या संदर्भांमध्ये काहीही माहिती नाही', - 'cite_error_included_ref' => '<code><ref></code> ला बंद करणारी <code></ref></code> ही खूणपताका गायब आहे.', - 'cite_error_refs_without_references' => "या पानामधे \"<code><ref></code>\" ही खूणपताका(संदर्भटॅग) आहे, परंतु <code><references/></code> अथवा <code> <nowiki>{{</nowiki> -</code>संदर्भयादी<code><nowiki>}}</nowiki></code>या पैकी एकही लावण्यात आलेले नाही.''' या पानात \"<code><nowiki>{{</nowiki></code>संदर्भयादी<code><nowiki>}}</nowiki></code>\" हा साचा कॉपीपेस्ट करावा''' ''कारण,त्याशिवाय पानाच्या तळाशी संदर्भांचे तपशील दिसणार नाहीत.''", + 'cite_error_included_ref' => '<code><ref></code> ला बंद करणारी <code></ref></code> ही खूण गायब आहे.', + 'cite_error_refs_without_references' => 'पानामधे <code><ref></code> (संदर्भ) आहे, परंतु <code><references/></code> (<nowiki>{{संदर्भयादी}}<nowiki />) सापडले नाही. <nowiki>{{संदर्भयादी}}<nowiki /> असल्याशिवाय पानाच्या तळाशी संदर्भांचे तपशील दिसणार नाहीत.', 'cite_error_group_refs_without_references' => '"$1" नावाच्या गटाकरिता <code><ref></code>खूणपताका उपलब्ध आहेत, पण संबंधीत <code><references group="$1"/></code> खूण मिळाली नाही.', - 'cite_error_references_group_mismatch' => '<code><references></code>मधील खूणपताकेस<code><ref></code> खूणांशी विसंवाद असणारे group attribute "$1" आहे.', - 'cite_error_references_missing_group' => 'गट "$1" मधील <code><ref></code> खूणपताका <code><references></code> ह्या पूर्वी वापल्या गेलेल्या नाहीत.', - 'cite_error_references_missing_key' => '<code><references></code> ह्या मध्ये टाकलेला <code><ref></code> "$1" ह्या नावाची खूणपताका ह्या पूर्वी वापरण्यात आलेली नाही.', - 'cite_error_references_no_key' => '<code><ref></code>खूणपताकेत नमूद गोष्टींना <code><references></code> ला नाम-गुणधर्म नाहीत.', - 'cite_error_empty_references_define' => '<code><ref></code>खूणपताकेत नमूद गोष्टींना, <code><references></code> ज्या "$1" ह्या नावाने संबोधल्या आहेत, त्यात माहिती नाही.', - 'cite_references_link_accessibility_label' => 'वर उडी मारा', - 'cite_references_link_many_accessibility_label' => 'ला वर उडी मारा:', + 'cite_error_references_group_mismatch' => 'tag in <code><references></code>मधील <code><ref></code> खूणांना खटका उडणारे group attribute "$1" आहे.', + 'cite_error_references_missing_group' => 'गट "$1" मधील <code><ref></code> ट्याग <code><references></code> ह्या पूर्वी वापल्या गेलेले नाही', + 'cite_error_references_missing_key' => '<code><references></code> ह्या मध्ये सांगितलेला <code><ref></code> "$1" ह्या नावाचा ट्याग ह्या पूर्वी वापरण्यात आलेला नाही.', + 'cite_error_references_no_key' => '<code><ref></code> ट्याग मध्ये विशारद गोष्टींना <code><references></code> ला नाम गुणधर्म नाहीत', + 'cite_error_empty_references_define' => '<code><ref></code> ट्याग मध्ये विशारद गोष्टीं <code><references></code> ज्या "$1" ह्या नावाने संबोधल्या आहेत त्यात माहिती नाही', ); /** Malay (Bahasa Melayu) @@ -2534,7 +2508,6 @@ $messages['nds-nl'] = array( ); /** Dutch (Nederlands) - * @author Flightmare * @author Niels * @author Romaine * @author Siebrand @@ -2571,8 +2544,6 @@ er is geen tekst opgegeven voor refs met de naam <code>$1</code>', 'cite_error_references_missing_key' => 'De tag <code><ref></code> met de naam "$1" gedefinieerd in <code><references></code> wordt niet eerder in de tekst gebruikt.', 'cite_error_references_no_key' => 'De tag <code><ref></code> die is gedefinieerd in <code><references></code> heeft geen eigenschapsnaam.', 'cite_error_empty_references_define' => 'De tag <code><ref></code> die is gedefinieerd in <code><references></code> met de naam "$1" heeft geen inhoud.', - 'cite_references_link_accessibility_label' => 'Omhoog', - 'cite_references_link_many_accessibility_label' => 'Omhoog naar:', ); /** Norwegian Nynorsk (norsk nynorsk) @@ -2625,8 +2596,6 @@ pas de tèxte per las referéncias nomenadas <code>$1</code>.', 'cite_error_references_missing_key' => 'La balisa <code><ref></code> amb lo nom « $1 » definida dins <code><references></code> es pas utilizada dins lo tèxte precedent.', 'cite_error_references_no_key' => 'La balisa <code><ref></code> definida dins <code><references></code> a pas de nom d’atribut.', 'cite_error_empty_references_define' => 'La balisa <code><ref></code> definida dins <code><references></code> amb lo nom « $1 » a pas de contengut.', - 'cite_references_link_accessibility_label' => 'Anar', - 'cite_references_link_many_accessibility_label' => 'Anar a :', ); /** Oriya (ଓଡ଼ିଆ) @@ -3420,16 +3389,12 @@ Definera fler i <nowiki>[[MediaWiki:$2]]</nowiki>-meddelandet.', ); /** Tamil (தமிழ்) - * @author Jayarathina * @author Shanmugamp7 * @author செல்வா */ $messages['ta'] = array( 'cite-desc' => 'சேர்க்கிறது <nowiki><ref[ name=id]></nowiki>மற்றும் <nowiki><references/></nowiki> குறிச்சொற்கள், மேற்கோள்களுக்காக', 'cite_error' => 'பிழை காட்டு: $1', - 'cite_error_references_no_text' => 'செல்லாத <code><ref></code> குறிச்சொல்; -<code>$1</code> என்னும் பெயரில் உள்ள ref குறிச்சொல்லுக்கு உரையேதும் வழங்கப்படவில்லை', - 'cite_error_refs_without_references' => '<code><ref></code> குறிச்சொல் உள்ளது, ஆனால் <code><references/></code> குறிச்சொல் காணப்படவில்லை', ); /** Telugu (తెలుగు) diff --git a/extensions/Cite/Cite.php b/extensions/Cite/Cite.php index 045bb8cc..4b2f70ff 100644 --- a/extensions/Cite/Cite.php +++ b/extensions/Cite/Cite.php @@ -18,6 +18,8 @@ if ( ! defined( 'MEDIAWIKI' ) ) */ $wgHooks['ParserFirstCallInit'][] = 'wfCite'; +$wgHooks['BeforePageDisplay'][] = 'wfCiteBeforePageDisplay'; + $wgExtensionCredits['parserhook'][] = array( 'path' => __FILE__, @@ -96,4 +98,22 @@ $wgResourceModules['ext.rtlcite'] = $citeResourceTemplate + array( 'position' => 'top', ); +/** + * @param $out OutputPage + * @param $sk Skin + * @return bool + */ +function wfCiteBeforePageDisplay( $out, &$sk ) { + global $wgCiteEnablePopups; + + $out->addModules( 'ext.cite' ); + if ( $wgCiteEnablePopups ) { + $out->addModules( 'ext.cite.popups' ); + } + + /* RTL support quick-fix module */ + $out->addModuleStyles( 'ext.rtlcite' ); + return true; +} + /**#@-*/ diff --git a/extensions/Cite/Cite_body.php b/extensions/Cite/Cite_body.php index 08c60722..27432f47 100644 --- a/extensions/Cite/Cite_body.php +++ b/extensions/Cite/Cite_body.php @@ -155,7 +155,6 @@ class Cite { * @return string */ function ref( $str, $argv, $parser ) { - global $wgCiteEnablePopups; if ( $this->mInCite ) { return htmlspecialchars( "<ref>$str</ref>" ); } else { @@ -163,12 +162,6 @@ class Cite { $this->mInCite = true; $ret = $this->guardedRef( $str, $argv, $parser ); $this->mInCite = false; - $parserOutput = $parser->getOutput(); - $parserOutput->addModules( 'ext.cite' ); - if ( $wgCiteEnablePopups ) { - $parserOutput->addModules( 'ext.cite.popups' ); - } - $parserOutput->addModuleStyles( 'ext.rtlcite' ); return $ret; } } diff --git a/extensions/Cite/SpecialCite.alias.php b/extensions/Cite/SpecialCite.alias.php index cbcdafbb..8061afcc 100644 --- a/extensions/Cite/SpecialCite.alias.php +++ b/extensions/Cite/SpecialCite.alias.php @@ -74,7 +74,7 @@ $specialPageAliases['ce'] = array( 'Cite' => array( 'Дош' ), ); -/** Czech (čeština) */ +/** Czech (česky) */ $specialPageAliases['cs'] = array( 'Cite' => array( 'Citovat' ), ); diff --git a/extensions/Cite/SpecialCite.i18n.php b/extensions/Cite/SpecialCite.i18n.php index 013fbe63..635025d4 100644 --- a/extensions/Cite/SpecialCite.i18n.php +++ b/extensions/Cite/SpecialCite.i18n.php @@ -1955,77 +1955,6 @@ $messages['frp'] = array( 'cite_submit' => 'Citar', ); -/** Northern Frisian (Nordfriisk) - * @author Murma174 - */ -$messages['frr'] = array( - 'cite_article_desc' => 'Diar komt en nei [[Special:Cite|spezial-sidj]] tu, am sitiarin ianfacher tu maagin, an uk en ferwisang bi a werktjüügen', - 'cite_article_link' => 'Detdiar sidj sitiare', - 'tooltip-cite-article' => 'Hü detdiar sidj sitiaret wurd koon', - 'cite' => 'Sitiare', - 'cite_page' => 'Sidj:', - 'cite_submit' => 'Sitiare', - 'cite_text' => "__NOTOC__ -<div class=\"mw-specialcite-bibliographic\"> - -== Bibliograafisk dooten för {{FULLPAGENAME}} == - -* Sidj: {{FULLPAGENAME}} -* Skriiwer: {{SITENAME}} contributors -* Ütjden faan: ''{{SITENAME}}, {{int:sitesubtitle}}''. -* Leetst feranrang: {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC -* Ufrepen: <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}} {{CURRENTTIME}} UTC</citation> -* Permanent URL: {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} -* Sidjenwerjuun ID: {{REVISIONID}} - -</div> -<div class=\"plainlinks mw-specialcite-styles\"> - -== Sitiarmuudin för {{FULLPAGENAME}} == - -=== [[APA muude]] === -{{FULLPAGENAME}}. ({{CURRENTYEAR}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}). ''{{SITENAME}}, {{int:sitesubtitle}}''. Ufrepen <citation>{{CURRENTTIME}}, {{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation> faan {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}. - -=== [[MLA muude]] === -\"{{FULLPAGENAME}}.\" ''{{SITENAME}}, {{int:sitesubtitle}}''. {{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC. <citation>{{CURRENTDAY}} {{CURRENTMONTHABBREV}} {{CURRENTYEAR}}, {{CURRENTTIME}}</citation> <{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}>. - -=== [[MHRA muude]] === -{{SITENAME}} bewerkern, '{{FULLPAGENAME}}', ''{{SITENAME}}, {{int:sitesubtitle}},'' {{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}, {{CURRENTTIME}} UTC, <{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}> [accessed <citation>{{CURRENTDAY}} {{CURRENTMONTHNAME}} {{CURRENTYEAR}}</citation>] - -=== [[Chicago muude]] === -{{SITENAME}} bewerkern, \"{{FULLPAGENAME}},\" ''{{SITENAME}}, {{int:sitesubtitle}},'' {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ufrepen <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>). - -=== [[CBE/CSE muude]] === -{{SITENAME}} bewerkern. {{FULLPAGENAME}} [Internet]. {{SITENAME}}, {{int:sitesubtitle}}; {{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}, {{CURRENTTIME}} UTC [sitiaret <citation>{{CURRENTYEAR}} {{CURRENTMONTHABBREV}} {{CURRENTDAY}}</citation>]. Tu fun faan: -{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}. - -=== [[Bluebook muude]] === -{{FULLPAGENAME}}, {{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}} (ufrepen <citation>{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}</citation>). - -=== [[BibTeX]] iindrach === - - @misc{ wiki:xxx, - author = \"{{SITENAME}}\", - title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\", - year = \"{{CURRENTYEAR}}\", - url = \"{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}\", - note = \"[Online; ufrepen <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\" - } - -Wan det [[LaTeX]]-moduul (<code>\\usepackage{url}</code> uun't iinfeerang) mä en smoker wääb-adres brükt woort, as det ferlicht neter so: - - @misc{ wiki:xxx, - author = \"{{SITENAME}}\", - title = \"{{FULLPAGENAME}} --- {{SITENAME}}{,} {{int:sitesubtitle}}\", - year = \"{{CURRENTYEAR}}\", - url = \"'''\\url{'''{{canonicalurl:{{FULLPAGENAME}}|oldid={{REVISIONID}}}}'''}'''\", - note = \"[Online; ufrepen <citation>{{CURRENTDAY}}-{{CURRENTMONTHNAME}}-{{CURRENTYEAR}}</citation>]\" - } - - -</div> <!--closing div for \"plainlinks\"-->", -); - /** Friulian (furlan) * @author Klenje * @author MF-Warburg @@ -3656,7 +3585,6 @@ $messages['kw'] = array( ); /** Latin (Latina) - * @author Autokrator * @author MissPetticoats * @author SPQRobin * @author UV @@ -3664,7 +3592,6 @@ $messages['kw'] = array( $messages['la'] = array( 'cite_article_desc' => ' Addet [[Special:Cite|citation]] specialem paginam et arcam instrumenti', # Fuzzy 'cite_article_link' => 'Hanc paginam citare', - 'tooltip-cite-article' => 'Institutiones de hanc pagina citanda', 'cite' => 'Paginam citare', 'cite_page' => 'Pagina:', 'cite_submit' => 'Citare', @@ -3673,10 +3600,9 @@ $messages['la'] = array( /** Luxembourgish (Lëtzebuergesch) * @author Kaffi * @author Robby - * @author Soued031 */ $messages['lb'] = array( - 'cite_article_desc' => "Setzt eng [[Special:Cite|Zitatioun op dëser Spezialsäit]] bei an e Link an d'Geschiirkëscht", + 'cite_article_desc' => "Setzt eng [[Special:Cite|Zitatioun op dëser Spezialsäit]] bäi an e Link an d'Geschiirkëscht", 'cite_article_link' => 'Dës Säit zitéieren', 'tooltip-cite-article' => 'Informatioune wéi een dës Säit zitéiere kann', 'cite' => 'Zitéierhëllef', @@ -3803,10 +3729,7 @@ $messages['lo'] = array( * @author Mogoeilor */ $messages['lrc'] = array( - 'cite_article_link' => 'جاگه ای بلگه', - 'cite' => 'جاگه', 'cite_page' => 'بلگه', - 'cite_submit' => 'جاگه', ); /** Lithuanian (lietuvių) @@ -4163,7 +4086,7 @@ $messages['mn'] = array( * @author V.narsikar */ $messages['mr'] = array( - 'cite_article_desc' => 'एक [[Special:Cite|बाह्यदुवे]] देणारे विशेषपान व साधनपेटीचा दुवा जोडते', + 'cite_article_desc' => 'एक विशेष [[Special:Cite|बाह्यदुवे]] देणारे पान व टूलबॉक्सची लिंक तयार करा', 'cite_article_link' => 'हे पान उधृत करा', 'tooltip-cite-article' => 'हे पृष्ठ बघण्यासाठीची माहिती', 'cite' => 'उधृत करा', @@ -5675,12 +5598,11 @@ $messages['sr-ec'] = array( /** Serbian (Latin script) (srpski (latinica)) * @author Liangent * @author Michaello - * @author Milicevic01 * @author Жељко Тодоровић */ $messages['sr-el'] = array( 'cite_article_desc' => 'Dodaje specijalnu stranu za [[Special:Cite|citiranje]] i vezu ka oruđima.', - 'cite_article_link' => 'Bibliografski podaci', + 'cite_article_link' => 'citiranje ove strane', 'tooltip-cite-article' => 'Informacije o tome kako citirati ovu stranu', 'cite' => 'citat', 'cite_page' => 'Stranica:', diff --git a/extensions/Cite/citeParserTests.txt b/extensions/Cite/citeParserTests.txt index 052cd56a..3076eeb6 100644 --- a/extensions/Cite/citeParserTests.txt +++ b/extensions/Cite/citeParserTests.txt @@ -311,20 +311,16 @@ AAA<ref group="参">ref a</ref>BBB<ref group="注">note b</ref>CCC<ref group=" !! result <p>AAA<sup id="cite_ref-1" class="reference"><a href="#cite_note-1">[参 1]</a></sup>BBB<sup id="cite_ref-2" class="reference"><a href="#cite_note-2">[注 1]</a></sup>CCC<sup id="cite_ref-3" class="reference"><a href="#cite_note-3">[参 2]</a></sup> </p> -<dl> -<dt>refs -</dt> -</dl> +<dl><dt>refs +</dt></dl> <ol class="references"> <li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text">ref a</span> </li> <li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text">ref c</span> </li> </ol> -<dl> -<dt>notes -</dt> -</dl> +<dl><dt>notes +</dt></dl> <ol class="references"> <li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text">note b</span> </li> diff --git a/extensions/ConfirmEdit/Asirra.i18n.php b/extensions/ConfirmEdit/Asirra.i18n.php index 45811ce3..23190c29 100644 --- a/extensions/ConfirmEdit/Asirra.i18n.php +++ b/extensions/ConfirmEdit/Asirra.i18n.php @@ -245,17 +245,16 @@ $messages['ja'] = array( ); /** Korean (한국어) - * @author Hym411 * @author 아라 */ $messages['ko'] = array( 'asirra-desc' => 'ConfirmEdit에 대한 Asirra 모듈', - 'asirra-edit' => '자동화된 편집 스팸으로부터 보호하기 위해, 아래 상자에 있는 고양이 사진을 선택하세요:', - 'asirra-addurl' => '편집에 새로운 바깥 링크가 포함되어 있습니다. 자동화된 스팸으로부터 보호하기 위해, 아래 상자에 있는 고양이 사진을 선택하세요:', - 'asirra-badlogin' => '자동화된 비밀번호 크래킹으로부터 보호하기 위해, 아래 상자에 있는 고양이 사진을 선택하세요:', - 'asirra-createaccount' => '자동화된 계정 만들기로부터 위키를 보호하기 위해, 아래 상자에 있는 고양이 사진을 선택하세요:', + 'asirra-edit' => '자동화된 편집 스팸으로부터 보호하기 위해, 아래 상자에 있는 고양이 사진을 선택하세요:', # Fuzzy + 'asirra-addurl' => '편집에 새로운 바깥 링크가 포함되어 있습니다. 자동화된 스팸으로부터 보호하기 위해, 아래 상자에 있는 고양이 사진을 선택하세요:', # Fuzzy + 'asirra-badlogin' => '비밀번호 깨기로부터 보호하기 위해, 아래 상자에 있는 고양이 사진을 선택하세요:', # Fuzzy + 'asirra-createaccount' => '자동화된 계정 만들기로부터 보호하기 위해, 아래 상자에 있는 고양이 사진을 선택하세요:', # Fuzzy 'asirra-createaccount-fail' => '고양이를 올바르게 선택하세요.', - 'asirra-create' => '자동화된 문서 만들기로부터 위키를 보호하기 위해, 아래 상자에 있는 고양이 사진을 선택하세요:', + 'asirra-create' => '자동화된 문서 만들기로부터 보호하기 위해, 아래 상자에 있는 고양이 사진을 선택하세요:', # Fuzzy 'asirra-nojs' => "'''자바스크립트를 활성화하고 문서를 다시 제출하세요.'''", 'asirra-failed' => '고양이 그림을 모두 선택하세요', ); diff --git a/extensions/ConfirmEdit/Captcha.php b/extensions/ConfirmEdit/Captcha.php index b15de61f..3be6d917 100644 --- a/extensions/ConfirmEdit/Captcha.php +++ b/extensions/ConfirmEdit/Captcha.php @@ -355,38 +355,26 @@ class SimpleCaptcha { */ function filterLink( $url ) { global $wgCaptchaWhitelist; - static $regexes = null; + $source = wfMessage( 'captcha-addurl-whitelist' )->inContentLanguage()->text(); - if ( $regexes === null ) { - $source = wfMessage( 'captcha-addurl-whitelist' )->inContentLanguage(); + $whitelist = wfMessage( 'captcha-addurl-whitelist', $source )->isDisabled() + ? false + : $this->buildRegexes( explode( "\n", $source ) ); - $regexes = $source->isDisabled() - ? array() - : $this->buildRegexes( explode( "\n", $source->plain() ) ); + $cwl = $wgCaptchaWhitelist !== false ? preg_match( $wgCaptchaWhitelist, $url ) : false; + $wl = $whitelist !== false ? preg_match( $whitelist, $url ) : false; - if ( $wgCaptchaWhitelist !== false ) { - array_unshift( $regexes, $wgCaptchaWhitelist ); - } - } - - foreach ( $regexes as $regex ) { - if ( preg_match( $regex, $url ) ) { - return false; - } - } - - return true; + return !( $cwl || $wl ); } /** * Build regex from whitelist * @param $lines string from [[MediaWiki:Captcha-addurl-whitelist]] - * @return array Regexes + * @return string Regex or bool false if whitelist is empty * @access private */ function buildRegexes( $lines ) { # Code duplicated from the SpamBlacklist extension (r19197) - # and later modified. # Strip comments and whitespace, then remove blanks $lines = array_filter( array_map( 'trim', preg_replace( '/#.*$/', '', $lines ) ) ); @@ -394,59 +382,34 @@ class SimpleCaptcha { # No lines, don't make a regex which will match everything if ( count( $lines ) == 0 ) { wfDebug( "No lines\n" ); - return array(); + return false; } else { # Make regex # It's faster using the S modifier even though it will usually only be run once // $regex = 'http://+[a-z0-9_\-.]*(' . implode( '|', $lines ) . ')'; // return '/' . str_replace( '/', '\/', preg_replace('|\\\*/|', '/', $regex) ) . '/Si'; - $regexes = array(); - $regexStart = array( - 'normal' => '/^https?:\/\/+[a-z0-9_\-.]*(?:', - 'noprotocol' => '/^(?:', - ); - $regexEnd = array( - 'normal' => ')/Si', - 'noprotocol' => ')/Si', - ); + $regexes = ''; + $regexStart = '/^https?:\/\/+[a-z0-9_\-.]*('; + $regexEnd = ')/Si'; $regexMax = 4096; - $build = array(); + $build = false; foreach ( $lines as $line ) { - # Extract flags from the line - $options = array(); - if ( preg_match( '/^(.*?)\s*<([^<>]*)>$/', $line, $matches ) ) { - if ( $matches[1] === '' ) { - wfDebug( "Line with empty regex\n" ); - continue; - } - $line = $matches[1]; - $opts = preg_split( '/\s*\|\s*/', trim( $matches[2] ) ); - foreach ( $opts as $opt ) { - $opt = strtolower( $opt ); - if ( $opt == 'noprotocol' ) { - $options['noprotocol'] = true; - } - } - } - - $key = isset( $options['noprotocol'] ) ? 'noprotocol' : 'normal'; - // FIXME: not very robust size check, but should work. :) - if ( !isset( $build[$key] ) ) { - $build[$key] = $line; - } elseif ( strlen( $build[$key] ) + strlen( $line ) > $regexMax ) { - $regexes[] = $regexStart[$key] . - str_replace( '/', '\/', preg_replace( '|\\\*/|', '/', $build[$key] ) ) . - $regexEnd[$key]; - $build[$key] = $line; + if ( $build === false ) { + $build = $line; + } elseif ( strlen( $build ) + strlen( $line ) > $regexMax ) { + $regexes .= $regexStart . + str_replace( '/', '\/', preg_replace( '|\\\*/|', '/', $build ) ) . + $regexEnd; + $build = $line; } else { - $build[$key] .= '|' . $line; + $build .= '|' . $line; } } - foreach ( $build as $key => $value ) { - $regexes[] = $regexStart[$key] . - str_replace( '/', '\/', preg_replace( '|\\\*/|', '/', $build[$key] ) ) . - $regexEnd[$key]; + if ( $build !== false ) { + $regexes .= $regexStart . + str_replace( '/', '\/', preg_replace( '|\\\*/|', '/', $build ) ) . + $regexEnd; } return $regexes; } diff --git a/extensions/ConfirmEdit/ConfirmEdit.i18n.php b/extensions/ConfirmEdit/ConfirmEdit.i18n.php index f9f82efc..e5e4c6bf 100644 --- a/extensions/ConfirmEdit/ConfirmEdit.i18n.php +++ b/extensions/ConfirmEdit/ConfirmEdit.i18n.php @@ -20,7 +20,7 @@ To protect the wiki against automated spam, we kindly ask you to solve the simpl 'captcha-create' => 'To create the page, please solve the simple sum below and enter the answer in the box ([[Special:Captcha/help|more info]]):', 'captcha-sendemail' => 'To protect the wiki against automated spamming, we kindly ask you to solve the simple sum below and enter the answer in the box ([[Special:Captcha/help|more info]]):', 'captcha-sendemail-fail' => 'Incorrect or missing confirmation code.', - 'captcha-disabledinapi' => 'This action requires a CAPTCHA, so it cannot be performed through the API.', + 'captcha-disabledinapi' => 'This action requires a captcha, so it cannot be performed through the API.', 'captchahelp-title' => 'CAPTCHA help', 'captchahelp-cookies-needed' => 'You will need to have cookies enabled in your browser for this to work.', 'captchahelp-text' => "Web sites that accept postings from the public, like this wiki, are often abused by spammers who use automated tools to post their links to many sites. @@ -31,7 +31,7 @@ Since this is a task that's hard to automate, it will allow most real humans to Unfortunately this may inconvenience users with limited vision or using text-based or speech-based browsers. At the moment we do not have an audio alternative available. -Please contact the [[Special:ListAdmins|site administrators]] for assistance if this is unexpectedly preventing you from making legitimate actions. +Please contact the [[Special:ListAdmins|site administrators]] for assistance if this is unexpectedly preventing you from making legitimate actions. Hit the \"back\" button in your browser to return to the page editor.", 'captcha-addurl-whitelist' => ' #<!-- leave this line exactly as it is --> <pre> @@ -822,7 +822,6 @@ Gwasgwch botwm 'nôl' eich porwr er mwyn dychwelyd at y dudalen golygu.", /** Danish (dansk) * @author Aputtu * @author Byrial - * @author Christian List * @author Hylle * @author Kaare * @author Peter Alberti @@ -835,7 +834,7 @@ $messages['da'] = array( Som beskyttelse af wikien mod automatiseret spam, skal du løse det enkle regnestykke nedenfor og skrive resultatet i boksen, for at kunne gemme din redigering ([[Special:Captcha/help|flere oplysninger]]):', 'captcha-badlogin' => 'For at beskytte wikien mod automatiseret adgangskodegætning, skal du løse det enkle regnestykke nedenfor og skrive resultatet i boksen ([[Special:Captcha/help|flere oplysninger]]):', 'captcha-createaccount' => 'For at beskytte wikien mod automatisk oprettelse af brugernavne, skal du løse det enkle regnestykke nedenfor og skrive resultatet i boksen ([[Special:Captcha/help|flere oplysninger]]):', - 'captcha-createaccount-fail' => 'Forkert eller manglende bekræftelseskode.', + 'captcha-createaccount-fail' => 'Forkert eller manglende kodeord.', 'captcha-create' => 'For at oprette en ny side, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):', 'captcha-sendemail' => 'For at beskytte wikien mod automatisk spamning, skal du løse det enkle regnestykke nedenfor og skrive resultatet i boksen ([[Special:Captcha/help|flere oplysninger]]):', 'captcha-sendemail-fail' => 'Forkert eller manglende bekræftelseskode.', @@ -1580,14 +1579,13 @@ $messages['gu'] = array( /** Hebrew (עברית) * @author Amire80 - * @author Guycn2 * @author Rotem Liss * @author Rotemliss * @author YaronSh */ $messages['he'] = array( 'captcha-edit' => 'כדי לערוך את הדף, אנא פתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה ([[Special:Captcha/help|מידע נוסף]]):', - 'captcha-desc' => 'מתן טכניקות CAPTCHA להגנה נגד ספאם וניחוש סיסמאות', + 'captcha-desc' => 'מתן טכניקות CAPTCHA להגנה נגד זיבול וניחוש ססמאות', 'captcha-label' => 'CAPTCHA', 'captcha-addurl' => 'עריכתכם כוללת קישורים חיצוניים חדשים. לשם הגנה מפני ספאם אוטומטי, אנא פתרו את תרגיל החיבור הפשוט שלהלן והקלידו את התשובה בתיבה כדי לשמור את עריכתכם ([[Special:Captcha/help|מידע נוסף]]):', @@ -1832,22 +1830,20 @@ Clicca le button 'retro' in tu navigator pro retornar al pagina de modification. * @author Ilham151096 * @author IvanLanin * @author Iwan Novirion - * @author Kenrick95 * @author Rex */ $messages['id'] = array( 'captcha-edit' => 'Untuk menyunting halaman ini, harap pecahkan penjumlahan sederhana di bawah ini dan masukkan jawaban di kotak yang tersedia ([[Special:Captcha/help|info lengkap]]):', 'captcha-desc' => 'Menyediakan teknik captcha untuk melindungi terhadap spam dan penebakan sandi', 'captcha-label' => 'CAPTCHA', - 'captcha-addurl' => "Suntingan Anda menyertakan pranala luar baru. -Sebagai pelindungan terhadap ''spam'' otomatis, Anda harus mengetikkan hasil perhitungan sederhana berikut ini -([[Special:Captcha/help|info lengkap]]):", - 'captcha-badlogin' => 'Untuk melindungi wiki ini dari perengkahan kunci sandi otomatis, harap masukkan hasil perhitungan sederhana berikut dalam kotak yang tersedia ([[Special:Captcha/help|info lengkap]]):', - 'captcha-createaccount' => 'Untuk melindungi wiki ini dari pembuatan akun otomatis, kami meminta Anda untuk mengetikkan hasil perhitungan sederhana di bawah ini dalam kotak yang tersedia -([[Special:Captcha/help|info lengkap]]):', + 'captcha-addurl' => "Suntingan Anda menyertakan pranala luar baru. Sebagai pelindungan terhadap ''spam'' otomatis, Anda harus mengetikkan kata atau hasil perhitungan yang tertera berikut ini:<br /> +([[Special:Captcha/help|info lengkap]])", # Fuzzy + 'captcha-badlogin' => 'Untuk membantu pelindungan terhadap perengkahan kunci sandi otomatis, tolong masukkan kata atau hasil perhitungan sederhana berikut dalam kotak yang tersedia ([[Special:Captcha/help|info lengkap]]):', # Fuzzy + 'captcha-createaccount' => 'Sebagai pelindungan terhadap spam, Anda diharuskan untuk mengetikkan kata atau hasil perhitungan di bawah ini di kotak yang tersedia untuk dapat mendaftarkan pengguna baru:<br /> +([[Special:Captcha/help|info lengkap]])', # Fuzzy 'captcha-createaccount-fail' => 'Kode konfirmasi salah atau belum diisi.', 'captcha-create' => 'Untuk menyunting halaman ini, silakan pecahkan penjumlahan sederhana di bawah ini dan masukkan jawaban di kotak yang tersedia ([[Special:Captcha/help|info lengkap]]):', - 'captcha-sendemail' => 'Untuk melindungi wiki ini dari spam otomatis, kami meminta Anda untuk memecahkan penjumlahan sederhana di bawah ini dan masukkan jawaban di kotak yang tersedia ([[Special:Captcha/help|more info]]):', + 'captcha-sendemail' => 'Sebagai pelindungan terhadap spam, silakan pecahkan penjumlahan sederhana di bawah ini dan masukkan jawaban di kotak yang tersedia ([[Special:Captcha/help|more info]]):', # Fuzzy 'captcha-sendemail-fail' => 'Kode konfirmasi salah atau belum diisi.', 'captcha-disabledinapi' => 'Tindakan ini membutuhkan captcha, sehingga tidak dapat dilakukan melalui API.', 'captchahelp-title' => 'Mengenai Captcha', @@ -2017,7 +2013,6 @@ $messages['ja'] = array( ); /** Jutish (jysk) - * @author Christian List * @author Huslåke * @author Ælsån */ @@ -2025,9 +2020,9 @@ $messages['jut'] = array( 'captcha-edit' => 'For at redigere denne side, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):', 'captcha-desc' => 'Semple captcha implementåsje', # Fuzzy 'captcha-addurl' => 'Din redigering tilføjer nye eksterne henvisninger til artiklen. Som beskyttelse mod automatiseret spam, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):', # Fuzzy - 'captcha-badlogin' => 'For at beskytte mod automatiske forsøg på at gætte adgangskoden, skal du give svaret på regnestykket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):', + 'captcha-badlogin' => 'For at beskytte mod automatiserede gæt på kodeord, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):', # Fuzzy 'captcha-createaccount' => 'For at beskytte mod automatisk oprettelse af brugernavne, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):', # Fuzzy - 'captcha-createaccount-fail' => 'Forkert eller manglende bekræftelseskode.', + 'captcha-createaccount-fail' => 'Forkert eller manglende kodeord.', 'captcha-create' => 'For at oprette en ny side, skal du give svaret på regnestyket nedenfor, og angive resultatet i feltet under det. ([[Special:Captcha/help|mere information]]):', 'captchahelp-title' => 'Captcha-hjælp', 'captchahelp-cookies-needed' => 'Din browser skal understøtte cookies, før dette kan gennemføres.', @@ -2213,9 +2208,9 @@ Bet öñdewine qaýtw barw üşin «Artqa» degen tüýmesin basıñız.', # Fuz $messages['km'] = array( 'captcha-edit' => 'ដើម្បីកែប្រែទំព័រនេះ សូមដោះស្រាយប្រមាណវិធីបូកខាងក្រោមនេះរួចបញ្ជូលចម្លើយទៅក្នុងប្រអប់សិន([[Special:Captcha/help|ព័ត៌មានបន្ថែម]])៖', 'captcha-desc' => 'ផ្ដល់បច្ចេកទេស CAPTCHA ដើម្បីការពារពីស្ប៉ាមនិងការការទាយពាក្យសំងាត់', - 'captcha-addurl' => 'កំណែរបស់អ្នកមានតំណភ្ជាប់ក្រៅថ្មី។ ដើម្បីជួយបង្ការស្ប៉ាមស្វ័យប្រវត្តិ សូមដោះស្រាយប្រមាណវិធីបូកខាងក្រោមនេះរួចបញ្ជូលចម្លើយទៅក្នុងប្រអប់សិនមុនពេលរក្សាទុកកំណែរបស់អ្នក([[Special:Captcha/help|ព័ត៌មានបន្ថែម]])៖', - 'captcha-badlogin' => 'ដើម្បីការពារការបំបែកពាក្យសម្ងាត់ដោយស្វ័យប្រវត្តិ សូមដោះស្រាយផលបូកខាងក្រោមរួចបញ្ជូលចម្លើយទៅក្នុងប្រអប់ ([[Special:Captcha/help|ព័ត៌មានបន្ថែម]])៖', - 'captcha-createaccount' => 'ដើម្បីបង្ការការបង្កើតគណនីស្វ័យប្រវត្តិ សូមដោះស្រាយប្រមាណវិធីបូកខាងក្រោមនេះរួចបញ្ជូលចម្លើយទៅក្នុងប្រអប់សិន([[Special:Captcha/help|ព័ត៌មានបន្ថែម]])៖', + 'captcha-addurl' => 'កំណែរបស់អ្នកមានតំណភ្ជាប់ក្រៅថ្មី។ ដើម្បីជួយបង្ការស្ប៉ាមស្វ័យប្រវត្តិ សូមដោះស្រាយប្រមាណវិធីបូកខាងក្រោមនេះរួចបញ្ជូលចម្លើយទៅក្នុងប្រអប់សិន([[Special:Captcha/help|ព័ត៌មានបន្ថែម]])៖', # Fuzzy + 'captcha-badlogin' => 'ដើម្បីការពារការបំបែកពាក្យសំងាត់ដោយស្វ័យប្រវត្តិ សូមដោះស្រាយផលបូកខាងក្រោមរួចបញ្ជូលចម្លើយទៅក្នុងប្រអប់ ([[Special:Captcha/help|ព័ត៌មានបន្ថែម]])៖', # Fuzzy + 'captcha-createaccount' => 'ដើម្បីបង្ការការបង្កើតគណនីស្វ័យប្រវត្តិ សូមដោះស្រាយប្រមាណវិធីបូកខាងក្រោមនេះរួចបញ្ជូលចម្លើយទៅក្នុងប្រអប់សិន([[Special:Captcha/help|ព័ត៌មានបន្ថែម]])៖', # Fuzzy 'captcha-createaccount-fail' => 'កូដផ្ទៀងផ្ទាត់បាត់បង់ឬមិនត្រឹមត្រូវ។', 'captcha-create' => 'ដើម្បីបង្កើតទំព័រ សូមដោះស្រាយប្រមាណវិធីបូកខាងក្រោមនេះរួចបញ្ជូលចម្លើយទៅក្នុងប្រអប់សិន([[Special:Captcha/help|ព័ត៌មានបន្ថែម]])៖', 'captchahelp-title' => 'ជំនួយអំពី Captcha', @@ -2363,11 +2358,11 @@ Fir dës Wiki virun automatiséiertem Spam ze schütze froe mir Iech fir déi fo 'captcha-disabledinapi' => 'Dës Aktioun brauch e Captcha, dofir ka se net mat enger API gemaach ginn.', 'captchahelp-title' => 'Captcha-Hëllef', 'captchahelp-cookies-needed' => 'Dir musst Cookien an Ärem Browser erlabe fir dat dëst funktionéiert.', - 'captchahelp-text' => "Websäiten, déi et jiddwerengem erlaben Ännerunge virzehuelen, sou wéi op dëser Wiki, ginn dacks vu sougenannte Spammer mëssbraucht, déi automatiséiert hir Linken op vill Internetsäite setzen. Sou Spam-Linke kënne wuel geläscht ginn, mä se sinn trotzdem eng grouss Plo. + 'captchahelp-text' => "Websäiten, déi et jiddwerengem erlaben Ännerunge virzehuelen, sou wéi op dëser Wiki, ginn dacks vu sougenannte Spammer mëssbraucht, déi automatiséiert hir Linken op vill Internetsäite setzen. Esou Spam-Linke kënne wuel geläscht ginn, mä se sinn trotzdem eng grouss Plo. Heiansdo, besonnesch wann nei Internet-Linken op eng Säit derbäigesat ginn, weist dës Wiki Iech e Bild mat faarwegem oder verzerrtem Text a freet Iech fir déi gewise Wierder anzetipppen. Well dëst eng Aufgab ass déi schwéier ze automatiséieren ass, erlaabt dëst, datt Mënschen hir Ännerunge kënnen agi während déi meescht Spammer an aner Roboter-Attacke kënnen ofgewiert ginn. -Leider kann dat zu Schwierigkeete féiere fir Persounen déi net sou gutt gesinn oder déi text-baséiert oder sprooch-baséiert Browser benotzen. +Leider kann dat zu Schwierigkeete féiere fir Persounen déi net esou gutt gesinn oder déi text-baséiert oder sprooch-baséiert Browser benotzen. Zu dësem Zäitpunkt hu mir leider keng audio-Alternativ zu eiser Verfügung. Kontaktéiert w.e.g. [[Special:ListAdmins|een Administrateur]] fir Hëllef wann dëst iech onerwaarter Weis vu legitimen Editen ofhält. @@ -2785,9 +2780,9 @@ Mit den „Trüch“-Knopp vun dien Browser kummst du trüch na dat Ännerfinste */ $messages['nds-nl'] = array( 'captcha-edit' => "Um disse zied te bewarken, mu'j eerst t antwoord op disse eenvoudige somme invullen ([[Special:Captcha/help|meer informasie]]):", - 'captcha-desc' => 'Biedt CAPTCHA-technieken um bescharming te biejen tegen spam en t raojen van wachtwoorden', + 'captcha-desc' => 'Biejt CAPTCHA-technieken um bescharming te biejen tegen moekpost en t raojen van wachtwoorden', 'captcha-addurl' => 'In joew bewarking staon nieje uutgaonde verwiezingen. -Vul ter de bescharming van disse wiki tegen automatiese moekbiedragen t antwoord op de somme in, in t invoerveld dat hieronder steet, um joew bewarking op te slaon:<br /> +Vul ter de bescharming van disse wiki tegen automatiese moekpost t antwoord op de somme in, in t invoerveld dat hieronder steet, um joew bewarking op te slaon:<br /> ([[Special:Captcha/help|meer informasie]])', 'captcha-badlogin' => 'Vul ter de bescharming van disse wiki tegen t automaties kraken van wachtwoorden t antwoord op de somme in, in t invoerveld ([[Special:Captcha/help|meer informasie]]):', 'captcha-createaccount' => 'Vul ter bescharming van disse wiki tegen t automaties anmaken van gebrukers t antwoord op de somme in, in t invoerveld ([[Special:Captcha/help|meer informasie]]):', @@ -2915,10 +2910,9 @@ Trykk på «attende»-knappen for å kome tilbake til endringssida.', */ $messages['oc'] = array( 'captcha-edit' => "Per modificar aquesta pagina, vos cal efectuar lo calcul çaijós e n'inscriure lo resultat dins lo camp ([[Special:Captcha/help|Mai d’entresenhas]]) :", - 'captcha-desc' => 'Ofèrta de tecnicas CAPTCHA per protegir contra lo spam e la descobèrta dels senhals per ensages multiples', + 'captcha-desc' => 'Implementacion captcha simpla', # Fuzzy 'captcha-label' => 'CAPTCHA', - 'captcha-addurl' => "Vòstra modificacion inclutz de ligams extèrnes. -Per nos ajudar dins la proteccion contra lo corrièr indesirable automatizat, calculatz l'operacion simpla çaijós e inscrivissètz-ne lo resultat dins lo camp ([[Special:Captcha/help|mai d'informacions]]) :", + 'captcha-addurl' => "Vòstra modificacion inclutz de ligams URL novèla ; per empachar las connexions automatizadas, vos cal picar los mots que s’afichan dins l’imatge que seguís : <br />([[Special:Captcha/help|Qu'es aquò?]])", # Fuzzy 'captcha-badlogin' => "Per ensajar de contornar las temptativas de cracatge de senhals automatizadas per de robòts, recopiatz lo tèxte çaijós dins la bóstia de tèxte plaçada al dejós d'aqueste. ([[Special:Captcha/help|Mai d’entresenhas]])", # Fuzzy 'captcha-createaccount' => 'Coma proteccion contra las creacions de compte abusivas, entratz lo resultat de l’addicion dins la bóstia çaijós:<br /> ([[Special:Captcha/help|mai d’entresenhas]])', # Fuzzy @@ -3222,7 +3216,6 @@ Pressione o botão 'voltar' de seu navegador para retornar à página de ediçã * @author AlimanRuna */ $messages['qu'] = array( - 'captcha-badlogin' => 'Wikita kikinmanta millay ruraq yaykuna rima chamqaymanta amachanapaqqa, kay qatiq yapayta ruraspa yapasqata kahachapi yaykuchiy ([[Special:Captcha/help|astawan yachay]]):', 'captchahelp-title' => 'Captcha nisqamanta yanapay', ); @@ -4135,8 +4128,7 @@ Nhấn chuột vào nút “Back” của trình duyệt để trở lại trang */ $messages['vo'] = array( 'captcha-edit' => 'Ad redakön yegedi at, dunolös, begö! saedami dono e penolös saedoti in bokil ([[Special:Captcha/help|nüns pluik]]):', - 'captcha-addurl' => 'Redakam olik keninükon yümis plödik nulik. -Ad jelön siti ta peneds badik itjäfidik, dunolös, begö! saedami balugik sököl, e penolös saedoti in bokil ad dakipön redakam ola ([[Special:Captcha/help|nüns pluik]]):', + 'captcha-addurl' => 'Redakam olik keninükon yümis plödik nulik. Ad jelön siti ta peneds itjäfidik, dunolös, begö! saedami sököl, e penolös saedoti in bokil ([[Special:Captcha/help|nüns pluik]]):', # Fuzzy 'captcha-badlogin' => 'Ad jelön siti ta daget itjäfidik letavödas, dunolös, begö! saedami sököl e penolös saedoti in bokil ([[Special:Captcha/help|nüns pluik]]):', # Fuzzy 'captcha-createaccount' => 'Ad jelön siti ta kalijafam itjäfidik, dunolös, begö! saedami sököl e penolös saedoti in bokil ([[Special:Captcha/help|nüns pluik]]):', # Fuzzy 'captcha-createaccount-fail' => 'Kot fümükama paneveräton u paseleton.', diff --git a/extensions/ConfirmEdit/FancyCaptcha.i18n.php b/extensions/ConfirmEdit/FancyCaptcha.i18n.php index 2ac1c973..7f28d048 100644 --- a/extensions/ConfirmEdit/FancyCaptcha.i18n.php +++ b/extensions/ConfirmEdit/FancyCaptcha.i18n.php @@ -37,8 +37,7 @@ $messages['qqq'] = array( 'fancycaptcha-create' => '{{Related|ConfirmEdit-create}}', 'fancycaptcha-edit' => '{{Related|ConfirmEdit-edit}}', 'fancycaptcha-sendemail' => '{{Related|ConfirmEdit-sendemail}}', - 'fancycaptcha-reload-text' => 'Prompts a click to get a new FancyCaptcha image. -{{Identical|Refresh}}', + 'fancycaptcha-reload-text' => 'Prompts a click to get a new FancyCaptcha image.', ); /** Gheg Albanian (Gegë) @@ -273,7 +272,7 @@ $messages['cdo'] = array( * @author Умар */ $messages['ce'] = array( - 'fancycaptcha-addurl' => 'Хьан нисдар чохь керла арахьара хьажорагаш ю. Спамах лардала дехар до лахахь гура чохь гайтан дешнаш язъе ([[Special:Captcha/help|ма-дарра…]]):', + 'fancycaptcha-addurl' => 'Хьан нисдар чохь керла арахьара хьажоригаш ю. Спамах лардала дерхар до лахахь гура чохь гайтан дешнаш язъе ([[Special:Captcha/help|ма-дарра…]]):', # Fuzzy ); /** Sorani Kurdish (کوردی) @@ -283,19 +282,17 @@ $messages['ckb'] = array( 'fancycaptcha-createaccount' => 'بۆ یارمەتیدانی بەرگری لە دروستکردنی خۆکاری ھەژمار، تکایە ئەو وشانە لە خوارەوەدا دیارن لە بۆکسەکەدا بنووسە ([[Special:Captcha/help|زانیاریی زۆرتر]]):', # Fuzzy ); -/** Czech (čeština) +/** Czech (česky) * @author Mormegil - * @author Tchoř */ $messages['cs'] = array( 'fancycaptcha-desc' => 'Pokročilý generátor captcha pro rozšíření „Confirm Edit“', - 'fancycaptcha-addurl' => 'Vaše editace obsahuje nové odkazy formou URL. -Abychom wiki ochránili před automatizovaným spamováním, žádáme vás o opsání textu z následujícího obrázku ([[Special:Captcha/help|více informací]]):', - 'fancycaptcha-badlogin' => 'Abychom wiki ochránili proti automatizovaným pokusům uhodnout heslo, žádáme vás o opsání textu z následujícího obrázku ([[Special:Captcha/help|více informací]]):', - 'fancycaptcha-createaccount' => 'Abychom wiki ochránili proti automatizovanému zakládání účtů, žádáme vás o opsání textu z následujícího obrázku ([[Special:Captcha/help|více informací]]):', + 'fancycaptcha-addurl' => 'Vaše editace obsahuje nové odkazy formou URL; v zájmu ochrany před automatickým spamováním musíte opsat text z následujícího obrázku: ([[Special:Captcha/help|Co tohle znamená?]])', # Fuzzy + 'fancycaptcha-badlogin' => 'V rámci ochrany proti automatickým pokusům uhodnout heslo musíte opsat text z následujícího obrázku. ([[Special:Captcha/help|Co tohle znamená?]])', # Fuzzy + 'fancycaptcha-createaccount' => 'V rámci ochrany před automatickým zakládáním účtů musíte pro provedení registrace opsat text z následujícího obrázku: ([[Special:Captcha/help|Co tohle znamená?]])', # Fuzzy 'fancycaptcha-create' => 'Abyste mohli založit stránku, musíte opsat text z následujícího obrázku: ([[Special:Captcha/help|Co tohle znamená?]])', 'fancycaptcha-edit' => 'Abyste mohli editovat tuto stránku, musíte opsat text z následujícího obrázku: ([[Special:Captcha/help|Co tohle znamená?]])', - 'fancycaptcha-sendemail' => 'Abychom wiki ochránili proti automatizovanému spamování, žádáme vás o opsání textu z následujícího obrázku ([[Special:Captcha/help|více informací]]):', + 'fancycaptcha-sendemail' => 'V rámci ochrany proti automatickému spamování musíte opsat níže zobrazená slova ([[Special:Captcha/help|více informací]]):', # Fuzzy 'fancycaptcha-reload-text' => 'Vygenerovat nový kód', ); @@ -329,7 +326,7 @@ Er mwyn arbed y wici rhag peiriannau sbam, byddwch gystal â theipio'r geiriau a $messages['da'] = array( 'fancycaptcha-addurl' => 'Din ændring tilføjer nye eksterne henvisninger. For at beskytte mod automatiseret spam, skal du indtaste ordene som vises i feltet nedenfor. ([[Special:Captcha/help|mere information]]):', - 'fancycaptcha-badlogin' => 'For at beskytte mod automatiske forsøg på at gætte adgangskoden, skal du indtaste ordene som vises i feltet nedenfor. ([[Special:Captcha/help|mere information]]):', + 'fancycaptcha-badlogin' => 'For at beskytte mod automatiske forsøg på at gætte kodeord, skal du indtaste ordene som vises i feltet nedenfor. ([[Special:Captcha/help|mere information]]):', 'fancycaptcha-createaccount' => 'For at beskytte mod automatisk oprettelse af brugerkonti, der bruges til spam, skal du indtaste ordet som vises i feltet nedenfor. ([[Special:Captcha/help|mere information]]):', 'fancycaptcha-create' => 'For at oprette en ny side, skal du indtaste ordet som vises nedenfor i feltet under det. ([[Special:Captcha/help|mere information]]):', 'fancycaptcha-edit' => 'For at redigere denne side, indtast da venligst ordene, der står i feltet nedenfor ([[Special:Captcha/help|mere information]]):', @@ -484,13 +481,13 @@ $messages['eu'] = array( */ $messages['fa'] = array( 'fancycaptcha-addurl' => 'ویرایش شما حاوی پیوند به بیرون جدیدی است. -برای جلوگیری از هرزنگاری خودکار ویکی، ما با احترام از شما میخواهیم واژهای را که در تصویر میبینید در جعبهٔ زیر وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):', +برای کمک به جلوگیری از هرزنگاری خودکار، لطفاً واژهای را که در تصویر میبینید در جعبه وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):', # Fuzzy 'fancycaptcha-badlogin' => 'برای کمک به جلوگیری از شکستن خودکار گذرواژه، لطفاً واژهای را که در تصویر میبینید را وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):', - 'fancycaptcha-createaccount' => 'برای کمک به جلوگیری از ایجاد خودکار حساب کاربری، ما با احترام از شما میخواهید واژهای را که در تصویر میبینید را در جعبهٔ زیر وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):', + 'fancycaptcha-createaccount' => 'برای کمک به جلوگیری از ایجاد خودکار حساب کاربری، لطفاً واژهای را که در تصویر میبینید وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):', # Fuzzy 'fancycaptcha-create' => 'برای ایجاد این صفحه، لطفاً واژهای را که در تصویر میبینید وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):', 'fancycaptcha-edit' => 'برای ویرایش این صفحه، لطفاً واژهای را که در تصویر میبینید وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):', - 'fancycaptcha-sendemail' => 'برای کمک به محافظت در برابر هرزهنگاری خودکار، ما با احترام از شما میخواهیم واژههایی را که در جعبهٔ زیر نمایش داده میشوند وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):', - 'fancycaptcha-reload-text' => 'تازهکردن', + 'fancycaptcha-sendemail' => 'برای کمک به محافظت در برابر هرزهنگاری خودکار، لطفاً واژههایی را که در جعبهٔ زیر نمایش داده میشوند وارد کنید ([[Special:Captcha/help|اطلاعات بیشتر]]):', # Fuzzy + 'fancycaptcha-reload-text' => 'تازه کردن', ); /** Finnish (suomi) @@ -597,19 +594,18 @@ Zum Schutz vor automatisiertem Spamming gib des Wort in s Fäld unten yy. Druck ); /** Gujarati (ગુજરાતી) - * @author Ashok modhvadia * @author Dsvyas * @author Sushant savla */ $messages['gu'] = array( - 'fancycaptcha-addurl' => 'તમે કરેલા ફેરફારોમાં નવી બાહ્ય કડીઓ સામેલ છે. -વિકિને સ્વચાલિત સ્પેમ/સ્પામ(spam)થી બચાવવા માટે અમે તમને જણાવીએ છીએ કે કૃપયા નીચે આપેલા સરળ દાખલાનો જવાબ તેની બાજુના ખાનામાં લખો. -([[Special:Captcha/help|વધુ વિગત]]):', - 'fancycaptcha-badlogin' => 'આપોઆપ થતી ગુપ્તસંજ્ઞાની ચોરી (password cracking)થી વિકિને બચાવવા માટે અમે તમને જણાવીએ છીએ કે કૃપયા નીચે આપેલા શબ્દ તેની બાજુના ખાનામાં લખો. ([[Special:Captcha/help|વધુ વિગત]]):', - 'fancycaptcha-createaccount' => 'આપોઆપ નવા ખાતા ખુલતા રોકવા અને વિકીને તેનાથી બચાવવા માટે. અમે તમને જણાવીએ છીએ કે કૃપયા નીચે દેખાતા શબ્દો ખાનામાં લખો. ([[Special:Captcha/help|વધુ માહિતી]]):', + 'fancycaptcha-addurl' => 'તમારા ફેરફારમાં નવી બાહ્ય કડીઓ શામિલ છે. +તમે કરેલા ફેરફારોમાં નવી બાહ્ય કડીઓ સામેલ છે. સ્વચાલિત સ્પેમ/સ્પામ(spam) થી બચવા માટે નીચે આપેલા સરળ દાખલાનો જવાબ તેની બાજુના ખાનામાં લખો +([[Special:Captcha/help|more info]]):', # Fuzzy + 'fancycaptcha-badlogin' => 'આપોઆપ થતી ગુપ્તસંજ્ઞાની ચોરી (password cracking)થી બચાવવા માટે નીચે આપેલા શબ્દ તેની બાજુના ખાનામાં લખો ([[Special:Captcha/help|more info]]):', # Fuzzy + 'fancycaptcha-createaccount' => 'આપોઆપ નવા ખાતા ખુલતા રોકવા માટે નીચે દેખાતા શબ્દો ખાનામાં લખો ([[Special:Captcha/help|વધુ માહિતી]]):', # Fuzzy 'fancycaptcha-create' => 'પાનું બનાવવા માટે નીચે દેખાતા શબ્દો ખાનામાં ટાઈપ કરો ([[Special:Captcha/help|વધુ માહિતી]]):', 'fancycaptcha-edit' => 'આ પાનામાં ફેરફાર કરવા માટે નીચે દેખાતા શબ્દો ખાનામાં ટાઈપ કરો ([[Special:Captcha/help|વધુ માહિતી]]):', - 'fancycaptcha-sendemail' => 'વિકિને આપોઆપ થતી સ્પૅમીંગથી બચાવવા માટે. અમે તમને જણાવીએ છીએ કે કૃપયા નીચે આપેલા શબ્દ તેની બાજુના ખાનામાં લખો ([[Special:Captcha/help|વધુ માહિતી]]):', + 'fancycaptcha-sendemail' => 'આપોઆપ થતી સ્પૅમીંગથી બચાવવા માટે નીચે આપેલા શબ્દ તેની બાજુના ખાનામાં લખો ([[Special:Captcha/help|more info]]):', # Fuzzy ); /** Hebrew (עברית) @@ -715,13 +711,13 @@ $messages['id'] = array( * @author Lam-ang */ $messages['ilo'] = array( - 'fancycaptcha-addurl' => 'Dagiti inurnosmo ket aglaon kadagiti baro a silpo ti ruar. -Tapno masalakniban ti wiki kadagiti automatiko nga spam, naemmakami nga agdawat nga ikabilmo dagiti balikas nga agparang dita baba iti kahon ([[Special:Captcha/help|adu pay a pakaammo]]):', - 'fancycaptcha-badlogin' => 'Tapno masalakniban kadagiti automatiko a panagsulbar ti kontrasenias, naemmakami nga agdawat nga ikabilmo dagiti balikas nga agparang dita baba iti kahon ([[Special:Captcha/help|adu pay a pakaammo]]):', - 'fancycaptcha-createaccount' => 'Tapno makasalakniban ti wiki kadagiti automatiko a panagpartuat ti pakabilangan, naemmakami nga agdawat nga ikabilmo dagiti balikas nga agparang dita baba iti kahon ([[Special:Captcha/help|adu pay a pakaammo]]):', + 'fancycaptcha-addurl' => 'Ti inurnos mo ket adda nagyan na a baro a panilpo ti ruar. +Tapno masalakniban kadagiti automatiko a spam, pangaasim nga ikabil ti balikas nga agparang dita baba a kahon. ([[Special:Captcha/help|adu pay a pakaammo]]):', # Fuzzy + 'fancycaptcha-badlogin' => 'Tapno masalakniban kadagiti automatiko a pinagsulbar ti kontrasenias, pangaasim nga ikabil ti balikas nga agparang dita baba a kahon. ([[Special:Captcha/help|adu pay a pakaammo]]):', # Fuzzy + 'fancycaptcha-createaccount' => 'Tapno makasalaknib kadagiti automatiko a pinagaramid ti pakabilangan, pangaasim nga ikabil ti balikas nga agparang dita baba a kahon. ([[Special:Captcha/help|adu pay a pakaammo]]):', # Fuzzy 'fancycaptcha-create' => 'Tapno makaaramid ti panid, pangaasim nga ikabil ti balikas nga agparang dita baba a kahon. ([[Special:Captcha/help|adu pay a pakaammo]]):', 'fancycaptcha-edit' => 'Tapno makaurnos daytoy a panid, pangaasim nga ikabil ti balikas nga agparang dita baba a kahon. ([[Special:Captcha/help|adu pay a pakaammo]]):', - 'fancycaptcha-sendemail' => 'Tapno makasalakniban ti wiki kadagiti automatiko a panag-spam, naemmakami nga agdawat nga ikabilmo dagiti balikas nga agparang dita baba iti kahon ([[Special:Captcha/help|adu pay a pakaammo]]):', + 'fancycaptcha-sendemail' => 'Tapno makasalaknib kadagiti automatiko a pinagspam, pangaasim nga ikabil ti balikas nga agparang dita baba a kahon. ([[Special:Captcha/help|adu pay a pakaammo]]):', # Fuzzy 'fancycaptcha-reload-text' => 'Pasadiwaen', ); @@ -774,12 +770,11 @@ $messages['ja'] = array( ); /** Jutish (jysk) - * @author Christian List * @author Huslåke */ $messages['jut'] = array( 'fancycaptcha-addurl' => 'Din ændring tilføjer nye eksterne henvisninger. For at beskytte mod automatiseret spam, skal du indtaste ordet som vises nedenfor i feltet under det. ([[Special:Captcha/help|mere information]]):', # Fuzzy - 'fancycaptcha-badlogin' => 'For at beskytte mod automatiske forsøg på at gætte adgangskoden, skal du indtaste ordet som vises i feltet nedenfor. ([[Special:Captcha/help|mere information]]):', + 'fancycaptcha-badlogin' => 'For at beskytte mod automatiske forsøg på at gætte kodeord, skal du indtaste ordet som vises nedenfor i feltet under det. ([[Special:Captcha/help|mere information]]):', # Fuzzy 'fancycaptcha-createaccount' => 'For at beskytte mod automatisk oprettelse af brugernavne, der bruges til spam, skal du indtaste ordet som vises nedenfor i feltet under det. ([[Special:Captcha/help|mere information]]):', # Fuzzy 'fancycaptcha-create' => 'For at oprette en ny side, skal du indtaste ordet som vises nedenfor i feltet under det. ([[Special:Captcha/help|mere information]]):', 'fancycaptcha-edit' => 'or at redigere denne side @@ -803,12 +798,12 @@ $messages['jv'] = array( */ $messages['ka'] = array( 'fancycaptcha-addurl' => 'თქვენი ცვლილება შეიცავს ახალ გარე ბმულებს. -ვიკის ავტომატური სპამინგისგან თავდაცვის მიზნით, ჩვენ მოგიწოდებთ, შეიყვანოთ ქვემოთ მოცემული სიტყვები ყუთში ([[Special:Captcha/help|მეტი ინფორმაცია]]):', - 'fancycaptcha-badlogin' => 'ვიკის პაროლების ავტომატური გატეხვისგან თავდაცვის მიზნით, ჩვენ მოგიწოდებთ, შეიყვანოთ ქვემოთ მოცემული სიტყვები ყუთში ([[Special:Captcha/help|მეტი ინფორმაცია]]):', - 'fancycaptcha-createaccount' => 'ვიკის ანგარიშების ავტომატური რეგისტრაციისაგან თავდაცვის მიზნით, ჩვენ მოგიწოდებთ, შეიყვანოთ ნაჩვენები სიმბოლოები ტექსტურ ველში ([[Special:Captcha/help|დეტალურად]]):', +ავტომატური სპამინგისგან თავდაცვის მიზნით, გთხოვთ, შეიყვანოთ ქვემოთ მოცემული სიტყვები ყუთში ([[Special:Captcha/help|მეტი ინფორმაცია]]):', # Fuzzy + 'fancycaptcha-badlogin' => 'პაროლების ავტომატური გატეხვისგან თავდაცვის მიზნით, გთხოვთ, შეიყვანოთ ქვემოთ მოცემული სიტყვები ყუთში ([[Special:Captcha/help|მეტი ინფორმაცია]]):', # Fuzzy + 'fancycaptcha-createaccount' => 'ანგარიშების ავტომატური რეგისტრაციისაგან თავდაცვის მიზნით, გთხოვთ, შეიყვანოთ ნაჩვენები სიმბოლოები ტექსტურ ველში ([[Special:Captcha/help|დეტალურად]]):', # Fuzzy 'fancycaptcha-create' => 'გვერდის შესაქმნელად, გთხოვთ, შეიყვანეთ ასოები, რომლებიც ნაჩვენებია ქვედა სურათზე ([[Special:Captcha/help|დეტალურად…]]):', 'fancycaptcha-edit' => 'გვერდის რედაქტირებისათვის, გთხოვთ, შეიყვანეთ ასოები, რომლებიც ნაჩვენებია ქვედა სურათზე ([[Special:Captcha/help|დეტალურად…]]):', - 'fancycaptcha-sendemail' => 'ვიკის ავტომატური სპამისაგან თავდაცვის მიზნით, ჩვენ მოგიწოდებთ, შეიყვანოთ ქვევით ნაჩვენები სიტყვა ტექსტურ ველში ([[Special:Captcha/help|მეტი ინფორმაცია]]):', + 'fancycaptcha-sendemail' => 'ავტომატური სპამისაგან თავდაცვის მიზნით, გთხოვთ, შეიყვანოთ ქვევით ნაჩვენები სიტყვა ტექსტურ ველში ([[Special:Captcha/help|მეტი ინფორმაცია]]):', # Fuzzy ); /** Kara-Kalpak (Qaraqalpaqsha) @@ -873,9 +868,9 @@ tömendegi körsetilgen sözderdi awmaqqa engiziñiz ([[{{ns:special}}:Captcha/h $messages['km'] = array( 'fancycaptcha-addurl' => 'កំណែប្រែរបស់អ្នកមានតំណភ្ជាប់ខាងក្រៅ។ -ដើម្បីការពារពីស្ប៉ាមស្វ័យប្រវត្តិ សូមបញ្ជូលពាក្យខាងក្រោមទៅក្នុងប្រអប់ ([[Special:Captcha/help|ព័ត៌មានបន្ថែម]])៖', - 'fancycaptcha-badlogin' => 'ដើម្បីការពារការបំបែកពាក្យសម្ងាត់ដោយស្វ័យប្រវត្តិ សូមបញ្ជូលពាក្យខាងក្រោមទៅក្នុងប្រអប់ ([[Special:Captcha/help|ព័ត៌មានបន្ថែម]])៖', - 'fancycaptcha-createaccount' => 'ដើម្បីការពារការបង្កើតគណនីដោយស្វ័យប្រវត្តិ សូមបញ្ជូលពាក្យខាងក្រោមទៅក្នុងប្រអប់ ([[Special:Captcha/help|ព័ត៌មានបន្ថែម]])៖', +ដើម្បីការពារពីស្ប៉ាម(spam)ស្វ័យប្រវត្តិ សូមបញ្ជូលពាក្យខាងក្រោមទៅក្នុងប្រអប់ ([[Special:Captcha/help|ព័ត៌មានបន្ថែម]])៖', # Fuzzy + 'fancycaptcha-badlogin' => 'ដើម្បីការពារការបំបែកពាក្យសំងាត់ដោយស្វ័យប្រវត្តិ សូមបញ្ជូលពាក្យខាងក្រោមទៅក្នុងប្រអប់ ([[Special:Captcha/help|ព័ត៌មានបន្ថែម]])៖', # Fuzzy + 'fancycaptcha-createaccount' => 'ដើម្បីការពារការបង្កើតគណនីដោយស្វ័យប្រវត្តិ សូមបញ្ជូលពាក្យខាងក្រោមទៅក្នុងប្រអប់ ([[Special:Captcha/help|ព័ត៌មានបន្ថែម]])៖', # Fuzzy 'fancycaptcha-create' => 'ដើម្បីបង្កើតទំព័រនេះ សូមបញ្ជូលពាក្យខាងក្រោមទៅក្នុងប្រអប់ ([[Special:Captcha/help|ព័ត៌មានបន្ថែម]])៖', 'fancycaptcha-edit' => 'ដើម្បីកែប្រែទំព័រនេះ សូមបញ្ជូលពាក្យខាងក្រោមទៅក្នុងប្រអប់ ([[Special:Captcha/help|ព័ត៌មានបន្ថែម]])៖', ); @@ -1128,12 +1123,12 @@ As Schutz gegen automaatsch Spam, geev disse Bookstavenreeg in dat Feld ünnen i */ $messages['nds-nl'] = array( 'fancycaptcha-addurl' => "Joew bewarking bevat uutgaonde verwiezingen. -Um dit projekt te bescharmen tegen automatiese spam, mu'j t woord dat hieronder steet invullen ([[Special:Captcha/help|hulpe]]):", +Um dit projekt te bescharmen tegen ongewunste reklame, mu'j t woord dat hieronder steet invullen ([[Special:Captcha/help|hulpe]]):", 'fancycaptcha-badlogin' => "Um disse webstee te beveiligen tegen t kraken van wachtwoorden, mu'j de woorden die'j hieronder zien effen invullen ([[Special:Captcha/help|hulpe]]):", 'fancycaptcha-createaccount' => "Um disse wiki te bescharmen tegen t automaties anmaken van gebrukersprofielen mu'j t woord hieronder invullen ([[Special:Captcha/help|hulpe]]):", 'fancycaptcha-create' => "Um n pagina an te maken, mö'j t woord dat hieronder steet invullen ([[Special:Captcha/help|hulpe]]):", - 'fancycaptcha-edit' => 'Vul de woorden die hieronder staon in um disse zied te bewarken ([[Special:Captcha/help|hulpe]]):', + 'fancycaptcha-edit' => "Joew bewarking bevat nieje uutgaonde verwiezingen. Um disse wiki te bescharmen tegen ongewunste reklame mö'j de woorden hieronder invullen ([[Special:Captcha/help|hulpe]]):", 'fancycaptcha-sendemail' => 'Voer de woorden die hieronder staon in t invoerveld in as bescharming tegen automatiese ongewunste reklame ([[Special:Captcha/help|hulpe]]):', 'fancycaptcha-reload-text' => 'Verniejen', @@ -1287,14 +1282,6 @@ $messages['pt-br'] = array( 'fancycaptcha-reload-text' => 'Atualizar', ); -/** Quechua (Runa Simi) - * @author AlimanRuna - */ -$messages['qu'] = array( - 'fancycaptcha-create' => "P'anqata kamarinaykipaqqa kay qatiq kahachapi kaq rimakunata yaykuchiy ([[Special:Captcha/help|astawan yachay]]):", - 'fancycaptcha-edit' => "Kay p'anqata llamk'anaykipaqqa kay qatiq kahachapi kaq rimakunata yaykuchiy ([[Special:Captcha/help|astawan yachay]]):", -); - /** Romansh (rumantsch) * @author Kazu89 */ @@ -1757,10 +1744,10 @@ $messages['zh-hans'] = array( $messages['zh-hant'] = array( 'fancycaptcha-addurl' => '您的編輯內容中含有本網站以外的連結。 為防止不當程式大量破壞,請輸入以下的文字([[Special:Captcha/help|相關資訊]]):', - 'fancycaptcha-badlogin' => '為幫助wiki防範可自動破解密碼之不當程式,我們請您鍵入下面資訊框中的單詞([[Special:Captcha/help|相關資訊]]):', - 'fancycaptcha-createaccount' => '為幫助wiki防範可自動創建賬戶之不當程式,我們請您鍵入下面資訊框中的單詞([[Special:Captcha/help|相關資訊]]):', + 'fancycaptcha-badlogin' => '為防止不當程式破解密碼,請輸入以下的文字([[Special:Captcha/help|相關資訊]]):', # Fuzzy + 'fancycaptcha-createaccount' => '為防止不當程式大量建立帳戶,請輸入以下的文字([[Special:Captcha/help|相關資訊]]):', # Fuzzy 'fancycaptcha-create' => '為防止不當程式大量建立頁面,請輸入以下的文字([[Special:Captcha/help|相關資訊]]):', 'fancycaptcha-edit' => '如您想要編輯此頁面,請輸入以下的文字([[Special:Captcha/help|相關資訊]]):', - 'fancycaptcha-sendemail' => '為幫助wiki防範垃圾電郵,我們請您鍵入下面資訊框中的單詞([[Special:Captcha/help|相關資訊]]):', + 'fancycaptcha-sendemail' => '為防止不當程式進行破壞,請輸入以下的文字([[Special:Captcha/help|相關資訊]]):', # Fuzzy 'fancycaptcha-reload-text' => '重新整理', ); diff --git a/extensions/ConfirmEdit/FancyCaptcha.php b/extensions/ConfirmEdit/FancyCaptcha.php index cbabb4a0..46002e22 100644 --- a/extensions/ConfirmEdit/FancyCaptcha.php +++ b/extensions/ConfirmEdit/FancyCaptcha.php @@ -62,7 +62,6 @@ $wgAutoloadClasses['FancyCaptcha'] = $dir . '/FancyCaptcha.class.php'; $wgResourceModules['ext.confirmEdit.fancyCaptcha.styles'] = array( 'localBasePath' => $dir . '/resources', 'remoteExtPath' => 'ConfirmEdit/resources', - 'targets' => array( 'mobile', 'desktop' ), 'styles' => 'ext.confirmEdit.fancyCaptcha.css', ); @@ -73,15 +72,5 @@ $wgResourceModules['ext.confirmEdit.fancyCaptcha'] = array( 'dependencies' => 'mediawiki.api', ); -// FIXME: remove, add mobile target to ext.confirmEdit.fancyCaptcha and update -// MobileFrontend accordingly when bug 57629 is resolved -$wgResourceModules['ext.confirmEdit.fancyCaptchaMobile'] = array( - 'localBasePath' => $dir . '/resources', - 'remoteExtPath' => 'ConfirmEdit/resources', - 'scripts' => 'ext.confirmEdit.fancyCaptcha.js', - 'targets' => array( 'mobile', 'desktop' ), - 'dependencies' => 'mobile.startup', -); - $wgAutoloadClasses['ApiFancyCaptchaReload'] = $dir . '/ApiFancyCaptchaReload.php'; $wgAPIModules['fancycaptchareload'] = 'ApiFancyCaptchaReload'; diff --git a/extensions/ConfirmEdit/QuestyCaptcha.i18n.php b/extensions/ConfirmEdit/QuestyCaptcha.i18n.php index 949449fd..ddf2ab6a 100644 --- a/extensions/ConfirmEdit/QuestyCaptcha.i18n.php +++ b/extensions/ConfirmEdit/QuestyCaptcha.i18n.php @@ -793,7 +793,7 @@ Fir d'Wiki géint automatesche Spam-Ännerungen ze schützen, froe mir Iech d'Fr 'questycaptcha-edit' => "Fir dës Säit z'änneren, beäntwert w.e.g. déi Fro hei ënnedrënner ([[Special:Captcha/help|méi Informatiounen]]):", 'questycaptcha-sendemail' => 'Fir ze hëllefe dës Wiki géint automatiséierte Spam ze schütze, beäntwert w.e.g. déi Fro hei ënnendrënner ([[Special:Captcha/help|méi Informatiounen]]):', 'questycaptchahelp-text' => "Websäiten, déi et jiddwerengem erlaben Ännerunge virzehuelen, sou wéi dës Wiki, ginn dacks vu sougenannte Spammer mëssbraucht, déi automatiséiert hir Linken op vill Internetsäite setzen. -Sou Spam-Linke kënne wuel geläscht ginn, mä si sinn trotzdem eng grouss Plo. +Esou Spam-Linke kënne wuel geläscht ginn, mä si sinn trotzdem eng grouss Plo. Heiansdo, besonnesch wann nei Internet-Linken op eng Säit derbäigesat ginn, freet dës Wiki Iech eng Fro ze beäntwerten. Well dëst eng Aufgab ass déi schwéier z'automatiséieren ass, erlaabt dëst datt Mënschen hir Ännerunge kënnen agi während déi meescht Spammer an aner Roboter-Attacke kënnen ofgewiert ginn. diff --git a/extensions/Gadgets/Gadgets.alias.php b/extensions/Gadgets/Gadgets.alias.php index 3b041c51..7f3307a5 100644 --- a/extensions/Gadgets/Gadgets.alias.php +++ b/extensions/Gadgets/Gadgets.alias.php @@ -59,7 +59,7 @@ $specialPageAliases['ce'] = array( 'Gadgets' => array( 'Гаджеташ' ), ); -/** Czech (čeština) */ +/** Czech (česky) */ $specialPageAliases['cs'] = array( 'Gadgets' => array( 'Udělátka' ), ); diff --git a/extensions/Gadgets/Gadgets.i18n.php b/extensions/Gadgets/Gadgets.i18n.php index 2a754600..2cef466a 100644 --- a/extensions/Gadgets/Gadgets.i18n.php +++ b/extensions/Gadgets/Gadgets.i18n.php @@ -634,15 +634,15 @@ Heu de tenir els permisos adequats en el wiki de destinació (incloent-hi els pe */ $messages['ce'] = array( 'gadgets-desc' => 'Атто бо декъашхошна харжам ба [[Special:Preferences#mw-prefsection-gadgets|гIирс нисбарца]] CSS- а JavaScript-хIоттончаш, лато лууш йерш', # Fuzzy - 'prefs-gadgets' => 'Гаджеташ', - 'gadgets-prefstext' => 'Лаххьа балийна леррина гаджеташ могӀам, шуьга шайга латалур йолуш хьай долахь долучу дакъан. -ХӀара гаджеташ дуккхачу хьолехь болх беш ю оцу JavaScript тӀехь, цундела аша латоеза JavaScript шай браузер чохь, цаьрга болх байта. -Диц маделаш, хӀара гаджеташ болх бяш яц хӀо гӀирс нисбо агӀон чохь. + 'prefs-gadgets' => 'Хlоттончаш', + 'gadgets-prefstext' => 'Лаххьа балийна леррина хlоттончаш могlам, шуьга шайга латалур йолуш хьай долахь долучу дакъан. +Хlара хlоттончаш дукхачу хьоляхь болх беш ю оцу JavaScript тlяхь, цундела аша латоеза JavaScript шай дуьнена машан гlирса чохь, цаьрга болх байта. +Диц маделаш, хlара хlоттончаш болх бяш яз хlо гlирс нисбо агlон чохь. -Ишта диц маде, хӀара гаджеташ юкъа йогуш яц кху MediaWiki гlирсашна, мадарра аьльча шу санна декъашхоша шаьш йеш ю. +Ишта диц маде, хlара хlоттончаш юкъа йогуш яз кху MediaWiki гlирсашна, мадарра аьльча шу санна декъашхоша шаьш йеш ю. Адманкуьйгалхошка шайг хийцало и хlоттончи могlам, хlокх могlам гlонца [[MediaWiki:Gadgets-definition|къастам бало]] а [[Special:Gadgets|церах лаьцна]].', - 'gadgets' => 'Гаджеташ', - 'gadgets-title' => 'Гаджеташ', + 'gadgets' => 'Хlоттончаш', + 'gadgets-title' => 'Хlоттончаш', 'gadgets-pagetext' => 'Гlирса хааман могlамаш, къастош йолу хlоттончи цlераш, хуьлаш йолу хIокху [[MediaWiki:Gadgets-definition|къастамца]]]]. ХIокху могIамо атто бо гIирсан хаамаш атта тIе кхочуш барца, цуьнах лаьцна хIоттош а йолш йолучу хIоттончи ишарца.', # Fuzzy 'gadgets-uses' => 'Лелош йу', @@ -1116,7 +1116,7 @@ $1', 'gadgets-export-text' => 'برای برونبری ابزار $1، بر دکمهٔ «{{int:gadgets-export-download}}» کلیک کنید، پروندهٔ بارگیریشده را ذخیره کنید، به ویژه:درونریزی در ویکی مقصد بروید و بارگذاریاش کنید. سپس این را به صفحهٔ مدیاویکی:Gadgets-definition بیفزایید: <pre>$2</pre> لازم است تا در ویکی مقصد دسترسیهای مناسب (شامل حق ویرایش پیغامهای سامانه) را داشته باشید و درونریزی از بارگذاریهای پرونده باید فعال شده باشد.', - 'gadgets-export-download' => 'دریافت', + 'gadgets-export-download' => 'بارگیری', ); /** Finnish (suomi) @@ -1380,7 +1380,6 @@ Special:Import નિયોજીત વિકિ પર Special:Import પર /** Hebrew (עברית) * @author Amire80 * @author Guycn1 - * @author Guycn2 * @author Rotem Liss * @author YaronSh */ @@ -1402,7 +1401,7 @@ $messages['he'] = array( $1', 'gadgets-required-skins' => 'זמין {{PLURAL:$2|בערכות העיצוב הבאות: $1|בערכת העיצוב $1}}', - 'gadgets-default' => 'מופעל לכולם כברירת מחדל.', + 'gadgets-default' => 'מופעל לכולם לפי בררת מחדל.', 'gadgets-export' => 'יצוא', 'gadgets-export-title' => "יצוא גאדג'טים", 'gadgets-not-found' => 'הגאדג׳ט "$1" לא נמצא.', @@ -1638,32 +1637,32 @@ Anda harus memeroleh izin pada wiki tujuan (termasuk hak menyunting pesan sistem * @author Lam-ang */ $messages['ilo'] = array( - 'gadgets-desc' => 'Agpalubos kadagiti agar-aramat nga agpili kadagiti naiduma a [[Special:Gadgets|CSS ken JavaScript a gadget]] iti [[Special:Preferences#mw-prefsection-gadgets|kakaykayatanda]]', - 'prefs-gadgets' => 'Dagiti gadget', - 'gadgets-prefstext' => 'Dita baba ket listaan kadagiti naipangruna a gadget a mabalinmo a pakabaelan iti pakabilangam. -Dagitoy a gadget ket naibatay iti JavaScript, isunga masapul a pakabaelan ti JavaScript idiay "pagbasabasam" tapno agbalin dagitoy. -Laglagipen a dagitoy a gadget ket awan ti pagbanaganna iti daytoy panid ti kakaykayatan. - -Laglagipen pay a dagitoy a naipangruna a gadget ket saan a paset ti sopwer ti MediaWiki, ken kadawyan a pinarang-ay ken tinartaripato babaen dagiti agar-aramat iti lokal a wiki. -Dagiti lokal nga administrador ket mabalinda nga urnosen dagiti [[MediaWiki:Gadgets-definition|panangipalplawag]] ken dagiti [[Special:Gadgets|deskripsion]] dagiti magun-od a gadget.', - 'gadgets' => 'Dagiti gadget', - 'gadgets-title' => 'Dagiti gadget', - 'gadgets-pagetext' => 'Dita baba ket listaan dagiti naipangruna a gadget a mabalin a pakabaelan dagiti agar-aramat iti bukodda a [[Special:Preferences#mw-prefsection-gadgets|panid ti kakaykayatan]], a kas naipalawag babaen dagiti [[MediaWiki:Gadgets-definition|pannakaipalawag]]. -Daytoy a nakabuklan ket mangted ti nalaka a panagserrek kadagiti panid ti mensahe ti sistema a mangipalawag ti tungngal maysa a deskripsion ken kodigo ti gadget.', + 'gadgets-desc' => 'Mabalin dagiti agar-aramat nga agpili iti [[Special:Gadgets|CSS ken JavaScript gadgets]] idiay [[Special:Preferences#mw-prefsection-gadgets|kaykayat da]]', + 'prefs-gadgets' => 'Gadgets', + 'gadgets-prefstext' => 'Adda dita baba ti listaan ti naipangruna a gadgets nga usaren idiay pakabilangam. +Dagitoy a gadgets ket naibasta iti JavaScript, masapul a pakabaelan ti JavaScript idiay "pagbasabasam" tapno agbalin da. +Saan a mabalin nga usaren dagitoy a gadgets ditoy kaykayat a panid. + +Dagitoy a gadgets ket saan a paset ti MediaWiki software, inaramid ken inayaywanan dagiti agar-aramat ti lokal a wiki. +Mabaliwan dagita administrador nga urnosen ti [[MediaWiki:Gadgets-definition|pinakailawag]] ken [[Special:Gadgets|deskripsion]] ti gadgets.', + 'gadgets' => 'Gadgets', + 'gadgets-title' => 'Gadgets', + 'gadgets-pagetext' => 'Dita baba ket adda listaan dagiti naipangruna a gadgets a dagiti agar-aramat ket mapagbalin da idiay [[Special:Preferences#mw-prefsection-gadgets|kaykayat da a panid]], a naipalawag iti [[MediaWiki:Gadgets-definition|dagiti pinakailawag]]. +Daytoy a pinakabuklan ket mangted ti nalaka a pinagserrek kadagit mensahe ti sistema a panid a nagpailawag iti deskripsion ti gadget ken kodigo.', 'gadgets-uses' => 'Usar', - 'gadgets-required-rights' => 'Masapul ti sumaganad a {{PLURAL:$2|karbengan|karkarbengan}}: + 'gadgets-required-rights' => 'Masapul dagiti sumaganad {{PLURAL:$2|a karbengan|dagiti karbengan}}: $1', - 'gadgets-required-skins' => 'Mabalin a magun-od {{PLURAL:$2|iti $1 a kudil|kadagiti sumaganad a kudil: $1}}.', - 'gadgets-default' => 'Pakabaelan a kasisigud para kadagiti amin.', + 'gadgets-required-skins' => 'Adda mabalin idiay {{PLURAL:$2|$1 a kudil|dagiti sumaganad a kudil: $1}}.', + 'gadgets-default' => 'Pakabaelan a kinasigud iti amin nga agar-aramat.', 'gadgets-export' => 'Agipan', 'gadgets-export-title' => 'Agipan ti gadget', 'gadgets-not-found' => 'Saan a nabirukan ti "$1" a gadget.', - 'gadgets-export-text' => 'Ti panag-ipan ti $1 a gadget, pinduten ti buton ti "{{int:gadgets-export-download}}", idulin ti naikarga a papeles, -mapan idiay Special:Import iti papanan a wiki ken ikarganto. Kalpasanna inayon dagiti sumaganad idiay panid ti MediaWiki:Gadgets-definition: + 'gadgets-export-text' => 'Ti pinag-ipan ti $1 a gadget, agtakla idiay "{{int:gadgets-export-download}}" a buton, idulin ti inkarga nga agpababa a papeles, +mapan idiay Special:Import ti papanan a wiki ken ikarga nga agpangato. Ken inayon dagiti sumaganad idiay MediaWiki:Gadgets-definition page: <pre>$2</pre> -Nasken nga addaanka ti maitunos a pammalubos iti papanan a wiki (mairaman ti karbengan a panag-urnos kadagiti mensahe ti sistema) ken nasken a napakabaelan ti panagikarga kadagiti papeles.', - 'gadgets-export-download' => 'Agikaraga', +Masapul nga addaan ka ti husto a pammalubos iti papanan a wiki (nairaman ti karbegnan a pinagbaliw dagiti mensahe ti sistema) ken naipabalin ti pinagala kadagiti naggapu a papeles a naikarga nga agpangato.', + 'gadgets-export-download' => 'Ikarga nga agpababa', ); /** Ido (Ido) @@ -1873,23 +1872,18 @@ $messages['kk-arab'] = array( */ $messages['kk-cyrl'] = array( 'prefs-gadgets' => 'Қажет құралдар', - 'gadgets-prefstext' => 'Төменде өз тіркелгіңізде қоса алатын арнаулы қажет құралдар тізімі берілген. -Осы қажет құралдар көбінесе JavaScript әмірлеріне негізделеді, сондықтан бұлар жұмыс істеуі үшін шолғышыңызда JavaScript қосылған болуы керек. -Бұл баптау бетіне осы қажет құралдар әсер етпейтінін ескеріңіз. + 'gadgets-prefstext' => 'Төменде өз тіркелгіңізде қоса алатын арнаулы қажет құралдар тізімі беріледі. +Осы қажет құралдар көбінесе JavaScript әмірлеріне негізделінеді, сондықтан бұлар жұмыс істеуі үшін шолғышыңызда JavaScript қосылған болуы керек. +Бұл баптау бетіне осы қажет құралдар әсер етпейтінің ескеріңіз. -Тағы да ескеріңіз: осы қажет құралдар MediaWiki бағдарламасының бөлігі емес және бұларды әдетте сіздің жергілікті уикиіңіздің қатысушылары дамытады және қоштайды. -Жергілікті [[Project:Әкімшілер|әкімшілер]] жетімді гаджеттерді [[MediaWiki:Gadgets-definition]] және [[special:Gadgets]] беттері арқылы +Тағы да ескеріңіз: осы қажет құралдар MediaWiki бағдарламасының бөлігі емес, және де бұларды жайшылықта жергілікті уикидің қатысушылары дамытады және қоштайды. +Жергілікті әкімшілер жетімді қажет нәрсе тізімін [[{{ns:mediawiki}}:Gadgets-definition]] және [[{{ns:special}}:Gadgets]] беттері арқылы өңдей алады.', # Fuzzy 'gadgets' => 'Қажет құралдар', 'gadgets-title' => 'Қажет құралдар', - 'gadgets-pagetext' => 'Төменде қатысушылар өзінің [[Special:Preferences#mw-prefsection-gadgets|баптауларынан]] қоса алатын арнаулы қажет құралдар тізімі берілген. [[MediaWiki:Gadgets-definition]] шолу беті арқылы әрбір қажет құралдың сипаттамасы мен әмірін анықтайтын жүйе хабар беттеріне жеңіл қатынай аласыз.', + 'gadgets-pagetext' => 'Төменде арнаулы қажет құралдар тізімі беріледі. [[{{ns:mediawiki}}:Gadgets-definition]] бетінде анықталған қажет құралдарды қатысушылар өзінің баптауында қоса алады. +Бұл шолу беті арқылы әрбір қажет құралдың сипаттамасы мен әмірін анықтайтын жүйе хабар беттеріне жеңіл қатынай аласыз.', # Fuzzy 'gadgets-uses' => 'Қолданыстағылар', - 'gadgets-required-rights' => 'Келесі {{PLURAL:$2|құқықты|құқықтарды}} қажет етеді: $1', - 'gadgets-default' => 'Әркімге автоматты түрде қосылады.', - 'gadgets-export' => 'Экспорттау', - 'gadgets-export-title' => 'Гаджетті экспорттау', - 'gadgets-not-found' => '"$1" гаджеті табылмады.', - 'gadgets-export-download' => 'Түсіру', ); /** Kazakh (Latin script) (qazaqşa (latın)) @@ -2057,7 +2051,7 @@ Ausserdeem sollt Dir wëssen, datt dës Gadgete generell net Deel vu MediaWiki s Lokal Wiki-Administrateure kënnen d'Lëscht von den disponibele Gadgeten op de Säiten [[MediaWiki:Gadgets-definition|Definitioune vun Gadgeten]] a [[Special:Gadgets|Beschreiwunge vu Gadgeten]] änneren.", 'gadgets' => 'Gadgeten', 'gadgets-title' => 'Gadgeten', - 'gadgets-pagetext' => "Ënnendrënner ass eng Lëscht vun de spezielle Gadgeten déi d'Benotzer op hire [[Special:Preferences#mw-prefsection-gadgets|Benotzer-Astellungen]] aschalte kënnen, sou wéi dat op [[MediaWiki:Gadgets-definition|definéiert]] ass. + 'gadgets-pagetext' => "Ënnendrënner ass eng Lëscht vun de spezielle Gadgeten déi d'Benotzer op hire [[Special:Preferences#mw-prefsection-gadgets|Benotzer-Astellungen]] aschalte kënnen, esou wéi dat op [[MediaWiki:Gadgets-definition|definéiert]] ass. Dës Iwwersiicht gëtt einfachen Zougang zu de Systemmessage-Säiten, déi all Gadget beschreiwen an zum Programméiercode vun dem Gadget.", 'gadgets-uses' => 'Benotzt', 'gadgets-required-rights' => "Erfuerdert {{PLURAL:$2|d'Recht|dës Rechter}}: $1.", @@ -2066,8 +2060,8 @@ Dës Iwwersiicht gëtt einfachen Zougang zu de Systemmessage-Säiten, déi all G 'gadgets-export' => 'Export', 'gadgets-export-title' => 'Export vu Gadgeten', 'gadgets-not-found' => 'Gadget "$1" net fonnt.', - 'gadgets-export-text' => 'Fir de Gadget $1 z\'exportéieren klickt w.e.g. op de(n) "{{int:gadgets-export-download}}"-Knäppchen, späichert den erofgelueden Fichier, gitt op Spezial:Import op der Zil-Wiki a luet en do erop. Duerno setzt der op d\'MediaWiki:Gadgets-Definitiouns Säit dëst derbäi:<pre>$2</pre> -Dir musst déi erfuerdert Rechter(inklusiv d\'Recht fir Systemmessagen z\'änneren) op der Zil-Wiki hunn an den Import vun eropgelueden Fichiere muss ageschalt sinn.', + 'gadgets-export-text' => 'Fir de Gadget $1 z\'exportéieren klickt w.e.g. op de(n) "{{int:gadgets-export-download}}"-Knäppchen, späichert den erofgelueden Fichier, gitt op Spezial:Import op der Zil-Wiki a lued en do erop. Duerno setzt der op d\'MediaWiki:Gadgets-Definitiouns Säit dëst derbäi:<pre>$2</pre> +Dir musst déi erfuerdert Rechter(inklusiv d\'Recht fir System-Messagen z\'änneren) op der Zil-Wiki hunn an den Import vun eropgelueden Fichiere muss ageschalt sinn.', 'gadgets-export-download' => 'Eroflueden', ); @@ -2119,9 +2113,6 @@ Doe mós de juuste rèchte höbben óppe doelwie, ouch óm bewirkinge aan systee */ $messages['lrc'] = array( 'prefs-gadgets' => 'چيا هنی', - 'gadgets' => 'گجت یا', - 'gadgets-title' => 'گجت یا', - 'gadgets-uses' => 'کاروردیا', 'gadgets-export' => 'وه صحرا ديئن', 'gadgets-export-download' => 'گرتن', ); @@ -2310,7 +2301,7 @@ $messages['mr'] = array( 'gadgets-title' => 'गॅजेट', 'gadgets-pagetext' => 'खाली तुम्ही तुमच्या सदस्यत्वासाठी [[Special:Preferences#mw-prefsection-gadgets|माझ्या पसंती]] पानावर वापरू शकत असलेल्या [[MediaWiki:Gadgets-definition|व्याख्या]]ने सांगितलेल्या गॅजेट्सची यादी दिलेली आहे. हे पान तुम्हाला प्रत्येक गॅजेट्सचा कोड व व्याख्या देणार्या पानासाठी सोपी संपर्क सुविधा पुरविते.', 'gadgets-uses' => 'उपयोग', - 'gadgets-required-rights' => 'खालील {{PLURAL:$2|अधिकार}} हवेच : + 'gadgets-required-rights' => 'खलील गोष्ठी साठी विनंती {{PLURAL:$2|right|rights}}: $1', 'gadgets-required-skins' => '{{PLURAL:$2|$1 skin|खालील देखाव्यांवर : $1}} उपलब्ध आहेत', @@ -2318,11 +2309,11 @@ $1', 'gadgets-export' => 'निर्यात करा', 'gadgets-export-title' => 'उपकरण निर्यात', 'gadgets-not-found' => 'उपकरण "$1" सापडत नाही.', - 'gadgets-export-text' => '$1 उपकरण-सुविधा निर्यात करण्याकरिता, "{{int:gadgets-export-download}}" कळीवर टिचकी मारा, उतरवलेली संचिका-फाईल जतन करा + 'gadgets-export-text' => '$1 उपकरण-सुविधा निर्यातकरण्या करिता, "{{int:gadgets-export-download}}" कलीवर टिचकी मारा, उतरवलेली संचिका-फाईल जतन करा डेस्टिनेशन विकिच्या विशेष:आयात पानावर जाऊन संचिका-फाईल चढवावी.नंतर खालील MediaWiki:Gadgets-definition पान चढवावे : <pre>$2</pre> तुमच्याकडे डेस्टिनेशन विकिवर (सिस्टीम मेसेजेस सुद्धा संपादीत करण्यासहीत ) सुयोग्य परवानग्या उपलब्ध असणे अत्यावश्यक आहे आणि चढवलेल्या संचिकाकरिता आयात सुविधा सक्षम असणे आवश्यक आहे.', - 'gadgets-export-download' => 'अधिभारण करा', + 'gadgets-export-download' => 'उतरवा', ); /** Malay (Bahasa Melayu) @@ -3188,7 +3179,6 @@ Ju duhet të keni leje të përshtatshme në wiki-n e destinuar (duke përfshir ); /** Serbian (Cyrillic script) (српски (ћирилица)) - * @author Milicevic01 * @author Millosh * @author Nikola Smolenski * @author Rancher @@ -3196,12 +3186,12 @@ Ju duhet të keni leje të përshtatshme në wiki-n e destinuar (duke përfshir */ $messages['sr-ec'] = array( 'gadgets-desc' => 'Омогућава корисницима да изаберу прилагођене [[Special:Gadgets|CSS и јаваскрипт гаџете]] у својим [[Special:Preferences#mw-prefsection-gadgets|подешавањима]]', - 'prefs-gadgets' => 'Геџети', + 'prefs-gadgets' => 'Гаџети', 'gadgets-prefstext' => 'Испод се налази списак посебних гаџета које можете да омогућите на свом налогу. Ове справице су углавном засноване на јаваскрипти, тако да она мора бити омогућена. Гаџети неће утицати на страницу за подешавање. -Они нису део софтвера Медијавики, већ се развијају и одржавају од стране корисника на вашем локалном викију. +Они нису део софтвера Медијавики, већ се развијају и одржавају од стране корисника ваше викије. Администратори могу да измене [[MediaWiki:Gadgets-definition|значења]] и [[Special:Gadgets|описе]] доступних гаџета.', 'gadgets' => 'Гаџети', 'gadgets-title' => 'Гаџети', @@ -3225,7 +3215,6 @@ $1', /** Serbian (Latin script) (srpski (latinica)) * @author Michaello - * @author Milicevic01 * @author Жељко Тодоровић */ $messages['sr-el'] = array( @@ -3235,7 +3224,7 @@ $messages['sr-el'] = array( Ove spravice su uglavnom zasnovane na javaskripti, tako da ona mora biti omogućena. Gadžeti neće uticati na stranicu za podešavanje. -Oni nisu deo softvera Medijaviki, već se razvijaju i održavaju od strane korisnika na vašem lokalnom vikiju. +Oni nisu deo softvera Medijaviki, već se razvijaju i održavaju od strane korisnika vaše vikije. Administratori mogu da izmene [[MediaWiki:Gadgets-definition|značenja]] i [[Special:Gadgets|opise]] dostupnih gadžeta.', 'gadgets' => 'gedžeti', 'gadgets-title' => 'gedžeti', diff --git a/extensions/ImageMap/ImageMap.i18n.php b/extensions/ImageMap/ImageMap.i18n.php index cf4e2655..1e07d69c 100644 --- a/extensions/ImageMap/ImageMap.i18n.php +++ b/extensions/ImageMap/ImageMap.i18n.php @@ -1,6 +1,6 @@ <?php /** - * Internationalisation file for extension ImageMap. + * Internationalisation file for extension FindSpam. * * @file * @ingroup Extensions @@ -366,7 +366,6 @@ $messages['ca'] = array( */ $messages['ce'] = array( 'imagemap_invalid_image' => 'ГӀалат: нийса дац я ишта сурт дац кху чохь', - 'imagemap_no_link' => 'ГӀалат: $1 могӀанан чаккхехь нийса йоцу хьажораг ю', 'imagemap_invalid_title' => 'ГӀалат: могӀана $1 хьажориган корта нийса яц', 'imagemap_description' => 'Суьртах лаьцна', ); diff --git a/extensions/ImageMap/ImageMap.php b/extensions/ImageMap/ImageMap.php index b263bbb5..aa4cfa0d 100644 --- a/extensions/ImageMap/ImageMap.php +++ b/extensions/ImageMap/ImageMap.php @@ -1,20 +1,4 @@ <?php -/** - * ImageMap extension - Allows clickable HTML image maps. - * - * @link https://www.mediawiki.org/wiki/Extension:ImageMap Documentation - * - * @file - * @ingroup Extensions - * @package MediaWiki - * @author Tim Starling - * @copyright (C) 2007 Tim Starling - * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later - */ - -if ( !defined( 'MEDIAWIKI' ) ) { - die( 'This file is a MediaWiki extension, it is not a valid entry point' ); -} $dir = __DIR__ . '/'; $wgExtensionMessagesFiles['ImageMap'] = $dir . 'ImageMap.i18n.php'; diff --git a/extensions/ImageMap/ImageMap_body.php b/extensions/ImageMap/ImageMap_body.php index 7b53285e..e67b4426 100644 --- a/extensions/ImageMap/ImageMap_body.php +++ b/extensions/ImageMap/ImageMap_body.php @@ -1,9 +1,7 @@ <?php + /** - * Main file for extension ImageMap. - * - * @file - * @ingroup Extensions + * Image map extension. * * Syntax: * <imagemap> diff --git a/extensions/InputBox/InputBox.i18n.php b/extensions/InputBox/InputBox.i18n.php index 0d05d036..1c8519f0 100644 --- a/extensions/InputBox/InputBox.i18n.php +++ b/extensions/InputBox/InputBox.i18n.php @@ -355,7 +355,6 @@ $messages['cdo'] = array( * @author Умар */ $messages['ce'] = array( - 'inputbox-error-no-type' => 'Ахьа язъечу меттиган тайп билгала йина яц.', 'tryexact' => 'Леррина лахар', 'searchfulltext' => 'Дуьззина йозанца лахар', 'createarticle' => 'Яззам кхоллар', @@ -950,14 +949,14 @@ $messages['ig'] = array( * @author Lam-ang */ $messages['ilo'] = array( - 'inputbox-desc' => 'Mangipalubos ti panangiraman kadagiti nasakbayan a naipalawag a porma ti HTML', - 'inputbox-error-no-type' => 'Saanmo pay a nainaganan no ania a kita ti partuaten a kahon ti pagikabilan.', - 'inputbox-error-bad-type' => 'Ti kita ti kahon a pigikabilan ti "$1" ket saan a mabigbigan. -Pangngaasi nga inaganam ti "agpartuat", "komento", "biruken", "biruken2", "wenno sibubukel a testo".', + 'inputbox-desc' => 'Pakabaelan na nga agikabil kadagiti napalasin a kinabuklan ti HTML', + 'inputbox-error-no-type' => 'Saan mo pay nga imbaga no ania a kita ti pagikabilan a kahon ti aramiden.', + 'inputbox-error-bad-type' => 'Ti kita ti pigikabilan a kahon "$1" ket saan a ma-ammoan. +Pangaasi ta ibagam nga "agaramid", "komentario", "biruken", "biruken2", "wenno sibubukel a testo".', 'tryexact' => 'Padasem to pudno a kapada', - 'searchfulltext' => 'Agbiruk ti napno a testo', - 'createarticle' => 'Agpartuat ti panid', - 'inputbox-ns-main' => 'Nangruna', + 'searchfulltext' => 'Agbiruk ti sibubukel a testo', + 'createarticle' => 'Agaramid ti panid', + 'inputbox-ns-main' => 'Dati', ); /** Ido (Ido) @@ -1125,7 +1124,7 @@ $messages['ko'] = array( 'inputbox-error-bad-type' => '"$1" 입력 상자 종류는 정의되어 있지 않습니다. "create", "comment", "search", "search2"나 "fulltext" 중 하나를 지정하세요.', 'tryexact' => '일치하는 항목 찾기', - 'searchfulltext' => '전체 글 검색', + 'searchfulltext' => '전체 글 찾기', 'createarticle' => '문서 만들기', 'inputbox-ns-main' => '문서', ); @@ -1349,7 +1348,7 @@ $messages['mn'] = array( */ $messages['mr'] = array( 'inputbox-desc' => 'पूर्वी लिहिलेले HTML अर्ज वापरण्याची परवानगी द्या', - 'inputbox-error-no-type' => 'कुठल्या प्रकारची पृष्ठपेटी तयार करायची ते तुम्ही स्पष्ट केलेले नाही.', + 'inputbox-error-no-type' => 'तुम्ही कुठल्या प्रकारची पृष्ठपेटी तयार करायची ते स्पष्ट केलेले नाही.', 'inputbox-error-bad-type' => 'तुम्ही दिलेला पृष्ठपेटीचा "$1" हा प्रकार ओळखीचा नाही. कृपया "create", "comment", "search" किंवा "search2" किंवा "fulltext".यातील एक निवडा.', 'tryexact' => 'दिलेलेच शब्द शोधा', diff --git a/extensions/Interwiki/Interwiki.i18n.php b/extensions/Interwiki/Interwiki.i18n.php index 8b9c85a0..a2619ff3 100644 --- a/extensions/Interwiki/Interwiki.i18n.php +++ b/extensions/Interwiki/Interwiki.i18n.php @@ -951,7 +951,6 @@ $messages['ce'] = array( 'interwiki_0' => 'яц', 'interwiki_edit' => 'Нисйé', 'interwiki_reasonfield' => 'Бахьан:', - 'interwiki_delquestion' => '«$1» дӀаяккхар', 'interwiki_addbutton' => 'Тlетоха', ); @@ -1087,8 +1086,8 @@ $messages['da'] = array( 'interwiki-legend-hide' => 'Skjul forklaring', 'interwiki_prefix' => 'Præfiks', 'interwiki-prefix-label' => 'Præfiks:', - 'interwiki_prefix_intro' => 'Interwiki præfiks som skal anvendes i <code>[<nowiki />[præfiks:<em>sidenavn</em>]]</code> wikitekst syntaks.', - 'interwiki_url_intro' => 'Skabelon til URL-adresser. Pladsholderen $1 vil blive erstattet af <em>sidenavn</em> af wikitekst, når den ovennævnte wikitekst syntaks bruges.', + 'interwiki_prefix_intro' => 'Interwiki præfiks som skal anvendes i <code>[<nowiki />[præfiks:<em>sidenavn</em>]]</code> wikitext syntaks.', + 'interwiki_url_intro' => 'Skabelon til URL-adresser. Pladsholderen $1 vil blive erstattet af <em>sidenavn</em> af wikitext, når den ovennævnte wikitext syntaks bruges.', 'interwiki_local' => 'Videresend', 'interwiki-local-label' => 'Videresend:', 'interwiki_local_intro' => 'En HTTP-forespørgsel til den lokale wiki med denne interwiki præfiks i URL-adressen er:', @@ -1096,7 +1095,7 @@ $messages['da'] = array( 'interwiki_local_1_intro' => 'Omdirigeret til target URL i interwiki link definitioner (dvs. behandles som referencer i lokale sider).', 'interwiki_trans' => 'Transkluder', 'interwiki-trans-label' => 'Transkluder:', - 'interwiki_trans_intro' => 'Hvis wikitekst syntaksen <code>[<nowiki />[præfiks:<em>sidenavn</em>]]</code> bruges, så:', + 'interwiki_trans_intro' => 'Hvis wikitext syntaksen <code>[<nowiki />[præfiks:<em>sidenavn</em>]]</code> bruges, så:', 'interwiki_1' => 'ja', 'interwiki_0' => 'nej', 'interwiki_error' => 'Fejl: Interwikitabellen er tom eller noget andet gik galt.', @@ -1122,7 +1121,7 @@ Husk, at dette kan bryde eksisterende hyperlinks.', Det findes muligvis ikke.', 'interwiki-badprefix' => 'Det angivne interwikipræfiks "$1" indeholder ugyldige tegn.', 'right-interwiki' => 'Redigere interwikidata', - 'action-interwiki' => 'redigere interwikidata', + 'action-interwiki' => 'ændre dette interwiki-element', ); /** German (Deutsch) @@ -1536,22 +1535,10 @@ Võimalik, et seda pole olemas.', /** Basque (euskara) * @author An13sa * @author Kobazulo - * @author Theklan */ $messages['eu'] = array( - 'interwiki' => 'Ikusi eta aldatu interwikiak', - 'interwiki-title-norights' => 'Ikusi interwikiak', - 'interwiki-desc' => 'Interwiki taula ikusi eta aldatzeko [[Special:Interwiki|orrialde berezi]] bat gehitzen du', - 'interwiki_intro' => 'Hau interwiki taularen ikuspegi orokor bat da.', - 'interwiki-legend-show' => 'Erakutsi legenda', - 'interwiki-legend-hide' => 'Izkutatu legenda', 'interwiki_prefix' => 'Aurrizkia', 'interwiki-prefix-label' => 'Aurrizkia:', - 'interwiki_local' => 'Aurrera', - 'interwiki-local-label' => 'Aurrera:', - 'interwiki_trans' => 'Txertatu', - 'interwiki-trans-label' => 'Txertatu:', - 'interwiki_trans_intro' => '<code>{<nowiki />{prefix:<em>pagename</em>}}</code> wikitestu erako sintaxia erabiltzen bada, orduan:', 'interwiki_1' => 'bai', 'interwiki_0' => 'ez', 'interwiki_edit' => 'Aldatu', @@ -1560,8 +1547,6 @@ $messages['eu'] = array( 'interwiki_deleting' => '"$1" aurrizkia ezabatzen ari zara.', 'interwiki_addbutton' => 'Gehitu', 'interwiki_edittext' => 'Interwiki aurrizkia editatzen', - 'right-interwiki' => 'Interwiki datuak aldatu', - 'action-interwiki' => 'aldatu interwiki sarrera hau', ); /** Persian (فارسی) @@ -1760,13 +1745,6 @@ $messages['frp'] = array( 'action-interwiki' => 'changiér ceta entrâ entèrvouiqui', ); -/** Northern Frisian (Nordfriisk) - * @author Murma174 - */ -$messages['frr'] = array( - 'interwiki-title-norights' => 'Interwiki-dooten uunluke', -); - /** Friulian (furlan) * @author Klenje */ @@ -2385,7 +2363,6 @@ Memora que isto pote rumper ligamines existente.', Es possibile que illo non existe.', 'interwiki-badprefix' => 'Le prefixo interwiki specificate "$1" contine characteres invalide', 'interwiki-submit-empty' => 'Le prefixo e le URL non pote esser vacue.', - 'interwiki-submit-invalidurl' => 'Le protocollo del URL es invalide.', 'log-name-interwiki' => 'Registro del tabella interwiki', 'logentry-interwiki-iw_add' => '$1 {{GENDER:$2|addeva}} le prefixo "$4" ($5) (trans: $6; local: $7) al tabella interwiki', 'logentry-interwiki-iw_edit' => '$1 {{GENDER:$2|modificava}} le prefixo "$4" ($5) (trans: $6; local: $7) in le tabella interwiki', @@ -2851,7 +2828,7 @@ $messages['ko'] = array( 'logentry-interwiki-iw_add' => '$1 사용자가 "$4" ($5) (틀 포함: $6, 로컬: $7) 접두어를 인터위키 테이블에 {{GENDER:$2|추가}}했습니다.', 'logentry-interwiki-iw_edit' => '$1 사용자가 인터위키 테이블의 "$4" ($5) (틀 포함: $6, 로컬: $7) 접두어를 {{GENDER:$2|수정}}했습니다.', 'logentry-interwiki-iw_delete' => '$1 사용자가 인터위키 테이블의 "$4" 접두어를 {{GENDER:$2|삭제}}했습니다.', - 'log-description-interwiki' => '[[Special:Interwiki|인터위키 테이블]]이 바뀐 기록입니다.', + 'log-description-interwiki' => '[[Special:Interwiki|인터위키]] 목록의 바뀐 내역입니다.', 'right-interwiki' => '인터위키 목록 고치기', 'action-interwiki' => '이 인터위키 접두어 바꾸기', ); @@ -3284,12 +3261,11 @@ $messages['mn'] = array( /** Marathi (मराठी) * @author Kaustubh - * @author V.narsikar */ $messages['mr'] = array( 'interwiki' => 'आंतरविकि डाटा पहा व संपादा', 'interwiki-title-norights' => 'अंतरविकि डाटा पहा', - 'interwiki-desc' => 'आंतरविकि सारणी पाहण्यासाठी व संपादण्यासाठी एक [[Special:Interwiki|विशेष पान]] वाढविते', + 'interwiki-desc' => 'आंतरविकि सारणी पाहण्यासाठी व संपादन्यासाठी एक [[Special:Interwiki|विशेष पान]] वाढविते', 'interwiki_intro' => 'आंतरविकि सारणी बद्दल अधिक माहीतीसाठी [http://www.mediawiki.org/wiki/Interwiki_table MediaWiki.org] पहा.', # Fuzzy 'interwiki_prefix' => 'उपपद (पूर्वप्रत्यय)', 'interwiki-prefix-label' => 'उपपद (पूर्वप्रत्यय):', # Fuzzy @@ -3304,11 +3280,11 @@ $messages['mr'] = array( 'interwiki_addbutton' => 'वाढवा', 'interwiki_added' => '"$1" उपपद आंतरविकि सारणी मध्ये वाढविण्यात आलेले आहे.', 'interwiki_addfailed' => '"$1" उपपद आंतरविकि सारणी मध्ये वाढवू शकलेलो नाही. कदाचित ते अगोदरच अस्तित्वात असण्याची शक्यता आहे.', - 'interwiki_edittext' => 'एक आंतरविकि उपपद संपादित आहे', - 'interwiki_editintro' => 'तुम्ही एक आंतरविकि उपपद संपादित आहात. + 'interwiki_edittext' => 'एक अंतरविकि उपपद संपादित आहे', + 'interwiki_editintro' => 'तुम्ही एक अंतरविकि उपपद संपादित आहात. लक्षात ठेवा की यामुळे अगोदर दिलेले दुवे तुटू शकतात.', - 'interwiki_edited' => 'आंतरविकि सारणीमध्ये "$1" उपपद यशस्वीरित्या बदलण्यात आलेले आहे.', - 'interwiki_editerror' => 'आंतरविकि सारणीमध्ये "$1" उपपद बदलू शकत नाही. + 'interwiki_edited' => 'अंतरविकि सारणीमध्ये "$1" उपपद यशस्वीरित्या बदलण्यात आलेले आहे.', + 'interwiki_editerror' => 'अंतरविकि सारणीमध्ये "$1" उपपद बदलू शकत नाही. कदाचित ते अस्तित्वात नसेल.', 'log-name-interwiki' => 'आंतरविकि सारणी नोंद', 'log-description-interwiki' => '[[Special:Interwiki|आंतरविकि सारणीत]] झालेल्या बदलांची ही सूची आहे.', @@ -4078,9 +4054,6 @@ Existe um [[Special:Log/interwiki|registro de modificações]] à tabela de inte 'interwiki-submit-empty' => 'O prefixo e o URL não podem estar vazios.', 'interwiki-submit-invalidurl' => 'O protocolo do URL é inválido.', 'log-name-interwiki' => 'Registro da tabela de interwikis', - 'logentry-interwiki-iw_add' => '$1 {{GENDER:$2|adicionou}} o prefixo "$4" ($5) (trans: $6; local: $7) à tabela de interwikis', - 'logentry-interwiki-iw_edit' => '$1 {{GENDER:$2|modificou}} o prefixo "$4" ($5) (trans: $6; local: $7) na tabela de interwikis', - 'logentry-interwiki-iw_delete' => '$1 {{GENDER:$2|removeu}} o prefixo "$4" da tabela de interwikis', 'log-description-interwiki' => 'Este é um registro das alterações à [[Special:Interwiki|tabela de interwikis]].', 'right-interwiki' => 'Editar dados de interwiki', 'action-interwiki' => 'alterar esta entrada interwiki', @@ -4438,7 +4411,6 @@ Morda ne obstaja.', ); /** Serbian (Cyrillic script) (српски (ћирилица)) - * @author Milicevic01 * @author Rancher * @author Sasa Stefanovic * @author Жељко Тодоровић @@ -4480,14 +4452,13 @@ $messages['sr-ec'] = array( 'interwiki_editerror' => 'Префикс "$1" не може бити измењен у табели међувикија. Вероватно затшо што не постоји.', 'interwiki-badprefix' => 'Задати међувики префикс "$1" садржи недозвољене знакове', - 'log-name-interwiki' => 'Дневник табеле међувикија', + 'log-name-interwiki' => 'Историја табеле међувикија', 'log-description-interwiki' => 'Ово је историја измена [[Special:Interwiki|табеле међувикија]].', 'right-interwiki' => 'уређивање међувикија', ); /** Serbian (Latin script) (srpski (latinica)) * @author Michaello - * @author Milicevic01 * @author Жељко Тодоровић */ $messages['sr-el'] = array( @@ -4526,7 +4497,7 @@ Imajte na umu da može da ošteti postojeće međuviki veze.', 'interwiki_editerror' => 'Prefiks "$1" ne može biti izmenjen u tabeli međuvikija. Verovatno zatšo što ne postoji.', 'interwiki-badprefix' => 'Zadati međuviki prefiks "$1" sadrži nedozvoljene znakove', - 'log-name-interwiki' => 'Dnevnik tabele međuvikija', + 'log-name-interwiki' => 'Istorija tabele međuvikija', 'log-description-interwiki' => 'Ovo je istorija izmena [[Special:Interwiki|tabele međuvikija]].', 'right-interwiki' => 'Izmeni međuviki', ); @@ -4585,16 +4556,13 @@ $messages['sv'] = array( 'interwiki_prefix' => 'Prefix', 'interwiki-prefix-label' => 'Prefix:', 'interwiki_prefix_intro' => 'Interwiki-prefix avsedda att användas i <code>[<nowiki />[prefix:<em>pagename</em>]]</code>-wikisyntax.', - 'interwiki_url_intro' => 'Mall för webbadresser. Platshållaren $1 kommer att ersättas av <em>sidnamnet</em> i wikitexten, när den ovannämnda wikitextsyntaxen används.', 'interwiki_local' => 'Vidarebefordra', 'interwiki-local-label' => 'Vidarebefordra:', 'interwiki_local_intro' => 'En HTTP-förfrågan till den lokala wikin med denna interwiki-prefix i webbadressen är:', 'interwiki_local_0_intro' => 'inte accepterad, vanligtvis blockerad av "sidan kunde inte hittas".', - 'interwiki_local_1_intro' => 'omdirigeras till måladressen som anges i definitionerna av interwiki-länken (d.v.s. behandlas som referenser i lokala sidor).', 'interwiki_trans' => 'Transkludera', 'interwiki-trans-label' => 'Transkludera:', 'interwiki_trans_intro' => 'Om wikitextsyntax <code>{<nowiki />{prefix:<em>pagename</em>}}</code> används så:', - 'interwiki_trans_1_intro' => 'tillåt inkludering från utländska wikin, om interwiki-inkluderingar är allmänt tillåten på denna wiki.', 'interwiki_trans_0_intro' => 'tillåt inte det, leta istället efter en sida i mall-namnrymden.', 'interwiki_intro_footer' => 'Se [//www.mediawiki.org/wiki/Manual:Interwiki_table MediaWiki.org] för mer information om interwikitabellen. Det finns en [[Special:Log/interwiki|logg över ändringar]] i interwikitabellen.', @@ -5233,7 +5201,7 @@ $messages['yue'] = array( */ $messages['zh-hans'] = array( 'interwiki' => '查看和编辑跨wiki数据', - 'interwiki-title-norights' => '查看跨wiki数据', + 'interwiki-title-norights' => '查看跨维基数据', 'interwiki-desc' => '新增[[Special:Interwiki|特殊页面]]以查看和编辑跨wiki表', 'interwiki_intro' => '这是跨wiki表的概览。', 'interwiki-legend-show' => '显示说明', @@ -5256,7 +5224,7 @@ $messages['zh-hans'] = array( 'interwiki_1' => '是', 'interwiki_0' => '否', 'interwiki_error' => '错误: 跨wiki表为空,或是发生其它错误。', - 'interwiki-cached' => '跨维基数据是缓存的。缓存不能被修改。', + 'interwiki-cached' => '跨wiki数据已缓存。缓存不能编辑。', 'interwiki_edit' => '编辑', 'interwiki_reasonfield' => '理由:', 'interwiki_delquestion' => '正在删除“$1”', @@ -5284,7 +5252,7 @@ $messages['zh-hans'] = array( 'logentry-interwiki-iw_edit' => '$1{{GENDER:$2|已修改}}跨wiki表中的前缀“$4”($5) (包含:$6;本地:$7)', 'logentry-interwiki-iw_delete' => '$1已从跨wiki表中{{GENDER:$2|删除}}前缀“$4”', 'log-description-interwiki' => '这是一个[[Special:Interwiki|跨wiki表]]的更改日志。', - 'right-interwiki' => '编辑跨wiki数据', + 'right-interwiki' => '编辑跨维基数据', 'action-interwiki' => '更改该跨维基条目', ); diff --git a/extensions/LocalisationUpdate/LocalisationUpdate.i18n.php b/extensions/LocalisationUpdate/LocalisationUpdate.i18n.php index 194bb1e3..c45af9e2 100644 --- a/extensions/LocalisationUpdate/LocalisationUpdate.i18n.php +++ b/extensions/LocalisationUpdate/LocalisationUpdate.i18n.php @@ -304,10 +304,9 @@ $messages['ksh'] = array( /** Luxembourgish (Lëtzebuergesch) * @author Robby - * @author Soued031 */ $messages['lb'] = array( - 'localisationupdate-desc' => 'hält déi lokaliséiert Messagen sou aktuell wéi méiglech.', + 'localisationupdate-desc' => 'hält déi lokaliséiert Messagen esou aktuell wéi méiglech.', ); /** Macedonian (македонски) diff --git a/extensions/Nuke/Nuke.alias.php b/extensions/Nuke/Nuke.alias.php index 973f92ee..0b27b4a5 100644 --- a/extensions/Nuke/Nuke.alias.php +++ b/extensions/Nuke/Nuke.alias.php @@ -201,7 +201,7 @@ $specialPageAliases['nl'] = array( /** Norwegian Nynorsk (norsk nynorsk) */ $specialPageAliases['nn'] = array( - 'Nuke' => array( 'Massesletting', 'Masseslett' ), + 'Nuke' => array( 'Massesletting' ), ); /** Polish (polski) */ diff --git a/extensions/Nuke/Nuke.i18n.php b/extensions/Nuke/Nuke.i18n.php index 71ee547a..f72d208d 100644 --- a/extensions/Nuke/Nuke.i18n.php +++ b/extensions/Nuke/Nuke.i18n.php @@ -456,7 +456,6 @@ Unesite korisničko ime ili IP adresu za izlistavanje stranica koje se brišu il /** Catalan (català) * @author Aleator - * @author Alvaro Vidal-Abarca * @author Paucabot * @author SMP * @author Toniher @@ -464,7 +463,7 @@ Unesite korisničko ime ili IP adresu za izlistavanje stranica koje se brišu il $messages['ca'] = array( 'nuke' => 'Eliminació massiva', 'nuke-desc' => "Dóna als administradors l'habilitat d'[[Special:Nuke|esborrar pàgines massivament]]", - 'nuke-nopages' => 'No hi ha pàgines noves de [[Special:Contributions/$1|{{GENDER:$1|$1}}]] als canvis recents.', + 'nuke-nopages' => 'No hi ha pàgines noves de [[Special:Contributions/$1|$1]] als canvis recents.', # Fuzzy 'nuke-list' => 'Les següents pàgines han estat creades recentment per [[Special:Contributions/$1|$1]]; feu un comentari i cliqueu el botó per a esborrar-les.', # Fuzzy 'nuke-defaultreason' => 'Esborrat massiu de pàgines creades per $1', # Fuzzy @@ -493,7 +492,6 @@ $messages['ce'] = array( 'nuke-userorip' => 'Декъашхочун цӀе, IP-адрес (еса йита мега):', 'nuke-maxpages' => 'АгӀонашан максимальни дукхалла:', 'nuke-editby' => 'Кхолийна {{GENDER:$1|декъашхочо}} [[Special:Contributions/$1|$1]]', - 'nuke-delete-more' => '[[Special:Nuke|Дуккха агӀонаш дӀаяхар]]', 'nuke-pattern' => 'Кеп агӀона цӀеран:', 'nuke-viewchanges' => 'ХӀоттина болу хийцам', 'nuke-namespace' => 'Къастае ана цӀераш:', @@ -513,11 +511,10 @@ $messages['ckb'] = array( 'right-nuke' => 'سڕینەوەی پەڕەکان بەکۆمەڵ', ); -/** Czech (čeština) +/** Czech (česky) * @author Danny B. * @author Jkjk * @author Li-sung - * @author Littledogboy * @author Matěj Grabovský * @author Mormegil */ @@ -530,8 +527,8 @@ $messages['cs'] = array( vyplňte komentář a všechny smažte kliknutím na tlačítko.', 'nuke-list-multiple' => 'Nedávno byly vytvořeny následující stránky; zadáním komentáře a stisknutím tlačítka je smažete.', - 'nuke-defaultreason' => 'Hromadné smazání stránek, které {{GENDER:$1|vytvořil|vytvořila}} [[Special:Contributions/$1|$1]]', - 'nuke-multiplepeople' => 'Hromadné smazání nedávno založených stránek', + 'nuke-defaultreason' => 'Hromadné odstranění stránek, které {{GENDER:$1|vytvořil|vytvořila}} [[Special:Contributions/$1|$1]]', + 'nuke-multiplepeople' => 'Hromadné odstranění nedávno založených stránek', 'nuke-tools' => 'Tento nástroj umožňuje hromadné smazání stránek nedávno vytvořených zadaným uživatelem nebo IP adresou. Zadejte uživatelské jméno nebo IP adresu, zobrazí se seznam stránek ke smazání; případně ponechte prázdné pro všechny uživatele.', 'nuke-submit-user' => 'Provést', @@ -868,7 +865,7 @@ $messages['fa'] = array( 'nuke-userorip' => 'نام کاربری، نشانی آیپی یا خالی:', 'nuke-maxpages' => 'حداکثر تعداد صفحهها:', 'nuke-editby' => 'ایجاد شده توسط [[Special:Contributions/$1|{{GENDER:$1|$1}}]]', - 'nuke-deleted' => "صفحهٔ '''$1''' حذف شدهاست.", + 'nuke-deleted' => "صفحهٔ '''$1''' حذف شده است.", 'nuke-not-deleted' => "صفحهٔ [[:$1]] را '''نمیتوان''' حذف کرد.", 'nuke-delete-more' => '[[Special:Nuke|حذف صفحههای بیشتر]]', 'nuke-pattern' => 'الگو برای نام صفحه:', @@ -881,10 +878,8 @@ $messages['fa'] = array( * @author Beluga * @author Crt * @author Jaakonam - * @author Mies * @author Nike * @author Olli - * @author Pxos * @author Stryn */ $messages['fi'] = array( @@ -893,15 +888,15 @@ $messages['fi'] = array( 'nuke-desc' => 'Mahdollistaa ylläpitäjille sivujen [[Special:Nuke|massapoistamisen]].', 'nuke-nopages' => 'Ei käyttäjän [[Special:Contributions/$1|{{GENDER:$1|$1}}]] lisäämiä uusia sivuja tuoreissa muutoksissa.', 'nuke-list' => 'Käyttäjä [[Special:Contributions/$1|{{GENDER:$1|$1}}]] on äskettäin luonut seuraavat sivut. -Lisää kommentti ja poista sivut napsauttamalla painiketta.', - 'nuke-list-multiple' => 'Seuraavat sivut on luotu äskettäin. -Lisää kommentti ja poista sivut napsauttamalla painiketta.', +Lisää kommentti ja poista napsauttamalla painiketta.', + 'nuke-list-multiple' => 'Seuraavat sivut tehtiin äskettäin. +Lisää kommentti ja poista napsauttamalla painiketta.', 'nuke-defaultreason' => 'Käyttäjän [[Special:Contributions/$1|{{GENDER:$1|$1}}]] lisäämien sivujen massapoistaminen', 'nuke-multiplepeople' => 'Äskettäin lisättyjen sivujen massapoistaminen', 'nuke-tools' => 'Tämä työkalu mahdollistaa äskettäin lisättyjen sivujen massapoistamisen käyttäjänimen tai IP-osoitteen perusteella. Kirjoita käyttäjänimi tai IP-osoite, niin saat listan poistettavista sivuista, tai jätä kenttä tyhjäksi niin saat kaikkien käyttäjien tekemät sivut.', 'nuke-submit-user' => 'Siirry', - 'nuke-submit-delete' => 'Poista valitsemasi sivut', + 'nuke-submit-delete' => 'Poista valitut', 'right-nuke' => 'Massapoistaa sivuja', 'nuke-select' => 'Valinta: $1', 'nuke-userorip' => 'Käyttäjänimi tai IP-osoite (voi jättää myös tyhjäksi):', @@ -909,8 +904,8 @@ Kirjoita käyttäjänimi tai IP-osoite, niin saat listan poistettavista sivuista 'nuke-editby' => 'Luonut [[Special:Contributions/$1|{{GENDER:$1|$1}}]]', 'nuke-deleted' => "Sivu '''$1''' on poistettu.", 'nuke-not-deleted' => "Sivua [[:$1]] '''ei voitu''' poistaa.", - 'nuke-delete-more' => '[[Special:Nuke|Poista enemmän sivuja]]', - 'nuke-pattern' => 'Malli sivun nimelle:', + 'nuke-delete-more' => '[[Special:Nuke|Poista lisää sivuja]]', + 'nuke-pattern' => 'Sivun nimien etuliite', 'nuke-nopages-global' => '[[Special:RecentChanges|Tuoreissa muutoksissa]] ei ole uusia sivuja.', 'nuke-viewchanges' => 'näytä muutokset', 'nuke-namespace' => 'Rajoita nimiavaruuteen:', @@ -988,39 +983,6 @@ Buchiér lo nom d’usanciér ou ben l’adrèce IP por avêr la lista de les p 'nuke-namespace' => 'Sè limitar a cet’èspâço de noms :', ); -/** Northern Frisian (Nordfriisk) - * @author Murma174 - */ -$messages['frr'] = array( - 'nuke' => 'Sidjen bonkerwiis strik', - 'action-nuke' => 'sidjen bonkerwiis tu striken', - 'nuke-desc' => 'Administratooren kön diarmä sidjen [[Special:Nuke|bonkerwiis strik]]', - 'nuke-nopages' => 'Bi a „leetst feranrangen“ san nian nei sidjen faan [[Special:Contributions/$1|{{GENDER:$1|$1}}]].', - 'nuke-list' => 'Jodiar sidjen san faan [[Special:Contributions/$1|{{GENDER:$1|$1}}]] skrewen wurden. -Skriiw ap, huaram dü jo strikst, an do trak üüb di knoop tu striken.', - 'nuke-list-multiple' => 'Jodiar sidjen san jüst skrewen wurden. -Skriiw ap, huaram dü jo strikst, an do trak üüb di knoop tu striken.', - 'nuke-defaultreason' => 'Sidjen faan [[Special:Contributions/$1|{{GENDER:$1|$1}}]] bonkerwiis strik', - 'nuke-multiplepeople' => 'Jüst skrewen sidjen bonkerwiis strik', - 'nuke-tools' => 'Diarmä kön sidjen, diar faan en was IP of en wasen brüker skrewen wurden san, bonkerwiis stregen wurd. -Skriiw diar det IP-adres of di brükernööm iin, an do könst dü det list faan sidjen sä, diar stregen wurd kön. -Wan dü diar niks henskrafst, wurd aal a brükern uunwiset.', - 'nuke-submit-user' => 'Widjer', - 'nuke-submit-delete' => 'Enkelten strik', - 'right-nuke' => 'Sidjen bonkerwiis strik', - 'nuke-select' => 'Schük ütj: $1', - 'nuke-userorip' => 'Brükernööm, IP-adres of niks:', - 'nuke-maxpages' => 'Ei muar sidjen üs:', - 'nuke-editby' => 'Skrewen faan [[Special:Contributions/$1|{{GENDER:$1|$1}}]]', - 'nuke-deleted' => "Sidj '''„$1“''' as stregen wurden.", - 'nuke-not-deleted' => "Sidj [[:$1]] '''küd ei''' stregen wurd.", - 'nuke-delete-more' => '[[Special:Nuke|Muar sidjen strik]]', - 'nuke-pattern' => 'Münster för di sidjnööm:', - 'nuke-nopages-global' => 'Diar san nian sidjen uun a [[Special:RecentChanges|leetst feranrangen]].', - 'nuke-viewchanges' => 'Feranrangen wise', - 'nuke-namespace' => 'Bluas uun di nöömrüm:', -); - /** Friulian (furlan) * @author Klenje */ @@ -1351,9 +1313,9 @@ $messages['ig'] = array( * @author Lam-ang */ $messages['ilo'] = array( - 'nuke' => 'Paga-adduan nga panagikkat', + 'nuke' => 'Paga-adduan nga pinag-ikkat', 'action-nuke' => 'ikkaten dagiti panid', - 'nuke-desc' => 'Ikkanna ti administrador ti abilidad iti [[Special:Nuke|adu a panagikkat]] kadagiti panid', + 'nuke-desc' => 'Ikkan na ti administrador ti abilidad nga [[Special:Nuke| paga-adduan nga pang-ikkat]] kadagit panid', 'nuke-nopages' => 'Awan dagiti baro a panid babaen ni [[Special:Contributions/$1|{{GENDER:$1|$1}}]] idiay kaudian abalbaliw.', 'nuke-list' => 'Dagiti sumaganad a panid ket kadamdamaan a pinartuat babaen ni [[Special:Contributions/$1|{{GENDER:$1|$1}}]]; ikkam ti komentario ken pindutem ti buton tapno maikkatda.', @@ -1906,18 +1868,17 @@ $messages['ml'] = array( /** Marathi (मराठी) * @author Kaustubh - * @author V.narsikar */ $messages['mr'] = array( 'nuke' => 'एकदम खूप पाने वगळा', - 'nuke-desc' => 'प्रबंधकांना [[Special:Nuke|गठ्ठ्याने वगळण्याची(मास डिलीट)]] क्षमता देते', + 'nuke-desc' => 'प्रबंधकांना एकाचवेळी [[Special:Nuke|अनेक पाने वगळण्याची]] परवानगी देते', 'nuke-nopages' => '[[Special:Contributions/$1|$1]] कडून अलीकडील बदलांमध्ये नवीन पाने नाहीत.', # Fuzzy 'nuke-list' => 'खालील पाने ही [[Special:Contributions/$1|$1]] ने अलिकडे वाढविलेली आहेत; शेरा द्या व वगळण्यासाठी कळीवर टिचकी द्या.', # Fuzzy 'nuke-defaultreason' => '$1 ने नवीन वाढविलेली अनेक पाने एकावेळी वगळा', # Fuzzy 'nuke-tools' => 'हे उपकरण एखाद्या विशिष्ट सदस्य अथवा अंकपत्त्याद्वारे नवीन तयार करण्यात आलेल्या पानांना एकाचवेळी वगळण्याची संधी देते. सदस्य नाव अथवा अंकपत्ता दिल्यास वगळण्यासाठी पानांची यादी मिळेल:', # Fuzzy 'nuke-submit-user' => 'जा', 'nuke-submit-delete' => 'निवडलेले वगळा', - 'right-nuke' => 'गठ्ठ्याने पाने वगळा', + 'right-nuke' => 'खूप पाने एकत्र वगळा', ); /** Malay (Bahasa Melayu) @@ -2159,9 +2120,9 @@ $messages['nso'] = array( $messages['oc'] = array( 'nuke' => 'Supression en massa', 'nuke-desc' => 'Balha la possiblitat als administrators de [[Special:Nuke|suprimir en massa]] de paginas.', - 'nuke-nopages' => 'Cap de pagina novèla pas creada per [[Special:Contributions/$1|{{GENDER:$1|$1}}]] dins la lista dels darrièrs cambiaments.', - 'nuke-list' => 'Las paginas seguentas son estadas creadas recentament per [[Special:Contributions/$1|{{GENDER:$1|$1}}]]; picatz un comentari e clicatz sul boton per los suprimir.', - 'nuke-defaultreason' => 'Supression en massa de las paginas apondudas per [[Special:Contributions/$1|{{GENDER:$1|$1}}]]', + 'nuke-nopages' => 'Cap de pagina novèla creada per [[Special:Contributions/$1|$1]] dins la lista dels darrièrs cambiaments.', # Fuzzy + 'nuke-list' => 'Las paginas seguentas son estadas creadas recentament per [[Special:Contributions/$1|$1]]; Indicatz un comentari e clicatz sul boton per los suprimir.', # Fuzzy + 'nuke-defaultreason' => 'Supression en massa de las paginas apondudas per $1', # Fuzzy 'nuke-tools' => 'Aquesta aisina autoriza las supressions en massa de las paginas apondudas recentament per un utilizaire enregistrat o per una adreça IP. Indicatz l’adreça IP per obténer la lista de las paginas de suprimir, o daissar blanc per totes los utilizaires.', 'nuke-submit-user' => 'Validar', 'nuke-submit-delete' => 'Supression seleccionada', @@ -2949,7 +2910,6 @@ $messages['ug-latn'] = array( /** Ukrainian (українська) * @author AS - * @author Aced * @author Ahonc * @author Base * @author Dim Grits @@ -2973,7 +2933,7 @@ $messages['uk'] = array( 'nuke-submit-delete' => 'Вилучити обрані', 'right-nuke' => 'Масове вилучення сторінок', 'nuke-select' => 'Вибір: $1', - 'nuke-userorip' => "Ім'я користувача, IP-адреса (необов'язковий параметр):", + 'nuke-userorip' => "Ім'я користувача, IP-адреса (за бажанням):", 'nuke-maxpages' => 'Максимальна кількість сторінок:', 'nuke-editby' => 'Створено {{GENDER:$1|користувачем|користувачкою}} [[Special:Contributions/$1|$1]]', 'nuke-deleted' => "Сторінка '''$1''' була вилучена.", @@ -3054,15 +3014,14 @@ Hãy nhập tên thành viên hoặc địa chỉ IP để lấy danh sách các ); /** Volapük (Volapük) - * @author Malafaya * @author Smeira */ $messages['vo'] = array( 'nuke' => 'Moükön pademi', 'nuke-desc' => 'Gevon guvanes fägi ad moükön padamödotis', - 'nuke-nopages' => 'Pads nonik fa geban: [[Special:Contributions/$1|{{GENDER:$1|$1}}]] pejaföls binons su lised votükamas nulik.', - 'nuke-list' => 'Pads sököl pejafons brefabüo fa geban: [[Special:Contributions/$1|{{GENDER:$1|$1}}]]; penolös küpeti e klikolös gnobi ad moükön onis.', - 'nuke-defaultreason' => 'Moükam masifik padas fa [[Special:Contributions/$1|{{GENDER:$1|$1}}]] pejafölas', + 'nuke-nopages' => 'Pads nonik fa geban: [[Special:Contributions/$1|$1]] pejaföls binons su lised votükamas nulik.', # Fuzzy + 'nuke-list' => 'Pads sököl pejafons brefabüo fa geban: [[Special:Contributions/$1|$1]]; penolös küpeti e klikolös gnobi ad moükön onis.', # Fuzzy + 'nuke-defaultreason' => 'Moükam padas fa geban: $1 pejafölas', # Fuzzy 'nuke-tools' => 'Stum at kanon moükön mödoti padas fa geban u ladet-IP semik brefabüo pejafölas. Penolös gebananemi u ladeti-IP ad dagetön lisedi padas moükovik:', # Fuzzy 'nuke-submit-user' => 'Ledunolöd', 'nuke-submit-delete' => 'Pevalöl ad pamoükön', @@ -3119,7 +3078,7 @@ $messages['zh-hans'] = array( 'right-nuke' => '删除大量页面', 'nuke-select' => '选择:$1', 'nuke-userorip' => '用户名、IP地址或空白:', - 'nuke-maxpages' => '最大页面数:', + 'nuke-maxpages' => '最多页面数:', 'nuke-editby' => '由[[Special:Contributions/$1|{{GENDER:$1|$1}}]]创建', 'nuke-deleted' => "已删除页面'''$1'''。", 'nuke-not-deleted' => "'''无法'''删除[[:$1]]页面。", diff --git a/extensions/ParserFunctions/ParserFunctions.i18n.magic.php b/extensions/ParserFunctions/ParserFunctions.i18n.magic.php index 01a25afb..5d26cb71 100644 --- a/extensions/ParserFunctions/ParserFunctions.i18n.magic.php +++ b/extensions/ParserFunctions/ParserFunctions.i18n.magic.php @@ -58,25 +58,25 @@ $magicWords['ar'] = array( /** Egyptian Spoken Arabic (مصرى) */ $magicWords['arz'] = array( - 'expr' => array( 0, 'تعبير' ), - 'if' => array( 0, 'لو' ), - 'ifeq' => array( 0, 'لومعادلة' ), - 'ifexpr' => array( 0, 'لوتعبير' ), - 'iferror' => array( 0, 'لوخطأ' ), - 'switch' => array( 0, 'تبديل' ), - 'default' => array( 0, '#افتراضي' ), - 'ifexist' => array( 0, 'لوموجود' ), - 'time' => array( 0, 'وقت' ), - 'timel' => array( 0, 'تيمل' ), - 'rel2abs' => array( 0, 'ريلتوآبس' ), - 'titleparts' => array( 0, 'أجزاء_العنوان' ), - 'len' => array( 0, 'لين' ), - 'pos' => array( 0, 'بوس' ), - 'rpos' => array( 0, 'آربوس' ), - 'sub' => array( 0, 'متفرع' ), - 'count' => array( 0, 'عدد' ), - 'replace' => array( 0, 'استبدال' ), - 'explode' => array( 0, 'انفجار' ), + 'expr' => array( 0, 'تعبير', 'expr' ), + 'if' => array( 0, 'لو', 'if' ), + 'ifeq' => array( 0, 'لومعادلة', 'ifeq' ), + 'ifexpr' => array( 0, 'لوتعبير', 'ifexpr' ), + 'iferror' => array( 0, 'لوخطأ', 'iferror' ), + 'switch' => array( 0, 'تبديل', 'switch' ), + 'default' => array( 0, '#افتراضي', '#default' ), + 'ifexist' => array( 0, 'لوموجود', 'ifexist' ), + 'time' => array( 0, 'وقت', 'time' ), + 'timel' => array( 0, 'تيمل', 'timel' ), + 'rel2abs' => array( 0, 'ريلتوآبس', 'rel2abs' ), + 'titleparts' => array( 0, 'أجزاء_العنوان', 'titleparts' ), + 'len' => array( 0, 'لين', 'len' ), + 'pos' => array( 0, 'بوس', 'pos' ), + 'rpos' => array( 0, 'آربوس', 'rpos' ), + 'sub' => array( 0, 'متفرع', 'sub' ), + 'count' => array( 0, 'عدد', 'count' ), + 'replace' => array( 0, 'استبدال', 'replace' ), + 'explode' => array( 0, 'انفجار', 'explode' ), ); /** South Azerbaijani (تورکجه) */ @@ -100,7 +100,7 @@ $magicWords['ce'] = array( 'replace' => array( 0, 'хийцарна', 'замена' ), ); -/** Czech (čeština) */ +/** Czech (česky) */ $magicWords['cs'] = array( 'expr' => array( 0, 'výraz' ), 'if' => array( 0, 'když' ), @@ -375,7 +375,7 @@ $magicWords['mk'] = array( $magicWords['ml'] = array( 'expr' => array( 0, 'ദ്യോതകം' ), 'if' => array( 0, 'എങ്കിൽ' ), - 'ifeq' => array( 0, 'സമമെങ്കിൽ' ), + 'ifeq' => array( 0, 'സമെമെങ്കിൽ' ), 'ifexpr' => array( 0, 'എക്സ്പ്രെഷനെങ്കിൽ' ), 'iferror' => array( 0, 'പിഴവെങ്കിൽ' ), 'switch' => array( 0, 'മാറ്റുക' ), @@ -580,22 +580,22 @@ $magicWords['uz'] = array( /** Vietnamese (Tiếng Việt) */ $magicWords['vi'] = array( - 'expr' => array( 0, 'công_thức', 'côngthức' ), + 'expr' => array( 0, 'côngthức' ), 'if' => array( 0, 'nếu' ), - 'ifeq' => array( 0, 'nếu_bằng', 'nếubằng' ), - 'ifexpr' => array( 0, 'nếu_công_thức', 'nếucôngthức' ), - 'iferror' => array( 0, 'nếu_lỗi', 'nếulỗi' ), - 'default' => array( 0, '#mặc_định', '#mặcđịnh' ), - 'ifexist' => array( 0, 'nếu_tồn_tại', 'nếutồntại' ), + 'ifeq' => array( 0, 'nếubằng' ), + 'ifexpr' => array( 0, 'nếucôngthức' ), + 'iferror' => array( 0, 'nếulỗi' ), + 'default' => array( 0, '#mặcđịnh' ), + 'ifexist' => array( 0, 'nếutồntại' ), 'time' => array( 0, 'giờ' ), - 'timel' => array( 0, 'giờ_địa_phương', 'giờđịaphương' ), - 'len' => array( 0, 'số_chữ', 'sốchữ', 'số_ký_tự', 'sốkýtự', 'số_kí_tự', 'sốkítự' ), - 'pos' => array( 0, 'vị_trí', 'vịtrí' ), - 'rpos' => array( 0, 'vị_trí_phải', 'vịtríphải' ), - 'sub' => array( 0, 'chuỗi_con', 'chuỗicon' ), + 'timel' => array( 0, 'giờđịaphương' ), + 'len' => array( 0, 'sốchữ', 'sốkýtự', 'sốkítự' ), + 'pos' => array( 0, 'vịtrí' ), + 'rpos' => array( 0, 'vịtríphải' ), + 'sub' => array( 0, 'chuỗicon' ), 'count' => array( 0, 'số' ), - 'replace' => array( 0, 'thay_thế', 'thaythế' ), - 'urldecode' => array( 0, 'giải_mã_url', 'giảimãurl' ), + 'replace' => array( 0, 'thaythế' ), + 'urldecode' => array( 0, 'giảimãurl' ), ); /** Yiddish (ייִדיש) */ diff --git a/extensions/ParserFunctions/ParserFunctions.i18n.php b/extensions/ParserFunctions/ParserFunctions.i18n.php index bc3d200d..e026b693 100644 --- a/extensions/ParserFunctions/ParserFunctions.i18n.php +++ b/extensions/ParserFunctions/ParserFunctions.i18n.php @@ -1233,33 +1233,6 @@ $messages['id'] = array( 'pfunc_string_too_long' => 'Kesalahan: String melebihi limit $1 karakter', ); -/** Iloko (Ilokano) - * @author Lam-ang - */ -$messages['ilo'] = array( - 'pfunc_desc' => 'Napasayaat a parser nga adda kadagiti lohikal nga annong', - 'pfunc_time_error' => 'Biddut: Imbalido nga oras.', - 'pfunc_time_too_long' => 'Biddut: Adu unay dagiti panagtawag ti #time.', - 'pfunc_time_too_big' => 'Biddut: Ti #time ket suportaranna laeng dagiti tawen aginggana iti 9999.', - 'pfunc_time_too_small' => 'Biddut: ti #time ket suportaranna laeng dagiti tawen manipud ti 0.', - 'pfunc_rel2abs_invalid_depth' => 'Biddut: Imbalido a kauneg iti dalan: "$1" (nagpadas a nangserrek ti nodo iti ngato ti ramut a nodo).', - 'pfunc_expr_stack_exhausted' => 'Biddut a panangiyebkas: Naibusen ti tuon.', - 'pfunc_expr_unexpected_number' => 'Biddut a panangiyebkas:Di nanamnama a bilang.', - 'pfunc_expr_preg_match_failure' => 'Biddut a panangiyebkas: Di nanamnama a pannakapaay ti preg_match.', - 'pfunc_expr_unrecognised_word' => 'Biddut a panangiyebkas: Di mabigbigan a balikas ti "$1".', - 'pfunc_expr_unexpected_operator' => 'Biddut a panangiyebkas: Di nanamnama nga operator ti $1.', - 'pfunc_expr_missing_operand' => 'Biddut a panangiyebkas: Napukaw nga operand para iti $1.', - 'pfunc_expr_unexpected_closing_bracket' => 'Biddut a panangiyebkas: Di nanamnama a pangrikep a braket.', - 'pfunc_expr_unrecognised_punctuation' => 'Biddut a panangiyebkas: Di nanamnama a karakter ti tuldek ti "$1".', - 'pfunc_expr_unclosed_bracket' => 'Biddut a panangiyebkas: Di narikpan a braket.', - 'pfunc_expr_division_by_zero' => 'Panagbingbingay babaen ti sero.', - 'pfunc_expr_invalid_argument' => 'Imbalido nga argumento para iti $1: < -1 wenno > 1.', - 'pfunc_expr_invalid_argument_ln' => 'Imbalido nga argumento para iti ln: <= 0.', - 'pfunc_expr_unknown_error' => 'Biddut a panangiyebkas: Di ammo a biddut ($1).', - 'pfunc_expr_not_a_number' => 'Iti $1: Ti resulta ket saan a bilang.', - 'pfunc_string_too_long' => 'Biddut: Ti kuerdas ket nasurokanna ti limitado ti karakter iti $1.', -); - /** Ido (Ido) * @author Malafaya */ @@ -1521,7 +1494,6 @@ $messages['lb'] = array( 'pfunc_time_error' => 'Feeler: ongëlteg Zäit', 'pfunc_time_too_long' => 'Feeler: ze dacks #time opgeruff', 'pfunc_time_too_big' => 'Feeler: #time ënnerstëtzt nëmme Jore bis 9999', - 'pfunc_time_too_small' => 'Feeler: #time ënnerstëtzt nëmme Jore vun 0 un.', 'pfunc_expr_stack_exhausted' => 'Expressiouns-Feeler: Stack iwwergelaf', 'pfunc_expr_unexpected_number' => 'Expressiouns-Feeler: Onerwarten Zuel', 'pfunc_expr_unrecognised_word' => 'Expressiouns-Feeler: Onerkantent Wuert "$1"', @@ -1926,7 +1898,6 @@ $messages['pms'] = array( 'pfunc_time_error' => 'Eror: temp nen bon', 'pfunc_time_too_long' => 'Eror: #time a ven ciamà tròpe vire', 'pfunc_time_too_big' => "Eror: #time a përmët mach j'agn fin al 9999.", - 'pfunc_time_too_small' => "Eror: #time a përmet j'agn mach da 0.", 'pfunc_rel2abs_invalid_depth' => 'Eror: profondità nen bon-a ant ël përcors: "$1" (a l\'é provasse a ciamé un grop dzora a la rèis)', 'pfunc_expr_stack_exhausted' => "Eror ëd l'espression: stach esaurìa", 'pfunc_expr_unexpected_number' => "Eror ëd l'espression: nùmer pa spetà", @@ -2408,7 +2379,6 @@ $messages['sv'] = array( 'pfunc_time_error' => 'Fel: ogiltig tid', 'pfunc_time_too_long' => 'Fel: för många anrop av #time', 'pfunc_time_too_big' => 'Fel: # tid stöder endast år fram till 9999', - 'pfunc_time_too_small' => 'Fel: #tid stödjer enbart år från 0.', 'pfunc_rel2abs_invalid_depth' => 'Fel: felaktig djup i sökväg: "$1" (försöker nå en nod ovanför rotnoden)', 'pfunc_expr_stack_exhausted' => 'Fel i uttryck: Stackutrymmet tog slut', 'pfunc_expr_unexpected_number' => 'Fel i uttryck: Oväntat tal', diff --git a/extensions/PdfHandler/PdfHandler.i18n.php b/extensions/PdfHandler/PdfHandler.i18n.php index 8f259998..06143e7b 100644 --- a/extensions/PdfHandler/PdfHandler.i18n.php +++ b/extensions/PdfHandler/PdfHandler.i18n.php @@ -672,7 +672,6 @@ $messages['lb'] = array( 'pdf-desc' => '"Programm" den et erméiglecht PDF-Fichieren als Bild ze kucken', 'pdf_no_metadata' => 'Meta-Informatiounen aus dem PDF Dokument kënnen net gelies ginn', 'pdf_page_error' => "D'Säitenzuel ass net an dem Beräich.", - 'exif-pdf-producer' => 'Ëmwandlungsprogramm', 'exif-pdf-version' => 'Versioun vum PDF-Format', 'exif-pdf-encrypted' => 'Verschlësselt', 'exif-pdf-pagesize' => 'Gréisst vun der Säit', @@ -687,13 +686,6 @@ $messages['li'] = array( 'pdf_page_error' => 'paginanómmer besteit neet', ); -/** لوری (لوری) - * @author Mogoeilor - */ -$messages['lrc'] = array( - 'exif-pdf-pagesize' => 'انازه بلگه', -); - /** Lithuanian (lietuvių) * @author Matasg */ @@ -734,12 +726,11 @@ $messages['ml'] = array( /** Marathi (मराठी) * @author Kaustubh * @author Sankalpdravid - * @author V.narsikar */ $messages['mr'] = array( 'pdf-desc' => 'चित्र मोडमध्ये पीडीएफ संचिका पाहण्यासाठी आवश्यक प्रणाली', 'pdf_no_metadata' => 'पीडीएफमधून मेटाडाटा घेऊ शकत नाही', - 'pdf_page_error' => 'पान क्रमांक आवाक्यात नाही', + 'pdf_page_error' => 'पान क्रमांक सीमेमध्ये नाही', ); /** Malay (Bahasa Melayu) diff --git a/extensions/Poem/Poem.i18n.php b/extensions/Poem/Poem.i18n.php index 7f5157f5..c58ce78d 100644 --- a/extensions/Poem/Poem.i18n.php +++ b/extensions/Poem/Poem.i18n.php @@ -310,7 +310,7 @@ $messages['id'] = array( * @author Lam-ang */ $messages['ilo'] = array( - 'poem-desc' => 'Agnayon ti etiketa ti <code><poem></code> para iti panagporma ti daniw', + 'poem-desc' => 'Ikkan na iti<code><poem></code> nga tag para ti pagporma ti daniw', ); /** Italian (italiano) diff --git a/extensions/Renameuser/README b/extensions/Renameuser/README index a344ebf6..e44aaafe 100644 --- a/extensions/Renameuser/README +++ b/extensions/Renameuser/README @@ -1,4 +1,4 @@ -This is the readme file for the MediaWiki Renameuser extension. +These is the readme file for the MediaWiki Renameuser extension. Extension page on mediawiki.org: https://www.mediawiki.org/wiki/Extension:Renameuser Latest version of the readme file: https://gerrit.wikimedia.org/r/gitweb?p=mediawiki/extensions/Renameuser.git;a=blob;f=README diff --git a/extensions/Renameuser/Renameuser.alias.php b/extensions/Renameuser/Renameuser.alias.php index 6ac6f8cf..0523c045 100644 --- a/extensions/Renameuser/Renameuser.alias.php +++ b/extensions/Renameuser/Renameuser.alias.php @@ -64,7 +64,7 @@ $specialPageAliases['ce'] = array( 'Renameuser' => array( 'Декъашхочун_цӀе_хийца' ), ); -/** Czech (čeština) */ +/** Czech (česky) */ $specialPageAliases['cs'] = array( 'Renameuser' => array( 'Přejmenovat_uživatele' ), ); diff --git a/extensions/Renameuser/Renameuser.i18n.php b/extensions/Renameuser/Renameuser.i18n.php index 795390bc..c1411037 100644 --- a/extensions/Renameuser/Renameuser.i18n.php +++ b/extensions/Renameuser/Renameuser.i18n.php @@ -1022,7 +1022,6 @@ Zur Information folgt das Benutzernamenänderungs-Logbuch.', /** Zazaki (Zazaki) * @author Aspar * @author Erdemaslancan - * @author Gorizon * @author Mirzali * @author Xoser */ @@ -1037,7 +1036,7 @@ $messages['diq'] = array( 'renameusermove' => 'nameyê karberan u pelê werêaameyişan bıkırışi nameyo newe', 'renameusersuppress' => 'Name de newi re hetenayışo newe vıraştış', 'renameuserreserve' => 'nameyê karberi yo verini bloke bıker.', - 'renameuserwarnings' => 'İğtari:', + 'renameuserwarnings' => 'hişyariyi', 'renameuserconfirm' => 'bele karberi newe ra name bıker', 'renameusersubmit' => 'bierşawê/biruşnê', 'renameuser-submit-blocklog' => 'Rocekanê bloqandê karbari bıvin', @@ -2682,13 +2681,6 @@ $messages['li'] = array( Relevante regels oet 't logbook staon hieónger.", ); -/** لوری (لوری) - * @author Mogoeilor - */ -$messages['lrc'] = array( - 'renameuserreason' => 'دلیل:', -); - /** Lithuanian (lietuvių) * @author Eitvys200 * @author Homo @@ -2881,7 +2873,7 @@ $messages['mr'] = array( 'renameuserreserve' => 'जुने सदस्य खाते पुढील वापरासाठी अवरुद्ध करा', 'renameuserwarnings' => 'ताकीद:', 'renameuserconfirm' => 'होय, सदस्याचे नाव बदला', - 'renameusersubmit' => 'सादर करा', + 'renameusersubmit' => 'पाठवा', 'renameusererrordoesnotexist' => '"<nowiki>$1</nowiki>" नावाचा सदस्य अस्तित्वात नाही.', 'renameusererrorexists' => '"<nowiki>$1</nowiki>" नावाचा सदस्य अगोदरच अस्तित्वात आहे', 'renameusererrorinvalid' => '"<nowiki>$1</nowiki>" हे नाव चुकीचे आहे.', @@ -4753,7 +4745,7 @@ $messages['vo'] = array( 'renameuser-desc' => "Votanemön gebani (gität: ''renameuser'' zesüdon)", 'renameuserold' => 'Gebananem anuik:', 'renameusernew' => 'Gebananem nulik:', - 'renameuserreason' => 'Kod:', + 'renameuserreason' => 'Kod votanemama:', # Fuzzy 'renameusermove' => 'Topätükön padi e bespikapadi gebana (e donapadis onsik) ad nem nulik', 'renameuserreserve' => 'Neletön gebananemi rigik (pos votanemam) ad pagebön ün fütür', 'renameuserwarnings' => 'Nuneds:', @@ -4844,7 +4836,6 @@ $messages['yo'] = array( ); /** Cantonese (粵語) - * @author Liuxinyu970226 */ $messages['yue'] = array( 'renameuser' => '改用戶名', diff --git a/extensions/Renameuser/RenameuserSQL.php b/extensions/Renameuser/RenameuserSQL.php index ca03ad3e..eeb879a0 100644 --- a/extensions/Renameuser/RenameuserSQL.php +++ b/extensions/Renameuser/RenameuserSQL.php @@ -221,7 +221,7 @@ class RenameuserSQL { } if ( count( $jobs ) > 0 ) { - JobQueueGroup::singleton()->push( $jobs, JobQueue::QOS_ATOMIC ); // don't commit yet + Job::safeBatchInsert( $jobs ); // don't commit yet } // Commit the transaction diff --git a/extensions/SpamBlacklist/SpamBlacklist.i18n.php b/extensions/SpamBlacklist/SpamBlacklist.i18n.php index 343586b7..af397dba 100644 --- a/extensions/SpamBlacklist/SpamBlacklist.i18n.php +++ b/extensions/SpamBlacklist/SpamBlacklist.i18n.php @@ -447,7 +447,6 @@ $messages['bjn'] = array( ); /** Bengali (বাংলা) - * @author Aftab1995 * @author Bellayet * @author Nasir8891 * @author Zaheen @@ -478,10 +477,6 @@ $messages['bn'] = array( 'spam-blacklisted-email-signup' => 'আপনার লেখা ইমেইল ঠিকানাটি কালোতালিকাভুক্ত।', 'spam-invalid-lines' => 'নিচের স্প্যাম কালোতালিকার {{PLURAL:$1|লাইন|লাইনগুলি}} অবৈধ রেগুলার {{PLURAL:$1|এক্সপ্রেশন|এক্সপ্রেশন}} ধারণ করছে এবং পাতাটি সংরক্ষণের আগে এগুলি ঠিক করা {{PLURAL:$1|প্রয়োজন|প্রয়োজন}}:', 'spam-blacklist-desc' => 'রেজেক্স-ভিত্তিক স্প্যামরোধী সরঞ্জাম: [[MediaWiki:Spam-blacklist]] এবং [[MediaWiki:Spam-whitelist]]', # Fuzzy - 'log-name-spamblacklist' => 'স্প্যাম কালোতালিকা লগ', - 'log-description-spamblacklist' => 'এই ঘটনাগুলি স্প্যাম কালোতালিকার হিট অনুসরণ।', - 'right-spamblacklistlog' => 'স্প্যাম কালোতালিকা লগ দেখুন', - 'action-spamblacklistlog' => 'স্প্যাম কালোতালিকা লগ দেখুন', ); /** Breton (brezhoneg) @@ -841,7 +836,6 @@ $messages['de-formal'] = array( /** Zazaki (Zazaki) * @author Aspar * @author Erdemaslancan - * @author Marmase * @author Olvörg */ $messages['diq'] = array( @@ -883,7 +877,7 @@ $messages['diq'] = array( 'spam-blacklisted-email-text' => 'Nıka adresa e-postayê to qande karberê bini ra mesac riştene listeyê siya dero.', 'spam-blacklisted-email-signup' => 'E-posta adresiyo ke deyayo karkerdışe cı newke groto siyaliste.', 'spam-invalid-lines' => 'na qerelisteya spami {{PLURAL:$1|satır|satıran}} {{PLURAL:$1|nemeqbulo|nemeqbuli}};', - 'spam-blacklist-desc' => "Regex-tabanın haleta anti-spami URL'ya perer u adresa e-posta qande karberande qeydınan geriyayo", + 'spam-blacklist-desc' => 'Regex-tabanlı anti-spam aracı: [[MediaWiki:Spam-blacklist]] ve [[MediaWiki:Spam-whitelist]]', # Fuzzy ); /** Lower Sorbian (dolnoserbski) @@ -1085,14 +1079,9 @@ $messages['et'] = array( # * Iga rida, mis ei ole tühi, on regulaaravaldise osa, mis vastab ainult e-posti aadressides sisalduvatele hostinimedele.', 'spam-blacklisted-email' => 'Musta nimekirja kantud e-posti aadress', 'spam-blacklisted-email-text' => 'Musta nimekirja sissekande tõttu on sinu e-posti aadressilt teistele kasutajatele e-kirjade saatmine praegu keelatud.', - 'spam-blacklisted-email-signup' => 'Selle e-posti aadressi kasutamine on praegu musta nimekirja sissekandega keelatud.', + 'spam-blacklisted-email-signup' => 'Selle e-posti aadressi kasutamine praegu musta nimekirja sissekandega keelatud.', 'spam-invalid-lines' => '{{PLURAL:$1|Järgmine rida|Järgmised read}} rämpspostituste mustas nimekirjas on {{PLURAL:$1|vigane regulaaravaldis|vigased regulaaravaldised}} ja {{PLURAL:$1|see|need}} tuleb enne lehekülje salvestamist parandada:', 'spam-blacklist-desc' => 'Regulaaravaldisel põhinev tööriist, mis võimaldab lisada musta nimekirja lehekülgedel toodud internetiaadresse ning registreeritud kasutajate e-posti aadresse.', - 'log-name-spamblacklist' => 'Rämpsu musta nimekirja logi', - 'log-description-spamblacklist' => 'Siin on loetletud rämpspostituse musta nimekirja tabamused.', - 'logentry-spamblacklist-hit' => '$1 püüdis lisada leheküljele $3 rämpspostituse mustas nimekirjas olevat linki $4.', - 'right-spamblacklistlog' => 'Vaadata rämpsu musta nimekirja', - 'action-spamblacklistlog' => 'vaadata rämpsu musta nimekirja', ); /** Persian (فارسی) @@ -1134,16 +1123,9 @@ $messages['fa'] = array( # * هر سطر از متن به عنوان یک دستور از نوع عبارت باقاعده در نظر گرفته میشود که فقط با نام میزبان در نشانی پست الکترونیکی مطابقت داده میشود', 'spam-blacklisted-email' => 'نشانی پست الکترونیکی موجود در لیست سیاه', 'spam-blacklisted-email-text' => 'نشانی پست الکترونیکی شما در حال حاضر در فهرست سیاه قرار دارد و نمیتوانید به دیگر کاربران نامه بفرستید.', - 'spam-blacklisted-email-signup' => 'نشانی رایانامه دادهشده در حال حاضر در فهرست سیاه است.', + 'spam-blacklisted-email-signup' => 'نشانی پست الکترونیکی داده شده در حال حاضر در فهرست سیاه است و قابل استفاده نیست.', 'spam-invalid-lines' => '{{PLURAL:$1|سطر|سطرهای}} زیر در فهرست سیاه هرزنگاری، عبارات باقاعدهٔ نامجاز {{PLURAL:$1|است|هستند}} و قبل از ذخیره کردن صفحه باید اصلاح {{PLURAL:$1|شود|شوند}}:', - 'spam-blacklist-desc' => 'Regex-based anti-spam tool allowing to blacklist URLs in pages and email addresses for registered users - -ابزار بر پایهٔ عبارت باقاعده ضدهرزنگاری اجازهٔ فهرست سیاهکردن نشانیهای اینترنتی در صفحهها و نشانیهای رایانامه برای کاربران ثبت نام کرده', - 'log-name-spamblacklist' => 'سیاههٔ فهرست سیاه هرزنگاری', - 'log-description-spamblacklist' => 'این رویدادها وقوع فهرست سیاه هزنگاری را دنبال میکند.', - 'logentry-spamblacklist-hit' => '$1 در $3 با تلاش در افزودن $4 باعث برخورد به فهرست سیاه هرزنامه شدهاست.', - 'right-spamblacklistlog' => 'دیدن یک سیاههٔ فهرست سیاه هرزنامه', - 'action-spamblacklistlog' => 'دیدن سیاههٔ فهرست سیاه هرزنامه', + 'spam-blacklist-desc' => 'ابزار ضد هرزنویسی مبتنی بر regular expressions: [[MediaWiki:Spam-blacklist]] و [[MediaWiki:Spam-whitelist]]', # Fuzzy ); /** Finnish (suomi) @@ -1737,12 +1719,7 @@ $messages['ilo'] = array( 'spam-blacklisted-email-text' => 'Ti e-suratmo a pagtaengan ket agdama a naiparit manipud ti panagipatulod kadagiti e-surat kadagiti sabsabali nga agar-aramat.', 'spam-blacklisted-email-signup' => 'Ti naited nga e-surat a pagatengan ket agdama a naiparit manipud ti panagusar.', 'spam-invalid-lines' => 'Ti sumaganad a spam blacklist {{PLURAL:$1| a linia ket|kadagiti linia ket}} imbalido a kadawyan {{PLURAL:$1|a nangisao|kadagiti panangisao}} ken {{PLURAL:$1|masapsapol|masapol}} a mapudnuan sakbay nga idulin ti panid:', - 'spam-blacklist-desc' => 'Naibatay ti regex a ramit ti kontra-spam a mangpalubos a mangiparit kadagiti URL kadagiti panid ken dagiti esurat a pagtaengan para kadagiti nakarehistro nga agar-aramat', - 'log-name-spamblacklist' => 'Listaan ti naiparit para iti spam', - 'log-description-spamblacklist' => 'Dagitoy a pasamak ket surotenna dagiti naiparit a listaan a napuntaan ti spam.', - 'logentry-spamblacklist-hit' => 'Ti $1 ket gapuanan ti pannakapunta ti naiparit a listaan ti spam iti $3 babaen ti panagpadas nga aginayon iti $4.', - 'right-spamblacklistlog' => 'Kitaen ti naiparit a listaan ti spam', - 'action-spamblacklistlog' => 'kitaen ti naiparit a listaan ti spam', + 'spam-blacklist-desc' => 'Naibantay ti regex kontra-spam a ramit: [[MediaWiki:Spam-blacklist]] ken [[MediaWiki:Spam-whitelist]]', # Fuzzy ); /** Icelandic (íslenska) @@ -2335,12 +2312,7 @@ $messages['ml'] = array( 'spam-blacklisted-email-text' => 'താങ്കളുടെ ഇമെയിൽ വിലാസം ഇപ്പോൾ മറ്റുള്ളവർക്ക് എഴുത്തയക്കാനാവാത്ത കരിമ്പട്ടികയിൽ ഉൾപ്പെട്ടിരിക്കുന്നു.', 'spam-blacklisted-email-signup' => 'നൽകിയ ഇമെയിൽ വിലാസം ഇപ്പോൾ കരിമ്പട്ടികയിൽ പെട്ടിരിക്കുന്ന ഒന്നാണ്.', 'spam-invalid-lines' => 'താഴെ കൊടുത്തിരിക്കുന്ന പാഴെഴുത്ത് കരിമ്പട്ടികയിലെ {{PLURAL:$1|വരി ഒരു|വരികൾ}} അസാധുവായ റെഗുലർ {{PLURAL:$1|എക്സ്പ്രെഷൻ|എക്സ്പ്രെഷനുകൾ}} ആണ്, താൾ സേവ് ചെയ്യുന്നതിനു മുമ്പ് {{PLURAL:$1|അത്|അവ}} ശരിയാക്കേണ്ടതുണ്ട്:', - 'spam-blacklist-desc' => 'അംഗത്വമെടുത്ത ഉപയോക്താക്കൾ യു.ആർ.എല്ലുകളും ഇമെയിൽ വിലാസങ്ങളും, താളുകളിൽ ചേർക്കുന്നത് കരിമ്പട്ടികയിൽ പെടുത്താനുള്ള റെജെക്സ്-അധിഷ്ഠിത പാഴെഴുത്ത് തടയൽ ഉപകരണം', - 'log-name-spamblacklist' => 'പാഴെഴുത്ത് കരിമ്പട്ടിക രേഖ', - 'log-description-spamblacklist' => 'പാഴെഴുത്ത് കരിമ്പട്ടികയെ ഉണർത്തിയ പ്രവൃത്തികളുടെ രേഖ.', - 'logentry-spamblacklist-hit' => '$3 എന്ന താളിൽ $4 എന്നത് ചേർക്കാൻ $1 നടത്തിയ ശ്രമം പാഴെഴുത്ത് കരിമ്പട്ടികയിൽ കുടുങ്ങിയിരിക്കുന്നു.', - 'right-spamblacklistlog' => 'പാഴെഴുത്ത് കരിമ്പട്ടിക രേഖ കാണുക', - 'action-spamblacklistlog' => 'പാഴെഴുത്ത് കരിമ്പട്ടിക രേഖ കാണുക', + 'spam-blacklist-desc' => 'റെജെക്സ്-അധിഷ്ഠിത പാഴെഴുത്ത് തടയൽ ഉപകരണം: [[MediaWiki:Spam-blacklist]] ഒപ്പം [[MediaWiki:Spam-whitelist]]', # Fuzzy ); /** Marathi (मराठी) @@ -2552,11 +2524,6 @@ $messages['nl'] = array( 'spam-blacklisted-email-signup' => 'Het opgegeven e-mailadres staat momenteel op de zwarte lijst.', 'spam-invalid-lines' => 'De volgende {{PLURAL:$1|regel|regels}} van de zwarte lijst {{PLURAL:$1|is een|zijn}} onjuiste reguliere {{PLURAL:$1|expressie|expressies}} en {{PLURAL:$1|moet|moeten}} verbeterd worden alvorens de pagina kan worden opgeslagen:', 'spam-blacklist-desc' => "Op reguliere expressies gebaseed antispamhulpprogramma dat het mogelijk maakt URL's in pagina's te blokkeren en e-mailadressen voor geblokkeerde gebruikers", - 'log-name-spamblacklist' => 'Logboek zwarte lijst', - 'log-description-spamblacklist' => 'Deze lijst bevat gebeurtenissen met betrekking tot de zwarte lijst.', - 'logentry-spamblacklist-hit' => '{{GENDER:$2|$1}} heeft geprobeerd $4 van de zwarte lijst toe te voegen op $3', # Fuzzy - 'right-spamblacklistlog' => 'Logboek zwarte lijst bekijken', - 'action-spamblacklistlog' => 'logboek zwarte lijst te bekijken', ); /** Nederlands (informeel) (Nederlands (informeel)) @@ -2742,12 +2709,7 @@ $messages['pms'] = array( 'spam-blacklisted-email-text' => "Soa adrëssa ëd pòsta eletrònica a l'é al moment an na lista nèira për mandé dij mëssagi a j'àutri utent.", 'spam-blacklisted-email-signup' => "L'adrëssa ëd pòsta eletrònica dàita a l'é al moment an na lista nèira për l'utilisassion.", 'spam-invalid-lines' => "{{PLURAL:$1|St'|Sti}} element dla lista nèira dla rumenta ëd reclam a {{PLURAL:$1|l'é|son}} {{PLURAL:$1|n'|dj'}}espression regolar nen {{PLURAL:$1|bon-a|bon-e}} e a l'{{PLURAL:$1|ha|han}} da manca d'esse coregiùe anans che salvé la pàgina:", - 'spam-blacklist-desc' => "Utiss contra la rumenta basà su dj'espression regolar ch'a permëtto ëd buté an sla lista nèira dj'adrësse an sl'Aragnà ant le pàgine e dj'adrësse ëd pòsta eletrònica për j'utent argistrà.", - 'log-name-spamblacklist' => 'Argistr dla lista nèira dla rumenta', - 'log-description-spamblacklist' => 'Costi eveniment a marco le rëspondense con la lista nèira dla rumenta.', - 'logentry-spamblacklist-hit' => "$1 a l'ha causà na rëspondensa con la lista nèira dla rumenta su $3 an sërcand ëd gionté $4.", - 'right-spamblacklistlog' => "Smon-e l'argistr dla lista nèira dla rumenta", - 'action-spamblacklistlog' => "vëdde l'argistr dla lista nèira dla rumenta", + 'spam-blacklist-desc' => 'Strument anti-spam basà an dzora a Regex: [[MediaWiki:Spam-blacklist]] e [[MediaWiki:Spam-whitelist]]', # Fuzzy ); /** Western Punjabi (پنجابی) @@ -2965,7 +2927,6 @@ $messages['roa-tara'] = array( * @author Express2000 * @author HalanTul * @author Kaganer - * @author NBS * @author Okras * @author Александр Сигачёв */ @@ -3011,11 +2972,6 @@ $messages['ru'] = array( 'spam-blacklisted-email-signup' => 'Указанный адрес электронной почты в настоящее время занесён в чёрный список и не может быть использован.', 'spam-invalid-lines' => '{{PLURAL:$1|Следующая строка чёрного списка ссылок содержит ошибочное регулярное выражение и должна быть исправлена|Следующие строки чёрного списка ссылок содержат ошибочные регулярные выражения и должны быть исправлены}} перед сохранением:', 'spam-blacklist-desc' => 'Основанный на регулярных выражениях анти-спам инструмент позволяет добавлять в чёрный список URL на страницах и адреса электронной почты для зарегистрированных пользователей', - 'log-name-spamblacklist' => 'Журнал спам-листа', - 'log-description-spamblacklist' => 'Это журнал, отслеживающий срабатывание спам-листа.', - 'logentry-spamblacklist-hit' => '$1 вызвал срабатывание спам-листа на странице $3 из-за попытки добавить $4.', - 'right-spamblacklistlog' => 'Просмотр журнала чёрного списка по спаму', - 'action-spamblacklistlog' => 'просмотр журнала чёрного списка по спаму', ); /** Rusyn (русиньскый) @@ -3345,9 +3301,7 @@ $messages['stq'] = array( ); /** Swedish (svenska) - * @author Ainali * @author Lejonel - * @author Lokal Profil * @author Skalman * @author WikiPhoenix */ @@ -3372,33 +3326,9 @@ $messages['sv'] = array( # * Alla icke-tomma rader används som reguljära uttryck för att matcha domännamn i URL:er #</pre> <!-- ändra inte den här raden -->', - 'email-blacklist' => ' #<!-- ändra inte den här raden --> <pre> -# E-postadresser som matchar den här listan kommer att hindras att registrera och skicka e-post -# Denna lista gäller endast denna wiki; se även den globala svartlistan. -# För dokumentation se https://www.mediawiki.org/wiki/Extension:SpamBlacklist -# -# Syntaxen är följande: -# * Allt från ett "#"-tecken till slutet av raden är en kommentar -# * Varje icke-tom rad är ett regex-fragment som endast kommer att matcha värdnamn i e-postadresser - #</pre> <!-- ändra inte den här raden -->', - 'email-whitelist' => ' #<!-- ändra inte den här raden --> <pre> -# E-postadresser som matchar den här listan kommer *inte* att blockeras, även om de skulle ha blivit blockerade av svartlistan. -# -# Syntaxen är följande: -# * Allt från ett "#"-tecken till slutet av raden är en kommentar -# * Varje icke-tom rad är ett regex-fragment som endast kommer att matcha värdnamn i e-postadresser - - #</pre> <!-- ändra inte den här raden -->', 'spam-blacklisted-email' => 'Svartlistad e-postadress', - 'spam-blacklisted-email-text' => 'Din e-postadress är för närvarande svartlistad från att skicka e-post till andra användare.', - 'spam-blacklisted-email-signup' => 'Den angivna e-postadressen är förnärvarande svartlistad från användning.', 'spam-invalid-lines' => 'Följande {{PLURAL:$1|rad|rader}} i svarta listan för spam innehåller inte något giltigt reguljärt uttryck och måste rättas innan sidan sparas:', 'spam-blacklist-desc' => 'Antispamverktyg baserat på reguljära uttryck som gör det möjligt att svartlista webbadresser på sidor och e-postadresser för registrerade användare', - 'log-name-spamblacklist' => 'Svartlistningslogg för spam', - 'log-description-spamblacklist' => 'Dessa händelser spårar träffar is svartlistningsloggen för spam.', - 'logentry-spamblacklist-hit' => '$1 orsakade en träff i svartlistningsloggen för spam på $3 genom att försöka lägga till $4.', - 'right-spamblacklistlog' => 'Visa svartlistningslogg för spam', - 'action-spamblacklistlog' => 'visa svartlistningsloggen för spam', ); /** Tamil (தமிழ்) @@ -3873,10 +3803,8 @@ $messages['zh-hant'] = array( 'spam-blacklisted-email-text' => '您的電郵地址目前已列入黑名單以防止您發送電郵予其他用戶。', 'spam-blacklisted-email-signup' => '此電郵地址目前被禁止使用。', 'spam-invalid-lines' => '以下在灌水黑名單的{{PLURAL:$1|一行|多行}}有無效的表示式,請在儲存這頁前先將{{PLURAL:$1|它|它們}}修正:', - 'spam-blacklist-desc' => '基於正則表達式的反垃圾電郵工具,允許加入濫發電郵的URL和/或註冊用戶於此頁面', + 'spam-blacklist-desc' => '以正則表達式為本的防灌水工具:[[MediaWiki:Spam-blacklist]] 與 [[MediaWiki:Spam-whitelist]]', # Fuzzy 'log-name-spamblacklist' => '垃圾連結黑名單日誌', - 'log-description-spamblacklist' => '這些事件已被垃圾郵件黑名單觸發。', - 'logentry-spamblacklist-hit' => '$1於$3嘗試加入$4而觸發垃圾電郵黑名單。', 'right-spamblacklistlog' => '查閱垃圾電郵黑名單日誌', 'action-spamblacklistlog' => '查閱垃圾電郵黑名單日誌', ); diff --git a/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.class.php b/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.class.php index b1c9851d..7318574d 100644 --- a/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.class.php +++ b/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.class.php @@ -28,6 +28,12 @@ class SyntaxHighlight_GeSHi { // Don't trim leading spaces away, just the linefeeds $text = preg_replace( '/^\n+/', '', $text ); + if( $wgUseTidy ) { + // HTML Tidy will convert tabs to spaces incorrectly (bug 30930). + // Preemptively replace the spaces in a more controlled fashion. + $text = self::tabsToSpaces( $text ); + } + // Validate language if( isset( $args['lang'] ) && $args['lang'] ) { $lang = $args['lang']; @@ -95,12 +101,6 @@ class SyntaxHighlight_GeSHi { if( $enclose === GESHI_HEADER_DIV ) { $out = str_replace( "\n", '', $out ); } - // HTML Tidy will convert tabs to spaces incorrectly (bug 30930). - // But the conversion from tab to space occurs while reading the input, - // before the conversion from 	 to tab, so we can armor it that way. - if( $wgUseTidy ) { - $out = str_replace( "\t", '	', $out ); - } // Register CSS $parser->getOutput()->addHeadItem( self::buildHeadItem( $geshi ), "source-{$lang}" ); @@ -488,4 +488,35 @@ class SyntaxHighlight_GeSHi { public static function hOldSpecialVersion_GeSHi( &$sp, &$extensionTypes ) { return self::hSpecialVersion_GeSHi( $extensionTypes ); } + + /** + * Convert tabs to spaces + * + * @param string $text + * @return string + */ + private static function tabsToSpaces( $text ) { + $lines = explode( "\n", $text ); + $lines = array_map( array( __CLASS__, 'tabsToSpacesLine' ), $lines ); + return implode( "\n", $lines ); + } + + /** + * Convert tabs to spaces for a single line + * + * @param $line + * @internal param string $text + * @return string + */ + private static function tabsToSpacesLine( $line ) { + $parts = explode( "\t", $line ); + $width = 8; // To match tidy's config & typical browser defaults + $out = $parts[0]; + foreach( array_slice( $parts, 1 ) as $chunk ) { + $spaces = $width - (strlen( $out ) % $width); + $out .= str_repeat( ' ', $spaces ); + $out .= $chunk; + } + return $out; + } } diff --git a/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.i18n.php b/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.i18n.php index 9b940f3e..8555c4f9 100644 --- a/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.i18n.php +++ b/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.i18n.php @@ -688,11 +688,10 @@ $messages['ksh'] = array( /** Luxembourgish (Lëtzebuergesch) * @author Les Meloures * @author Robby - * @author Soued031 */ $messages['lb'] = array( 'syntaxhighlight-desc' => "Syntax-Ervirhiewung <code><syntaxhighlight></code> mat Hëllef vu [http://qbnz.com/highlighter/ 'GeSHi Highlighter']", - 'syntaxhighlight-specify' => 'Déi gewënscht Sprooch muss sou definéiert ginn:', + 'syntaxhighlight-specify' => 'Déi gewënscht Sprooch muss esou definéiert ginn:', 'syntaxhighlight-supported' => "Ënnerstëtzte Sprooche fir d'Syntax faarweg ze markéieren", 'syntaxhighlight-err-loading' => '(Feeler beim Luede vun der Lëscht vun den ënnerstëtzte Sproochen)', 'syntaxhighlight-err-language' => 'Net valabel Sprooch.', diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi.php index 4323d05c..60741577 100644 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi.php +++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi.php @@ -41,7 +41,7 @@ // /** The version of this GeSHi file */ -define('GESHI_VERSION', '1.0.8.11-wmf1'); // WMF fix for Haskell (bug 52509) +define('GESHI_VERSION', '1.0.8.11'); // Define the root directory for the GeSHi code tree if (!defined('GESHI_ROOT')) { diff --git a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/haskell.php b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/haskell.php index d3b494ed..adae1116 100644 --- a/extensions/SyntaxHighlight_GeSHi/geshi/geshi/haskell.php +++ b/extensions/SyntaxHighlight_GeSHi/geshi/geshi/haskell.php @@ -13,14 +13,6 @@ * ------- * 2005/08/27 (1.0.0) * - First Release - * 2013/09/28 - * - Single quotes dropped from QUOTEMARKS to resolve <https://bugzilla.wikimedia.org/52509>. - * Change is local to SyntaxHighlight_GeSHi, made by Ori Livneh (ori@wikimedia.org), based - * on a proposed upstream patch. - * Upstream bug report: - * <http://sourceforge.net/p/geshi/bugs/217/> - * Upstream patch (stalled since 2012): - * <http://sourceforge.net/p/geshi/bugs/219/> * * TODO (updated 2005/08/27) * ------------------------- @@ -54,7 +46,7 @@ $language_data = array ( 3 => "/{-(?:(?R)|.)-}/s", //Nested Comments ), 'CASE_KEYWORDS' => 0, - 'QUOTEMARKS' => array('"'), // SyntaxHighlight_GeSHi modification; see CHANGES above. + 'QUOTEMARKS' => array('"',"'"), 'ESCAPE_CHAR' => '\\', 'KEYWORDS' => array( /* main haskell keywords */ diff --git a/extensions/TitleBlacklist/TitleBlacklist.i18n.php b/extensions/TitleBlacklist/TitleBlacklist.i18n.php index eb8f6987..ca05a33d 100644 --- a/extensions/TitleBlacklist/TitleBlacklist.i18n.php +++ b/extensions/TitleBlacklist/TitleBlacklist.i18n.php @@ -404,7 +404,6 @@ molimo da {{PLURAL:$1|ga|ih}} ispravite prije spremanja:', * @author Aleator * @author El libre * @author Jordi Roqué - * @author Papapep * @author Pitort * @author SMP * @author Vriullop @@ -418,7 +417,7 @@ $messages['ca'] = array( # Per defecte, no distingeix majúscules de minúscules', 'titleblacklist-forbidden-edit' => 'El títol «$2» està prohibit i no es pot crear. Concorda amb la següent entrada de la llista negra: <code>$1</code>', 'titleblacklist-forbidden-move' => "No es pot moure «$2» a «$3», perquè el títol «$3» està prohibit. Concorda amb l'entrada de la llista negra següent: <code>$1</code>", - 'titleblacklist-forbidden-upload' => "S'ha prohibit el nom de fitxer «$2» i se n'impedeix la creació. Concorda amb la següent línia de la llista negra: <code>$1</code>", + 'titleblacklist-forbidden-upload' => "El nom de fitxer «$2» ha estat prohibit i se n'impedeix la creació. Concorda amb la següent línia de la llista negra: <code>$1</code>", 'titleblacklist-forbidden-new-account' => "No es pot crear el nom d'usuari «$2». Coincideix amb la següent entrada de la llista negra: <code>$1</code>", 'titleblacklist-invalid' => '{{PLURAL:$1|La línia següent|Les línies següents}} de la llista negra no {{PLURAL:$1|és vàlida|són vàlides}}; heu de corregir-{{PLURAL:$1|la|les}} abans de guardar:', 'titleblacklist-override' => 'Ignora la llista negra', @@ -558,7 +557,6 @@ $messages['de-formal'] = array( /** Zazaki (Zazaki) * @author Aspar * @author Erdemaslancan - * @author Marmase */ $messages['diq'] = array( 'titleblacklist-desc' => 'serkaran re desturê vıraştışê pel u hesabê karberan dano, qey qedexekerdışi re yew [[MediaWiki:Titleblacklist|listeya risiyayan]] u [[MediaWiki:Titlewhitelist|listeya risıpiyan]] dano.', @@ -575,8 +573,8 @@ malumatê ey na listeyasiya de zepê ya: <code>$1</code>', malumatê ey na listeyasiya de zêpê ya: <code>$1</code>', 'titleblacklist-forbidden-new-account' => 'vıraştışê nameyê karberê"$2" i qedexe bı. malumatê ey na listeyasiya de zêpê ya: <code>$1</code>', - 'titleblacklist-invalid' => 'Na ğırab lista dı {{PLURAL:$1|en asatır|ené satıri}} néravérené; -Verdé qeyd kerdışi timar keré:', + 'titleblacklist-invalid' => 'nê {{PLURAL:$1|satır o ke|satır ê ke}} listeyasiyayi de qedexe yê; +kerem kerê verqeydkerdışi de raşt kerê:', 'titleblacklist-override' => 'Tenilisti mehesebne', 'right-tboverride' => 'Siya listeya sernuşti nêravêrde ke', 'right-tboverride-account' => 'Tenilisteya naman dê karberan mehesebnê', @@ -1376,15 +1374,14 @@ Hic titulus congruit cum expressione regulari: <code>$1</code>', /** Luxembourgish (Lëtzebuergesch) * @author Robby - * @author Soued031 */ $messages['lb'] = array( 'titleblacklist-desc' => "Erlaabt den Administrateuren et d'Uleeë vu Säiten a Benotzerkonte mat spezifeschen Titelen iwwer eng [[MediaWiki:Titleblacklist|schwaarz Lëscht]] an eng [[MediaWiki:Titlewhitelist|wäiss Lëscht]] ze verbidden", 'titleblacklist' => '# Dëst ass een Titel deen op enger schwaarzer Lëscht steet. Titelen a Benotzernimm op déi dës Ausdréck passe kann net ugeluecht ginn # Benotzt "#" fir Bemierkungen -# Et gëtt tëscht groussen a klenge Buchstawen ënnerscheet', +# Et gëtt tëschent groussen a klenge Buchstawen ënnerscheed', 'titlewhitelist' => "# Dëst ass d'''Whitelist'' vun den Titelen. Benotzt \"#\" fir Bemierkungen. -# Et gëtt een Ënnerscheed tëscht groussen a klenge Buchstawe gemaach", +# Et gëtt een Ënnerscheed tëschent groussen a klenge Buchstawe gemaach", 'titleblacklist-forbidden-edit' => 'Den Titel "$2" dàerf net ugeluecht ginn. En ass op der schwaarzer Lëscht wéint folgendem Begrëff: <code>$1</code>', 'titleblacklist-forbidden-move' => '"$2" kann net op "$3" geréckelt ginn, well den Titel "$3" net däerf ugeluecht ginn. @@ -1392,7 +1389,7 @@ En entsprécht dëser Rubrik vun der schwaarzr Lëscht: <code>$1</code>', 'titleblacklist-forbidden-upload' => 'De Fichiersnumm "$2" kann net benotzt ginn. Hien ass identesch mat dësem Numm vun der schwaarzer Lëscht (black list): <code>$1</code>', 'titleblacklist-forbidden-new-account' => 'De Benotzermumm "$2" gouf gespaart fir benotzt ze ginn. -En ass sou op der \'\'schwaarzer Lëscht\'\': <code>$1</code>', +En ass esou op der \'\'schwaarzer Lëscht\'\': <code>$1</code>', 'titleblacklist-invalid' => 'Dës {{PLURAL:$1|Linn|Linnen}} op der schwaarzer Lëscht vun den {{PLURAL:$1|Titelen ass|Titele sinn}} net valabel; verbessert se virum späicheren:', 'titleblacklist-override' => 'Schwaarz Lëscht ignoréieren', @@ -1501,10 +1498,9 @@ $messages['ml'] = array( * @author Kaustubh * @author Mahitgar * @author Rahuldeshmukh101 - * @author V.narsikar */ $messages['mr'] = array( - 'titleblacklist-desc' => '[[MediaWiki:Titleblacklist|ब्लॅकलीस्ट]] व [[MediaWiki:Titlewhitelist|व्हाईट लीस्ट]] ला अनुसरून पाने आणि सदस्य खात्यांना प्रतिबंधित करण्याची प्रचालकांना परवानगी द्या', + 'titleblacklist-desc' => '[[MediaWiki:Titleblacklist|ब्लॅकलीस्ट]] व [[MediaWiki:Titlewhitelist|व्हाईट लीस्ट]] ला अनुसरून पाने आणि सदस्य खात्यांना प्रतिबंधतीअ करण्याची प्रचालकांना परवानगी द्या', 'titleblacklist' => '# ही ब्लॉक केलेल्या शीर्षकांची यादी आहे. या यादीत असलेल्या शीर्षकांचे लेख लिहिता येणार नाहीत. # शेरा देण्यासाठी "#" वापरा.', 'titlewhitelist' => '# ही वापरू शकत असलेल्या शीर्षकांची यादी आहे. शेरा देण्यासाठी "#" वापरा', diff --git a/extensions/TitleBlacklist/TitleBlacklist.list.php b/extensions/TitleBlacklist/TitleBlacklist.list.php index cec4dd89..d197a9c5 100644 --- a/extensions/TitleBlacklist/TitleBlacklist.list.php +++ b/extensions/TitleBlacklist/TitleBlacklist.list.php @@ -175,7 +175,7 @@ class TitleBlacklist { } $blacklist = $this->getBlacklist(); foreach ( $blacklist as $item ) { - if ( $item->matches( $title->getFullText(), $action ) ) { + if ( $item->matches( $title, $action ) ) { if ( $this->isWhitelisted( $title, $action ) ) { return false; } @@ -199,7 +199,7 @@ class TitleBlacklist { } $whitelist = $this->getWhitelist(); foreach ( $whitelist as $item ) { - if ( $item->matches( $title->getFullText(), $action ) ) { + if ( $item->matches( $title, $action ) ) { return true; } } @@ -343,7 +343,7 @@ class TitleBlacklistEntry { * Check whether a user can perform the specified action * on the specified Title * - * @param $title string to check + * @param $title Title to check * @param $action %Action to check * @return bool TRUE if the the regex matches the title, and is not overridden * else false if it doesn't match (or was overridden) @@ -357,17 +357,8 @@ class TitleBlacklistEntry { return false; } - if ( isset( $this->mParams['antispoof'] ) && is_callable( 'AntiSpoof::checkUnicodeString' ) ) { - list( $ok, $norm ) = AntiSpoof::checkUnicodeString( $title ); - if ( $ok == "OK" ) { - list( $ver, $title ) = explode( ':', $norm, 2 ); - } else { - wfDebugLog( 'TitleBlacklist', 'AntiSpoof could not normalize "' . $title . '".' ); - } - } - wfSuppressWarnings(); - $match = preg_match( "/^(?:{$this->mRegex})$/us" . ( isset( $this->mParams['casesensitive'] ) ? '' : 'i' ), $title ); + $match = preg_match( "/^(?:{$this->mRegex})$/us" . ( isset( $this->mParams['casesensitive'] ) ? '' : 'i' ), $title->getFullText() ); wfRestoreWarnings(); global $wgUser; @@ -436,9 +427,6 @@ class TitleBlacklistEntry { if ( preg_match( '/errmsg\s*=\s*(.+)/i', $opt, $matches ) ) { $options['errmsg'] = $matches[1]; } - if ( $opt2 == 'antispoof' ) { - $options['antispoof'] = true; - } } // Process magic words preg_match_all( '/{{\s*([a-z]+)\s*:\s*(.+?)\s*}}/', $regex, $magicwords, PREG_SET_ORDER ); diff --git a/extensions/TitleBlacklist/TitleBlacklist.php b/extensions/TitleBlacklist/TitleBlacklist.php index 2bb62b0a..68fb6778 100644 --- a/extensions/TitleBlacklist/TitleBlacklist.php +++ b/extensions/TitleBlacklist/TitleBlacklist.php @@ -76,10 +76,6 @@ $wgHooks['CentralAuthAutoCreate'][] = 'TitleBlacklistHooks::centralAuthAutoCreat $wgHooks['EditFilter'][] = 'TitleBlacklistHooks::validateBlacklist'; $wgHooks['ArticleSaveComplete'][] = 'TitleBlacklistHooks::clearBlacklist'; $wgHooks['UserCreateForm'][] = 'TitleBlacklistHooks::addOverrideCheckbox'; -$wgHooks['UnitTestsList'][] = function( &$files ) { - $files += glob( __DIR__ . '/tests/*Test.php' ); - return true; -}; $wgResourceModules['mediawiki.api.titleblacklist'] = array( 'scripts' => 'mediawiki.api.titleblacklist.js', diff --git a/extensions/TitleBlacklist/tests/ApiQueryTitleBlacklistTest.php b/extensions/TitleBlacklist/tests/ApiQueryTitleBlacklistTest.php index 344e9996..1f8164e7 100644 --- a/extensions/TitleBlacklist/tests/ApiQueryTitleBlacklistTest.php +++ b/extensions/TitleBlacklist/tests/ApiQueryTitleBlacklistTest.php @@ -105,28 +105,6 @@ class ApiQueryTitleBlacklistTest extends ApiTestCase { $listed[0]['titleblacklist']['line'], 'Correct blacklist line is returned' ); - } - - /** - * Tests integration with the AntiSpoof extension - */ - function testAntiSpoofIntegration() { - if ( !class_exists( 'AntiSpoof') ) { - $this->markTestSkipped( "This test requires the AntiSpoof extension" ); - } - - $listed = $this->doApiRequest( array( - 'action' => 'titleblacklist', - 'tbtitle' => 'AVVVV', - 'tbaction' => 'create', - 'tbnooverride' => true, - ) ); - - $this->assertEquals( - 'blacklisted', - $listed[0]['titleblacklist']['result'], - 'Spoofed title is blacklisted' - ); } } diff --git a/extensions/TitleBlacklist/tests/testSource b/extensions/TitleBlacklist/tests/testSource index 235cc671..f73d9dd7 100644 --- a/extensions/TitleBlacklist/tests/testSource +++ b/extensions/TitleBlacklist/tests/testSource @@ -2,4 +2,3 @@ .*[Ff]ail.* .*[Nn]yancat.* <errmsg=blacklisted-nyancat> .*evil_acc.* <newaccountonly> -AW{1,10} <antispoof> diff --git a/extensions/WikiEditor/.jshintignore b/extensions/WikiEditor/.jshintignore index b97a47d3..66a218b5 100644 --- a/extensions/WikiEditor/.jshintignore +++ b/extensions/WikiEditor/.jshintignore @@ -1,4 +1,2 @@ # upstream lib from Google modules/contentCollector.js -# messy -modules/jquery.wikiEditor.iframe.js diff --git a/extensions/WikiEditor/.jshintrc b/extensions/WikiEditor/.jshintrc index 5d335e32..64cd5087 100644 --- a/extensions/WikiEditor/.jshintrc +++ b/extensions/WikiEditor/.jshintrc @@ -1,33 +1,9 @@ { - /* Common */ - - // Enforcing - "camelcase": true, - "curly": true, - "eqeqeq": true, - "immed": true, - "latedef": true, - "newcap": true, - "noarg": true, - "noempty": true, - "nonew": true, - "quotmark": "single", - "trailing": true, - "undef": true, - "unused": true, - // Legacy - "onevar": true, - - /* Local */ - - // Relaxing - "loopfunc": true, - "multistr": true, - // Environment - "browser": true, - "predef": [ "mediaWiki", "jQuery" - ] + ], + "browser": true, + "smarttabs": true, + "multistr": true } diff --git a/extensions/WikiEditor/WikiEditor.i18n.php b/extensions/WikiEditor/WikiEditor.i18n.php index 97cef8ff..26f1e2ca 100644 --- a/extensions/WikiEditor/WikiEditor.i18n.php +++ b/extensions/WikiEditor/WikiEditor.i18n.php @@ -334,7 +334,6 @@ I guess that "feature-providing modules" means the same as "modules providing fe {{Identical|Publish}}", 'wikieditor-publish-dialog-goback' => 'Button that closes the dialog that opens when the user clicks the Publish button. {{Identical|Go back}}', - 'wikieditor-template-editor-dialog-title' => '{{Identical|Edit template}}', 'wikieditor-template-editor-dialog-submit' => '{{Identical|Update}}', 'wikieditor-template-editor-dialog-cancel' => '{{Identical|Cancel}}', 'wikieditor-toc-preference' => "Option at [[Special:Preferences]], tab ''{{int:prefs-editing}}''", @@ -1282,7 +1281,6 @@ $1:Eixemplo.jpg|Piet_de_foto_2', /** Old English (Ænglisc) * @author Gott wisst - * @author Shirayuki * @author Wōdenhelm */ $messages['ang'] = array( @@ -4034,7 +4032,6 @@ $1:Cuntuh.jpg|Judul2', ); /** Bengali (বাংলা) - * @author Aftab1995 * @author Bellayet * @author Leemon2010 * @author Nasir8891 @@ -4152,8 +4149,8 @@ $messages['bn'] = array( 'wikieditor-toolbar-tool-subscript-example' => 'সাবস্ক্রিপ্ট লেখা', 'wikieditor-toolbar-group-insert' => 'যোগ করো', 'wikieditor-toolbar-tool-gallery' => 'ছবির গ্যালারী', - 'wikieditor-toolbar-tool-gallery-example' => '$1:উদাহরণ.jpg|ক্যাপশন১ -$1:উদাহরণ.jpg|ক্যাপশন২', + 'wikieditor-toolbar-tool-gallery-example' => '$1:Example.jpg|ক্যাপশন১ +$1:Example.jpg|ক্যাপশন২', 'wikieditor-toolbar-tool-newline' => 'নতুন লাইন', 'wikieditor-toolbar-tool-table' => 'ছক', 'wikieditor-toolbar-tool-table-example-old' => '- @@ -5285,27 +5282,27 @@ $messages['ce'] = array( 'wikieditor-toolbar' => 'Рéдоккху меттиг', 'wikieditor-toolbar-desc' => 'Рéдоккху меттиг гlоле лелорца', 'wikieditor-toolbar-preference' => 'Латайé гlоле йолу тадар', - 'wikieditor-toolbar-dialogs-preference' => 'Латайé йозан хьажораг йуьллург, таблицан а кхин хӀумнашна а', + 'wikieditor-toolbar-dialogs-preference' => 'Латайé йозан хьажориг йуьллург, таблийцан аъ кхин хlумнашна', # Fuzzy 'wikieditor-toolbar-loading' => 'Чуйолуш…', 'wikieditor-toolbar-tool-bold' => 'Дерстино', 'wikieditor-toolbar-tool-bold-example' => 'Дерстино до йоза', 'wikieditor-toolbar-tool-italic' => 'Сетта', 'wikieditor-toolbar-tool-italic-example' => 'Сеттан до йоза', - 'wikieditor-toolbar-tool-ilink' => 'Чоьхьа хьажораг', + 'wikieditor-toolbar-tool-ilink' => 'Чоьхьа хьажориг', 'wikieditor-toolbar-tool-ilink-example' => 'Хьажориган коьрта могlа', 'wikieditor-toolbar-tool-xlink' => 'Арахьара хьажораг (йиц ма йе хӀотталушерг http://)', - 'wikieditor-toolbar-tool-xlink-example' => 'http://www.example.com хьажораг корта', - 'wikieditor-toolbar-tool-link' => 'Хьажораг', - 'wikieditor-toolbar-tool-link-title' => 'Чуйилла хьажораг', + 'wikieditor-toolbar-tool-xlink-example' => 'http://www.example.com хьажориг корта', + 'wikieditor-toolbar-tool-link' => 'Хьажориг', + 'wikieditor-toolbar-tool-link-title' => 'Чуйилла хьажориг', 'wikieditor-toolbar-tool-link-int' => 'Оцу вики агlон', 'wikieditor-toolbar-tool-link-int-target' => 'Хьажийна агlо йа URL:', 'wikieditor-toolbar-tool-link-int-target-tooltip' => 'Агlон цlе йа URL', 'wikieditor-toolbar-tool-link-int-text' => 'Гойтуш долу йоза:', 'wikieditor-toolbar-tool-link-int-text-tooltip' => 'Чудилла схьагайта дезаш долу йоза', 'wikieditor-toolbar-tool-link-ext' => 'Хьалхара агlон чохь', - 'wikieditor-toolbar-tool-link-ext-target' => 'URL хьажорагаш:', + 'wikieditor-toolbar-tool-link-ext-target' => 'URL хьажоригаш:', 'wikieditor-toolbar-tool-link-ext-text' => 'Хьажориган йоза:', - 'wikieditor-toolbar-tool-link-insert' => 'Чуйилла хьажораг', + 'wikieditor-toolbar-tool-link-insert' => 'Чуйилла хьажориг', 'wikieditor-toolbar-tool-link-cancel' => 'Цаоьшу', 'wikieditor-toolbar-tool-link-int-target-status-exists' => 'Ишта агlо йолш ю', 'wikieditor-toolbar-tool-link-int-target-status-notexists' => 'Ишта агlо яц', @@ -5313,10 +5310,10 @@ $messages['ce'] = array( 'wikieditor-toolbar-tool-link-int-target-status-external' => 'Арахьара хьажораг', 'wikieditor-toolbar-tool-link-int-target-status-loading' => 'Агlо ю яц хьоьжуш…', 'wikieditor-toolbar-tool-link-int-invalid' => 'Гойтуш йолу цlе ца магайо.', - 'wikieditor-toolbar-tool-link-lookslikeinternal' => 'Ахьа хоттийна URL кхечу вики-агӀонан хьажорагах тера ю. Лаьий хьуна и хьажораг чоьхьарчех я?', - 'wikieditor-toolbar-tool-link-lookslikeinternal-int' => 'Чоьхьа хьажораг', + 'wikieditor-toolbar-tool-link-lookslikeinternal' => 'Ахьа хоттийна URL кхечу вики-агlонан хьажоригах тера ю. Лаьий хьуна и хьажориг чоьхьарчех я?', + 'wikieditor-toolbar-tool-link-lookslikeinternal-int' => 'Чоьхьа хьажориг', 'wikieditor-toolbar-tool-link-lookslikeinternal-ext' => 'Арахьара хьажораг', - 'wikieditor-toolbar-tool-link-empty' => 'Ахьа ца гайтин мичхьа хьажойеза хьажораг.', + 'wikieditor-toolbar-tool-link-empty' => 'Ахьа ца гайтин мичхьа хьажойеза хьажориг.', 'wikieditor-toolbar-tool-file' => 'Чохь йолу файл', 'wikieditor-toolbar-tool-file-example' => 'Example.jpg', 'wikieditor-toolbar-tool-file-title' => 'Файл чуйиллар', @@ -5334,7 +5331,7 @@ $messages['ce'] = array( 'wikieditor-toolbar-tool-reference-insert' => 'Чудилла', 'wikieditor-toolbar-tool-reference-text' => 'ТIетовжаран йоза', 'wikieditor-toolbar-tool-signature' => 'Куьгтаlор хан хlоттош', - 'wikieditor-toolbar-section-advanced' => 'Кхин тӀе', + 'wikieditor-toolbar-section-advanced' => 'Кхин тlе дукха', 'wikieditor-toolbar-tool-heading' => 'Корта', 'wikieditor-toolbar-tool-heading-1' => 'Локхалла 1', 'wikieditor-toolbar-tool-heading-2' => 'Локхалла 2', @@ -5408,11 +5405,11 @@ $1:Example.jpg|Цуьнах лаце2', 'wikieditor-toolbar-tool-replace-success' => 'Балийна хийцам: $1.', # Fuzzy 'wikieditor-toolbar-tool-replace-emptysearch' => 'Ахьа ца гайтна хlу лаха деза.', 'wikieditor-toolbar-tool-replace-invalidregex' => 'Ахьа язйина цlе юх-юха нийса яц: $1', - 'wikieditor-toolbar-section-characters' => 'Леррина символаш', + 'wikieditor-toolbar-section-characters' => 'Саболу куьцаш', 'wikieditor-toolbar-characters-page-latin' => 'Латинан', 'wikieditor-toolbar-characters-page-latinextended' => 'Латинан алсам', 'wikieditor-toolbar-characters-page-ipa' => 'ДАЭ (IPA)', - 'wikieditor-toolbar-characters-page-symbols' => 'Символаш', + 'wikieditor-toolbar-characters-page-symbols' => 'Саболурш', 'wikieditor-toolbar-characters-page-greek' => 'Гlайрхойн', 'wikieditor-toolbar-characters-page-cyrillic' => 'Кирилан', 'wikieditor-toolbar-characters-page-arabic' => 'Ӏарбийн', @@ -5432,7 +5429,7 @@ $1:Example.jpg|Цуьнах лаце2', 'wikieditor-toolbar-help-heading-syntax' => 'Хlу йуьллу ахьа', 'wikieditor-toolbar-help-heading-result' => 'Хlу хуьлу хьуна', 'wikieditor-toolbar-help-page-format' => 'Бáрамхlоттор', - 'wikieditor-toolbar-help-page-link' => 'Хьажорагаш', + 'wikieditor-toolbar-help-page-link' => 'Хьажоригаш', 'wikieditor-toolbar-help-page-heading' => 'Коьрта могlнаш', 'wikieditor-toolbar-help-page-list' => 'Могlамаш', 'wikieditor-toolbar-help-page-file' => 'Файлаш', @@ -5447,7 +5444,7 @@ $1:Example.jpg|Цуьнах лаце2', 'wikieditor-toolbar-help-content-bolditalic-description' => 'Дерстино курсеттан', 'wikieditor-toolbar-help-content-bolditalic-syntax' => "'''''Дерстино курсеттан'''''", 'wikieditor-toolbar-help-content-bolditalic-result' => '<em><strong>Дерстино курсеттан</strong></em>', - 'wikieditor-toolbar-help-content-ilink-description' => 'Чоьхьа хьажораг', + 'wikieditor-toolbar-help-content-ilink-description' => 'Чоьхьа хьажориг', 'wikieditor-toolbar-help-content-ilink-syntax' => '[[Агlонан коьрта могlа|Хьажориган йоза]]<br />[[Агlонан коьрта могlа]]', 'wikieditor-toolbar-help-content-ilink-result' => "<a href='#'>Хьажориган йоза</a><br /><a href='#'>Агlонан коьрта могlа</a>", 'wikieditor-toolbar-help-content-xlink-description' => 'Арахьара хьажораг', @@ -5479,7 +5476,7 @@ $1:Example.jpg|Цуьнах лаце2', 'wikieditor-toolbar-help-content-reference-description' => 'Билгалдаккхар', 'wikieditor-toolbar-help-content-reference-syntax' => 'Агlонан йоза.<ref name="test">[http://www.example.org Хьажориган йоза], кхин тlе дузуш йоза.</ref>', 'wikieditor-toolbar-help-content-reference-result' => "Агlонан йоза.<sup><a href='#'>[1]</a></sup>", - 'wikieditor-toolbar-help-content-rereference-description' => 'Кхин тӀе лело изза хьажораг', + 'wikieditor-toolbar-help-content-rereference-description' => 'Кхин тlе лело изза хьажориг', 'wikieditor-toolbar-help-content-rereference-result' => "Агlонан йоза<sup><a href='#'>[1]</a></sup>.", 'wikieditor-toolbar-help-content-showreferences-description' => 'Гайта билгалдаккхар', 'wikieditor-toolbar-help-content-showreferences-result' => "<ol class='references'><li id='cite_note-test-0'><b><a title='' href='#'>^</a></b> <a rel='nofollow' title='http://www.example.org' class='external text' href='#'>Хьажориган йоза</a>, кхин тlе дузуш йоза.</li></ol>", @@ -6134,7 +6131,7 @@ $messages['cy'] = array( 'wikieditor-toolbar' => 'Bar offer golygu', 'wikieditor-toolbar-desc' => 'Bar offer y dudalen olygu gyda gwelliannau defnyddioldeb', 'wikieditor-toolbar-preference' => "Defnyddio'r bar offer golygu estynedig", - 'wikieditor-toolbar-dialogs-preference' => "Galluogi'r dewin sy'n mewnosod cysylltau a thablau, ac sy'n gallu chwilio a disodli", + 'wikieditor-toolbar-dialogs-preference' => "Galluoger y dewin sy'n mewnosod cysylltau a thablau, ac sy'n gallu chwilio a disodli", 'wikieditor-toolbar-hidesig' => "Cuddio'r botwm llofnodi rhag y tudalennau yn y prif barth", 'wikieditor-toolbar-loading' => "Wrthi'n llwytho...", 'wikieditor-toolbar-tool-bold' => 'Praff', @@ -6895,7 +6892,6 @@ Möchten Sie daraus einen internen Link machen?', /** Zazaki (Zazaki) * @author Erdemaslancan * @author Gorizon - * @author Marmase * @author Mirzali * @author Xoser */ @@ -6978,10 +6974,10 @@ $messages['diq'] = array( 'wikieditor-toolbar-file-format-none' => 'çıniyo', 'wikieditor-toolbar-tool-file-insert' => 'Têare ker', 'wikieditor-toolbar-tool-file-cancel' => 'Bıterkne', - 'wikieditor-toolbar-tool-reference' => 'Referans', + 'wikieditor-toolbar-tool-reference' => 'çıme', 'wikieditor-toolbar-tool-reference-example' => 'metnê notê bınini tiya kerê', 'wikieditor-toolbar-tool-reference-cancel' => 'Bıtexelne', - 'wikieditor-toolbar-tool-reference-title' => 'Referans dek', + 'wikieditor-toolbar-tool-reference-title' => 'Referance de bike', 'wikieditor-toolbar-tool-reference-insert' => 'de bike', 'wikieditor-toolbar-tool-reference-text' => 'Nusteyê Referansi', 'wikieditor-toolbar-tool-signature' => 'tamğayê imza ve zamani', @@ -6996,7 +6992,7 @@ $messages['diq'] = array( 'wikieditor-toolbar-group-format' => 'Format', 'wikieditor-toolbar-tool-ulist' => 'listeya maddeya işaretıni', 'wikieditor-toolbar-tool-ulist-example' => 'unsuro listeya maddeya işaretıni', - 'wikieditor-toolbar-tool-olist' => 'Listeya nımreyın', + 'wikieditor-toolbar-tool-olist' => 'listeya numreyıni', 'wikieditor-toolbar-tool-olist-example' => 'unsuro listeya numreyıni', 'wikieditor-toolbar-tool-indent' => 'Paragraf', 'wikieditor-toolbar-tool-indent-example' => 'Rêza paragrafi', @@ -7082,7 +7078,7 @@ $1:misal.jpg|nuşteyê resmi2', 'wikieditor-toolbar-characters-endash' => 'tira kılme', 'wikieditor-toolbar-characters-emdash' => 'tira derge', 'wikieditor-toolbar-characters-minus' => 'işaretê kemiye', - 'wikieditor-toolbar-section-help' => 'Desteg', + 'wikieditor-toolbar-section-help' => 'Peşti', 'wikieditor-toolbar-help-heading-description' => 'Şınasnayış', 'wikieditor-toolbar-help-heading-syntax' => 'o yo ke şıma nuşt', 'wikieditor-toolbar-help-heading-result' => 'o yo ke şıma gırewt', @@ -7092,7 +7088,7 @@ $1:misal.jpg|nuşteyê resmi2', 'wikieditor-toolbar-help-page-list' => 'Listey', 'wikieditor-toolbar-help-page-file' => 'dosyayi', 'wikieditor-toolbar-help-page-reference' => 'Çımey', - 'wikieditor-toolbar-help-page-discussion' => 'Vaten', + 'wikieditor-toolbar-help-page-discussion' => 'werê-ameyiş/munaqeşa', 'wikieditor-toolbar-help-content-italic-description' => 'italik', 'wikieditor-toolbar-help-content-italic-syntax' => "''metno italik''", 'wikieditor-toolbar-help-content-italic-result' => '<em>metno italik</em>', @@ -7123,13 +7119,13 @@ $1:misal.jpg|nuşteyê resmi2', 'wikieditor-toolbar-help-content-ulist-description' => 'listeya işareti ya maddeyın', 'wikieditor-toolbar-help-content-ulist-syntax' => '* unsurê listeyi<br />* unsurê listeyi', 'wikieditor-toolbar-help-content-ulist-result' => '<ul><li>unsurê listeyi</li><li>unsurê listeyi</li></ul>', - 'wikieditor-toolbar-help-content-olist-description' => 'Listeya nımreyın', + 'wikieditor-toolbar-help-content-olist-description' => 'listeya numreyın', 'wikieditor-toolbar-help-content-olist-syntax' => '# unsurê listeyi<br /># unsurê listeyi', 'wikieditor-toolbar-help-content-olist-result' => '<ol><li>unsurê listeyi</li><li>unsurê listeyi</li></ol>', 'wikieditor-toolbar-help-content-file-description' => 'dosyaya weradaye/nımıte', 'wikieditor-toolbar-help-content-file-syntax' => '[[$1:Example.png|thumb|Nuşteyê resîmî]]', 'wikieditor-toolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Caption text' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Enlarge' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>metnê resmi</div></div>", - 'wikieditor-toolbar-help-content-reference-description' => 'Referans', + 'wikieditor-toolbar-help-content-reference-description' => 'çıme/referans', 'wikieditor-toolbar-help-content-reference-syntax' => 'metnê peli.<ref name="tesel kerdış/cerebnayiş">[http://www.misal.org metnê gıreyi], zeylê metni.</ref>', 'wikieditor-toolbar-help-content-reference-result' => "metnê peli.<sup><a href='#'>[1]</a></sup>", 'wikieditor-toolbar-help-content-rereference-description' => 'şuxulnayişê zeylê o çımeyi', @@ -8669,7 +8665,7 @@ $messages['fa'] = array( 'wikieditor' => 'رابط ویرایش پیشرفته ویکیمتن', 'wikieditor-desc' => 'یک رابط ویرایش پیشرفته ویکیمتن و چندین پودمان دارای قابلیت فراهم میکند', 'wikieditor-wikitext-tab' => 'ویکیمتن', - 'wikieditor-loading' => 'در حال بارگیری...', + 'wikieditor-loading' => 'در حال بارگیری', 'wikieditor-preview-preference' => 'فعالسازی پیشنمایش کنار یک دیگر', 'wikieditor-preview-tab' => 'پیشنمایش', 'wikieditor-preview-changes-tab' => 'تغییرها', @@ -8918,7 +8914,6 @@ $1:مثال.jpg|عنوان ۲', * @author Nedergard * @author Nike * @author Olli - * @author Pxos * @author Silvonen * @author Str4nd * @author Stryn @@ -8985,7 +8980,6 @@ $messages['fi'] = array( 'wikieditor-toolbar-tool-link-int-target-status-invalid' => 'Virheellinen otsikko', 'wikieditor-toolbar-tool-link-int-target-status-external' => 'Ulkoinen linkki', 'wikieditor-toolbar-tool-link-int-target-status-loading' => 'Tarkastetaan sivun olemassaolo…', - 'wikieditor-toolbar-tool-link-int-target-status-disambig' => 'Täsmennyssivu', 'wikieditor-toolbar-tool-link-int-invalid' => 'Antamasi otsikko on virheellinen.', 'wikieditor-toolbar-tool-link-lookslikeinternal' => 'URL-osoite, jonka annoit näyttää siltä kuin se olisi linkki toiselle wikisivulle. Haluatko tehdä siitä sisäisen linkin?', @@ -9737,7 +9731,6 @@ $messages['ga'] = array( /** Scottish Gaelic (Gàidhlig) * @author Akerbeltz - * @author Shirayuki */ $messages['gd'] = array( 'wikieditor' => 'Eadar-aghaidh deasachadh wikitext adhartach', @@ -9771,7 +9764,7 @@ $messages['gd'] = array( 'wikieditor-toolbar' => 'Am bàr-inneil deasachaidh', 'wikieditor-toolbar-desc' => 'Am bàr-inneil deasachaidh le comasan a bharrachd', 'wikieditor-toolbar-preference' => 'Cuir am bàr-inneil le comasan a bharrachd an comas', - 'wikieditor-toolbar-dialogs-preference' => 'Cuir an comas na draoidhean airson ceanglaichean, clàran agus am foincsean airson lorg a dhèanamh no rudan a chur an àite rudan eile', + 'wikieditor-toolbar-dialogs-preference' => 'Cuir an comas na còmhraidhean airson ceanglaichean, clàir is rudan eile a chur a-steach', # Fuzzy 'wikieditor-toolbar-loading' => "'Ga luchdadh...", 'wikieditor-toolbar-tool-bold' => 'Trom', 'wikieditor-toolbar-tool-bold-example' => 'Teacs trom', @@ -11524,7 +11517,6 @@ $messages['hif-latn'] = array( /** Croatian (hrvatski) * @author Bugoslav - * @author Eleassar * @author Ex13 * @author Excaliboor * @author MaGa @@ -11546,7 +11538,7 @@ $messages['hr'] = array( 'wikieditor-publish-preference' => 'Omogućiti korak-po-korak izdavanje', 'wikieditor-publish-button-publish' => 'Objaviti', 'wikieditor-publish-button-cancel' => 'Odustani', - 'wikieditor-publish-dialog-title' => 'Objavi na {{GRAMMAR:dajalnik|{{SITENAME}}}}', + 'wikieditor-publish-dialog-title' => 'Objavi na {{SITENAME}}', 'wikieditor-publish-dialog-summary' => 'Uredi sažetak (kratko opišite promjene koje ste učinili):', 'wikieditor-publish-dialog-minor' => 'Manja promjena', 'wikieditor-publish-dialog-watch' => 'Prati ovu stranicu', @@ -15321,7 +15313,7 @@ $1:Example.jpg|설명2', 'wikieditor-toolbar-tool-table-zero' => '행이나 열의 개수가 0인 표를 넣을 수 없습니다.', 'wikieditor-toolbar-tool-replace' => '찾아 바꾸기', 'wikieditor-toolbar-tool-replace-title' => '찾아 바꾸기', - 'wikieditor-toolbar-tool-replace-search' => '찾을 대상:', + 'wikieditor-toolbar-tool-replace-search' => '찾기:', 'wikieditor-toolbar-tool-replace-replace' => '바꾸기:', 'wikieditor-toolbar-tool-replace-case' => '대소문자를 구별', 'wikieditor-toolbar-tool-replace-regex' => '찾을 문자열에 정규 표현식을 적용', @@ -16476,8 +16468,6 @@ $1:Exemplum.jpg|Descriptio 2', 'wikieditor-toolbar-characters-page-telugu' => 'Telugu', 'wikieditor-toolbar-section-help' => 'Adiutatum', 'wikieditor-toolbar-help-heading-description' => 'Descriptio', - 'wikieditor-toolbar-help-heading-syntax' => 'Quod scribis', - 'wikieditor-toolbar-help-heading-result' => 'Quod accipies', 'wikieditor-toolbar-help-page-format' => 'Formatio', 'wikieditor-toolbar-help-page-link' => 'Nexus', 'wikieditor-toolbar-help-page-heading' => 'Tituli', @@ -16500,31 +16490,11 @@ $1:Exemplum.jpg|Descriptio 2', 'wikieditor-toolbar-help-content-xlink-description' => 'Nexus externus', 'wikieditor-toolbar-help-content-xlink-syntax' => '[http://www.example.org Titulus nexus]<br />[http://www.example.org]<br />http://www.example.org', 'wikieditor-toolbar-help-content-xlink-result' => "<a href='#' class='external'>Titulus nexus</a><br /><a href='#' class='external autonumber'>[1]</a><br /><a href='#' class='external'>http://www.example.org</a>", - 'wikieditor-toolbar-help-content-heading2-description' => 'Secundi ordinis titulus', - 'wikieditor-toolbar-help-content-heading2-syntax' => '== Textus tituli ==', - 'wikieditor-toolbar-help-content-heading2-result' => '<h2>Textus tituli</h2>', - 'wikieditor-toolbar-help-content-heading3-description' => 'Tertii ordinis titulus', - 'wikieditor-toolbar-help-content-heading3-syntax' => '=== Textus tituli ===', - 'wikieditor-toolbar-help-content-heading3-result' => '<h3>Textus tituli</h3>', - 'wikieditor-toolbar-help-content-heading4-description' => 'Quarti ordinis titulus', - 'wikieditor-toolbar-help-content-heading4-syntax' => '==== Textus tituli ====', - 'wikieditor-toolbar-help-content-heading4-result' => '<h4>Textus tituli</h4>', - 'wikieditor-toolbar-help-content-heading5-description' => 'Quinti ordinis titulus', - 'wikieditor-toolbar-help-content-heading5-syntax' => '===== Textus tituli =====', - 'wikieditor-toolbar-help-content-heading5-result' => '<h5>Textus tituli</h5>', - 'wikieditor-toolbar-help-content-ulist-description' => 'Index globosus', - 'wikieditor-toolbar-help-content-ulist-syntax' => '* Res indicata<br />* Res indicata', - 'wikieditor-toolbar-help-content-ulist-result' => '<ul><li>Res indicata</li><li>Res indicata</li></ul>', 'wikieditor-toolbar-help-content-file-description' => 'Fasciculus in pagina impositus', 'wikieditor-toolbar-help-content-file-syntax' => '[[$1:Exemplum.png|thumb|Descriptio fasciculi]]', # Fuzzy 'wikieditor-toolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Descriptio fasciculi' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Augere' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Descriptio fasciculi</div></div>", 'wikieditor-toolbar-help-content-reference-description' => 'Referentia bibliographica', - 'wikieditor-toolbar-help-content-reference-syntax' => 'Textus paginae.<ref name="test">[http://www.example.org Textus nexus], textus additus.</ref>', - 'wikieditor-toolbar-help-content-reference-result' => "Textus paginae.<sup><a href='#'>[1]</a></sup>", - 'wikieditor-toolbar-help-content-rereference-description' => 'Eiusdem referentiae usus additus', - 'wikieditor-toolbar-help-content-rereference-result' => "Textus paginae.<sup><a href='#'>[1]</a></sup>", 'wikieditor-toolbar-help-content-showreferences-description' => 'Referentias bibliographicas monstrare', - 'wikieditor-toolbar-help-content-showreferences-result' => "<ol class='references'><li id='cite_note-test-0'><b><a title='' href='#'>^</a></b> <a rel='nofollow' title='http://www.example.org' class='external text' href='#'>Textus nexus</a>, textus additus.</li></ol>", 'wikieditor-toolbar-help-content-signaturetimestamp-description' => 'Subscriptio tua cum indicatione temporis', 'wikieditor-toolbar-help-content-signaturetimestamp-result' => "<a href='#' title='{{#special:mypage}}'>Nomen usoris</a> (<a href='#' title='{{#special:mytalk}}'>disputatio</a>) 15:54, 10 Iunii 2009 (UTC)", 'wikieditor-toolbar-help-content-signature-description' => 'Subscriptio', @@ -16567,7 +16537,7 @@ $messages['lb'] = array( 'wikieditor-toolbar' => 'Toolbar änneren', 'wikieditor-toolbar-desc' => 'Toolbar vun de Säitenännerunge mat erweiderter Benotzerfrëndlechkeet', 'wikieditor-toolbar-preference' => 'Déi erweidert Ännerungs-Toolbar aktivéieren', - 'wikieditor-toolbar-dialogs-preference' => "Assistente fir d'Drasetze vu Linken, Tabellen genee sou wéi d'Funktioun 'sichen an ersetzen' aschalten", + 'wikieditor-toolbar-dialogs-preference' => "Assistene fir d'Drasetze vu Linken, Tabellen genee esou wéi d'Funktioun 'sichen an ersetzen' aschalten", 'wikieditor-toolbar-hidesig' => 'Den Ënnerschrëftsknäppchen op Säiten am Haaptnummraum verstoppen', 'wikieditor-toolbar-loading' => 'Lueden...', 'wikieditor-toolbar-tool-bold' => 'Fettgedréckt', @@ -18633,22 +18603,22 @@ $messages['mr'] = array( 'wikieditor' => 'विकिमजकूर संपादनाची विकसित सुविधा', 'wikieditor-desc' => 'विस्तारणीय विकिमजकुर संपादन आंतरपृष्ठ (इंटरफेस) आणि बर्याच वैशिष्ट्यपूर्ण निश्चयिका (मॊड्यूल्स) पुरवते', 'wikieditor-wikitext-tab' => 'विकिमजकूर', - 'wikieditor-loading' => 'प्रभारण करीत आहे', + 'wikieditor-loading' => 'चढवत आहे…', 'wikieditor-preview-preference' => 'सोबतच आजु-बाजूस दिसणारी झलक शक्य करा.', 'wikieditor-preview-tab' => 'झलक', 'wikieditor-preview-changes-tab' => 'बदल', - 'wikieditor-preview-loading' => 'प्रभारण करीत आहे', + 'wikieditor-preview-loading' => 'चढवत आहे…', 'wikieditor-previewDialog-preference' => '"झलक पहा" चौकट सक्षम करा', 'wikieditor-previewDialog-tab' => 'झलक पहा', - 'wikieditor-previewDialog-loading' => 'प्रभारण करीत आहे', + 'wikieditor-previewDialog-loading' => 'चढवत आहे…', 'wikieditor-publish-preference' => 'टप्प्या-टप्प्याने प्रकाशन शक्य करा', 'wikieditor-publish-button-publish' => 'प्रकाशित करा दाखवा', 'wikieditor-publish-button-cancel' => 'रद्द करा', 'wikieditor-publish-dialog-title' => '{{संकेतस्थळनाव}} येथे प्रदर्शित करा', - 'wikieditor-publish-dialog-summary' => 'बदलांचा सारांश :(आपण केलेल्या बदलांचे थोडक्यात वर्णन करा):', + 'wikieditor-publish-dialog-summary' => 'बदलांचा आढावा :(आपण केलेल्या बदलांचे थोडक्यात वर्णन करा.)', 'wikieditor-publish-dialog-minor' => 'छोटा बदल', - 'wikieditor-publish-dialog-watch' => 'पान निरीक्षणांतर्गत ठेवा', + 'wikieditor-publish-dialog-watch' => 'या पानावर बदलांसाठी लक्ष ठेवा', 'wikieditor-publish-dialog-publish' => 'प्रकाशित करा', 'wikieditor-publish-dialog-goback' => 'मागे जा', 'wikieditor-template-editor-preference' => 'विकि साच्यांची नमुना संपादन सक्षम करा', @@ -18665,11 +18635,11 @@ $messages['mr'] = array( 'wikieditor-toolbar-preference' => 'वर्धित संपादन साधनपट्टी सक्षम करा', 'wikieditor-toolbar-dialogs-preference' => 'दुवे, सारण्या (टेबल) आणि इतर भरण्याकरिता dialogs सक्षम करा', # Fuzzy 'wikieditor-toolbar-hidesig' => 'मुख्य नामविश्वातील पानांपासून स्वाक्षरीची कळ लपवा', - 'wikieditor-toolbar-loading' => 'प्रभारण करीत आहे', + 'wikieditor-toolbar-loading' => 'चढवत आहे…', 'wikieditor-toolbar-tool-bold' => 'ठळक', 'wikieditor-toolbar-tool-bold-example' => 'ठळक मजकूर', 'wikieditor-toolbar-tool-italic' => 'तिरपी मुद्राक्षरे', - 'wikieditor-toolbar-tool-italic-example' => 'तिरप्या मुद्राक्षरातील मजकूर', + 'wikieditor-toolbar-tool-italic-example' => 'तिरपी मुद्राक्षरे', 'wikieditor-toolbar-tool-ilink' => 'अंतर्गत दुवा', 'wikieditor-toolbar-tool-ilink-example' => 'शीर्षकास दुवा द्या', 'wikieditor-toolbar-tool-xlink' => 'बाह्य दुव्यात (http:// हा उपसर्ग विसरू नका)', @@ -18690,7 +18660,7 @@ $messages['mr'] = array( 'wikieditor-toolbar-tool-link-int-target-status-notexists' => 'पान अस्तित्वात नाही', 'wikieditor-toolbar-tool-link-int-target-status-invalid' => 'अग्राह्य शीर्षक', 'wikieditor-toolbar-tool-link-int-target-status-external' => 'बाह्य दुवा', - 'wikieditor-toolbar-tool-link-int-target-status-loading' => 'पान अस्तित्व आहे काय ते तपासत आहे...', + 'wikieditor-toolbar-tool-link-int-target-status-loading' => 'पानाचे अस्तित्व तपासत आहे...', 'wikieditor-toolbar-tool-link-int-invalid' => 'तुम्ही नमूद केलेले शीर्षक अग्राह्य आहे.', 'wikieditor-toolbar-tool-link-lookslikeinternal' => 'तुम्ही नमूद केलेली यूआरएल इतर विकिपानास जोडावयाची आहे असे दिसते. तुम्हाला अंतर्गत दुवा बनवायचा आहे काय ?', 'wikieditor-toolbar-tool-link-lookslikeinternal-int' => 'अंतर्गत दुवा', @@ -18700,13 +18670,13 @@ $messages['mr'] = array( 'wikieditor-toolbar-tool-file-example' => 'उदाहरण.jpg', 'wikieditor-toolbar-tool-file-title' => 'चित्र टाका', 'wikieditor-toolbar-file-target' => 'संचिकेचे नाव:', - 'wikieditor-toolbar-file-caption' => 'मथळा:', + 'wikieditor-toolbar-file-caption' => 'वर्णन:', 'wikieditor-toolbar-file-size' => 'आकार:', 'wikieditor-toolbar-file-float' => 'समास:', - 'wikieditor-toolbar-file-format' => 'प्रारुप:', + 'wikieditor-toolbar-file-format' => 'प्रकार', 'wikieditor-toolbar-file-format-none' => 'काहीही नाही', 'wikieditor-toolbar-tool-file-insert' => 'समाविष्ट करा', - 'wikieditor-toolbar-tool-file-cancel' => 'रद्द करा', + 'wikieditor-toolbar-tool-file-cancel' => 'रद्द', 'wikieditor-toolbar-tool-reference' => 'संदर्भ', 'wikieditor-toolbar-tool-reference-example' => 'तळटीप मजकूर येथे भरा', 'wikieditor-toolbar-tool-reference-cancel' => 'रद्द करा', @@ -18722,10 +18692,10 @@ $messages['mr'] = array( 'wikieditor-toolbar-tool-heading-4' => 'स्तर ४', 'wikieditor-toolbar-tool-heading-5' => 'स्तर ५', 'wikieditor-toolbar-tool-heading-example' => 'अग्रशीर्ष मजकूर', - 'wikieditor-toolbar-group-format' => 'प्रारुप', + 'wikieditor-toolbar-group-format' => 'आराखडा', 'wikieditor-toolbar-tool-ulist' => 'बिंदी क्रमांकन', 'wikieditor-toolbar-tool-ulist-example' => 'बिंदी क्रमांकन घटक', - 'wikieditor-toolbar-tool-olist' => 'अनुक्रमित यादी', + 'wikieditor-toolbar-tool-olist' => 'अनुक्रम यादी', 'wikieditor-toolbar-tool-olist-example' => 'अनुक्रम यादी घटक', 'wikieditor-toolbar-tool-indent' => 'समासांतर', 'wikieditor-toolbar-tool-indent-example' => 'समासांतर ओळ', @@ -18763,7 +18733,7 @@ $1:Example.jpg|चित्रपरिचय २', 'wikieditor-toolbar-tool-table-title' => 'सारणी समाविष्ट करा', 'wikieditor-toolbar-tool-table-dimensions-rows' => 'ओळी', 'wikieditor-toolbar-tool-table-dimensions-columns' => 'रकाना', - 'wikieditor-toolbar-tool-table-dimensions-header' => 'शीर्ष ओळ जोडा', + 'wikieditor-toolbar-tool-table-dimensions-header' => 'मथळा ओळ जोडा', 'wikieditor-toolbar-tool-table-wikitable' => 'काठासहीत शैली', 'wikieditor-toolbar-tool-table-sortable' => 'सारणी क्रमानुसारी करण्याजोगी करा', 'wikieditor-toolbar-tool-table-example' => 'उदाहरण', @@ -18806,7 +18776,7 @@ $1:Example.jpg|चित्रपरिचय २', 'wikieditor-toolbar-characters-page-devanagari' => 'देवनागरी', 'wikieditor-toolbar-characters-page-thai' => 'थाई भाषा', 'wikieditor-toolbar-characters-page-lao' => 'लाऒ भाषा', - 'wikieditor-toolbar-characters-page-khmer' => 'ख्मेर', + 'wikieditor-toolbar-characters-page-khmer' => 'खमेर', 'wikieditor-toolbar-characters-minus' => 'ॠण चिन्ह', 'wikieditor-toolbar-section-help' => 'साहाय्य', 'wikieditor-toolbar-help-heading-description' => 'वर्णन', @@ -18849,7 +18819,7 @@ $1:Example.jpg|चित्रपरिचय २', 'wikieditor-toolbar-help-content-ulist-description' => 'बिंदीक्रमांकीत यादी', 'wikieditor-toolbar-help-content-ulist-syntax' => '* यादी कलम<br />* यादी कलम', 'wikieditor-toolbar-help-content-ulist-result' => '<ul><li>यादी घटक</li><li>यादी घटक</li></ul>', - 'wikieditor-toolbar-help-content-olist-description' => 'अनुक्रमित यादी', + 'wikieditor-toolbar-help-content-olist-description' => 'अनुक्रम यादी', 'wikieditor-toolbar-help-content-olist-syntax' => '# यादी घटक<br /># यादी घटक', 'wikieditor-toolbar-help-content-olist-result' => '<ol><li>यादी घटक</li><li>यादी घटक</li></ol>', 'wikieditor-toolbar-help-content-file-description' => 'संलग्न संचिका', @@ -18863,7 +18833,8 @@ $1:Example.jpg|चित्रपरिचय २', 'wikieditor-toolbar-help-content-rereference-result' => "पान मजकूर.<sup><a href='#'>[1]</a></sup>", 'wikieditor-toolbar-help-content-showreferences-description' => 'संदर्भ दर्शवा', 'wikieditor-toolbar-help-content-showreferences-result' => "<ol class='references'><li id='cite_note-test-0'><b><a title='' href='#'>^</a></b> <a rel='nofollow' title='http://www.example.org' class='external text' href='#'>Link text</a>, additional text.</li></ol>", - 'wikieditor-toolbar-help-content-signaturetimestamp-description' => 'सही आणि वेळठसा', + 'wikieditor-toolbar-help-content-signaturetimestamp-description' => 'वेळेसह तुमची सही +तुमची सही व वेळ', 'wikieditor-toolbar-help-content-signaturetimestamp-result' => "<a href='#' title='{{#special:mypage}}'>सदस्यनाव</a> (<a href='#' title='{{#special:mytalk}}'>चर्चा</a>) 15:54, 10 June 2009 (UTC)", 'wikieditor-toolbar-help-content-signature-description' => 'सही', 'wikieditor-toolbar-help-content-signature-result' => "<a href='#' title='{{#विशेष:माझेसदस्यपान}}'>सदस्यनाव</a> (<a href='#' title='{{#विशेष:माझ्याचर्चा}}'>चर्चा</a>)", @@ -20641,7 +20612,6 @@ $messages['nso'] = array( ); /** Occitan (occitan) - * @author Beta16 * @author Boulaur * @author Cedric31 * @author Jfblanc @@ -20676,7 +20646,7 @@ $messages['oc'] = array( 'wikieditor-toc-preference' => "Activar l'ensenhador navigable", 'wikieditor-toc-show' => 'Afichar lo contengut', 'wikieditor-toc-hide' => 'Amagar lo contengut', - 'wikieditor-toolbar' => 'Barra d’aisinas de modificacion', + 'wikieditor-toolbar' => 'Modificacion de la barra d’espleches', 'wikieditor-toolbar-desc' => "Modificacion de la barra d'aisinas amb l'utilizabilitat melhorada", 'wikieditor-toolbar-preference' => "Activar la barra d'aisinas melhorada", 'wikieditor-toolbar-dialogs-preference' => 'Activar las bóstias de dialòg per apondre de ligams, de tablèus e mai encara', # Fuzzy @@ -20716,7 +20686,7 @@ $messages['oc'] = array( 'wikieditor-toolbar-tool-file-example' => 'Exemple.jpg', 'wikieditor-toolbar-tool-file-title' => 'Importar un fichièr', 'wikieditor-toolbar-file-target' => 'Nom de fichièr :', - 'wikieditor-toolbar-file-caption' => 'Legenda:', + 'wikieditor-toolbar-file-caption' => 'Legenda :', 'wikieditor-toolbar-file-size' => 'Talha :', 'wikieditor-toolbar-file-float' => 'Alinhament :', 'wikieditor-toolbar-file-default' => '(per defaut)', @@ -21987,7 +21957,7 @@ $messages['pms'] = array( 'wikieditor-toolbar' => "Bara d'utiss ëd modìfica", 'wikieditor-toolbar-desc' => "Bara d'utiss ëd modìfica con dovrabilità ameliorà", 'wikieditor-toolbar-preference' => "Ativé la bara d'utiss ameliorà", - 'wikieditor-toolbar-dialogs-preference' => "Ativé j'assistent për gionté dle anliure, dle tàule e ëdcò la fonsion d'arserca e rampiass", + 'wikieditor-toolbar-dialogs-preference' => "Ativé ij quàder ëd diàlogh për anserì anliure, tàule e d'àutr", # Fuzzy 'wikieditor-toolbar-hidesig' => 'Stërmé ël boton ëd firma ant le pàgine ëd lë spassi nominal prinsipal', 'wikieditor-toolbar-loading' => 'Cariament...', 'wikieditor-toolbar-tool-bold' => 'Grassèt', @@ -22015,7 +21985,6 @@ $messages['pms'] = array( 'wikieditor-toolbar-tool-link-int-target-status-invalid' => 'Tìtol nen vàlid', 'wikieditor-toolbar-tool-link-int-target-status-external' => 'Anliura esterna', 'wikieditor-toolbar-tool-link-int-target-status-loading' => "Verìfica ëd l'esistensa dla pàgina...", - 'wikieditor-toolbar-tool-link-int-target-status-disambig' => "Pàgina d'omonimìa", 'wikieditor-toolbar-tool-link-int-invalid' => "Ël tìtol ch'a l'ha spessificà a va pa bin.", 'wikieditor-toolbar-tool-link-lookslikeinternal' => "L'URL ch'a l'ha spessificà a smijërìa n'anliura a n'àutra pàgina wiki. Veul-lo fene n'anliura anterna?", 'wikieditor-toolbar-tool-link-lookslikeinternal-int' => 'Anliura anterna', @@ -22557,8 +22526,8 @@ $messages['ps'] = array( 'wikieditor-toolbar-tool-table-dimensions-rows' => 'ليکې', 'wikieditor-toolbar-tool-table-dimensions-columns' => 'ستنې', 'wikieditor-toolbar-tool-table-wikitable' => 'ډول او پولې', - 'wikieditor-toolbar-tool-table-sortable' => 'لښتيال اوډون وړ گرځول', - 'wikieditor-toolbar-tool-table-example' => 'بېلگه', + 'wikieditor-toolbar-tool-table-sortable' => 'لښتيال د اوډون وړ گرځول', + 'wikieditor-toolbar-tool-table-example' => 'بېلګه', 'wikieditor-toolbar-tool-table-preview' => 'مخليدنه', 'wikieditor-toolbar-tool-table-insert' => 'ورټومبل', 'wikieditor-toolbar-tool-table-cancel' => 'ناگارل', @@ -23982,7 +23951,6 @@ $messages['ru'] = array( 'wikieditor-toolbar-tool-link-int-target-status-invalid' => 'Недопустимое название', 'wikieditor-toolbar-tool-link-int-target-status-external' => 'Внешняя ссылка', 'wikieditor-toolbar-tool-link-int-target-status-loading' => 'Проверка существования страницы…', - 'wikieditor-toolbar-tool-link-int-target-status-disambig' => 'Страницы разрешения неоднозначностей', 'wikieditor-toolbar-tool-link-int-invalid' => 'Указанное название недопустимо.', 'wikieditor-toolbar-tool-link-lookslikeinternal' => 'Указанный вами URL похож на ссылку на другую вики-страницу. Вы хотите сделать данную ссылку внутренней?', 'wikieditor-toolbar-tool-link-lookslikeinternal-int' => 'Внутренняя ссылка', @@ -24102,7 +24070,6 @@ $1:Example.jpg|Описание2', 'wikieditor-toolbar-characters-page-thai' => 'Тайские', 'wikieditor-toolbar-characters-page-lao' => 'Лаосские', 'wikieditor-toolbar-characters-page-khmer' => 'Кхмерские', - 'wikieditor-toolbar-characters-endash' => 'среднее тире', 'wikieditor-toolbar-characters-emdash' => 'длинное тире', 'wikieditor-toolbar-characters-minus' => 'знак минус', 'wikieditor-toolbar-section-help' => 'Справка', @@ -25850,7 +25817,7 @@ $messages['sl'] = array( 'wikieditor-publish-preference' => 'Omogoči objavljanje korak-po-koraku', 'wikieditor-publish-button-publish' => 'Objavi', 'wikieditor-publish-button-cancel' => 'Prekliči', - 'wikieditor-publish-dialog-title' => 'Objavi na {{GRAMMAR:dajalnik|{{SITENAME}}}}', + 'wikieditor-publish-dialog-title' => 'Objavi na {{SITENAME}}', 'wikieditor-publish-dialog-summary' => 'Povzetek urejanja (na kratko opišite narejene spremembe):', 'wikieditor-publish-dialog-minor' => 'Manjše urejanje', 'wikieditor-publish-dialog-watch' => 'Opazuj stran', @@ -27045,7 +27012,7 @@ $messages['sv'] = array( 'wikieditor-previewDialog-preference' => 'Aktivera förhandsgranska', 'wikieditor-previewDialog-tab' => 'Förhandsgranska', 'wikieditor-previewDialog-loading' => 'Laddar...', - 'wikieditor-publish-preference' => 'Aktivera steg-för-steg-publicering', + 'wikieditor-publish-preference' => 'Aktivera steg-efter-steg-publicering', 'wikieditor-publish-button-publish' => 'Publicera', 'wikieditor-publish-button-cancel' => 'Avbryt', 'wikieditor-publish-dialog-title' => 'Publicera i {{SITENAME}}', @@ -27346,15 +27313,15 @@ $messages['sw'] = array( 'wikieditor-toolbar-tool-link-lookslikeinternal-int' => 'Kiungo cha ndani', 'wikieditor-toolbar-tool-link-lookslikeinternal-ext' => 'Kiungo cha nje', 'wikieditor-toolbar-tool-link-empty' => 'Hukuandika kitu cha kuunganisha naye.', - 'wikieditor-toolbar-tool-file' => 'Ingiza faili', + 'wikieditor-toolbar-tool-file' => 'Faili futike', 'wikieditor-toolbar-tool-file-example' => 'Mfano.jpg', 'wikieditor-toolbar-tool-file-title' => 'Ingiza faili', 'wikieditor-toolbar-file-target' => 'Jina la faili:', 'wikieditor-toolbar-file-size' => 'Ukubwa:', 'wikieditor-toolbar-tool-file-insert' => 'Ingiza', 'wikieditor-toolbar-tool-file-cancel' => 'Ghairi', - 'wikieditor-toolbar-tool-reference' => 'Marejeo', - 'wikieditor-toolbar-tool-reference-example' => 'Weka maneno ya marejeo hapa', + 'wikieditor-toolbar-tool-reference' => 'Tiniwayo', + 'wikieditor-toolbar-tool-reference-example' => 'Weka maneno ya tiniwayo hapa', 'wikieditor-toolbar-tool-reference-cancel' => 'Batilisha', 'wikieditor-toolbar-tool-reference-title' => 'Ingiza marejeo', 'wikieditor-toolbar-tool-reference-insert' => 'Ingiza', @@ -27462,7 +27429,7 @@ Idadi ya mistari au ya safu si halali.', 'wikieditor-toolbar-help-page-heading' => 'Vichwa', 'wikieditor-toolbar-help-page-list' => 'Orodha', 'wikieditor-toolbar-help-page-file' => 'Mafaili', - 'wikieditor-toolbar-help-page-reference' => 'Marejeo', + 'wikieditor-toolbar-help-page-reference' => 'Tiniwayo', 'wikieditor-toolbar-help-page-discussion' => 'Majadiliano', 'wikieditor-toolbar-help-content-italic-description' => 'Italiki', 'wikieditor-toolbar-help-content-italic-syntax' => "''Maandishi ya italiki''", @@ -27497,15 +27464,15 @@ Idadi ya mistari au ya safu si halali.', 'wikieditor-toolbar-help-content-olist-description' => 'Orodha zenye namba', 'wikieditor-toolbar-help-content-olist-syntax' => '# Aya<br /># Aya', 'wikieditor-toolbar-help-content-olist-result' => '<ol><li>Aya</li><li>Aya</li></ol>', - 'wikieditor-toolbar-help-content-file-description' => 'Ingiza faili', + 'wikieditor-toolbar-help-content-file-description' => 'Faili futike', 'wikieditor-toolbar-help-content-file-syntax' => '[[$1:Example.png|thumb|Maelezo mafupi]]', 'wikieditor-toolbar-help-content-file-result' => "<div style='width:104px;' class='thumbinner'><a title='Maelezo mafupi' class='image' href='#'><img height='50' width='100' border='0' class='thumbimage' src='$2/WikiEditor/modules/images/toolbar/example-image.png' alt=''/></a><div class='thumbcaption'><div class='magnify'><a title='Kuza' class='internal' href='#'><img height='11' width='15' alt='' src='$1/common/images/magnify-clip.png'/></a></div>Maelezo mafupi</div></div>", - 'wikieditor-toolbar-help-content-reference-description' => 'Marejeo', + 'wikieditor-toolbar-help-content-reference-description' => 'Tiniwayo', 'wikieditor-toolbar-help-content-reference-syntax' => 'Maandishi ya ukurasa.<ref name="mfano">[http://www.example.org Maandishi ya kiungo], maandishi mengine.</ref>', 'wikieditor-toolbar-help-content-reference-result' => "Maandiko.<sup><a href='#'>[1]</a></sup>", - 'wikieditor-toolbar-help-content-rereference-description' => 'Kutumia marejeo fulani kwa mara nyingine', + 'wikieditor-toolbar-help-content-rereference-description' => 'Kutumia tiniwayo fulani kwa mara nyingine', 'wikieditor-toolbar-help-content-rereference-result' => "Maandiko.<sup><a href='#'>[1]</a></sup>", - 'wikieditor-toolbar-help-content-showreferences-description' => 'Onyesha marejeo', + 'wikieditor-toolbar-help-content-showreferences-description' => 'Onyesha tiniwayo', 'wikieditor-toolbar-help-content-showreferences-result' => "<ol class='references'><li id='cite_note-test-0'><b><a title='' href='#'>^</a></b> <a rel='nofollow' title='http://www.example.org' class='external text' href='#'>Maandishi ya kiungo</a>, maandishi mengine.</li></ol>", 'wikieditor-toolbar-help-content-signaturetimestamp-description' => 'Sahihi pamoja na stempu ya saa', 'wikieditor-toolbar-help-content-signaturetimestamp-result' => "<a href='#' title='{{#special:mypage}}'>Jina la mtumiaji</a> (<a href='#' title='{{#special:mytalk}}'>majadiliano</a>) 15:54, 10 June 2009 (UTC)", @@ -30658,7 +30625,7 @@ $messages['vo'] = array( 'wikieditor-toolbar-tool-link-int-target' => 'Tiäd pada:', 'wikieditor-toolbar-tool-link-int-text' => 'Vödem yüma', 'wikieditor-toolbar-tool-link-cancel' => 'Nosükön', - 'wikieditor-toolbar-group-format' => 'Fomät', + 'wikieditor-toolbar-group-format' => 'Lised', # Fuzzy 'wikieditor-toolbar-tool-big' => 'Gretik', 'wikieditor-toolbar-tool-big-example' => 'Vödem gretik', 'wikieditor-toolbar-tool-table' => 'Taib', @@ -31559,9 +31526,9 @@ $messages['zh-hans'] = array( 'wikieditor-toc-show' => '显示内容', 'wikieditor-toc-hide' => '隐藏内容', 'wikieditor-toolbar' => '编辑工具栏', - 'wikieditor-toolbar-desc' => '有增强的使用性能的页面编辑工具栏', - 'wikieditor-toolbar-preference' => '启用增强的编辑工具栏', - 'wikieditor-toolbar-dialogs-preference' => '启用插入链接表格向导及查找和替换功能', + 'wikieditor-toolbar-desc' => '具有增强可用性的页面编辑工具', + 'wikieditor-toolbar-preference' => '启用增强编辑工具栏', + 'wikieditor-toolbar-dialogs-preference' => '启用对话框插入链接、表格以及搜索和替换功能', 'wikieditor-toolbar-hidesig' => '在主名字空间中隐藏签名按钮', 'wikieditor-toolbar-loading' => '正在载入', 'wikieditor-toolbar-tool-bold' => '粗体', @@ -31600,7 +31567,7 @@ $messages['zh-hans'] = array( 'wikieditor-toolbar-tool-file-title' => '插入文件', 'wikieditor-toolbar-file-target' => '文件名:', 'wikieditor-toolbar-file-caption' => '标题:', - 'wikieditor-toolbar-file-size' => '尺寸:', + 'wikieditor-toolbar-file-size' => '大小:', 'wikieditor-toolbar-file-float' => '对齐:', 'wikieditor-toolbar-file-default' => '(默认)', 'wikieditor-toolbar-file-format' => '格式:', @@ -31608,7 +31575,7 @@ $messages['zh-hans'] = array( 'wikieditor-toolbar-tool-file-insert' => '插入', 'wikieditor-toolbar-tool-file-cancel' => '取消', 'wikieditor-toolbar-tool-reference' => '参考', - 'wikieditor-toolbar-tool-reference-example' => '请在这里插入注释文字', + 'wikieditor-toolbar-tool-reference-example' => '在此处插入注释文字', 'wikieditor-toolbar-tool-reference-cancel' => '取消', 'wikieditor-toolbar-tool-reference-title' => '插入注释内容', 'wikieditor-toolbar-tool-reference-insert' => '插入', @@ -31630,7 +31597,7 @@ $messages['zh-hans'] = array( 'wikieditor-toolbar-tool-indent' => '缩进', 'wikieditor-toolbar-tool-indent-example' => '已缩进行', 'wikieditor-toolbar-tool-nowiki' => '非维基格式文字', - 'wikieditor-toolbar-tool-nowiki-example' => '请在这里插入非格式化文字', + 'wikieditor-toolbar-tool-nowiki-example' => '在此处插入非维基格式文字', 'wikieditor-toolbar-tool-redirect' => '重定向', 'wikieditor-toolbar-tool-redirect-example' => '目标页名称', 'wikieditor-toolbar-tool-big' => '大号', diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.dialogs.js b/extensions/WikiEditor/modules/ext.wikiEditor.dialogs.js index c6d327f8..0e0dd090 100644 --- a/extensions/WikiEditor/modules/ext.wikiEditor.dialogs.js +++ b/extensions/WikiEditor/modules/ext.wikiEditor.dialogs.js @@ -1,14 +1,15 @@ /* * JavaScript for WikiEditor Dialogs */ -jQuery( document ).ready( function ( $ ) { + +$( document ).ready( function() { if ( !$.wikiEditor.isSupported( $.wikiEditor.modules.dialogs ) ) { return; } - + // Replace icons $.wikiEditor.modules.dialogs.config.replaceIcons( $( '#wpTextbox1' ) ); - + // Add dialogs module $( '#wpTextbox1' ).wikiEditor( 'addModule', $.wikiEditor.modules.dialogs.config.getDefaultConfig() ); } ); diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.highlight.js b/extensions/WikiEditor/modules/ext.wikiEditor.highlight.js index 92515cfd..a6b43851 100644 --- a/extensions/WikiEditor/modules/ext.wikiEditor.highlight.js +++ b/extensions/WikiEditor/modules/ext.wikiEditor.highlight.js @@ -1,7 +1,8 @@ /* * JavaScript for WikiEditor Highlighting */ -jQuery( document ).ready( function ( $ ) { + +$( document ).ready( function() { // Add highlight module $( '#wpTextbox1' ).wikiEditor( 'addModule', 'highlight' ); } ); diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.js b/extensions/WikiEditor/modules/ext.wikiEditor.js index 46087989..6056e63b 100644 --- a/extensions/WikiEditor/modules/ext.wikiEditor.js +++ b/extensions/WikiEditor/modules/ext.wikiEditor.js @@ -1,7 +1,8 @@ /* * JavaScript for WikiEditor */ -jQuery( document ).ready( function ( $ ) { + +$( document ).ready( function() { // Initialize wikiEditor $( '#wpTextbox1' ).wikiEditor(); } ); diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.preview.js b/extensions/WikiEditor/modules/ext.wikiEditor.preview.js index cdc00f7b..3fbca82d 100644 --- a/extensions/WikiEditor/modules/ext.wikiEditor.preview.js +++ b/extensions/WikiEditor/modules/ext.wikiEditor.preview.js @@ -1,7 +1,8 @@ /* * JavaScript for WikiEditor Preview module */ -jQuery( document ).ready( function ( $ ) { + +$( document ).ready( function() { // Add preview module $( 'textarea#wpTextbox1' ).wikiEditor( 'addModule', 'preview' ); } ); diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.previewDialog.js b/extensions/WikiEditor/modules/ext.wikiEditor.previewDialog.js index 3b1acd7c..67f97e00 100644 --- a/extensions/WikiEditor/modules/ext.wikiEditor.previewDialog.js +++ b/extensions/WikiEditor/modules/ext.wikiEditor.previewDialog.js @@ -1,7 +1,8 @@ /* * JavaScript for WikiEditor Preview Dialog */ -jQuery( document ).ready( function ( $ ) { + +$( document ).ready( function() { // Add preview module $( 'textarea#wpTextbox1' ).wikiEditor( 'addModule', 'previewDialog' ); } ); diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.publish.js b/extensions/WikiEditor/modules/ext.wikiEditor.publish.js index 423766d2..d874478c 100644 --- a/extensions/WikiEditor/modules/ext.wikiEditor.publish.js +++ b/extensions/WikiEditor/modules/ext.wikiEditor.publish.js @@ -1,7 +1,8 @@ /* * JavaScript for WikiEditor Publish module */ -jQuery( document ).ready( function ( $ ) { + +$( document ).ready( function() { // Add publish module $( '#wpTextbox1' ).wikiEditor( 'addModule', 'publish' ); } ); diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.templateEditor.js b/extensions/WikiEditor/modules/ext.wikiEditor.templateEditor.js index 660a14fb..8879d10d 100644 --- a/extensions/WikiEditor/modules/ext.wikiEditor.templateEditor.js +++ b/extensions/WikiEditor/modules/ext.wikiEditor.templateEditor.js @@ -1,13 +1,12 @@ /* * JavaScript for WikiEditor Template Editor */ -( function ( mw, $ ) { - $( document ).ready( function () { - // Disable in template namespace - if ( mw.config.get( 'wgNamespaceNumber' ) === 10 ) { - return true; - } - // Add template editor module - $( 'textarea#wpTextbox1' ).wikiEditor( 'addModule', 'templateEditor' ); - } ); -}( mediaWiki, jQuery ) ); + +$( document ).ready( function () { + // Disable in template namespace + if ( mw.config.get( 'wgNamespaceNumber' ) === 10 ) { + return true; + } + // Add template editor module + $( 'textarea#wpTextbox1' ).wikiEditor( 'addModule', 'templateEditor' ); +}); diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.templates.js b/extensions/WikiEditor/modules/ext.wikiEditor.templates.js index fec51866..6eae6de5 100644 --- a/extensions/WikiEditor/modules/ext.wikiEditor.templates.js +++ b/extensions/WikiEditor/modules/ext.wikiEditor.templates.js @@ -1,13 +1,12 @@ /* * JavaScript for WikiEditor Templates */ -( function ( mw, $ ) { - $( document ).ready( function () { - // Disable for template namespace - if ( mw.config.get( 'wgNamespaceNumber' ) === 10 ) { - return true; - } - // Add templates module - $( '#wpTextbox1' ).wikiEditor( 'addModule', 'templates' ); - } ); -}( mediaWiki, jQuery ) ); + +$( document ).ready( function () { + // Disable for template namespace + if ( mw.config.get( 'wgNamespaceNumber' ) === 10 ) { + return true; + } + // Add templates module + $( '#wpTextbox1' ).wikiEditor( 'addModule', 'templates' ); +} ); diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.tests.toolbar.js b/extensions/WikiEditor/modules/ext.wikiEditor.tests.toolbar.js index 7ed765e9..d4ffe5ae 100644 --- a/extensions/WikiEditor/modules/ext.wikiEditor.tests.toolbar.js +++ b/extensions/WikiEditor/modules/ext.wikiEditor.tests.toolbar.js @@ -4,7 +4,7 @@ var textareaId = '#wpTextbox1'; var wikiEditorTests = { // Add emoticons section - 'add_sections_toolbar': { + add_sections_toolbar: { call: 'addToToolbar', data: { 'sections': { @@ -159,8 +159,8 @@ var wikiEditorTests = { data: { section: 'info', page: 'removeme' - }, - test: '*[rel=info].section *[rel=removeme].page', + }, + test: '*[rel=info].section *[rel=removeme].page', pre: 1, post: 0 }, @@ -171,8 +171,8 @@ var wikiEditorTests = { section: 'info', page: 'emoticons', 'character': ':))' - }, - test: '*[rel=info].section *[rel=emoticons].page *[rel=":))"]', + }, + test: '*[rel=info].section *[rel=emoticons].page *[rel=":))"]', pre: 1, post: 0 }, @@ -211,7 +211,7 @@ jQuery(document).ready( function ( $ ) { return false; } - var test, pre, post, i, + var test, pre, post, messages = [ 'Running tests for wikiEditor API' ], $target = $( textareaId ), $ui = $target.data( 'wikiEditor-context' ).$ui, @@ -234,13 +234,13 @@ jQuery(document).ready( function ( $ ) { } if ( window.console ) { - for ( i = 0; i < messages.length; i++ ) { + for ( var i = 0; i < messages.length; i++ ) { window.console.log( messages[i] ); } } $(this) - .attr( 'title', messages.join( ' | ' ) ) + .attr( 'title', messages.join( " | " ) ) .text( passes + ' / ' + tests + ' were successful' ) .css( 'backgroundColor', passes < tests ? 'red' : 'green' ) .data( 'testDone', 'true' ) diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.toc.js b/extensions/WikiEditor/modules/ext.wikiEditor.toc.js index 1fc542c5..264e9f86 100644 --- a/extensions/WikiEditor/modules/ext.wikiEditor.toc.js +++ b/extensions/WikiEditor/modules/ext.wikiEditor.toc.js @@ -1,7 +1,8 @@ /* * JavaScript for WikiEditor Table of Contents */ -jQuery( document ).ready( function ( $ ) { + +$( document ).ready( function() { // Add table of contents module $( '#wpTextbox1' ).wikiEditor( 'addModule', 'toc' ); } ); diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.hideSig.js b/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.hideSig.js index 48d30274..3bc0f0b4 100644 --- a/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.hideSig.js +++ b/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.hideSig.js @@ -1,7 +1,7 @@ /* * Remove the signature button if the main namespace is edited. */ -jQuery( document ).ready( function ( $ ) { +$( document ).ready( function() { // This module is designed not to depend on ext.wikiEditor or jquery.wikiEditor. // Removing this dependency fixed various bugs, but it does mean that we have to // account for the situation where $.wikiEditor is not present @@ -11,4 +11,4 @@ jQuery( document ).ready( function ( $ ) { if ( $( 'body' ).hasClass( 'ns-0' ) ) { $( '#wpTextbox1' ).wikiEditor( 'removeFromToolbar', { 'section': 'main', 'group': 'insert', 'tool': 'signature' } ); } -} ); +}); diff --git a/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.js b/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.js index 3f30c0c4..5cdeae57 100644 --- a/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.js +++ b/extensions/WikiEditor/modules/ext.wikiEditor.toolbar.js @@ -1,7 +1,8 @@ /* * JavaScript for WikiEditor Toolbar */ -jQuery( document ).ready( function ( $ ) { + +$( document ).ready( function() { if ( !$.wikiEditor.isSupported( $.wikiEditor.modules.toolbar ) ) { $( '.wikiEditor-oldToolbar' ).show(); return; diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.css b/extensions/WikiEditor/modules/jquery.wikiEditor.css index 6e05ff03..d8e331cc 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.css +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.css @@ -19,6 +19,9 @@ .wikiEditor-ui textarea:focus { outline: none; } +.wikiEditor-ui .wikiEditor-ui-bottom { + +} .wikiEditor-ui .wikiEditor-ui-text { line-height: 0; } diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.js b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.js index f37d004e..0d769164 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.js +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.config.js @@ -1,8 +1,6 @@ /** * Configuration of Dialog module for wikiEditor */ -/*jshint curly:false, noarg:false, quotmark:false, onevar:false */ -/*global alert */ ( function ( $, mw ) { $.wikiEditor.modules.dialogs.config = { @@ -228,7 +226,7 @@ $.wikiEditor.modules.dialogs.config = { ); } $( '#wikieditor-toolbar-link-type-int, #wikieditor-toolbar-link-type-ext' ).click( function () { - if ( $( '#wikieditor-toolbar-link-type-ext' ).prop( 'checked' ) ) { + if ( $( '#wikieditor-toolbar-link-type-ext' ).is( ':checked' ) ) { // Abort previous request var request = $( '#wikieditor-toolbar-link-int-target-status' ).data( 'request' ); if ( request ) { @@ -236,9 +234,8 @@ $.wikiEditor.modules.dialogs.config = { } updateWidget( 'external' ); } - if ( $( '#wikieditor-toolbar-link-type-int' ).prop( 'checked' ) ) { + if ( $( '#wikieditor-toolbar-link-type-int' ).is( ':checked' ) ) updateExistence( true ); - } }); // Set labels of tabs based on rel values $(this).find( '[rel]' ).each( function () { @@ -253,12 +250,12 @@ $.wikiEditor.modules.dialogs.config = { .data( 'tooltip', mw.msg( 'wikieditor-toolbar-tool-link-int-text-tooltip' ) ); $( '#wikieditor-toolbar-link-int-target, #wikieditor-toolbar-link-int-text' ) .each( function () { - if ( $( this ).val() === '' ) { + var tooltip = mw.msg( $( this ).attr( 'id' ) + '-tooltip' ); + if ( $( this ).val() === '' ) $( this ) .addClass( 'wikieditor-toolbar-dialog-hint' ) .val( $( this ).data( 'tooltip' ) ) .data( 'tooltip-mode', true ); - } } ) .focus( function () { if ( $( this ).val() === $( this ).data( 'tooltip' ) ) { @@ -298,30 +295,26 @@ $.wikiEditor.modules.dialogs.config = { $( '#wikieditor-toolbar-link-type-int' ).prop( 'checked', true ); updateExistence(); } - /*jshint eqeqeq:false */ - if ( $( '#wikieditor-toolbar-link-int-text' ).data( 'untouched' ) ) { + if ( $( '#wikieditor-toolbar-link-int-text' ).data( 'untouched' ) ) if ( $( '#wikieditor-toolbar-link-int-target' ).val() == - $( '#wikieditor-toolbar-link-int-target' ).data( 'tooltip' ) - ) { - $( '#wikieditor-toolbar-link-int-text' ) - .addClass( 'wikieditor-toolbar-dialog-hint' ) - .val( $( '#wikieditor-toolbar-link-int-text' ).data( 'tooltip' ) ) - .change(); - } else { - $( '#wikieditor-toolbar-link-int-text' ) - .val( $( '#wikieditor-toolbar-link-int-target' ).val() ) - .change(); - } - } + $( '#wikieditor-toolbar-link-int-target' ).data( 'tooltip' ) ) { + $( '#wikieditor-toolbar-link-int-text' ) + .addClass( 'wikieditor-toolbar-dialog-hint' ) + .val( $( '#wikieditor-toolbar-link-int-text' ).data( 'tooltip' ) ) + .change(); + } else { + $( '#wikieditor-toolbar-link-int-text' ) + .val( $( '#wikieditor-toolbar-link-int-target' ).val() ) + .change(); + } }, 0 ); }); $( '#wikieditor-toolbar-link-int-text' ).bind( 'change keydown paste cut', function () { var oldVal = $(this).val(); var that = this; setTimeout( function () { - if ( $(that).val() !== oldVal ) { + if ( $(that).val() !== oldVal ) $(that).data( 'untouched', false ); - } }, 0 ); }); // Add images to the page existence widget, which will be shown mutually exclusively to communicate if @@ -386,7 +379,7 @@ $.wikiEditor.modules.dialogs.config = { // Title suggestions $( '#wikieditor-toolbar-link-int-target' ).data( 'suggcache', {} ).suggestions( { - fetch: function () { + fetch: function ( query ) { var that = this; var title = $(this).val(); @@ -615,7 +608,7 @@ $.wikiEditor.modules.dialogs.config = { // Execute the action associated with the first button // when the user presses Enter $(this).closest( '.ui-dialog' ).keypress( function ( e ) { - if ( ( e.keyCode || e.which ) === 13 ) { + if ( ( e.keyCode || e.which ) == 13 ) { var button = $(this).data( 'dialogaction' ) || $(this).find( 'button:first' ); button.click(); e.preventDefault(); @@ -713,7 +706,7 @@ $.wikiEditor.modules.dialogs.config = { // Execute the action associated with the first button // when the user presses Enter $( this ).closest( '.ui-dialog' ).keypress( function ( e ) { - if ( ( e.keyCode || e.which ) === 13 ) { + if ( ( e.keyCode || e.which ) == 13 ) { var button = $( this ).data( 'dialogaction' ) || $( this ).find( 'button:first' ); button.click(); e.preventDefault(); @@ -985,7 +978,7 @@ $.wikiEditor.modules.dialogs.config = { var hiddenHTML = $( '.wikieditor-toolbar-table-preview-hidden' ).html(); $( '.wikieditor-toolbar-table-preview-header' ).html( hiddenHTML ); $( '.wikieditor-toolbar-table-preview-hidden' ).html( headerHTML ); - if ( typeof jQuery.fn.tablesorter === 'function' ) { + if ( typeof jQuery.fn.tablesorter == 'function' ) { $( '#wikieditor-toolbar-table-preview, #wikieditor-toolbar-table-preview2' ) .filter( '.sortable' ) .tablesorter(); @@ -1077,7 +1070,7 @@ $.wikiEditor.modules.dialogs.config = { // Execute the action associated with the first button // when the user presses Enter $(this).closest( '.ui-dialog' ).keypress( function ( e ) { - if ( ( e.keyCode || e.which ) === 13 ) { + if ( ( e.keyCode || e.which ) == 13 ) { var button = $(this).data( 'dialogaction' ) || $(this).find( 'button:first' ); button.click(); e.preventDefault(); @@ -1209,7 +1202,7 @@ $.wikiEditor.modules.dialogs.config = { if ( !match ) { $( '#wikieditor-toolbar-replace-nomatch' ).show(); - } else if ( mode === 'replaceAll' ) { + } else if ( mode == 'replaceAll' ) { // Instead of using repetitive .match() calls, we use one .match() call with /g // and indexOf() followed by substr() to find the offsets. This is actually // faster because our indexOf+substr loop is faster than a match loop, and the @@ -1244,7 +1237,7 @@ $.wikiEditor.modules.dialogs.config = { $(this).data( 'offset', 0 ); } else { - if ( mode === 'replace' ) { + if ( mode == 'replace' ) { var actualReplacement; if (isRegex) { @@ -1337,7 +1330,7 @@ $.wikiEditor.modules.dialogs.config = { // Execute the action associated with the first button // when the user presses Enter $(this).closest( '.ui-dialog' ).keypress( function ( e ) { - if ( ( e.keyCode || e.which ) === 13 ) { + if ( ( e.keyCode || e.which ) == 13 ) { var button = $(this).data( 'dialogaction' ) || $(this).find( 'button:first' ); button.click(); e.preventDefault(); @@ -1357,12 +1350,12 @@ $.wikiEditor.modules.dialogs.config = { $( textbox ) .bind( 'keypress.srdialog', function ( e ) { - if ( e.which === 13 ) { + if ( e.which == 13 ) { // Enter var button = dialog.data( 'dialogaction' ) || dialog.find( 'button:first' ); button.click(); e.preventDefault(); - } else if ( e.which === 27 ) { + } else if ( e.which == 27 ) { // Escape $(that).dialog( 'close' ); } diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.js b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.js index 6d92966f..f6d86d78 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.js +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.dialogs.js @@ -42,8 +42,8 @@ $.wikiEditor.modules.dialogs = { }, openDialog: function ( context, module ) { if ( module in $.wikiEditor.modules.dialogs.modules ) { - var mod = $.wikiEditor.modules.dialogs.modules[module], - $dialog = $( '#' + mod.id ); + var mod = $.wikiEditor.modules.dialogs.modules[module]; + var $dialog = $( '#' + mod.id ); if ( $dialog.length === 0 ) { $.wikiEditor.modules.dialogs.fn.reallyCreate( context, mod, module ); $dialog = $( '#' + mod.id ); @@ -82,7 +82,7 @@ $.wikiEditor.modules.dialogs = { module = config[mod]; // Only create the dialog if it's supported, isn't filtered and doesn't exist yet filtered = false; - if ( typeof module.filters !== 'undefined' ) { + if ( typeof module.filters != 'undefined' ) { for ( i = 0; i < module.filters.length; i++ ) { if ( $( module.filters[i] ).length === 0 ) { filtered = true; @@ -92,7 +92,7 @@ $.wikiEditor.modules.dialogs = { } // If the dialog already exists, but for another textarea, simply remove it $existingDialog = $( '#' + module.id ); - if ( $existingDialog.length > 0 && $existingDialog.data( 'context' ).$textarea !== context.$textarea ) { + if ( $existingDialog.length > 0 && $existingDialog.data( 'context' ).$textarea != context.$textarea ) { $existingDialog.remove(); } // Re-select from the DOM, we might have removed the dialog just now @@ -119,13 +119,13 @@ $.wikiEditor.modules.dialogs = { * @param {String} name Dialog name (key in $.wikiEditor.modules.dialogs.modules) */ reallyCreate: function ( context, module, name ) { - var msg, dialogDiv, + var msg, configuration = module.dialog; // Add some stuff to configuration configuration.bgiframe = true; configuration.autoOpen = false; // By default our dialogs are modal, unless explicitely defined in their specific configuration. - if( typeof configuration.modal === 'undefined' ) { + if( typeof configuration.modal == "undefined" ) { configuration.modal = true; } configuration.title = $.wikiEditor.autoMsg( module, 'title' ); @@ -138,7 +138,7 @@ $.wikiEditor.modules.dialogs = { } configuration.buttons = configuration.newButtons; // Create the dialog <div> - dialogDiv = $( '<div>' ) + var dialogDiv = $( '<div>' ) .attr( 'id', module.id ) .html( module.html ) .data( 'context', context ) @@ -171,28 +171,26 @@ $.wikiEditor.modules.dialogs = { * NOTE: This function assumes $.ui.dialog has already been loaded */ resize: function () { - var oldWS, thisWidth, wrapperWidth, - wrapper = $(this).closest( '.ui-dialog' ), - oldWidth = wrapper.width(), - // Make sure elements don't wrapped so we get an accurate idea of whether they really fit. Also temporarily show - // hidden elements. Work around jQuery bug where <div style="display: inline;"/> inside a dialog is both - // :visible and :hidden - oldHidden = $(this).find( '*' ).not( ':visible' ); - + var wrapper = $(this).closest( '.ui-dialog' ); + var oldWidth = wrapper.width(); + // Make sure elements don't wrapped so we get an accurate idea of whether they really fit. Also temporarily show + // hidden elements. Work around jQuery bug where <div style="display: inline;"/> inside a dialog is both + // :visible and :hidden + var oldHidden = $(this).find( '*' ).not( ':visible' ); // Save the style attributes of the hidden elements to restore them later. Calling hide() after show() messes up // for elements hidden with a class oldHidden.each( function () { $(this).data( 'oldstyle', $(this).attr( 'style' ) ); }); oldHidden.show(); - oldWS = $(this).css( 'white-space' ); + var oldWS = $(this).css( 'white-space' ); $(this).css( 'white-space', 'nowrap' ); if ( wrapper.width() <= $(this).get(0).scrollWidth ) { - thisWidth = $(this).data( 'thisWidth' ) ? $(this).data( 'thisWidth' ) : 0; + var thisWidth = $(this).data( 'thisWidth' ) ? $(this).data( 'thisWidth' ) : 0; thisWidth = Math.max( $(this).get(0).width, thisWidth ); $(this).width( thisWidth ); $(this).data( 'thisWidth', thisWidth ); - wrapperWidth = $(this).data( 'wrapperWidth' ) ? $(this).data( 'wrapperWidth' ) : 0; + var wrapperWidth = $(this).data( 'wrapperWidth' ) ? $(this).data( 'wrapperWidth' ) : 0; wrapperWidth = Math.max( wrapper.get(0).scrollWidth, wrapperWidth ); wrapper.width( wrapperWidth ); $(this).data( 'wrapperWidth', wrapperWidth ); diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.highlight.js b/extensions/WikiEditor/modules/jquery.wikiEditor.highlight.js index f646e456..9d964fa7 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.highlight.js +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.highlight.js @@ -20,21 +20,13 @@ $.wikiEditor.modules.highlight = { * Internally used event handlers */ evt: { - /** - * @param context - * @param event - */ delayedChange: function ( context, event ) { - if ( event.data.scope === 'realchange' ) { + if ( event.data.scope == 'realchange' ) { $.wikiEditor.modules.highlight.fn.scan( context ); $.wikiEditor.modules.highlight.fn.mark( context, event.data.scope ); } }, - /** - * @param context - * @param event - */ - ready: function ( context ) { + ready: function ( context, event ) { $.wikiEditor.modules.highlight.fn.scan( context ); $.wikiEditor.modules.highlight.fn.mark( context, 'ready' ); } @@ -47,22 +39,19 @@ $.wikiEditor.modules.highlight = { /** * Creates a highlight module within a wikiEditor * - * @param context * @param config Configuration object to create module from */ - create: function ( context ) { + create: function ( context, config ) { context.modules.highlight.markersStr = ''; }, /** * Scans text division for tokens * - * @param context * @param division */ - scan: function ( context ) { + scan: function ( context, division ) { var tokenArray, text, module, exp, - left, right, match, - regex, label, markAfter, offset; + left, right, match; /*jshint eqnull: true */ // Remove all existing tokens @@ -76,11 +65,11 @@ $.wikiEditor.modules.highlight = { if ( module in $.wikiEditor.modules && 'exp' in $.wikiEditor.modules[module] ) { for ( exp in $.wikiEditor.modules[module].exp ) { // Prepare configuration - regex = $.wikiEditor.modules[module].exp[exp].regex; - label = $.wikiEditor.modules[module].exp[exp].label; - markAfter = $.wikiEditor.modules[module].exp[exp].markAfter || false; + var regex = $.wikiEditor.modules[module].exp[exp].regex; + var label = $.wikiEditor.modules[module].exp[exp].label; + var markAfter = $.wikiEditor.modules[module].exp[exp].markAfter || false; // Search for tokens - offset = 0; + var offset = 0; while ( ( match = text.substr( offset ).match( regex ) ) != null ) { right = ( left = offset + match.index ) + match[0].length; tokenArray[tokenArray.length] = { @@ -106,19 +95,16 @@ $.wikiEditor.modules.highlight = { /** * Marks up text with HTML * - * @param context * @param division * @param tokens */ // FIXME: What do division and tokens do? // TODO: Document the scan() and mark() APIs somewhere - mark: function ( context, division ) { - /*jshint eqeqeq:false, onevar:false */ - var i, subtracted, oldLength, j, o, - markers; + mark: function ( context, division, tokens ) { + var i, subtracted, oldLength, j, o; // Reset markers - markers = []; + var markers = []; // Recycle markers that will be skipped in this run if ( context.modules.highlight.markers && division !== '' ) { @@ -367,9 +353,8 @@ $.wikiEditor.modules.highlight = { // Don't remove these either return true; } - if ( marker && typeof marker.beforeUnwrap === 'function' ) { + if ( marker && typeof marker.beforeUnwrap === 'function' ) marker.beforeUnwrap( this ); - } if ( ( marker && marker.anchor === 'tag' ) || $(this).is( 'p' ) ) { // Remove all classes $(this).removeAttr( 'class' ); diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.iframe.js b/extensions/WikiEditor/modules/jquery.wikiEditor.iframe.js index 538fcb18..4d425012 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.iframe.js +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.iframe.js @@ -1,6 +1,6 @@ /* IFrame extension for wikiEditor */ -/*jshint onevar:false, boss:true */ -( function ( $ ) { $.wikiEditor.extensions.iframe = function ( context ) { + +( function( $ ) { $.wikiEditor.extensions.iframe = function( context ) { /* * Event Handlers @@ -14,18 +14,18 @@ context.evt = $.extend( context.evt, { * function is to both classify the scope of changes as 'division' or 'character' and to prevent further * processing of events which did not actually change the content of the iframe. */ - keydown: function ( event ) { + 'keydown': function( event ) { switch ( event.which ) { case 90: // z case 89: // y - if ( event.which === 89 && !$.browser.msie ) { + if ( event.which == 89 && !$.browser.msie ) { // only handle y events for IE return true; } else if ( ( event.ctrlKey || event.metaKey ) && context.history.length ) { // HistoryPosition is a negative number between -1 and -context.history.length, in other words // it's the number of steps backwards from the latest state. var newPosition; - if ( event.shiftKey || event.which === 89 ) { + if ( event.shiftKey || event.which == 89 ) { // Redo newPosition = context.historyPosition + 1; } else { @@ -35,7 +35,7 @@ context.evt = $.extend( context.evt, { // Only act if we are switching to a valid state if ( newPosition >= ( context.history.length * -1 ) && newPosition < 0 ) { // Make sure we run the history storing code before we make this change - context.fn.updateHistory( context.oldDelayedHTML !== context.$content.html() ); + context.fn.updateHistory( context.oldDelayedHTML != context.$content.html() ); context.oldDelayedHistoryPosition = context.historyPosition; context.historyPosition = newPosition; // Change state @@ -65,8 +65,8 @@ context.evt = $.extend( context.evt, { var $tabindexList = $( '[tabindex]:visible' ).sort( function( a, b ) { return a.tabIndex - b.tabIndex; } ); - for ( var i=0; i < $tabindexList.length; i++ ) { - if ( $tabindexList.eq( i ).attr( 'id' ) === context.$iframe.attr( 'id' ) ) { + for( var i=0; i < $tabindexList.length; i++ ) { + if( $tabindexList.eq( i ).attr( 'id' ) == context.$iframe.attr( 'id' ) ) { $tabindexList.get( i + 1 ).focus(); break; } @@ -74,48 +74,48 @@ context.evt = $.extend( context.evt, { return false; } break; - case 86: //v - if ( event.ctrlKey && $.browser.msie && 'paste' in context.evt ) { - //paste, intercepted for IE - context.evt.paste( event ); - } - break; + case 86: //v + if ( event.ctrlKey && $.browser.msie && 'paste' in context.evt ) { + //paste, intercepted for IE + context.evt.paste( event ); + } + break; } return true; }, - change: function ( event ) { + 'change': function( event ) { event.data.scope = 'division'; var newHTML = context.$content.html(); - if ( context.oldHTML !== newHTML ) { + if ( context.oldHTML != newHTML ) { context.fn.purgeOffsets(); context.oldHTML = newHTML; event.data.scope = 'realchange'; } // Never let the body be totally empty - if ( context.$content.children().length === 0 ) { + if ( context.$content.children().length == 0 ) { context.$content.append( '<p></p>' ); } return true; }, - delayedChange: function ( event ) { + 'delayedChange': function( event ) { event.data.scope = 'division'; var newHTML = context.$content.html(); - if ( context.oldDelayedHTML !== newHTML ) { + if ( context.oldDelayedHTML != newHTML ) { context.oldDelayedHTML = newHTML; event.data.scope = 'realchange'; // Surround by <p> if it does not already have it var cursorPos = context.fn.getCaretPosition(); var t = context.fn.getOffset( cursorPos[0] ); - if ( ! $.browser.msie && t && t.node.nodeName === '#text' && t.node.parentNode.nodeName.toLowerCase() === 'body' ) { - $( t.node ).wrap( '<p></p>' ); + if ( ! $.browser.msie && t && t.node.nodeName == '#text' && t.node.parentNode.nodeName.toLowerCase() == 'body' ) { + $( t.node ).wrap( "<p></p>" ); context.fn.purgeOffsets(); context.fn.setSelection( { start: cursorPos[0], end: cursorPos[1] } ); } } - context.fn.updateHistory( event.data.scope === 'realchange' ); + context.fn.updateHistory( event.data.scope == 'realchange' ); return true; }, - cut: function ( event ) { + 'cut': function( event ) { setTimeout( function() { context.$content.find( 'br' ).each( function() { if ( $(this).parent().is( 'body' ) ) { @@ -125,7 +125,7 @@ context.evt = $.extend( context.evt, { }, 100 ); return true; }, - paste: function ( event ) { + 'paste': function( event ) { // Save the cursor position to restore it after all this voodoo var cursorPos = context.fn.getCaretPosition(); var oldLength = context.fn.getContents().length; @@ -138,7 +138,6 @@ context.evt = $.extend( context.evt, { } setTimeout( function() { - /*jshint eqnull:true */ // Kill stuff we know we don't want context.$content.find( 'script,style,img,input,select,textarea,hr,button,link,meta' ).remove(); var nodeToDelete = []; @@ -153,31 +152,30 @@ context.evt = $.extend( context.evt, { } if ( elementAtCursor == null || elementAtCursor.node == null ) { context.$content.prepend( '<p class = wikiEditor></p>' ); - firstDirtyNode = context.$content.children()[0]; + firstDirtyNode = context.$content.children()[0]; } else { firstDirtyNode = elementAtCursor.node; } - // This is ugly but seems like the best way to handle the case where we select and replace all editor contents + //this is ugly but seems like the best way to handle the case where we select and replace all editor contents try { - /*jshint expr:true */ firstDirtyNode.parentNode; } catch ( err ) { context.$content.prepend( '<p class = wikiEditor></p>' ); - firstDirtyNode = context.$content.children()[0]; + firstDirtyNode = context.$content.children()[0]; } while ( firstDirtyNode != null ) { //we're going to replace the contents of the entire parent node. - while ( firstDirtyNode.parentNode && firstDirtyNode.parentNode.nodeName !== 'BODY' && - !$( firstDirtyNode ).hasClass( 'wikiEditor' ) - ) { + while ( firstDirtyNode.parentNode && firstDirtyNode.parentNode.nodeName != 'BODY' + && ! $( firstDirtyNode ).hasClass( 'wikiEditor' ) + ) { firstDirtyNode = firstDirtyNode.parentNode; } //go back till we find the first pasted node - while ( firstDirtyNode.previousSibling != null && - !$( firstDirtyNode.previousSibling ).hasClass( 'wikiEditor' ) - ) { + while ( firstDirtyNode.previousSibling != null + && ! $( firstDirtyNode.previousSibling ).hasClass( 'wikiEditor' ) + ) { if ( $( firstDirtyNode.previousSibling ).hasClass( '#comment' ) ) { $( firstDirtyNode ).remove(); @@ -187,9 +185,9 @@ context.evt = $.extend( context.evt, { } if ( firstDirtyNode.previousSibling != null ) { - $lastDirtyNode = $( firstDirtyNode.previousSibling ); + $lastDirtyNode = $( firstDirtyNode.previousSibling ); } else { - $lastDirtyNode = $( firstDirtyNode ); + $lastDirtyNode = $( firstDirtyNode ); } var cc = makeContentCollector( $.browser, null ); @@ -220,7 +218,7 @@ context.evt = $.extend( context.evt, { } - if ( !pastedPretty && $.browser.msie && i === 0 ) { + if( !pastedPretty && $.browser.msie && i == 0 ) { continue; } $newElement = $( '<p class="wikiEditor pasted" ></p>' ); @@ -243,7 +241,7 @@ context.evt = $.extend( context.evt, { //anything without wikiEditor class was pasted. $selection = context.$content.find( ':not(.wikiEditor)' ); - if ( $selection.length === 0 ) { + if ( $selection.length == 0 ) { break; } else { firstDirtyNode = $selection.eq( 0 )[0]; @@ -262,7 +260,7 @@ context.evt = $.extend( context.evt, { }, 0 ); return true; }, - ready: function ( event ) { + 'ready': function( event ) { // Initialize our history queue if ( context.$content ) { context.history.push( { 'html': context.$content.html(), 'sel': context.fn.getCaretPosition() } ); @@ -277,11 +275,7 @@ context.evt = $.extend( context.evt, { * Internally used functions */ context.fn = $.extend( context.fn, { - /** - * @param {jQuery} $element - * @param mode - */ - highlightLine: function ( $element ) { + 'highlightLine': function( $element, mode ) { if ( !$element.is( 'p' ) ) { $element = $element.closest( 'p' ); } @@ -289,7 +283,7 @@ context.fn = $.extend( context.fn, { setTimeout( function() { $element.animate( { 'backgroundColor': 'white' }, 'slow' ); }, 100 ); setTimeout( function() { $element.css( 'backgroundColor', 'white' ); }, 1000 ); }, - htmlToText: function ( html ) { + 'htmlToText': function( html ) { // This function is slow for large inputs, so aggressively cache input/output pairs if ( html in context.htmlToTextMap ) { return context.htmlToTextMap[html]; @@ -300,15 +294,15 @@ context.fn = $.extend( context.fn, { // IE does overzealous whitespace collapsing for $( '<pre />' ).html( html ); // We also do <br> and easy cases for <p> conversion here, complicated cases are handled later html = html - .replace( /\r?\n/g, '' ) // IE7 inserts newlines before block elements - .replace( / /g, ' ' ) // We inserted these to prevent IE from collapsing spaces - .replace( /<br[^\>]*\><\/p\>/gi, '</p>' ) // Remove trailing <br> from <p> - .replace( /<\/p\>\s*<p[^\>]*\>/gi, '\n' ) // Easy case for <p> conversion - .replace( /<br[^\>]*\>/gi, '\n' ) // <br> conversion - .replace( /<\/p\>(\n*)<p[^\>]*\>/gi, '$1\n' ) + .replace( /\r?\n/g, "" ) // IE7 inserts newlines before block elements + .replace( / /g, " " ) // We inserted these to prevent IE from collapsing spaces + .replace( /\<br[^\>]*\>\<\/p\>/gi, '</p>' ) // Remove trailing <br> from <p> + .replace( /\<\/p\>\s*\<p[^\>]*\>/gi, "\n" ) // Easy case for <p> conversion + .replace( /\<br[^\>]*\>/gi, "\n" ) // <br> conversion + .replace( /\<\/p\>(\n*)\<p[^\>]*\>/gi, "$1\n" ) // Un-nest <p> tags - .replace( /<p[^\>]*\><p[^\>]*\>/gi, '<p>' ) - .replace( /<\/p\><\/p\>/gi, '</p>' ); + .replace( /\<p[^\>]*\><p[^\>]*\>/gi, '<p>' ) + .replace( /\<\/p\><\/p\>/gi, '</p>' ); // Save leading and trailing whitespace now and restore it later. IE eats it all, and even Firefox // won't leave everything alone var leading = html.match( /^\s*/ )[0]; @@ -317,8 +311,8 @@ context.fn = $.extend( context.fn, { var $pre = $( '<pre>' + html + '</pre>' ); $pre.find( '.wikiEditor-noinclude' ).each( function() { $( this ).remove(); } ); // Convert tabs, <p>s and <br>s back - $pre.find( '.wikiEditor-tab' ).each( function() { $( this ).text( '\t' ); } ); - $pre.find( 'br' ).each( function() { $( this ).replaceWith( '\n' ); } ); + $pre.find( '.wikiEditor-tab' ).each( function() { $( this ).text( "\t" ); } ); + $pre.find( 'br' ).each( function() { $( this ).replaceWith( "\n" ); } ); // Converting <p>s is wrong if there's nothing before them, so check that. // .find( '* + p' ) isn't good enough because textnodes aren't considered $pre.find( 'p' ).each( function() { @@ -329,21 +323,21 @@ context.fn = $.extend( context.fn, { // Check for preceding text var t = new context.fn.rawTraverser( this.firstChild, this, $pre.get( 0 ), true ).prev(); - while ( t && t.node.nodeName !== '#text' && t.node.nodeName !== 'BR' && t.node.nodeName !== 'P' ) { + while ( t && t.node.nodeName != '#text' && t.node.nodeName != 'BR' && t.node.nodeName != 'P' ) { t = t.prev(); } if ( t ) { - text = '\n' + text; + text = "\n" + text; } // Check for following text t = new context.fn.rawTraverser( this.lastChild, this, $pre.get( 0 ), true ).next(); - while ( t && t.node.nodeName !== '#text' && t.node.nodeName !== 'BR' && t.node.nodeName !== 'P' ) { + while ( t && t.node.nodeName != '#text' && t.node.nodeName != 'BR' && t.node.nodeName != 'P' ) { t = t.next(); } - if ( t && !t.inP && t.node.nodeName === '#text' && t.node.nodeValue.charAt( 0 ) !== '\n' && - t.node.nodeValue.charAt( 0 ) !== '\r' ) { - text += '\n'; + if ( t && !t.inP && t.node.nodeName == '#text' && t.node.nodeValue.charAt( 0 ) != '\n' + && t.node.nodeValue.charAt( 0 ) != '\r' ) { + text += "\n"; } $( this ).text( text ); } ); @@ -363,8 +357,8 @@ context.fn = $.extend( context.fn, { * @param strict If true, the element the selection starts in cannot match (default: false) * @return jQuery object or null if unknown */ - beforeSelection: function ( classname, strict ) { - if ( typeof classname === 'undefined' ) { + 'beforeSelection': function( classname, strict ) { + if ( typeof classname == 'undefined' ) { classname = ''; } var e = null, offset = null; @@ -387,7 +381,7 @@ context.fn = $.extend( context.fn, { // When the cursor is on an empty line, Opera gives us a bogus range object with // startContainer=endContainer=body and startOffset=endOffset=1 var body = context.$iframe[0].contentWindow.document.body; - if ( $.browser.opera && e === body && offset === 1 ) { + if ( $.browser.opera && e == body && offset == 1 ) { return null; } } @@ -406,14 +400,14 @@ context.fn = $.extend( context.fn, { return null; } var seekPos = context.fn.htmlToText( range2.htmlText ).length; - offset = context.fn.getOffset( seekPos ); + var offset = context.fn.getOffset( seekPos ); e = offset ? offset.node : null; offset = offset ? offset.offset : null; if ( !e ) { return null; } } - if ( e.nodeName !== '#text' ) { + if ( e.nodeName != '#text' ) { // The selection is not in a textnode, but between two non-text nodes // (usually inside the <body> between two <br>s). Go to the rightmost // child of the node just before the selection @@ -431,7 +425,7 @@ context.fn = $.extend( context.fn, { // constructor thousands of times is very inefficient var classStr = ' ' + classname + ' '; while ( e ) { - if ( !strict && ( !classname || ( ' ' + e.className + ' ' ).indexOf( classStr ) !== -1 ) ) { + if ( !strict && ( !classname || ( ' ' + e.className + ' ' ).indexOf( classStr ) != -1 ) ) { return $( e ); } var next = e.previousSibling; @@ -446,7 +440,7 @@ context.fn = $.extend( context.fn, { /** * Object used by traverser(). Don't use this unless you know what you're doing */ - rawTraverser: function ( node, inP, ancestor, skipNoinclude ) { + 'rawTraverser': function( node, inP, ancestor, skipNoinclude ) { this.node = node; this.inP = inP; this.ancestor = ancestor; @@ -456,16 +450,16 @@ context.fn = $.extend( context.fn, { var nextInP = this.inP; while ( p && !p.nextSibling ) { p = p.parentNode; - if ( p === this.ancestor ) { + if ( p == this.ancestor ) { // We're back at the ancestor, stop here p = null; } - if ( p && p.nodeName === 'P' ) { + if ( p && p.nodeName == "P" ) { nextInP = null; } } p = p ? p.nextSibling : null; - if ( p && p.nodeName === 'P' ) { + if ( p && p.nodeName == "P" ) { nextInP = p; } do { @@ -473,13 +467,13 @@ context.fn = $.extend( context.fn, { // Don't use $( p ).hasClass( 'wikiEditor-noinclude' ) because // $() is slow in a tight loop if ( this.skipNoinclude ) { - while ( p && ( ' ' + p.className + ' ' ).indexOf( ' wikiEditor-noinclude ' ) !== -1 ) { + while ( p && ( ' ' + p.className + ' ' ).indexOf( ' wikiEditor-noinclude ' ) != -1 ) { p = p.nextSibling; } } if ( p && p.firstChild ) { p = p.firstChild; - if ( p.nodeName === 'P' ) { + if ( p.nodeName == "P" ) { nextInP = p; } } @@ -493,16 +487,16 @@ context.fn = $.extend( context.fn, { var prevInP = this.inP; while ( p && !p.previousSibling ) { p = p.parentNode; - if ( p === this.ancestor ) { + if ( p == this.ancestor ) { // We're back at the ancestor, stop here p = null; } - if ( p && p.nodeName === 'P' ) { + if ( p && p.nodeName == "P" ) { prevInP = null; } } p = p ? p.previousSibling : null; - if ( p && p.nodeName === 'P' ) { + if ( p && p.nodeName == "P" ) { prevInP = p; } do { @@ -516,7 +510,7 @@ context.fn = $.extend( context.fn, { } if ( p && p.lastChild ) { p = p.lastChild; - if ( p.nodeName == 'P' ) { + if ( p.nodeName == "P" ) { prevInP = p; } } @@ -534,28 +528,28 @@ context.fn = $.extend( context.fn, { * @return Traverser object, use .next() or .prev() to get a traverser object referring to the * previous/next node */ - traverser: function ( start ) { + 'traverser': function( start ) { // Find the leftmost leaf node in the tree var startNode = start.jquery ? start.get( 0 ) : start; var node = startNode; - var inP = node.nodeName === 'P' ? node : null; + var inP = node.nodeName == "P" ? node : null; do { // Filter nodes with the wikiEditor-noinclude class // Don't use $( p ).hasClass( 'wikiEditor-noinclude' ) because // $() is slow in a tight loop - while ( node && ( ' ' + node.className + ' ' ).indexOf( ' wikiEditor-noinclude ' ) !== -1 ) { + while ( node && ( ' ' + node.className + ' ' ).indexOf( ' wikiEditor-noinclude ' ) != -1 ) { node = node.nextSibling; } if ( node && node.firstChild ) { node = node.firstChild; - if ( node.nodeName === 'P' ) { + if ( node.nodeName == "P" ) { inP = node; } } } while ( node && node.firstChild ); return new context.fn.rawTraverser( node, inP, startNode, true ); }, - getOffset: function ( offset ) { + 'getOffset': function( offset ) { if ( !context.offsets ) { context.fn.refreshOffsets(); } @@ -584,21 +578,21 @@ context.fn = $.extend( context.fn, { 'lastTextNode': base.lastTextNode }; }, - purgeOffsets: function () { + 'purgeOffsets': function() { context.offsets = null; }, - refreshOffsets: function () { + 'refreshOffsets': function() { context.offsets = [ ]; var t = context.fn.traverser( context.$content ); var pos = 0, lastTextNode = null; while ( t ) { - if ( t.node.nodeName !== '#text' && t.node.nodeName !== 'BR' ) { + if ( t.node.nodeName != '#text' && t.node.nodeName != 'BR' ) { t = t.next(); continue; } - var nextPos = t.node.nodeName === '#text' ? pos + t.node.nodeValue.length : pos + 1; + var nextPos = t.node.nodeName == '#text' ? pos + t.node.nodeValue.length : pos + 1; var nextT = t.next(); - var leavingP = t.node.nodeName === '#text' && t.inP && nextT && ( !nextT.inP || nextT.inP !== t.inP ); + var leavingP = t.node.nodeName == '#text' && t.inP && nextT && ( !nextT.inP || nextT.inP != t.inP ); context.offsets[pos] = { 'node': t.node, 'offset': 0, @@ -616,27 +610,27 @@ context.fn = $.extend( context.fn, { }; } pos = nextPos + ( leavingP ? 1 : 0 ); - if ( t.node.nodeName === '#text' ) { + if ( t.node.nodeName == '#text' ) { lastTextNode = t.node; } t = nextT; } }, - saveCursorAndScrollTop: function () { + 'saveCursorAndScrollTop': function() { // Stub out textarea behavior return; }, - restoreCursorAndScrollTop: function () { + 'restoreCursorAndScrollTop': function() { // Stub out textarea behavior return; }, - saveSelection: function () { + 'saveSelection': function() { if ( $.client.profile().name === 'msie' ) { context.$iframe[0].contentWindow.focus(); context.savedSelection = context.$iframe[0].contentWindow.document.selection.createRange(); } }, - restoreSelection: function () { + 'restoreSelection': function() { if ( $.client.profile().name === 'msie' && context.savedSelection !== null ) { context.$iframe[0].contentWindow.focus(); context.savedSelection.select(); @@ -646,10 +640,10 @@ context.fn = $.extend( context.fn, { /** * Update the history queue * - * @param htmlChange Pass true or false to inidicate if there was a text change that should potentially + * @param htmlChange pass true or false to inidicate if there was a text change that should potentially * be given a new history state. */ - updateHistory: function ( htmlChange ) { + 'updateHistory': function( htmlChange ) { var newHTML = context.$content.html(); var newSel = context.fn.getCaretPosition(); // Was text changed? Was it because of a REDO or UNDO action? @@ -681,7 +675,7 @@ context.fn = $.extend( context.fn, { /** * Sets up the iframe in place of the textarea to allow more advanced operations */ - setupIframe: function () { + 'setupIframe': function() { context.$iframe = $( '<iframe></iframe>' ) .attr( { 'frameBorder': 0, @@ -840,7 +834,7 @@ context.fn = $.extend( context.fn, { * equivilant functionality to the otherwise textarea-based functionality. */ - getElementAtCursor: function () { + 'getElementAtCursor': function() { if ( context.$iframe[0].contentWindow.getSelection ) { // Firefox and Opera var selection = context.$iframe[0].contentWindow.getSelection(); @@ -861,7 +855,7 @@ context.fn = $.extend( context.fn, { /** * Gets the complete contents of the iframe (in plain text, not HTML) */ - getContents: function () { + 'getContents': function() { // For <p></p>, .html() returns <p> </p> in IE // This seems to convince IE while not affecting display if ( !context.$content ) { @@ -886,7 +880,7 @@ context.fn = $.extend( context.fn, { * Gets the currently selected text in the content * DO NOT CALL THIS DIRECTLY, use $.textSelection( 'functionname', options ) instead */ - getSelection: function () { + 'getSelection': function() { var retval; if ( context.$iframe[0].contentWindow.getSelection ) { // Firefox and Opera @@ -921,7 +915,7 @@ context.fn = $.extend( context.fn, { * selection is empty. * DO NOT CALL THIS DIRECTLY, use $.textSelection( 'functionname', options ) instead */ - encapsulateSelection: function ( options ) { + 'encapsulateSelection': function( options ) { var selText = $(this).textSelection( 'getSelection' ); var selTextArr; var collapseToEnd = false; @@ -1133,7 +1127,7 @@ context.fn = $.extend( context.fn, { * Gets the position (in resolution of bytes not nessecarily characters) in a textarea * DO NOT CALL THIS DIRECTLY, use $.textSelection( 'functionname', options ) instead */ - getCaretPosition: function ( options ) { + 'getCaretPosition': function( options ) { var startPos = null, endPos = null; if ( context.$iframe[0].contentWindow.getSelection ) { var selection = context.$iframe[0].contentWindow.getSelection(); @@ -1270,7 +1264,7 @@ context.fn = $.extend( context.fn, { * @param startContainer Element in iframe to start selection in. If not set, start is a character offset * @param endContainer Element in iframe to end selection in. If not set, end is a character offset */ - setSelection: function ( options ) { + 'setSelection': function( options ) { var sc = options.startContainer, ec = options.endContainer; sc = sc && sc.jquery ? sc[0] : sc; ec = ec && ec.jquery ? ec[0] : ec; @@ -1357,7 +1351,7 @@ context.fn = $.extend( context.fn, { * Scroll a textarea to the current cursor position. You can set the cursor position with setSelection() * DO NOT CALL THIS DIRECTLY, use $.textSelection( 'functionname', options ) instead */ - scrollToCaretPosition: function ( options ) { + 'scrollToCaretPosition': function( options ) { context.fn.scrollToTop( context.fn.getElementAtCursor(), true ); }, /** @@ -1367,7 +1361,7 @@ context.fn = $.extend( context.fn, { * @param $element jQuery object containing an element in the iframe * @param force If true, scroll the element even if it's already visible */ - scrollToTop: function ( $element, force ) { + 'scrollToTop': function( $element, force ) { var html = context.$content.closest( 'html' ), body = context.$content.closest( 'body' ), parentHtml = $( 'html' ), diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.js b/extensions/WikiEditor/modules/jquery.wikiEditor.js index 460203ff..def8b69e 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.js +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.js @@ -8,8 +8,7 @@ * $( 'textarea#wpTextbox1' ).wikiEditor( 'addModule', 'toolbar', { ... config ... } ); * */ -/*jshint onevar:false, boss:true */ -( function ( $, mw ) { +( function ( $ ) { /** * Global static object for wikiEditor that provides generally useful functionality to all modules and contexts. @@ -114,7 +113,7 @@ $.wikiEditor = { isRequired: function ( module, requirement ) { if ( typeof module.req !== 'undefined' ) { for ( var req in module.req ) { - if ( module.req[req] === requirement ) { + if ( module.req[req] == requirement ) { return true; } } @@ -133,10 +132,9 @@ $.wikiEditor = { * with the key 'bar'. */ autoMsg: function ( object, property ) { - var i, p; // Accept array of possible properties, of which the first one found will be used - if ( typeof property === 'object' ) { - for ( i in property ) { + if ( typeof property == 'object' ) { + for ( var i in property ) { if ( property[i] in object || property[i] + 'Msg' in object ) { property = property[i]; break; @@ -146,11 +144,11 @@ $.wikiEditor = { if ( property in object ) { return object[property]; } else if ( property + 'Msg' in object ) { - p = object[property + 'Msg']; + var p = object[property + 'Msg']; if ( $.isArray( p ) && p.length >= 2 ) { - return mw.message.apply( mw.message, p ).plain(); + return mediaWiki.message.apply( mediaWiki.message, p ).plain(); } else { - return mw.message( p ).plain(); + return mediaWiki.message( p ).plain(); } } else { return ''; @@ -183,7 +181,7 @@ $.wikiEditor = { var src = $.wikiEditor.autoLang( icon, lang ); path = path || $.wikiEditor.imgPath; // Prepend path if src is not absolute - if ( src.substr( 0, 7 ) !== 'http://' && src.substr( 0, 8 ) !== 'https://' && src[0] !== '/' ) { + if ( src.substr( 0, 7 ) != 'http://' && src.substr( 0, 8 ) != 'https://' && src[0] != '/' ) { src = path + src; } return src + '?' + mw.loader.version( 'jquery.wikiEditor' ); @@ -199,9 +197,9 @@ $.wikiEditor = { */ autoIconOrOffset: function ( icon, offset, path, lang ) { lang = lang || mw.config.get( 'wgUserLanguage' ); - if ( typeof offset === 'object' && lang in offset ) { + if ( typeof offset == 'object' && lang in offset ) { return offset[lang]; - } else if ( typeof icon === 'object' && lang in icon ) { + } else if ( typeof icon == 'object' && lang in icon ) { return $.wikiEditor.autoIcon( icon, undefined, lang ); } else { return $.wikiEditor.autoLang( offset, lang ); @@ -225,7 +223,7 @@ if ( !$.wikiEditor.isSupported() ) { // where we left off var context = $(this).data( 'wikiEditor-context' ); // On first call, we need to set things up, but on all following calls we can skip right to the API handling -if ( !context || typeof context === 'undefined' ) { +if ( !context || typeof context == 'undefined' ) { // Star filling the context with useful data - any jQuery selections, as usual should be named with a preceding $ context = { @@ -278,14 +276,14 @@ if ( !context || typeof context === 'undefined' ) { 'addModule': function ( context, data ) { var module, call, modules = {}; - if ( typeof data === 'string' ) { + if ( typeof data == 'string' ) { modules[data] = {}; - } else if ( typeof data === 'object' ) { + } else if ( typeof data == 'object' ) { modules = data; } for ( module in modules ) { // Check for the existance of an available / supported module with a matching name and a create function - if ( typeof module === 'string' && typeof $.wikiEditor.modules[module] !== 'undefined' && + if ( typeof module == 'string' && typeof $.wikiEditor.modules[module] !== 'undefined' && $.wikiEditor.isSupported( $.wikiEditor.modules[module] ) ) { // Extend the context's core API with this module's own API calls @@ -328,11 +326,11 @@ if ( !context || typeof context === 'undefined' ) { */ trigger: function ( name, event ) { // Event is an optional argument, but from here on out, at least the type field should be dependable - if ( typeof event === 'undefined' ) { + if ( typeof event == 'undefined' ) { event = { 'type': 'custom' }; } // Ensure there's a place for extra information to live - if ( typeof event.data === 'undefined' ) { + if ( typeof event.data == 'undefined' ) { event.data = {}; } @@ -395,7 +393,7 @@ if ( !context || typeof context === 'undefined' ) { // Return the newly appended tab return $( '<div>' ) .attr( 'rel', 'wikiEditor-ui-view-' + options.name ) - .addClass( context.view === options.name ? 'current' : null ) + .addClass( context.view == options.name ? 'current' : null ) .append( $( '<a>' ) .attr( 'href', '#' ) .mousedown( function () { @@ -408,7 +406,7 @@ if ( !context || typeof context === 'undefined' ) { context.$tabs.find( 'div' ).removeClass( 'current' ); $(this).parent().addClass( 'current' ); $(this).blur(); - if ( 'init' in options && typeof options.init === 'function' ) { + if ( 'init' in options && typeof options.init == 'function' ) { options.init( context ); } event.preventDefault(); @@ -541,9 +539,9 @@ if ( !context || typeof context === 'undefined' ) { var args = $.makeArray( arguments ); // Dynamically setup core extensions for modules that are required -if ( args[0] === 'addModule' && typeof args[1] !== 'undefined' ) { +if ( args[0] == 'addModule' && typeof args[1] !== 'undefined' ) { var modules = args[1]; - if ( typeof modules !== 'object' ) { + if ( typeof modules !== "object" ) { modules = {}; modules[args[1]] = ''; } @@ -579,4 +577,4 @@ return $(this).data( 'wikiEditor-context', context ); }; -}( jQuery, mediaWiki ) ); +}( jQuery ) ); diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.preview.js b/extensions/WikiEditor/modules/jquery.wikiEditor.preview.js index 372d2e8e..39907364 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.preview.js +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.preview.js @@ -1,6 +1,6 @@ /* Preview module for wikiEditor */ ( function ( $, mw ) { -/*jshint onevar:false */ + $.wikiEditor.modules.preview = { /** @@ -32,7 +32,7 @@ fn: { * @param context Context object of editor to create module in * @param config Configuration object to create module from */ - create: function ( context ) { + create: function ( context, config ) { if ( 'initialized' in context.modules.preview ) { return; } @@ -65,9 +65,9 @@ fn: { }, function ( data ) { if ( - typeof data.parse === 'undefined' || - typeof data.parse.text === 'undefined' || - typeof data.parse.text['*'] === 'undefined' + typeof data.parse == 'undefined' || + typeof data.parse.text == 'undefined' || + typeof data.parse.text['*'] == 'undefined' ) { return; } @@ -89,7 +89,7 @@ fn: { // Gets the latest copy of the wikitext var wikitext = context.$textarea.textSelection( 'getContents' ); // Aborts when nothing has changed since the last time - if ( context.modules.preview.changesText === wikitext ) { + if ( context.modules.preview.changesText == wikitext ) { return; } context.$changesTab.find( 'table.diff tbody' ).empty(); @@ -115,9 +115,8 @@ fn: { rvprop: '' }; var section = $( '[name="wpSection"]' ).val(); - if ( section !== '' ) { + if ( section !== '' ) postdata2.rvsection = section; - } $.post( mw.util.wikiScript( 'api' ), postdata2, function ( data ) { // Add diff CSS diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.previewDialog.js b/extensions/WikiEditor/modules/jquery.wikiEditor.previewDialog.js index 5381e605..ca88c79a 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.previewDialog.js +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.previewDialog.js @@ -1,6 +1,5 @@ /* Publish module for wikiEditor */ -/*jshint onevar:false */ -( function ( $, mw ) { $.wikiEditor.modules.previewDialog = { +( function( $ ) { $.wikiEditor.modules.previewDialog = { /** * Compatability map @@ -30,7 +29,7 @@ fn: { * @param context Context object of editor to create module in * @param config Configuration object to create module from */ - create: function( context ) { + create: function( context, config ) { // Build the dialog behind the Publish button var dialogID = 'wikiEditor-' + context.instance + '-preview-dialog'; $.wikiEditor.modules.dialogs.fn.create( @@ -79,7 +78,7 @@ fn: { .css( 'top', '25px' ); // $dialog.dialog( 'option', 'width', $( 'body' ).width() - 300 ); // Aborts when nothing has changed since the last preview - if ( context.modules.preview.previewText === wikitext ) { + if ( context.modules.preview.previewText == wikitext ) { return; } @@ -97,9 +96,9 @@ fn: { }, function( data ) { if ( - typeof data.parse === 'undefined' || - typeof data.parse.text === 'undefined' || - typeof data.parse.text['*'] === 'undefined' + typeof data.parse == 'undefined' || + typeof data.parse.text == 'undefined' || + typeof data.parse.text['*'] == 'undefined' ) { return; } @@ -129,4 +128,4 @@ fn: { } } -}; } )( jQuery, mediaWiki ); +}; } )( jQuery ); diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.publish.js b/extensions/WikiEditor/modules/jquery.wikiEditor.publish.js index 058fa1b3..b61140dc 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.publish.js +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.publish.js @@ -1,5 +1,4 @@ /* Publish module for wikiEditor */ -/*jshint onevar:false */ ( function ( $ ) { $.wikiEditor.modules.publish = { @@ -32,7 +31,7 @@ fn: { * @param context Context object of editor to create module in * @param config Configuration object to create module from */ - create: function ( context ) { + create: function ( context, config ) { // Build the dialog behind the Publish button var dialogID = 'wikiEditor-' + context.instance + '-dialog'; $.wikiEditor.modules.dialogs.fn.create( @@ -90,18 +89,16 @@ fn: { ); /* END OF REALLY DIRTY HACK */ - if ( $( '#wpMinoredit' ).length === 0 ) { + if ( $( '#wpMinoredit' ).length === 0 ) $( '#wikiEditor-' + context.instance + '-dialog-minor' ).hide(); - } else if ( $( '#wpMinoredit' ).prop( 'checked' ) ) { + else if ( $( '#wpMinoredit' ).is( ':checked' ) ) $( '#wikiEditor-' + context.instance + '-dialog-minor' ) .prop( 'checked', true ); - } - if ( $( '#wpWatchthis' ).length === 0 ) { + if ( $( '#wpWatchthis' ).length === 0 ) $( '#wikiEditor-' + context.instance + '-dialog-watch' ).hide(); - } else if ( $( '#wpWatchthis' ).prop( 'checked' ) ) { + else if ( $( '#wpWatchthis' ).is( ':checked' ) ) $( '#wikiEditor-' + context.instance + '-dialog-watch' ) .prop( 'checked', true ); - } $(this).find( 'form' ).submit( function ( e ) { $(this).closest( '.ui-dialog' ).find( 'button:first' ).click(); diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.templateEditor.js b/extensions/WikiEditor/modules/jquery.wikiEditor.templateEditor.js index 3cbd5ba5..bd00325f 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.templateEditor.js +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.templateEditor.js @@ -1,6 +1,5 @@ /* TemplateEditor module for wikiEditor */ -/*jshint quotmark:false, onevar:false */ -( function ( $ ) { $.wikiEditor.modules.templateEditor = { +( function( $ ) { $.wikiEditor.modules.templateEditor = { /** * Name mappings, dirty hack which will be removed once "TemplateInfo" extension is more fully supported */ @@ -38,13 +37,9 @@ */ evt: { - /** - * @param context - * @param event - */ - mark: function( context ) { + mark: function( context, event ) { // The markers returned by this function are skipped on realchange, so don't regenerate them in that case - if ( context.modules.highlight.currentScope === 'realchange' ) { + if ( context.modules.highlight.currentScope == 'realchange' ) { return; } @@ -52,9 +47,10 @@ evt: { var markers = context.modules.highlight.markers; var tokenArray = context.modules.highlight.tokenArray; // Collect matching level 0 template call boundaries from the tokenArray + var level = 0; var tokenIndex = 0; while ( tokenIndex < tokenArray.length ){ - while ( tokenIndex < tokenArray.length && tokenArray[tokenIndex].label !== 'TEMPLATE_BEGIN' ) { + while ( tokenIndex < tokenArray.length && tokenArray[tokenIndex].label != 'TEMPLATE_BEGIN' ) { tokenIndex++; } //open template @@ -62,18 +58,19 @@ evt: { var beginIndex = tokenIndex; var endIndex = -1; //no match found var openTemplates = 1; - while ( tokenIndex < tokenArray.length - 1 && endIndex === -1 ) { + var templatesMatched = false; + while ( tokenIndex < tokenArray.length - 1 && endIndex == -1 ) { tokenIndex++; - if ( tokenArray[tokenIndex].label === 'TEMPLATE_BEGIN' ) { + if ( tokenArray[tokenIndex].label == 'TEMPLATE_BEGIN' ) { openTemplates++; - } else if ( tokenArray[tokenIndex].label === 'TEMPLATE_END' ) { + } else if ( tokenArray[tokenIndex].label == 'TEMPLATE_END' ) { openTemplates--; - if ( openTemplates === 0 ) { + if ( openTemplates == 0 ) { endIndex = tokenIndex; } //we can stop looping } }//while finding template ending - if ( endIndex !== -1 ) { + if ( endIndex != -1 ) { markers.push( { start: tokenArray[beginIndex].offset, end: tokenArray[endIndex].offset, @@ -95,7 +92,7 @@ evt: { } }, onSkip: function( node ) { - if ( $( node ).html() === $( node ).data( 'oldHTML' ) ) { + if ( $( node ).html() == $( node ).data( 'oldHTML' ) ) { // No change return; } @@ -107,7 +104,7 @@ evt: { if ( $( node ).parent().hasClass( 'wikiEditor-template' ) ) { var $label = $( node ).parent().find( '.wikiEditor-template-label' ); var displayName = $.wikiEditor.modules.templateEditor.fn.getTemplateDisplayName( model ); - if ( $label.text() !== displayName ) { + if ( $label.text() != displayName ) { $label.text( displayName ); } } @@ -122,7 +119,7 @@ evt: { $.wikiEditor.modules.templateEditor.fn.bindTemplateEvents( $( node ) ); } }, - getAnchor: function( ca1 ) { + getAnchor: function( ca1, ca2 ) { return $( ca1.parentNode ).is( 'span.wikiEditor-template-text' ) ? ca1.parentNode : null; }, @@ -145,9 +142,7 @@ evt: { var $evtElem = event.jQueryNode; if ( $evtElem.hasClass( 'wikiEditor-template-label' ) ) { // Allow anything if the command or control key are depressed - if ( event.ctrlKey || event.metaKey ) { - return true; - } + if ( event.ctrlKey || event.metaKey ) return true; switch ( event.which ) { case 13: // Enter $evtElem.click(); @@ -182,22 +177,14 @@ evt: { } } }, - /** - * @param context - * @param event - */ - keyup: function( context ) { + keyup: function( context, event ) { // Rest our ignoreKeypress variable if it's set to true if ( context.$iframe.data( 'ignoreKeypress' ) ) { context.$iframe.data( 'ignoreKeypress', false ); } return true; }, - /** - * @param context - * @param event - */ - keypress: function( context ) { + keypress: function( context, event ) { // If this event is from a keydown event which we want to block, ignore it return ( context.$iframe.data( 'ignoreKeypress' ) ? false : true ); } @@ -223,7 +210,7 @@ fn: { * @param context Context object of editor to create module in * @param config Configuration object to create module from */ - create: function( context ) { + create: function( context, config ) { // Initialize module within the context context.modules.templateEditor = {}; }, @@ -233,7 +220,8 @@ fn: { */ wrapTemplate: function( $wrapper ) { var model = $wrapper.data( 'model' ); - $wrapper + var context = $wrapper.data( 'marker' ).context; + var $template = $wrapper .wrap( '<span class="wikiEditor-template"></span>' ) .addClass( 'wikiEditor-template-text wikiEditor-template-text-shrunken' ) .parent() @@ -261,7 +249,7 @@ fn: { bindTemplateEvents: function( $wrapper ) { var $template = $wrapper.parent( '.wikiEditor-template' ); - if ( typeof opera === 'undefined' ) { + if ( typeof ( opera ) == "undefined" ) { $template.parent().attr('contentEditable', 'false'); } @@ -286,7 +274,7 @@ fn: { * Toggle the visisbilty of the wikitext for a given template * @param $wrapper The origianl wrapper we want expand/collapse */ - toggleWikiTextEditor: function( $wrapper ) { + toggleWikiTextEditor: function( $wrapper ) { var context = $wrapper.data( 'marker' ).context; var $template = $wrapper.parent( '.wikiEditor-template' ); context.fn.purgeOffsets(); @@ -297,11 +285,11 @@ fn: { var $templateText = $template.find( '.wikiEditor-template-text' ); $templateText.toggleClass( 'wikiEditor-template-text-shrunken' ); $templateText.toggleClass( 'wikiEditor-template-text-visible' ); - if ( $templateText.hasClass('wikiEditor-template-text-shrunken') ){ + if( $templateText.hasClass('wikiEditor-template-text-shrunken') ){ //we just closed the template // Update the model if we need to - if ( $templateText.html() !== $templateText.data( 'oldHTML' ) ) { + if ( $templateText.html() != $templateText.data( 'oldHTML' ) ) { var templateModel = $.wikiEditor.modules.templateEditor.fn.updateModel( $templateText ); //this is the only place the template name can be changed; keep the template name in sync @@ -362,7 +350,7 @@ fn: { var $templateText = $templateDiv.children( '.wikiEditor-template-text' ); var templateModel = $templateText.data( 'model' ); // Update the model if we need to - if ( $templateText.html() !== $templateText.data( 'oldHTML' ) ) { + if ( $templateText.html() != $templateText.data( 'oldHTML' ) ) { templateModel = $.wikiEditor.modules.templateEditor.fn.updateModel( $templateText ); } @@ -374,11 +362,11 @@ fn: { var $rows = $fields.find( '.wikiEditor-template-dialog-field-wrapper' ); for ( var paramIndex in params ) { var param = params[paramIndex]; - if ( typeof param.name === 'undefined' ) { + if ( typeof param.name == 'undefined' ) { // param is the template name, skip it continue; } - var paramText = typeof param === 'string' ? + var paramText = typeof param == 'string' ? param.name.replace( /[\_\-]/g, ' ' ) : param.name; var paramVal = templateModel.getValue( param.name ); @@ -409,13 +397,11 @@ fn: { .data( 'expanded', false ) .bind( 'cut paste keypress click change', function( e ) { // If this was fired by a tab keypress, let it go - if ( e.keyCode === 9 || e.keyCode === '9' ) { - return true; - } + if ( e.keyCode == '9' ) return true; var $this = $( this ); setTimeout( function() { var expanded = $this.data( 'expanded' ); - if ( $this.val().indexOf( '\n' ) !== -1 || $this.val().length > 24 ) { + if ( $this.val().indexOf( '\n' ) != -1 || $this.val().length > 24 ) { if ( !expanded ) { $this.animate( { 'height': '4.5em' }, 'fast' ); $this.data( 'expanded', true ); @@ -469,7 +455,7 @@ fn: { updateModel: function( $templateText, model ) { var context = $templateText.data( 'marker' ).context; var text; - if ( typeof model === 'undefined' ) { + if ( typeof model == 'undefined' ) { text = context.fn.htmlToText( $templateText.html() ); } else { text = model.getText(); @@ -478,7 +464,7 @@ fn: { $templateText.text( text ); $templateText.html( $templateText.html().replace( /\n/g, '<br />' ) ); $templateText.data( 'oldHTML', $templateText.html() ); - if ( typeof model === 'undefined' ) { + if ( typeof model == 'undefined' ) { model = new $.wikiEditor.modules.templateEditor.fn.model( text ); $templateText.data( 'model', model ); } @@ -490,9 +476,9 @@ fn: { */ getTemplateDisplayName: function ( model ) { var tName = model.getName(); - if( model.getValue( 'name' ) !== '' ) { + if( model.getValue( 'name' ) != '' ) { return tName + ': ' + model.getValue( 'name' ); - } else if( model.getValue( 'Name' ) !== '' ) { + } else if( model.getValue( 'Name' ) != '' ) { return tName + ': ' + model.getValue( 'Name' ); } else if( tName.toLowerCase() in $.wikiEditor.modules.templateEditor.nameMappings ) { return tName + ': ' + model.getValue( $.wikiEditor.modules.templateEditor.nameMappings[tName.toLowerCase()] ); @@ -555,28 +541,27 @@ fn: { var retVal; if ( isNaN( name ) ) { // It's a string! - if ( typeof paramsByName[name] === 'undefined' ) { + if ( typeof paramsByName[name] == 'undefined' ) { // Does not exist - return ''; + return ""; } rangeIndex = paramsByName[name]; } else { // It's a number! - rangeIndex = parseInt( name, 10 ); + rangeIndex = parseInt( name ); } - if ( typeof params[rangeIndex] === 'undefined' ) { + if ( typeof params[rangeIndex] == 'undefined' ) { // Does not exist - return ''; + return ""; } valueRange = ranges[params[rangeIndex].valueIndex]; - if ( typeof valueRange.newVal === 'undefined' || original ) { + if ( typeof valueRange.newVal == 'undefined' || original ) { // Value unchanged, return original wikitext retVal = wikitext.substring( valueRange.begin, valueRange.end ); } else { // New value exists, return new value retVal = valueRange.newVal; } - /*jshint eqnull:true */ if ( value != null ) { ranges[params[rangeIndex].valueIndex].newVal = value; } @@ -589,7 +574,7 @@ fn: { * Get template name */ this.getName = function() { - if( typeof ranges[templateNameIndex].newVal === 'undefined' ) { + if( typeof ranges[templateNameIndex].newVal == 'undefined' ) { return wikitext.substring( ranges[templateNameIndex].begin, ranges[templateNameIndex].end ); } else { return ranges[templateNameIndex].newVal; @@ -650,9 +635,9 @@ fn: { * Get modified template text */ this.getText = function() { - var newText = ""; - for ( var i = 0 ; i < ranges.length; i++ ) { - if( typeof ranges[i].newVal === 'undefined' ) { + newText = ""; + for ( i = 0 ; i < ranges.length; i++ ) { + if( typeof ranges[i].newVal == 'undefined' ) { newText += wikitext.substring( ranges[i].begin, ranges[i].end ); } else { newText += ranges[i].newVal; @@ -674,7 +659,7 @@ fn: { var adjustment = 0; for (var i = 0 ; i < ranges.length; i++ ) { ranges[i].begin += adjustment; - if ( typeof ranges[i].adjust !== 'undefined' ) { + if( typeof ranges[i].adjust != 'undefined' ) { adjustment += ranges[i].adjust(); // NOTE: adjust should be a function that has the information necessary to calculate the length of // this 'segment' @@ -695,16 +680,15 @@ fn: { // Get rid of first {{ with whitespace var sanatizedStr = wikitext.replace( /{{/, " " ); // Replace end - var endBraces = sanatizedStr.match( /}}\s*$/ ); + endBraces = sanatizedStr.match( /}}\s*$/ ); if ( endBraces ) { sanatizedStr = sanatizedStr.substring( 0, endBraces.index ) + " " + sanatizedStr.substring( endBraces.index + 2 ); } - var startIndex, endIndex, sanatizedSegment, openBraces, brace; //treat HTML comments like whitespace - while ( sanatizedStr.indexOf( '<!' ) !== -1 ) { + while ( sanatizedStr.indexOf( '<!' ) != -1 ) { startIndex = sanatizedStr.indexOf( '<!' ); endIndex = sanatizedStr.indexOf('-->') + 3; if( endIndex < 3 ){ @@ -716,26 +700,26 @@ fn: { } // Match the open braces we just found with equivalent closing braces note, works for any level of braces - while ( sanatizedStr.indexOf( '{{' ) !== -1 ) { + while ( sanatizedStr.indexOf( '{{' ) != -1 ) { startIndex = sanatizedStr.indexOf( '{{' ) + 1; openBraces = 2; endIndex = startIndex; while ( (openBraces > 0) && (endIndex < sanatizedStr.length) ) { - brace = sanatizedStr[++endIndex]; - openBraces += brace === '}' ? -1 : brace === '{' ? 1 : 0; + var brace = sanatizedStr[++endIndex]; + openBraces += brace == '}' ? -1 : brace == '{' ? 1 : 0; } sanatizedSegment = sanatizedStr.substring( startIndex,endIndex ).replace( /[{}|=]/g , 'X' ); sanatizedStr = sanatizedStr.substring( 0, startIndex ) + sanatizedSegment + sanatizedStr.substring( endIndex ); } //links, images, etc, which also can nest - while ( sanatizedStr.indexOf( '[[' ) !== -1 ) { + while ( sanatizedStr.indexOf( '[[' ) != -1 ) { startIndex = sanatizedStr.indexOf( '[[' ) + 1; openBraces = 2; endIndex = startIndex; while ( (openBraces > 0) && (endIndex < sanatizedStr.length) ) { - brace = sanatizedStr[++endIndex]; - openBraces += brace === ']' ? -1 : brace === '[' ? 1 : 0; + var brace = sanatizedStr[++endIndex]; + openBraces += brace == ']' ? -1 : brace == '[' ? 1 : 0; } sanatizedSegment = sanatizedStr.substring( startIndex,endIndex ).replace( /[\[\]|=]/g , 'X' ); sanatizedStr = @@ -749,16 +733,14 @@ fn: { var params = []; var templateNameIndex = 0; var doneParsing = false; - var oldDivider = 0; - var divider = sanatizedStr.indexOf( '|', oldDivider ); - if ( divider === -1 ) { + oldDivider = 0; + divider = sanatizedStr.indexOf( '|', oldDivider ); + if ( divider == -1 ) { divider = sanatizedStr.length; doneParsing = true; collapsible = false; //zero params } - var nameMatch = sanatizedStr.substring( 0, divider ).match( /[^\s]/ ); - var nameEndMatch; - /*jshint eqnull:true */ + nameMatch = sanatizedStr.substring( 0, divider ).match( /[^\s]/ ); if ( nameMatch != null ) { ranges.push( new Range( 0 ,nameMatch.index ) ); //whitespace and squiggles upto the name nameEndMatch = sanatizedStr.substring( 0 , divider ).match( /[^\s]\s*$/ ); //last nonwhitespace character @@ -776,21 +758,18 @@ fn: { * Start looping over params */ var currentParamNumber = 0; - var currentField, currentValue, valueBeginIndex, valueBegin, valueEnd; - var nameIndex, equalsIndex, valueIndex; - var currentName, nameBegin, nameBeginIndex, nameEnd, nameEndIndex; var valueEndIndex = ranges[templateNameIndex].end; var paramsByName = []; while ( !doneParsing ) { currentParamNumber++; oldDivider = divider; divider = sanatizedStr.indexOf( '|', oldDivider + 1 ); - if ( divider === -1 ) { + if ( divider == -1 ) { divider = sanatizedStr.length; doneParsing = true; } currentField = sanatizedStr.substring( oldDivider+1, divider ); - if ( currentField.indexOf( '=' ) === -1 ) { + if ( currentField.indexOf( '=' ) == -1 ) { // anonymous field, gets a number //default values, since we'll allow empty values diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.templates.js b/extensions/WikiEditor/modules/jquery.wikiEditor.templates.js index b0462563..b303e3fa 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.templates.js +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.templates.js @@ -1,23 +1,22 @@ /* Templates Module for wikiEditor */ -/*jshint onevar:false */ -( function ( $ ) { $.wikiEditor.modules.templates = { +( function( $ ) { $.wikiEditor.modules.templates = { /** * Core Requirements */ -req: [ 'iframe' ], +'req': [ 'iframe' ], /** * Object Templates */ -tpl: { - marker: { - type: 'template', - anchor: 'wrap', - skipDivision: 'realchange', - afterWrap: function ( node ) { +'tpl': { + 'marker': { + 'type': 'template', + 'anchor': 'wrap', + 'skipDivision': 'realchange', + 'afterWrap': function( node ) { $( node ).addClass( 'wikiEditor-template' ); }, - getAnchor: function ( ca1 ) { + 'getAnchor': function( ca1, ca2 ) { return $( ca1.parentNode ).is( '.wikiEditor-template' ) ? ca1.parentNode : null; } } @@ -25,14 +24,10 @@ tpl: { /** * Event handlers */ -evt: { - /** - * @param context - * @param event - */ - mark: function ( context ) { +'evt': { + 'mark': function( context, event ) { // The markers returned by this function are skipped on realchange, so don't regenerate them in that case - if ( context.modules.highlight.currentScope === 'realchange' ) { + if ( context.modules.highlight.currentScope == 'realchange' ) { return; } // Get references to the markers and tokens from the current context @@ -41,14 +36,14 @@ evt: { // Use depth-tracking to extract top-level templates from tokens var depth = 0, bias, start; for ( var i in tokens ) { - depth += ( bias = tokens[i].label === 'TEMPLATE_BEGIN' ? 1 : ( tokens[i].label === 'TEMPLATE_END' ? -1 : 0 ) ); - if ( bias > 0 && depth === 1 ) { + depth += ( bias = tokens[i].label == 'TEMPLATE_BEGIN' ? 1 : ( tokens[i].label == 'TEMPLATE_END' ? -1 : 0 ) ); + if ( bias > 0 && depth == 1 ) { // Top-level opening - use offset as start start = tokens[i].offset; - } else if ( bias < 0 && depth === 0 ) { + } else if ( bias < 0 && depth == 0 ) { // Top-level closing - use offset as end markers[markers.length] = $.extend( - { context: context, start: start, end: tokens[i].offset }, + { 'context': context, 'start': start, 'end': tokens[i].offset }, $.wikiEditor.modules.templates.tpl.marker ); } @@ -58,19 +53,15 @@ evt: { } } }, -exp: [ - { regex: /{{/, label: 'TEMPLATE_BEGIN' }, - { regex: /}}/, label: 'TEMPLATE_END', markAfter: true } +'exp': [ + { 'regex': /{{/, 'label': "TEMPLATE_BEGIN" }, + { 'regex': /}}/, 'label': "TEMPLATE_END", 'markAfter': true } ], /** * Internally used functions */ -fn: { - /** - * @param context - * @param config - */ - create: function () { +'fn': { + 'create': function( context, config ) { // Do some stuff here... } } diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.toc.js b/extensions/WikiEditor/modules/jquery.wikiEditor.toc.js index 3f186db6..54b8a863 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.toc.js +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.toc.js @@ -1,32 +1,31 @@ /* TOC Module for wikiEditor */ -/*jshint onevar:false */ -( function ( $, mw ) { $.wikiEditor.modules.toc = { +( function( $ ) { $.wikiEditor.modules.toc = { /** * Compatability map */ -browsers: { +'browsers': { // Left-to-right languages - ltr: { - msie: [['>=', 7]], - firefox: [['>=', 3]], - opera: [['>=', 10]], - safari: [['>=', 4]], - chrome: [['>=', 4]] + 'ltr': { + 'msie': [['>=', 7]], + 'firefox': [['>=', 3]], + 'opera': [['>=', 10]], + 'safari': [['>=', 4]], + 'chrome': [['>=', 4]] }, // Right-to-left languages - rtl: { - msie: [['>=', 8]], - firefox: [['>=', 3]], - opera: [['>=', 10]], - safari: [['>=', 4]], - chrome: [['>=', 4]] + 'rtl': { + 'msie': [['>=', 8]], + 'firefox': [['>=', 3]], + 'opera': [['>=', 10]], + 'safari': [['>=', 4]], + 'chrome': [['>=', 4]] } }, /** * Core Requirements */ -req: [ 'iframe' ], +'req': [ 'iframe' ], /** * Configuration */ @@ -52,18 +51,10 @@ api: { * Event handlers */ evt: { - /** - * @param context - * @param event - */ - change: function( context ) { + change: function( context, event ) { $.wikiEditor.modules.toc.fn.update( context ); }, - /** - * @param context - * @param event - */ - ready: function( context ) { + ready: function( context, event ) { // Add the TOC to the document $.wikiEditor.modules.toc.fn.build( context ); if ( !context.$content ) { @@ -77,32 +68,28 @@ evt: { $.wikiEditor.modules.toc.fn.improveUI(); $.wikiEditor.modules.toc.evt.resize( context ); }, - /** - * @param context - * @param event - */ - resize: function( context ) { + resize: function( context, event ) { var availableWidth = context.$wikitext.width() - parseFloat( $.wikiEditor.modules.toc.cfg.textMinimumWidth ), totalMinWidth = parseFloat( $.wikiEditor.modules.toc.cfg.minimumWidth ) + parseFloat( $.wikiEditor.modules.toc.cfg.textMinimumWidth ); context.$ui.find( '.wikiEditor-ui-right' ) .resizable( 'option', 'maxWidth', availableWidth ); - if ( context.modules.toc.$toc.data( 'positionMode' ) !== 'disabled' && + if ( context.modules.toc.$toc.data( 'positionMode' ) != 'disabled' && context.$wikitext.width() < totalMinWidth ) { $.wikiEditor.modules.toc.fn.disable( context ); - } else if ( context.modules.toc.$toc.data( 'positionMode' ) === 'disabled' && + } else if ( context.modules.toc.$toc.data( 'positionMode' ) == 'disabled' && context.$wikitext.width() > totalMinWidth ) { $.wikiEditor.modules.toc.fn.enable( context ); - } else if ( context.modules.toc.$toc.data( 'positionMode' ) === 'regular' && + } else if ( context.modules.toc.$toc.data( 'positionMode' ) == 'regular' && context.$ui.find( '.wikiEditor-ui-right' ).width() > availableWidth ) { //switch mode $.wikiEditor.modules.toc.fn.switchLayout( context ); - } else if ( context.modules.toc.$toc.data( 'positionMode' ) === 'goofy' && + } else if ( context.modules.toc.$toc.data( 'positionMode' ) == 'goofy' && context.modules.toc.$toc.data( 'previousWidth' ) < context.$wikitext.width() ) { //switch mode $.wikiEditor.modules.toc.fn.switchLayout( context ); } - if ( context.modules.toc.$toc.data( 'positionMode' ) === 'goofy' ) { + if ( context.modules.toc.$toc.data( 'positionMode' ) == 'goofy' ) { context.modules.toc.$toc.find( 'div' ).autoEllipsis( { 'position': 'right', 'tooltip': true, 'restoreText': true } ); @@ -118,18 +105,14 @@ evt: { // store the width of the view for comparison on next resize context.modules.toc.$toc.data( 'previousWidth', context.$wikitext.width() ); }, - /** - * @param context - * @param event - */ - mark: function( context ) { + mark: function( context, event ) { var hash = ''; var markers = context.modules.highlight.markers; var tokenArray = context.modules.highlight.tokenArray; var outline = context.data.outline = []; var h = 0; for ( var i = 0; i < tokenArray.length; i++ ) { - if ( tokenArray[i].label !== 'TOC_HEADER' ) { + if ( tokenArray[i].label != 'TOC_HEADER' ) { continue; } h++; @@ -151,14 +134,14 @@ evt: { }, onSkip: function( node ) { var marker = $( node ).data( 'marker' ); - if ( $( node ).data( 'section' ) !== marker.index ) { + if ( $( node ).data( 'section' ) != marker.index ) { $( node ) .removeClass( 'wikiEditor-toc-section-' + $( node ).data( 'section' ) ) .addClass( 'wikiEditor-toc-section-' + marker.index ) .data( 'section', marker.index ); } }, - getAnchor: function( ca1 ) { + getAnchor: function( ca1, ca2 ) { return $( ca1.parentNode ).is( '.wikiEditor-toc-header' ) ? ca1.parentNode : null; } @@ -171,7 +154,7 @@ evt: { } ); } // Only update the TOC if it's been changed - we do this by comparing a hash of the headings this time to last - if ( typeof context.modules.toc.lastHash === 'undefined' || context.modules.toc.lastHash !== hash ) { + if ( typeof context.modules.toc.lastHash == 'undefined' || context.modules.toc.lastHash !== hash ) { $.wikiEditor.modules.toc.fn.build( context ); $.wikiEditor.modules.toc.fn.update( context ); // Remember the changed version @@ -192,13 +175,13 @@ fn: { * @param {Object} context Context object of editor to create module in * @param {Object} config Configuration object to create module from */ - create: function( context ) { + create: function( context, config ) { if ( '$toc' in context.modules.toc ) { return; } $.wikiEditor.modules.toc.cfg.rtl = $( 'body' ).is( '.rtl' ); $.wikiEditor.modules.toc.cfg.flexProperty = $.wikiEditor.modules.toc.cfg.rtl ? 'marginLeft' : 'marginRight'; - context.$ui.find( '.wikiEditor-ui-left' ).height(); + var height = context.$ui.find( '.wikiEditor-ui-left' ).height(); context.modules.toc.$toc = $( '<div>' ) .addClass( 'wikiEditor-ui-toc' ) .data( 'context', context ) @@ -213,14 +196,14 @@ fn: { }, redraw: function( context, fixedWidth ) { fixedWidth = parseFloat( fixedWidth ); - if ( context.modules.toc.$toc.data( 'positionMode' ) === 'regular' ) { + if( context.modules.toc.$toc.data( 'positionMode' ) == 'regular' ) { context.$ui.find( '.wikiEditor-ui-right' ) .css( 'width', fixedWidth + 'px' ); context.$ui.find( '.wikiEditor-ui-left' ) .css( $.wikiEditor.modules.toc.cfg.flexProperty, ( -1 * fixedWidth ) + 'px' ) .children() .css( $.wikiEditor.modules.toc.cfg.flexProperty, fixedWidth + 'px' ); - } else if( context.modules.toc.$toc.data( 'positionMode' ) === 'goofy' ) { + } else if( context.modules.toc.$toc.data( 'positionMode' ) == 'goofy' ) { context.$ui.find( '.wikiEditor-ui-left' ) .css( 'width', fixedWidth ); context.$ui.find( '.wikiEditor-ui-right' ) @@ -229,10 +212,10 @@ fn: { } }, switchLayout: function( context ) { - var width; - context.$ui.find( '.wikiEditor-ui-right' ).height(); - if ( context.modules.toc.$toc.data( 'positionMode' ) === 'regular' && - !context.modules.toc.$toc.data( 'collapsed' ) + var width, + height = context.$ui.find( '.wikiEditor-ui-right' ).height(); + if ( context.modules.toc.$toc.data( 'positionMode' ) == 'regular' + && !context.modules.toc.$toc.data( 'collapsed' ) ) { // store position mode context.modules.toc.$toc.data( 'positionMode', 'goofy' ); @@ -254,7 +237,7 @@ fn: { 'left' : $.wikiEditor.modules.toc.cfg.rtl ? 0 : 'auto' } ); context.$wikitext .css( 'position', 'relative' ); - } else if ( context.modules.toc.$toc.data( 'positionMode' ) === 'goofy' ) { + } else if ( context.modules.toc.$toc.data( 'positionMode' ) == 'goofy' ) { // store position mode context.modules.toc.$toc.data( 'positionMode', 'regular' ); // set width @@ -277,7 +260,7 @@ fn: { if ( context.modules.toc.$toc.data( 'collapsed' ) ) { context.$ui.find( '.wikiEditor-ui-toc-expandControl' ).hide(); } else { - if( context.modules.toc.$toc.data( 'positionMode' ) === 'goofy' ) { + if( context.modules.toc.$toc.data( 'positionMode' ) == 'goofy' ) { $.wikiEditor.modules.toc.fn.switchLayout( context ); } context.$ui.find( '.wikiEditor-ui-right' ).hide(); @@ -313,7 +296,7 @@ fn: { * * @param {Object} context */ - update: function () { + update: function( context ) { //temporarily commenting this out because it is causing all kinds of cursor //and text jumping issues in IE. WIll get back to this --pdhanda /* @@ -350,10 +333,10 @@ fn: { * * @param {Object} event Event object with context as data */ - collapse: function () { + collapse: function( event ) { var $this = $( this ), context = $this.data( 'context' ); - if ( context.modules.toc.$toc.data( 'positionMode' ) === 'goofy' ) { + if( context.modules.toc.$toc.data( 'positionMode' ) == 'goofy' ) { $.wikiEditor.modules.toc.fn.switchLayout( context ); } var pT = $this.parent().position().top - 1; @@ -383,7 +366,7 @@ fn: { // Let the UI know things have moved around context.fn.trigger( 'tocCollapse' ); context.fn.trigger( 'resize' ); - } ); + } ); $.cookie( 'wikiEditor-' + context.instance + '-toc-width', 0 ); return false; @@ -394,19 +377,15 @@ fn: { * * @param {Object} event Event object with context as data */ - expand: function () { + expand: function( event ) { var $this = $( this ), context = $this.data( 'context' ), openWidth = parseFloat( context.modules.toc.$toc.data( 'openWidth' ) ), availableSpace = context.$wikitext.width() - parseFloat( $.wikiEditor.modules.toc.cfg.textMinimumWidth ); - if ( availableSpace < $.wikiEditor.modules.toc.cfg.textMinmumWidth ) { - return false; - } + if ( availableSpace < $.wikiEditor.modules.toc.cfg.textMinmumWidth ) return false; context.modules.toc.$toc.data( 'collapsed', false ); // check if we've got enough room to open to our stored width - if ( availableSpace < openWidth ) { - openWidth = availableSpace; - } + if ( availableSpace < openWidth ) openWidth = availableSpace; context.$ui.find( '.wikiEditor-ui-toc-expandControl' ).hide(); var leftParam = {}, leftChildParam = {}; leftParam[ $.wikiEditor.modules.toc.cfg.flexProperty ] = parseFloat( openWidth ) * -1; @@ -428,7 +407,7 @@ fn: { 'top': 'auto' } ); context.fn.trigger( 'tocExpand' ); context.fn.trigger( 'resize' ); - } ); + } ); $.cookie( 'wikiEditor-' + context.instance + '-toc-width', context.modules.toc.$toc.data( 'openWidth' ) ); return false; @@ -453,7 +432,7 @@ fn: { } var sections = []; for ( var i = offset; i < outline.length; i++ ) { - if ( outline[i].nLevel === level ) { + if ( outline[i].nLevel == level ) { var sub = buildStructure( outline, i + 1, level + 1 ); if ( sub.length ) { outline[i].sections = sub; @@ -483,9 +462,8 @@ fn: { .click( function( event ) { var wrapper = context.$content.find( '.wikiEditor-toc-section-' + $( this ).data( 'index' ) ); - if ( wrapper.length === 0 ) { + if ( wrapper.length === 0 ) wrapper = context.$content; - } context.fn.scrollToTop( wrapper, true ); context.$textarea.textSelection( 'setSelection', { 'start': 0, @@ -503,9 +481,8 @@ fn: { event.preventDefault(); } ) .text( structure[i].text ); - if ( structure[i].text === '' ) { + if ( structure[i].text === '' ) div.html( ' ' ); - } var item = $( '<li>' ).append( div ); if ( structure[i].sections !== undefined ) { item.append( buildList( structure[i].sections ) ); @@ -569,7 +546,7 @@ fn: { .data( 'wikiEditor-ui-left', context.$ui.find( '.wikiEditor-ui-left' ) ) .resizable( { handles: 'w,e', preventPositionLeftChange: true, minWidth: parseFloat( $.wikiEditor.modules.toc.cfg.minimumWidth ), - start: function () { + start: function( e, ui ) { var $this = $( this ); // Toss a transparent cover over our iframe $( '<div>' ) @@ -585,7 +562,7 @@ fn: { .appendTo( context.$ui.find( '.wikiEditor-ui-left' ) ); $this.resizable( 'option', 'maxWidth', $this.parent().width() - parseFloat( $.wikiEditor.modules.toc.cfg.textMinimumWidth ) ); - if ( context.modules.toc.$toc.data( 'positionMode' ) === 'goofy' ) { + if(context.modules.toc.$toc.data( 'positionMode' ) == 'goofy' ) { $.wikiEditor.modules.toc.fn.switchLayout( context ); } }, @@ -619,7 +596,7 @@ fn: { var handle = $.wikiEditor.modules.toc.cfg.rtl ? 'w' : 'e'; context.$ui.find( '.ui-resizable-' + handle ) .removeClass( 'ui-resizable-' + handle ) - .addClass( 'ui-resizable-' + ( handle === 'w' ? 'e' : 'w' ) ) + .addClass( 'ui-resizable-' + ( handle == 'w' ? 'e' : 'w' ) ) .addClass( 'wikiEditor-ui-toc-resize-grip' ); // Bind collapse and expand event handlers to the TOC context.modules.toc.$toc @@ -627,13 +604,12 @@ fn: { .bind( 'expand.wikiEditor-toc', $.wikiEditor.modules.toc.fn.expand ); context.modules.toc.$toc.data( 'openWidth', $.wikiEditor.modules.toc.cfg.defaultWidth ); // If the toc-width cookie is set, reset the widths based upon that - if ( $.cookie( 'wikiEditor-' + context.instance + '-toc-width' ) === 0 ) { + if ( $.cookie( 'wikiEditor-' + context.instance + '-toc-width' ) == 0 ) { context.modules.toc.$toc.trigger( 'collapse.wikiEditor-toc', { data: context } ); } else if ( $.cookie( 'wikiEditor-' + context.instance + '-toc-width' ) > 0 ) { var initialWidth = $.cookie( 'wikiEditor-' + context.instance + '-toc-width' ); - if ( initialWidth < parseFloat( $.wikiEditor.modules.toc.cfg.minimumWidth ) ) { + if( initialWidth < parseFloat( $.wikiEditor.modules.toc.cfg.minimumWidth ) ) initialWidth = parseFloat( $.wikiEditor.modules.toc.cfg.minimumWidth ) + 1; - } context.modules.toc.$toc.data( 'openWidth', initialWidth + 'px' ); $.wikiEditor.modules.toc.fn.redraw( context, initialWidth ); } @@ -688,7 +664,7 @@ fn: { * Extending resizable to allow west resizing without altering the left position attribute */ $.ui.plugin.add( 'resizable', 'preventPositionLeftChange', { - resize: function () { + resize: function( event, ui ) { $( this ).data( 'resizable' ).position.left = 0; } } ); @@ -697,4 +673,4 @@ fn: { }; -} )( jQuery, mediaWiki ); +} ) ( jQuery ); diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.config.js b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.config.js index 780eb2c3..d3f7a9d5 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.config.js +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.config.js @@ -1,8 +1,7 @@ /** * Configuration of Toolbar module for wikiEditor */ -/*jshint camelcase:false, quotmark:false */ -( function ( $, mw ) { $.wikiEditor.modules.toolbar.config = { +( function( $ ) { $.wikiEditor.modules.toolbar.config = { getDefaultConfig: function() { var fileNamespace = mw.config.get( 'wgFormattedNamespaces' )[6]; @@ -1453,4 +1452,4 @@ getDefaultConfig: function() { } }; } -}; } ) ( jQuery, mediaWiki ); +}; } ) ( jQuery ); diff --git a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.js b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.js index 71592b53..e1bc6f15 100644 --- a/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.js +++ b/extensions/WikiEditor/modules/jquery.wikiEditor.toolbar.js @@ -1,7 +1,6 @@ /** * Toolbar module for wikiEditor */ -/*jshint onevar:false */ ( function ( mw, $ ) { $.wikiEditor.modules.toolbar = { /** @@ -18,7 +17,7 @@ api : { var $sections = context.modules.toolbar.$toolbar.find( 'div.sections' ), $tabs = context.modules.toolbar.$toolbar.find( 'div.tabs' ); for ( var section in data[type] ) { - if ( section === 'main' ) { + if ( section == 'main' ) { // Section context.modules.toolbar.$toolbar.prepend( $.wikiEditor.modules.toolbar.fn.buildSection( @@ -146,28 +145,28 @@ api : { } }, removeFromToolbar : function( context, data ) { - if ( typeof data.section === 'string' ) { + if ( typeof data.section == 'string' ) { // Section var tab = 'div.tabs span[rel="' + data.section + '"].tab'; var target = 'div[rel="' + data.section + '"].section'; var group = null; - if ( typeof data.group === 'string' ) { + if ( typeof data.group == 'string' ) { // Toolbar group target += ' div[rel="' + data.group + '"].group'; - if ( typeof data.tool === 'string' ) { + if ( typeof data.tool == 'string' ) { // Save for later checking if empty group = target; // Tool target += ' a[rel="' + data.tool + '"].tool'; } - } else if ( typeof data.page === 'string' ) { + } else if ( typeof data.page == 'string' ) { // Booklet page var index = target + ' div.index div[rel="' + data.page + '"]'; target += ' div.pages div[rel="' + data.page + '"].page'; - if ( typeof data.character === 'string' ) { + if ( typeof data.character == 'string' ) { // Character target += ' span[rel="' + data.character + '"]'; - } else if ( typeof data.row === 'number' ) { + } else if ( typeof data.row == 'number' ) { // Table row target += ' table tr:not(:has(th)):eq(' + data.row + ')'; } else { @@ -199,11 +198,7 @@ api : { * Event handlers */ evt: { - /** - * @param context - * @param event - */ - resize: function( context ) { + resize: function( context, event ) { context.$ui.find( '.sections' ).height( context.$ui.find( '.sections .section-visible' ).outerHeight() ); }, tocCollapse: function( context, event ) { @@ -240,7 +235,7 @@ fn: { * @param {Object} action * @param {Object} source */ - doAction : function( context, action ) { + doAction : function( context, action, source ) { switch ( action.type ) { case 'replace': case 'encapsulate': @@ -249,7 +244,7 @@ fn: { 'peri' : $.wikiEditor.autoMsg( action.options, 'peri' ), 'post' : $.wikiEditor.autoMsg( action.options, 'post' ) }; - var replace = action.type === 'replace'; + var replace = action.type == 'replace'; if ( 'regex' in action.options && 'regexReplace' in action.options ) { var selection = context.$textarea.textSelection( 'getSelection' ); if ( selection !== '' && selection.match( action.options.regex ) ) { @@ -268,7 +263,7 @@ fn: { } break; case 'callback': - if ( typeof action.execute === 'function' ) { + if ( typeof action.execute == 'function' ) { action.execute( context ); } break; @@ -292,7 +287,7 @@ fn: { if ( tool ) { // Consider a group with only hidden tools empty as well // .is( ':visible' ) always returns false because tool is not attached to the DOM yet - empty = empty && tool.css( 'display' ) === 'none'; + empty = empty && tool.css( 'display' ) == 'none'; $group.append( tool ); } } @@ -452,7 +447,7 @@ fn: { } ); }, buildPage : function( context, id, page ) { - var html, i; + var html; var $page = $( '<div/>' ).attr( { 'class' : 'page page-' + id, 'rel' : id @@ -466,7 +461,7 @@ fn: { html += $.wikiEditor.modules.toolbar.fn.buildHeading( context, page.headings ); } if ( 'rows' in page ) { - for ( i = 0; i < page.rows.length; i++ ) { + for ( var i = 0; i < page.rows.length; i++ ) { html += $.wikiEditor.modules.toolbar.fn.buildRow( context, page.rows[i] ); } } @@ -489,7 +484,7 @@ fn: { } if ( 'characters' in page ) { html = ''; - for ( i = 0; i < page.characters.length; i++ ) { + for ( var i = 0; i < page.characters.length; i++ ) { html += $.wikiEditor.modules.toolbar.fn.buildCharacter( page.characters[i], actions ); } $characters @@ -532,7 +527,7 @@ fn: { return html + '</tr>'; }, buildCharacter : function( character, actions ) { - if ( typeof character === 'string' ) { + if ( typeof character == 'string' ) { character = { 'label' : character, 'action' : { @@ -569,9 +564,8 @@ fn: { return mw.html.element( 'span', { 'rel': character.label }, character.label ); } } - mw.log( 'A character for the toolbar was undefined. This is not supposed to happen. Double check the config.' ); - // bug 31673; also an additional fix for bug 24208... - return ''; + mw.log( "A character for the toolbar was undefined. This is not supposed to happen. Double check the config." ); + return ""; // bug 31673; also an additional fix for bug 24208... }, buildTab : function( context, id, section ) { var selected = $.cookie( 'wikiEditor-' + context.instance + '-toolbar-section' ); @@ -581,7 +575,7 @@ fn: { } var $link = $( '<a/>' ) - .addClass( selected === id ? 'current' : null ) + .addClass( selected == id ? 'current' : null ) .attr( { href: '#', role: 'button', @@ -590,7 +584,7 @@ fn: { } ) .text( $.wikiEditor.autoMsg( section, 'label' ) ) .data( 'context', context ) - .mouseup( function () { + .mouseup( function( e ) { $(this).blur(); } ) .mousedown( function( e ) { @@ -610,7 +604,7 @@ fn: { var $sections = $(this).data( 'context' ).$ui.find( '.sections' ); var $section = $(this).data( 'context' ).$ui.find( '.section-' + $(this).parent().attr( 'rel' ) ); - var show = $section.css( 'display' ) === 'none'; + var show = $section.css( 'display' ) == 'none'; $section.parent().find( '.section-visible' ) .css( 'position', 'absolute' ) .attr( 'aria-expanded', 'false' ) @@ -674,7 +668,7 @@ fn: { id: 'wikiEditor-section-' + id } ); var selected = $.cookie( 'wikiEditor-' + context.instance + '-toolbar-section' ); - var show = selected === id; + var show = selected == id; if ( section.deferLoad !== undefined && section.deferLoad && id !== 'main' && !show ) { // This class shows the spinner and serves as a marker for the click handler in buildTab() @@ -730,7 +724,6 @@ fn: { } }, updateBookletSelection : function( context, id, $pages, $index ) { - /*jshint eqnull:true */ var cookie = 'wikiEditor-' + context.instance + '-booklet-' + id + '-page'; var selected = $.cookie( cookie ); // Re-save cookie @@ -754,7 +747,7 @@ fn: { context.modules.toolbar.$toolbar.append( $( '<div/>' ).css( 'clear', 'both' ) ); var sectionQueue = []; for ( var section in config ) { - if ( section === 'main' ) { + if ( section == 'main' ) { context.modules.toolbar.$toolbar.prepend( $.wikiEditor.modules.toolbar.fn.buildSection( context, section, config[section] ) ); diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index 0fc59fb2..f423e623 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -63,7 +63,7 @@ $wgConf = new SiteConfiguration; * MediaWiki version number * @since 1.2 */ -$wgVersion = '1.22.0'; +$wgVersion = '1.22.1'; /** * Name of the site. It must be changed in LocalSettings.php diff --git a/includes/HttpFunctions.php b/includes/HttpFunctions.php index 78c2ac7a..fa2fc12b 100644 --- a/includes/HttpFunctions.php +++ b/includes/HttpFunctions.php @@ -730,7 +730,12 @@ class CurlHttpRequest extends MWHttpRequest { $this->curlOptions[CURLOPT_PROXY] = $this->proxy; $this->curlOptions[CURLOPT_TIMEOUT] = $this->timeout; - $this->curlOptions[CURLOPT_CONNECTTIMEOUT_MS] = $this->connectTimeout * 1000; + + // Only supported in curl >= 7.16.2 + if ( defined( 'CURLOPT_CONNECTTIMEOUT_MS' ) ) { + $this->curlOptions[CURLOPT_CONNECTTIMEOUT_MS] = $this->connectTimeout * 1000; + } + $this->curlOptions[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_1_0; $this->curlOptions[CURLOPT_WRITEFUNCTION] = $this->callback; $this->curlOptions[CURLOPT_HEADERFUNCTION] = array( $this, "readHeader" ); diff --git a/includes/LinksUpdate.php b/includes/LinksUpdate.php index fdd0e3c1..ed52eb9c 100644 --- a/includes/LinksUpdate.php +++ b/includes/LinksUpdate.php @@ -382,6 +382,7 @@ class LinksUpdate extends SqlDataUpdate { foreach ( $diffs as $url => $dummy ) { foreach ( wfMakeUrlIndexes( $url ) as $index ) { $arr[] = array( + 'el_id' => $this->mDb->nextSequenceValue( 'externallinks_el_id_seq' ), 'el_from' => $this->mId, 'el_to' => $url, 'el_index' => $index, diff --git a/includes/Sanitizer.php b/includes/Sanitizer.php index 499d8218..9e9ac38b 100644 --- a/includes/Sanitizer.php +++ b/includes/Sanitizer.php @@ -865,6 +865,27 @@ class Sanitizer { $value = preg_replace_callback( $decodeRegex, array( __CLASS__, 'cssDecodeCallback' ), $value ); + // Normalize Halfwidth and Fullwidth Unicode block that IE6 might treat as ascii + $value = preg_replace_callback( + '/[!-[]-z]/u', // U+FF01 to U+FF5A, excluding U+FF3C (bug 58088) + function ( $matches ) { + $cp = utf8ToCodepoint( $matches[0] ); + if ( $cp === false ) { + return ''; + } + return chr( $cp - 65248 ); // ASCII range \x21-\x7A + }, + $value + ); + + // Convert more characters IE6 might treat as ascii + // U+0280, U+0274, U+207F, U+029F, U+026A, U+207D, U+208D + $value = str_replace( + array( 'ʀ', 'ɴ', 'ⁿ', 'ʟ', 'ɪ', '⁽', '₍' ), + array( 'r', 'n', 'n', 'l', 'i', '(', '(' ), + $value + ); + // Let the value through if it's nothing but a single comment, to // allow other functions which may reject it to pass some error // message through. @@ -885,10 +906,36 @@ class Sanitizer { } } + // S followed by repeat, iteration, or prolonged sound marks, + // which IE will treat as "ss" + $value = preg_replace( + '/s(?: + \xE3\x80\xB1 | # U+3031 + \xE3\x82\x9D | # U+309D + \xE3\x83\xBC | # U+30FC + \xE3\x83\xBD | # U+30FD + \xEF\xB9\xBC | # U+FE7C + \xEF\xB9\xBD | # U+FE7D + \xEF\xBD\xB0 # U+FF70 + )/ix', + 'ss', + $value + ); + // Reject problematic keywords and control characters - if ( preg_match( '/[\000-\010\016-\037\177]/', $value ) ) { + if ( preg_match( '/[\000-\010\013\016-\037\177]/', $value ) ) { return '/* invalid control char */'; - } elseif ( preg_match( '! expression | filter\s*: | accelerator\s*: | url\s*\( | image\s*\( | image-set\s*\( !ix', $value ) ) { + } elseif ( preg_match( + '! expression + | filter\s*: + | accelerator\s*: + | -o-link\s*: + | -o-link-source\s*: + | -o-replace\s*: + | url\s*\( + | image\s*\( + | image-set\s*\( + !ix', $value ) ) { return '/* insecure input */'; } return $value; diff --git a/includes/WikiPage.php b/includes/WikiPage.php index 7c3dc937..61a05a12 100644 --- a/includes/WikiPage.php +++ b/includes/WikiPage.php @@ -48,9 +48,11 @@ class WikiPage implements Page, IDBAccessObject { public $mDataLoaded = false; // !< Boolean public $mIsRedirect = false; // !< Boolean public $mLatest = false; // !< Integer (false means "not loaded") - public $mPreparedEdit = false; // !< Array /**@}}*/ + /** @var stdclass Map of cache fields (text, parser output, ect) for a proposed/new edit */ + protected $mPreparedEdit = false; + /** * @var int */ @@ -242,6 +244,17 @@ class WikiPage implements Page, IDBAccessObject { $this->mTimestamp = ''; $this->mIsRedirect = false; $this->mLatest = false; + // Bug 57026: do not clear mPreparedEdit since prepareTextForEdit() already checks + // the requested rev ID and immutable content against the cached one. + // Clearing it can cause extra parses on edit for no reason. + } + + /** + * Clear the mPreparedEdit cache field, as may be needed by mutable content types + * @return void + * @since 1.23 + */ + public function clearPreparedEdit() { $this->mPreparedEdit = false; } diff --git a/includes/XmlTypeCheck.php b/includes/XmlTypeCheck.php index 92ca7d80..eb98a4ad 100644 --- a/includes/XmlTypeCheck.php +++ b/includes/XmlTypeCheck.php @@ -40,6 +40,13 @@ class XmlTypeCheck { public $rootElement = ''; /** + * Additional parsing options + */ + private $parserOptions = array( + 'processing_instruction_handler' => '', + ); + + /** * @param string $input a filename or string containing the XML element * @param callable $filterCallback (optional) * Function to call to do additional custom validity checks from the @@ -48,9 +55,13 @@ class XmlTypeCheck { * Filter should return 'true' to toggle on $this->filterMatch * @param boolean $isFile (optional) indicates if the first parameter is a * filename (default, true) or if it is a string (false) + * @param array $options list of additional parsing options: + * processing_instruction_handler: Callback for xml_set_processing_instruction_handler */ - function __construct( $input, $filterCallback = null, $isFile = true ) { + function __construct( $input, $filterCallback = null, $isFile = true, $options = array() ) { $this->filterCallback = $filterCallback; + $this->parserOptions = array_merge( $this->parserOptions, $options ); + if ( $isFile ) { $this->validateFromFile( $input ); } else { @@ -107,6 +118,12 @@ class XmlTypeCheck { // case folding violates XML standard, turn it off xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, false ); xml_set_element_handler( $parser, array( $this, 'rootElementOpen' ), false ); + if ( $this->parserOptions['processing_instruction_handler'] ) { + xml_set_processing_instruction_handler( + $parser, + array( $this, 'processingInstructionHandler' ) + ); + } return $parser; } @@ -181,4 +198,16 @@ class XmlTypeCheck { $this->filterMatch = true; } } + + /** + * @param $parser + * @param $target + * @param $data + */ + private function processingInstructionHandler( $parser, $target, $data ) { + if ( call_user_func( $this->parserOptions['processing_instruction_handler'], $target, $data ) ) { + // Filter hit! + $this->filterMatch = true; + } + } } diff --git a/includes/actions/RawAction.php b/includes/actions/RawAction.php index 32751e45..1a2b3cb1 100644 --- a/includes/actions/RawAction.php +++ b/includes/actions/RawAction.php @@ -94,6 +94,9 @@ class RawAction extends FormlessAction { # Output may contain user-specific data; # vary generated content for open sessions on private wikis $privateCache = !User::isEveryoneAllowed( 'read' ) && ( $smaxage == 0 || session_id() != '' ); + // Bug 53032 - make this private if user is logged in, + // so we don't accidentally cache cookies + $privateCache = $privateCache ?: $this->getUser()->isLoggedIn(); # allow the client to cache this for 24 hours $mode = $privateCache ? 'private' : 'public'; $response->header( 'Cache-Control: ' . $mode . ', s-maxage=' . $smaxage . ', max-age=' . $maxage ); diff --git a/includes/api/ApiQueryLogEvents.php b/includes/api/ApiQueryLogEvents.php index 1a2719ed..26774ef4 100644 --- a/includes/api/ApiQueryLogEvents.php +++ b/includes/api/ApiQueryLogEvents.php @@ -294,18 +294,22 @@ class ApiQueryLogEvents extends ApiQueryBase { if ( $this->fld_ids ) { $vals['logid'] = intval( $row->log_id ); - $vals['pageid'] = intval( $row->page_id ); } if ( $this->fld_title || $this->fld_parsedcomment ) { $title = Title::makeTitle( $row->log_namespace, $row->log_title ); } - if ( $this->fld_title ) { + if ( $this->fld_title || $this->fld_ids ) { if ( LogEventsList::isDeleted( $row, LogPage::DELETED_ACTION ) ) { $vals['actionhidden'] = ''; } else { - ApiQueryBase::addTitleInfo( $vals, $title ); + if ( $this->fld_title ) { + ApiQueryBase::addTitleInfo( $vals, $title ); + } + if ( $this->fld_ids ) { + $vals['pageid'] = intval( $row->page_id ); + } } } diff --git a/includes/cache/LocalisationCache.php b/includes/cache/LocalisationCache.php index 1bfd17bd..25a1e196 100644 --- a/includes/cache/LocalisationCache.php +++ b/includes/cache/LocalisationCache.php @@ -594,6 +594,10 @@ class LocalisationCache { $ruleElements = $ruleset->getElementsByTagName( "pluralRule" ); foreach ( $ruleElements as $elt ) { $ruleType = $elt->getAttribute( 'count' ); + if ( $ruleType === 'other' ) { + // Don't record "other" rules, which have an empty condition + continue; + } $rules[] = $elt->nodeValue; $ruleTypes[] = $ruleType; } @@ -953,6 +957,25 @@ class LocalisationCache { $this->store = new LCStore_Null; $this->manualRecache = false; } + + /** + * Return an array with initialised languages. + * + * @return array + */ + public function getInitialisedLanguages() { + return $this->initialisedLangs; + } + + /** + * Set initialised languages. + * + * @param array $languages Optional array of initialised languages. + */ + public function setInitialisedLanguages( $languages = array() ) { + $this->initialisedLangs = $languages; + } + } /** diff --git a/includes/changes/EnhancedChangesList.php b/includes/changes/EnhancedChangesList.php index 433adb37..4c8aa451 100644 --- a/includes/changes/EnhancedChangesList.php +++ b/includes/changes/EnhancedChangesList.php @@ -200,7 +200,7 @@ class EnhancedChangesList extends ChangesList { if ( $block[0]->mAttribs['rc_log_type'] ) { # Log entry $classes[] = Sanitizer::escapeClass( 'mw-changeslist-log-' - . $block[0]->mAttribs['rc_log_type'] . '-' . $block[0]->mAttribs['rc_title'] ); + . $block[0]->mAttribs['rc_log_type'] ); } else { $classes[] = Sanitizer::escapeClass( 'mw-changeslist-ns' . $block[0]->mAttribs['rc_namespace'] . '-' . $block[0]->mAttribs['rc_title'] ); @@ -551,8 +551,7 @@ class EnhancedChangesList extends ChangesList { $classes = array( 'mw-enhanced-rc' ); if ( $logType ) { # Log entry - $classes[] = Sanitizer::escapeClass( 'mw-changeslist-log-' - . $logType . '-' . $rcObj->mAttribs['rc_title'] ); ++ $classes[] = Sanitizer::escapeClass( 'mw-changeslist-log-' . $logType ); } else { $classes[] = Sanitizer::escapeClass( 'mw-changeslist-ns' . $rcObj->mAttribs['rc_namespace'] . '-' . $rcObj->mAttribs['rc_title'] ); diff --git a/includes/db/DatabaseMssql.php b/includes/db/DatabaseMssql.php index 240a097c..37f5372e 100644 --- a/includes/db/DatabaseMssql.php +++ b/includes/db/DatabaseMssql.php @@ -655,7 +655,7 @@ class DatabaseMssql extends DatabaseBase { * @return string wikitext of a link to the server software's web site */ public function getSoftwareLink() { - return "[http://www.microsoft.com/sql/ MS SQL Server]"; + return "[{{int:version-db-mssql-url}} MS SQL Server]"; } /** diff --git a/includes/db/DatabaseMysqlBase.php b/includes/db/DatabaseMysqlBase.php index 26c9d247..8f12b92d 100644 --- a/includes/db/DatabaseMysqlBase.php +++ b/includes/db/DatabaseMysqlBase.php @@ -681,7 +681,14 @@ abstract class DatabaseMysqlBase extends DatabaseBase { * @return string */ public function getSoftwareLink() { - return '[http://www.mysql.com/ MySQL]'; + $version = $this->getServerVersion(); + if ( strpos( $version, 'MariaDB' ) !== false ) { + return '[{{int:version-db-mariadb-url}} MariaDB]'; + } elseif ( strpos( $version, 'percona' ) !== false ) { + return '[{{int:version-db-percona-url}} Percona Server]'; + } else { + return '[{{int:version-db-mysql-url}} MySQL]'; + } } /** diff --git a/includes/db/DatabaseOracle.php b/includes/db/DatabaseOracle.php index fbaa4da5..32d4d984 100644 --- a/includes/db/DatabaseOracle.php +++ b/includes/db/DatabaseOracle.php @@ -846,7 +846,7 @@ class DatabaseOracle extends DatabaseBase { * @return string wikitext of a link to the server software's web site */ public function getSoftwareLink() { - return '[http://www.oracle.com/ Oracle]'; + return '[{{int:version-db-oracle-url}} Oracle]'; } /** diff --git a/includes/db/DatabasePostgres.php b/includes/db/DatabasePostgres.php index e564a162..aed35f10 100644 --- a/includes/db/DatabasePostgres.php +++ b/includes/db/DatabasePostgres.php @@ -721,6 +721,29 @@ __INDEXATTR__; } /** + * Change the FOR UPDATE option as necessary based on the join conditions. Then pass + * to the parent function to get the actual SQL text. + * + * In Postgres when using FOR UPDATE, only the main table and tables that are inner joined + * can be locked. That means tables in an outer join cannot be FOR UPDATE locked. Trying to do + * so causes a DB error. This wrapper checks which tables can be locked and adjusts it accordingly. + */ + function selectSQLText( $table, $vars, $conds = '', $fname = __METHOD__, $options = array(), $join_conds = array() ) { + $forUpdateKey = array_search( 'FOR UPDATE', $options ); + if ( $forUpdateKey !== false && $join_conds ) { + unset( $options[$forUpdateKey] ); + + foreach ( $join_conds as $table => $join_cond ) { + if ( 0 === preg_match( '/^(?:LEFT|RIGHT|FULL)(?: OUTER)? JOIN$/i', $join_cond[0] ) ) { + $options['FOR UPDATE'][] = $table; + } + } + } + + return parent::selectSQLText( $table, $vars, $conds, $fname, $options, $join_conds ); + } + + /** * INSERT wrapper, inserts an array into a table * * $args may be a single associative array, or an array of these with numeric keys, @@ -1060,7 +1083,7 @@ __INDEXATTR__; * @return string wikitext of a link to the server software's web site */ public function getSoftwareLink() { - return '[http://www.postgresql.org/ PostgreSQL]'; + return '[{{int:version-db-postgres-url}} PostgreSQL]'; } /** @@ -1399,9 +1422,12 @@ SQL; // : false ); //} - if ( isset( $noKeyOptions['FOR UPDATE'] ) ) { + if ( isset( $options['FOR UPDATE'] ) ) { + $postLimitTail .= ' FOR UPDATE OF ' . implode( ', ', $options['FOR UPDATE'] ); + } else if ( isset( $noKeyOptions['FOR UPDATE'] ) ) { $postLimitTail .= ' FOR UPDATE'; } + if ( isset( $noKeyOptions['DISTINCT'] ) || isset( $noKeyOptions['DISTINCTROW'] ) ) { $startOpts .= 'DISTINCT'; } diff --git a/includes/db/DatabaseSqlite.php b/includes/db/DatabaseSqlite.php index 4a51226f..3e034649 100644 --- a/includes/db/DatabaseSqlite.php +++ b/includes/db/DatabaseSqlite.php @@ -614,7 +614,7 @@ class DatabaseSqlite extends DatabaseBase { * @return string wikitext of a link to the server software's web site */ public function getSoftwareLink() { - return "[http://sqlite.org/ SQLite]"; + return "[{{int:version-db-sqlite-url}} SQLite]"; } /** diff --git a/includes/installer/Installer.i18n.php b/includes/installer/Installer.i18n.php index edf5ff25..16e83e4f 100644 --- a/includes/installer/Installer.i18n.php +++ b/includes/installer/Installer.i18n.php @@ -100,9 +100,8 @@ You should [//www.mediawiki.org/wiki/Unicode_normalization_considerations upgrad 'config-no-db' => 'Could not find a suitable database driver! You need to install a database driver for PHP. The following database types are supported: $1. -If you are on shared hosting, ask your hosting provider to install a suitable database driver. -If you compiled PHP yourself, reconfigure it with a database client enabled, for example using <code>./configure --with-mysql</code>. -If you installed PHP from a Debian or Ubuntu package, then you also need install the php5-mysql module.', +If you compiled PHP yourself, reconfigure it with a database client enabled, for example, using <code>./configure --with-mysqli</code>. +If you installed PHP from a Debian or Ubuntu package, then you also need to install, for example, the <code>php5-mysql</code> package.', 'config-outdated-sqlite' => "'''Warning:''' you have SQLite $1, which is lower than minimum required version $2. SQLite will be unavailable.", 'config-no-fts3' => "'''Warning:''' SQLite is compiled without the [//sqlite.org/fts3.html FTS3 module], search features will be unavailable on this backend.", 'config-register-globals' => "'''Warning: PHP's <code>[http://php.net/register_globals register_globals]</code> option is enabled.''' @@ -243,7 +242,7 @@ That includes raw user data (email addresses, hashed passwords) as well as delet Consider putting the database somewhere else altogether, for example in <code>/var/lib/mediawiki/yourwiki</code>.", 'config-oracle-def-ts' => 'Default tablespace:', 'config-oracle-temp-ts' => 'Temporary tablespace:', - 'config-type-mysql' => 'MySQL', + 'config-type-mysql' => 'MySQL (or compatible)', 'config-type-postgres' => 'PostgreSQL', 'config-type-sqlite' => 'SQLite', 'config-type-oracle' => 'Oracle', @@ -252,10 +251,10 @@ Consider putting the database somewhere else altogether, for example in <code>/v $1 If you do not see the database system you are trying to use listed below, then follow the instructions linked above to enable support.', - 'config-support-mysql' => '* $1 is the primary target for MediaWiki and is best supported ([http://www.php.net/manual/en/mysql.installation.php how to compile PHP with MySQL support])', - 'config-support-postgres' => '* $1 is a popular open source database system as an alternative to MySQL ([http://www.php.net/manual/en/pgsql.installation.php how to compile PHP with PostgreSQL support]). There may be some minor outstanding bugs, and it is not recommended for use in a production environment.', - 'config-support-sqlite' => '* $1 is a lightweight database system which is very well supported. ([http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], uses PDO)', - 'config-support-oracle' => '* $1 is a commercial enterprise database. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])', + 'config-dbsupport-mysql' => '* [{{int:version-db-mysql-url}} MySQL] is the primary target for MediaWiki and is best supported. MediaWiki also works with [{{int:version-db-mariadb-url}} MariaDB] and [{{int:version-db-percona-url}} Percona Server], which are MySQL compatible. ([http://www.php.net/manual/en/mysqli.installation.php How to compile PHP with MySQL support])', + 'config-dbsupport-postgres' => '* [{{int:version-db-postgres-url}} PostgreSQL] is a popular open source database system as an alternative to MySQL. There may be some minor outstanding bugs, and it is not recommended for use in a production environment. ([http://www.php.net/manual/en/pgsql.installation.php How to compile PHP with PostgreSQL support])', + 'config-dbsupport-sqlite' => '* [{{int:version-db-sqlite-url}} SQLite] is a lightweight database system that is very well supported. ([http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], uses PDO)', + 'config-dbsupport-oracle' => '* [{{int:version-db-oracle-url}} Oracle] is a commercial enterprise database. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])', 'config-header-mysql' => 'MySQL settings', 'config-header-postgres' => 'PostgreSQL settings', 'config-header-sqlite' => 'SQLite settings', @@ -640,7 +639,7 @@ See also: * {{msg-mw|config-env-php}}', 'config-unicode-pure-php-warning' => 'PECL is the name of a group producing standard pieces of software for PHP, and intl is the name of their library handling some aspects of internationalization.', 'config-unicode-update-warning' => "ICU is a body producing standard software tools for support of Unicode and other internationalization aspects. This message warns the system administrator installing MediaWiki that the server's software is not up-to-date and MediaWiki will have problems handling some characters.", - 'config-no-db' => '{{doc-important|Do not translate "<code>./configure --with-mysql</code>" and "<code>php5-mysql</code>".}} + 'config-no-db' => '{{doc-important|Do not translate "<code>./configure --with-mysqli</code>" and "<code>php5-mysql</code>".}} Parameters: * $1 is comma separated list of database types supported by MediaWiki.', 'config-outdated-sqlite' => 'Used as warning. Parameters: @@ -704,12 +703,12 @@ Message shown when PHP parameter <code>suhosin.get.max_value_length</code> is be * $2 - error message', 'config-sqlite-dir-help' => '{{doc-important|Do not translate <code>.htaccess</code> and <code>/var/lib/mediawiki/yourwiki</code>.}} Used in help box.', - 'config-type-mysql' => '{{optional}}', + 'config-type-mysql' => '"Or compatible" refers to several database systems that are compatible with MySQL, as explained in {{msg-mw|config-dbsupport-mysql}}, and thus also work with this choice of database type.', 'config-type-postgres' => '{{optional}}', 'config-type-sqlite' => '{{optional}}', 'config-type-oracle' => '{{optional}}', 'config-support-info' => 'Parameters: -* $1 - a list of DBMSs that MediaWiki supports, composed with other config-type-* and config-support-* messages.', +* $1 - a list of DBMSs that MediaWiki supports, composed with config-dbsupport-* messages.', 'config-support-mysql' => 'Parameters: * $1 - a link to the MySQL home page having the anchor text "MySQL".', 'config-support-postgres' => 'Parameters: @@ -718,6 +717,10 @@ Used in help box.', * $1 - a link to the SQLite home page having the anchor text "SQLite".', 'config-support-oracle' => 'Parameters: * $1 - a link to the Oracle home page, the anchor text of which is "Oracle".', + 'config-dbsupport-mysql' => 'Used in {{msg-mw|config-support-info}}.', + 'config-dbsupport-postgres' => 'Used in {{msg-mw|config-support-info}}.', + 'config-dbsupport-sqlite' => 'Used in {{msg-mw|config-support-info}}.', + 'config-dbsupport-oracle' => 'Used in {{msg-mw|config-support-info}}.', 'config-invalid-db-server-oracle' => 'Used as error message. Parameters: * $1 - database server name See also: diff --git a/includes/installer/Installer.php b/includes/installer/Installer.php index 36c41910..62bb2ec4 100644 --- a/includes/installer/Installer.php +++ b/includes/installer/Installer.php @@ -1411,7 +1411,7 @@ abstract class Installer { $wgVersion = "1.22"; $wgResourceModules = array(); - require_once( $file ); + require_once $file ; $e = array_values( $wgExtensionCredits ); if( $e ) { $ext = array_values( $e[0] ); diff --git a/includes/installer/LocalSettingsGenerator.php b/includes/installer/LocalSettingsGenerator.php index 5c803d3e..53939826 100644 --- a/includes/installer/LocalSettingsGenerator.php +++ b/includes/installer/LocalSettingsGenerator.php @@ -145,7 +145,12 @@ class LocalSettingsGenerator { $ip = $this->installer->getVar( 'IP' ); foreach ( $this->extensions as $ext) { - $path = str_replace( $ip, '$IP', $extensions[$ext]['path'] ); + $path = str_replace( $ip, '', $extensions[$ext]['path'] ); + $prefix = ''; + if ( $path !== $extensions[$ext]['path'] ) { + $prefix = '$IP'; + } + $path = $prefix . self::escapePhpString( $path ); $localSettings .= "require_once \"$path\";\n"; } } diff --git a/includes/installer/OracleInstaller.php b/includes/installer/OracleInstaller.php index 77575100..8ce74f42 100644 --- a/includes/installer/OracleInstaller.php +++ b/includes/installer/OracleInstaller.php @@ -91,12 +91,12 @@ class OracleInstaller extends DatabaseInstaller { public function submitConnectForm() { // Get variables from the request - $newValues = $this->setVarsFromRequest( + $newValues = $this->setVarsFromRequest( array( 'wgDBserver', 'wgDBprefix', 'wgDBuser', 'wgDBpassword' - ); + ) ); $this->parent->setVar( 'wgDBname', $this->getVar( 'wgDBuser' ) ); // Validate them diff --git a/includes/installer/WebInstaller.php b/includes/installer/WebInstaller.php index 95765259..1f8ee00a 100644 --- a/includes/installer/WebInstaller.php +++ b/includes/installer/WebInstaller.php @@ -917,7 +917,7 @@ class WebInstaller extends Installer { } if ( isset( $params['rawtext'] ) ) { $labelText = $params['rawtext']; - } else if ( isset( $params['label'] ) ) { + } elseif ( isset( $params['label'] ) ) { $labelText = $this->parse( wfMessage( $params['label'] )->text() ); } else { $labelText = ""; diff --git a/includes/installer/WebInstallerPage.php b/includes/installer/WebInstallerPage.php index 7e8a3631..ad399133 100644 --- a/includes/installer/WebInstallerPage.php +++ b/includes/installer/WebInstallerPage.php @@ -480,12 +480,11 @@ class WebInstaller_DBConnect extends WebInstallerPage { $settings = ''; $defaultType = $this->getVar( 'wgDBtype' ); - // Messages: config-support-mysql, config-support-postgres, config-support-oracle, - // config-support-sqlite + // Messages: config-dbsupport-mysql, config-dbsupport-postgres, config-dbsupport-oracle, + // config-dbsupport-sqlite $dbSupport = ''; foreach ( $this->parent->getDBTypes() as $type ) { - $link = DatabaseBase::factory( $type )->getSoftwareLink(); - $dbSupport .= wfMessage( "config-support-$type", $link )->plain() . "\n"; + $dbSupport .= wfMessage( "config-dbsupport-$type" )->plain() . "\n"; } $this->addHTML( $this->parent->getInfoBox( wfMessage( 'config-support-info', trim( $dbSupport ) )->text() ) ); @@ -951,7 +950,7 @@ class WebInstaller_Options extends WebInstallerPage { /* Force a recache, so we load extensions descriptions */ global $wgLang; $lc = Language::getLocalisationCache(); - $lc->initialisedLangs = array(); + $lc->setInitialisedLanguages( array() ); $lc->getItem( $wgLang->mCode, '' ); LinkCache::singleton()->useDatabase( false ); @@ -1184,10 +1183,14 @@ class WebInstaller_Options extends WebInstallerPage { $this->setVar( 'wgRightsIcon', '' ); } - $extsAvailable = array_map( function($e) { if( isset($e['name']) ) return $e['name']; }, $this->parent->findExtensions() ); + $extsAvailable = array_map( + function( $e ) { + if( isset( $e['name'] ) ) { + return $e['name']; + } + }, $this->parent->findExtensions() ); $extsToInstall = array(); foreach ( $extsAvailable as $key => $ext ) { - var_dump("config_ext-$ext"); if ( $this->parent->request->getCheck( 'config_ext-' . $ext ) ) { $extsToInstall[] = $extsAvailable[ $key ]; } diff --git a/includes/parser/LinkHolderArray.php b/includes/parser/LinkHolderArray.php index 27ff9e7d..f1a0b258 100644 --- a/includes/parser/LinkHolderArray.php +++ b/includes/parser/LinkHolderArray.php @@ -281,7 +281,7 @@ class LinkHolderArray { $linkCache = LinkCache::singleton(); $output = $this->parent->getOutput(); - if( $linkCache->useDatabase() ) { + if ( $linkCache->useDatabase() ) { wfProfileIn( __METHOD__ . '-check' ); $dbr = wfGetDB( DB_SLAVE ); $threshold = $this->parent->getOptions()->getStubThreshold(); diff --git a/includes/specials/SpecialUploadStash.php b/includes/specials/SpecialUploadStash.php index 87b64428..1373df1a 100644 --- a/includes/specials/SpecialUploadStash.php +++ b/includes/specials/SpecialUploadStash.php @@ -308,6 +308,8 @@ class SpecialUploadStash extends UnlistedSpecialPage { header( "Content-Type: $contentType", true ); header( 'Content-Transfer-Encoding: binary', true ); header( 'Expires: Sun, 17-Jan-2038 19:14:07 GMT', true ); + // Bug 53032 - It shouldn't be a problem here, but let's be safe and not cache + header( 'Cache-Control: private' ); header( "Content-Length: $size", true ); } diff --git a/includes/specials/SpecialWatchlist.php b/includes/specials/SpecialWatchlist.php index 4afa279e..55dc6efd 100644 --- a/includes/specials/SpecialWatchlist.php +++ b/includes/specials/SpecialWatchlist.php @@ -299,6 +299,22 @@ class SpecialWatchlist extends SpecialPage { } } + // Log entries with DELETED_ACTION must not show up unless the user has + // the necessary rights. + if ( !$user->isAllowed( 'deletedhistory' ) ) { + $bitmask = LogPage::DELETED_ACTION; + } elseif ( !$user->isAllowed( 'suppressrevision' ) ) { + $bitmask = LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED; + } else { + $bitmask = 0; + } + if ( $bitmask ) { + $conds[] = $dbr->makeList( array( + 'rc_type != ' . RC_LOG, + $dbr->bitAnd( 'rc_deleted', $bitmask ) . " != $bitmask", + ), LIST_OR ); + } + ChangeTags::modifyDisplayQuery( $tables, $fields, $conds, $join_conds, $options, '' ); wfRunHooks( 'SpecialWatchlistQuery', array( &$conds, &$tables, &$join_conds, &$fields, $values ) ); diff --git a/includes/upload/UploadBase.php b/includes/upload/UploadBase.php index 2260241d..916ad6c1 100644 --- a/includes/upload/UploadBase.php +++ b/includes/upload/UploadBase.php @@ -250,7 +250,7 @@ abstract class UploadBase { /** * @param string $srcPath the source path - * @return string the real path if it was a virtual URL + * @return string|bool the real path if it was a virtual URL Returns false on failure */ function getRealPath( $srcPath ) { wfProfileIn( __METHOD__ ); @@ -259,12 +259,15 @@ abstract class UploadBase { // @todo just make uploads work with storage paths // UploadFromStash loads files via virtual URLs $tmpFile = $repo->getLocalCopy( $srcPath ); - $tmpFile->bind( $this ); // keep alive with $this - wfProfileOut( __METHOD__ ); - return $tmpFile->getPath(); + if ( $tmpFile ) { + $tmpFile->bind( $this ); // keep alive with $this + } + $path = $tmpFile ? $tmpFile->getPath() : false; + } else { + $path = $srcPath; } wfProfileOut( __METHOD__ ); - return $srcPath; + return $path; } /** @@ -475,9 +478,10 @@ abstract class UploadBase { return array( 'uploadscripted' ); } if ( $this->mFinalExtension == 'svg' || $mime == 'image/svg+xml' ) { - if ( $this->detectScriptInSvg( $this->mTempPath ) ) { + $svgStatus = $this->detectScriptInSvg( $this->mTempPath ); + if ( $svgStatus !== false ) { wfProfileOut( __METHOD__ ); - return array( 'uploadscripted' ); + return $svgStatus; } } } @@ -1158,8 +1162,33 @@ abstract class UploadBase { * @return bool */ protected function detectScriptInSvg( $filename ) { - $check = new XmlTypeCheck( $filename, array( $this, 'checkSvgScriptCallback' ) ); - return $check->filterMatch; + $check = new XmlTypeCheck( + $filename, + array( $this, 'checkSvgScriptCallback' ), + true, + array( 'processing_instruction_handler' => 'UploadBase::checkSvgPICallback' ) + ); + if ( $check->wellFormed !== true ) { + // Invalid xml (bug 58553) + return array( 'uploadinvalidxml' ); + } elseif ( $check->filterMatch ) { + return array( 'uploadscripted' ); + } + return false; + } + + /** + * Callback to filter SVG Processing Instructions. + * @param $target string processing instruction name + * @param $data string processing instruction attribute and value + * @return bool (true if the filter identified something bad) + */ + public static function checkSvgPICallback( $target, $data ) { + // Don't allow external stylesheets (bug 57550) + if ( preg_match( '/xml-stylesheet/i', $target) ) { + return true; + } + return false; } /** diff --git a/languages/Language.php b/languages/Language.php index c24dc180..11d91036 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -3633,17 +3633,10 @@ class Language { */ function convertPlural( $count, $forms ) { // Handle explicit n=pluralform cases - foreach ( $forms as $index => $form ) { - if ( preg_match( '/^\d+=/i', $form ) ) { - $pos = strpos( $form, '=' ); - if ( substr( $form, 0, $pos ) === (string)$count ) { - return substr( $form, $pos + 1 ); - } - unset( $forms[$index] ); - } + $forms = $this->handleExplicitPluralForms( $count, $forms ); + if ( is_string( $forms ) ) { + return $forms; } - - $forms = array_values( $forms ); if ( !count( $forms ) ) { return ''; } @@ -3654,6 +3647,34 @@ class Language { } /** + * Handles explicit plural forms for Language::convertPlural() + * + * In {{PLURAL:$1|0=nothing|one|many}}, 0=nothing will be returned if $1 equals zero. + * If an explicitly defined plural form matches the $count, then + * string value returned, otherwise array returned for further consideration + * by CLDR rules or overridden convertPlural(). + * + * @since 1.22.1 + * + * @param int $count non-localized number + * @param array $forms different plural forms + * + * @return array|string + */ + protected function handleExplicitPluralForms( $count, array $forms ) { + foreach ( $forms as $index => $form ) { + if ( preg_match( '/\d+=/i', $form ) ) { + $pos = strpos( $form, '=' ); + if ( substr( $form, 0, $pos ) === (string) $count ) { + return substr( $form, $pos + 1 ); + } + unset( $forms[$index] ); + } + } + return array_values( $forms ); + } + + /** * Checks that convertPlural was given an array and pads it to requested * amount of forms by copying the last one. * diff --git a/languages/classes/LanguageBe_tarask.php b/languages/classes/LanguageBe_tarask.php index 6497b50c..05b9550f 100644 --- a/languages/classes/LanguageBe_tarask.php +++ b/languages/classes/LanguageBe_tarask.php @@ -32,50 +32,6 @@ */ class LanguageBe_tarask extends Language { /** - * Plural form transformations - * - * $wordform1 - singular form (for 1, 21, 31, 41...) - * $wordform2 - plural form (for 2, 3, 4, 22, 23, 24, 32, 33, 34...) - * $wordform3 - plural form (for 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26...) - */ - - /** - * @param $count int - * @param $forms array - * - * @return string - */ - function convertPlural( $count, $forms ) { - if ( !count( $forms ) ) { - return ''; - } - - // If the actual number is not mentioned in the expression, then just two forms are enough: - // singular for $count == 1 - // plural for $count != 1 - // For example, "This user belongs to {{PLURAL:$1|one group|several groups}}." - if ( count( $forms ) === 2 ) { - return $count == 1 ? $forms[0] : $forms[1]; - } - - // @todo FIXME: CLDR defines 4 plural forms instead of 3 - // http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html - $forms = $this->preConvertPlural( $forms, 3 ); - - if ( $count > 10 && floor( ( $count % 100 ) / 10 ) == 1 ) { - return $forms[2]; - } else { - switch ( $count % 10 ) { - case 1: return $forms[0]; - case 2: - case 3: - case 4: return $forms[1]; - default: return $forms[2]; - } - } - } - - /** * The Belarusian language uses apostrophe sign, * but the characters used for this could be both U+0027 and U+2019. * This function unifies apostrophe sign in search index values diff --git a/languages/classes/LanguageGv.php b/languages/classes/LanguageGv.php deleted file mode 100644 index ba8a53ce..00000000 --- a/languages/classes/LanguageGv.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php -/** - * Manx (Gaelg) specific code. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * http://www.gnu.org/copyleft/gpl.html - * - * @file - * @author Niklas Laxström - * @ingroup Language - */ - -/** - * Manx (Gaelg) - * - * @ingroup Language - */ -class LanguageGv extends Language { - - /** - * @param $count int - * @param $forms array - * @return string - */ - function convertPlural( $count, $forms ) { - if ( !count( $forms ) ) { - return ''; - } - - $forms = $this->preConvertPlural( $forms, 4 ); - - if ( $count > 0 && ( $count % 20 ) === 0 ) { - return $forms[0]; - } else { - switch ( $count % 10 ) { - case 1: return $forms[1]; - case 2: return $forms[2]; - default: return $forms[3]; - } - } - } - -} diff --git a/languages/classes/LanguageHr.php b/languages/classes/LanguageHr.php deleted file mode 100644 index 910bc100..00000000 --- a/languages/classes/LanguageHr.php +++ /dev/null @@ -1,56 +0,0 @@ -<?php -/** - * Croatian (hrvatski) specific code. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * http://www.gnu.org/copyleft/gpl.html - * - * @file - * @ingroup Language - */ - -/** - * Croatian (hrvatski) - * - * @ingroup Language - */ -class LanguageHr extends Language { - - /** - * @param $count int - * @param $forms array - * @return string - */ - function convertPlural( $count, $forms ) { - if ( !count( $forms ) ) { - return ''; - } - // @todo FIXME: CLDR defines 4 plural forms instead of 3. Plural for for decimals is missing. - // http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html - $forms = $this->preConvertPlural( $forms, 3 ); - - if ( $count > 10 && floor( ( $count % 100 ) / 10 ) == 1 ) { - return $forms[2]; - } else { - switch ( $count % 10 ) { - case 1: return $forms[0]; - case 2: - case 3: - case 4: return $forms[1]; - default: return $forms[2]; - } - } - } -} diff --git a/languages/classes/LanguageKsh.php b/languages/classes/LanguageKsh.php index 09c57279..d25ce714 100644 --- a/languages/classes/LanguageKsh.php +++ b/languages/classes/LanguageKsh.php @@ -189,6 +189,10 @@ class LanguageKsh extends Language { * @return string */ function convertPlural( $count, $forms ) { + $forms = $this->handleExplicitPluralForms( $count, $forms ); + if ( is_string( $forms ) ) { + return $forms; + } if ( !count( $forms ) ) { return ''; } diff --git a/languages/classes/LanguageRu.php b/languages/classes/LanguageRu.php index 11b42cf9..d3ac1d22 100644 --- a/languages/classes/LanguageRu.php +++ b/languages/classes/LanguageRu.php @@ -44,8 +44,9 @@ class LanguageRu extends Language { return $wgGrammarForms['ru'][$case][$word]; } - # These rules are not perfect, but they are currently only used for Wikimedia site names so it doesn't - # matter if they are wrong sometimes. Just add a special case for your site name if necessary. + # These rules are not perfect, but they are currently only used for Wikimedia + # site names so it doesn't matter if they are wrong sometimes. + # Just add a special case for your site name if necessary. # substr doesn't support Unicode and mb_substr has issues, # so break it to characters using preg_match_all and then use array_slice and join @@ -103,58 +104,6 @@ class LanguageRu extends Language { } /** - * Plural form transformations - * - * $forms[0] - singular form (for 1, 21, 31, 41...) - * $forms[1] - paucal form (for 2, 3, 4, 22, 23, 24, 32, 33, 34...) - * $forms[2] - plural form (for 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26...) - * - * Examples: - * message with number - * "Сделано $1 {{PLURAL:$1|изменение|изменения|изменений}}" - * ("$1 change[s] were made) - * message without number - * "Действие не может быть выполнено по {{PLURAL:$1|следующей причине|следующим причинам}}:" - * ("The action cannot be performed for the following reason[s]") - * @param $count int - * @param $forms array - * - * @return string - */ - function convertPlural( $count, $forms ) { - if ( !count( $forms ) ) { - return ''; - } - - // If the actual number is not mentioned in the expression, then just two forms are enough: - // singular for $count === 1 - // plural for $count !== 1 - // For example, "This user belongs to {{PLURAL:$1|one group|several groups}}." - if ( count( $forms ) === 2 ) { - return $count === 1 ? $forms[0] : $forms[1]; - } - - // @todo FIXME: CLDR defines 4 plural forms. Form with decimals missing. - // See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#ru - $forms = $this->preConvertPlural( $forms, 3 ); - - if ( $count > 10 && (int)floor( ( $count % 100 ) / 10 ) === 1 ) { - return $forms[2]; - } - - switch ( $count % 10 ) { - case 1: - return $forms[0]; - case 2: - case 3: - case 4: - return $forms[1]; - default: - return $forms[2]; - } - } - - /** * Four-digit number should be without group commas (spaces) * See manual of style at http://ru.wikipedia.org/wiki/Википедия:Оформление_статей * So "1 234 567", "12 345" but "1234" diff --git a/languages/classes/LanguageSr.php b/languages/classes/LanguageSr.php index 6f0ff4b5..76cd8229 100644 --- a/languages/classes/LanguageSr.php +++ b/languages/classes/LanguageSr.php @@ -22,8 +22,6 @@ */ require_once __DIR__ . '/../LanguageConverter.php'; -require_once __DIR__ . '/LanguageSr_ec.php'; -require_once __DIR__ . '/LanguageSr_el.php'; /** * There are two levels of conversion for Serbian: the script level @@ -166,14 +164,16 @@ class SrConverter extends LanguageConverter { // regexp for roman numbers $roman = 'M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})'; - $reg = '/^' . $roman . '$|^' . $roman . $breaks . '|' . $breaks . $roman . '$|' . $breaks . $roman . $breaks . '/'; + $reg = '/^' . $roman . '$|^' . $roman . $breaks . '|' . $breaks + . $roman . '$|' . $breaks . $roman . $breaks . '/'; $matches = preg_split( $reg, $text, -1, PREG_SPLIT_OFFSET_CAPTURE ); $m = array_shift( $matches ); $this->loadTables(); if ( !isset( $this->mTables[$toVariant] ) ) { - throw new MWException( "Broken variant table: " . implode( ',', array_keys( $this->mTables ) ) ); + throw new MWException( "Broken variant table: " + . implode( ',', array_keys( $this->mTables ) ) ); } $ret = $this->mTables[$toVariant]->replace( $m[0] ); $mstart = $m[1] + strlen( $m[0] ); @@ -218,7 +218,7 @@ class SrConverter extends LanguageConverter { * * @ingroup Language */ -class LanguageSr extends LanguageSr_ec { +class LanguageSr extends Language { function __construct() { global $wgHooks; @@ -238,40 +238,4 @@ class LanguageSr extends LanguageSr_ec { $this->mConverter = new SrConverter( $this, 'sr', $variants, $variantfallbacks, $flags ); $wgHooks['PageContentSaveComplete'][] = $this->mConverter; } - - /** - * @param $count int - * @param $forms array - * - * @return string - */ - function convertPlural( $count, $forms ) { - if ( !count( $forms ) ) { - return ''; - } - - // If the actual number is not mentioned in the expression, then just two forms are enough: - // singular for $count == 1 - // plural for $count != 1 - // For example, "This user belongs to {{PLURAL:$1|one group|several groups}}." - if ( count( $forms ) === 2 ) { - return $count == 1 ? $forms[0] : $forms[1]; - } - - // @todo FIXME: CLDR defines 4 plural forms. Form with decimals missing. - // See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#ru - $forms = $this->preConvertPlural( $forms, 3 ); - - if ( $count > 10 && floor( ( $count % 100 ) / 10 ) == 1 ) { - return $forms[2]; - } else { - switch ( $count % 10 ) { - case 1: return $forms[0]; - case 2: - case 3: - case 4: return $forms[1]; - default: return $forms[2]; - } - } - } } diff --git a/languages/classes/LanguageSr_ec.php b/languages/classes/LanguageSr_ec.php deleted file mode 100644 index cb9e8191..00000000 --- a/languages/classes/LanguageSr_ec.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php -/** - * Serbian (cyrillic script) specific code. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * http://www.gnu.org/copyleft/gpl.html - * - * @file - * @ingroup Language - */ - -/** - * Serbian (cyrillic script) - * - * @ingroup Language - */ -class LanguageSr_ec extends Language { - - /** - * @param $count int - * @param $forms array - * @return string - */ - function convertPlural( $count, $forms ) { - if ( !count( $forms ) ) { - return ''; - } - $forms = $this->preConvertPlural( $forms, 3 ); - - if ( $count > 10 && floor( ( $count % 100 ) / 10 ) == 1 ) { - return $forms[2]; - } else { - switch ( $count % 10 ) { - case 1: return $forms[0]; - case 2: - case 3: - case 4: return $forms[1]; - default: return $forms[2]; - } - } - } -} diff --git a/languages/classes/LanguageSr_el.php b/languages/classes/LanguageSr_el.php deleted file mode 100644 index 99d12935..00000000 --- a/languages/classes/LanguageSr_el.php +++ /dev/null @@ -1,54 +0,0 @@ -<?php -/** - * Serbian (latin script) specific code. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * http://www.gnu.org/copyleft/gpl.html - * - * @file - * @ingroup Language - */ - -/** - * Serbian (latin script) - * - * @ingroup Language - */ -class LanguageSr_el extends Language { - - /** - * @param $count int - * @param $forms array - * @return string - */ - function convertPlural( $count, $forms ) { - if ( !count( $forms ) ) { - return ''; - } - $forms = $this->preConvertPlural( $forms, 3 ); - - if ( $count > 10 && floor( ( $count % 100 ) / 10 ) == 1 ) { - return $forms[2]; - } else { - switch ( $count % 10 ) { - case 1: return $forms[0]; - case 2: - case 3: - case 4: return $forms[1]; - default: return $forms[2]; - } - } - } -} diff --git a/languages/classes/LanguageUk.php b/languages/classes/LanguageUk.php index 4ad272ba..08041a92 100644 --- a/languages/classes/LanguageUk.php +++ b/languages/classes/LanguageUk.php @@ -87,41 +87,6 @@ class LanguageUk extends Language { } /** - * @param $count int - * @param $forms array - * @return string - */ - function convertPlural( $count, $forms ) { - if ( !count( $forms ) ) { - return ''; - } - - // If the actual number is not mentioned in the expression, then just two forms are enough: - // singular for $count == 1 - // plural for $count != 1 - // For example, "This user belongs to {{PLURAL:$1|one group|several groups}}." - if ( count( $forms ) === 2 ) { - return $count == 1 ? $forms[0] : $forms[1]; - } - - // @todo FIXME: CLDR defines 4 plural forms. Form for decimals is missing/ - // See http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#uk - $forms = $this->preConvertPlural( $forms, 3 ); - - if ( $count > 10 && floor( ( $count % 100 ) / 10 ) == 1 ) { - return $forms[2]; - } else { - switch ( $count % 10 ) { - case 1: return $forms[0]; - case 2: - case 3: - case 4: return $forms[1]; - default: return $forms[2]; - } - } - } - - /** * Ukrainian numeric format is "12 345,67" but "1234,56" * * @param $_ string diff --git a/languages/data/plurals-mediawiki.xml b/languages/data/plurals-mediawiki.xml index 70d45a3c..aafc393b 100644 --- a/languages/data/plurals-mediawiki.xml +++ b/languages/data/plurals-mediawiki.xml @@ -2,42 +2,44 @@ <!DOCTYPE supplementalData SYSTEM "../../common/dtd/ldmlSupplemental.dtd"> <supplementalData> <plurals> - <!-- - The "one" and "two" rules are copied directly from CLDR. - The "many" rule overrides CLDR, because CLDR seems to have a mistake: - it's sometimes needed for multiples of 10, but not for 10 itself. - When the CLDR is fixed, this should be removed. - --> - <pluralRules locales="he"> - <pluralRule count="one">n is 1</pluralRule> - <pluralRule count="two">n is 2</pluralRule> - <pluralRule count="many">n is not 0 AND n is not 10 AND n mod 10 is 0</pluralRule> - </pluralRules> + <!-- Lower Sorbian (Dolnoserbski) and Upper Sorbian (Hornjoserbsce). Not present in CLDR --> <pluralRules locales="dsb hsb"> - <pluralRule count="one">n mod 100 is 1</pluralRule> - <pluralRule count="two">n mod 100 is 2</pluralRule> - <pluralRule count="few">n mod 100 in 3..4</pluralRule> + <pluralRule count="one">n % 100 = 1 @integer 1, 101, 201, 301, …</pluralRule> + <pluralRule count="two">n % 100 = 2 @integer 2, 102, 202, 302, …</pluralRule> + <pluralRule count="few">n % 100 = 3..4 @integer 3~4, 103~104, …</pluralRule> + <pluralRule count="other"> @integer 5, 6, 7, 8, 9, 10, 105, 206, 307, …</pluralRule> </pluralRules> - <!-- Copied from "be" --> + + <!-- Belarusian in Taraškievica orthography (Беларуская тарашкевіца). Copied from "be" --> <pluralRules locales="be-tarask"> - <pluralRule count="one">n mod 10 is 1 and n mod 100 is not 11</pluralRule> - <pluralRule count="few">n mod 10 in 2..4 and n mod 100 not in 12..14</pluralRule> - <pluralRule count="many">n mod 10 is 0 or n mod 10 in 5..9 or n mod 100 in 11..14</pluralRule> - <!-- others are fractions --> + <pluralRule count="one">n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …</pluralRule> + <pluralRule count="few">n % 10 = 2..4 and n % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 2.0, 3.0, 4.0, 22.0, 23.0, 24.0, 32.0, 33.0, 102.0, 1002.0, …</pluralRule> + <pluralRule count="many">n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + <pluralRule count="other"> @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …</pluralRule> </pluralRules> + <!-- Old Church Slavonic (Ѩзыкъ словѣньскъ). Not present in CLDR --> <pluralRules locales="cu"> - <pluralRule count="one">n mod 10 is 1</pluralRule> - <pluralRule count="two">n mod 10 is 2</pluralRule> - <pluralRule count="few">n mod 10 in 3..4</pluralRule> + <pluralRule count="one">n % 10 = 1 @integer 1, 11, 21, 31, …</pluralRule> + <pluralRule count="two">n % 10 = 2 @integer 2, 12, 22, 32, …</pluralRule> + <pluralRule count="few">n % 10 = 3..4 @integer 3~4, 13~14, 23~24, …</pluralRule> + <pluralRule count="other"> @integer 5, 6, 7, 8, 9, 10, 15, 105, 206, 307, …</pluralRule> </pluralRules> <!-- Copied from "bh" --> <pluralRules locales="bho"> - <pluralRule count="one">n in 0..1</pluralRule> + <pluralRule count="one">n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000</pluralRule> + <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> </pluralRules> + <!-- Samogitian. Not present in CLDR --> <pluralRules locales="sgs"> - <pluralRule count="one">n mod 10 is 1 and n mod 100 is not 11</pluralRule> - <pluralRule count="two">n mod 10 is 2 and n mod 100 is not 12</pluralRule> - <pluralRule count="few">n is 0 or n mod 100 is 0 or n mod 100 in 10..19</pluralRule> + <pluralRule count="one">n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 91, 101, 121, …</pluralRule> + <pluralRule count="two">n % 10 = 2 and n % 100 != 12 @integer 2, 22, 32, 42, 52, 62, 72, 82, 92, 102, 122, …</pluralRule> + <pluralRule count="few">n = 0 or n % 100 = 0 or n % 100 = 10..19 @integer 0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 100, 111,112, …</pluralRule> + <pluralRule count="other"> @integer 3, 4, 5, 6, 7, 8, 9, 20, 103, 104, …</pluralRule> + </pluralRules> + <pluralRules locales="sr-el sr-ec"> + <pluralRule count="one">v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule> + <pluralRule count="few">v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …</pluralRule> + <pluralRule count="other"> @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> </pluralRules> </plurals> </supplementalData> diff --git a/languages/data/plurals.xml b/languages/data/plurals.xml index d5a1cfe2..fd4eaf6b 100644 --- a/languages/data/plurals.xml +++ b/languages/data/plurals.xml @@ -1,119 +1,200 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE supplementalData SYSTEM "../../common/dtd/ldmlSupplemental.dtd"> +<!-- +Copyright © 1991-2013 Unicode, Inc. +CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) +For terms of use, see http://www.unicode.org/copyright.html +--> <supplementalData> - <version number="$Revision: 8007 $"/> - <generation date="$Date: 2013-01-03 07:17:41 +0530 (Thu, 03 Jan 2013) $"/> - <plurals> + <version number="$Revision: 9369 $"/> + <generation date="$Date: 2013-09-14 01:26:08 +0530 (ശ, 14 സെപ് 2013) $"/> + <plurals type="cardinal"> + <!-- For a canonicalized list, use GeneratedPluralSamples --> <!-- if locale is known to have no plurals, there are no rules --> - <pluralRules locales="az bm bo dz fa id ig ii hu ja jv ka kde kea km kn ko lo ms my sah ses sg th to tr vi wo yo zh"/> <pluralRules locales="ar"> - <pluralRule count="zero">n is 0</pluralRule> - <pluralRule count="one">n is 1</pluralRule> - <pluralRule count="two">n is 2</pluralRule> - <pluralRule count="few">n mod 100 in 3..10</pluralRule> - <pluralRule count="many">n mod 100 in 11..99</pluralRule> - </pluralRules> - <pluralRules locales="he"> - <pluralRule count="one">n is 1</pluralRule> - <pluralRule count="two">n is 2</pluralRule> - <pluralRule count="many">n is not 0 AND n mod 10 is 0</pluralRule> - </pluralRules> - <pluralRules locales="asa ast af bem bez bg bn brx ca cgg chr ckb da de dv ee el en eo es et eu fi fo fur fy gl gsw gu ha haw hy is it jgo jmc kaj kcg kk kkj kl ks ksb ku ky lb lg mas mgo ml mn mr nah nb nd ne nl nn nnh no nr ny nyn om or os pa pap ps pt rof rm rwk saq seh sn so sq ss ssy st sv sw syr ta te teo tig tk tn ts ur vo wae ve vun xh xog zu"> - <pluralRule count="one">n is 1</pluralRule> - </pluralRules> - <pluralRules locales="ak am bh fil tl guw hi ln mg nso ti wa"> - <pluralRule count="one">n in 0..1</pluralRule> - </pluralRules> - <pluralRules locales="ff fr kab"> - <pluralRule count="one">n within 0..2 and n is not 2</pluralRule> + <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule> + <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule> + <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule> + <pluralRule count="few">n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …</pluralRule> + <pluralRule count="many">n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …</pluralRule> + <pluralRule count="other"> @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="he iw"> + <pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule> + <pluralRule count="two">i = 2 and v = 0 @integer 2</pluralRule> + <pluralRule count="many">v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …</pluralRule> + <pluralRule count="other"> @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="af asa ast az bem bez bg brx cgg chr ckb dv ee el eo es eu fo fur fy gsw ha haw hu jgo jmc ka kaj kcg kk kkj kl ks ksb ku ky lb lg mas mgo ml mn nah nb nd ne nn nnh no nr ny nyn om or os pap ps rm rof rwk saq seh sn so sq ss ssy st syr ta te teo tig tk tn tr ts uz ve vo vun wae xh xog"> + <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule> + <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="ak bh guw ln mg nso pa ti wa"> + <pluralRule count="one">n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000</pluralRule> + <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="ff fr hy kab"> + <pluralRule count="one">i = 0,1 @integer 0, 1 @decimal 0.0~1.5</pluralRule> + <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> </pluralRules> <pluralRules locales="lv"> - <pluralRule count="zero">n is 0</pluralRule> - <pluralRule count="one">n mod 10 is 1 and n mod 100 is not 11</pluralRule> + <pluralRule count="zero">n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + <pluralRule count="one">n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule> + <pluralRule count="other"> @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …</pluralRule> </pluralRules> <pluralRules locales="iu kw naq se sma smi smj smn sms"> - <pluralRule count="one">n is 1</pluralRule> - <pluralRule count="two">n is 2</pluralRule> - </pluralRules> - <pluralRules locales="ga"> <!-- http://unicode.org/cldr/trac/ticket/3915 --> - <pluralRule count="one">n is 1</pluralRule> - <pluralRule count="two">n is 2</pluralRule> - <pluralRule count="few">n in 3..6</pluralRule> - <pluralRule count="many">n in 7..10</pluralRule> - </pluralRules> - <pluralRules locales="ro mo"> - <pluralRule count="one">n is 1</pluralRule> - <pluralRule count="few">n is 0 OR n is not 1 AND n mod 100 in 1..19</pluralRule> + <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule> + <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule> + <pluralRule count="other"> @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="ga"> + <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule> + <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule> + <pluralRule count="few">n = 3..6 @integer 3~6 @decimal 3.0, 4.0, 5.0, 6.0, 3.00, 4.00, 5.00, 6.00, 3.000, 4.000, 5.000, 6.000, 3.0000, 4.0000, 5.0000, 6.0000</pluralRule> + <pluralRule count="many">n = 7..10 @integer 7~10 @decimal 7.0, 8.0, 9.0, 10.0, 7.00, 8.00, 9.00, 10.00, 7.000, 8.000, 9.000, 10.000, 7.0000, 8.0000, 9.0000, 10.0000</pluralRule> + <pluralRule count="other"> @integer 0, 11~25, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="mo ro"> + <pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule> + <pluralRule count="few">v != 0 or n = 0 or n != 1 and n % 100 = 1..19 @integer 0, 2~16, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + <pluralRule count="other"> @integer 20~35, 100, 1000, 10000, 100000, 1000000, …</pluralRule> </pluralRules> <pluralRules locales="lt"> - <pluralRule count="one">n mod 10 is 1 and n mod 100 not in 11..19</pluralRule> - <pluralRule count="few">n mod 10 in 2..9 and n mod 100 not in 11..19</pluralRule> + <pluralRule count="one">n % 10 = 1 and n % 100 != 11..19 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …</pluralRule> + <pluralRule count="few">n % 10 = 2..9 and n % 100 != 11..19 @integer 2~9, 22~29, 102, 1002, … @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 22.0, 102.0, 1002.0, …</pluralRule> + <pluralRule count="many">f != 0 @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …</pluralRule> + <pluralRule count="other"> @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> </pluralRules> - <pluralRules locales="be bs hr ru sh sr uk"> - <pluralRule count="one">n mod 10 is 1 and n mod 100 is not 11</pluralRule> - <pluralRule count="few">n mod 10 in 2..4 and n mod 100 not in 12..14</pluralRule> - <pluralRule count="many">n mod 10 is 0 or n mod 10 in 5..9 or n mod 100 in 11..14</pluralRule> - <!-- others are fractions --> + <pluralRules locales="be"> + <pluralRule count="one">n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …</pluralRule> + <pluralRule count="few">n % 10 = 2..4 and n % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 2.0, 3.0, 4.0, 22.0, 23.0, 24.0, 32.0, 33.0, 102.0, 1002.0, …</pluralRule> + <pluralRule count="many">n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + <pluralRule count="other"> @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …</pluralRule> </pluralRules> <pluralRules locales="cs sk"> - <pluralRule count="one">n is 1</pluralRule> - <pluralRule count="few">n in 2..4</pluralRule> + <pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule> + <pluralRule count="few">i = 2..4 and v = 0 @integer 2~4</pluralRule> + <pluralRule count="many">v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + <pluralRule count="other"> @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule> </pluralRules> <pluralRules locales="pl"> - <pluralRule count="one">n is 1</pluralRule> - <pluralRule count="few">n mod 10 in 2..4 and n mod 100 not in 12..14</pluralRule> - <pluralRule count="many">n is not 1 and n mod 10 in 0..1 or n mod 10 in 5..9 or n mod 100 in 12..14</pluralRule> - <!-- others are fractions --> - <!-- and n mod 100 not in 22..24 from Tamplin --> + <pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule> + <pluralRule count="few">v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …</pluralRule> + <pluralRule count="many">v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule> + <pluralRule count="other"> @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> </pluralRules> <pluralRules locales="sl"> - <pluralRule count="one">n mod 100 is 1</pluralRule> - <pluralRule count="two">n mod 100 is 2</pluralRule> - <pluralRule count="few">n mod 100 in 3..4</pluralRule> - </pluralRules> - <pluralRules locales="mt"> <!-- from Tamplin's data --> - <pluralRule count="one">n is 1</pluralRule> - <pluralRule count="few">n is 0 or n mod 100 in 2..10</pluralRule> - <pluralRule count="many">n mod 100 in 11..19</pluralRule> - </pluralRules> - <pluralRules locales="mk"> <!-- from Tamplin's data --> - <pluralRule count="one">n mod 10 is 1 and n is not 11</pluralRule> - </pluralRules> - <pluralRules locales="cy"> <!-- from http://www.saltcymru.org/wordpress/?p=99&lang=en --> - <pluralRule count="zero">n is 0</pluralRule> - <pluralRule count="one">n is 1</pluralRule> - <pluralRule count="two">n is 2</pluralRule> - <pluralRule count="few">n is 3</pluralRule> - <pluralRule count="many">n is 6</pluralRule> + <pluralRule count="one">v = 0 and i % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, …</pluralRule> + <pluralRule count="two">v = 0 and i % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, …</pluralRule> + <pluralRule count="few">v = 0 and i % 100 = 3..4 or v != 0 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + <pluralRule count="other"> @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule> + </pluralRules> + <pluralRules locales="mt"> + <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule> + <pluralRule count="few">n = 0 or n % 100 = 2..10 @integer 0, 2~10, 102~107, 1002, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 102.0, 1002.0, …</pluralRule> + <pluralRule count="many">n % 100 = 11..19 @integer 11~19, 111~117, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …</pluralRule> + <pluralRule count="other"> @integer 20~35, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="mk"> + <pluralRule count="one">v = 0 and i % 10 = 1 or f % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule> + <pluralRule count="other"> @integer 0, 2~10, 12~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.0, 1.2~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="cy"> + <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule> + <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule> + <pluralRule count="two">n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000</pluralRule> + <pluralRule count="few">n = 3 @integer 3 @decimal 3.0, 3.00, 3.000, 3.0000</pluralRule> + <pluralRule count="many">n = 6 @integer 6 @decimal 6.0, 6.00, 6.000, 6.0000</pluralRule> + <pluralRule count="other"> @integer 4, 5, 7~20, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> </pluralRules> <pluralRules locales="lag"> - <pluralRule count="zero">n is 0</pluralRule> - <pluralRule count="one">n within 0..2 and n is not 0 and n is not 2</pluralRule> + <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule> + <pluralRule count="one">i = 0,1 and n != 0 @integer 1 @decimal 0.1~1.6</pluralRule> + <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> </pluralRules> <pluralRules locales="shi"> - <pluralRule count="one">n within 0..1</pluralRule> - <pluralRule count="few">n in 2..10</pluralRule> + <pluralRule count="one">i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04</pluralRule> + <pluralRule count="few">n = 2..10 @integer 2~10 @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00</pluralRule> + <pluralRule count="other"> @integer 11~26, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~1.9, 2.1~2.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> </pluralRules> - <pluralRules locales="br"> <!-- from http://unicode.org/cldr/trac/ticket/2886 --> - <pluralRule count="one">n mod 10 is 1 and n mod 100 not in 11,71,91</pluralRule> - <pluralRule count="two">n mod 10 is 2 and n mod 100 not in 12,72,92</pluralRule> - <pluralRule count="few">n mod 10 in 3..4,9 and n mod 100 not in 10..19,70..79,90..99</pluralRule> - <pluralRule count="many">n is not 0 and n mod 1000000 is 0</pluralRule> + <pluralRules locales="br"> + <pluralRule count="one">n % 10 = 1 and n % 100 != 11,71,91 @integer 1, 21, 31, 41, 51, 61, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 81.0, 101.0, 1001.0, …</pluralRule> + <pluralRule count="two">n % 10 = 2 and n % 100 != 12,72,92 @integer 2, 22, 32, 42, 52, 62, 82, 102, 1002, … @decimal 2.0, 22.0, 32.0, 42.0, 52.0, 62.0, 82.0, 102.0, 1002.0, …</pluralRule> + <pluralRule count="few">n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99 @integer 3, 4, 9, 23, 24, 29, 33, 34, 39, 43, 44, 49, 103, 1003, … @decimal 3.0, 4.0, 9.0, 23.0, 24.0, 29.0, 33.0, 34.0, 103.0, 1003.0, …</pluralRule> + <pluralRule count="many">n != 0 and n % 1000000 = 0 @integer 1000000, … @decimal 1000000.0, 1000000.00, 1000000.000, …</pluralRule> + <pluralRule count="other"> @integer 0, 5~8, 10~20, 100, 1000, 10000, 100000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, …</pluralRule> </pluralRules> <pluralRules locales="ksh"> - <pluralRule count="zero">n is 0</pluralRule> - <pluralRule count="one">n is 1</pluralRule> + <pluralRule count="zero">n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000</pluralRule> + <pluralRule count="one">n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000</pluralRule> + <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> </pluralRules> <pluralRules locales="tzm"> - <pluralRule count="one">n in 0..1 or n in 11..99</pluralRule> + <pluralRule count="one">n = 0..1 or n = 11..99 @integer 0, 1, 11~24 @decimal 0.0, 1.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0</pluralRule> + <pluralRule count="other"> @integer 2~10, 100~106, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> </pluralRules> <pluralRules locales="gv"> - <pluralRule count="one">n mod 10 in 1..2 or n mod 20 is 0</pluralRule> + <pluralRule count="one">n % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, … @decimal 1.0, 11.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 101.0, 1001.0, …</pluralRule> + <pluralRule count="two">n % 10 = 2 @integer 2, 12, 22, 32, 42, 52, 62, 72, 102, 1002, … @decimal 2.0, 12.0, 22.0, 32.0, 42.0, 52.0, 62.0, 72.0, 102.0, 1002.0, …</pluralRule> + <pluralRule count="few">n % 100 = 0,20,40,60 @integer 0, 20, 40, 60, 100, 120, 140, 160, 1000, 10000, 100000, 1000000, … @decimal 0.0, 20.0, 40.0, 60.0, 100.0, 120.0, 140.0, 160.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + <pluralRule count="other"> @integer 3~10, 13~19, 23, 103, 1003, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.1, 1000.1, …</pluralRule> </pluralRules> <pluralRules locales="gd"> - <pluralRule count="one">n in 1,11</pluralRule> - <pluralRule count="two">n in 2,12</pluralRule> - <pluralRule count="few">n in 3..10,13..19</pluralRule> + <pluralRule count="one">n = 1,11 @integer 1, 11 @decimal 1.0, 11.0, 1.00, 11.00, 1.000, 11.000, 1.0000</pluralRule> + <pluralRule count="two">n = 2,12 @integer 2, 12 @decimal 2.0, 12.0, 2.00, 12.00, 2.000, 12.000, 2.0000</pluralRule> + <pluralRule count="few">n = 3..10,13..19 @integer 3~10, 13~19 @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 3.00</pluralRule> + <pluralRule count="other"> @integer 0, 20~34, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="bm bo dz id ig ii in ja jbo jv jw kde kea km ko lkt lo ms my nqo sah ses sg th to vi wo yo zh"> + <pluralRule count="other"> @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="fil tl"> + <pluralRule count="one">i = 0..1 and v = 0 @integer 0, 1</pluralRule> + <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="ca de en et fi gl it ji nl sv sw ur yi"> + <pluralRule count="one">i = 1 and v = 0 @integer 1</pluralRule> + <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="pt"> + <pluralRule count="one">i = 1 and v = 0 or i = 0 and t = 1 @integer 1 @decimal 0.1, 0.01, 0.10, 0.001, 0.010, 0.100, 0.0001, 0.0010, 0.0100, 0.1000</pluralRule> + <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="da"> + <pluralRule count="one">n = 1 or t != 0 and i = 0,1 @integer 1 @decimal 0.1~1.6</pluralRule> + <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0~3.4, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="pt_PT"> + <pluralRule count="one">n = 1 and v = 0 @integer 1</pluralRule> + <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="am bn fa gu hi kn mr zu"> + <pluralRule count="one">i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04</pluralRule> + <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="is"> + <pluralRule count="one">t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1~1.6, 10.1, 100.1, 1000.1, …</pluralRule> + <pluralRule count="other"> @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="si"> + <pluralRule count="one">n = 0,1 or i = 0 and f = 1 @integer 0, 1 @decimal 0.0, 0.1, 1.0, 0.00, 0.01, 1.00, 0.000, 0.001, 1.000, 0.0000, 0.0001, 1.0000</pluralRule> + <pluralRule count="other"> @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.2~0.9, 1.1~1.8, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="bs hr sh sr"> + <pluralRule count="one">v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …</pluralRule> + <pluralRule count="few">v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …</pluralRule> + <pluralRule count="other"> @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="ru"> + <pluralRule count="one">v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …</pluralRule> + <pluralRule count="many">v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule> + <pluralRule count="other"> @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> + </pluralRules> + <pluralRules locales="uk"> + <pluralRule count="one">v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …</pluralRule> + <pluralRule count="few">v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …</pluralRule> + <pluralRule count="many">v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …</pluralRule> + <pluralRule count="other"> @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …</pluralRule> </pluralRules> </plurals> </supplementalData> diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php index ffbc88ab..dca9779d 100644 --- a/languages/messages/MessagesEn.php +++ b/languages/messages/MessagesEn.php @@ -2352,6 +2352,7 @@ You should check that file's deletion history before proceeding to re-upload it. 'php-uploaddisabledtext' => 'File uploads are disabled in PHP. Please check the file_uploads setting.', 'uploadscripted' => 'This file contains HTML or script code that may be erroneously interpreted by a web browser.', +'uploadinvalidxml' => 'The XML in the uploaded file could not be parsed.', 'uploadvirus' => 'The file contains a virus! Details: $1', 'uploadjava' => 'The file is a ZIP file that contains a Java .class file. @@ -4857,6 +4858,13 @@ You should have received [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU Gen 'version-software' => 'Installed software', 'version-software-product' => 'Product', 'version-software-version' => 'Version', +'version-db-mysql-url' => 'http://www.mysql.com/', # do not translate or duplicate this message to other languages +'version-db-mariadb-url' => 'http://mariadb.org/', # do not translate or duplicate this message to other languages +'version-db-percona-url' => 'http://www.percona.com/software/percona-server', # do not translate or duplicate this message to other languages +'version-db-postgres-url' => 'http://www.postgresql.org/', # do not translate or duplicate this message to other languages +'version-db-oracle-url' => 'http://www.oracle.com/database/', # do not translate or duplicate this message to other languages +'version-db-sqlite-url' => 'http://www.sqlite.org/', # do not translate or duplicate this message to other languages +'version-db-mssql-url' => 'http://www.microsoft.com/sql/', # do not translate or duplicate this message to other languages 'version-entrypoints' => 'Entry point URLs', 'version-entrypoints-header-entrypoint' => 'Entry point', 'version-entrypoints-header-url' => 'URL', diff --git a/languages/messages/MessagesQqq.php b/languages/messages/MessagesQqq.php index cdb8a914..e770db61 100644 --- a/languages/messages/MessagesQqq.php +++ b/languages/messages/MessagesQqq.php @@ -4064,6 +4064,7 @@ See also: * {{msg-mw|zip-wrong-format}} * {{msg-mw|uploadjava}} * {{msg-mw|uploadvirus}}', +'uploadinvalidxml' => 'Error message displayed when the uploaded file contains XML that cannot be properly parsed and checked.', 'uploadvirus' => 'Error message displayed when uploaded file contains a virus. Parameters: @@ -9922,6 +9923,20 @@ Used at the end of {{msg-mw|version-poweredby-credits}} on [[Special:Version]].' This message is followed by the list of installed software (MediaWiki, PHP and MySQL).', 'version-software-product' => 'Shown in [[Special:Version]]', 'version-software-version' => '{{Identical|Version}}', +'version-db-mysql-url' => '{{notranslate}} +URL of the website for [[wikipedia:MySQL|MySQL]].', +'version-db-mariadb-url' => '{{notranslate}} +URL of the website for [[wikipedia:MariaDB|MariaDB]].', +'version-db-percona-url' => '{{notranslate}} +URL of the website for Percona Server.', +'version-db-postgres-url' => '{{notranslate}} +URL of the website for [[wikipedia:PostgreSQL|PostgreSQL]].', +'version-db-oracle-url' => '{{notranslate}} +URL of the website for [[wikipedia:Oracle Database|Oracle Database]].', +'version-db-sqlite-url' => '{{notranslate}} +URL of the website for [[wikipedia:SQLite|SQLite]].', +'version-db-mssql-url' => '{{notranslate}} +URL of the website for [[wikipedia:Microsoft SQL Server|Microsoft SQL Server]].', 'version-entrypoints' => 'Header on [[Special:Version]] above a table that lists the URLs of various entry points in this MediaWiki installation. Entry points are the "places" where the wiki\'s content and information can be accessed in various ways, for instance the standard index.php which shows normal pages, histories etc.', 'version-entrypoints-header-entrypoint' => 'Header for the first column in the entry points table on [[Special:Version]]. See also {{msg-mw|Version-entrypoints}}', diff --git a/languages/utils/CLDRPluralRuleEvaluator.php b/languages/utils/CLDRPluralRuleEvaluator.php index d3a863b4..afe88a5b 100644 --- a/languages/utils/CLDRPluralRuleEvaluator.php +++ b/languages/utils/CLDRPluralRuleEvaluator.php @@ -2,7 +2,8 @@ /** * Parse and evaluate a plural rule. * - * http://unicode.org/reports/tr35/#Language_Plural_Rules + * UTS #35 Revision 33 + * http://www.unicode.org/reports/tr35/tr35-33/tr35-numbers.html#Language_Plural_Rules * * @author Niklas Laxstrom, Tim Starling * @@ -63,8 +64,42 @@ class CLDRPluralRuleEvaluator { /** * Evaluate a compiled set of rules returned by compile(). Do not allow * the user to edit the compiled form, or else PHP errors may result. + * + * @param string The number to be evaluated against the rules, in English, or it + * may be a type convertible to string. + * @param array The associative array of plural rules in pluralform => rule format. + * @return int The index of the plural form which passed the evaluation */ public static function evaluateCompiled( $number, array $rules ) { + // Calculate the values of the operand symbols + $number = strval( $number ); + if ( !preg_match( '/^ -? ( ([0-9]+) (?: \. ([0-9]+) )? )$/x', $number, $m ) ) { + wfDebug( __METHOD__.': invalid number input, returning "other"' ); + return count( $rules ); + } + if ( !isset( $m[3] ) ) { + $operandSymbols = array( + 'n' => intval( $m[1] ), + 'i' => intval( $m[1] ), + 'v' => 0, + 'w' => 0, + 'f' => 0, + 't' => 0 + ); + } else { + $absValStr = $m[1]; + $intStr = $m[2]; + $fracStr = $m[3]; + $operandSymbols = array( + 'n' => floatval( $absValStr ), + 'i' => intval( $intStr ), + 'v' => strlen( $fracStr ), + 'w' => strlen( rtrim( $fracStr, '0' ) ), + 'f' => intval( $fracStr ), + 't' => intval( rtrim( $fracStr, '0' ) ), + ); + } + // The compiled form is RPN, with tokens strictly delimited by // spaces, so this is a simple RPN evaluator. foreach ( $rules as $i => $rule ) { @@ -73,8 +108,8 @@ class CLDRPluralRuleEvaluator { $nine = ord( '9' ); foreach ( StringUtils::explode( ' ', $rule ) as $token ) { $ord = ord( $token ); - if ( $token === 'n' ) { - $stack[] = $number; + if ( isset( $operandSymbols[$token] ) ) { + $stack[] = $operandSymbols[$token]; } elseif ( $ord >= $zero && $ord <= $nine ) { $stack[] = intval( $token ); } else { @@ -88,8 +123,8 @@ class CLDRPluralRuleEvaluator { return $i; } } - // None of the provided rules match. The number belongs to caregory - // 'other' which comes last. + // None of the provided rules match. The number belongs to category + // 'other', which comes last. return count( $rules ); } @@ -227,8 +262,39 @@ class CLDRPluralRuleEvaluator_Range { * Helper class for converting rules to reverse polish notation (RPN). */ class CLDRPluralRuleConverter { - public $rule, $pos, $end; + /** + * The input string + * + * @var string + */ + public $rule; + + /** + * The current position + * + * @var int + */ + public $pos; + + /** + * The past-the-end position + * + * @var int + */ + public $end; + + /** + * The operator stack + * + * @var array + */ public $operators = array(); + + /** + * The operand stack + * + * @var array + */ public $operands = array(); /** @@ -257,14 +323,19 @@ class CLDRPluralRuleConverter { /** * Same for digits. Note that the grammar given in UTS #35 doesn't allow - * negative numbers or decimals. + * negative numbers or decimal separators. */ const NUMBER_CLASS = '0123456789'; /** + * A character list of symbolic operands. + */ + const OPERAND_SYMBOLS = 'nivwft'; + + /** * An anchored regular expression which matches a word at the current offset. */ - const WORD_REGEX = '/[a-zA-Z]+/A'; + const WORD_REGEX = '/[a-zA-Z@]+/A'; /** * Convert a rule to RPN. This is the only public entry point. @@ -365,17 +436,19 @@ class CLDRPluralRuleConverter { return $token; } - // Comma - if ( $this->rule[$this->pos] === ',' ) { - $token = $this->newOperator( ',', $this->pos, 1 ); - $this->pos ++; + // Two-character operators + $op2 = substr( $this->rule, $this->pos, 2 ); + if ( $op2 === '..' || $op2 === '!=' ) { + $token = $this->newOperator( $op2, $this->pos, 2 ); + $this->pos += 2; return $token; } - // Dot dot - if ( substr( $this->rule, $this->pos, 2 ) === '..' ) { - $token = $this->newOperator( '..', $this->pos, 2 ); - $this->pos += 2; + // Single-character operators + $op1 = $this->rule[$this->pos]; + if ( $op1 === ',' || $op1 === '=' || $op1 === '%' ) { + $token = $this->newOperator( $op1, $this->pos, 1 ); + $this->pos ++; return $token; } @@ -414,13 +487,21 @@ class CLDRPluralRuleConverter { return $token; } - // The special numerical keyword "n" - if ( $word1 === 'n' ) { - $token = $this->newNumber( 'n', $this->pos ); + // The single-character operand symbols + if ( strpos( self::OPERAND_SYMBOLS, $word1 ) !== false ) { + $token = $this->newNumber( $word1, $this->pos ); $this->pos ++; return $token; } + // Samples + if ( $word1 === '@integer' || $word1 === '@decimal' ) { + // Samples are like comments, they have no effect on rule evaluation. + // They run from the first sample indicator to the end of the string. + $this->pos = $this->end; + return false; + } + $this->error( 'unrecognised word' ); } @@ -551,8 +632,28 @@ class CLDRPluralRuleConverter_Operator extends CLDRPluralRuleConverter_Fragment 'r' => 'range', ); + /** + * Map for converting the new operators introduced in Rev 33 to the old forms + */ + static $aliasMap = array( + '%' => 'mod', + '!=' => 'not-in', + '=' => 'in' + ); + + /** + * Initialize a new instance of a CLDRPluralRuleConverter_Operator object + * + * @param CLDRPluralRuleConverter $parser The parser + * @param string $name The operator name + * @param int $pos The position + * @param int $pos The length + */ function __construct( $parser, $name, $pos, $length ) { parent::__construct( $parser, $pos, $length ); + if ( isset( self::$aliasMap[$name] ) ) { + $name = self::$aliasMap[$name]; + } $this->name = $name; } diff --git a/maintenance/fixExtLinksProtocolRelative.php b/maintenance/fixExtLinksProtocolRelative.php index 55fbd9a3..02d65ed1 100644 --- a/maintenance/fixExtLinksProtocolRelative.php +++ b/maintenance/fixExtLinksProtocolRelative.php @@ -66,11 +66,13 @@ class FixExtLinksProtocolRelative extends LoggedUpdateMaintenance { $db->insert( 'externallinks', array( array( + 'el_id' => $db->nextSequenceValue( 'externallinks_el_id_seq' ), 'el_from' => $row->el_from, 'el_to' => $row->el_to, 'el_index' => "http:{$row->el_index}", ), array( + 'el_id' => $db->nextSequenceValue( 'externallinks_el_id_seq' ), 'el_from' => $row->el_from, 'el_to' => $row->el_to, 'el_index' => "https:{$row->el_index}", diff --git a/maintenance/language/messageTypes.inc b/maintenance/language/messageTypes.inc index 8676d741..0b9b7cb8 100644 --- a/maintenance/language/messageTypes.inc +++ b/maintenance/language/messageTypes.inc @@ -245,6 +245,13 @@ $wgIgnoredMessages = array( 'tags-summary', 'comparepages-summary', 'resettokens-summary', + 'version-db-mysql-url', + 'version-db-mariadb-url', + 'version-db-percona-url', + 'version-db-postgres-url', + 'version-db-oracle-url', + 'version-db-sqlite-url', + 'version-db-mssql-url', 'version-entrypoints-index-php', 'version-entrypoints-api-php', 'version-entrypoints-load-php', diff --git a/maintenance/language/messages.inc b/maintenance/language/messages.inc index 5e8e9744..de163a61 100644 --- a/maintenance/language/messages.inc +++ b/maintenance/language/messages.inc @@ -3706,6 +3706,13 @@ $wgMessageStructure = array( 'version-software', 'version-software-product', 'version-software-version', + 'version-db-mysql-url', + 'version-db-mariadb-url', + 'version-db-percona-url', + 'version-db-postgres-url', + 'version-db-oracle-url', + 'version-db-sqlite-url', + 'version-db-mssql-url', 'version-entrypoints', 'version-entrypoints-header-entrypoint', 'version-entrypoints-header-url', diff --git a/resources/mediawiki.libs/CLDRPluralRuleParser.js b/resources/mediawiki.libs/CLDRPluralRuleParser.js index 441bc91f..3def37c5 100644 --- a/resources/mediawiki.libs/CLDRPluralRuleParser.js +++ b/resources/mediawiki.libs/CLDRPluralRuleParser.js @@ -1,7 +1,7 @@ -/* This is cldrpluralparser 1.0, ported to MediaWiki ResourceLoader */ +/* This is CLDRPluralRuleParser v1.1, ported to MediaWiki ResourceLoader */ /** -* cldrpluralparser.js +* CLDRPluralRuleParser.js * A parser engine for CLDR plural rules. * * Copyright 2012 GPLV3+, Santhosh Thottingal @@ -13,59 +13,83 @@ * @author Amir Aharoni */ +( function ( mw ) { /** * Evaluates a plural rule in CLDR syntax for a number - * @param rule - * @param number - * @return true|false|null + * @param {string} rule + * @param {integer} number + * @return {boolean} true if evaluation passed, false if evaluation failed. */ -( function( mw ) { function pluralRuleParser(rule, number) { /* Syntax: see http://unicode.org/reports/tr35/#Language_Plural_Rules ----------------------------------------------------------------- - condition = and_condition ('or' and_condition)* + ('@integer' samples)? + ('@decimal' samples)? and_condition = relation ('and' relation)* - relation = is_relation | in_relation | within_relation | 'n' <EOL> + relation = is_relation | in_relation | within_relation is_relation = expr 'is' ('not')? value - in_relation = expr ('not')? 'in' range_list + in_relation = expr (('not')? 'in' | '=' | '!=') range_list within_relation = expr ('not')? 'within' range_list - expr = 'n' ('mod' value)? + expr = operand (('mod' | '%') value)? + operand = 'n' | 'i' | 'f' | 't' | 'v' | 'w' range_list = (range | value) (',' range_list)* value = digit+ digit = 0|1|2|3|4|5|6|7|8|9 range = value'..'value - + samples = sampleRange (',' sampleRange)* (',' ('…'|'...'))? + sampleRange = decimalValue '~' decimalValue + decimalValue = value ('.' value)? */ + + // we don't evaluate the samples section of the rule. Ignore it. + rule = rule.split('@')[0].trim(); + + if (!rule.length) { + // empty rule or 'other' rule. + return true; + } // Indicates current position in the rule as we parse through it. // Shared among all parsing functions below. - var pos = 0; - - var whitespace = makeRegexParser(/^\s+/); - var digits = makeRegexParser(/^\d+/); - - var _n_ = makeStringParser('n'); - var _is_ = makeStringParser('is'); - var _mod_ = makeStringParser('mod'); - var _not_ = makeStringParser('not'); - var _in_ = makeStringParser('in'); - var _within_ = makeStringParser('within'); - var _range_ = makeStringParser('..'); - var _comma_ = makeStringParser(','); - var _or_ = makeStringParser('or'); - var _and_ = makeStringParser('and'); + var pos = 0, + operand, + expression, + relation, + result, + whitespace = makeRegexParser(/^\s+/), + value = makeRegexParser(/^\d+/), + _n_ = makeStringParser('n'), + _i_ = makeStringParser('i'), + _f_ = makeStringParser('f'), + _t_ = makeStringParser('t'), + _v_ = makeStringParser('v'), + _w_ = makeStringParser('w'), + _is_ = makeStringParser('is'), + _isnot_ = makeStringParser('is not'), + _isnot_sign_ = makeStringParser('!='), + _equal_ = makeStringParser('='), + _mod_ = makeStringParser('mod'), + _percent_ = makeStringParser('%'), + _not_ = makeStringParser('not'), + _in_ = makeStringParser('in'), + _within_ = makeStringParser('within'), + _range_ = makeStringParser('..'), + _comma_ = makeStringParser(','), + _or_ = makeStringParser('or'), + _and_ = makeStringParser('and'); function debug() { - /* console.log.apply(console, arguments);*/ + // console.log.apply(console, arguments); } debug('pluralRuleParser', rule, number); // Try parsers until one works, if none work return null + function choice(parserSyntax) { - return function () { + return function() { for (var i = 0; i < parserSyntax.length; i++) { var result = parserSyntax[i](); if (result !== null) { @@ -79,6 +103,7 @@ function pluralRuleParser(rule, number) { // Try several parserSyntax-es in a row. // All must succeed; otherwise, return null. // This is the only eager one. + function sequence(parserSyntax) { var originalPos = pos; var result = []; @@ -95,8 +120,9 @@ function pluralRuleParser(rule, number) { // Run the same parser over and over until it fails. // Must succeed a minimum of n times; otherwise, return null. + function nOrMore(n, p) { - return function () { + return function() { var originalPos = pos; var result = []; var parsed = p(); @@ -113,21 +139,21 @@ function pluralRuleParser(rule, number) { } // Helpers -- just make parserSyntax out of simpler JS builtin types - function makeStringParser(s) { var len = s.length; - return function () { + return function() { var result = null; if (rule.substr(pos, len) === s) { result = s; pos += len; } + return result; }; } function makeRegexParser(regex) { - return function () { + return function() { var matches = rule.substr(pos).match(regex); if (matches === null) { return null; @@ -137,62 +163,166 @@ function pluralRuleParser(rule, number) { }; } + /* + * integer digits of n. + */ + function i() { + var result = _i_(); + if (result === null) { + debug(' -- failed i', parseInt(number, 10)); + return result; + } + result = parseInt(number, 10); + debug(' -- passed i ', result); + return result; + } + + /* + * absolute value of the source number (integer and decimals). + */ function n() { var result = _n_(); if (result === null) { - debug(" -- failed n"); + debug(' -- failed n ', number); return result; } - result = parseInt(number, 10); - debug(" -- passed n ", result); + result = parseFloat(number, 10); + debug(' -- passed n ', result); + return result; + } + + /* + * visible fractional digits in n, with trailing zeros. + */ + function f() { + var result = _f_(); + if (result === null) { + debug(' -- failed f ', number); + return result; + } + result = (number + '.').split('.')[1] || 0; + debug(' -- passed f ', result); + return result; + } + + /* + * visible fractional digits in n, without trailing zeros. + */ + function t() { + var result = _t_(); + if (result === null) { + debug(' -- failed t ', number); + return result; + } + result = (number + '.').split('.')[1].replace(/0$/, '') || 0; + debug(' -- passed t ', result); + return result; + } + + /* + * number of visible fraction digits in n, with trailing zeros. + */ + function v() { + var result = _v_(); + if (result === null) { + debug(' -- failed v ', number); + return result; + } + result = (number + '.').split('.')[1].length || 0; + debug(' -- passed v ', result); + return result; + } + + /* + * number of visible fraction digits in n, without trailing zeros. + */ + function w() { + var result = _w_(); + if (result === null) { + debug(' -- failed w ', number); + return result; + } + result = (number + '.').split('.')[1].replace(/0$/, '').length || 0; + debug(' -- passed w ', result); return result; } - var expression = choice([mod, n]); + // operand = 'n' | 'i' | 'f' | 't' | 'v' | 'w' + operand = choice([n, i, f, t, v, w]); + + // expr = operand (('mod' | '%') value)? + expression = choice([mod, operand]); function mod() { - var result = sequence([n, whitespace, _mod_, whitespace, digits]); + var result = sequence([operand, whitespace, choice([_mod_, _percent_]), whitespace, value]); if (result === null) { - debug(" -- failed mod"); + debug(' -- failed mod'); return null; } - debug(" -- passed mod"); + debug(' -- passed ' + parseInt(result[0], 10) + ' ' + result[2] + ' ' + parseInt(result[4], 10)); return parseInt(result[0], 10) % parseInt(result[4], 10); } function not() { var result = sequence([whitespace, _not_]); if (result === null) { - debug(" -- failed not"); + debug(' -- failed not'); return null; - } else { - return result[1]; } + + return result[1]; } + // is_relation = expr 'is' ('not')? value function is() { - var result = sequence([expression, whitespace, _is_, nOrMore(0, not), whitespace, digits]); + var result = sequence([expression, whitespace, choice([_is_]), whitespace, value]); if (result !== null) { - debug(" -- passed is"); - if (result[3][0] === 'not') { - return result[0] !== parseInt(result[5], 10); - } else { - return result[0] === parseInt(result[5], 10); + debug(' -- passed is : ' + result[0] + ' == ' + parseInt(result[4], 10)); + return result[0] === parseInt(result[4], 10); + } + debug(' -- failed is'); + return null; + } + + // is_relation = expr 'is' ('not')? value + function isnot() { + var result = sequence([expression, whitespace, choice([_isnot_, _isnot_sign_]), whitespace, value]); + if (result !== null) { + debug(' -- passed isnot: ' + result[0] + ' != ' + parseInt(result[4], 10)); + return result[0] !== parseInt(result[4], 10); + } + debug(' -- failed isnot'); + return null; + } + + function not_in() { + var result = sequence([expression, whitespace, _isnot_sign_, whitespace, rangeList]); + if (result !== null) { + debug(' -- passed not_in: ' + result[0] + ' != ' + result[4]); + var range_list = result[4]; + for (var i = 0; i < range_list.length; i++) { + if (parseInt(range_list[i], 10) === parseInt(result[0], 10)) { + return false; + } } + return true; } - debug(" -- failed is"); + debug(' -- failed not_in'); return null; } + // range_list = (range | value) (',' range_list)* function rangeList() { - // range_list = (range | value) (',' range_list)* - var result = sequence([choice([range, digits]), nOrMore(0, rangeTail)]); + var result = sequence([choice([range, value]), nOrMore(0, rangeTail)]); var resultList = []; if (result !== null) { - resultList = resultList.concat(result[0], result[1][0]); + resultList = resultList.concat(result[0]); + if (result[1][0]) { + resultList = resultList.concat(result[1][0]); + } return resultList; } - debug(" -- failed rangeList"); + debug(' -- failed rangeList'); return null; } @@ -202,111 +332,141 @@ function pluralRuleParser(rule, number) { if (result !== null) { return result[1]; } - debug(" -- failed rangeTail"); + debug(' -- failed rangeTail'); return null; } + // range = value'..'value + function range() { var i; - var result = sequence([digits, _range_, digits]); + var result = sequence([value, _range_, value]); if (result !== null) { - debug(" -- passed range"); + debug(' -- passed range'); var array = []; var left = parseInt(result[0], 10); var right = parseInt(result[2], 10); - for ( i = left; i <= right; i++) { + for (i = left; i <= right; i++) { array.push(i); } return array; } - debug(" -- failed range"); + debug(' -- failed range'); return null; } function _in() { // in_relation = expr ('not')? 'in' range_list - var result = sequence([expression, nOrMore(0, not), whitespace, _in_, whitespace, rangeList]); + var result = sequence([expression, nOrMore(0, not), whitespace, choice([_in_, _equal_]), whitespace, rangeList]); if (result !== null) { - debug(" -- passed _in"); + debug(' -- passed _in:' + result); var range_list = result[5]; for (var i = 0; i < range_list.length; i++) { - if (parseInt(range_list[i], 10) === result[0]) { + if (parseInt(range_list[i], 10) === parseInt(result[0], 10)) { return (result[1][0] !== 'not'); } } return (result[1][0] === 'not'); } - debug(" -- failed _in "); + debug(' -- failed _in '); return null; } + /* + * The difference between in and within is that in only includes integers in the specified range, + * while within includes all values. + */ + function within() { - var result = sequence([expression, whitespace, _within_, whitespace, rangeList]); + // within_relation = expr ('not')? 'within' range_list + var result = sequence([expression, nOrMore(0, not), whitespace, _within_, whitespace, rangeList]); if (result !== null) { - debug(" -- passed within "); - var range_list = result[4]; - return (parseInt( range_list[0],10 )<= result[0] && result[0] <= parseInt( range_list[1], 10)); + debug(' -- passed within'); + var range_list = result[5]; + if ((result[0] >= parseInt(range_list[0], 10)) && + (result[0] < parseInt(range_list[range_list.length - 1], 10))) { + return (result[1][0] !== 'not'); + } + return (result[1][0] === 'not'); } - debug(" -- failed within "); + debug(' -- failed within '); return null; } + // relation = is_relation | in_relation | within_relation + relation = choice([is, not_in, isnot, _in, within]); - var relation = choice([is, _in, within]); - + // and_condition = relation ('and' relation)* function and() { - var result = sequence([relation, whitespace, _and_, whitespace, condition]); + var result = sequence([relation, nOrMore(0, andTail)]); if (result) { - debug(" -- passed and"); - return result[0] && result[4]; + if (!result[0]) { + return false; + } + for (var i = 0; i < result[1].length; i++) { + if (!result[1][i]) { + return false; + } + } + return true; } - debug(" -- failed and"); + debug(' -- failed and'); return null; } - function or() { - var result = sequence([relation, whitespace, _or_, whitespace, condition]); - if (result) { - debug(" -- passed or"); - return result[0] || result[4]; + // ('and' relation)* + function andTail() { + var result = sequence([whitespace, _and_, whitespace, relation]); + if (result !== null) { + debug(' -- passed andTail' + result); + return result[3]; } - debug(" -- failed or"); + debug(' -- failed andTail'); return null; - } - var condition = choice([and, or, relation]); + } + // ('or' and_condition)* + function orTail() { + var result = sequence([whitespace, _or_, whitespace, and]); + if (result !== null) { + debug(' -- passed orTail: ' + result[3]); + return result[3]; + } + debug(' -- failed orTail'); + return null; - function isInt(n) { - return parseFloat(n) % 1 === 0; } + // condition = and_condition ('or' and_condition)* + function condition() { + var result = sequence([and, nOrMore(0, orTail)]); + if (result) { + for (var i = 0; i < result[1].length; i++) { + if (result[1][i]) { + return true; + } + } + return result[0]; - function start() { - if (!isInt(number)) { - return false; } - var result = condition(); - return result; + return false; } - - var result = start(); - + result = condition(); /* * For success, the pos must have gotten to the end of the rule * and returned a non-null. * n.b. This is part of language infrastructure, so we do not throw an internationalizable message. */ - if (result === null || pos !== rule.length) { - // throw new Error("Parse error at position " + pos.toString() + " in input: " + rule + " result is " + result); + if (result === null) { + throw new Error('Parse error at position ' + pos.toString() + ' for rule: ' + rule); } - return result; -} + if (pos !== rule.length) { + debug('Warning: Rule not parsed completely. Parser stopped at ' + rule.substr(0, pos) + ' for rule: ' + rule); + } -/* For module loaders, e.g. NodeJS, NPM */ -if (typeof module !== 'undefined' && module.exports) { - module.exports = pluralRuleParser; + return result; } /* pluralRuleParser ends here */ diff --git a/tests/parser/parserTests.txt b/tests/parser/parserTests.txt index 02a66b51..9658e8f8 100644 --- a/tests/parser/parserTests.txt +++ b/tests/parser/parserTests.txt @@ -11574,6 +11574,17 @@ Bug 3244: HTML attribute safety (extension; unsafe) !! end +!! test +Opera -o-link CSS +!! input +<div +title="data:text/html,<img src=1 onerror=alert(1)>" +style="-o-link:attr(title);-o-link-source:current">X</div> +!! result +<div title="data:text/html,<img src=1 onerror=alert(1)>" style="/* insecure input */">X</div> + +!! end + # More MSIE fun discovered by Tom Gilder !! test @@ -11612,6 +11623,70 @@ MSIE CSS safety test: comment in expression !! end +!! test +CSS safety test: vertical tab +!! input +<p style="font-size: 100px; background-image:url\b(https://www.google.com/images/srpr/logo6w.png)">A</p> +!! result +<p style="/* invalid control char */">A</p> + +!! end + +!! test +MSIE CSS safety test: Fullwidth +!! input +<p style="font-size: 100px; color: expression((title='XSSed'),'red')">A</p> +<div style="top:EXPRESSION(alert())">B</div> +!! result +<p style="/* insecure input */">A</p> +<div style="/* insecure input */">B</div> + +!! end + +!! test +MSIE CSS safety test: IPA extensions +!! input +<div style="background-image:uʀʟ(javascript:alert())">A</div> +<p style="font-size: 100px; color: expʀessɪoɴ((title='XSSed'),'red')">B</p> +!! result +<div style="/* insecure input */">A</div> +<p style="/* insecure input */">B</p> + +!! end + +!! test +MSIE CSS safety test: sup/sub script +!! input +<div style="background-image:url⁽javascript:alert())">A</div> +<div style="background-image:url₍javascript:alert())">B</div> +<p style="font-size: 100px; color: expressioⁿ((title='XSSed'),'red')">C</p> +!! result +<div style="/* insecure input */">A</div> +<div style="/* insecure input */">B</div> +<p style="/* insecure input */">C</p> + +!! end + +!! test +MSIE CSS safety test: Repetition markers +!! input +<p style="font-size: 100px; color: expres〱ion((title='XSSed'),'red')">A</p> +<p style="font-size: 100px; color: expresゝion((title='XSSed'),'red')">B</p> +<p style="font-size: 100px; color: expresーion((title='XSSed'),'red')">C</p> +<p style="font-size: 100px; color: expresヽion((title='XSSed'),'red')">D</p> +<p style="font-size: 100px; color: expresﹽion((title='XSSed'),'red')">E</p> +<p style="font-size: 100px; color: expresﹼion((title='XSSed'),'red')">F</p> +<p style="font-size: 100px; color: expresーion((title='XSSed'),'red')">G</p> +!! result +<p style="/* insecure input */">A</p> +<p style="/* insecure input */">B</p> +<p style="/* insecure input */">C</p> +<p style="/* insecure input */">D</p> +<p style="/* insecure input */">E</p> +<p style="/* insecure input */">F</p> +<p style="/* insecure input */">G</p> + +!! end !! test Table attribute legitimate extension diff --git a/tests/phpunit/includes/ArticleTablesTest.php b/tests/phpunit/includes/ArticleTablesTest.php index 0f159ae4..469d1d19 100644 --- a/tests/phpunit/includes/ArticleTablesTest.php +++ b/tests/phpunit/includes/ArticleTablesTest.php @@ -20,7 +20,7 @@ class ArticleTablesTest extends MediaWikiLangTestCase { $templates1 = $title->getTemplateLinksFrom(); $wgLang = Language::factory( 'de' ); - $page->mPreparedEdit = false; // In order to force the rerendering of the same wikitext + $page = WikiPage::factory( $title ); // In order to force the rerendering of the same wikitext // We need an edit, a purge is not enough to regenerate the tables $page->doEditContent( new WikitextContent( '{{:{{int:history}}}}' ), 'Test code for bug 14404', EDIT_UPDATE, false, $user ); diff --git a/tests/phpunit/languages/LanguageBe_taraskTest.php b/tests/phpunit/languages/LanguageBe_taraskTest.php index d5822f4a..dbdb5889 100644 --- a/tests/phpunit/languages/LanguageBe_taraskTest.php +++ b/tests/phpunit/languages/LanguageBe_taraskTest.php @@ -79,12 +79,13 @@ class LanguageBe_taraskTest extends LanguageClassesTestCase { * @covers Language::convertPlural */ public function testPluralTwoForms( $result, $value ) { - $forms = array( 'one', 'other' ); + $forms = array( '1=one', 'other' ); $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) ); } public static function providePluralTwoForms() { return array( + array( 'other', 0 ), array( 'one', 1 ), array( 'other', 11 ), array( 'other', 91 ), diff --git a/tests/phpunit/languages/LanguageBsTest.php b/tests/phpunit/languages/LanguageBsTest.php index fb965b89..7aca2ab1 100644 --- a/tests/phpunit/languages/LanguageBsTest.php +++ b/tests/phpunit/languages/LanguageBsTest.php @@ -5,14 +5,14 @@ * @file */ -/** Tests for MediaWiki languages/LanguageBs.php */ +/** Tests for Croatian (hrvatski) */ class LanguageBsTest extends LanguageClassesTestCase { /** * @dataProvider providePlural * @covers Language::convertPlural */ public function testPlural( $result, $value ) { - $forms = array( 'one', 'few', 'many', 'other' ); + $forms = array( 'one', 'few', 'other' ); $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) ); } @@ -26,17 +26,17 @@ class LanguageBsTest extends LanguageClassesTestCase { public static function providePlural() { return array( - array( 'many', 0 ), + array( 'other', 0 ), array( 'one', 1 ), array( 'few', 2 ), array( 'few', 4 ), - array( 'many', 5 ), - array( 'many', 11 ), - array( 'many', 20 ), + array( 'other', 5 ), + array( 'other', 11 ), + array( 'other', 20 ), array( 'one', 21 ), array( 'few', 24 ), - array( 'many', 25 ), - array( 'many', 200 ), + array( 'other', 25 ), + array( 'other', 200 ), ); } } diff --git a/tests/phpunit/languages/LanguageGvTest.php b/tests/phpunit/languages/LanguageGvTest.php index a0def628..fc58022a 100644 --- a/tests/phpunit/languages/LanguageGvTest.php +++ b/tests/phpunit/languages/LanguageGvTest.php @@ -1,20 +1,19 @@ <?php /** + * Test for Manx (Gaelg) language + * * @author Santhosh Thottingal - * @copyright Copyright © 2012, Santhosh Thottingal + * @copyright Copyright © 2013, Santhosh Thottingal * @file */ -/** Tests for MediaWiki languages/classes/LanguageGv.php */ class LanguageGvTest extends LanguageClassesTestCase { /** * @dataProvider providePlural * @covers Language::convertPlural */ public function testPlural( $result, $value ) { - // This is not compatible with CLDR plural rules http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#gv - // What does this mean? Is there a hard-coded override for gv somewhere? -Ryan Kaldari 2013-01-28 - $forms = array( 'Form 1', 'Form 2', 'Form 3', 'Form 4' ); + $forms = array( 'one', 'two', 'few', 'other' ); $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) ); } @@ -23,21 +22,23 @@ class LanguageGvTest extends LanguageClassesTestCase { * @covers Language::getPluralRuleType */ public function testGetPluralRuleType( $result, $value ) { - $this->markTestSkipped( "This test won't work since convertPlural for gv doesn't seem to actually follow our plural rules." ); $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) ); } public static function providePlural() { return array( - array( 'Form 4', 0 ), - array( 'Form 2', 1 ), - array( 'Form 3', 2 ), - array( 'Form 4', 3 ), - array( 'Form 1', 20 ), - array( 'Form 2', 21 ), - array( 'Form 3', 22 ), - array( 'Form 4', 23 ), - array( 'Form 4', 50 ), + array( 'few', 0 ), + array( 'one', 1 ), + array( 'two', 2 ), + array( 'other', 3 ), + array( 'few', 20 ), + array( 'one', 21 ), + array( 'two', 22 ), + array( 'other', 23 ), + array( 'other', 50 ), + array( 'few', 60 ), + array( 'other', 80 ), + array( 'few', 100 ) ); } } diff --git a/tests/phpunit/languages/LanguageHrTest.php b/tests/phpunit/languages/LanguageHrTest.php index 6ce4aff9..644c5255 100644 --- a/tests/phpunit/languages/LanguageHrTest.php +++ b/tests/phpunit/languages/LanguageHrTest.php @@ -12,7 +12,7 @@ class LanguageHrTest extends LanguageClassesTestCase { * @covers Language::convertPlural */ public function testPlural( $result, $value ) { - $forms = array( 'one', 'few', 'many', 'other' ); + $forms = array( 'one', 'few', 'other' ); $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) ); } @@ -26,17 +26,17 @@ class LanguageHrTest extends LanguageClassesTestCase { public static function providePlural() { return array( - array( 'many', 0 ), + array( 'other', 0 ), array( 'one', 1 ), array( 'few', 2 ), array( 'few', 4 ), - array( 'many', 5 ), - array( 'many', 11 ), - array( 'many', 20 ), + array( 'other', 5 ), + array( 'other', 11 ), + array( 'other', 20 ), array( 'one', 21 ), array( 'few', 24 ), - array( 'many', 25 ), - array( 'many', 200 ), + array( 'other', 25 ), + array( 'other', 200 ), ); } } diff --git a/tests/phpunit/languages/LanguageHyTest.php b/tests/phpunit/languages/LanguageHyTest.php index 896522b0..92e0ef94 100644 --- a/tests/phpunit/languages/LanguageHyTest.php +++ b/tests/phpunit/languages/LanguageHyTest.php @@ -5,7 +5,7 @@ * @file */ -/** Tests for MediaWiki languages/LanguageHy.php */ +/** Tests for Armenian (Հայերեն) */ class LanguageHyTest extends LanguageClassesTestCase { /** * @dataProvider providePlural @@ -21,13 +21,12 @@ class LanguageHyTest extends LanguageClassesTestCase { * @covers Language::getPluralRuleType */ public function testGetPluralRuleType( $result, $value ) { - // This fails for 0, but I'm not sure why. Some voodoo going on here. $this->assertEquals( $result, $this->getLang()->getPluralRuleType( $value ) ); } public static function providePlural() { return array( - array( 'other', 0 ), + array( 'one', 0 ), array( 'one', 1 ), array( 'other', 2 ), array( 'other', 200 ), diff --git a/tests/phpunit/languages/LanguageLvTest.php b/tests/phpunit/languages/LanguageLvTest.php index c4d8a6f0..7120cfe3 100644 --- a/tests/phpunit/languages/LanguageLvTest.php +++ b/tests/phpunit/languages/LanguageLvTest.php @@ -5,7 +5,7 @@ * @file */ -/** Tests for MediaWiki languages/classes/LanguageLv.php */ +/** Tests for Latvian */ class LanguageLvTest extends LanguageClassesTestCase { /** * @dataProvider providePlural @@ -28,13 +28,17 @@ class LanguageLvTest extends LanguageClassesTestCase { return array( array( 'zero', 0 ), array( 'one', 1 ), - array( 'other', 11 ), + array( 'zero', 11 ), array( 'one', 21 ), - array( 'other', 411 ), + array( 'zero', 411 ), + array( 'other', 2 ), + array( 'other', 9 ), + array( 'zero', 12 ), array( 'other', 12.345 ), - array( 'other', 20 ), + array( 'zero', 20 ), + array( 'other', 22 ), array( 'one', 31 ), - array( 'other', 200 ), + array( 'zero', 200 ), ); } } diff --git a/tests/phpunit/languages/LanguageMkTest.php b/tests/phpunit/languages/LanguageMkTest.php index 7d47b375..ed155263 100644 --- a/tests/phpunit/languages/LanguageMkTest.php +++ b/tests/phpunit/languages/LanguageMkTest.php @@ -5,7 +5,7 @@ * @file */ -/** Tests for MediaWiki languages/classes/LanguageMk.php */ +/** Tests for македонски/Macedonian */ class LanguageMkTest extends LanguageClassesTestCase { /** * @dataProvider providePlural @@ -28,7 +28,7 @@ class LanguageMkTest extends LanguageClassesTestCase { return array( array( 'other', 0 ), array( 'one', 1 ), - array( 'other', 11 ), + array( 'one', 11 ), array( 'one', 21 ), array( 'one', 411 ), array( 'other', 12.345 ), diff --git a/tests/phpunit/languages/LanguageRuTest.php b/tests/phpunit/languages/LanguageRuTest.php index e938be79..e17c7085 100644 --- a/tests/phpunit/languages/LanguageRuTest.php +++ b/tests/phpunit/languages/LanguageRuTest.php @@ -13,11 +13,22 @@ class LanguageRuTest extends LanguageClassesTestCase { * @covers Language::convertPlural */ public function testPlural( $result, $value ) { - $forms = array( 'one', 'few', 'many', 'other' ); + $forms = array( 'one', 'many', 'other' ); $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) ); } /** + * Test explicit plural forms - n=FormN forms + * @covers Language::convertPlural + */ + public function testExplicitPlural() { + $forms = array( 'one','many', 'other', '12=dozen' ); + $this->assertEquals( 'dozen', $this->getLang()->convertPlural( 12, $forms ) ); + $forms = array( 'one', 'many', '100=hundred', 'other', '12=dozen' ); + $this->assertEquals( 'hundred', $this->getLang()->convertPlural( 100, $forms ) ); + } + + /** * @dataProvider providePlural * @covers Language::getPluralRuleType */ @@ -31,10 +42,10 @@ class LanguageRuTest extends LanguageClassesTestCase { array( 'many', 11 ), array( 'one', 91 ), array( 'one', 121 ), - array( 'few', 2 ), - array( 'few', 3 ), - array( 'few', 4 ), - array( 'few', 334 ), + array( 'other', 2 ), + array( 'other', 3 ), + array( 'other', 4 ), + array( 'other', 334 ), array( 'many', 5 ), array( 'many', 15 ), array( 'many', 120 ), @@ -46,7 +57,7 @@ class LanguageRuTest extends LanguageClassesTestCase { * @covers Language::convertPlural */ public function testPluralTwoForms( $result, $value ) { - $forms = array( 'one', 'other' ); + $forms = array( '1=one', 'other' ); $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) ); } diff --git a/tests/phpunit/languages/LanguageSgsTest.php b/tests/phpunit/languages/LanguageSgsTest.php index bf6a14b1..fa49a4dd 100644 --- a/tests/phpunit/languages/LanguageSgsTest.php +++ b/tests/phpunit/languages/LanguageSgsTest.php @@ -5,7 +5,7 @@ * @file */ -/** Tests for MediaWiki languages/classes/LanguageSgs.php */ +/** Tests for Samogitian */ class LanguageSgsTest extends LanguageClassesTestCase { /** * @dataProvider providePluralAllForms diff --git a/tests/phpunit/languages/LanguageShTest.php b/tests/phpunit/languages/LanguageShTest.php index 6d2e25a6..1b390872 100644 --- a/tests/phpunit/languages/LanguageShTest.php +++ b/tests/phpunit/languages/LanguageShTest.php @@ -5,14 +5,14 @@ * @file */ -/** Tests for MediaWiki languages/classes/LanguageSh.php */ +/** Tests for srpskohrvatski / српскохрватски / Serbocroatian */ class LanguageShTest extends LanguageClassesTestCase { /** * @dataProvider providePlural * @covers Language::convertPlural */ public function testPlural( $result, $value ) { - $forms = array( 'one', 'few', 'many', 'other' ); + $forms = array( 'one', 'few', 'other' ); $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) ); } @@ -26,17 +26,17 @@ class LanguageShTest extends LanguageClassesTestCase { public static function providePlural() { return array( - array( 'many', 0 ), + array( 'other', 0 ), array( 'one', 1 ), array( 'few', 2 ), array( 'few', 4 ), - array( 'many', 5 ), - array( 'many', 10 ), - array( 'many', 11 ), - array( 'many', 12 ), + array( 'other', 5 ), + array( 'other', 10 ), + array( 'other', 11 ), + array( 'other', 12 ), array( 'one', 101 ), array( 'few', 102 ), - array( 'many', 111 ), + array( 'other', 111 ), ); } } diff --git a/tests/phpunit/languages/LanguageSrTest.php b/tests/phpunit/languages/LanguageSrTest.php index ab4d4aba..d6fedb57 100644 --- a/tests/phpunit/languages/LanguageSrTest.php +++ b/tests/phpunit/languages/LanguageSrTest.php @@ -130,7 +130,7 @@ class LanguageSrTest extends LanguageClassesTestCase { * @covers Language::convertPlural */ public function testPlural( $result, $value ) { - $forms = array( 'one', 'few', 'many', 'other' ); + $forms = array( 'one', 'few', 'other' ); $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) ); } @@ -145,16 +145,16 @@ class LanguageSrTest extends LanguageClassesTestCase { public static function providePlural() { return array( array( 'one', 1 ), - array( 'many', 11 ), + array( 'other', 11 ), array( 'one', 91 ), array( 'one', 121 ), array( 'few', 2 ), array( 'few', 3 ), array( 'few', 4 ), array( 'few', 334 ), - array( 'many', 5 ), - array( 'many', 15 ), - array( 'many', 120 ), + array( 'other', 5 ), + array( 'other', 15 ), + array( 'other', 120 ), ); } @@ -171,8 +171,9 @@ class LanguageSrTest extends LanguageClassesTestCase { return array( array( 'one', 1 ), array( 'other', 11 ), - array( 'other', 91 ), - array( 'other', 121 ), + array( 'other', 4 ), + array( 'one', 91 ), + array( 'one', 121 ), ); } diff --git a/tests/phpunit/languages/LanguageUkTest.php b/tests/phpunit/languages/LanguageUkTest.php index 0783fcf6..9051bcff 100644 --- a/tests/phpunit/languages/LanguageUkTest.php +++ b/tests/phpunit/languages/LanguageUkTest.php @@ -6,7 +6,7 @@ * @file */ -/** Tests for MediaWiki languages/classes/LanguageUk.php */ +/** Tests for Ukrainian */ class LanguageUkTest extends LanguageClassesTestCase { /** * @dataProvider providePlural @@ -18,6 +18,17 @@ class LanguageUkTest extends LanguageClassesTestCase { } /** + * Test explicit plural forms - n=FormN forms + * @covers Language::convertPlural + */ + public function testExplicitPlural() { + $forms = array( 'one', 'few', 'many', 'other', '12=dozen' ); + $this->assertEquals( 'dozen', $this->getLang()->convertPlural( 12, $forms ) ); + $forms = array( 'one', 'few', 'many', '100=hundred', 'other', '12=dozen' ); + $this->assertEquals( 'hundred', $this->getLang()->convertPlural( 100, $forms ) ); + } + + /** * @dataProvider providePlural * @covers Language::getPluralRuleType */ @@ -46,7 +57,7 @@ class LanguageUkTest extends LanguageClassesTestCase { * @covers Language::convertPlural */ public function testPluralTwoForms( $result, $value ) { - $forms = array( 'one', 'other' ); + $forms = array( '1=one', 'other' ); $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) ); } diff --git a/tests/phpunit/languages/utils/CLDRPluralRuleEvaluatorTest.php b/tests/phpunit/languages/utils/CLDRPluralRuleEvaluatorTest.php index 3bf74146..bd3809d7 100644 --- a/tests/phpunit/languages/utils/CLDRPluralRuleEvaluatorTest.php +++ b/tests/phpunit/languages/utils/CLDRPluralRuleEvaluatorTest.php @@ -78,6 +78,56 @@ class CLDRPluralRuleEvaluatorTest extends MediaWikiTestCase { array( 0, 'n in 3..10,13..19', 13, 'scottish rule - ranges with comma' ), array( 0, '5 mod 3 is n', 2, 'n as result of mod - no need to pass' ), + + # Revision 33 new operand examples + # expected, rule, number, comment + array( 0, 'i is 1', '1.00', 'new operand i' ), + array( 0, 'v is 2', '1.00', 'new operand v' ), + array( 0, 'w is 0', '1.00', 'new operand w' ), + array( 0, 'f is 0', '1.00', 'new operand f' ), + array( 0, 't is 0', '1.00', 'new operand t' ), + + array( 0, 'i is 1', '1.30', 'new operand i' ), + array( 0, 'v is 2', '1.30', 'new operand v' ), + array( 0, 'w is 1', '1.30', 'new operand w' ), + array( 0, 'f is 30', '1.30', 'new operand f' ), + array( 0, 't is 3', '1.30', 'new operand t' ), + + array( 0, 'i is 1', '1.03', 'new operand i' ), + array( 0, 'v is 2', '1.03', 'new operand v' ), + array( 0, 'w is 2', '1.03', 'new operand w' ), + array( 0, 'f is 3', '1.03', 'new operand f' ), + array( 0, 't is 3', '1.03', 'new operand t' ), + + # Revision 33 new operator aliases + # expected, rule, number, comment + array( 0, 'n % 3 is 1', 7, 'new % operator' ), + array( 0, 'n = 1,3,5', 3, 'new = operator' ), + array( 1, 'n != 1,3,5', 5, 'new != operator' ), + + # Revision 33 samples + # expected, rule, number, comment + array( 0, 'n in 1,3,5@integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …', 3, 'samples' ), + + # Revision 33 some test cases from CLDR + array( 0, 'i = 1 and v = 0 or i = 0 and t = 1', '0.1', 'pt one' ), + array( 0, 'i = 1 and v = 0 or i = 0 and t = 1', '0.01', 'pt one' ), + array( 0, 'i = 1 and v = 0 or i = 0 and t = 1', '0.10', 'pt one' ), + array( 0, 'i = 1 and v = 0 or i = 0 and t = 1', '0.010', 'pt one' ), + array( 0, 'i = 1 and v = 0 or i = 0 and t = 1', '0.100', 'pt one' ), + array( 1, 'i = 1 and v = 0 or i = 0 and t = 1', '0.0', 'pt other' ), + array( 1, 'i = 1 and v = 0 or i = 0 and t = 1', '0.2', 'pt other' ), + array( 1, 'i = 1 and v = 0 or i = 0 and t = 1', '10.0', 'pt other' ), + array( 1, 'i = 1 and v = 0 or i = 0 and t = 1', '100.0', 'pt other' ), + array( 0, 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14', '2', 'bs few' ), + array( 0, 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14', '4', 'bs few' ), + array( 0, 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14', '22', 'bs few' ), + array( 0, 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14', '102', 'bs few' ), + array( 0, 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14', '0.2', 'bs few' ), + array( 0, 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14', '0.4', 'bs few' ), + array( 0, 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14', '10.2', 'bs few' ), + array( 1, 'v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14', '10.0', 'bs other' ), + ); return $tests; |