Mediawiki>Shirayuki |
|
Line 36: |
Line 36: |
| and subpage ~= "sandbox" | | and subpage ~= "sandbox" |
| and subpage ~= "testcases" | | and subpage ~= "testcases" |
| and subpage ~= "init"
| |
| and subpage ~= "preload"
| |
| and subpage ~= "subpage"
| |
| and subpage ~= "subpage2"
| |
| and subpage ~= "sub-subpage"
| |
| and subpage ~= "sub-sub-subpage"
| |
| and subpage ~= "sub-sub-sub-subpage"
| |
| then | | then |
| return subpage | | return subpage |
Line 50: |
Line 43: |
| end | | end |
|
| |
|
| --[[Get the last subpage of an arbitrary page if it is a translation. | | --[[Get the last subpage of the current page if it is a translation. |
| To be used from templates.
| |
| ]]
| |
| function this.getLanguageSubpage(frame)
| |
| local title = frame and frame.args[1]
| |
| if not title or title == '' then
| |
| title = mw.title.getCurrentTitle()
| |
| end
| |
| return this._getLanguageSubpage(title)
| |
| end
| |
| | |
| --[[Get the last subpage of an arbitrary page if it is a translation.
| |
| To be used from Lua.
| |
| ]] | | ]] |
| function this._getLanguageSubpage(title) | | function this.getLanguageSubpage() |
| if type(title) == 'string' then
| |
| title = mw.title.new(title)
| |
| end
| |
| if not title then
| |
| -- invalid title
| |
| return mw.language.getContentLanguage():getCode()
| |
| end
| |
| --[[This code does not work in all namespaces where the Translate tool works. | | --[[This code does not work in all namespaces where the Translate tool works. |
| -- It works in the main namespace on Meta because it allows subpages there | | -- It works in the main namespace on Meta because it allows subpages there |
Line 84: |
Line 58: |
| -- bug of Meta-Wiki. The work-around is to split the full title and then | | -- bug of Meta-Wiki. The work-around is to split the full title and then |
| -- get the last titlepart. | | -- get the last titlepart. |
| local subpage = title.subpageText | | local subpage = mw.title.getCurrentTitle().subpageText |
| --]] | | --]] |
| local titleparts = mw.text.split(title.fullText, '/')
| | local titleparts = mw.text.split(mw.title.getCurrentTitle().fullText, '/') |
| local subpage = titleparts[#titleparts]
| | local subpage = titleparts[#titleparts] |
| return this.checkLanguage(subpage, mw.language.getContentLanguage():getCode())
| | return this.checkLanguage(subpage, '') |
| end
| |
| | |
| --[[Get the last subpage of the current page if it is a translation.
| |
| ]]
| |
| function this.getCurrentLanguageSubpage()
| |
| return this._getLanguageSubpage(mw.title.getCurrentTitle())
| |
| end
| |
| | |
| --[[Get the first part of the language code of the subpage, before the '-'.
| |
| ]]
| |
| function this.getMainLanguageSubpage()
| |
| parts = mw.text.split( this.getCurrentLanguageSubpage(), '-' )
| |
| return parts[1]
| |
| end | | end |
|
| |
|
Line 108: |
Line 69: |
| ]] | | ]] |
| function this.getFrameLanguageSubpage(frame) | | function this.getFrameLanguageSubpage(frame) |
| return this._getLanguageSubpage(frame:getParent():getTitle())
| | local titleparts = mw.text.split(frame:getParent():getTitle(), '/') |
| | local subpage = titleparts[#titleparts] |
| | return this.checkLanguage(subpage, '') |
| end | | end |
|
| |
|
Line 171: |
Line 134: |
| ]] | | ]] |
| local title | | local title |
| local namespace = args['tntns'] or '' | | local namespace = args['namespace'] or '' |
| if (namespace ~= '') -- Checks for tntns parameter for custom ns. | | if (namespace ~= '') -- Checks for namespace parameter for custom ns. |
| then | | then |
| title = this.title(namespace, pagename) -- Costly | | title = this.title(namespace, pagename) -- Costly |
Line 189: |
Line 152: |
| if (subpage == '') | | if (subpage == '') |
| then | | then |
| subpage = this.getCurrentLanguageSubpage() | | subpage = this.getLanguageSubpage() |
| end | | end |
| if (subpage == '') | | if (subpage == '') |
Line 273: |
Line 236: |
| end | | end |
| arguments['template'] = title -- override the existing parameter of the base template name supplied with the full name of the actual template expanded | | arguments['template'] = title -- override the existing parameter of the base template name supplied with the full name of the actual template expanded |
| arguments['tntns'] = nil -- discard the specified namespace override | | arguments['namespace'] = nil -- discard the specified namespace override |
| arguments['uselang'] = args['uselang'] -- argument forwarded into parent frame | | arguments['uselang'] = args['uselang'] -- argument forwarded into parent frame |
| arguments['noshift'] = args['noshift'] -- argument forwarded into parent frame | | arguments['noshift'] = args['noshift'] -- argument forwarded into parent frame |
| | | |
| return frame:expandTemplate{title = ':' .. title, args = arguments} | | return frame:expandTemplate{title = ':' .. title, args = arguments} |
| end
| |
|
| |
| --[[A helper for mocking TNT in Special:TemplateSandbox. TNT breaks
| |
| TemplateSandbox; mocking it with this method means templates won't be
| |
| localized but at least TemplateSandbox substitutions will work properly.
| |
| Won't work with complex uses.
| |
| ]]
| |
| function this.mockTNT(frame)
| |
| local pargs = (frame:getParent() or {}).args
| |
| local arguments = {}
| |
| for k, v in pairs(pargs) do
| |
| -- numbered args >= 1 need to be shifted
| |
| local n = tonumber(k) or 0
| |
| if (n > 0)
| |
| then
| |
| if (n >= 2)
| |
| then
| |
| arguments[n - 1] = v
| |
| end
| |
| else
| |
| arguments[k] = v
| |
| end
| |
| end
| |
| if not pargs[1]
| |
| then
| |
| return ''
| |
| end
| |
| return frame:expandTemplate{title = 'Template:' .. pargs[1], args = arguments}
| |
| end | | end |
|
| |
|
| return this | | return this |