Comparing revisions for GrabCodeHandler

Additions:
Documentation: ""GrabCodeHandlerInfo"".>>This is the development page for the Grab Code handler.::c::
In the future, admin-configurable options will be added to allow:
~1) //switching this option on/off//;
~1) display a download button only for code blocks //longer than n lines//.
====Sample output====
""<div class="code"><ol><li><div class="de1"><span class="kw2"><?php</span></div></li>
<li><div class="de1"><a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">"Hello world!"</span>;</div></li>
<li><div class="de1"><span class="kw2">?></span> </div></li></ol></div><br /><form action="http://wakka/TestCode/export" method="post">
<input style="float:right; margin-right:20px;" type="submit" name="save" value="Save to file" title="Download
code" /><input type="hidden" name="code" value="%3C%3Fphp%0Aecho+%22Hello+world%21%22%3B%0A%3F%3E" /></form>
</div>""
return $output;
}
//build form
$form = $wakka->FormOpen("grabcode");
$form .= '<input type="submit" style="float:right; margin-right:20px;" name="save" value="Save to file" title="Grab code"/>';
$form .= '<input type="hidden" name="code" value="'.urlencode($code).'" />';
$form .= $wakka->FormClose();

// output
return $output.'<br />'.$form;
}
header('Content-type: application/force-download');
elseif ($this->method == "raw")
{
header("Content-type: text/plain");
print($this->Method($this->method));
}
elseif ($this->method == "raw")
{
header("Content-type: text/plain");
print($this->Method($this->method));
}
// grabcode handler
elseif ($this->method == "grabcode")
{
print($this->Method($this->method));
}
CategoryDevelopment
Deletions:
Documentation: ""GrabCodeHandlerInfo""
Other: ImprovedFormatter.>>This is the development page for the Grab Code handler.::c::
===Changelog===
~-[2006-04-23] --- New version committed to the SVN repository (Revisions [[http://wush.net/trac/wikka/log/trunk/?action=stop_on_copy&rev=51&stop_rev=49&mode=stop_on_copy 49-51]]): code block syntax now accepts an optional value for filename: ##""%%(php;12;myfile.php) ... %%""##. If ##filename## is specified a small header for the code block is generated, and ##filename## is used as a title for the download button and as a name for the downloadable file.
~-[2004-02-17] --- I've uploaded this handler on this server as a beta feature. Feedback is welcome. See the **issues** section at the bottom of this page for more details.
return $output;
}
//build form
$form = $wakka->FormOpen("grabcode");
$form .= '<input type="submit" class="grabcodebutton" style="float:right; margin-right:20px; margin-top:0px; font-size: 10px; color: #000;font-weight: normal; font-family: Verdana, Arial, sans-serif; background-color: #DDD; text-decoration: none; height:18px;" name="save" value="Grab" title="Download this code"/>';
$form .= '<input type="hidden" name="code" value="'.urlencode($code).'" />';
$form .= $wakka->FormClose();

// output
return "$output \n $form";
}
~&DarTar, you should get rid of the <br /> before the form - that's what causes (most of) the extra vertical whitespace between the codeblock and the button that we already discussed on #wikka. The codeblock already is a block (div), so whatever comes after it will automatically start on a new line; the <br /> is adding an //extra// one. See the weird and confusing effect this can have now on the item 'Double-click editing' on WikkaBugs (especially since you're also floating it). For readable HTML output, add a "\n" before the form instead of <br />.
~&As a next step, give it a class: putting in the styling here prevents people from giving it their own styling to fit in with their skin! --JavaWoman
~~& Good point. As we discussed, I can't give a class to the form using the ##""FormOpen()""## method, for the time being I add a class to the ##input## button, in the future this will be handled by the appropriate contextual CSS selectors -- DarTar
~~~&See AdvancedFormOpen for a solution. --JavaWoman
~&Now that AdvancedFormOpen and ImprovedFormatter have both been installed on this site as a [[WikkaBetaFeatures beta feature]], I've adapted the code above slightly to take advantage of the capability of the new ##""FormOpen()""## method to add a class to the form. The new code is now as follows:%%(php;334) #return $output;
// START DarTar modified 2005-02-17
// slight mod JavaWoman 2005-06-12: coding style, class for form
//build form
$form = $wakka->FormOpen('grabcode','','post','','grabcode');
$form .= '<input type="submit" name="save" class="grabcodebutton" style="line-height:10px; float:right; vertical-align: middle; margin-right:20px; margin-top:0px; font-size: 10px; color: #000; font-weight: normal; font-family: Verdana, Arial, sans-serif; background-color: #DDD; text-decoration: none; height:18px;" value="Grab" title="Download this code" />';
$form .= '<input type="hidden" name="code" value="'.urlencode($code).'" />';
$form .= $wakka->FormClose();
// output
return $output."\n".$form;
// END DarTar modified 2005-02-17
%%---(See ImprovedFormatter for the full code.)
~&With this, every grabcode form gets a class 'grabcode' which can now be used to properly style the form (the styling still needs to be done, though, and will make the embedded style for the button superfluous). --JavaWoman
/**
* Downloads a code snippet as a file.
*
* Usage: The handler is called from a form appended to any code block in Wikka pages.
*
* @package Handlers
* @name grabcode
* @author {@link http://wikka.jsnx.com/DarTar Dario Taraborelli}
* @version 0.1
* @since Wikka 1.1.X
* @todo - address header issues with different browsers.
* - modify formatter to take care of filename.
*/
//header('Content-type: application/force-download');
header('Content-type: text/plain');
elseif ($this->method == "raw")
{
header("Content-type: text/plain");
print($this->Method($this->method));
}
elseif ($this->method == "raw")
{
header("Content-type: text/plain");
print($this->Method($this->method));
}
// grabcode handler
elseif ($this->method == "grabcode")
{
print($this->Method($this->method));
}
~-It seems that ##Content-type: application/force-download## doesn't work under M$Windows/IE so I changed it back to ##Content-type: text/plain## which should just display a text version of the code snippet.
CategoryDevelopmentHandlers
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki