WikiDer > MediaWiki: Common.js - Википедия
![]() | Это JavaScript для всех пользователей. Любые изменения на этой странице должны быть сначала предложены на ее страница обсуждения или Деревенский насос. Обратите внимание, что изменения видны в течение нескольких минут. Ошибки, которые вы здесь делаете, могут испортить всю энциклопедию, поэтому убедитесь, что вы знаете, что делаете. Тестирование можно провести на личном common.js или же файл JS для конкретного скина. |
/** * Сведите код в MediaWiki: Common.js к минимуму, поскольку это безусловно * загружается для всех пользователей на каждой странице вики. Если возможно, создайте гаджет, который * включен по умолчанию, а не здесь (так как гаджеты полностью * оптимизированы модули ResourceLoader с возможностью добавления зависимостей и т. д.) * * Поскольку Common.js не является гаджетом, его негде объявить * зависимости, поэтому мы должны лениво загружать их с помощью mw.loader.using по запросу и * затем выполнить остальное в обратном вызове. В большинстве случаев эти зависимости будут * быть загруженным (или загружающимся) уже, и обратный вызов не будет отложен. В случае если * dependency еще не прибыл, он позаботится о том, чтобы они были загружены до этого. *// * глобальный mw, $ * // * jshint strict: false, browser: true * /mw.грузчик.с помощью( [ 'mediawiki.util' ] ).сделано( функция () { / * Начало mw.loader. с использованием обратного вызова * / /*** Исправления в макете главной страницы ** Описание: добавляет дополнительную ссылку к полному списку доступных языков.* Сопровождающие: [[Пользователь: AzaToth]], [[Пользователь: R. Koot]], [[Пользователь: Alex Smotrov]] */ если ( mw.config.получать( 'wgPageName' ) === 'Главная страница' || mw.config.получать( 'wgPageName' ) === "Обсуждение: Main_Page" ) { $( функция () { mw.утилита.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias', 'Полный список', 'интервики-завершитель', 'Полный список Википедий' ); } ); } /*** Сопоставьте addPortletLink с mw.util* @deprecated: используйте вместо этого mw.util.addPortletLink. */ mw.бревно.осуждать( окно, 'addPortletLink', mw.утилита.addPortletLink, 'Используйте вместо этого mw.util.addPortletLink' ); /*** Извлечь параметр URL из текущего URL* @deprecated: используйте mw.util.getParamValue с правильным экранированием */ mw.бревно.осуждать( окно, 'getURLParamValue', mw.утилита.getParamValue, 'Используйте вместо этого mw.util.getParamValue' ); /*** Проверить, есть ли у элемента определенный класс* @deprecated: используйте вместо этого $ (element) .hasClass (). */ mw.бревно.осуждать( окно, 'hasClass', функция ( элемент, className ) { возвращаться $( элемент ).hasClass( className ); }, 'Вместо этого используйте jQuery.hasClass ()' ); /*** @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL* @rev 6 */ вар extraCSS = mw.утилита.getParamValue( 'withCSS' ), extraJS = mw.утилита.getParamValue( 'withJS' ); если ( extraCSS ) { если ( extraCSS.матч( /^MediaWiki:[^&<>=%# ]*.css$/ ) ) { mw.грузчик.нагрузка( '/w/index.php?title=' + extraCSS + '& action = raw & ctype = text / css', 'текст / CSS' ); } еще { mw.уведомлять( «Разрешены только страницы из пространства имен MediaWiki»., { заглавие: "Недействительное значение withCSS" } ); } } если ( extraJS ) { если ( extraJS.матч( /^MediaWiki:[^&<>=%# ]*.js$/ ) ) { mw.грузчик.нагрузка( '/w/index.php?title=' + extraJS + '& action = raw & ctype = text / javascript' ); } еще { mw.уведомлять( «Разрешены только страницы из пространства имен MediaWiki»., { заглавие: 'Недействительное значение withJS' } ); } } /*** WikiMiniAtlas ** Описание: WikiMiniAtlas - это всплывающая карта мира, которую нужно перетаскивать.* Этот скрипт заставляет все наши координатные ссылки отображать всплывающую кнопку WikiMiniAtlas.* Сам скрипт расположен на мета, потому что он используется многими проектами.* См. [[Meta: WikiMiniAtlas]] для получения дополнительной информации.* Примечание - использование этой службы рекомендуется заменить на mw: Help: Extension: Kartographer */ $( функция () { вар requireWikiminiatlas = $( 'a.external.text [href * = "geohack"]' ).длина || $( 'div.kmldata' ).длина; если ( requireWikiminiatlas ) { mw.грузчик.нагрузка( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript' ); } } ); /*** Разборные столы; дополнен mw-разборной* Стиль также предусмотрен, чтобы избежать FOUC ** Позволяет сворачивать таблицы, показывая только заголовок. См. [[Справка: сворачивание]].* @version 3.0.0 (20.05.2018)* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js* @author [[Пользователь: R. Koot]]* @author [[Пользователь: Krinkle]]* @author [[Пользователь: TheDJ]]* @deprecated Начиная с MediaWiki 1.20: используйте class = "mw-collapsible" вместо* поддерживается ядром MediaWiki. Shimmable, начиная с MediaWiki 1.32 ** @param {jQuery} $ content */ функция makeCollapsibleMwCollapsible( $ content ) { вар $ столы = $ content .найти( 'table.collapsible: not (.mw-collapsible)' ) .addClass( 'mw-складной' ); $.каждый( $ столы, функция ( индекс, стол ) { // mw.log.warn ('На этой странице используется устаревший класс сворачиваемый. Замените его на mw-collapsible.'); если ( $( стол ).hasClass( 'рухнул' ) ) { $( стол ).addClass( 'mw-collapsed' ); // mw.log.warn ('Эта страница использует свернутый устаревший класс. Пожалуйста, замените его на mw-collapsed.'); } } ); если ( $ столы.длина > 0 ) { mw.грузчик.с помощью( 'jquery.makeCollapsible' ).тогда( функция () { $ столы.makeCollapsible(); } ); } } mw.крюк( 'wikipage.content' ).Добавить( makeCollapsibleMwCollapsible ); /*** Добавлена поддержка в mw-collapsible для autocollapse, innercollapse и externalcollapse. ** Сопровождающие: TheDJ */ функция mwCollapsibleSetup( $ collapsibleContent ) { вар $ element, $ toggle, autoCollapseThreshold = 2; $.каждый( $ collapsibleContent, функция ( индекс, элемент ) { $ element = $( элемент ); если ( $ element.hasClass( 'складной' ) ) { $ element.найти( 'tr: first> th: first' ).добавить( $ element.найти( 'tr: first> *> .mw-collapsible-toggle' ) ); } если ( $ collapsibleContent.длина >= autoCollapseThreshold && $ element.hasClass( 'autocollapse' ) ) { $ element.данные( 'mw-складной' ).крах(); } еще если ( $ element.hasClass( 'внутренний коллапс' ) ) { если ( $ element.родители( '.outercollapse' ).длина > 0 ) { $ element.данные( 'mw-складной' ).крах(); } } // из-за цветного фона стилизуем ссылку в цвет текста // чтобы обеспечить доступный контраст $ toggle = $ element.найти( '.mw-сворачиваемый-переключатель' ); если ( $ toggle.длина ) { // Заставляем переключатель наследовать цвет текста если ( $ toggle.родитель()[ 0 ].стиль.цвет ) { $ toggle.найти( 'а' ).css( 'цвет', 'наследовать' ); } } } ); } mw.крюк( 'wikipage.collapsibleContent' ).Добавить( mwCollapsibleSetup ); /*** Динамические панели навигации (экспериментальные) ** Описание: см. [[Wikipedia: NavFrame]].* Сопровождающие: НЕ ПОДДЕРЖИВАЕТСЯ */ вар collapseCaption = 'Спрятать'; вар expandCaption = 'Показать'; // Настраиваем слова на вашем языке вар NavigationBarСкрыть = '[' + collapseCaption + ']'; вар navigationBarShow = '[' + expandCaption + ']'; /*** Показывает и скрывает содержимое и изображение (если доступно) панелей навигации. ** @param {number} indexNavigationBar Индекс панели навигации, которую нужно переключить* @param {jQuery.Event} событие Объект события* @return {логическое} */ функция toggleNavigationBar( indexNavigationBar, мероприятие ) { вар navToggle = документ.getElementById( 'NavToggle' + indexNavigationBar ); вар navFrame = документ.getElementById( 'NavFrame' + indexNavigationBar ); вар navChild; если ( !navFrame || !navToggle ) { возвращаться ложный; } // Если отображается сейчас если ( navToggle.Первый ребенок.данные === NavigationBarСкрыть ) { за ( navChild = navFrame.Первый ребенок; navChild !== ноль; navChild = navChild.nextSibling ) { если ( $( navChild ).hasClass( 'NavContent' ) ) { navChild.стиль.отображать = 'никто'; } } navToggle.Первый ребенок.данные = navigationBarShow; // Если сейчас скрыт } еще если ( navToggle.Первый ребенок.данные === navigationBarShow ) { за ( navChild = navFrame.Первый ребенок; navChild !== ноль; navChild = navChild.nextSibling ) { если ( $( navChild ).hasClass( 'NavContent' ) ) { navChild.стиль.отображать = 'блокировать'; } } navToggle.Первый ребенок.данные = NavigationBarСкрыть; } мероприятие.preventDefault(); } /*** Добавляет кнопку "показать / скрыть" на панели навигации. ** @param {jQuery} $ content */ функция createNavigationBarToggleButton( $ content ) { вар j, navChild, navToggle, navToggleText, isCollapsed, indexNavigationBar = 0; // Итерация по всем элементам вар $ divs = $ content.найти( 'div.NavFrame: not (.mw-сворачиваемый)' ); $ divs.каждый( функция ( я, navFrame ) { indexNavigationBar++; navToggle = документ.createElement( 'а' ); navToggle.className = 'NavToggle'; navToggle.setAttribute( 'я бы', 'NavToggle' + indexNavigationBar ); navToggle.setAttribute( 'href', '#' ); $( navToggle ).на( 'щелкнуть', $.доверенное лицо( toggleNavigationBar, ноль, indexNavigationBar ) ); isCollapsed = $( navFrame ).hasClass( 'рухнул' ); /*** Проверьте, не скрыты ли уже дети. Этот цикл здесь для обратной совместимости:* старый способ сделать запуск NavFrames свернутым заключался в добавлении вручную style = "display: none"* ко всем элементам NavPic / NavContent. Поскольку это было плохо для доступности (невозможно сделать* контент, видимый без поддержки JavaScript), новый рекомендуемый способ - добавить класс* «сворачивался» в сам NavFrame, как и в случае сворачиваемых таблиц. */ за ( navChild = navFrame.Первый ребенок; navChild !== ноль && !isCollapsed; navChild = navChild.nextSibling ) { если ( $( navChild ).hasClass( "NavPic" ) || $( navChild ).hasClass( 'NavContent' ) ) { если ( navChild.стиль.отображать === 'никто' ) { isCollapsed = истинный; } } } если ( isCollapsed ) { за ( navChild = navFrame.Первый ребенок; navChild !== ноль; navChild = navChild.nextSibling ) { если ( $( navChild ).hasClass( "NavPic" ) || $( navChild ).hasClass( 'NavContent' ) ) { navChild.стиль.отображать = 'никто'; } } } navToggleText = документ.createTextNode( isCollapsed ? navigationBarShow : NavigationBarСкрыть ); navToggle.appendChild( navToggleText ); // Находим NavHead и прикрепляем переключаемую ссылку (это должно быть сложно, потому что обработка firstChild в Moz заблокирована) за ( j = 0; j < navFrame.childNodes.длина; j++ ) { если ( $( navFrame.childNodes[ j ] ).hasClass( 'NavHead' ) ) { navToggle.стиль.цвет = navFrame.childNodes[ j ].стиль.цвет; navFrame.childNodes[ j ].appendChild( navToggle ); } } navFrame.setAttribute( 'я бы', 'NavFrame' + indexNavigationBar ); } ); } mw.крюк( 'wikipage.content' ).Добавить( createNavigationBarToggleButton ); /*** Magic editintros ********************************************** ***** ** Описание: Добавляет editintros на страницах значений и страницах BLP.* Сопровождающие: [[Пользователь: RockMFR]] ** @param {строка} имя */ функция addEditIntro( имя ) { $( '.mw-editsection, # ca-edit, # ca-ve-edit' ).найти( 'а' ).каждый( функция ( я, эль ) { эль.href = $( это ).attr( 'href' ) + '& editintro =' + имя; } ); } если ( mw.config.получать( 'wgNamespaceNumber' ) === 0 ) { $( функция () { если ( документ.getElementById( 'disambigbox' ) ) { addEditIntro( 'Шаблон: Disambig_editintro' ); } } ); $( функция () { вар кошки = mw.config.получать( 'wgCategories' ); если ( !кошки ) { возвращаться; } если ( $.inArray( 'Живые люди', кошки ) !== -1 || $.inArray( 'Возможно живые люди', кошки ) !== -1 ) { addEditIntro( 'Шаблон: BLP_editintro' ); } } ); } / * Действия, специфичные для страницы редактирования * / если ( mw.config.получать( 'wgAction' ) === 'редактировать' || mw.config.получать( 'wgAction' ) === 'Разместить' ) { /*** Исправлена ошибка сводки редактирования для отмены ** Исправлен тот факт, что функция отмены совмещена с сообщением «Нет редактирования сводной информации»* жалуется на отсутствие сводки редактирования, если оставить сводку редактирования без изменений.* Добавил [[Пользователь: Deskana]], код - [[Пользователь: Tra]].* См. Также [[phab: T10912]]. */ $( функция () { если ( документ.место расположения.поиск.индекс( 'отменить =' ) !== -1 && документ.getElementsByName( 'wpAutoSummary' )[ 0 ] ) { документ.getElementsByName( 'wpAutoSummary' )[ 0 ].ценить = '1'; } } ); } / * Конец mw.loader. с использованием обратного вызова * /} );/ * НЕ ДОБАВЛЯЙТЕ КОД НИЖЕ ЭТОЙ СТРОКИ * /