Этот модуль реализует {{ R избегает двойного перенаправления }}. См. документацию на странице шаблона.
местный р = {}локальная функция noredir ( страница )локальная ссылка = страница : fullUrl ( "redirect=no" )return "<span class= \" plainlinks \" >[" .. ссылка .. " " .. страница . полный текст .. "]</span>"конецфункция р . основная ( рама )локальные аргументы = требуют ( "Модуль:Аргументы" ). getArgs ( frame , { removeBlanks = false })-- Демонстрационные параметры, для демонстрации поведения с определенным перенаправлением-- цели и избегание категоризации (не использовать в статьях)локальный noError = аргументы . Нет ошибоклокальная демонстрация = аргументы . demo или noError или args . thistarget или аргументы . другая цельлокальная функция formatError ( ошибка )return "<span class= \" error \" >Ошибка в [[Модуле:R избежать двойного перенаправления]]: " .. err .. "</span>".. ( демонстрация и "" или "[[Категория: Предотвращено двойное перенаправление/ошибка]]" )конецместная эта страница = mw . название . получить текущий заголовок ()локальная другая страница = mw . название . новый ( аргументы [ 1 ] или "" )если не другая страница, тоreturn formatError ( "Другая страница не указана." );конецесли мв . название . равно ( thisPage , otherPage ) , тоreturn formatError ( "В качестве параметра была передана текущая страница." );конец-- Получить объекты mw.title для целей перенаправления.-- Обратите внимание, что использование redirectTarget mw.title будет правильно обрабатывать режим предварительного просмотра, в отличие от Module:Redirect.местный thisTarget , другойTargetесли демо и аргументы . эта цель тогда эта цель = мв . название . новый ( аргументы . thistarget )ещеэта цель = эта страница . цель перенаправленияконецесли демо и аргументы . другая цель тогдадругая цель = mw . название . новый ( аргументы . другая цель )ещедругая цель = другая страница . цель перенаправленияконец-- Для двойной переадресацииlocal thisDoubleTarget = thisTarget и thisTarget . цель перенаправленияlocal otherDoubleTarget = otherTarget и otherTarget . цель перенаправлениялокальная функция formatOutput ( обновление , информация )местный из , кошкаесли другая цель , тоfrom = "альтернативный заголовок для '''" .. noredir ( otherPage ) .. "''', другой редирект на тот же заголовок"ещеfrom = "альтернативный заголовок для '''[[:" .. otherPage . fullText .. "]]''', бывшая переадресация на тот же заголовок"конецcat = demo и "" или update и "Избегайте двойных перенаправлений для обновления" или "Избегайте двойных перенаправлений" кадр возврата : expandTemplate ({title = "Шаблон перенаправления" ,аргументы = {id = 'R избежал двойного перенаправления' ,от = от ,информация = обновление и " \n **" .. информация или информация ,[ "все категории" ] = кошка ,name = "Из предотвращенного двойного перенаправления"}})конецесли нет ошибок то-- Игнорировать все возможные ошибки, чтобы пример использования отображался в верхней части [[Шаблон:R избежать двойного перенаправления]]ещеесли не эта цель, тоreturn formatError ( «Эта страница не является перенаправлением.» , демо )конецесли мв . название . равно ( thisPage , thisTarget ) , тоreturn formatOutput ( true , "<span class= \" error \" >Это неверная переадресация (она перенаправляет на себя).</span>" )конецесли не эта цель . существует тогдаreturn formatOutput ( true , "<span class= \" error \" >Это неверный редирект (его цель не существует).</span>" )конецесли не другая страница . существует тогдаreturn formatOutput ( true , "<span class= \" error \" >[[:" .. otherPage .fullText .. "]] не существует.</span> " ) конецесли otherTarget и mw . название . равно ( otherPage , otherTarget ) , тогдаreturn formatOutput ( true , "<span class= \" error \" >[[:" .. otherPage .fullText .. "]] является неработающим перенаправлением (перенаправляет на себя).</span> " ) конецесли otherTarget , а не otherTarget . существует тогдаreturn formatOutput ( true , "<span class= \" error \" >[[:" .. otherPage . fullText .. "]] является неработающим перенаправлением (перенаправляет на несуществующую страницу).</span> " )конецесли мв . название . равно ( thisTarget , otherPage ) , тоесли не другая цель, тоreturn formatOutput ( true , "<span class= \" error \" >[[:" .. otherPage .fullText .. "]] не является редиректом, и this уже указывает на него.</span> Скорее всего этот шаблон должны быть удалены». ) конецесли мв . название . равно ( otherTarget , thisPage ) , тоreturn formatOutput ( true , "<span class= \" error \" >Это циклическое перенаправление.</span> Измените цель как этого перенаправления, так и " .. noredir ( otherPage ) .. " на правильную статью. " )конецreturn formatOutput ( true , "<span class= \" error \" >Эта страница перенаправляется на " .. noredir ( otherPage ) .. ", который перенаправляет на [[:" .. otherTarget .fullText .. "]] . < /span> Измените цель этого перенаправления на [[:" .. otherTarget .fullText .. "]] или иным образом разрешите ситуацию. " ) конецесли не другая цель, тоreturn formatOutput ( true , "<span class= \" error \" >[[:" .. otherPage . fullText .. "]] не является перенаправлением.</span> Скорее всего, это перенаправление следует обновить, чтобы оно указывало на [ [:" .. otherPage . fullText .. "]] теперь, когда это больше не перенаправление, и этот шаблон удален. \n ** Если это неправильная цель для этого перенаправления, обновите или удалите этот шаблон и/или саму переадресацию и/или другую страницу в зависимости от ситуации." )конецесли этоDoubleTarget тоесли otherDoubleTarget , тоесли мв . название . равно ( thisDoubleTarget , otherDoubleTarget ) , тоreturn formatOutput ( true , "<span class= \" error \" >Эта страница и " .. noredir ( otherPage ) .. " являются двойными перенаправлениями.</span> Измените цель перенаправления обоих на ".. ( thisDoubleTarget . isRedirect и "правильная статья." или "[[:" .. thisDoubleTarget . fullText .. "]] (или какая-то другая правильная статья)." ))конецreturn formatOutput ( true , "<span class= \" error \" >И эта страница, и " .. noredir ( otherPage ) .. " являются двойными перенаправлениями.</span> Пожалуйста, исправьте их." )конецreturn formatOutput ( true , "<span class= \" error \" >Это двойное перенаправление.</span> Пожалуйста, исправьте это, возможно, изменив его на [[:" .. otherTarget .fullText .. "]] . " ) конецесли не мв . название . равно ( thisTarget , otherTarget ) , тоreturn formatOutput ( true , "<span class= \" error \" >Эта страница и " .. noredir ( otherPage ) .. " перенаправляют на разные статьи.</span> Скорее всего, вам следует изменить цель перенаправления на [[: " .. otherTarget . fullText .. "]] для соответствия. \n ** Если это неправильная цель для этого перенаправления, обновите или удалите этот шаблон и/или само перенаправление и/или другую страницу, если это необходимо." )конецесли это цель . фрагмент ~= другая цель . фрагмент тогда-- Следует ли сообщать об этом случае для обновления?return formatOutput ( false , "Поскольку [[Википедия:Двойные перенаправления|двойные перенаправления]] запрещены,".. " обе страницы в настоящее время указывают на [[:" .. otherTarget . prefixedText .. "]] (но с разными якорями). \n ".. "**Если " .. noredir ( otherPage ) .. " раскрывается в отдельную статью или перенаправляется, ".. " это перенаправление будет переклассифицировано для обновления.")конецконецreturn formatOutput ( false , "Поскольку [[Википедия:Двойные перенаправления|двойные перенаправления]] запрещены,".. " обе страницы в настоящее время указывают на [[:" .. otherTarget . полный текст .. "]]. \n ".. "**Если " .. noredir ( otherPage ) .. " раскрывается в отдельную статью или перенаправляется, ".. " это перенаправление будет переклассифицировано для обновления.")конецвернуть р