Модуль:Сезон сериала

Документация

Документацию смотри на странице шаблона {{Сезон сериала}}

Тесты

5 тестов из 118 провалено.

test_01_checkPrevSeason
Тест Ожидаемое значение Фактическое значение
✔ {{#invoke:Сезон сериала|isPrevSeasonLinkValid|title=Остаться в живых (сезон 2)}} true true
✔ {{#invoke:Сезон сериала|isPrevSeasonLinkValid|title=Что, если…? (2-й сезон)}} true true
✔ {{#invoke:Сезон сериала|isPrevSeasonLinkValid|title=Губка Боб Квадратные Штаны (2 сезон)}} true true
✔ {{#invoke:Сезон сериала|isPrevSeasonLinkValid|title=Близкие друзья (Сезон 2)}} true true
✔ {{#invoke:Сезон сериала|isPrevSeasonLinkValid|title=Голос (Россия, сезон 5)}} true true
✔ {{#invoke:Сезон сериала|isPrevSeasonLinkValid|title=Черепашки-ниндзя (мультсериал, 2012) (2 сезон)}} true true
✔ {{#invoke:Сезон сериала|isPrevSeasonLinkValid|title=Миссия невыполнима (телесериал, 1988) (сезон 2)}} true true
✔ {{#invoke:Сезон сериала|isPrevSeasonLinkValid|title=Классический «Доктор Кто» (2-й сезон)}} true true
✔ {{#invoke:Сезон сериала|isPrevSeasonLinkValid|title=Остаться в живых (сезон 55)}}
✔ {{#invoke:Сезон сериала|isPrevSeasonLinkValid|title=Американская история ужасов: Дом-убийца}}
✔ {{#invoke:Сезон сериала|isPrevSeasonLinkValid|title=Американская история ужасов: 1984}} true true
✔ {{#invoke:Сезон сериала|isPrevSeasonLinkValid|title=Американская история ужасов: Двойной сеанс}} true true
✔ {{#invoke:Сезон сериала|isPrevSeasonLinkValid|title=Суд над Повелителем времени}}
✔ {{#invoke:Сезон сериала|isPrevSeasonLinkValid|title=Частный детектив Магнум (2018, сезон 3)}} true true
test_02_checkNextSeason
Тест Ожидаемое значение Фактическое значение
✔ {{#invoke:Сезон сериала|isNextSeasonLinkValid|title=Остаться в живых (сезон 2)}} true true
✔ {{#invoke:Сезон сериала|isNextSeasonLinkValid|title=Что, если…? (2-й сезон)}} true true
✔ {{#invoke:Сезон сериала|isNextSeasonLinkValid|title=Губка Боб Квадратные Штаны (2 сезон)}} true true
✔ {{#invoke:Сезон сериала|isNextSeasonLinkValid|title=Близкие друзья (Сезон 2)}} true true
✔ {{#invoke:Сезон сериала|isNextSeasonLinkValid|title=Голос (Россия, сезон 5)}} true true
✔ {{#invoke:Сезон сериала|isNextSeasonLinkValid|title=Черепашки-ниндзя (мультсериал, 2012) (2 сезон)}} true true
✔ {{#invoke:Сезон сериала|isNextSeasonLinkValid|title=Миссия невыполнима (телесериал, 1988) (сезон 1)}} true true
✔ {{#invoke:Сезон сериала|isNextSeasonLinkValid|title=Классический «Доктор Кто» (2-й сезон)}} true true
✔ {{#invoke:Сезон сериала|isNextSeasonLinkValid|title=Остаться в живых (сезон 55)}}
✔ {{#invoke:Сезон сериала|isNextSeasonLinkValid|title=Пожарные Чикаго (12-й сезон)}}
✔ {{#invoke:Сезон сериала|isNextSeasonLinkValid|title=Американская история ужасов: 1984}} true true
✔ {{#invoke:Сезон сериала|isNextSeasonLinkValid|title=Американская история ужасов: Апокалипсис}} true true
✔ {{#invoke:Сезон сериала|isNextSeasonLinkValid|title=Американская история ужасов: Нежность}}
✔ {{#invoke:Сезон сериала|isNextSeasonLinkValid|title=Суд над Повелителем времени}}
✔ {{#invoke:Сезон сериала|isNextSeasonLinkValid|title=Частный детектив Магнум (2018, сезон 3)}} true true
test_04_getPrevSeasonArticle
Тест Ожидаемое значение Фактическое значение
✔ {{#invoke:Сезон сериала|getPrevSeasonArticle|title=Остаться в живых (сезон 2)}} [[Остаться в живых (сезон 1)|Сезон 1]] [[Остаться в живых (сезон 1)|Сезон 1]]
✔ {{#invoke:Сезон сериала|getPrevSeasonArticle|title=Что, если…? (2-й сезон)}} [[Что, если…? (1-й сезон)|Сезон 1]] [[Что, если…? (1-й сезон)|Сезон 1]]
✔ {{#invoke:Сезон сериала|getPrevSeasonArticle|title=Губка Боб Квадратные Штаны (2 сезон)}} [[Губка Боб Квадратные Штаны (1 сезон)|Сезон 1]] [[Губка Боб Квадратные Штаны (1 сезон)|Сезон 1]]
✔ {{#invoke:Сезон сериала|getPrevSeasonArticle|title=Близкие друзья (Сезон 2)}} [[Близкие друзья (Сезон 1)|Сезон 1]] [[Близкие друзья (Сезон 1)|Сезон 1]]
✔ {{#invoke:Сезон сериала|getPrevSeasonArticle|title=Голос (Россия, сезон 5)}} [[Голос (Россия, сезон 4)|Сезон 4]] [[Голос (Россия, сезон 4)|Сезон 4]]
✔ {{#invoke:Сезон сериала|getPrevSeasonArticle|title=The Voice (США, сезон 17)}} [[The Voice (США, сезон 16)|Сезон 16]] [[The Voice (США, сезон 16)|Сезон 16]]
✔ {{#invoke:Сезон сериала|getPrevSeasonArticle|title=Черепашки-ниндзя (мультсериал, 2012) (2 сезон)}} [[Черепашки-ниндзя (мультсериал, 2012) (1 сезон)|Сезон 1]] [[Черепашки-ниндзя (мультсериал, 2012) (1 сезон)|Сезон 1]]
✔ {{#invoke:Сезон сериала|getPrevSeasonArticle|title=Миссия невыполнима (телесериал, 1988) (сезон 2)}} [[Миссия невыполнима (телесериал, 1988) (сезон 1)|Сезон 1]] [[Миссия невыполнима (телесериал, 1988) (сезон 1)|Сезон 1]]
✔ {{#invoke:Сезон сериала|getPrevSeasonArticle|title=Классический «Доктор Кто» (2-й сезон)}} [[Классический «Доктор Кто» (1-й сезон)|Сезон 1]] [[Классический «Доктор Кто» (1-й сезон)|Сезон 1]]
✔ {{#invoke:Сезон сериала|getPrevSeasonArticle|title=Миссия невыполнима (телесериал, 1988) (сезон 1)}}
✔ {{#invoke:Сезон сериала|getPrevSeasonArticle|title=The Voice (США, сезон 15)}}
✔ {{#invoke:Сезон сериала|getPrevSeasonArticle|title=Американская история ужасов: 1984}} [[Американская история ужасов: Апокалипсис|Апокалипсис]] [[Американская история ужасов: Апокалипсис|Апокалипсис]]
✔ {{#invoke:Сезон сериала|getPrevSeasonArticle|title=Американская история ужасов: Двойной сеанс}} [[Американская история ужасов: 1984|1984]] [[Американская история ужасов: 1984|1984]]
✔ {{#invoke:Сезон сериала|getPrevSeasonArticle|title=Американская история ужасов: 1984|link=[[Американская история ужасов: Апокалипсис|Апокалипсис]]}} [[Американская история ужасов: Апокалипсис|Апокалипсис]] [[Американская история ужасов: Апокалипсис|Апокалипсис]]
N {{#invoke:Сезон сериала|getPrevSeasonArticle|title=Американская история ужасов: Нежность|link={{нп4|Американская история ужасов: NYC|NYC||American Horror Story: NYC}}}} <span data-interwiki-lang="en" data-interwiki-article="American Horror Story: NYC">[[Американская история ужасов: NYC|NYC]]</span><sup class="noprint" style="font-style:normal; font-weight:normal;">[[:en:American Horror Story: NYC|<span title="American Horror Story: NYC — версия статьи «Американская история ужасов: NYC» на английском языке">[англ.]</span>]]</sup>
✔ {{#invoke:Сезон сериала|getPrevSeasonArticle|title=Убийство Джанни Версаче: Американская история преступлений|link=[[Народ против О. Джея Симпсона: Американская история преступлений|Народ против О. Джея Симпсона]]}} [[Народ против О. Джея Симпсона: Американская история преступлений|Народ против О. Джея Симпсона]] [[Народ против О. Джея Симпсона: Американская история преступлений|Народ против О. Джея Симпсона]]
✔ {{#invoke:Сезон сериала|getPrevSeasonArticle|title=Морские рейнджеры с планеты Аквитар|link=[[Могучие рейнджеры (телесериал, 1993)|Могучие рейнджеры]]}} [[Могучие рейнджеры (телесериал, 1993)|Могучие рейнджеры]] [[Могучие рейнджеры (телесериал, 1993)|Могучие рейнджеры]]
✔ {{#invoke:Сезон сериала|getPrevSeasonArticle|title=Классический «Доктор Кто» (24-й сезон)|link=[[Суд над Повелителем времени]]<br><small>(Сезон 23)</small>}} [[Суд над Повелителем времени]]<br><small>(Сезон 23)</small> [[Суд над Повелителем времени]]<br><small>(Сезон 23)</small>
✔ {{#invoke:Сезон сериала|getPrevSeasonArticle|title=Суд над Повелителем времени|link=[[Классический «Доктор Кто» (22 сезон)|Сезон 22]]}} [[Классический «Доктор Кто» (22 сезон)|Сезон 22]] [[Классический «Доктор Кто» (22 сезон)|Сезон 22]]
✔ {{#invoke:Сезон сериала|getPrevSeasonArticle|title=Частный детектив Магнум (2018, сезон 3)}} [[Частный детектив Магнум (2018, сезон 2)|Сезон 2]] [[Частный детектив Магнум (2018, сезон 2)|Сезон 2]]
N {{#invoke:Сезон сериала|getPrevSeasonArticle|title=Список серий аниме One Piece (серии 1—61)}} [[Список серий аниме One Piece (серии 1—61)|Серии 1—61]]
test_05_getNextSeasonArticle
Тест Ожидаемое значение Фактическое значение
✔ {{#invoke:Сезон сериала|getNextSeasonArticle|title=Остаться в живых (сезон 2)}} [[Остаться в живых (сезон 3)|Сезон 3]] [[Остаться в живых (сезон 3)|Сезон 3]]
✔ {{#invoke:Сезон сериала|getNextSeasonArticle|title=Что, если…? (2-й сезон)}} [[Что, если…? (3-й сезон)|Сезон 3]] [[Что, если…? (3-й сезон)|Сезон 3]]
✔ {{#invoke:Сезон сериала|getNextSeasonArticle|title=Губка Боб Квадратные Штаны (2 сезон)}} [[Губка Боб Квадратные Штаны (3 сезон)|Сезон 3]] [[Губка Боб Квадратные Штаны (3 сезон)|Сезон 3]]
✔ {{#invoke:Сезон сериала|getNextSeasonArticle|title=Близкие друзья (Сезон 2)}} [[Близкие друзья (Сезон 3)|Сезон 3]] [[Близкие друзья (Сезон 3)|Сезон 3]]
✔ {{#invoke:Сезон сериала|getNextSeasonArticle|title=Голос (Россия, сезон 5)}} [[Голос (Россия, сезон 6)|Сезон 6]] [[Голос (Россия, сезон 6)|Сезон 6]]
✔ {{#invoke:Сезон сериала|getNextSeasonArticle|title=The Voice (США, сезон 15)}} [[The Voice (США, сезон 16)|Сезон 16]] [[The Voice (США, сезон 16)|Сезон 16]]
✔ {{#invoke:Сезон сериала|getNextSeasonArticle|title=Черепашки-ниндзя (мультсериал, 2012) (2 сезон)}} [[Черепашки-ниндзя (мультсериал, 2012) (3 сезон)|Сезон 3]] [[Черепашки-ниндзя (мультсериал, 2012) (3 сезон)|Сезон 3]]
✔ {{#invoke:Сезон сериала|getNextSeasonArticle|title=Миссия невыполнима (телесериал, 1988) (сезон 1)}} [[Миссия невыполнима (телесериал, 1988) (сезон 2)|Сезон 2]] [[Миссия невыполнима (телесериал, 1988) (сезон 2)|Сезон 2]]
✔ {{#invoke:Сезон сериала|getNextSeasonArticle|title=Классический «Доктор Кто» (2-й сезон)}} [[Классический «Доктор Кто» (3-й сезон)|Сезон 3]] [[Классический «Доктор Кто» (3-й сезон)|Сезон 3]]
✔ {{#invoke:Сезон сериала|getNextSeasonArticle|title=Миссия невыполнима (телесериал, 1988) (сезон 2)}}
✔ {{#invoke:Сезон сериала|getNextSeasonArticle|title=The Voice (США, сезон 17)}}
✔ {{#invoke:Сезон сериала|getNextSeasonArticle|title=Американская история ужасов: 1984}} [[Американская история ужасов: Двойной сеанс|Двойной сеанс]] [[Американская история ужасов: Двойной сеанс|Двойной сеанс]]
✔ {{#invoke:Сезон сериала|getNextSeasonArticle|title=Американская история ужасов: Апокалипсис}} [[Американская история ужасов: 1984|1984]] [[Американская история ужасов: 1984|1984]]
✔ {{#invoke:Сезон сериала|getNextSeasonArticle|title=Американская история ужасов: Двойной сеанс|link=[[Американская история ужасов: Нью-Йорк|Нью-Йорк]]}} [[Американская история ужасов: Нью-Йорк|Нью-Йорк]] [[Американская история ужасов: Нью-Йорк|Нью-Йорк]]
✔ {{#invoke:Сезон сериала|getNextSeasonArticle|title=Классический «Доктор Кто» (26-й сезон)|link=[[Доктор Кто (фильм, 1996)|Доктор Кто]] <small>(фильм)</small><br>[[Доктор Кто (1 сезон)|Сезон 1]] <small>(2005)</small>}} [[Доктор Кто (фильм, 1996)|Доктор Кто]] <small>(фильм)</small><br>[[Доктор Кто (1 сезон)|Сезон 1]] <small>(2005)</small> [[Доктор Кто (фильм, 1996)|Доктор Кто]] <small>(фильм)</small><br>[[Доктор Кто (1 сезон)|Сезон 1]] <small>(2005)</small>
✔ {{#invoke:Сезон сериала|getNextSeasonArticle|title=Убийство Джанни Версаче: Американская история преступлений|link=[[Импичмент: Американская история преступлений|Импичмент]]}} [[Импичмент: Американская история преступлений|Импичмент]] [[Импичмент: Американская история преступлений|Импичмент]]
✔ {{#invoke:Сезон сериала|getNextSeasonArticle|title=Суд над Повелителем времени|link=[[Классический «Доктор Кто» (24 сезон)|Сезон 24]]}} [[Классический «Доктор Кто» (24 сезон)|Сезон 24]] [[Классический «Доктор Кто» (24 сезон)|Сезон 24]]
✔ {{#invoke:Сезон сериала|getNextSeasonArticle|title=Частный детектив Магнум (2018, сезон 3)}} [[Частный детектив Магнум (2018, сезон 4)|Сезон 4]] [[Частный детектив Магнум (2018, сезон 4)|Сезон 4]]
N {{#invoke:Сезон сериала|getNextSeasonArticle|title=Список серий аниме One Piece (серии 1—61)}} [[Список серий аниме One Piece (серии 1—61)|Серии 1—61]]
test_07_getInfoboxHeader
Тест Ожидаемое значение Фактическое значение
✔ {{#invoke:Сезон сериала|getInfoboxHeader|title=Остаться в живых (сезон 2)}} Остаться в живых Остаться в живых
✔ {{#invoke:Сезон сериала|getInfoboxHeader|title=Что, если…? (2-й сезон)}} Что, если…? Что, если…?
✔ {{#invoke:Сезон сериала|getInfoboxHeader|title=Губка Боб Квадратные Штаны (2 сезон)}} Губка Боб Квадратные Штаны Губка Боб Квадратные Штаны
✔ {{#invoke:Сезон сериала|getInfoboxHeader|title=Близкие друзья (Сезон 2)}} Близкие друзья Близкие друзья
✔ {{#invoke:Сезон сериала|getInfoboxHeader|title=Голос (Россия, сезон 5)}} Голос Голос
✔ {{#invoke:Сезон сериала|getInfoboxHeader|title=Черепашки-ниндзя (мультсериал, 2012) (2 сезон)}} Черепашки-ниндзя Черепашки-ниндзя
✔ {{#invoke:Сезон сериала|getInfoboxHeader|title=Доктор Кто (спецвыпуски, 2013)}} Доктор Кто Доктор Кто
✔ {{#invoke:Сезон сериала|getInfoboxHeader|title=Классический «Доктор Кто» (2-й сезон)}} Классический «Доктор Кто» Классический «Доктор Кто»
✔ {{#invoke:Сезон сериала|getInfoboxHeader|title=Американская история ужасов: 1984}} Американская история ужасов: 1984 Американская история ужасов: 1984
✔ {{#invoke:Сезон сериала|getInfoboxHeader|title=Остаться в живых (сезон 2)}} Остаться в живых Остаться в живых
✔ {{#invoke:Сезон сериала|getInfoboxHeader|title=Агенты «Щ.И.Т.» (7-й сезон)}} Агенты «Щ.И.Т.» Агенты «Щ.И.Т.»
✔ {{#invoke:Сезон сериала|getInfoboxHeader|title=Список серий аниме One Piece (серии 1—61)}} Список серий аниме One Piece Список серий аниме One Piece
test_08_getInfoboxSubHeader
Тест Ожидаемое значение Фактическое значение
✔ {{#invoke:Сезон сериала|getInfoboxSubHeader|title=Остаться в живых (сезон 2)}} Сезон 2 Сезон 2
✔ {{#invoke:Сезон сериала|getInfoboxSubHeader|title=Что, если…? (2-й сезон)}} Сезон 2 Сезон 2
✔ {{#invoke:Сезон сериала|getInfoboxSubHeader|title=Губка Боб Квадратные Штаны (2 сезон)}} Сезон 2 Сезон 2
✔ {{#invoke:Сезон сериала|getInfoboxSubHeader|title=Близкие друзья (Сезон 2)}} Сезон 2 Сезон 2
✔ {{#invoke:Сезон сериала|getInfoboxSubHeader|title=Голос (Россия, сезон 5)}} Сезон 5 Сезон 5
✔ {{#invoke:Сезон сериала|getInfoboxSubHeader|title=Черепашки-ниндзя (мультсериал, 2012) (2 сезон)}} Сезон 2 Сезон 2
✔ {{#invoke:Сезон сериала|getInfoboxSubHeader|title=Доктор Кто (спецвыпуски, 2013)}} Спецвыпуски 2013 Спецвыпуски 2013
✔ {{#invoke:Сезон сериала|getInfoboxSubHeader|title=Доктор Кто (спецвыпуски, 2008—2010)}} Спецвыпуски 2008—2010 Спецвыпуски 2008—2010
✔ {{#invoke:Сезон сериала|getInfoboxSubHeader|title=Американская история ужасов: 1984}}
✔ {{#invoke:Сезон сериала|getInfoboxSubHeader|title=Остаться в живых (сезон 2)|series_number=2}} Сезон 2 Сезон 2
✔ {{#invoke:Сезон сериала|getInfoboxSubHeader|title=Остаться в живых (сезон 2)|series_number=5}} Сезон 5 Сезон 5
✔ {{#invoke:Сезон сериала|getInfoboxSubHeader|title=Список серий аниме One Piece (серии 1—61)}} Серии 1—61 Серии 1—61
✔ {{#invoke:Сезон сериала|getInfoboxSubHeader|title=Список серий «Блич» (сезоны 1-4)}} Сезоны 1-4 Сезоны 1-4
N {{#invoke:Сезон сериала|getInfoboxSubHeader|title=Список эпизодов мультсериала «Симпсоны» (с 21 сезона)}} Сезоны с 21 Сезона 21
N {{#invoke:Сезон сериала|getInfoboxSubHeader|title=Список серий аниме One Piece (серии 892 и далее)}} Серии с 892 Серии 892
test_09_getListOfEpisodes
Тест Ожидаемое значение Фактическое значение
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Остаться в живых (сезон 1)}} [[Список эпизодов телесериала «Остаться в живых»|Список серий]] [[Список эпизодов телесериала «Остаться в живых»|Список серий]]
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Голос (Россия, сезон 12)}} [[Список выпусков телешоу «Голос»|Список серий]] [[Список выпусков телешоу «Голос»|Список серий]]
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Симпсоны (сезон 30)}} [[Список эпизодов мультсериала «Симпсоны»|Список серий]] [[Список эпизодов мультсериала «Симпсоны»|Список серий]]
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Агенты «Щ.И.Т.» (2-й сезон)}} [[Список эпизодов телесериала «Агенты „Щ.И.Т.“»|Список серий]] [[Список эпизодов телесериала «Агенты „Щ.И.Т.“»|Список серий]]
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Лучше звоните Солу (сезон 6)}} [[Список эпизодов телесериала «Лучше звоните Солу»|Список серий]] [[Список эпизодов телесериала «Лучше звоните Солу»|Список серий]]
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Миссия невыполнима (телесериал, 1988) (сезон 1)}} [[Список эпизодов телесериала «Миссия невыполнима» (1988)|Список серий]] [[Список эпизодов телесериала «Миссия невыполнима» (1988)|Список серий]]
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Мир Дикого Запада (1-й сезон)}}
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Части тела (сезон 1)}}
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Американская история ужасов: Двойной сеанс|link=Список эпизодов телесериала «Американская история ужасов»}} [[Список эпизодов телесериала «Американская история ужасов»|Список серий]] [[Список эпизодов телесериала «Американская история ужасов»|Список серий]]
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Остаться в живых (сезон 1)|link=x}} [[x|Список серий]] [[x|Список серий]]
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Остаться в живых (сезон 1)|link=Список эпизодов телесериала «Остаться в живых»|Список серий}} [[Список эпизодов телесериала «Остаться в живых»|Список серий]] [[Список эпизодов телесериала «Остаться в живых»|Список серий]]
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Остаться в живых (сезон 1)|link=Список эпизодов телесериала «Остаться в живых»|Список эпизодов телесериала «Остаться в живых»}} [[Список эпизодов телесериала «Остаться в живых»|Список серий]] [[Список эпизодов телесериала «Остаться в живых»|Список серий]]
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Остаться в живых (сезон 1)|link=[[Список эпизодов телесериала «Остаться в живых»]]}} [[Список эпизодов телесериала «Остаться в живых»|Список серий]] [[Список эпизодов телесериала «Остаться в живых»|Список серий]]
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Остаться в живых (сезон 1)|link=[[Список эпизодов телесериала «Остаться в живых»|Список серий]]}} [[Список эпизодов телесериала «Остаться в живых»|Список серий]] [[Список эпизодов телесериала «Остаться в живых»|Список серий]]
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Остаться в живых (сезон 1)|link=[[Список эпизодов телесериала «Остаться в живых»|Список эпизодов телесериала «Остаться в живых»]]}} [[Список эпизодов телесериала «Остаться в живых»|Список серий]] [[Список эпизодов телесериала «Остаться в живых»|Список серий]]
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Симпсоны (сезон 34)|link=[[Список эпизодов мультсериала «Симпсоны» (с 21 сезона)|Список серий (с 21 сезона)]]}} [[Список эпизодов мультсериала «Симпсоны» (с 21 сезона)|Список серий]] [[Список эпизодов мультсериала «Симпсоны» (с 21 сезона)|Список серий]]
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Торчвуд: День Чуда}} [[Список серий телесериала «Торчвуд»|Список серий]] [[Список серий телесериала «Торчвуд»|Список серий]]
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Американская история ужасов: Двойной сеанс}} [[Список эпизодов телесериала «Американская история ужасов»|Список серий]] [[Список эпизодов телесериала «Американская история ужасов»|Список серий]]
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Detective Conan (сезон 1)}} [[Список серий аниме Detective Conan (сезоны 1—15)|Список серий]] [[Список серий аниме Detective Conan (сезоны 1—15)|Список серий]]
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Топ-модель по-американски (сезон 1)|link=https://en.wikipedia.org/wiki/List_of_America%27s_Next_Top_Model_episodes}}
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Топ-модель по-американски (сезон 1)|link={{Нп5|Список эпизодов шоу «Топ-модель по-американски»|Список серий|en|List of America's Next Top Model episodes}}}}
✔ {{#invoke:Сезон сериала|getListOfEpisodes|title=Топ-модель по-американски (сезон 1)|link=[[:en:|List of America's Next Top Model episodes|Список серий]]}}


См. также

require('strict')

local listOfTitlesArticles = require('Модуль:Сезон сериала/БД списки эпизодов')
local wikidata = require('Модуль:Wikidata').formatProperty
local getArgs = require('Модуль:Arguments').getArgs
local yesno = require("Модуль:Yesno")

local format = mw.ustring.format
local match = mw.ustring.match
local find = mw.ustring.find
local gsub = mw.ustring.gsub
local sub = mw.ustring.sub


local p = {}
local cache = {}

--------------------------------------------------------------------------------
--- LOCALS
--------------------------------------------------------------------------------

--- Returns true if param has value (not nil and not empty string)
--- @param param string
--- @return boolean
local function hasValue(param)
	if param and param:find('%S') then
		return true
	end
end

--- Returns true if page exist and not redirect
--- @param param string
--- @return boolean
local function hasPage(page)
	if page and page.exists and page.redirectTarget ~= mw.title.getCurrentTitle() then
		return true
	end
	return false
end

--- Returns a delinked string
--- @param link string
--- @return string
local function getPlainText(text)
	local text = mw.text.trim(text, '%[%]%s'):gsub('<.->.-$', '')

	if text:find('^{{нп')
		or text:find('^%[%[нп')
		or text:find('^{{')
	then
		text = mw.text.trim(text, '{}%[%]:%s')
		text = text:gsub('^[^|]-|', '')
	end

	if text:find('^%[%[:') then
		text = mw.text.trim(text, '{}%s')
		text = text:gsub('^%[%[:[^:]-:', '')
	end

	text = text:gsub('%s*|.*$', '')
			:gsub('%s*{.*$', '')
			:gsub('<.->.-<.->', ' ')
			:gsub('<.->', ' ')
			:gsub('%s+', ' ')

	text = mw.text.trim(text, '%s')
	return text
end

--- Returns a formatted link to the list of episodes article.
--- @param listOfEpisodesArticle string
--- @return string
local function getListOfEpisodesLink(listOfEpisodesArticle)
	local listOfEpisodesPage = mw.title.new(listOfEpisodesArticle, 0)
	if hasPage(listOfEpisodesPage) then
		return format('[[%s|Список серий]]', listOfEpisodesArticle)
	end
end

--- Returns an article link.
--- @param article string The article's title.
--- @param pipedLink string The piped link.
--- @return string
local function getArticleLink(article, pipedLink)
	local articleLink = mw.title.new(article, 0)
	if hasPage(articleLink) then
		if not hasValue(pipedLink) then
			return '[[' .. article .. ']]'
		end
		return '[[' .. article .. '|' .. pipedLink .. ']]'
	end
end

--- Returns the disambiguation without the '(year) TV series,' part.
--- @param disambiguation string The article's disambiguation.
--- @return string
local function getShortDisambiguation(disambiguation)
	local shortDisambiguation = gsub(disambiguation, '^.+,%s*', '')
	return shortDisambiguation
end

--- Returns the current season number from the disambiguation.
--- @param disambiguation string The article's disambiguation.
--- @return string
local function getCurrentSeasonNumberFromDisambiguation(disambiguation)
	local commasText, shortDisambiguation, prefix, number, postfix
	if match(disambiguation, '%d+[—%-]%d+') then
		prefix, number, postfix = match(disambiguation, '^(%D*)(%d+%-?—?%d+)(%D*)$')
	elseif disambiguation:find(', ') then
		commasText = match(disambiguation, '^.+,%s*')
		shortDisambiguation = getShortDisambiguation(disambiguation)
		prefix, number, postfix = match(shortDisambiguation, '^(%D*)(%d+)(%D*)$')
	else
		prefix, number, postfix = match(disambiguation, '^(%D*)(%d+)(%D*)$')
	end
	postfix = postfix or ''
	commasText = commasText or ''
	prefix = commasText .. (prefix or '')
	return number, prefix, postfix
end

--- Returns the type of word used for 'season' in the disambiguation.
--- @param disambiguation string The article's disambiguation.
--- @return string
local function getSeasonType(disambiguation)
	local currentTitleText = mw.title.getCurrentTitle().text
	local seasonTypes = {
		'Мультсериал', 'Телесериал', 'Телепередача', 'Спецвыпуски', 'Телешоу',
		'Шоу', 'Анимационный сериал', 'Аниме-сериал', 'Веб-сериал', 'Мини-сериал',
		'Серии мультсериалов', 'Телевизионный сериал', 'Сюжетная арка', 'Выпуск',
		'Сериал', 'Аниме', 'Серии', 'Сезоны', 'Сезона', 'Сезон', 'Серии с'
	}
	for _, seasonType in pairs(seasonTypes) do
		if match(disambiguation, sub(seasonType, 3)) then
			if find(currentTitleText, '^Список')
				and not find(currentTitleText, '%d+[—%-]%d+')
			then
				if seasonType == 'Сезона' then
					return 'Сезоны с'
				elseif seasonType == 'Серии' then
					return 'Серии с'
				end
			else
				return seasonType
			end
		end
	end

	return 'Сезон'
end

--- Returns the disambiguation from the title.
--- @param title string The article's title.
--- @return string | nil, string | nil
local function getDisambiguation(title)
	local disambiguationLast, disambiguationNext
	local pattern = '%s*%(([^()]+)%)$'

	disambiguationLast = match(title, pattern)
	local title = gsub(title, pattern, '')
	disambiguationNext = match(title, pattern)

	if disambiguationLast ~= '' then
		return disambiguationLast, disambiguationNext
	end
end

--- Returns the show's name from the title.
--- @param title string The article's title.
--- @return string
local function getShowName(title)
	while match(title, '%)%s*$') do
		title = gsub(title, '%s+%b()%s*$', '')
	end
	return title
end

--- Returns 'true' if the given link is valid; nil otherwise.
--- A link is valid in the following cases:
---	-- A season article exists.
---	-- A redirect exists to a season section.
---
--- A link is invalid in the following cases:
---	-- A season article or redirect do not exist.
---	-- A redirect exists, but it is a general redirect and not for any specific season section.
---
--- Note: Return values are not booleans as the returned value is used in template space.
--- @param title string The article's title.
--- @return string | nil
local function isLinkValid(title)
	local article = mw.title.new(title)

	-- Article or redirect do not exist; Not a valid link.
	if not article or not article.exists then
		return nil
	end

	local redirectTarget = article.redirectTarget

	-- Article exists and is not a redirect; Valid link.
	if not redirectTarget then
		return true
	end

	local fullLink = redirectTarget.fullText
	local isSection = fullLink:find("#")

	-- Article is a section redirect; Valid link.
	if isSection then
		return true
	end

	-- Article is a general redirect; Not a valid link.
	return nil
end

--- Returns a season article title and a piped link.
--- @param title string The article's title.
--- @param seasonNumberDiff number The number difference between the current season and the other season.
--- @return string, string
local function getArticleTitleAndPipedLink(title, seasonNumberDiff)
	local excludeList = {
		'Американская история ужасов: Дом-убийца', 'Американская история ужасов: Психбольница',
		'Американская история ужасов: Шабаш', 'Американская история ужасов: Фрик-шоу',
		'Американская история ужасов: Отель', 'Американская история ужасов: Роанок',
		'Американская история ужасов: Культ', 'Американская история ужасов: Апокалипсис',
		'Американская история ужасов: 1984', 'Американская история ужасов: Двойной сеанс',
		'Американская история ужасов: Нью-Йорк', 'Американская история ужасов: Нежность'
	}
	local iExcludeList = {
		['Дом-убийца']=1, ['Психбольница']=2, ['Шабаш']=3, ['Фрик-шоу']=4,
		['Отель']=5, ['Роанок']=6, ['Культ']=7, ['Апокалипсис']=8, ['1984']=9,
		['Двойной сеанс']=10, ['Нью-Йорк']=11, ['Нежность']=12
	}

	local showName = getShowName(title)
	local disambiguationLast, disambiguationNext = getDisambiguation(title)

	if seasonNumberDiff == 0 and not hasValue(disambiguationLast) then
		if title:find('мериканская история ужасов') then
			return title, title:match(':%s*([^:]-)%s*$')
		else
			return title, nil
		end
	elseif not hasValue(disambiguationLast) then
		if title:find('мериканская история ужасов') then
			local index = iExcludeList[title:match(':%s*([^:]-)%s*$')]
			local article = excludeList[index + seasonNumberDiff]
			if article then
				return article, article:match(':%s*([^:]-)%s*$')
			else
				return nil, nil
			end
		elseif not showName:find('%s+(%d+)$') then
			return '', nil
		end
	end

	if hasValue(disambiguationNext) then
		disambiguationNext = ' (' .. disambiguationNext .. ')'
	else
		disambiguationNext = ''
	end

	local prefix, seasonType, seasonNumber, postfix
	local shortDisambiguation, showNameModified
	local pipedLink

	if hasValue(disambiguationLast) then
		seasonType = getSeasonType(disambiguationLast)
		seasonNumber, prefix, postfix = getCurrentSeasonNumberFromDisambiguation(disambiguationLast)
		pipedLink = seasonType
	end

	if not hasValue(seasonNumber) then
		showNameModified, seasonNumber = match(showName, '(.+)%s+(%d+)$')
	end

	if tonumber(seasonNumber) then
		seasonNumber = tonumber(seasonNumber) + seasonNumberDiff
	end

	seasonNumber = tostring(seasonNumber)
	if hasValue(seasonNumber) and hasValue(pipedLink) then
		pipedLink = pipedLink .. ' ' .. seasonNumber
	elseif hasValue(seasonNumber) then
		pipedLink = 'Сезон ' .. seasonNumber
	end

	-- Titles such as 'Big Brother 1 (American season)'.
	if hasValue(showNameModified) and hasValue(disambiguationLast) then
		return showNameModified .. ' ' .. seasonNumber .. ' (' .. disambiguationLast .. ')', pipedLink
	-- Titles such as 'Big Brother Brasil 1'.
	elseif hasValue(showNameModified) then
		return showNameModified .. ' ' .. seasonNumber, pipedLink
	else
		return showName .. disambiguationNext .. ' (' .. prefix .. seasonNumber .. postfix .. ')', pipedLink
	end
end

--- Returns the article's title either from args (usually from /testcases) or from the page itself.
--- @param args table The args invoking the module.
--- @return string
local function getTitle(title)
	if not hasValue(title) then
		title = mw.title.getCurrentTitle().text
	end
	return title
end

--- Returns 'true' if the given season link is valid; nil otherwise.
--- @param args table The args invoking the module.
--- @param seasonNumberDiff number The number difference between the current season and the other season.
--- @return string | nil
local function isSeasonLinkValid(args, seasonNumberDiff)
	if yesno(args.link) == false then
		return nil
	end

	if hasValue(args.link) and args.link:find('%[%[.*%]%]') then
		return true
	elseif hasValue(args.link) and isLinkValid(getPlainText(args.link)) then
		return isLinkValid(getPlainText(args.link))
	end

	local title = getTitle(args.title)
	local articleTitle = getArticleTitleAndPipedLink(title, seasonNumberDiff)
	if hasValue(articleTitle) and articleTitle ~= mw.title.getCurrentTitle().fullText then
		return isLinkValid(articleTitle)
	end
end

--- Returns a season article link.
--- @param args table The args invoking the module.
--- @param seasonNumberDiff number The number difference between the current season and the other season.
--- @return string
local function getSeasonArticleLink(args, seasonNumberDiff)
	if yesno(args.link) == false then
		return nil
	end

	local title, articleTitle, pipedLink

	if hasValue(args.link) and args.link:find('%[%[.*%]%]') then
		return args.link
	elseif hasValue(args.link) and isLinkValid(getPlainText(args.link)) then
		articleTitle, pipedLink = getArticleTitleAndPipedLink(args.link, 0)
	end

	if not hasValue(articleTitle) then
		title = getTitle(args.title)
		articleTitle, pipedLink = getArticleTitleAndPipedLink(title, seasonNumberDiff)
	end

	if hasValue(articleTitle) and articleTitle ~= mw.title.getCurrentTitle().fullText then
		return getArticleLink(articleTitle, pipedLink)
	end
end

-- Декоратор для передачи аргуметнов в функцию
local function makeInvokeFunc(funcName)
	return function (frame)
		local args = getArgs(frame)
		return p[funcName](args)
	end
end

--------------------------------------------------------------------------------
--- MAIN CLASS
--------------------------------------------------------------------------------

-- Проверка Викидинных пока не реализована
-- Предыдущий сезон ### wikidata|P155
-- Следующий сезон ### wikidata|P156
-- ОБРАЗЕЦ: wikidata({args={{property='P1811', value='Список эпизодов телесериала «Во все тяжкие»', from='Q126004'}})

--- Returns 'true' if the season link for the next season is valid; nil otherwise.
--- @param args table The args invoking the module.
--- @return string | nil
p.isNextSeasonLinkValid = makeInvokeFunc('_isNextSeasonLinkValid')
function p._isNextSeasonLinkValid(args)
	return isSeasonLinkValid(args, 1)
end

--- Returns 'true' if the season link for the previous season is valid; nil otherwise.
--- @param args table The args invoking the module.
--- @return string | nil
p.isPrevSeasonLinkValid = makeInvokeFunc('_isPrevSeasonLinkValid')
function p._isPrevSeasonLinkValid(args)
	return isSeasonLinkValid(args, -1)
end

--- Returns the next season article title.
--- @param args table The args invoking the module.
--- @return string
p.getNextSeasonArticle = makeInvokeFunc('_getNextSeasonArticle')
function p._getNextSeasonArticle(args)
	return getSeasonArticleLink(args, 1)
end

--- Returns the previous season article title.
--- @param args table The args invoking the module.
--- @return string
p.getPrevSeasonArticle = makeInvokeFunc('_getPrevSeasonArticle')
function p._getPrevSeasonArticle(args)
	return getSeasonArticleLink(args, -1)
end

--- @param args table The args invoking the module.
--- @return string
p.getInfoboxHeader = makeInvokeFunc('_getInfoboxHeader')
function p._getInfoboxHeader(args)
	local title = getTitle(args.title)
	local header = getShowName(title)
	return header
end

--- Returns the relevant text for the sub-header field.
--- @param args table The args invoking the module.
--- @return string | nil
p.getInfoboxSubHeader = makeInvokeFunc('_getInfoboxSubHeader')
function p._getInfoboxSubHeader(args)
	local title = getTitle(args.title)
	local disambiguation = getDisambiguation(title)
	local seasonNumber = args.season_number or args.series_number
	local seasonType, shortDisambiguation

	if not hasValue(disambiguation) and not hasValue(seasonNumber) then
		return nil
	end

	if not hasValue(seasonNumber) then
		shortDisambiguation = getShortDisambiguation(disambiguation)
		seasonNumber = getCurrentSeasonNumberFromDisambiguation(shortDisambiguation)
	end

	if hasValue(disambiguation) then
		seasonType = getSeasonType(disambiguation)
	end

	if not hasValue(seasonType) and hasValue(seasonNumber) then
		return 'Сезон ' .. seasonNumber
	elseif hasValue(seasonNumber) then
		return seasonType .. ' ' .. seasonNumber
	end
end

--- Returns a formatted link to the list of episodes article.
---
--- The returned link is in the style of:
--- [List of <series name> <disambiguation, if present> episodes <range, if present>|List of episodes]
---
--- The link will only return if the page exists.
--- @param args table The args invoking the module.
--- @return string | nil
p.getListOfEpisodes = makeInvokeFunc('_getListOfEpisodes')
function p._getListOfEpisodes(args)
	--[=[== Схема-приоритет поиска рабочей ссылки типа [[Список эпизодов телесериала «Название»]] ==
	args.link -> wikidata -> database -> zeronamespace -> nil
	]=]

	if find(mw.title.getCurrentTitle().text, '^Список')
		or yesno(args.link) == false
	then
		return nil
	end

	-- Проверка args.link
	if hasValue(args.link) and args.link:find('%[%[.*%]%]') then
		return getListOfEpisodesLink(getPlainText(args.link))
	elseif hasValue(args.link) and isLinkValid(getPlainText(args.link)) then
		return getListOfEpisodesLink(args.link)
	end

	-- list of episodes (P1811)
	-- ОБРАЗЕЦ: wikidata({args={{property='P1811', value='Список эпизодов телесериала «Во все тяжкие»', from='Q126004'}})
	-- Проверка Викиданных
	--[=[ ДОРАБОТАТЬ!!!!
	local linkFromWikidata = wikidata({args={property='P1811', value='', from=args.from or '', title=args.title, link=args.link}})
	if hasValue(linkFromWikidata) then
		local wikidataLinkText = getPlainText(linkFromWikidata)
		local wikidataLink = getListOfEpisodesLink(wikidataLinkText)
		if hasValue(wikidataLink) then
			return wikidataLink
		end
	end
	]=]

	-- Остальные проверки
	local title = getTitle(args.title)
	local showName = getShowName(title)
	if not hasValue(showName) then return nil end

	-- Проверка Базы данных
	local showName2, shortShowName, shortShowName2 = '~', '~', '~'
	if showName:find('[«"]') then
		showName2 = showName:gsub('«', '„'):gsub('»', '“')
		shortShowName = match(showName, '[«"](.-)["»]')
	end

	if showName:find('[:.]') then
		shortShowName2 = showName:gsub('[:.].-$', '')
	end

	local findedName1, findedName2, findedName3, findedName4
	local pattern, articleText, databaseLink

	for _, searchName in ipairs({shortShowName2, showName2, shortShowName, showName}) do
		pattern = format('{{([^{«]+[« ]%s[ »][^»}]*)}}', searchName)
		articleText = match(listOfTitlesArticles, pattern)
		if hasValue(articleText) then
			databaseLink = getListOfEpisodesLink(articleText)
			if hasValue(databaseLink) then
				return databaseLink
			end
		end
	end

	-- Проверка основного пространства имён википедии
	local listOfEpisodesArticle, listOfEpisodesLink
	local listOfShowNames = {showName, showName2, shortShowName, shortShowName2}

	--- ??? работает ли кэш ???
	for _, showTitle in pairs(listOfShowNames) do
		if cache[showTitle] then
			return cache[showTitle]
		end
	end

	local listOfAllTypes = {
	'серий', 'эпизодов', 'выпусков',
	'серий телесериала', 'эпизодов телесериала', 'серий телесериала', 'эпизодов сериала',
	'серий мультсериала', 'эпизодов мультсериала', 'серий аниме', 'эпизодов аниме',
	'эпизодов телепередачи', 'эпизодов шоу', 'выпусков телепередачи', 'выпусков телешоу'
	-- не используются:
	-- 'выпусков шоу', 'серий сериала', 'серий телепередачи', 'серий телешоу', 'серий шоу',
	-- 'эпизодов анимационного сериала', 'эпизодов аниме-сериала', 'эпизодов веб-сериала', 'эпизодов мини-сериала'
	}

	for _, insertThis in pairs(listOfAllTypes) do
		for _, showTitle in pairs(listOfShowNames) do
			listOfEpisodesArticle = format('Список %s «%s»', insertThis, showTitle)
			listOfEpisodesLink = getListOfEpisodesLink(listOfEpisodesArticle)
			if listOfEpisodesLink then
				--- ??? работает ли кэш ???
				cache[showTitle] = listOfEpisodesLink
				return listOfEpisodesLink
			end
			listOfEpisodesArticle = format('Список %s %s', insertThis, showTitle)
			listOfEpisodesLink = getListOfEpisodesLink(listOfEpisodesArticle)
			if listOfEpisodesLink then
				--- ??? работает ли кэш ???
				cache[showTitle] = listOfEpisodesLink
				return listOfEpisodesLink
			end
		end
	end
end

return p
Prefix: 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 0 1 2 3 4 5 6 7 8 9

Portal di Ensiklopedia Dunia

Kembali kehalaman sebelumnya