Template talk:Main talk other/Archive 1
This is an archive of past discussions about Template:Main talk other. Do not edit the contents of this page. If you wish to start a new discussion or revive an old one, please do so on the current talk page. |
Archive 1 |
Protection tag needs fixing
{{editprotected}}
The {{pp-template|small=yes}}
tags in this template and its two sister templates are placed in the wrong part of the templates, making the templates malfunction. I request that the {{pp-template|small=yes}}
tags be removed from the top of the code, so the switch statements become the first line, for these three templates; {{main talk other}}, {{main talk other flex}} and {{main talk category other}}.
And instead the bottom last lines of all three templates be changed to look exactly like this:
}}<!--End switch--><noinclude> {{pp-template|small=yes}} {{Documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude>
Thanks in advance.
--David Göthberg (talk) 02:54, 17 March 2008 (UTC)
{{editprotected}}
Ehm, Oops? Only 1/3 of the request above got done. {{main talk other flex}} and {{main talk category other}} still needs fixing, per the request above.
--David Göthberg (talk) 06:42, 17 March 2008 (UTC)
- Ah, thanks! Now the code looks right and they pass all the tests on my test page. So now I can "advertise" them by linking them from the relevant pages.
- --David Göthberg (talk) 08:38, 17 March 2008 (UTC)
This template is now broken, please revert
This edit broke the template's detection function. It now will consider an empty but defined demospace parameter valid, and will thus invoke the other type. Which means when templates that use this meta-template them self use the demospace parameter ( demospace = {{{demospace|}}}
) then they will get the wrong type. A good example is the {{notice}} box on top of this page, it should have the brown talk page style but now shows the grey other pages style. ( {{notice}} uses {{main talk other}} for its page type detection.)
--David Göthberg (talk) 14:12, 22 March 2008 (UTC)
- I have no idea what actually happened there, but it's reverted to the old version now. Shimgray | talk | 14:38, 22 March 2008 (UTC)
- Thanks. Yeah, the difference between empty and not defined template parameters is subtle stuff. Took me some reading and testing to learn how that works. Now the {{notice}} box on the top of this page is back to brown again as it should, so all looks well.
- --David Göthberg (talk) 14:43, 22 March 2008 (UTC)
An explanation for later readers of this: {{{variable|default}}} doesn't produce the default for empty but defined variables, only for not defined variables. That's why we have to do {{#if:{{{variable|}}} | variable | default }} in some cases, like in this template.
--David Göthberg (talk) 14:54, 22 March 2008 (UTC)
Thoughts on improvement so they don't get lost
Since it's about to get lost from {{pp-meta/sandbox}}
, where it started, This is my suggestion for a cleaner (and more reliable, in the very unlikely instance of the mainspace being renamed) coding.
{{#switch: <!--If no or empty "demospace" parameter then detect namespace--> {{#if:{{{demospace|}}} | {{{demospace}}} | {{#ifeq:{{NAMESPACE}}|{{ns:0}} | main | {{#ifeq:{{NAMESPACE}}|{{TALKSPACE}} | talk | other }} }} }} | main = {{{1|main}}} | talk = {{{2|talk}}} | other | #default = {{{3|other}}} }}<!--End switch--><noinclude> {{pp-template|small=yes}} {{Documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude>
Just a thought. The functionality is absolutely no different. Happy‑melon 17:35, 24 March 2008 (UTC)
- Yes, I agree with your suggestion, it is more readable and as you point out more "future compatible". (Unless they change
{{#ifeq:|||}}
so it can't handle comparison of empty strings...) As you know I have tested that your code works. So go ahead and do the change. And please do the same update to {{Main talk category other}}. - But don't touch {{Main talk other flex}} since that one is meant to be different.
- Oh, and while you're at it could you add back one empty line between the
<noinclude>
tag and the{{pp-template}}
? It makes it clearer where the noinclude section is and I have noticed it reduces the number of edit mistakes where people put code in the wrong section. (I don't know why people often remove that empty line from templates I create, it only costs one byte extra in the code.) - --David Göthberg (talk) 23:40, 24 March 2008 (UTC)
- I have (not on this site) removed the empty lines before. The reason is when your template is not actually generating anything for the page, you get blank space at the top of the page that you didn't expect. Try it out, look at the page on two browser pages, go in, take the lines out on one of the pages and then compare the results. I am not suggesting you change this here, a lot of the time I put something like:
}}<!--End switch--><noinclude><!-- -->{{pp-template|small=yes}} {{Documentation, template}}
- and it takes that empty space out of the top of my page without changing the spacing in the page. Enjoy. dparvin (talk) 00:54, 21 August 2008 (UTC)
- Dparvin: That's odd. I have now tested it in several ways and I could not recreate that bug. I even viewed the sources of the rendered XHTML pages that Wikipedia outputs, there are no extra space if the template has empty lines in the noinclude area.
- But I did notice that on the template page itself the green documentation box goes down one line when the noinclude area has an empty line. And that is expected since on the template page we also see the stuff between the noinclude tags. Perhaps that is what tricked you into believing that extra spaces would become visible?
- --David Göthberg (talk) 03:22, 21 August 2008 (UTC)
Even more useful
I have been thinking of another improvement too. And when I saw how you were using {{main talk other}} in {{pp-meta/sandbox}} then it was clear to me that the improvement I am thinking of is needed:
If any parameter is fed (except for namespace of course) then {{main talk other}} should not return the short namespace strings "main/talk/other" but instead return an empty string. That is, if it for instance is used in any of these ways:
{{main talk other|Talk text}}
{{main talk other|Talk text}}
{{main talk other|2=Talk text}}
Then it should not return anything in mainspace and other space.
So I suggest this new code for {{main talk other}}:
{{#switch: <!--If no or empty "demospace" parameter then detect namespace--> {{#if:{{{demospace|}}} | {{lc: {{{demospace}}} }} <!--Use lower case "demospace"--> | {{#ifeq:{{NAMESPACE}}|{{ns:0}} | main | {{#ifeq:{{NAMESPACE}}|{{TALKSPACE}} | talk | other }} }} }} <!--If any parameter, then don't return the "main/talk/other" strings--> | main = {{#if:{{{1|}}}{{{2|}}}{{{3|}}} | {{{1|}}} | main }} | talk = {{#if:{{{1|}}}{{{2|}}}{{{3|}}} | {{{2|}}} | talk }} | other | #default = {{#if:{{{1|}}}{{{2|}}}{{{3|}}} | {{{3|}}} | other }} }}<!--End switch--><noinclude> {{pp-template|small=yes}} {{Documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude>
And here is the new code for {{main talk category other}}:
{{#switch: <!--If no or empty "demospace" parameter then detect namespace--> {{#if:{{{demospace|}}} | {{lc: {{{demospace}}} }} <!--Use lower case "demospace"--> | {{#ifeq:{{NAMESPACE}}|{{ns:0}} | main | {{#ifeq:{{NAMESPACE}}|{{TALKSPACE}} | talk | {{#ifeq:{{NAMESPACE}}|Category | category | other }} }} }} }} <!--If any parameter, then don't return the "main/talk/category/other" strings--> | main = {{#if:{{{1|}}}{{{2|}}}{{{3|}}}{{{4|}}} | {{{1|}}} | main }} | talk = {{#if:{{{1|}}}{{{2|}}}{{{3|}}}{{{4|}}} | {{{2|}}} | talk }} | category = {{#if:{{{1|}}}{{{2|}}}{{{3|}}}{{{4|}}} | {{{3|}}} | category }} | other | #default = {{#if:{{{1|}}}{{{2|}}}{{{3|}}}{{{4|}}} | {{{4|}}} | other }} }}<!--End switch--><noinclude> {{pp-template|small=yes}} {{Documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude>
And here is the new code for {{main talk other flex}}:
{{#switch: {{lc: <!--Lower case the result--> <!--If no or empty "demospace" parameter then use x+NAMESPACE--> {{#if:{{{demospace|}}} | {{{demospace}}} | x{{NAMESPACE}} }} }} | main | x = <!--Parameter "main" or main (article) space--> <!--If any parameter, then don't return the "main" string--> {{#if:{{{1|}}}{{{2|}}}{{{3|}}} | {{{1|}}} | main }} | talk | xtalk | xuser talk | xwikipedia talk | ximage talk | xmediawiki talk | xtemplate talk | xhelp talk | xcategory talk | xportal talk = <!--Parameter "talk" or any talk space--> {{#if:{{{1|}}}{{{2|}}}{{{3|}}} | {{{2|}}} | talk }} | other | xuser | xwikipedia | ximage | xmediawiki | xtemplate | xhelp | xcategory | xportal | #default = <!--Parameter "other" or other space--> {{#if:{{{1|}}}{{{2|}}}{{{3|}}} | {{{3|}}} | other }} }}<!--End switch--><noinclude> {{pp-template|small=yes}} {{Documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude>
I have tested these codes carefully in my own userspace.
Unfortunately this makes the code for {{main talk other flex}} more complex, which is bad since that is supposed to be the "easy to modify" example. But I think proper functionality is more important than easy to read code.
--David Göthberg (talk) 01:33, 25 March 2008 (UTC)
- I note that you haven't made the change to use
{{ns:0}}
in the third example - I don't know if that's deliberate. Other than that, this change would make the template much more useful in the manner you describe. Happy‑melon 21:20, 26 March 2008 (UTC)
- Yes, that was deliberate. The third template {{main talk other flex}} is meant to be copied and pasted from if you want to make really complex detection functions. Like say detect "reader", "editor" and "talk" space separately. "Reader space" for instance being: Articles + "Image:" pages. And "editor space" being "Help:", "Wikipedia:" etc. To achieve that, all you have to do is to copy and paste from {{main talk other flex}} and then rearrange the order of the namespaces in the switch case. Thus there must be an entry for the main space, that is the "x" entry. And that is why it can't use if-cases like the other two templates do. I should probably document that better at {{main talk other flex}}, just have so many other templates that needs documenting...
- Oh, I think I see what you mean now. We could change that "x" entry to say:
| x{{lc:{{ns:0}}}} =
- But I don't think that is much clearer. I don't think we can get rid of the x's since from what I remember the switch case can't match an empty string. That's why I had to add the x's in the first place. I lower cased the ns:0 since if they do give the main space a name then we must lower case that line. Of course, that is unlikely so we could skip the lower casing. Causing this code:
| x{{ns:0}} =
- Ehm, that actually looks pretty good. We perhaps should use it? Is that the code you were thinking of? But perhaps we should have the lower casing, since if people reuse this code on other Wikipedias then they might try to use {{ns:5}} and so on instead of translating the namespace names. And then it will take them a lot of debugging until they realise why it doesn't work. Many of my templates have been copied to other projects now and they have sometimes had much trouble in porting them, so I am trying to become friendlier and code in a way that is portable.
- --David Göthberg (talk) 08:15, 27 March 2008 (UTC)
{{editprotected}}
I would like that {{main talk other}}, {{main talk category other}} and {{main talk other flex}} be updated to the codes I show above. It does not affect the templates that already use these templates. And yes, we are still discussing one of the code lines, but the different variants of that line does not affect functionality at all, it is just a "code prettyfying" discussion. (Very annoying that I can not update templates I created myself.)
--David Göthberg (talk) 11:03, 28 March 2008 (UTC)
- Thanks. And I ran some tests just to make sure: The updated templates work perfectly.
- --David Göthberg (talk) 18:20, 29 March 2008 (UTC)
- Oops. I saw that a switch case that you guys use in {{pp-meta/sandbox}} does use empty strings. So I ran some tests in my user space. Seems I have been wrong, empty strings are valid in switch cases. I must have just assumed it could not, or perhaps I did a faulty test back then, or MediaWiki has been upgraded since last summer. Anyway, I think I will make a new nicer code for {{Main talk other flex}} without all the x:s. (Note, nothing is currently broken. We just use unnecessarily complex code right now.)
- --David Göthberg (talk) 07:07, 30 March 2008 (UTC)
- I have now updated {{Main talk other flex}} to use code without all the x:s.
- --David Göthberg (talk) 22:07, 18 April 2008 (UTC)