Hi Andru,

Okay, that's great news.

I didn't think about the need to define headers; but that seems like good
syntax for it.

-Yaron

On Tue, Oct 30, 2012 at 12:37 PM, Andru Vallance <an...@tinymighty.com>wrote:

> Hi Yaron,
> The code to enable the table display on PracticalPlants resides in a
> separate skin-companion extension, but I'd be glad to extend the
> functionality to offer a table view baked into the core.
>
> How do you envision table headers being defined? Something like....
>
> {{{for template|Reference|multiple|display=table|table
> headers=One;Two;Three;Four;Five;etc}}}
>
> Andru
>
>
> El 30/10/2012, a las 17:15, Yaron Koren escribió:
>
> Hi Andru,
>
> One has to register to see the form link you included, but I'm glad I did,
> because that form looks great! Turning a multiple-instance template form
> section into a spreadsheet-like interface is a fairly obvious enhancement
> that I, and other people, have wanted for a long time. So however we can
> get this functionality into SF, I think it would be great.
>
> I guess there are two issues: how to make SF's display of
> multiple-instance templates extensible so that it can allow further
> customizations like yours, and how to specifically add this kind of
> spreadsheet/table display. (You could argue that there's a third issue, of
> how to make all of SF's HTML display more extensible.)
>
> For the 2nd issue, I could imagine that there could be a new parameter,
> like "display=", so that one could call something like the following:
>
> {{{for template|Reference|multiple|display=table}}} (or "spreadsheet")
>
> I only skimmed through your code, but I assume the code you added to
> enable this specific display is outside of the SF code, and possibly
> hardcoded for your specific data structure? If so, what do you think about
> the idea of adding this kind of thing directly into Semantic Forms, in
> addition to the new hooks?
>
> -Yaron
>
> On Tue, Oct 30, 2012 at 9:29 AM, Andru Vallance <an...@tinymighty.com>wrote:
>
>> *I inadvertently sent this from the wrong email account earlier, and it
>> seems to have vanished into a black hole. I'm resending again, from the
>> correct email account. My apologies if the other turns up as a duplicate.
>> *
>>
>> Hello,
>> For my work on Practical Plants (http://practicalplants.org/wiki), I
>> needed to be able to control the HTML which was output by multiple template
>> instances. Currently the HTML is hardcoded within the SF parser and there
>> are no hooks available to modify it's output. While my need may be a fringe
>> case, I think hardcoded HTML with no way to override it encourages hacking
>> the core files: A Very Bad Thing. *I'd like to submit my changes for
>> inclusion into SF core, so I'm looking for feedback on the changes I'm
>> proposing. *I've attached a patch for SF_FormPrinter.php and
>> SemanticForms.php and a new class file SF_MultipleTemplate.php, at the end
>> of this email.
>>
>> I've made the following SF hooks available to modify the HTML output of a
>> multiple template instance. In order to make these hooks flexible, I wanted
>> to be able to supply an object instance which contained information about
>> the Multiple Template Instance being parsed. To do this, I extracted most
>> of the logic for outputting multiple template instances into a new class
>> *SFMultipleTemplate *which is responsible for defining the default HTML
>> (which is currently hardcoded in *SFFormPrinter), * and for running the
>> following hooks, which it passes the default html by reference to allow for
>> modification, and the *SFMultipleTemplate* instance which is calling the
>> hook, to give access to data about the Multiple Template Instance in
>> question.
>>
>> Here are the hooks I've created, based on the default HTML currently used.
>>
>> *sfMultipleInstanceTemplateBeforeHTML (String &$html, 
>> SFMultipleTemplate$template)
>> *
>> Allows the customisation of the HTML which is output before the list of
>> template instances.
>>
>> *sfMultipleInstanceTemplateAfterHTML (String &$html, SFMultipleTemplate
>>  $template)*
>> Allows the customisation of the HTML which is output after the list of
>> template instances.
>>
>> *sfMultipleInstanceTemplateHTML **(String &$html, String $content,
>> SFMultipleTemplate $template)*
>> Allows the customisation of the html which wraps a multiple template
>> instance item.
>>
>> *sfMultipleInstanceTemplateAdderHTML **(String &$html, String $content,
>> SFMultipleTemplate $template)*
>> Same as above, except this sets the hidden multiple template instance
>> item which is cloned by the frontend javascript when the add button is
>> clicked.
>>
>> *sfMultipleInstanceTemplateInnerHTML **(String &$html, String $section,
>> SFMultipleTemplate $template)*
>> Allows the customisation of the html of the multiple template instance
>> item. The html returned by this must contain the close and reorder icons.
>> Passing some isolated default html for those icons, or providing get
>> methods in *SFMultipleTemplate* might be a good idea.
>>
>>
>>
>> *Practical Plants Use Case*
>> I use these hooks to render multiple template instance items as rows of a
>> table for my references. You can see it in action here:
>>
>>
>> http://practicalplants.org/w/index.php?title=Malus_domestica&action=formedit#References
>>
>> This is implemented with the following hook handlers in my skin's related
>> extension. Note that by extracting the Multiple Template Instance
>> functionality into an object, I am able to check the template name to
>> customise output on a per-instance basis.
>>
>> function sfMultipleInstanceTemplateBeforeHTML(&$html, $template){
>> if($template->template_name === 'Reference'){
>>  $html = '
>> <div class="multipleTemplateWrapper">
>> <table class="table">
>>  <thead>
>> <th class="ref-type">Type</th>
>> <th class="ref-id">Identifier</th>
>>  <th class="ref-author">Author</th>
>> <th class="ref-title">Title</th>
>>  <th class="ref-source">Source</th>
>> <th class="ref-url">URL/ISBN</th>
>>  <th class="ref-date">Date</th>
>> <th class="ref-buttons"></th>
>>  </thead>
>> <tbody class="multipleTemplateList">';
>> }
>>  return true;
>> }
>> function sfMultipleInstanceTemplateAfterHTML(&$html, $template){
>>  if($template->template_name === 'Reference'){
>> $html = '</tbody></table>';
>> $html .= $template->addButtonHTML();
>>  $html .= '</div>';
>> }
>> return true;
>> }
>>  function sfMultipleInstanceTemplateHTML(&$html, $content, $template){
>> if($template->template_name === 'Reference'){
>>  $html = '<tr class="multipleTemplateInstance
>> multipleTemplate">'.$content.'</tr>';
>> }
>>  return true;
>> }
>>
>> function sfMultipleInstanceTemplateAdderHTML(&$html, $content, $template){
>>  if($template->template_name === 'Reference'){
>> $html = '<tr class="multipleTemplateStarter"
>> style="display:none">'.$content.'</tr>';
>>  }
>> return true;
>> }
>>
>> function sfMultipleInstanceTemplateInnerHTML(&$html, $section, $template){
>>  global $sfgScriptPath;
>> if($template->template_name === 'Reference'){
>>
>>   //we have to str_replace some faux td elements since mediawiki doesn't
>> allow <td> elements in wikitext without an enclosing table element
>>
>>  $html =   str_replace('-!/td!-','</td>',str_replace('-!td!-', '<td>',
>> $section)).'<td>'
>>  . '<span class="removeButton"><a class="btn btn-link remover"><i
>> class="icon-remove"></i></a></span>'
>>  . '<span class="instanceRearranger"><img
>> src="'.$sfgScriptPath.'/skins/rearranger.png"
>> class="rearrangerImage"></span>'
>>  . '</td>';
>> }
>> return true;
>> }
>>
>>
>>
>>
>>
>> *Patch for SF_FormPrinter.php*
>>
>>
>>
>> *Patch for SemanticForms.php*
>> **
>>
>> **
>>
>>
>> *New class file SF_MultipleTemplate.php*
>> **
>>
>> **
>> *
>> *
>> *
>> *
>> *
>> *
>> Any feedback would be appreciated. I'd love to have this included in the
>> core so I can implement the functionality I need without having a custom
>> core hack!
>>
>> Thanks
>> Andru Vallance
>> PracticalPlants.org
>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> Everyone hates slow websites. So do we.
>> Make your web apps faster with AppDynamics
>> Download AppDynamics Lite for free today:
>> http://p.sf.net/sfu/appdyn_sfd2d_oct
>> _______________________________________________
>> Semediawiki-devel mailing list
>> Semediawiki-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/semediawiki-devel
>>
>>
>
>
> --
> WikiWorks · MediaWiki Consulting · http://wikiworks.com
>
>
>


-- 
WikiWorks · MediaWiki Consulting · http://wikiworks.com
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct
_______________________________________________
Semediawiki-devel mailing list
Semediawiki-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/semediawiki-devel

Reply via email to