'!node_modules/**',
'!resources/lib/**',
'!resources/src/jquery.tipsy/**',
- '!resources/src/jquery/jquery.farbtastic.js',
'!resources/src/mediawiki.libs.jpegmeta/**',
// Third-party code of PHPUnit coverage report
'!tests/coverage/**',
* The es5-shim module, empty and deprecated since 1.29, was removed.
* The mediawiki.widgets.visibleByteLimit module, deprecated in 1.32, was removed.
Use mediawiki.widgets.visibleLengthLimit instead.
+* The jquery.farbtastic module, unused since 1.18, was removed.
=== Deprecations in 1.32 ===
* Use of a StartProfiler.php file is deprecated in favour of placing
}
/**
- * Add a JavaScript file out of skins/common, or a given relative path.
+ * Add a JavaScript file to be loaded as `<script>` on this page.
+ *
* Internal use only. Use OutputPage::addModules() if possible.
*
- * @param string $file Filename in skins/common or complete on-server path
- * (/foo/bar.js)
+ * @param string $file URL to file (absolute path, protocol-relative, or full url)
* @param string $version Style version of the file. Defaults to $wgStyleVersion
*/
public function addScriptFile( $file, $version = null ) {
- // See if $file parameter is an absolute URL or begins with a slash
- if ( substr( $file, 0, 1 ) == '/' || preg_match( '#^[a-z]*://#i', $file ) ) {
- $path = $file;
- } else {
- $path = $this->getConfig()->get( 'StylePath' ) . "/common/{$file}";
+ if ( substr( $file, 0, 1 ) !== '/' && !preg_match( '#^[a-z]*://#i', $file ) ) {
+ // This is not an absolute path, protocol-relative url, or full scheme url,
+ // presumed to be an old call intended to include a file from /w/skins/common,
+ // which doesn't exist anymore as of MediaWiki 1.24 per T71277. Ignore.
+ wfDeprecated( __METHOD__, '1.24' );
+ return;
}
+ $path = $file;
if ( is_null( $version ) ) {
$version = $this->getConfig()->get( 'StyleVersion' );
}
"resources/src/jquery.tipsy",
"resources/src/jquery/jquery.color.js",
"resources/src/jquery/jquery.expandableField.js",
- "resources/src/jquery/jquery.farbtastic.css",
- "resources/src/jquery/jquery.farbtastic.js",
"resources/src/jquery/jquery.highlightText.js",
"resources/src/jquery/jquery.mw-jump.js",
"resources/src/mediawiki.legacy",
class CrhExceptions {
+ const WB = '\b'; # default word boundary; may be updated in the future
+
function __construct() {
$this->loadRegs();
}
# load C2L and L2C bidirectional affix mappings
$this->addMappings( $this->prefixMapping,
- $this->Cyrl2LatnPatterns, $this->Latn2CyrlPatterns, false, '/\b', '/u' );
+ $this->Cyrl2LatnPatterns, $this->Latn2CyrlPatterns, false, '/'.self::WB, '/u' );
$this->addMappings( $this->suffixMapping,
- $this->Cyrl2LatnPatterns, $this->Latn2CyrlPatterns, false, '/', '\b/u' );
+ $this->Cyrl2LatnPatterns, $this->Latn2CyrlPatterns, false, '/', self::WB.'/u' );
# tack on one-way mappings to the ends of the prefix and suffix patterns
$this->Cyrl2LatnPatterns += $this->Cyrl2LatnRegexes;
'доцент' => 'dotsent', 'фармацевт' => 'farmatsevt', 'глицер' => 'glitser',
'люцерна' => 'lütserna', 'лицей' => 'litsey', 'меццо' => 'metstso', 'наци' => 'natsi',
'проце' => 'protse', 'рецеп' => 'retsep', 'реценз' => 'retsenz', 'теплица' => 'teplitsa',
- 'вице' => 'vitse', 'швейцар' => 'şveytsar',
+ 'вице' => 'vitse', 'швейцар' => 'şveytsar', 'богородиц' => 'bogorodits',
+ 'бруцел' => 'brutsel', 'дацюк' => 'datsük', 'доницетти' => 'donitsetti',
+ 'драцена' => 'dratsena', 'контрацеп' => 'kontratsep', 'коцюб' => 'kotsüb',
+ 'меценат' => 'metsenat', 'мицел' => 'mitsel', 'моцарт' => 'motsart', 'плац' => 'plats',
+ 'плацен' => 'platsen', 'прецедент' => 'pretsedent', 'прецес' => 'pretses',
+ 'прицеп' => 'pritsep', 'спец' => 'spets', 'троиц' => 'troits', 'шприц' => 'şprits',
+ 'эпицентр' => 'epitsentr', 'яценюк' => 'yatsenük',
# слова с тс
# words with тс
// TODO: refactor upper/lower/first capital whole words without
// regexes into simpler list
- '/\bКъЮШ\b/u' => 'QYŞ',
- '/\bЮШ\b/u' => 'YŞ',
-
- '/\bкок\b/u' => 'kök',
- '/\bКок\b/u' => 'Kök',
- '/\bКОК\b/u' => 'KÖK',
- '/\bком-кок\b/u' => 'köm-kök',
- '/\bКом-кок\b/u' => 'Köm-kök',
- '/\bКОМ-КОК\b/u' => 'KÖM-KÖK',
-
- '/\bкоп\b/u' => 'köp',
- '/\bКоп\b/u' => 'Köp',
- '/\bКОП\b/u' => 'KÖP',
-
- '/\bкурк\b/u' => 'kürk',
- '/\bКурк\b/u' => 'Kürk',
- '/\bКУРК\b/u' => 'KÜRK',
-
- '/\bог\b/u' => 'ög',
- '/\bОг\b/u' => 'Ög',
- '/\bОГ\b/u' => 'ÖG',
-
- '/\bюрип\b/u' => 'yürip',
- '/\bЮрип\b/u' => 'Yürip',
- '/\bЮРИП\b/u' => 'YÜRİP',
-
- '/\bюз\b/u' => 'yüz',
- '/\bЮз\b/u' => 'Yüz',
- '/\bЮЗ\b/u' => 'YÜZ',
-
- '/\bюк\b/u' => 'yük',
- '/\bЮк\b/u' => 'Yük',
- '/\bЮК\b/u' => 'YÜK',
-
- '/\bбуюп\b/u' => 'büyüp',
- '/\bБуюп\b/u' => 'Büyüp',
- '/\bБУЮП\b/u' => 'BÜYÜP',
-
- '/\bбуюк\b/u' => 'büyük',
- '/\bБуюк\b/u' => 'Büyük',
- '/\bБУЮК\b/u' => 'BÜYÜK',
-
- '/\bджонк\b/u' => 'cönk',
- '/\bДжонк\b/u' => 'Cönk',
- '/\bДЖОНК\b/u' => 'CÖNK',
- '/\bджонкю\b/u' => 'cönkü',
- '/\bДжонкю\b/u' => 'Cönkü',
- '/\bДЖОНКЮ\b/u' => 'CÖNKÜ',
-
- '/\bустке\b/u' => 'üstke',
- '/\bУстке\b/u' => 'Üstke',
- '/\bУСТКЕ\b/u' => 'ÜSTKE',
- '/\bустте\b/u' => 'üstte',
- '/\bУстте\b/u' => 'Üstte',
- '/\bУСТТЕ\b/u' => 'ÜSTTE',
- '/\bусттен\b/u' => 'üstten',
- '/\bУсттен\b/u' => 'Üstten',
- '/\bУСТТЕН\b/u' => 'ÜSTTEN',
+ '/'.self::WB.'КъЮШ'.self::WB.'/u' => 'QYŞ',
+ '/'.self::WB.'ЮШ'.self::WB.'/u' => 'YŞ',
+
+ '/'.self::WB.'кок'.self::WB.'/u' => 'kök',
+ '/'.self::WB.'Кок'.self::WB.'/u' => 'Kök',
+ '/'.self::WB.'КОК'.self::WB.'/u' => 'KÖK',
+ '/'.self::WB.'ком-кок'.self::WB.'/u' => 'köm-kök',
+ '/'.self::WB.'Ком-кок'.self::WB.'/u' => 'Köm-kök',
+ '/'.self::WB.'КОМ-КОК'.self::WB.'/u' => 'KÖM-KÖK',
+
+ '/'.self::WB.'коп'.self::WB.'/u' => 'köp',
+ '/'.self::WB.'Коп'.self::WB.'/u' => 'Köp',
+ '/'.self::WB.'КОП'.self::WB.'/u' => 'KÖP',
+
+ '/'.self::WB.'курк'.self::WB.'/u' => 'kürk',
+ '/'.self::WB.'Курк'.self::WB.'/u' => 'Kürk',
+ '/'.self::WB.'КУРК'.self::WB.'/u' => 'KÜRK',
+
+ '/'.self::WB.'ог'.self::WB.'/u' => 'ög',
+ '/'.self::WB.'Ог'.self::WB.'/u' => 'Ög',
+ '/'.self::WB.'ОГ'.self::WB.'/u' => 'ÖG',
+
+ '/'.self::WB.'юрип'.self::WB.'/u' => 'yürip',
+ '/'.self::WB.'Юрип'.self::WB.'/u' => 'Yürip',
+ '/'.self::WB.'ЮРИП'.self::WB.'/u' => 'YÜRİP',
+
+ '/'.self::WB.'юз'.self::WB.'/u' => 'yüz',
+ '/'.self::WB.'Юз'.self::WB.'/u' => 'Yüz',
+ '/'.self::WB.'ЮЗ'.self::WB.'/u' => 'YÜZ',
+
+ '/'.self::WB.'юк'.self::WB.'/u' => 'yük',
+ '/'.self::WB.'Юк'.self::WB.'/u' => 'Yük',
+ '/'.self::WB.'ЮК'.self::WB.'/u' => 'YÜK',
+
+ '/'.self::WB.'буюп'.self::WB.'/u' => 'büyüp',
+ '/'.self::WB.'Буюп'.self::WB.'/u' => 'Büyüp',
+ '/'.self::WB.'БУЮП'.self::WB.'/u' => 'BÜYÜP',
+
+ '/'.self::WB.'буюк'.self::WB.'/u' => 'büyük',
+ '/'.self::WB.'Буюк'.self::WB.'/u' => 'Büyük',
+ '/'.self::WB.'БУЮК'.self::WB.'/u' => 'BÜYÜK',
+
+ '/'.self::WB.'джонк'.self::WB.'/u' => 'cönk',
+ '/'.self::WB.'Джонк'.self::WB.'/u' => 'Cönk',
+ '/'.self::WB.'ДЖОНК'.self::WB.'/u' => 'CÖNK',
+ '/'.self::WB.'джонкю'.self::WB.'/u' => 'cönkü',
+ '/'.self::WB.'Джонкю'.self::WB.'/u' => 'Cönkü',
+ '/'.self::WB.'ДЖОНКЮ'.self::WB.'/u' => 'CÖNKÜ',
+
+ '/'.self::WB.'устке'.self::WB.'/u' => 'üstke',
+ '/'.self::WB.'Устке'.self::WB.'/u' => 'Üstke',
+ '/'.self::WB.'УСТКЕ'.self::WB.'/u' => 'ÜSTKE',
+ '/'.self::WB.'устте'.self::WB.'/u' => 'üstte',
+ '/'.self::WB.'Устте'.self::WB.'/u' => 'Üstte',
+ '/'.self::WB.'УСТТЕ'.self::WB.'/u' => 'ÜSTTE',
+ '/'.self::WB.'усттен'.self::WB.'/u' => 'üstten',
+ '/'.self::WB.'Усттен'.self::WB.'/u' => 'Üstten',
+ '/'.self::WB.'УСТТЕН'.self::WB.'/u' => 'ÜSTTEN',
# отдельно стоящие Ё и Я
# stand-alone Ё and Я
- '/\bЯ\b/u' => 'Ya',
- '/\bЁ\b/u' => 'Yo',
+ '/'.self::WB.'Я'.self::WB.'/u' => 'Ya',
+ '/'.self::WB.'Ё'.self::WB.'/u' => 'Yo',
############################
# относятся к началу слова #
# word prefixes #
############################
- '/\bКъЮШн/u' => 'QYŞn',
- '/\bЮШн/u' => 'YŞn',
+ '/'.self::WB.'КъЮШн/u' => 'QYŞn',
+ '/'.self::WB.'ЮШн/u' => 'YŞn',
# need to convert digraphs (гъ, къ, нъ, дж) now to match patterns
'/гъ/u' => 'ğ',
'/Д[жЖ]/u' => 'C',
# о => ö
- '/\b(['.Crh::C_M_CONS.'])о(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => '$1ö$2$3$4',
- '/\bо(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ö$1$2$3',
- '/\b(['.Crh::C_M_CONS.'])О(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' =>
- '$1Ö$2$3$4',
- '/\bО(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ö$1$2$3',
-
- '/\b(['.Crh::C_M_CONS.'])о(['.Crh::C_CONS.'])([еиэюьü])/u' => '$1ö$2$3',
- '/\bо(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ö$1$2',
- '/\b(['.Crh::C_M_CONS.'])О(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => '$1Ö$2$3',
- '/\bО(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ö$1$2',
+ '/'.self::WB.'(['.Crh::C_M_CONS.'])о(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u'
+ => '$1ö$2$3$4',
+ '/'.self::WB.'о(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ö$1$2$3',
+ '/'.self::WB.'(['.Crh::C_M_CONS.'])О(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u'
+ => '$1Ö$2$3$4',
+ '/'.self::WB.'О(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ö$1$2$3',
+
+ '/'.self::WB.'(['.Crh::C_M_CONS.'])о(['.Crh::C_CONS.'])([еиэюьü])/u' => '$1ö$2$3',
+ '/'.self::WB.'о(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ö$1$2',
+ '/'.self::WB.'(['.Crh::C_M_CONS.'])О(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => '$1Ö$2$3',
+ '/'.self::WB.'О(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ö$1$2',
# ё => yö
- '/\bё(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([ьеюü])/u' => 'yö$1$2$3',
- '/\bЁ(['.Crh::C_CONS_LC.'])(['.Crh::C_CONS_LC.'])([ьеюü])/u' => 'Yö$1$2$3',
- '/\bЁ(['.Crh::C_CONS_UC.'])(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => 'YÖ$1$2$3',
- '/\bё(['.Crh::C_CONS.'])([ьеюü])/u' => 'yö$1$2',
- '/\bЁ(['.Crh::C_CONS_LC.'])([ьеюü])/u' => 'Yö$1$2',
- '/\bЁ(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => 'YÖ$1$2',
+ '/'.self::WB.'ё(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([ьеюü])/u' => 'yö$1$2$3',
+ '/'.self::WB.'Ё(['.Crh::C_CONS_LC.'])(['.Crh::C_CONS_LC.'])([ьеюü])/u' => 'Yö$1$2$3',
+ '/'.self::WB.'Ё(['.Crh::C_CONS_UC.'])(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => 'YÖ$1$2$3',
+ '/'.self::WB.'ё(['.Crh::C_CONS.'])([ьеюü])/u' => 'yö$1$2',
+ '/'.self::WB.'Ё(['.Crh::C_CONS_LC.'])([ьеюü])/u' => 'Yö$1$2',
+ '/'.self::WB.'Ё(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => 'YÖ$1$2',
# у => ü, ую => üyü
- '/\b(['.Crh::C_M_CONS.'])у(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => '$1ü$2$3$4',
- '/\bу(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ü$1$2$3',
- '/\bую(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'üyü$1$2$3',
- '/\b(['.Crh::C_M_CONS.'])У(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' =>
- '$1Ü$2$3$4',
- '/\bУ(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ü$1$2$3',
- '/\bУю(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'Üyü$1$2$3',
- '/\bУЮ(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ÜYÜ$1$2$3',
-
- '/\b(['.Crh::C_M_CONS.'])у(['.Crh::C_CONS.'])([еиэюьü])/u' => '$1ü$2$3',
- '/\bу(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ü$1$2',
- '/\bую(['.Crh::C_CONS.'])([еиэюьü])/u' => 'üyü$1$2',
- '/\b(['.Crh::C_M_CONS.'])У(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => '$1Ü$2$3',
- '/\bУ(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ü$1$2',
- '/\bУю(['.Crh::C_CONS.'])([еиэюьü])/u' => 'Üyü$1$2',
- '/\bУЮ(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ÜYÜ$1$2',
+ '/'.self::WB.'(['.Crh::C_M_CONS.'])у(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u'
+ => '$1ü$2$3$4',
+ '/'.self::WB.'у(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ü$1$2$3',
+ '/'.self::WB.'ую(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'üyü$1$2$3',
+ '/'.self::WB.'(['.Crh::C_M_CONS.'])У(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u'
+ => '$1Ü$2$3$4',
+ '/'.self::WB.'У(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ü$1$2$3',
+ '/'.self::WB.'Ую(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'Üyü$1$2$3',
+ '/'.self::WB.'УЮ(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ÜYÜ$1$2$3',
+
+ '/'.self::WB.'(['.Crh::C_M_CONS.'])у(['.Crh::C_CONS.'])([еиэюьü])/u' => '$1ü$2$3',
+ '/'.self::WB.'у(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ü$1$2',
+ '/'.self::WB.'ую(['.Crh::C_CONS.'])([еиэюьü])/u' => 'üyü$1$2',
+ '/'.self::WB.'(['.Crh::C_M_CONS.'])У(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => '$1Ü$2$3',
+ '/'.self::WB.'У(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ü$1$2',
+ '/'.self::WB.'Ую(['.Crh::C_CONS.'])([еиэюьü])/u' => 'Üyü$1$2',
+ '/'.self::WB.'УЮ(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ÜYÜ$1$2',
# ю => yü
- '/\b([аыоуеиёюАЫОУЕИЁЮ]?)ю(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([ьеюü])/u' => '$1yü$2$3$4',
- '/\b([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_LC.'])(['.Crh::C_CONS_LC.'])([ьеюü])/u' => '$1Yü$2$3$4',
- '/\b([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_UC.'])(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => '$1YÜ$2$3$4',
- '/\b([аыоуеиёюАЫОУЕИЁЮ]?)ю(['.Crh::C_CONS.'])([ьеюü])/u' => '$1yü$2$3',
- '/\b([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_LC.'])([ьеюü])/u' => '$1Yü$2$3',
- '/\b([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => '$1YÜ$2$3',
+ '/'.self::WB.'([аыоуеиёюАЫОУЕИЁЮ]?)ю(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([ьеюü])/u'
+ => '$1yü$2$3$4',
+ '/'.self::WB.'([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_LC.'])(['.Crh::C_CONS_LC.'])([ьеюü])/u'
+ => '$1Yü$2$3$4',
+ '/'.self::WB.'([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_UC.'])(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u'
+ => '$1YÜ$2$3$4',
+ '/'.self::WB.'([аыоуеиёюАЫОУЕИЁЮ]?)ю(['.Crh::C_CONS.'])([ьеюü])/u' => '$1yü$2$3',
+ '/'.self::WB.'([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_LC.'])([ьеюü])/u' => '$1Yü$2$3',
+ '/'.self::WB.'([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => '$1YÜ$2$3',
# e => ye, я => ya
- '/\bе/u' => 'ye',
- '/\bЕ(['.Crh::C_LC.'cğñqöü])/u' => 'Ye$1',
- '/\bЕ(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'YE$1',
- '/\bя/u' => 'ya',
- '/\bЯ(['.Crh::C_LC.'cğñqöü])/u' => 'Ya$1',
- '/\bЯ(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'YA$1',
+ '/'.self::WB.'е/u' => 'ye',
+ '/'.self::WB.'Е(['.Crh::C_LC.'cğñqöü])/u' => 'Ye$1',
+ '/'.self::WB.'Е(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'YE$1',
+ '/'.self::WB.'я/u' => 'ya',
+ '/'.self::WB.'Я(['.Crh::C_LC.'cğñqöü])/u' => 'Ya$1',
+ '/'.self::WB.'Я(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'YA$1',
'/([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])е/u' => '$1ye',
'/([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])Е(['.Crh::C_LC.'cğñqöü])/u' => '$1Ye$2',
'/([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])Е(['.Crh::C_UC.'CĞÑQÖÜ])/u' => '$1YE$2',
// TODO: refactor upper/lower/first capital whole words without
// regexes into simpler list
- '/\ban\b/u' => 'ань',
- '/\bAn\b/u' => 'Ань',
- '/\bAN\b/u' => 'АНЬ',
- '/\bange\b/u' => 'аньге',
- '/\bAnge\b/u' => 'Аньге',
- '/\bANGE\b/u' => 'АНЬГЕ',
- '/\bande\b/u' => 'аньде',
- '/\bAnde\b/u' => 'Аньде',
- '/\bANDE\b/u' => 'АНЬДЕ',
- '/\banki\b/u' => 'аньки',
- '/\bAnki\b/u' => 'Аньки',
- '/\bANKİ\b/u' => 'АНЬКИ',
- '/\bderal\b/u' => 'деръал',
- '/\bDeral\b/u' => 'Деръал',
- '/\bDERAL\b/u' => 'ДЕРЪАЛ',
- '/\bkör\b/u' => 'кёр',
- '/\bKör\b/u' => 'Кёр',
- '/\bKÖR\b/u' => 'КЁР',
- '/\bmer\b/u' => 'мэр',
- '/\bMer\b/u' => 'Мэр',
- '/\bMER\b/u' => 'МЭР',
-
- '/\bджонк/u' => 'cönk',
- '/\bДжонк/u' => 'Cönk',
- '/\bДЖОНК/u' => 'CÖNK',
-
- '/\bкуркчи/u' => 'kürkçi',
- '/\bКуркчи/u' => 'Kürkçi',
- '/\bКУРКЧИ/u' => 'KÜRKÇI',
+ '/'.self::WB.'an'.self::WB.'/u' => 'ань',
+ '/'.self::WB.'An'.self::WB.'/u' => 'Ань',
+ '/'.self::WB.'AN'.self::WB.'/u' => 'АНЬ',
+ '/'.self::WB.'ange'.self::WB.'/u' => 'аньге',
+ '/'.self::WB.'Ange'.self::WB.'/u' => 'Аньге',
+ '/'.self::WB.'ANGE'.self::WB.'/u' => 'АНЬГЕ',
+ '/'.self::WB.'ande'.self::WB.'/u' => 'аньде',
+ '/'.self::WB.'Ande'.self::WB.'/u' => 'Аньде',
+ '/'.self::WB.'ANDE'.self::WB.'/u' => 'АНЬДЕ',
+ '/'.self::WB.'anki'.self::WB.'/u' => 'аньки',
+ '/'.self::WB.'Anki'.self::WB.'/u' => 'Аньки',
+ '/'.self::WB.'ANKİ'.self::WB.'/u' => 'АНЬКИ',
+ '/'.self::WB.'deral'.self::WB.'/u' => 'деръал',
+ '/'.self::WB.'Deral'.self::WB.'/u' => 'Деръал',
+ '/'.self::WB.'DERAL'.self::WB.'/u' => 'ДЕРЪАЛ',
+ '/'.self::WB.'kör'.self::WB.'/u' => 'кёр',
+ '/'.self::WB.'Kör'.self::WB.'/u' => 'Кёр',
+ '/'.self::WB.'KÖR'.self::WB.'/u' => 'КЁР',
+ '/'.self::WB.'mer'.self::WB.'/u' => 'мэр',
+ '/'.self::WB.'Mer'.self::WB.'/u' => 'Мэр',
+ '/'.self::WB.'MER'.self::WB.'/u' => 'МЭР',
+
+ '/'.self::WB.'джонк/u' => 'cönk',
+ '/'.self::WB.'Джонк/u' => 'Cönk',
+ '/'.self::WB.'ДЖОНК/u' => 'CÖNK',
+
+ '/'.self::WB.'куркчи/u' => 'kürkçi',
+ '/'.self::WB.'Куркчи/u' => 'Kürkçi',
+ '/'.self::WB.'КУРКЧИ/u' => 'KÜRKÇI',
# буква Ё - первый заход
# расставляем Ь после согласных
- '/\b([yY])ö(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|\b)/u' => '$1ö$2ь$3',
- '/\b([yY])Ö(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|\b)/u' => '$1Ö$2Ь$3',
- '/\bAQŞ([^AEI]|\b)/u' => 'АКъШ$1',
+ '/'.self::WB.'([yY])ö(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|'.self::WB.')/u' => '$1ö$2ь$3',
+ '/'.self::WB.'([yY])Ö(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|'.self::WB.')/u' => '$1Ö$2Ь$3',
+ '/'.self::WB.'AQŞ([^AEI]|'.self::WB.')/u' => 'АКъШ$1',
# буква Ю - первый заход
# расставляем Ь после согласных
- '/\b([yY])ü(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|\b)/u' => '$1ü$2ь$3',
- '/\b([yY])Ü(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|\b)/u' => '$1Ü$2Ь$3',
-
- '/\b([bcgkpşBCGKPŞ])ö(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|\b)/u' => '$1ö$2ь$3',
- '/\b([bcgkpşBCGKPŞ])Ö(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|\b)/u' => '$1Ö$2Ь$3',
- '/\b([bcgkpşBCGKPŞ])Ö(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|\b)/u' => '$1Ö$2Ь$3',
- '/\b([bcgkpşBCGKPŞ])ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|\b)/u' => '$1ü$2ь$3',
- '/\b([bcgkpşBCGKPŞ])Ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|\b)/u' => '$1Ü$2Ь$3',
- '/\b([bcgkpşBCGKPŞ])Ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|\b)/u' => '$1Ü$2Ь$3',
+ '/'.self::WB.'([yY])ü(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|'.self::WB.')/u' => '$1ü$2ь$3',
+ '/'.self::WB.'([yY])Ü(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|'.self::WB.')/u' => '$1Ü$2Ь$3',
+
+ '/'.self::WB.'([bcgkpşBCGKPŞ])ö(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u'
+ => '$1ö$2ь$3',
+ '/'.self::WB.'([bcgkpşBCGKPŞ])Ö(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u'
+ => '$1Ö$2Ь$3',
+ '/'.self::WB.'([bcgkpşBCGKPŞ])Ö(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u'
+ => '$1Ö$2Ь$3',
+ '/'.self::WB.'([bcgkpşBCGKPŞ])ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u'
+ => '$1ü$2ь$3',
+ '/'.self::WB.'([bcgkpşBCGKPŞ])Ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u'
+ => '$1Ü$2Ь$3',
+ '/'.self::WB.'([bcgkpşBCGKPŞ])Ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u'
+ => '$1Ü$2Ь$3',
# ö и ü в начале слова
# случаи, когда нужен Ь
- '/\bö(['.Crh::L_N_CONS.'pP])(['.Crh::L_CONS.']|\b)/u' => 'ö$1ь$2',
- '/\bÖ(['.Crh::L_N_CONS_LC.'p])(['.Crh::L_CONS.']|\b)/u' => 'Ö$1ь$2',
- '/\bÖ(['.Crh::L_N_CONS_UC.'P])(['.Crh::L_CONS.']|\b)/u' => 'Ö$1Ь$2',
- '/\bü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|\b)/u' => 'ü$1ь$2',
- '/\bÜ(['.Crh::L_N_CONS_LC.'])(['.Crh::L_CONS.']|\b)/u' => 'Ü$1ь$2',
- '/\bÜ(['.Crh::L_N_CONS_UC.'])(['.Crh::L_CONS.']|\b)/u' => 'Ü$1Ь$2',
-
- '/ts\b/u' => 'ц',
- '/şç\b/u' => 'щ',
- '/Ş[çÇ]\b/u' => 'Щ',
- '/T[sS]\b/u' => 'Ц',
+ '/'.self::WB.'ö(['.Crh::L_N_CONS.'pP])(['.Crh::L_CONS.']|'.self::WB.')/u' => 'ö$1ь$2',
+ '/'.self::WB.'Ö(['.Crh::L_N_CONS_LC.'p])(['.Crh::L_CONS.']|'.self::WB.')/u' => 'Ö$1ь$2',
+ '/'.self::WB.'Ö(['.Crh::L_N_CONS_UC.'P])(['.Crh::L_CONS.']|'.self::WB.')/u' => 'Ö$1Ь$2',
+ '/'.self::WB.'ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|'.self::WB.')/u' => 'ü$1ь$2',
+ '/'.self::WB.'Ü(['.Crh::L_N_CONS_LC.'])(['.Crh::L_CONS.']|'.self::WB.')/u' => 'Ü$1ь$2',
+ '/'.self::WB.'Ü(['.Crh::L_N_CONS_UC.'])(['.Crh::L_CONS.']|'.self::WB.')/u' => 'Ü$1Ь$2',
+
+ '/ts'.self::WB.'/u' => 'ц',
+ '/şç'.self::WB.'/u' => 'щ',
+ '/Ş[çÇ]'.self::WB.'/u' => 'Щ',
+ '/T[sS]'.self::WB.'/u' => 'Ц',
# Ь после Л
# add Ь after Л
- '/(['.Crh::L_F.'])l(['.Crh::L_CONS_LC.']|\b)/u' => '$1ль$2',
- '/(['.Crh::L_F_UC.'])L(['.Crh::L_CONS.']|\b)/u' => '$1ЛЬ$2',
+ '/(['.Crh::L_F.'])l(['.Crh::L_CONS_LC.']|'.self::WB.')/u' => '$1ль$2',
+ '/(['.Crh::L_F_UC.'])L(['.Crh::L_CONS.']|'.self::WB.')/u' => '$1ЛЬ$2',
- '/etsin\b/u' => 'етсин',
- '/Etsin\b/u' => 'Етсин',
- '/ETSİN\b/u' => 'ЕТСИН',
+ '/etsin'.self::WB.'/u' => 'етсин',
+ '/Etsin'.self::WB.'/u' => 'Етсин',
+ '/ETSİN'.self::WB.'/u' => 'ЕТСИН',
# относятся к началу слова
- '/\bts/u' => 'ц',
- '/\bT[sS]/u' => 'Ц',
+ '/'.self::WB.'ts/u' => 'ц',
+ '/'.self::WB.'T[sS]/u' => 'Ц',
- '/\bşç/u' => 'щ',
- '/\bŞ[çÇ]/u' => 'Щ',
+ '/'.self::WB.'şç/u' => 'щ',
+ '/'.self::WB.'Ş[çÇ]/u' => 'Щ',
# Э
- '/(\b|['.Crh::L_VOW.'аеэяАЕЭЯ])e/u' => '$1э',
- '/(\b|['.Crh::L_VOW_UC.'АЕЭЯ])E/u' => '$1Э',
-
- '/\b(['.Crh::L_M_CONS.'])ö/u' => '$1о',
- '/\b(['.Crh::L_M_CONS.'])Ö/u' => '$1О',
- '/\b(['.Crh::L_M_CONS.'])ü/u' => '$1у',
- '/\b(['.Crh::L_M_CONS.'])Ü/u' => '$1У',
-
- '/\bö/u' => 'о',
- '/\bÖ/u' => 'О',
- '/\bü/u' => 'у',
- '/\bÜ/u' => 'У',
+ '/('.self::WB.'|['.Crh::L_VOW.'аеэяАЕЭЯ])e/u' => '$1э',
+ '/('.self::WB.'|['.Crh::L_VOW_UC.'АЕЭЯ])E/u' => '$1Э',
+
+ '/'.self::WB.'(['.Crh::L_M_CONS.'])ö/u' => '$1о',
+ '/'.self::WB.'(['.Crh::L_M_CONS.'])Ö/u' => '$1О',
+ '/'.self::WB.'(['.Crh::L_M_CONS.'])ü/u' => '$1у',
+ '/'.self::WB.'(['.Crh::L_M_CONS.'])Ü/u' => '$1У',
+
+ '/'.self::WB.'ö/u' => 'о',
+ '/'.self::WB.'Ö/u' => 'О',
+ '/'.self::WB.'ü/u' => 'у',
+ '/'.self::WB.'Ü/u' => 'У',
# некоторые исключения
# some exceptions
'Myuploads' => [ 'MisArchivosSubidos', 'Mis_archivos_subidos' ],
'Newimages' => [ 'NuevasImágenes', 'Nuevas_imágenes' ],
'Newpages' => [ 'PáginasNuevas', 'Páginas_nuevas' ],
+ 'PasswordPolicies' => [ 'Política_de_contraseñas' ],
'PasswordReset' => [ 'RestablecerContraseña', 'Restablecer_contraseña' ],
'PermanentLink' => [ 'EnlacePermanente', 'Enlace_permanente' ],
'Preferences' => [ 'Preferencias' ],
NS_CATEGORY => "Dalala",
NS_CATEGORY_TALK => "Lo'iya_dalala",
];
+
+$specialPageAliases = [
+ 'Activeusers' => [ 'TaOhu\'uwoAktif' ],
+ 'Allmessages' => [ 'Nga\'amilaTahuli' ],
+ 'AllMyUploads' => [ 'Nga\'amilaDiletohu\'u', 'Nga\'amilaBerkasi\'u' ],
+ 'Allpages' => [ 'Nga\'amilaHalaman' ],
+ 'ApiHelp' => [ 'ApiWubodu' ],
+ 'ApiSandbox' => [ 'ApiBakiLoHungayo' ],
+ 'Ancientpages' => [ 'HalamanMulolo' ],
+ 'AutoblockList' => [ 'AutoblockDaputari', 'DaputariAutoblocks' ],
+ 'Badtitle' => [ 'JudulMoleto' ],
+ 'Blankpage' => [ 'HalamanKosongi' ],
+ 'Block' => [ 'BlockTaOhu\'uwo' ],
+ 'Booksources' => [ 'BukuBungo' ],
+ 'BotPasswords' => [ 'BotTaheU\'unti' ],
+ 'BrokenRedirects' => [ 'BrokenLopobale' ],
+ 'Categories' => [ 'Dalala' ],
+ 'ChangeContentModel' => [ 'Boli\'aTuangoModel' ],
+ 'ChangeCredentials' => [ 'Boli\'aKredensial' ],
+ 'ChangeEmail' => [ 'Boli\'aEmail' ],
+ 'ChangePassword' => [ 'Boli\'aPassword', 'Tulo\'iPass', 'Tulo\'iPassword' ],
+ 'ComparePages' => [ 'PopotadengaHlaman' ],
+ 'Confirmemail' => [ 'KomfirmEmail' ],
+ 'Contributions' => [ 'Kontributor', 'Kontrib' ],
+ 'CreateAccount' => [ 'MohutuAkun' ],
+ 'Deadendpages' => [ 'HalamanBuntu' ],
+ 'DeletedContributions' => [ 'LulutaKontribusi' ],
+ 'DoubleRedirects' => [ 'DubuluRedirects' ],
+ 'EditTags' => [ 'Boli\'aTags' ],
+ 'EditWatchlist' => [ 'Boli\'aHeAwasiyalo' ],
+ 'Emailuser' => [ 'EmailTaOhu\'uwo', 'Email' ],
+ 'ExpandTemplates' => [ 'DuhengiTemplates' ],
+ 'Export' => [ 'Ekspor' ],
+ 'Fewestrevisions' => [ 'RevisiNgo\'idi' ],
+ 'FileDuplicateSearch' => [ 'LoloheBerkasDubulu' ],
+ 'GoToInterwiki' => [ 'NtaliOdeInterwiki' ],
+ 'Invalidateemail' => [ 'TilalaTanggalEmail' ],
+ 'BlockList' => [ 'BlockDaputari', 'DaputariBlocks', 'IPBlockDputari' ],
+ 'LinkSearch' => [ 'LoloheWumbuta' ],
+ 'LinkAccounts' => [ 'WumbutaAkun' ],
+ 'Listadmins' => [ 'DaputariAdmins' ],
+ 'Listbots' => [ 'DaputariBots' ],
+ 'Listfiles' => [ 'DaputariBerkas', 'BerkasDaputari', 'DaputariGambari' ],
+ 'Listgrouprights' => [ 'DaputariGroupRights', 'TaOhu\'uwoGroupRights' ],
+ 'Listgrants' => [ 'DaputariGrants' ],
+ 'Listredirects' => [ 'DaputariLopobale' ],
+ 'ListDuplicatedFiles' => [ 'DaputariBerkasDubulu', 'DaputariBerkasDubulu' ],
+ 'Listusers' => [ 'DaputariTaOhu\'uwo', 'TaOhu\'uwoDaputari' ],
+ 'Lonelypages' => [ 'HalamanTutuwawu', 'OrphanedHalaman' ],
+ 'Longpages' => [ 'HalamanHayahaya\'o' ],
+ 'MediaStatistics' => [ 'MediaStatistik' ],
+ 'MIMEsearch' => [ 'MIMELolohe' ],
+ 'Mostcategories' => [ 'DalalaUda\'a' ],
+ 'Mostimages' => [ 'WumbutaBerkasUda\'a', 'BerkasUda\'a', 'GambariUdara' ],
+ 'Mostinterwikis' => [ 'InterwikiUda\'a' ],
+ 'Mostlinked' => [ 'HalamanWumbutaUda\'a', 'WumbutaUda\'a' ],
+ 'Mostlinkedcategories' => [ 'WumbutaDalalaUda\'a', 'DalalaUda\'aPilomake' ],
+ 'Mostlinkedtemplates' => [ 'HalamanTranscludedUda\'a', 'WumbutaUda\'aTemplate', 'TemplateUda\'aPilomake' ],
+ 'Mostrevisions' => [ 'Boli\'oUda\'a' ],
+ 'Movepage' => [ 'MoheyiHalaman' ],
+ 'Mycontributions' => [ 'Kontribusi\'u' ],
+ 'MyLanguage' => [ 'Bahasa\'u' ],
+ 'Mypage' => [ 'Halamani\'u' ],
+ 'Mytalk' => [ 'Lo\'iya\'u' ],
+ 'Myuploads' => [ 'Diletohu\'u', 'Berkasi\'u' ],
+ 'Newimages' => [ 'BerkasBohu', 'GambariBaohu' ],
+ 'Newpages' => [ 'HalamanBohu' ],
+ 'PagesWithProp' => [ 'PagesWithProp', 'Pageswithprop', 'PagesByProp', 'Pagesbyprop' ],
+ 'PageData' => [ 'DataHalaman' ],
+ 'PageLanguage' => [ 'BahasaHalaman' ],
+ 'PasswordReset' => [ 'ResetTaheU\'unti' ],
+ 'PermanentLink' => [ 'WumbutaKakali', 'WumbKakali' ],
+ 'Preferences' => [ 'Preperensi' ],
+ 'Prefixindex' => [ 'PrefixIndeks' ],
+ 'Protectedpages' => [ 'HalamanOdudaha' ],
+ 'Protectedtitles' => [ 'JudulOdudaha' ],
+ 'Randompage' => [ 'Totonula', 'HalamanTotonula' ],
+ 'RandomInCategory' => [ 'TotonulaLoDalala' ],
+ 'Randomredirect' => [ 'TotonulaMopobale' ],
+ 'Randomrootpage' => [ 'TotonulaRootpage' ],
+ 'Recentchanges' => [ 'BoheliLoboli\'aMola' ],
+ 'Recentchangeslinked' => [ 'WumbutaBoheliLoboli\'aMola', 'RelatedLoboli\'a' ],
+ 'Redirect' => [ 'Mopobale' ],
+ 'RemoveCredentials' => [ 'YinggilaKredensial' ],
+ 'Revisiondelete' => [ 'MolulutoRevisi' ],
+ 'Search' => [ 'Lolohe' ],
+ 'Shortpages' => [ 'HalamanLimbu\'o' ],
+ 'Specialpages' => [ 'HalamanSpesial' ],
+ 'Statistics' => [ 'Statistik', 'Stat' ],
+ 'TrackingCategories' => [ 'TrackingDalala' ],
+ 'Uncategorizedcategories' => [ 'DalalaJaOdalala' ],
+ 'Uncategorizedimages' => [ 'BerkasJaOdalala', 'GambariJaOdalala' ],
+ 'Uncategorizedpages' => [ 'HalamanJaOdalala' ],
+ 'Uncategorizedtemplates' => [ 'TemplateJaOdalala' ],
+ 'Undelete' => [ 'BataliMoluluto' ],
+ 'UnlinkAccounts' => [ 'BataliyaWumbutaLoAkun' ],
+ 'Unusedcategories' => [ 'DalalaJaPilomake' ],
+ 'Unusedimages' => [ 'BerkasJaPilomake', 'GambariJaPilomake' ],
+ 'Unusedtemplates' => [ 'TemplateJaPilomake' ],
+ 'Unwatchedpages' => [ 'HalamanJaOdudaha' ],
+ 'Upload' => [ 'Detohe' ],
+ 'UploadStash' => [ 'DetoheStash' ],
+ 'Userlogin' => [ 'TumuwotoTaOhu\'uwo', 'Tumuwoto' ],
+ 'Userlogout' => [ 'LumuwaloTaOhu\'uwo', 'Lumuwalo' ],
+ 'Version' => [ 'Versi' ],
+ 'Wantedcategories' => [ 'DalalaOtohilawo' ],
+ 'Wantedfiles' => [ 'BerkasOtohilawo' ],
+ 'Wantedpages' => [ 'HalamanOtohilawo', 'WumbutaLorusa' ],
+ 'Wantedtemplates' => [ 'TemplateOtohilawo' ],
+ 'Watchlist' => [ 'DaputariHe\'awasiyalo' ],
+ 'Whatlinkshere' => [ 'WoloWumbutaTeye' ],
+ 'Withoutinterwiki' => [ 'Diya\'aInterwiki' ]
+];
'mediawiki.skinning.content.externallinks' => [
'styles' => [
- 'resources/src/mediawiki.skinning/content.externallinks.css' => [ 'media' => 'screen' ],
+ 'resources/src/mediawiki.skinning/content.externallinks.less' => [ 'media' => 'screen' ],
],
],
'jquery.expandableField' => [
'scripts' => 'resources/src/jquery/jquery.expandableField.js',
],
- 'jquery.farbtastic' => [
- 'scripts' => 'resources/src/jquery/jquery.farbtastic.js',
- 'styles' => 'resources/src/jquery/jquery.farbtastic.css',
- 'dependencies' => 'jquery.colorUtil',
- ],
'jquery.form' => [
'scripts' => 'resources/lib/jquery/jquery.form.js',
],
+++ /dev/null
-/**
- * Farbtastic Color Picker 1.2
- * © 2008 Steven Wittens
- *
- * 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
- */
-.farbtastic {
- position: relative;
-}
-.farbtastic * {
- position: absolute;
- cursor: crosshair;
-}
-.farbtastic,
-.farbtastic .wheel {
- width: 195px;
- height: 195px;
-}
-.farbtastic .color,
-.farbtastic .overlay {
- top: 47px;
- left: 47px;
- width: 101px;
- height: 101px;
-}
-.farbtastic .wheel {
- /* @embed */
- background: url( images/wheel.png ) no-repeat;
- width: 195px;
- height: 195px;
-}
-.farbtastic .overlay {
- /* @embed */
- background: url( images/mask.png ) no-repeat;
-}
-.farbtastic .marker {
- width: 17px;
- height: 17px;
- margin: -8px 0 0 -8px;
- overflow: hidden;
- /* @embed */
- background: url( images/marker.png ) no-repeat;
-}
+++ /dev/null
-/**
- * Farbtastic Color Picker 1.2
- * © 2008 Steven Wittens
- *
- * 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
- */
-
-//Adapted to uniform style with jQuery UI widgets and slightly change behavior
-//TODO:
-// - remove duplicated code by replacing it with jquery.colorUtils and modern jQuery
-// - uniform code style
-
-jQuery.fn.farbtastic = function (callback) {
- $.farbtastic(this, callback);
- return this;
-};
-
-jQuery.farbtastic = function (container, callback) {
- var container = $(container).get(0);
- return container.farbtastic || (container.farbtastic = new jQuery._farbtastic(container, callback));
-}
-
-jQuery._farbtastic = function (container, callback) {
- // Store farbtastic object
- var fb = this;
-
- // Insert markup
- $(container).html('<div class="farbtastic ui-widget-content"><div class="color"></div><div class="wheel"></div><div class="overlay"></div><div class="h-marker marker"></div><div class="sl-marker marker"></div></div>');
- $(container).addClass('ui-widget');
- var e = $('.farbtastic', container);
- fb.wheel = $('.wheel', container).get(0);
- // Dimensions
- fb.radius = 84;
- fb.square = 100;
- fb.width = 194;
-
- // Fix background PNGs in IE6
- if (navigator.appVersion.match(/MSIE [0-6]\./)) {
- $('*', e).each(function () {
- if (this.currentStyle.backgroundImage != 'none') {
- var image = this.currentStyle.backgroundImage;
- image = this.currentStyle.backgroundImage.slice(5, image.length - 2);
- $(this).css( {
- backgroundImage: 'none',
- filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"
- } );
- }
- });
- }
-
- /**
- * Link to the given element(s) or callback.
- */
- fb.linkTo = function (callback) {
- // Unbind previous nodes
- if (typeof fb.callback == 'object') {
- $(fb.callback).unbind('keyup', fb.updateValue);
- }
-
- // Reset color
- fb.color = null;
-
- // Bind callback or elements
- if (typeof callback == 'function') {
- fb.callback = callback;
- }
- else if (typeof callback == 'object' || typeof callback == 'string') {
- fb.callback = $(callback);
- fb.callback.bind('keyup', fb.updateValue);
- if (fb.callback.get(0).value) {
- fb.setColor(fb.callback.get(0).value);
- }
- }
- return this;
- }
- fb.updateValue = function (event) {
- if (this.value != fb.color) {
- fb.setColor(this.value);
- }
- }
-
- /**
- * Change color with HTML syntax #123456
- */
- fb.setColor = function (color) {
- var rgb = $.colorUtil.getRGB( color );
- if (fb.color != color && rgb) {
- rgb = rgb.slice( 0 ); //make a clone
- //TODO: rewrite code so that this is not needed
- rgb[0] /= 255;
- rgb[1] /= 255;
- rgb[2] /= 255;
- fb.color = color;
- fb.rgb = rgb;
- fb.hsl = fb.RGBToHSL(fb.rgb);
- fb.updateDisplay();
- }
- return this;
- }
-
- /**
- * Change color with HSL triplet [0..1, 0..1, 0..1]
- */
- fb.setHSL = function (hsl) {
- fb.hsl = hsl;
- fb.rgb = fb.HSLToRGB(hsl);
- fb.color = fb.pack(fb.rgb);
- fb.updateDisplay();
- return this;
- }
-
- /////////////////////////////////////////////////////
-
- /**
- * Retrieve the coordinates of the given event relative to the center
- * of the widget.
- */
- fb.widgetCoords = function (event) {
- var ref = $( fb.wheel ).offset();
- return {
- x: event.pageX - ref.left - fb.width / 2,
- y: event.pageY - ref.top - fb.width / 2
- };
- }
-
- /**
- * Mousedown handler
- */
- fb.mousedown = function (event) {
- // Capture mouse
- if (!document.dragging) {
- $(document).bind('mousemove', fb.mousemove).bind('mouseup', fb.mouseup);
- document.dragging = true;
- }
-
- // Check which area is being dragged
- var pos = fb.widgetCoords(event);
- fb.circleDrag = Math.max(Math.abs(pos.x), Math.abs(pos.y)) * 2 > fb.square;
-
- // Process
- fb.mousemove(event);
- return false;
- }
-
- /**
- * Mousemove handler
- */
- fb.mousemove = function (event) {
- // Get coordinates relative to color picker center
- var pos = fb.widgetCoords(event);
-
- // Set new HSL parameters
- if (fb.circleDrag) {
- var hue = Math.atan2(pos.x, -pos.y) / 6.28;
- if (hue < 0) hue += 1;
- fb.setHSL([hue, fb.hsl[1], fb.hsl[2]]);
- }
- else {
- var sat = Math.max(0, Math.min(1, -(pos.x / fb.square) + .5));
- var lum = Math.max(0, Math.min(1, -(pos.y / fb.square) + .5));
- fb.setHSL([fb.hsl[0], sat, lum]);
- }
- return false;
- }
-
- /**
- * Mouseup handler
- */
- fb.mouseup = function () {
- // Uncapture mouse
- $(document).unbind('mousemove', fb.mousemove);
- $(document).unbind('mouseup', fb.mouseup);
- document.dragging = false;
- }
-
- /**
- * Update the markers and styles
- */
- fb.updateDisplay = function () {
- // Markers
- var angle = fb.hsl[0] * 6.28;
- $('.h-marker', e).css({
- left: Math.round(Math.sin(angle) * fb.radius + fb.width / 2) + 'px',
- top: Math.round(-Math.cos(angle) * fb.radius + fb.width / 2) + 'px'
- });
-
- $('.sl-marker', e).css({
- left: Math.round(fb.square * (.5 - fb.hsl[1]) + fb.width / 2) + 'px',
- top: Math.round(fb.square * (.5 - fb.hsl[2]) + fb.width / 2) + 'px'
- });
-
- // Saturation/Luminance gradient
- $('.color', e).css('backgroundColor', fb.pack(fb.HSLToRGB([fb.hsl[0], 1, 0.5])));
-
- // Linked elements or callback
- if (typeof fb.callback == 'object') {
- // Set background/foreground color
- $(fb.callback).css({
- backgroundColor: fb.color,
- color: fb.hsl[2] > 0.5 ? '#000' : '#fff'
- });
-
- // Change linked value
- $(fb.callback).each(function() {
- if ( $( this ).val() != fb.color) {
- $( this ).val( fb.color ).change();
- }
- });
- }
- else if (typeof fb.callback == 'function') {
- fb.callback.call(fb, fb.color);
- }
- }
-
- /* Various color utility functions */
- fb.pack = function (rgb) {
- var r = Math.round(rgb[0] * 255);
- var g = Math.round(rgb[1] * 255);
- var b = Math.round(rgb[2] * 255);
- return '#' + (r < 16 ? '0' : '') + r.toString(16) +
- (g < 16 ? '0' : '') + g.toString(16) +
- (b < 16 ? '0' : '') + b.toString(16);
- }
-
- fb.HSLToRGB = function (hsl) {
- var m1, m2, r, g, b;
- var h = hsl[0], s = hsl[1], l = hsl[2];
- m2 = (l <= 0.5) ? l * (s + 1) : l + s - l*s;
- m1 = l * 2 - m2;
- return [this.hueToRGB(m1, m2, h+0.33333),
- this.hueToRGB(m1, m2, h),
- this.hueToRGB(m1, m2, h-0.33333)];
- }
-
- fb.hueToRGB = function (m1, m2, h) {
- h = (h < 0) ? h + 1 : ((h > 1) ? h - 1 : h);
- if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;
- if (h * 2 < 1) return m2;
- if (h * 3 < 2) return m1 + (m2 - m1) * (0.66666 - h) * 6;
- return m1;
- }
-
- fb.RGBToHSL = function (rgb) {
- var min, max, delta, h, s, l;
- var r = rgb[0], g = rgb[1], b = rgb[2];
- min = Math.min(r, Math.min(g, b));
- max = Math.max(r, Math.max(g, b));
- delta = max - min;
- l = (min + max) / 2;
- s = 0;
- if (l > 0 && l < 1) {
- s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l));
- }
- h = 0;
- if (delta > 0) {
- if (max == r && max != g) h += (g - b) / delta;
- if (max == g && max != b) h += (2 + (b - r) / delta);
- if (max == b && max != r) h += (4 + (r - g) / delta);
- h /= 6;
- }
- return [h, s, l];
- }
-
- // Install mousedown handler (the others are set on the document on-demand)
- $('*', e).mousedown(fb.mousedown);
-
- // Init color
- fb.setColor('#000000');
-
- // Set linked elements/callback
- if (callback) {
- fb.linkTo(callback);
- }
-}
+++ /dev/null
-/*!
- * Icons and colors for external links.
- */
-
-/* T68091 is blocking is from converting this file to LESS
- * and using the .background-image-svg mixin. */
-
-/* SVG support using a transparent gradient to guarantee cross-browser
- * compatibility ( browsers able to understand gradient syntax support also SVG ).
- * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
-
-.mw-parser-output a.external,
-.link-https {
- background: url( images/external-ltr.png ) center right no-repeat;
- /* @embed */
- background-image: -webkit-linear-gradient( transparent, transparent ), url( images/external-ltr.svg );
- /* @embed */
- background-image: linear-gradient( transparent, transparent ), url( images/external-ltr.svg );
- padding-right: 13px;
-}
-
-.mw-parser-output a.external[ href^='mailto:' ],
-.link-mailto {
- background: url( images/mail.png ) center right no-repeat;
- /* @embed */
- background-image: linear-gradient( transparent, transparent ), url( images/mail.svg );
- padding-right: 13px;
-}
-
-.mw-parser-output a.external[ href^='ftp://' ],
-.link-ftp {
- background: url( images/ftp-ltr.png ) center right no-repeat;
- /* @embed */
- background-image: linear-gradient( transparent, transparent ), url( images/ftp-ltr.svg );
- padding-right: 13px;
-}
-
-.mw-parser-output a.external[ href^='irc://' ],
-.mw-parser-output a.external[ href^='ircs://' ],
-.link-irc {
- background: url( images/chat-ltr.png ) center right no-repeat;
- /* @embed */
- background-image: linear-gradient( transparent, transparent ), url( images/chat-ltr.svg );
- padding-right: 13px;
-}
-
-.mw-parser-output a.external[ href$='.ogg' ],
-.mw-parser-output a.external[ href$='.OGG' ],
-.mw-parser-output a.external[ href$='.mid' ],
-.mw-parser-output a.external[ href$='.MID' ],
-.mw-parser-output a.external[ href$='.midi' ],
-.mw-parser-output a.external[ href$='.MIDI' ],
-.mw-parser-output a.external[ href$='.mp3' ],
-.mw-parser-output a.external[ href$='.MP3' ],
-.mw-parser-output a.external[ href$='.wav' ],
-.mw-parser-output a.external[ href$='.WAV' ],
-.mw-parser-output a.external[ href$='.wma' ],
-.mw-parser-output a.external[ href$='.WMA' ],
-.link-audio {
- background: url( images/audio-ltr.png ) center right no-repeat;
- /* @embed */
- background-image: linear-gradient( transparent, transparent ), url( images/audio-ltr.svg );
- padding-right: 13px;
-}
-
-.mw-parser-output a.external[ href$='.ogm' ],
-.mw-parser-output a.external[ href$='.OGM' ],
-.mw-parser-output a.external[ href$='.avi' ],
-.mw-parser-output a.external[ href$='.AVI' ],
-.mw-parser-output a.external[ href$='.mpeg' ],
-.mw-parser-output a.external[ href$='.MPEG' ],
-.mw-parser-output a.external[ href$='.mpg' ],
-.mw-parser-output a.external[ href$='.MPG' ],
-.link-video {
- background: url( images/video.png ) center right no-repeat;
- /* @embed */
- background-image: linear-gradient( transparent, transparent ), url( images/video.svg );
- padding-right: 13px;
-}
-
-.mw-parser-output a.external[ href$='.pdf' ],
-.mw-parser-output a.external[ href$='.PDF' ],
-.mw-parser-output a.external[ href*='.pdf#' ],
-.mw-parser-output a.external[ href*='.PDF#' ],
-.mw-parser-output a.external[ href*='.pdf?' ],
-.mw-parser-output a.external[ href*='.PDF?' ],
-.link-document {
- background: url( images/document-ltr.png ) center right no-repeat;
- /* @embed */
- background-image: linear-gradient( transparent, transparent ), url( images/document-ltr.svg );
- padding-right: 13px;
-}
-
-/* Interwiki styling */
-.mw-parser-output a.extiw,
-.mw-parser-output a.extiw:active {
- color: #36b;
-}
-
-/* External link color */
-.mw-parser-output a.external {
- color: #36b;
-}
--- /dev/null
+/*!
+ * Icons and colors for external links.
+ */
+
+@import 'mediawiki.mixins';
+
+.mw-parser-output a.external,
+.link-https {
+ background-position: center right;
+ background-repeat: no-repeat;
+ .background-image-svg( 'images/external-ltr.svg', 'images/external-ltr.png' );
+ padding-right: 13px;
+}
+
+.mw-parser-output a.external[ href^='mailto:' ],
+.link-mailto {
+ background-position: center right;
+ background-repeat: no-repeat;
+ .background-image-svg( 'images/mail.svg', 'images/mail.png' );
+ padding-right: 13px;
+}
+
+.mw-parser-output a.external[ href^='ftp://' ],
+.link-ftp {
+ background-position: center right;
+ background-repeat: no-repeat;
+ .background-image-svg( 'images/ftp-ltr.svg', 'images/ftp-ltr.png' );
+ padding-right: 13px;
+}
+
+.mw-parser-output a.external[ href^='irc://' ],
+.mw-parser-output a.external[ href^='ircs://' ],
+.link-irc {
+ background-position: center right;
+ background-repeat: no-repeat;
+ .background-image-svg( 'images/chat-ltr.svg', 'images/chat-ltr.png' );
+ padding-right: 13px;
+}
+
+.mw-parser-output a.external[ href$='.ogg' ],
+.mw-parser-output a.external[ href$='.OGG' ],
+.mw-parser-output a.external[ href$='.mid' ],
+.mw-parser-output a.external[ href$='.MID' ],
+.mw-parser-output a.external[ href$='.midi' ],
+.mw-parser-output a.external[ href$='.MIDI' ],
+.mw-parser-output a.external[ href$='.mp3' ],
+.mw-parser-output a.external[ href$='.MP3' ],
+.mw-parser-output a.external[ href$='.wav' ],
+.mw-parser-output a.external[ href$='.WAV' ],
+.mw-parser-output a.external[ href$='.wma' ],
+.mw-parser-output a.external[ href$='.WMA' ],
+.link-audio {
+ background-position: center right;
+ background-repeat: no-repeat;
+ .background-image-svg( 'images/audio-ltr.svg', 'images/audio-ltr.png' );
+ padding-right: 13px;
+}
+
+.mw-parser-output a.external[ href$='.ogm' ],
+.mw-parser-output a.external[ href$='.OGM' ],
+.mw-parser-output a.external[ href$='.avi' ],
+.mw-parser-output a.external[ href$='.AVI' ],
+.mw-parser-output a.external[ href$='.mpeg' ],
+.mw-parser-output a.external[ href$='.MPEG' ],
+.mw-parser-output a.external[ href$='.mpg' ],
+.mw-parser-output a.external[ href$='.MPG' ],
+.link-video {
+ background-position: center right;
+ background-repeat: no-repeat;
+ .background-image-svg( 'images/video.svg', 'images/video.png' );
+ padding-right: 13px;
+}
+
+.mw-parser-output a.external[ href$='.pdf' ],
+.mw-parser-output a.external[ href$='.PDF' ],
+.mw-parser-output a.external[ href*='.pdf#' ],
+.mw-parser-output a.external[ href*='.PDF#' ],
+.mw-parser-output a.external[ href*='.pdf?' ],
+.mw-parser-output a.external[ href*='.PDF?' ],
+.link-document {
+ background-position: center right;
+ background-repeat: no-repeat;
+ .background-image-svg( 'images/document-ltr.svg', 'images/document-ltr.png' );
+ padding-right: 13px;
+}
+
+/* Interwiki styling */
+.mw-parser-output a.extiw,
+.mw-parser-output a.extiw:active {
+ color: #36b;
+}
+
+/* External link color */
+.mw-parser-output a.external {
+ color: #36b;
+}
mw.trackSubscribe( 'resourceloader.exception', logError );
mw.trackSubscribe( 'resourceloader.assert', logError );
- /**
- * Fired when all modules associated with the page have finished loading.
- *
- * @event resourceloader_loadEnd
- * @member mw.hook
- */
- $( function () {
- // Get a list of modules currently in loading state
- var modules = mw.loader.getModuleNames().filter( function ( module ) {
- return mw.loader.getState( module ) === 'loading';
- } );
- // Wait for them to complete loading (regardles of failures). First, try a single
- // mw.loader.using() call. That's efficient, but has the drawback of being rejected
- // upon first failure. Fall back to tracking each module separately. We usually avoid
- // that because of high overhead for that internally to mw.loader.
- mw.loader.using( modules ).catch( function () {
- return $.Deferred( function ( deferred ) {
- var i, count = modules.length;
- function decrement() {
- count--;
- if ( count === 0 ) {
- deferred.resolve();
- }
- }
- for ( i = 0; i < modules.length; i++ ) {
- mw.loader.using( modules[ i ] ).always( decrement );
- }
- } );
- } ).then( function () {
- if ( window.performance && performance.mark ) {
- performance.mark( 'mwLoadEnd' );
- }
- mw.hook( 'resourceloader.loadEnd' ).fire();
- } );
- } );
-
// Attach to window and globally alias
window.mw = window.mediaWiki = mw;
}( jQuery ) );
/**
* @covers LanguageCrh
* @covers CrhConverter
+ * @covers MediaWiki\Languages\Data\CrhExceptions
*/
class LanguageCrhTest extends LanguageClassesTestCase {
/**
],
'ДЖУРЬМЕК CÜRMEK кетсин ketsin джумлеси cümlesi ильи ilyi Ильи İlyi'
],
+ [ // recent problem words, part 7
+ [
+ 'crh' => 'бруцел brutsel коцюб kotsüb плацен platsen эпицентр epitsentr',
+ 'crh-cyrl' => 'бруцел бруцел коцюб коцюб плацен плацен эпицентр эпицентр',
+ 'crh-latn' => 'brutsel brutsel kotsüb kotsüb platsen platsen epitsentr epitsentr',
+ ],
+ 'бруцел brutsel коцюб kotsüb плацен platsen эпицентр epitsentr'
+ ],
[ // regex pattern words
[
'crh' => 'köyünden коюнден ange аньге',