Template:Uses from: Difference between revisions

Tweak to have {{{1}}} identify whether it's a library (or implementation, or whatever).
(I'm having a bad feeling about having library package components unprefixed with the lib name in the same namespace. Also, this should set up packages automatically as subproperties of the library.)
(Tweak to have {{{1}}} identify whether it's a library (or implementation, or whatever).)
 
(6 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: {{{version|2}}}|]]<!--
 
-->[[SMW::on]]{{#set:Uses {{{1}}} version={{{version}}}}}[[SMW::off]]<!--
 
Ending #if
-->}}<!--
 
-->[[Category:{{{1}}}]]<!--
 
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.
Line 27 ⟶ 20:
End plural/singluar #if.
-->}}<!--
 
includeonly the foreach loop.
--><includeonly><!--
 
-->{{#foreach: component$n$|<!--
Line 35 ⟶ 25:
-->[[SMW::on]]<!--
 
-->[[Uses library::{{{1}}}::{{{1}}}/{{{2}}}/{{{component$n$}}}|{{{component$n$}}}]], <!--
 
-->{{#if: {{{version|}}}|<!--
 
-->{{#set:Uses {{{1}}} version={{{version}}} component={{{component$n$}}}}}<!--
-->{{#set:Uses {{{1}}} component={{{component$n$}}} version={{{version}}}}}<!--
 
Ending #if version
-->|}}<!--
 
Ending #foreach
Line 49 ⟶ 31:
 
Ending #if componentN
-->}}<!--
 
Only apply </small> if we have components.
-->{{#if: {{{versioncomponent1|}}}|<!--
--> )</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>