Oznámení

Provoz fóra byl ukončen

Texy*Handlers na oficiálnom webe

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 &rsaquo; '.$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