Template talk:Main talk other

From Wikipedia, the free encyclopedia

Notice This is the talk page of {{main talk other}}. The talk pages of its sister templates such as {{main talk other flex}} and {{main talk category other}} are redirected here, to keep all related discussions in one place.

Contents

[edit] 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)

Y Done. עוד מישהו Od Mishehu 06:14, 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)

Y Done. עוד מישהו Od Mishehu 08:26, 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)

[edit] 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)

[edit] 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. Happymelon 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)

[edit] 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. Happymelon 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)

Y Done Happymelon 21:27, 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)

[edit] CSS namespace detection

For future reference and so I can link people to an example:

Okay, now I feel slightly stupid. I have just discovered that many of the things we use {{main talk other}} for can just as well be done in CSS only. MediaWiki sets the namespace number as a class in the <body> tag for the rendered pages. Thus we can use CSS to detect the namespace and show different looks on boxes.

Such CSS code has to be added as classes in for instance MediaWiki:Common.css, it can not be added as style="" parameters in page code. Below is a code example showing how to do it. If you want to test it you need to copy the CSS code to your own monobook.css.

/* Testing namespace detection. */
.davidbox {                      /* Any namespace */
    width: 80%;
    margin: 0 auto 1em auto;
    padding: .2em;
    border: 1px solid #aaa;      /* Other space colours */
    background: #f9f9f9;              
}
.ns-0 .davidbox {                /* Main (article) space */
    border: 1px solid #aaa;      /* Ambox colours */
    border-left: 10px solid #1e90ff;     
    background: #fbfbfb;              
}
.ns-1 .davidbox,
.ns-3 .davidbox,
.ns-5 .davidbox,
.ns-7 .davidbox,
.ns-9 .davidbox,
.ns-11 .davidbox,
.ns-13 .davidbox,
.ns-15 .davidbox,
.ns-101 .davidbox {              /* Any talk space */
    border: 1px solid #c0c090;   /* Brown talk space colours */
    background: #f8eaba;       
}

And here is a small table that uses the namespace detecting CSS code above:

<table class="davidbox">
<tr><td>Testing the davidbox namespace detection.
</table>

And here is how it renders:

Testing the davidbox namespace detection.

If you haven't installed the CSS code it won't look like much. But with the CSS code it will render as an ambox when on article pages, as a brown talk page message box when on any talk page and as a normal grey messagebox when on any other kind of page.

Neat, isn't it?

--David Göthberg (talk) 22:06, 12 April 2008 (UTC)