Module:LxTerm
Documentation Module[voir] [éditer] [historique] [purger]
Ce module implémente {{LxTerm}}, il met en forme les lignes de commande et ajoute les prompt.
{{#invoke:LxTerm|main|cmdnum=1|user=root|text=test \ test2}}
[root@linux] # test \ > test2Switch
{{#invoke:LxTerm|main|cmdnum=1|user=root|text=test test2}}
[root@linux] # test [root@linux] # test2Switch
{{#invoke:LxTerm|main|user=nobody|text=test2}}
[nobody@linux] $ test2Switch
{{#invoke:LxTerm|main|text=test3}}
[user@linux] $ test3Switch
La documentation ci-dessus est inclus depuis Module:LxTerm/doc. (éditer | historique) Les éditeurs peuvent tester ce module dans sandbox (créer | miroir) et testcases (créer). Sous-pages de ce module. |
local documentation = require('Module:Documentation').main
local getArgs = require('Module:Arguments').getArgs
local p = {}
local function _definePrompt(frame)
--[{{{user|user}}}@linux] {{#ifeq: {{{user}}}|root|# |$ }}
local args = getArgs(frame)
local userArg = args.user or nil
local prompt = "$ "
if not userArg then
userArg = "user"
elseif userArg == "root" then
prompt = "# "
end
return "["..userArg.."@linux] "..prompt
end
function p.main(frame)
local text = frame.args.text
local prompt = _definePrompt(frame)
local result = ""
local sameCommand = false
local html = mw.html.create('table')
for line in text:gmatch("[^\n]+") do
local tr = mw.html.create('table')
local newline
if sameCommand then
local td = mw.html.create('td')
newline = " > "..line
sameCommand = false
else
newline = prompt..line
end
if line:find("\\ *$") then
sameCommand = true
end
result = result..newline.."\n"
end
local sw=mw.html.create('span')
:addClass('lxterm-switch')
:wikitext('Switch')
:cssText('position: relative;top: -50px;left: 95%;text-align: left;')
:allDone()
local pre=mw.html.create('pre')
:addClass('lxterm-code')
:wikitext(result)
:allDone()
local y = result
-- y = y:gsub('\[.*@?.*\]', '')
y = y:gsub('\[[a-z]+@?linux\] [#$] ', '')
y = y:gsub('<br /> > ', '\n ') -- On met les retour à la ligne pour les commandes sur plusieurs lignes
local hidden = mw.html.create('div')
hidden:attr('id', 'test-hid')
:addClass('lxterm-txt')
:addClass('hide')
:cssText('border:1px solid black; background-color: white; width: 70%; margin: 10px auto; padding: 10px; color: black;')
:wikitext(y)
:allDone()
return tostring(pre)..tostring(hidden)..tostring(sw)
end
function p.mulCommands(frame)
local args = getArgs(frame)
local prompt = _definePrompt(frame)
local nbcmd = 0
local ret = ''
local nbs = ''
-- Numéro de commande demandé
if args.cmdnum then
linenb = true
end
local html = mw.html.create('table')
html:addClass('lxterm')
for i, v in pairs(args) do
if tostring(i):match('^[0-9]+$') then --Match uniquement les index numériques
if linenb == true then --Compte les commandes si nécessaire
nbcmd = nbcmd+1
end
local line=mw.html.create('tr')
if linenb == true then -- Cellule pour le numéro de commande
line:tag('td')
:addClass('lxterm-linenb')
:wikitext(nbcmd)
:done()
end
local l=0
local linetmp=''
v = v:gsub('([^\n]+)\n', '%1 <br /> > ') -- On met les retour à la ligne pour les commandes sur plusieurs lignes
v = v:gsub('\\ <br />', '<br />') -- On supprime les \ présents
v = v:gsub('<br />', '\\ <br />') -- Pour en ajouter partout
v = v:gsub('\\ <br /> > $', '')
-- Création de la cellule pour la commande
line:tag('td')
:addClass('lxterm-cmd')
:wikitext(prompt.." "..v)
:done()
ret = ret..tostring(line)
html:wikitext(tostring(line))
end
end
html:done()
return tostring(html)
end
function p.singleCommand(frame)
local args = getArgs(frame)
local prompt = _definePrompt(frame)
local sameCommand = false
local v = args.text or frame.args[1]
local result = ""
v = v:gsub('([^\n]+)\n', '%1 <br /> > ') -- On met les retour à la ligne pour les commandes sur plusieurs lignes
v = v:gsub('\\ <br />', '<br />') -- On supprime les \ présents
v = v:gsub('<br />', '\\ <br />') -- Pour en ajouter partout
v = v:gsub('\\ <br /> > $', '')
local script = mw.html.create('script')
script:wikitext('')
local line=mw.html.create('table')
line:attr('id','test')
:addClass('lxterm-switch')
:tag('tr')
:tag('td')
:addClass('lxterm-cmd')
:wikitext(prompt..v)
:allDone()
local hidtxt = v:gsub(' > ', '')
hidtxt = hidtxt:gsub('<br />', '\n')
local hidden = mw.html.create('div')
hidden:attr('id', 'test-hid')
:addClass('lxterm-txt')
:cssText('border:1px solid black; background-color: white; width: 70%; margin: 10px auto; padding: 10px; color: black;')
:wikitext(hidtxt)
:wikitext('<a href="" id="test-btn">switch</a>')
:allDone()
return tostring(line)..tostring(hidden)
end
return p