<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ASearch_link</id>
	<title>Module:Search link - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ASearch_link"/>
	<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Search_link&amp;action=history"/>
	<updated>2026-06-13T18:07:40Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.3</generator>
	<entry>
		<id>https://mywikibiz.com/index.php?title=Module:Search_link&amp;diff=479386&amp;oldid=prev</id>
		<title>Zoran: Pywikibot 6.4.0</title>
		<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Search_link&amp;diff=479386&amp;oldid=prev"/>
		<updated>2021-07-16T05:55:09Z</updated>

		<summary type="html">&lt;p&gt;Pywikibot 6.4.0&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module implements {{search link}}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local searchProfiles = {&lt;br /&gt;
	-- &amp;quot;advanced&amp;quot; is not included, as we automatically use the advanced profile&lt;br /&gt;
	-- if individual namespaces are specified.&lt;br /&gt;
	default = true,&lt;br /&gt;
	images = true,&lt;br /&gt;
	all = true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function escapeTemplate(s)&lt;br /&gt;
	s = s:gsub('[{}|=]', function(match)&lt;br /&gt;
		return mw.text.nowiki(match)&lt;br /&gt;
	end)&lt;br /&gt;
	return s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseNamespaceList(ns)&lt;br /&gt;
	-- s can be a search profile, a comma-separated list of namespaces, or a&lt;br /&gt;
	-- Lua array.&lt;br /&gt;
	-- Items in the list can be any valid key to mw.site.namespaces.&lt;br /&gt;
	-- We return either a profile string or a table of namespace numbers.&lt;br /&gt;
&lt;br /&gt;
	-- Check for no input or search profile strings.&lt;br /&gt;
	local default = 'default'&lt;br /&gt;
	if not ns then&lt;br /&gt;
		return default&lt;br /&gt;
	elseif searchProfiles[ns] then&lt;br /&gt;
		return ns&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Parse the string for valid namespaces&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	local keys&lt;br /&gt;
	if type(ns) == 'table' then&lt;br /&gt;
		keys = ns&lt;br /&gt;
	else&lt;br /&gt;
		keys = mw.text.split(ns, '%s*,%s*')&lt;br /&gt;
	end&lt;br /&gt;
	for _, key in ipairs(keys) do&lt;br /&gt;
		key = tonumber(key) or key&lt;br /&gt;
		if type(key) == 'string' and key:lower() == 'main' then&lt;br /&gt;
			key = 0&lt;br /&gt;
		end&lt;br /&gt;
		if mw.site.namespaces[key] then&lt;br /&gt;
			ret[#ret + 1] = mw.site.namespaces[key].id&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Check that we were passed at least one namespace, and return the table.&lt;br /&gt;
	if #ret &amp;lt; 1 then&lt;br /&gt;
		return default&lt;br /&gt;
	else&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeLink(searchString, display, ns)&lt;br /&gt;
	-- Normalise the input.&lt;br /&gt;
	if not searchString then&lt;br /&gt;
		-- Show the correct syntax if we are not passed a search string.&lt;br /&gt;
		return '&amp;lt;code&amp;gt;' ..&lt;br /&gt;
			escapeTemplate(&amp;quot;{{search link|''search string''|''link text''}}&amp;quot;) ..&lt;br /&gt;
			'&amp;lt;/code&amp;gt;'&lt;br /&gt;
	end&lt;br /&gt;
	display = display or searchString&lt;br /&gt;
	ns = parseNamespaceList(ns)&lt;br /&gt;
&lt;br /&gt;
	-- Build the query table&lt;br /&gt;
	local query = {&lt;br /&gt;
		search = searchString,&lt;br /&gt;
		fulltext = 'Search'&lt;br /&gt;
	}&lt;br /&gt;
	if searchProfiles[ns] then&lt;br /&gt;
		query.profile = ns&lt;br /&gt;
	else&lt;br /&gt;
		query.profile = 'advanced'&lt;br /&gt;
		for _, nsid in ipairs(ns) do&lt;br /&gt;
			query['ns' .. tostring(nsid)] = '1'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Make the URL.&lt;br /&gt;
	local url = mw.uri.fullUrl('Special:Search', query)&lt;br /&gt;
	url = tostring(url)&lt;br /&gt;
	&lt;br /&gt;
	-- Add the span tags and display value.&lt;br /&gt;
	return string.format(&lt;br /&gt;
		'&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[%s %s]&amp;lt;/span&amp;gt;',&lt;br /&gt;
		url,&lt;br /&gt;
		display&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeNamespaceWarningBanner(title)&lt;br /&gt;
	if title.namespace == 0 then&lt;br /&gt;
		return require('Module:Message box').main('mbox', {&lt;br /&gt;
			type = 'content',&lt;br /&gt;
			text = mw.text.nowiki('{{') ..&lt;br /&gt;
				'[[Template:Search link|Search link]]' ..&lt;br /&gt;
				mw.text.nowiki('}}') ..&lt;br /&gt;
				' ' ..&lt;br /&gt;
				'should not be used in [[WP:WIAA|articles]] as links to ' ..&lt;br /&gt;
				'&amp;quot;search result pages&amp;quot; are among the ' ..&lt;br /&gt;
				'[[WP:LINKSTOAVOID|links normally to be avoided]].',&lt;br /&gt;
			textstyle = 'text-align: center'&lt;br /&gt;
		})&lt;br /&gt;
	else&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(searchString, display, ns, title)&lt;br /&gt;
	title = title or mw.title.getCurrentTitle()&lt;br /&gt;
	return makeLink(searchString, display, ns) .. makeNamespaceWarningBanner(title)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require('Module:Arguments').getArgs(frame, {&lt;br /&gt;
		wrappers = 'Template:Search link'&lt;br /&gt;
	})&lt;br /&gt;
	local searchString = args[1]&lt;br /&gt;
	local display = args[2]&lt;br /&gt;
	local ns = args.ns&lt;br /&gt;
	return p._main(searchString, display, ns)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Zoran</name></author>
	</entry>
</feed>