Template:Uses from: Difference between revisions

Tweak to have {{{1}}} identify whether it's a library (or implementation, or whatever).
(→‎Discussion: Further thoughts.)
(Tweak to have {{{1}}} identify whether it's a library (or implementation, or whatever).)
 
(22 intermediate revisions by the same user not shown)
Line 1:
<div class="examplemeta libheader"><noinclude>'''Uses:''' (tool name) <small> ('''Component[s]:''' Component1, Component2, ComponentN )</small></noinclude><includeonly>'''Uses:''' [[SMW::off]]<!--
 
-->[[uses::{{{1}}}/{{{2}}}|{{{12}}}]]<!--
-->{{#set:Uses library{{{1}}}={{{1}}}/{{{2}}}}}<!--
 
-->{{#if[[Category: {{{version2}}}|]]<!--
 
There must be a component N=1, for there to be a component N>1. If there's no component N=1, then there's no reason to put any of the component list artifacts in.
-->[[SMW::on]]{{#set:Uses {{{1}}} version={{{version}}}[[SMW::off]]<!--
-->{{#if: {{{component1|}}}|<!--
 
--> <small> (<!--
Ending #if
 
Is there more than one component?
-->{{#if: {{{component2}}}|<!--
Plural
-->'''Components:''' <!--
-->|<!--
Singular
--> <small>('''Component[s]:''' {{{2}}})<!--
End plural/singluar #if.
-->}}<!--
 
-->[[Category:{{{1}}}]][[SMW::on]]<!--
 
--> <small>('''Component[s]:''' {{{2}}})<!--
 
--><includeonly><!--
 
-->{{#foreach: component$n$|<!--
 
-->[[Category:{{{1}}}]][[SMW::on]]<!--
-->{{Uses {{{1}}} package::component$n$|component$n$}}<!--
 
-->[[Uses {{#if{1}}}:: {{{version1}}}/{{{2}}}/{{{component$n$}}}|{{{component$n$}}}]], <!--
 
Ending #ifforeach
-->{{#set:Uses {{{1}}} version={{{version}}} component=component$n$]]<!--
-->}}<!--
-->{{#set:Uses {{{1}}} component=component$n$ version={{{version}}}]]<!--
 
Ending #if componentN
-->}}<!--
 
Only apply </small> if we have components.
Ending #foreach
-->{{#if: {{{component1|}}}|<!--
--> )</small> <!--
-->}}<!--
 
Ending examplemeta div.
--></includeonly></small></div><!--
 
--><noinclude>
 
This template is intended to handle the case where a library{{{1}}} has many components within it (examples of this include CPAN, RubyGems and Tcllib). It has two required parameters: <tt><nowiki>{{</nowiki>uses from|</tt>''library{{{1}}}''<tt>|</tt>''component''<tt><nowiki>}}</nowiki></tt>. The ''library{{{1}}}'' is the name of the overall library{{{1}}} of components (which should also be the name of a category here on RC) and the ''component'' is the name of the component within it (which can be almost any string).
 
==Discussion==
This template is derived from {{tmpl|tcllib}}, and seeks to have a similar aim, except more generically, and as a potential eventual replacement for {{tmpl|libheader}} and {{tmpl|works with}}. (And {{tmpl|tcllib}}, if it achieves sufficient functionality.)
 
===What it does===
Design goals in common with {{tmpl|tcllib}}, {{tmpl|libheader}} and {{tmpl|works with}}:
* Associates the page with the {{{1}}}:
* Use {{{1}}} as the library name.
** Semantically, as <tt><nowiki>[[Uses {{{1}}}::{{{2}}}]</nowiki></tt>
** As part of <tt>[[:Category:{{{2}}}]]</tt> (though this may eventually change)
** By linking to <tt>[[{{{1}}}/{{{2}}}]]</tt>.
* Associates the page with each component specified
** Semantically, as <tt><nowiki>[[Uses {{{1}}}::{{{2}}}/{{{componentN}}}]]</nowiki></tt> (Placing the component as a subpage of the {{{1}}}
** By linking to <tt><nowiki>[[{{{1}}}/{{{2}}}/{{{componentN}}}]]</nowiki></tt>.
 
===What it needs to do (eventually)===
Other ultimate goals that make its behavior variously different from current {{tmpl|tcllib}}, {{tmpl|libheader}} and {{tmpl|works with}}:
* Associate {{{1}}} version information with the page.
* Avoid using MW categories. Use semantic properties instead. (MW categories have particular behavior when used in semantic queries.)
* Associate component version information with the page.
* Apply the semantic property <tt>'''uses::{{{1}}}'''</tt>
* Accept an undefined number of additional ''named'' arguments as components of that library. (var name might be '''componentN''') Add a semantic property to the page indicating that it uses {{{1}}}.
** <tt>uses '''{{{1}}}''' component::'''{{{component1}}}''', '''{{{component2}}}''', etc...</tt>
* Accept library version as a single named argument. (var name might be '''version''') Tag the transcluding page as using that version of library {{{1}}}.
** <tt>uses '''{{{1}}}''' version:'''{{{version}}}'''</tt>.
* For each {{{componentN}}} supplied, if any, apply
** <tt>uses '''{{{1}}}''' version '''{{{version}}}''' component::'''{{{componentN}}}'''</tt>.
** <tt>uses '''{{{1}}}''' component '''{{{componentN}}}''' version::'''{{{version}}}'''</tt>.
 
We can probably define a componentNver parameter, and use per-component properties of:
* <tt>uses '''{{{1}}}''' version '''{{{version}}}''' component::'''{{{componentN}}}'''</tt>.
* <tt>uses '''{{{1}}}''' component '''{{{componentN}}}''' version::'''{{{componenNver}}}'''</tt>.
* <tt>uses '''{{{1}}}''' version '''{{{version}}}''' component '''{{{componentN}}}''' version::'''{{{componenNver}}}'''</tt>.
 
===What it should do===
* Avoid using MediaWiki categories as possible.
 
The richer the relationships we can define, the more powerful the search options we'll have available.
 
(Unless someone can figure out a better way to apply pagename/libname/component/version with the semantic properties.)
 
{{template}}[[Category:Example description templates]]</noinclude>