Oznámení
Provoz fóra byl ukončen
Texy*Handlers na oficiálnom webe
Upozornění: Tohle vlákno je hodně staré.
před 11 lety
- _rasel^
- Člen | 44
Zdravím.
Za môjho pohľadu patria Handlers medzi najzaujímavejšie veci na Texy. Čím sa Texy oveľa viac vzďaľuje od písacích nástrojov typu WYSIWYG a dáva článku nielen validný, sémantický, ale aj multimediálny obsah.
Chcel by so sa opýtať či bo bolo možné pre Handlers zriadiť nejakú špeciálnu sekciu na webovej stránke texy.info, kde by sa zhromažďovali a pribúdali by nové.
Vycucnuté z Texy, ktoré každý pozná:
Flash Handler
/**
* User handler for images
*
* @param TexyHandlerInvocation handler invocation
* @param TexyImage
* @param TexyLink
* @return TexyHtml|string|FALSE
*/
function imageHandlerFlash($invocation, $image, $link)
{
$texy = $invocation->getTexy();
if (substr($image->URL, -4) === '.swf') // accepts only *.swf
{
$movie = Texy::prependRoot($image->URL, $texy->imageModule->root);
$dimensions =
($image->width ? 'width="'.$image->width.'" ' : '')
. ($image->height ? 'width="'.$image->height.'" ' : '');
$movie = htmlSpecialChars($movie);
$altContent = htmlSpecialChars($image->modifier->title);
// @see https://www.latrine.cz/how-to-correctly-insert-a-flash-into-xhtml
$code = '
<!--[if !IE]> -->
<object type="application/x-shockwave-flash" data="'.$movie.'" '.$dimensions.'>
<!-- <![endif]-->
<!--[if IE]>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" '.$dimensions.'
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0">
<param name="movie" value="'.$movie.'" />
<!--><!--dgx-->
<p>'.$altContent.'</p>
</object>
<!-- <![endif]-->
';
return $texy->protect($code, TEXY_CONTENT_BLOCK); // or Texy::CONTENT_BLOCK in PHP 5
}
return $invocation->proceed();
}
YouTube Handler
/**
* User handler for images
*
* @param TexyHandlerInvocation handler invocation
* @param TexyImage
* @param TexyLink
* @return TexyHtml|string|FALSE
*/
function full_url()
{
$s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : "";
$protocol = substr(strtolower($_SERVER["SERVER_PROTOCOL"]), 0, strpos(strtolower($_SERVER["SERVER_PROTOCOL"]), "/")) . $s;
$port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
return $protocol . "://" . $_SERVER['SERVER_NAME'] . $port . $_SERVER['REQUEST_URI'];
}
function imageHandlerYouTube($invocation, $image, $link)
{
$parts = explode(':', $image->URL);
if (count($parts) !== 2) return $invocation->proceed();
switch ($parts[0]) {
case 'youtube':
$video = htmlSpecialChars($parts[1]);
$dimensions = 'width="'.($image->width ? $image->width : 480).'" height="'.($image->height ? $image->height : 395).'"';
$code = '<div class="youtube"><object '.$dimensions.'>'
. '<param name="movie" value="http://www.youtube.com/v/'.$video.'" /><param name="wmode" value="transparent" />'
. '<embed src="http://www.youtube.com/v/'.$video.'" type="application/x-shockwave-flash" wmode="transparent" '.$dimensions.' /></object><p>Zdroj <a href="http://www.youtube.com/watch?v='.$video.'&eurl='.full_url().'">YouTube › '.$video.'</a></p></div>';
$texy = $invocation->getTexy();
return $texy->protect($code, TEXY_CONTENT_BLOCK); // or Texy::CONTENT_BLOCK in PHP 5
}
return $invocation->proceed();
}
FSHL Handler
/**
* User handler for code block
*
* @param TexyHandlerInvocation handler invocation
* @param string block type
* @param string text to highlight
* @param string language
* @param TexyModifier modifier
* @return TexyHtml
*/
function blockHandlerFSHL($invocation, $blocktype, $content, $lang, $modifier)
{
if ($blocktype !== 'block/code') {
return $invocation->proceed();
}
$lang = strtoupper($lang);
if ($lang == 'JAVASCRIPT') $lang = 'JS';
$parser = new fshlParser('HTML_UTF8', P_TAB_INDENT);
if (!$parser->isLanguage($lang)) {
return $invocation->proceed();
}
$texy = $invocation->getTexy();
$content = $texy->blockModule->outdent($content);
$content = $parser->highlightString($lang, $content);
$content = $texy->protect($content, TEXY_CONTENT_BLOCK); // or Texy::CONTENT_BLOCK in PHP 5
$elPre = TexyHtml::el('pre');
if ($modifier) $modifier->decorate($texy, $elPre);
$elPre->attrs['class'] = strtolower($lang);
$elCode = $elPre->create('code', $content);
return $elPre;
}
Editoval _rasel^ (11. 3. 2008 22:45)
před 11 lety
- jstastny
- Člen | 2
Handler na nastavení třídy tabulce:
Vlákno, kde se to řešilo je už uzavřené. Je v něm ale řešení pro starou verzi Texy!. V nové verzi jsem to vyřešil takto:
// Prida tabulce tridu .class
function afterTable($parser, $element, $modifier)
{
$element->attrs['class'] = 'table';
}
před 11 lety
- David Grudl
- Nette Core | 6806
díky za upozornění, opravil jsem to